{
  "abi": [
    {
      "type": "function",
      "name": "NAME",
      "inputs": [],
      "outputs": [{ "name": "", "type": "string", "internalType": "string" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "UPGRADE_INTERFACE_VERSION",
      "inputs": [],
      "outputs": [{ "name": "", "type": "string", "internalType": "string" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "VERSION",
      "inputs": [],
      "outputs": [{ "name": "", "type": "string", "internalType": "string" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "activeSessions",
      "inputs": [
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "uint256", "internalType": "uint256" }
      ],
      "outputs": [
        { "name": "expiry", "type": "uint48", "internalType": "uint48" },
        { "name": "owner", "type": "address", "internalType": "address" },
        { "name": "account", "type": "address", "internalType": "address" }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "addSigner",
      "inputs": [
        { "name": "signer", "type": "address", "internalType": "address" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "checkAfterExecution",
      "inputs": [
        { "name": "", "type": "bytes32", "internalType": "bytes32" },
        { "name": "", "type": "bool", "internalType": "bool" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "checkTransaction",
      "inputs": [
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "uint256", "internalType": "uint256" },
        { "name": "", "type": "bytes", "internalType": "bytes" },
        { "name": "", "type": "uint8", "internalType": "enum Enum.Operation" },
        { "name": "", "type": "uint256", "internalType": "uint256" },
        { "name": "", "type": "uint256", "internalType": "uint256" },
        { "name": "", "type": "uint256", "internalType": "uint256" },
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "address", "internalType": "address payable" },
        { "name": "", "type": "bytes", "internalType": "bytes" },
        { "name": "msgSender", "type": "address", "internalType": "address" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "confirm",
      "inputs": [
        {
          "name": "sessionRequestHash",
          "type": "bytes32",
          "internalType": "bytes32"
        },
        { "name": "sessionHash", "type": "bytes32", "internalType": "bytes32" },
        {
          "name": "ownerSignedSessionHash",
          "type": "bytes",
          "internalType": "bytes"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "contractExists",
      "inputs": [
        {
          "name": "contractAddress",
          "type": "address",
          "internalType": "address"
        }
      ],
      "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "domainSeparator",
      "inputs": [],
      "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "encodeMessageDataForSafe",
      "inputs": [
        { "name": "safe", "type": "address", "internalType": "contract Safe" },
        { "name": "message", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getChainId",
      "inputs": [],
      "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getMessageHash",
      "inputs": [
        { "name": "message", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getMessageHashForSafe",
      "inputs": [
        { "name": "safe", "type": "address", "internalType": "contract Safe" },
        { "name": "message", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getModules",
      "inputs": [],
      "outputs": [
        { "name": "", "type": "address[]", "internalType": "address[]" }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "initialize",
      "inputs": [
        { "name": "_owner", "type": "address", "internalType": "address" },
        {
          "name": "_twoFAFactory",
          "type": "address",
          "internalType": "address"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "isExpired",
      "inputs": [
        { "name": "account", "type": "address", "internalType": "address" },
        { "name": "_owner", "type": "address", "internalType": "address" }
      ],
      "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "isValidSignature",
      "inputs": [
        { "name": "_dataHash", "type": "bytes32", "internalType": "bytes32" },
        { "name": "_signature", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "isValidSignature",
      "inputs": [
        { "name": "_data", "type": "bytes", "internalType": "bytes" },
        { "name": "_signature", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "onERC1155BatchReceived",
      "inputs": [
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "uint256[]", "internalType": "uint256[]" },
        { "name": "", "type": "uint256[]", "internalType": "uint256[]" },
        { "name": "", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }],
      "stateMutability": "pure"
    },
    {
      "type": "function",
      "name": "onERC1155Received",
      "inputs": [
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "uint256", "internalType": "uint256" },
        { "name": "", "type": "uint256", "internalType": "uint256" },
        { "name": "", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }],
      "stateMutability": "pure"
    },
    {
      "type": "function",
      "name": "onERC721Received",
      "inputs": [
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "uint256", "internalType": "uint256" },
        { "name": "", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }],
      "stateMutability": "pure"
    },
    {
      "type": "function",
      "name": "owner",
      "inputs": [],
      "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "proxiableUUID",
      "inputs": [],
      "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "removeExpiredSessions",
      "inputs": [
        { "name": "sender", "type": "address", "internalType": "address" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "renounceOwnership",
      "inputs": [],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "request",
      "inputs": [
        { "name": "sessionSalt", "type": "bytes32", "internalType": "bytes32" },
        {
          "name": "sessionRequestHash",
          "type": "bytes32",
          "internalType": "bytes32"
        },
        {
          "name": "signedSessionRequestHash",
          "type": "bytes",
          "internalType": "bytes"
        },
        {
          "name": "signedSessionHash",
          "type": "bytes",
          "internalType": "bytes"
        },
        { "name": "sessionExpiry", "type": "uint48", "internalType": "uint48" },
        {
          "name": "challengeExpiry",
          "type": "uint48",
          "internalType": "uint48"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "revoke",
      "inputs": [
        { "name": "signer", "type": "address", "internalType": "address" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "sessionRequests",
      "inputs": [
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "bytes32", "internalType": "bytes32" }
      ],
      "outputs": [
        { "name": "expiry", "type": "uint48", "internalType": "uint48" },
        {
          "name": "challengeExpiry",
          "type": "uint48",
          "internalType": "uint48"
        },
        {
          "name": "signedSessionHash",
          "type": "bytes",
          "internalType": "bytes"
        },
        { "name": "provider", "type": "address", "internalType": "address" },
        { "name": "owner", "type": "address", "internalType": "address" },
        { "name": "account", "type": "address", "internalType": "address" }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "simulate",
      "inputs": [
        {
          "name": "targetContract",
          "type": "address",
          "internalType": "address"
        },
        { "name": "calldataPayload", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [
        { "name": "response", "type": "bytes", "internalType": "bytes" }
      ],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "supportsInterface",
      "inputs": [
        { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" }
      ],
      "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "tokensReceived",
      "inputs": [
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "uint256", "internalType": "uint256" },
        { "name": "", "type": "bytes", "internalType": "bytes" },
        { "name": "", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [],
      "stateMutability": "pure"
    },
    {
      "type": "function",
      "name": "transferOwnership",
      "inputs": [
        { "name": "newOwner", "type": "address", "internalType": "address" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "twoFAFactory",
      "inputs": [],
      "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "upgradeToAndCall",
      "inputs": [
        {
          "name": "newImplementation",
          "type": "address",
          "internalType": "address"
        },
        { "name": "data", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "event",
      "name": "Confirmed",
      "inputs": [
        {
          "name": "provider",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        },
        {
          "name": "account",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        },
        {
          "name": "sessionOwner",
          "type": "address",
          "indexed": false,
          "internalType": "address"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Initialized",
      "inputs": [
        {
          "name": "version",
          "type": "uint64",
          "indexed": false,
          "internalType": "uint64"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "OwnershipTransferred",
      "inputs": [
        {
          "name": "previousOwner",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        },
        {
          "name": "newOwner",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Requested",
      "inputs": [
        {
          "name": "provider",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        },
        {
          "name": "sessionRequestHash",
          "type": "bytes32",
          "indexed": false,
          "internalType": "bytes32"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Upgraded",
      "inputs": [
        {
          "name": "implementation",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        }
      ],
      "anonymous": false
    },
    { "type": "error", "name": "AccountNotCreated", "inputs": [] },
    {
      "type": "error",
      "name": "AddressEmptyCode",
      "inputs": [
        { "name": "target", "type": "address", "internalType": "address" }
      ]
    },
    { "type": "error", "name": "ArrayLimitExceeded", "inputs": [] },
    { "type": "error", "name": "ChallengeExpired", "inputs": [] },
    {
      "type": "error",
      "name": "ERC1967InvalidImplementation",
      "inputs": [
        {
          "name": "implementation",
          "type": "address",
          "internalType": "address"
        }
      ]
    },
    { "type": "error", "name": "ERC1967NonPayable", "inputs": [] },
    { "type": "error", "name": "FailedInnerCall", "inputs": [] },
    { "type": "error", "name": "FailedToAddSigner", "inputs": [] },
    { "type": "error", "name": "FailedToRemoveSigner", "inputs": [] },
    { "type": "error", "name": "InvalidInitialization", "inputs": [] },
    { "type": "error", "name": "InvalidOwnerSignedSessionHash", "inputs": [] },
    { "type": "error", "name": "InvalidProvider", "inputs": [] },
    { "type": "error", "name": "InvalidSessionData", "inputs": [] },
    { "type": "error", "name": "NotInitializing", "inputs": [] },
    {
      "type": "error",
      "name": "OwnableInvalidOwner",
      "inputs": [
        { "name": "owner", "type": "address", "internalType": "address" }
      ]
    },
    {
      "type": "error",
      "name": "OwnableUnauthorizedAccount",
      "inputs": [
        { "name": "account", "type": "address", "internalType": "address" }
      ]
    },
    { "type": "error", "name": "ReentrancyGuardReentrantCall", "inputs": [] },
    { "type": "error", "name": "SessionOwnerIsProvider", "inputs": [] },
    { "type": "error", "name": "SessionRequestExpired", "inputs": [] },
    { "type": "error", "name": "SessionRequestNotFound", "inputs": [] },
    { "type": "error", "name": "SignerAlreadyExists", "inputs": [] },
    { "type": "error", "name": "SignerNotOwner", "inputs": [] },
    { "type": "error", "name": "UUPSUnauthorizedCallContext", "inputs": [] },
    {
      "type": "error",
      "name": "UUPSUnsupportedProxiableUUID",
      "inputs": [
        { "name": "slot", "type": "bytes32", "internalType": "bytes32" }
      ]
    }
  ],
  "bytecode": {
    "object": "0x60a06040523060805234801561001457600080fd5b506080516139ee61003e60003960008181611d1701528181611d400152611e8101526139ee6000f3fe6080604052600436106102035760003560e01c806375f0bb5211610118578063bd61951d116100a0578063f23a6e611161006f578063f23a6e611461068f578063f2fde38b146106bc578063f681de3b146106dc578063f698da251461070e578063ffa1ad741461072357600080fd5b8063bd61951d1461060f578063e26be2101461062f578063eb12d61e1461064f578063ee2b8f3e1461066f57600080fd5b80639b7177e7116100e75780639b7177e714610533578063a3f4df7e14610553578063ad3cb1cc1461058d578063b2494df3146105be578063bc197c81146105e057600080fd5b806375f0bb52146104825780637709bc78146104a25780638da5cb5b146104c3578063932713681461051457600080fd5b806345fd13151161019b5780635e413c5a1161016a5780635e413c5a146103ed5780636290319a1461040d5780636ac247841461042d578063715018a61461044d57806374a8f1031461046257600080fd5b806345fd131514610357578063485cc955146103a55780634f1ef286146103c557806352d1902d146103d857600080fd5b80631626ba7e116101d75780631626ba7e146102d757806320c13b0b146102f757806323031640146103175780633408e4701461034457600080fd5b806223de291461020857806301ffc9a71461022f5780630a1028c414610264578063150b7a0214610292575b600080fd5b34801561021457600080fd5b5061022d610223366004612ccd565b5050505050505050565b005b34801561023b57600080fd5b5061024f61024a366004612d93565b610754565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f366004612e65565b61078b565b60405190815260200161025b565b34801561029e57600080fd5b506102be6102ad366004612ea1565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161025b565b3480156102e357600080fd5b506102be6102f2366004612f13565b610797565b34801561030357600080fd5b506102be610312366004612f5e565b610855565b34801561032357600080fd5b50610337610332366004612fc1565b6109a0565b60405161025b9190613056565b34801561035057600080fd5b5046610284565b34801561036357600080fd5b50610377610372366004613069565b610ab2565b6040805165ffffffffffff90941684526001600160a01b03928316602085015291169082015260600161025b565b3480156103b157600080fd5b5061022d6103c0366004613095565b610b09565b61022d6103d3366004612fc1565b610c43565b3480156103e457600080fd5b50610284610c5e565b3480156103f957600080fd5b5061022d6104083660046130ce565b610c7b565b34801561041957600080fd5b5061024f610428366004613095565b610f37565b34801561043957600080fd5b50610284610448366004612fc1565b6110a6565b34801561045957600080fd5b5061022d6110c1565b34801561046e57600080fd5b5061022d61047d3660046130ce565b6110d5565b34801561048e57600080fd5b5061022d61049d3660046130fa565b611186565b3480156104ae57600080fd5b5061024f6104bd3660046130ce565b3b151590565b3480156104cf57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161025b565b34801561052057600080fd5b5061022d61052f3660046131ec565b5050565b34801561053f57600080fd5b5061022d61054e366004613227565b61119c565b34801561055f57600080fd5b506103376040518060400160405280600e81526020016d53657373696f6e204d6f64756c6560901b81525081565b34801561059957600080fd5b50610337604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156105ca57600080fd5b506105d36114ef565b60405161025b91906132ca565b3480156105ec57600080fd5b506102be6105fb36600461335b565b63bc197c8160e01b98975050505050505050565b34801561061b57600080fd5b5061033761062a3660046133f8565b61156a565b34801561063b57600080fd5b5061022d61064a366004613433565b6115b4565b34801561065b57600080fd5b5061022d61066a3660046130ce565b611a18565b34801561067b57600080fd5b506000546104fc906001600160a01b031681565b34801561069b57600080fd5b506102be6106aa366004613485565b63f23a6e6160e01b9695505050505050565b3480156106c857600080fd5b5061022d6106d73660046130ce565b611ac7565b3480156106e857600080fd5b506106fc6106f7366004613069565b611b02565b60405161025b96959493929190613500565b34801561071a57600080fd5b50610284611be5565b34801561072f57600080fd5b5061033760405180604001604052806005815260200164302e302e3360d81b81525081565b60006001600160e01b0319821663736bd41d60e11b148061078557506001600160e01b031982166301ffc9a760e01b145b92915050565b600061078533836110a6565b60408051602080820186905282518083039091018152818301928390526320c13b0b60e01b9092526000913391839183916320c13b0b916107de9189908990604401613556565b602060405180830381865afa1580156107fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081f919061359c565b90506001600160e01b031981166320c13b0b60e01b14610840576000610849565b630b135d3f60e11b5b925050505b9392505050565b6000338161086382866109a0565b8051602082012085519192509060000361092d57604051635ae6bd3760e01b8152600481018290526001600160a01b03841690635ae6bd3790602401602060405180830381865afa1580156108bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e091906135b9565b6000036109285760405162461bcd60e51b815260206004820152601160248201527012185cda081b9bdd08185c1c1c9bdd9959607a1b60448201526064015b60405180910390fd5b61098e565b60405163934f3a1160e01b81526001600160a01b0384169063934f3a119061095d90849086908a906004016135d2565b60006040518083038186803b15801561097557600080fd5b505afa158015610989573d6000803e3d6000fd5b505050505b506320c13b0b60e01b95945050505050565b606060007f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60001b83805190602001206040516020016109ea929190918252602082015260400190565b604051602081830303815290604052805190602001209050601960f81b600160f81b856001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6e91906135b9565b6040516001600160f81b0319938416602082015292909116602183015260228201526042810182905260620160405160208183030381529060405291505092915050565b60026020528160005260406000208181548110610ace57600080fd5b60009182526020909120600290910201805460019091015465ffffffffffff821693506001600160a01b03600160301b909204821692501683565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610b4e5750825b90506000826001600160401b03166001148015610b6a5750303b155b905081158015610b78575080155b15610b965760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610bc057845460ff60401b1916600160401b1785555b610bc987611ce3565b610bd1611cf4565b610bd9611cfc565b600080546001600160a01b0319166001600160a01b0388161790558315610c3a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610c4b611d0c565b610c5482611db1565b61052f8282611db9565b6000610c68611e76565b5060008051602061397983398151915290565b6001600160a01b0381166000908152600260205260408120549003610c9d5750565b8060005b6001600160a01b038316600090815260026020526040902054811015610f32576001600160a01b0383166000908152600260205260409020805442919083908110610cee57610cee613607565b600091825260209091206002909102015465ffffffffffff161015610dfe576001600160a01b03831660009081526002602052604090208054610da4919083908110610d3c57610d3c613607565b60009182526020808320600292830201600101546001600160a01b038881168552929091526040909220805491909216919084908110610d7e57610d7e613607565b6000918252602090912060029091020154600160301b90046001600160a01b0316611ebf565b6001600160a01b0383166000908152600260205260409020805482908110610dce57610dce613607565b6000918252602090912060029091020180546001600160d01b031916815560010180546001600160a01b03191690555b816001600160a01b0316632f54bf6e60026000866001600160a01b03166001600160a01b031681526020019081526020016000208381548110610e4357610e43613607565b600091825260209091206002909102015460405160e083901b6001600160e01b0319168152600160301b9091046001600160a01b03166004820152602401602060405180830381865afa158015610e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec2919061361d565b610f20576001600160a01b0383166000908152600260205260409020805482908110610ef057610ef0613607565b6000918252602090912060029091020180546001600160d01b031916815560010180546001600160a01b03191690555b80610f2a81613650565b915050610ca1565b505050565b6040516317aa5fb760e11b81526001600160a01b0382811660048301526000918291851690632f54bf6e90602401602060405180830381865afa158015610f82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa6919061361d565b905080610fb7576001915050610785565b600160005b6001600160a01b03861660009081526002602052604090205481101561109d576001600160a01b0386811660009081526002602052604090208054918716918390811061100b5761100b613607565b6000918252602090912060029091020154600160301b90046001600160a01b031614801561107d57506001600160a01b038616600090815260026020526040902080544291908390811061106157611061613607565b600091825260209091206002909102015465ffffffffffff1610155b1561108b576000915061109d565b8061109581613650565b915050610fbc565b50949350505050565b60006110b283836109a0565b80519060200120905092915050565b6110c9612194565b6110d360006121ef565b565b333b6110f45760405163041bbac760e31b815260040160405180910390fd5b6040516317aa5fb760e11b81526001600160a01b03821660048201523390632f54bf6e90602401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c919061361d565b611179576040516328e32f5760e11b815260040160405180910390fd5b6111833382611ebf565b50565b61118f81610c7b565b5050505050505050505050565b60008265ffffffffffff161180156111bb5750428265ffffffffffff16105b156111d957604051631c88b45d60e11b815260040160405180910390fd5b60008165ffffffffffff161180156111f85750428165ffffffffffff16105b156112165760405163f06506c560e01b815260040160405180910390fd5b3360008960008054604051635fbfb9cf60e01b81526001600160a01b0386811660048301526024820185905293945091921690635fbfb9cf906044016020604051808303816000875af1158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190613669565b90506112a081612260565b60006112e28b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122e492505050565b9050836001600160a01b0316816001600160a01b03160361131657604051632ed3775360e11b815260040160405180910390fd5b6040518060c001604052808765ffffffffffff1681526020018665ffffffffffff16815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152602001856001600160a01b03168152602001826001600160a01b03168152602001836001600160a01b031681525060016000866001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160010190816114539190613706565b5060608201516002820180546001600160a01b03199081166001600160a01b03938416179091556080840151600384018054831691841691909117905560a09093015160049092018054909316918116919091179091556040518c8152908516907f070669e6be82aa9b077a096b0f9617893a4dc5cb05897e27fd7a6112c8e6629e9060200160405180910390a2505050505050505050505050565b604051636617c22960e11b815260016004820152600a60248201526060903390600090829063cc2f845290604401600060405180830381865afa15801561153a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611562919081019061384d565b509392505050565b606060405163b4faba0960e01b8152600436036004808301376020600036836000335af1505060203d036040519150808201604052806020833e5060005161084e57805160208201fd5b8315806115bf575082155b806115c8575080155b156115e657604051639bdfc59f60e01b815260040160405180910390fd5b3360009081526001602081815260408084208885528252808420815160c081018352815465ffffffffffff8082168352600160301b909104169381019390935292830180549293929184019161163b90613686565b80601f016020809104026020016040519081016040528092919081815260200182805461166790613686565b80156116b45780601f10611689576101008083540402835291602001916116b4565b820191906000526020600020905b81548152906001019060200180831161169757829003601f168201915b505050918352505060028201546001600160a01b039081166020830152600383015481166040830152600490920154821660609091015260808201519192501661171157604051631ae9d48f60e11b815260040160405180910390fd5b805165ffffffffffff1615801590611734575042816000015165ffffffffffff16105b1561175257604051631c88b45d60e11b815260040160405180910390fd5b6000816020015165ffffffffffff16118015611779575042816020015165ffffffffffff16105b156117975760405163f06506c560e01b815260040160405180910390fd5b606081015133906001600160a01b031681146117c657604051633b136dc160e11b815260040160405180910390fd5b6117d58186846040015161231d565b6117f257604051633b136dc160e11b815260040160405180910390fd5b81608001516001600160a01b03166118408686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122e492505050565b6001600160a01b031614611867576040516389d52d5f60e01b815260040160405180910390fd5b6118798260a00151836080015161247b565b60a08201516001600160a01b031660009081526002602052604090205460001981106118b857604051635988e4b960e11b815260040160405180910390fd5b60a0830180516001600160a01b03908116600090815260026020818152604080842081516060810183528a5165ffffffffffff908116825260808c015188168286019081529851881682850190815283546001818101865594895286892093519702909201805499518916600160301b026001600160d01b0319909a169690911695909517979097178455955192860180549386166001600160a01b03199094169390931790925592861682528383528082208b835290925290812080546bffffffffffffffffffffffff191681559161199490830182612c12565b506002810180546001600160a01b03199081169091556003820180548216905560049091018054909116905560a083015160808401516040516001600160a01b03918216815291811691908416907f603c57ecb4a9802537649ceb6523e5d48c939e7856768ce6f9b3128a889a5cfe9060200160405180910390a350505050505050565b333b611a375760405163041bbac760e31b815260040160405180910390fd5b6040516317aa5fb760e11b81526001600160a01b03821660048201523390632f54bf6e90602401602060405180830381865afa158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9f919061361d565b15611abd57604051630e1857b360e21b815260040160405180910390fd5b611183338261247b565b611acf612194565b6001600160a01b038116611af957604051631e4fbdf760e01b81526000600482015260240161091f565b611183816121ef565b600160208181526000938452604080852090915291835291208054918101805465ffffffffffff80851694600160301b900416929190611b4190613686565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6d90613686565b8015611bba5780601f10611b8f57610100808354040283529160200191611bba565b820191906000526020600020905b815481529060010190602001808311611b9d57829003601f168201915b505050506002830154600384015460049094015492936001600160a01b039182169390821692501686565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b6040518060400160405280600e81526020016d53657373696f6e204d6f64756c6560901b815250604051602001611c429190613893565b6040516020818303038152906040528051906020012060405180604001604052806005815260200164302e302e3360d81b815250604051602001611c869190613893565b60405160208183030381529060405280519060200120611ca34690565b604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611ceb6126fb565b61118381612744565b6110d36126fb565b611d046126fb565b6110d361274c565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611d9357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611d87600080516020613979833981519152546001600160a01b031690565b6001600160a01b031614155b156110d35760405163703e46dd60e11b815260040160405180910390fd5b611183612194565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e13575060408051601f3d908101601f19168201909252611e10918101906135b9565b60015b611e3b57604051634c9c8ce360e01b81526001600160a01b038316600482015260240161091f565b6000805160206139798339815191528114611e6c57604051632a87526960e21b81526004810182905260240161091f565b610f32838361277a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110d35760405163703e46dd60e11b815260040160405180910390fd5b6040516317aa5fb760e11b81526001600160a01b038281166004830152839190821690632f54bf6e90602401602060405180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c919061361d565b611f49576040516328e32f5760e11b815260040160405180910390fd5b6000816001600160a01b031663e75235b86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad91906135b9565b90506000826001600160a01b031663a0e67e2b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611fef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261201791908101906138af565b905060018460005b835181101561209e57866001600160a01b031684828151811061204457612044613607565b60200260200101516001600160a01b03160361208c578015612087578361206c6001836138e3565b8151811061207c5761207c613607565b602002602001015192505b61209e565b8061209681613650565b91505061201f565b506040516001600160a01b038084166024830152821660448201526064810185905260009060840160408051601f198184030181529181526020820180516001600160e01b031663f8dc5dd960e01b1790525163468721a760e01b81529091506000906001600160a01b038a169063468721a790612126908c908590879082906004016138f6565b6020604051808303816000875af1158015612145573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612169919061361d565b905080612189576040516310da247360e01b815260040160405180910390fd5b505050505050505050565b336121c67f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146110d35760405163118cdaa760e01b815233600482015260240161091f565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b604080516020810182526000808252915163468721a760e01b815290916001600160a01b0384169163468721a7916122a191869190869082906004016138f6565b6020604051808303816000875af11580156122c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f32919061361d565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c839052603c812061084e90836127d0565b60008061232a84846122e4565b90506001600160a01b03811661234457600091505061084e565b846001600160a01b0316816001600160a01b03160361236757600191505061084e565b843b61237757600091505061084e565b604051630b135d3f60e11b81526001600160a01b03861690631626ba7e906123a5908790879060040161394c565b602060405180830381865afa9250505080156123de575060408051601f3d908101601f191682019092526123db9181019061359c565b60015b15612408576001600160e01b03198116630b135d3f60e11b036124065760019250505061084e565b505b6040516317aa5fb760e11b81526001600160a01b038281166004830152861690632f54bf6e90602401602060405180830381865afa15801561244e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612472919061361d565b95945050505050565b813b61249a5760405163041bbac760e31b815260040160405180910390fd5b6000826001600160a01b031663a0e67e2b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261250291908101906138af565b5190506032612512826001613965565b11156125aa576125aa83846001600160a01b031663a0e67e2b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561255a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261258291908101906138af565b61258d6001856138e3565b8151811061259d5761259d613607565b6020026020010151611ebf565b6000836001600160a01b031663e75235b86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260e91906135b9565b6040516001600160a01b03851660248201526044810182905290915060009060640160408051601f198184030181529181526020820180516001600160e01b0316630d582f1360e01b1790525163468721a760e01b81529091506000906001600160a01b0387169063468721a7906126909089908590879082906004016138f6565b6020604051808303816000875af11580156126af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d3919061361d565b9050806126f35760405163dfae2d2f60e01b815260040160405180910390fd5b505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166110d357604051631afcd79f60e31b815260040160405180910390fd5b611acf6126fb565b6127546126fb565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61278382612a36565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156127c857610f328282612a9b565b61052f612b08565b600081516041146128375760405162461bcd60e51b815260206004820152603a602482015260008051602061399983398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000606482015260840161091f565b60008260408151811061284c5761284c613607565b016020015160f81c905060006128628482612b27565b90506000612871856020612b27565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08111156128f75760405162461bcd60e51b815260206004820152603d602482015260008051602061399983398151915260448201527f3a20696e76616c6964207369676e6174757265202773272076616c7565000000606482015260840161091f565b8260ff16601b1415801561290f57508260ff16601c14155b156129705760405162461bcd60e51b815260206004820152603d602482015260008051602061399983398151915260448201527f3a20696e76616c6964207369676e6174757265202776272076616c7565000000606482015260840161091f565b60408051600081526020810180835288905260ff851691810191909152606081018390526080810182905260019060a0016020604051602081039080840390855afa1580156129c3573d6000803e3d6000fd5b5050604051601f1901519450506001600160a01b038416612a2d5760405162461bcd60e51b8152602060048201526030602482015260008051602061399983398151915260448201526f1d1024a72b20a624a22fa9a4a3a722a960811b606482015260840161091f565b50505092915050565b806001600160a01b03163b600003612a6c57604051634c9c8ce360e01b81526001600160a01b038216600482015260240161091f565b60008051602061397983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612ab89190613893565b600060405180830381855af49150503d8060008114612af3576040519150601f19603f3d011682016040523d82523d6000602084013e612af8565b606091505b5091509150612472858383612b8d565b34156110d35760405163b398979f60e01b815260040160405180910390fd5b6000612b34826020613965565b83511015612b845760405162461bcd60e51b815260206004820181905260248201527f72656164427974657333323a20696e76616c69642064617461206c656e677468604482015260640161091f565b50016020015190565b606082612ba257612b9d82612be9565b61084e565b8151158015612bb957506001600160a01b0384163b155b15612be257604051639996b31560e01b81526001600160a01b038516600482015260240161091f565b508061084e565b805115612bf95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054612c1e90613686565b6000825580601f10612c2e575050565b601f01602090049060005260206000209081019061118391905b80821115612c5c5760008155600101612c48565b5090565b6001600160a01b038116811461118357600080fd5b8035612c8081612c60565b919050565b60008083601f840112612c9757600080fd5b5081356001600160401b03811115612cae57600080fd5b602083019150836020828501011115612cc657600080fd5b9250929050565b60008060008060008060008060c0898b031215612ce957600080fd5b8835612cf481612c60565b97506020890135612d0481612c60565b96506040890135612d1481612c60565b95506060890135945060808901356001600160401b0380821115612d3757600080fd5b612d438c838d01612c85565b909650945060a08b0135915080821115612d5c57600080fd5b50612d698b828c01612c85565b999c989b5096995094979396929594505050565b6001600160e01b03198116811461118357600080fd5b600060208284031215612da557600080fd5b813561084e81612d7d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612dee57612dee612db0565b604052919050565b600082601f830112612e0757600080fd5b81356001600160401b03811115612e2057612e20612db0565b612e33601f8201601f1916602001612dc6565b818152846020838601011115612e4857600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612e7757600080fd5b81356001600160401b03811115612e8d57600080fd5b612e9984828501612df6565b949350505050565b600080600080600060808688031215612eb957600080fd5b8535612ec481612c60565b94506020860135612ed481612c60565b93506040860135925060608601356001600160401b03811115612ef657600080fd5b612f0288828901612c85565b969995985093965092949392505050565b600080600060408486031215612f2857600080fd5b8335925060208401356001600160401b03811115612f4557600080fd5b612f5186828701612c85565b9497909650939450505050565b60008060408385031215612f7157600080fd5b82356001600160401b0380821115612f8857600080fd5b612f9486838701612df6565b93506020850135915080821115612faa57600080fd5b50612fb785828601612df6565b9150509250929050565b60008060408385031215612fd457600080fd5b8235612fdf81612c60565b915060208301356001600160401b03811115612ffa57600080fd5b612fb785828601612df6565b60005b83811015613021578181015183820152602001613009565b50506000910152565b60008151808452613042816020860160208601613006565b601f01601f19169290920160200192915050565b60208152600061084e602083018461302a565b6000806040838503121561307c57600080fd5b823561308781612c60565b946020939093013593505050565b600080604083850312156130a857600080fd5b82356130b381612c60565b915060208301356130c381612c60565b809150509250929050565b6000602082840312156130e057600080fd5b813561084e81612c60565b803560028110612c8057600080fd5b60008060008060008060008060008060006101608c8e03121561311c57600080fd5b6131258c612c75565b9a5060208c013599506001600160401b038060408e0135111561314757600080fd5b6131578e60408f01358f01612df6565b995061316560608e016130eb565b985060808d0135975060a08d0135965060c08d0135955061318860e08e01612c75565b94506131976101008e01612c75565b9350806101208e013511156131ab57600080fd5b506131bd8d6101208e01358e01612df6565b91506131cc6101408d01612c75565b90509295989b509295989b9093969950565b801515811461118357600080fd5b600080604083850312156131ff57600080fd5b8235915060208301356130c3816131de565b803565ffffffffffff81168114612c8057600080fd5b60008060008060008060008060c0898b03121561324357600080fd5b883597506020890135965060408901356001600160401b038082111561326857600080fd5b6132748c838d01612c85565b909850965060608b013591508082111561328d57600080fd5b5061329a8b828c01612c85565b90955093506132ad905060808a01613211565b91506132bb60a08a01613211565b90509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b8181101561330b5783516001600160a01b0316835292840192918401916001016132e6565b50909695505050505050565b60008083601f84011261332957600080fd5b5081356001600160401b0381111561334057600080fd5b6020830191508360208260051b8501011115612cc657600080fd5b60008060008060008060008060a0898b03121561337757600080fd5b883561338281612c60565b9750602089013561339281612c60565b965060408901356001600160401b03808211156133ae57600080fd5b6133ba8c838d01613317565b909850965060608b01359150808211156133d357600080fd5b6133df8c838d01613317565b909650945060808b0135915080821115612d5c57600080fd5b60008060006040848603121561340d57600080fd5b833561341881612c60565b925060208401356001600160401b03811115612f4557600080fd5b6000806000806060858703121561344957600080fd5b843593506020850135925060408501356001600160401b0381111561346d57600080fd5b61347987828801612c85565b95989497509550505050565b60008060008060008060a0878903121561349e57600080fd5b86356134a981612c60565b955060208701356134b981612c60565b9450604087013593506060870135925060808701356001600160401b038111156134e257600080fd5b6134ee89828a01612c85565b979a9699509497509295939492505050565b600065ffffffffffff808916835280881660208401525060c0604083015261352b60c083018761302a565b6001600160a01b039586166060840152938516608083015250921660a0909201919091529392505050565b604081526000613569604083018661302a565b8281036020840152838152838560208301376000602085830101526020601f19601f860116820101915050949350505050565b6000602082840312156135ae57600080fd5b815161084e81612d7d565b6000602082840312156135cb57600080fd5b5051919050565b8381526060602082015260006135eb606083018561302a565b82810360408401526135fd818561302a565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561362f57600080fd5b815161084e816131de565b634e487b7160e01b600052601160045260246000fd5b6000600182016136625761366261363a565b5060010190565b60006020828403121561367b57600080fd5b815161084e81612c60565b600181811c9082168061369a57607f821691505b6020821081036136ba57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610f3257600081815260208120601f850160051c810160208610156136e75750805b601f850160051c820191505b818110156126f3578281556001016136f3565b81516001600160401b0381111561371f5761371f612db0565b6137338161372d8454613686565b846136c0565b602080601f83116001811461376857600084156137505750858301515b600019600386901b1c1916600185901b1785556126f3565b600085815260208120601f198616915b8281101561379757888601518255948401946001909101908401613778565b50858210156137b55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f8301126137d657600080fd5b815160206001600160401b038211156137f1576137f1612db0565b8160051b613800828201612dc6565b928352848101820192828101908785111561381a57600080fd5b83870192505b8483101561384257825161383381612c60565b82529183019190830190613820565b979650505050505050565b6000806040838503121561386057600080fd5b82516001600160401b0381111561387657600080fd5b613882858286016137c5565b92505060208301516130c381612c60565b600082516138a5818460208701613006565b9190910192915050565b6000602082840312156138c157600080fd5b81516001600160401b038111156138d757600080fd5b612e99848285016137c5565b818103818111156107855761078561363a565b60018060a01b038516815283602082015260806040820152600061391d608083018561302a565b90506002831061393d57634e487b7160e01b600052602160045260246000fd5b82606083015295945050505050565b828152604060208201526000612e99604083018461302a565b808201808211156107855761078561363a56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5369676e617475726556616c696461746f72237265636f7665725369676e6572a264697066735822122011b6d18a7d11abaf22e7086ce9359d1524d29cedb44931e393862fe88156fe1164736f6c63430008140033",
    "sourceMap": "1779:21414:116:-:0;;;1171:4:32;1128:48;;1779:21414:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x6080604052600436106102035760003560e01c806375f0bb5211610118578063bd61951d116100a0578063f23a6e611161006f578063f23a6e611461068f578063f2fde38b146106bc578063f681de3b146106dc578063f698da251461070e578063ffa1ad741461072357600080fd5b8063bd61951d1461060f578063e26be2101461062f578063eb12d61e1461064f578063ee2b8f3e1461066f57600080fd5b80639b7177e7116100e75780639b7177e714610533578063a3f4df7e14610553578063ad3cb1cc1461058d578063b2494df3146105be578063bc197c81146105e057600080fd5b806375f0bb52146104825780637709bc78146104a25780638da5cb5b146104c3578063932713681461051457600080fd5b806345fd13151161019b5780635e413c5a1161016a5780635e413c5a146103ed5780636290319a1461040d5780636ac247841461042d578063715018a61461044d57806374a8f1031461046257600080fd5b806345fd131514610357578063485cc955146103a55780634f1ef286146103c557806352d1902d146103d857600080fd5b80631626ba7e116101d75780631626ba7e146102d757806320c13b0b146102f757806323031640146103175780633408e4701461034457600080fd5b806223de291461020857806301ffc9a71461022f5780630a1028c414610264578063150b7a0214610292575b600080fd5b34801561021457600080fd5b5061022d610223366004612ccd565b5050505050505050565b005b34801561023b57600080fd5b5061024f61024a366004612d93565b610754565b60405190151581526020015b60405180910390f35b34801561027057600080fd5b5061028461027f366004612e65565b61078b565b60405190815260200161025b565b34801561029e57600080fd5b506102be6102ad366004612ea1565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161025b565b3480156102e357600080fd5b506102be6102f2366004612f13565b610797565b34801561030357600080fd5b506102be610312366004612f5e565b610855565b34801561032357600080fd5b50610337610332366004612fc1565b6109a0565b60405161025b9190613056565b34801561035057600080fd5b5046610284565b34801561036357600080fd5b50610377610372366004613069565b610ab2565b6040805165ffffffffffff90941684526001600160a01b03928316602085015291169082015260600161025b565b3480156103b157600080fd5b5061022d6103c0366004613095565b610b09565b61022d6103d3366004612fc1565b610c43565b3480156103e457600080fd5b50610284610c5e565b3480156103f957600080fd5b5061022d6104083660046130ce565b610c7b565b34801561041957600080fd5b5061024f610428366004613095565b610f37565b34801561043957600080fd5b50610284610448366004612fc1565b6110a6565b34801561045957600080fd5b5061022d6110c1565b34801561046e57600080fd5b5061022d61047d3660046130ce565b6110d5565b34801561048e57600080fd5b5061022d61049d3660046130fa565b611186565b3480156104ae57600080fd5b5061024f6104bd3660046130ce565b3b151590565b3480156104cf57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161025b565b34801561052057600080fd5b5061022d61052f3660046131ec565b5050565b34801561053f57600080fd5b5061022d61054e366004613227565b61119c565b34801561055f57600080fd5b506103376040518060400160405280600e81526020016d53657373696f6e204d6f64756c6560901b81525081565b34801561059957600080fd5b50610337604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156105ca57600080fd5b506105d36114ef565b60405161025b91906132ca565b3480156105ec57600080fd5b506102be6105fb36600461335b565b63bc197c8160e01b98975050505050505050565b34801561061b57600080fd5b5061033761062a3660046133f8565b61156a565b34801561063b57600080fd5b5061022d61064a366004613433565b6115b4565b34801561065b57600080fd5b5061022d61066a3660046130ce565b611a18565b34801561067b57600080fd5b506000546104fc906001600160a01b031681565b34801561069b57600080fd5b506102be6106aa366004613485565b63f23a6e6160e01b9695505050505050565b3480156106c857600080fd5b5061022d6106d73660046130ce565b611ac7565b3480156106e857600080fd5b506106fc6106f7366004613069565b611b02565b60405161025b96959493929190613500565b34801561071a57600080fd5b50610284611be5565b34801561072f57600080fd5b5061033760405180604001604052806005815260200164302e302e3360d81b81525081565b60006001600160e01b0319821663736bd41d60e11b148061078557506001600160e01b031982166301ffc9a760e01b145b92915050565b600061078533836110a6565b60408051602080820186905282518083039091018152818301928390526320c13b0b60e01b9092526000913391839183916320c13b0b916107de9189908990604401613556565b602060405180830381865afa1580156107fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081f919061359c565b90506001600160e01b031981166320c13b0b60e01b14610840576000610849565b630b135d3f60e11b5b925050505b9392505050565b6000338161086382866109a0565b8051602082012085519192509060000361092d57604051635ae6bd3760e01b8152600481018290526001600160a01b03841690635ae6bd3790602401602060405180830381865afa1580156108bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e091906135b9565b6000036109285760405162461bcd60e51b815260206004820152601160248201527012185cda081b9bdd08185c1c1c9bdd9959607a1b60448201526064015b60405180910390fd5b61098e565b60405163934f3a1160e01b81526001600160a01b0384169063934f3a119061095d90849086908a906004016135d2565b60006040518083038186803b15801561097557600080fd5b505afa158015610989573d6000803e3d6000fd5b505050505b506320c13b0b60e01b95945050505050565b606060007f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60001b83805190602001206040516020016109ea929190918252602082015260400190565b604051602081830303815290604052805190602001209050601960f81b600160f81b856001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6e91906135b9565b6040516001600160f81b0319938416602082015292909116602183015260228201526042810182905260620160405160208183030381529060405291505092915050565b60026020528160005260406000208181548110610ace57600080fd5b60009182526020909120600290910201805460019091015465ffffffffffff821693506001600160a01b03600160301b909204821692501683565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610b4e5750825b90506000826001600160401b03166001148015610b6a5750303b155b905081158015610b78575080155b15610b965760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610bc057845460ff60401b1916600160401b1785555b610bc987611ce3565b610bd1611cf4565b610bd9611cfc565b600080546001600160a01b0319166001600160a01b0388161790558315610c3a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610c4b611d0c565b610c5482611db1565b61052f8282611db9565b6000610c68611e76565b5060008051602061397983398151915290565b6001600160a01b0381166000908152600260205260408120549003610c9d5750565b8060005b6001600160a01b038316600090815260026020526040902054811015610f32576001600160a01b0383166000908152600260205260409020805442919083908110610cee57610cee613607565b600091825260209091206002909102015465ffffffffffff161015610dfe576001600160a01b03831660009081526002602052604090208054610da4919083908110610d3c57610d3c613607565b60009182526020808320600292830201600101546001600160a01b038881168552929091526040909220805491909216919084908110610d7e57610d7e613607565b6000918252602090912060029091020154600160301b90046001600160a01b0316611ebf565b6001600160a01b0383166000908152600260205260409020805482908110610dce57610dce613607565b6000918252602090912060029091020180546001600160d01b031916815560010180546001600160a01b03191690555b816001600160a01b0316632f54bf6e60026000866001600160a01b03166001600160a01b031681526020019081526020016000208381548110610e4357610e43613607565b600091825260209091206002909102015460405160e083901b6001600160e01b0319168152600160301b9091046001600160a01b03166004820152602401602060405180830381865afa158015610e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec2919061361d565b610f20576001600160a01b0383166000908152600260205260409020805482908110610ef057610ef0613607565b6000918252602090912060029091020180546001600160d01b031916815560010180546001600160a01b03191690555b80610f2a81613650565b915050610ca1565b505050565b6040516317aa5fb760e11b81526001600160a01b0382811660048301526000918291851690632f54bf6e90602401602060405180830381865afa158015610f82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa6919061361d565b905080610fb7576001915050610785565b600160005b6001600160a01b03861660009081526002602052604090205481101561109d576001600160a01b0386811660009081526002602052604090208054918716918390811061100b5761100b613607565b6000918252602090912060029091020154600160301b90046001600160a01b031614801561107d57506001600160a01b038616600090815260026020526040902080544291908390811061106157611061613607565b600091825260209091206002909102015465ffffffffffff1610155b1561108b576000915061109d565b8061109581613650565b915050610fbc565b50949350505050565b60006110b283836109a0565b80519060200120905092915050565b6110c9612194565b6110d360006121ef565b565b333b6110f45760405163041bbac760e31b815260040160405180910390fd5b6040516317aa5fb760e11b81526001600160a01b03821660048201523390632f54bf6e90602401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c919061361d565b611179576040516328e32f5760e11b815260040160405180910390fd5b6111833382611ebf565b50565b61118f81610c7b565b5050505050505050505050565b60008265ffffffffffff161180156111bb5750428265ffffffffffff16105b156111d957604051631c88b45d60e11b815260040160405180910390fd5b60008165ffffffffffff161180156111f85750428165ffffffffffff16105b156112165760405163f06506c560e01b815260040160405180910390fd5b3360008960008054604051635fbfb9cf60e01b81526001600160a01b0386811660048301526024820185905293945091921690635fbfb9cf906044016020604051808303816000875af1158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190613669565b90506112a081612260565b60006112e28b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122e492505050565b9050836001600160a01b0316816001600160a01b03160361131657604051632ed3775360e11b815260040160405180910390fd5b6040518060c001604052808765ffffffffffff1681526020018665ffffffffffff16815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152602001856001600160a01b03168152602001826001600160a01b03168152602001836001600160a01b031681525060016000866001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160010190816114539190613706565b5060608201516002820180546001600160a01b03199081166001600160a01b03938416179091556080840151600384018054831691841691909117905560a09093015160049092018054909316918116919091179091556040518c8152908516907f070669e6be82aa9b077a096b0f9617893a4dc5cb05897e27fd7a6112c8e6629e9060200160405180910390a2505050505050505050505050565b604051636617c22960e11b815260016004820152600a60248201526060903390600090829063cc2f845290604401600060405180830381865afa15801561153a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611562919081019061384d565b509392505050565b606060405163b4faba0960e01b8152600436036004808301376020600036836000335af1505060203d036040519150808201604052806020833e5060005161084e57805160208201fd5b8315806115bf575082155b806115c8575080155b156115e657604051639bdfc59f60e01b815260040160405180910390fd5b3360009081526001602081815260408084208885528252808420815160c081018352815465ffffffffffff8082168352600160301b909104169381019390935292830180549293929184019161163b90613686565b80601f016020809104026020016040519081016040528092919081815260200182805461166790613686565b80156116b45780601f10611689576101008083540402835291602001916116b4565b820191906000526020600020905b81548152906001019060200180831161169757829003601f168201915b505050918352505060028201546001600160a01b039081166020830152600383015481166040830152600490920154821660609091015260808201519192501661171157604051631ae9d48f60e11b815260040160405180910390fd5b805165ffffffffffff1615801590611734575042816000015165ffffffffffff16105b1561175257604051631c88b45d60e11b815260040160405180910390fd5b6000816020015165ffffffffffff16118015611779575042816020015165ffffffffffff16105b156117975760405163f06506c560e01b815260040160405180910390fd5b606081015133906001600160a01b031681146117c657604051633b136dc160e11b815260040160405180910390fd5b6117d58186846040015161231d565b6117f257604051633b136dc160e11b815260040160405180910390fd5b81608001516001600160a01b03166118408686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122e492505050565b6001600160a01b031614611867576040516389d52d5f60e01b815260040160405180910390fd5b6118798260a00151836080015161247b565b60a08201516001600160a01b031660009081526002602052604090205460001981106118b857604051635988e4b960e11b815260040160405180910390fd5b60a0830180516001600160a01b03908116600090815260026020818152604080842081516060810183528a5165ffffffffffff908116825260808c015188168286019081529851881682850190815283546001818101865594895286892093519702909201805499518916600160301b026001600160d01b0319909a169690911695909517979097178455955192860180549386166001600160a01b03199094169390931790925592861682528383528082208b835290925290812080546bffffffffffffffffffffffff191681559161199490830182612c12565b506002810180546001600160a01b03199081169091556003820180548216905560049091018054909116905560a083015160808401516040516001600160a01b03918216815291811691908416907f603c57ecb4a9802537649ceb6523e5d48c939e7856768ce6f9b3128a889a5cfe9060200160405180910390a350505050505050565b333b611a375760405163041bbac760e31b815260040160405180910390fd5b6040516317aa5fb760e11b81526001600160a01b03821660048201523390632f54bf6e90602401602060405180830381865afa158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9f919061361d565b15611abd57604051630e1857b360e21b815260040160405180910390fd5b611183338261247b565b611acf612194565b6001600160a01b038116611af957604051631e4fbdf760e01b81526000600482015260240161091f565b611183816121ef565b600160208181526000938452604080852090915291835291208054918101805465ffffffffffff80851694600160301b900416929190611b4190613686565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6d90613686565b8015611bba5780601f10611b8f57610100808354040283529160200191611bba565b820191906000526020600020905b815481529060010190602001808311611b9d57829003601f168201915b505050506002830154600384015460049094015492936001600160a01b039182169390821692501686565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b6040518060400160405280600e81526020016d53657373696f6e204d6f64756c6560901b815250604051602001611c429190613893565b6040516020818303038152906040528051906020012060405180604001604052806005815260200164302e302e3360d81b815250604051602001611c869190613893565b60405160208183030381529060405280519060200120611ca34690565b604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611ceb6126fb565b61118381612744565b6110d36126fb565b611d046126fb565b6110d361274c565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611d9357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611d87600080516020613979833981519152546001600160a01b031690565b6001600160a01b031614155b156110d35760405163703e46dd60e11b815260040160405180910390fd5b611183612194565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e13575060408051601f3d908101601f19168201909252611e10918101906135b9565b60015b611e3b57604051634c9c8ce360e01b81526001600160a01b038316600482015260240161091f565b6000805160206139798339815191528114611e6c57604051632a87526960e21b81526004810182905260240161091f565b610f32838361277a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110d35760405163703e46dd60e11b815260040160405180910390fd5b6040516317aa5fb760e11b81526001600160a01b038281166004830152839190821690632f54bf6e90602401602060405180830381865afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c919061361d565b611f49576040516328e32f5760e11b815260040160405180910390fd5b6000816001600160a01b031663e75235b86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad91906135b9565b90506000826001600160a01b031663a0e67e2b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611fef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261201791908101906138af565b905060018460005b835181101561209e57866001600160a01b031684828151811061204457612044613607565b60200260200101516001600160a01b03160361208c578015612087578361206c6001836138e3565b8151811061207c5761207c613607565b602002602001015192505b61209e565b8061209681613650565b91505061201f565b506040516001600160a01b038084166024830152821660448201526064810185905260009060840160408051601f198184030181529181526020820180516001600160e01b031663f8dc5dd960e01b1790525163468721a760e01b81529091506000906001600160a01b038a169063468721a790612126908c908590879082906004016138f6565b6020604051808303816000875af1158015612145573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612169919061361d565b905080612189576040516310da247360e01b815260040160405180910390fd5b505050505050505050565b336121c67f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146110d35760405163118cdaa760e01b815233600482015260240161091f565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b604080516020810182526000808252915163468721a760e01b815290916001600160a01b0384169163468721a7916122a191869190869082906004016138f6565b6020604051808303816000875af11580156122c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f32919061361d565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c839052603c812061084e90836127d0565b60008061232a84846122e4565b90506001600160a01b03811661234457600091505061084e565b846001600160a01b0316816001600160a01b03160361236757600191505061084e565b843b61237757600091505061084e565b604051630b135d3f60e11b81526001600160a01b03861690631626ba7e906123a5908790879060040161394c565b602060405180830381865afa9250505080156123de575060408051601f3d908101601f191682019092526123db9181019061359c565b60015b15612408576001600160e01b03198116630b135d3f60e11b036124065760019250505061084e565b505b6040516317aa5fb760e11b81526001600160a01b038281166004830152861690632f54bf6e90602401602060405180830381865afa15801561244e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612472919061361d565b95945050505050565b813b61249a5760405163041bbac760e31b815260040160405180910390fd5b6000826001600160a01b031663a0e67e2b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261250291908101906138af565b5190506032612512826001613965565b11156125aa576125aa83846001600160a01b031663a0e67e2b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561255a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261258291908101906138af565b61258d6001856138e3565b8151811061259d5761259d613607565b6020026020010151611ebf565b6000836001600160a01b031663e75235b86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260e91906135b9565b6040516001600160a01b03851660248201526044810182905290915060009060640160408051601f198184030181529181526020820180516001600160e01b0316630d582f1360e01b1790525163468721a760e01b81529091506000906001600160a01b0387169063468721a7906126909089908590879082906004016138f6565b6020604051808303816000875af11580156126af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d3919061361d565b9050806126f35760405163dfae2d2f60e01b815260040160405180910390fd5b505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166110d357604051631afcd79f60e31b815260040160405180910390fd5b611acf6126fb565b6127546126fb565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61278382612a36565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156127c857610f328282612a9b565b61052f612b08565b600081516041146128375760405162461bcd60e51b815260206004820152603a602482015260008051602061399983398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000606482015260840161091f565b60008260408151811061284c5761284c613607565b016020015160f81c905060006128628482612b27565b90506000612871856020612b27565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08111156128f75760405162461bcd60e51b815260206004820152603d602482015260008051602061399983398151915260448201527f3a20696e76616c6964207369676e6174757265202773272076616c7565000000606482015260840161091f565b8260ff16601b1415801561290f57508260ff16601c14155b156129705760405162461bcd60e51b815260206004820152603d602482015260008051602061399983398151915260448201527f3a20696e76616c6964207369676e6174757265202776272076616c7565000000606482015260840161091f565b60408051600081526020810180835288905260ff851691810191909152606081018390526080810182905260019060a0016020604051602081039080840390855afa1580156129c3573d6000803e3d6000fd5b5050604051601f1901519450506001600160a01b038416612a2d5760405162461bcd60e51b8152602060048201526030602482015260008051602061399983398151915260448201526f1d1024a72b20a624a22fa9a4a3a722a960811b606482015260840161091f565b50505092915050565b806001600160a01b03163b600003612a6c57604051634c9c8ce360e01b81526001600160a01b038216600482015260240161091f565b60008051602061397983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612ab89190613893565b600060405180830381855af49150503d8060008114612af3576040519150601f19603f3d011682016040523d82523d6000602084013e612af8565b606091505b5091509150612472858383612b8d565b34156110d35760405163b398979f60e01b815260040160405180910390fd5b6000612b34826020613965565b83511015612b845760405162461bcd60e51b815260206004820181905260248201527f72656164427974657333323a20696e76616c69642064617461206c656e677468604482015260640161091f565b50016020015190565b606082612ba257612b9d82612be9565b61084e565b8151158015612bb957506001600160a01b0384163b155b15612be257604051639996b31560e01b81526001600160a01b038516600482015260240161091f565b508061084e565b805115612bf95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054612c1e90613686565b6000825580601f10612c2e575050565b601f01602090049060005260206000209081019061118391905b80821115612c5c5760008155600101612c48565b5090565b6001600160a01b038116811461118357600080fd5b8035612c8081612c60565b919050565b60008083601f840112612c9757600080fd5b5081356001600160401b03811115612cae57600080fd5b602083019150836020828501011115612cc657600080fd5b9250929050565b60008060008060008060008060c0898b031215612ce957600080fd5b8835612cf481612c60565b97506020890135612d0481612c60565b96506040890135612d1481612c60565b95506060890135945060808901356001600160401b0380821115612d3757600080fd5b612d438c838d01612c85565b909650945060a08b0135915080821115612d5c57600080fd5b50612d698b828c01612c85565b999c989b5096995094979396929594505050565b6001600160e01b03198116811461118357600080fd5b600060208284031215612da557600080fd5b813561084e81612d7d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612dee57612dee612db0565b604052919050565b600082601f830112612e0757600080fd5b81356001600160401b03811115612e2057612e20612db0565b612e33601f8201601f1916602001612dc6565b818152846020838601011115612e4857600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612e7757600080fd5b81356001600160401b03811115612e8d57600080fd5b612e9984828501612df6565b949350505050565b600080600080600060808688031215612eb957600080fd5b8535612ec481612c60565b94506020860135612ed481612c60565b93506040860135925060608601356001600160401b03811115612ef657600080fd5b612f0288828901612c85565b969995985093965092949392505050565b600080600060408486031215612f2857600080fd5b8335925060208401356001600160401b03811115612f4557600080fd5b612f5186828701612c85565b9497909650939450505050565b60008060408385031215612f7157600080fd5b82356001600160401b0380821115612f8857600080fd5b612f9486838701612df6565b93506020850135915080821115612faa57600080fd5b50612fb785828601612df6565b9150509250929050565b60008060408385031215612fd457600080fd5b8235612fdf81612c60565b915060208301356001600160401b03811115612ffa57600080fd5b612fb785828601612df6565b60005b83811015613021578181015183820152602001613009565b50506000910152565b60008151808452613042816020860160208601613006565b601f01601f19169290920160200192915050565b60208152600061084e602083018461302a565b6000806040838503121561307c57600080fd5b823561308781612c60565b946020939093013593505050565b600080604083850312156130a857600080fd5b82356130b381612c60565b915060208301356130c381612c60565b809150509250929050565b6000602082840312156130e057600080fd5b813561084e81612c60565b803560028110612c8057600080fd5b60008060008060008060008060008060006101608c8e03121561311c57600080fd5b6131258c612c75565b9a5060208c013599506001600160401b038060408e0135111561314757600080fd5b6131578e60408f01358f01612df6565b995061316560608e016130eb565b985060808d0135975060a08d0135965060c08d0135955061318860e08e01612c75565b94506131976101008e01612c75565b9350806101208e013511156131ab57600080fd5b506131bd8d6101208e01358e01612df6565b91506131cc6101408d01612c75565b90509295989b509295989b9093969950565b801515811461118357600080fd5b600080604083850312156131ff57600080fd5b8235915060208301356130c3816131de565b803565ffffffffffff81168114612c8057600080fd5b60008060008060008060008060c0898b03121561324357600080fd5b883597506020890135965060408901356001600160401b038082111561326857600080fd5b6132748c838d01612c85565b909850965060608b013591508082111561328d57600080fd5b5061329a8b828c01612c85565b90955093506132ad905060808a01613211565b91506132bb60a08a01613211565b90509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b8181101561330b5783516001600160a01b0316835292840192918401916001016132e6565b50909695505050505050565b60008083601f84011261332957600080fd5b5081356001600160401b0381111561334057600080fd5b6020830191508360208260051b8501011115612cc657600080fd5b60008060008060008060008060a0898b03121561337757600080fd5b883561338281612c60565b9750602089013561339281612c60565b965060408901356001600160401b03808211156133ae57600080fd5b6133ba8c838d01613317565b909850965060608b01359150808211156133d357600080fd5b6133df8c838d01613317565b909650945060808b0135915080821115612d5c57600080fd5b60008060006040848603121561340d57600080fd5b833561341881612c60565b925060208401356001600160401b03811115612f4557600080fd5b6000806000806060858703121561344957600080fd5b843593506020850135925060408501356001600160401b0381111561346d57600080fd5b61347987828801612c85565b95989497509550505050565b60008060008060008060a0878903121561349e57600080fd5b86356134a981612c60565b955060208701356134b981612c60565b9450604087013593506060870135925060808701356001600160401b038111156134e257600080fd5b6134ee89828a01612c85565b979a9699509497509295939492505050565b600065ffffffffffff808916835280881660208401525060c0604083015261352b60c083018761302a565b6001600160a01b039586166060840152938516608083015250921660a0909201919091529392505050565b604081526000613569604083018661302a565b8281036020840152838152838560208301376000602085830101526020601f19601f860116820101915050949350505050565b6000602082840312156135ae57600080fd5b815161084e81612d7d565b6000602082840312156135cb57600080fd5b5051919050565b8381526060602082015260006135eb606083018561302a565b82810360408401526135fd818561302a565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561362f57600080fd5b815161084e816131de565b634e487b7160e01b600052601160045260246000fd5b6000600182016136625761366261363a565b5060010190565b60006020828403121561367b57600080fd5b815161084e81612c60565b600181811c9082168061369a57607f821691505b6020821081036136ba57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610f3257600081815260208120601f850160051c810160208610156136e75750805b601f850160051c820191505b818110156126f3578281556001016136f3565b81516001600160401b0381111561371f5761371f612db0565b6137338161372d8454613686565b846136c0565b602080601f83116001811461376857600084156137505750858301515b600019600386901b1c1916600185901b1785556126f3565b600085815260208120601f198616915b8281101561379757888601518255948401946001909101908401613778565b50858210156137b55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f8301126137d657600080fd5b815160206001600160401b038211156137f1576137f1612db0565b8160051b613800828201612dc6565b928352848101820192828101908785111561381a57600080fd5b83870192505b8483101561384257825161383381612c60565b82529183019190830190613820565b979650505050505050565b6000806040838503121561386057600080fd5b82516001600160401b0381111561387657600080fd5b613882858286016137c5565b92505060208301516130c381612c60565b600082516138a5818460208701613006565b9190910192915050565b6000602082840312156138c157600080fd5b81516001600160401b038111156138d757600080fd5b612e99848285016137c5565b818103818111156107855761078561363a565b60018060a01b038516815283602082015260806040820152600061391d608083018561302a565b90506002831061393d57634e487b7160e01b600052602160045260246000fd5b82606083015295945050505050565b828152604060208201526000612e99604083018461302a565b808201808211156107855761078561363a56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5369676e617475726556616c696461746f72237265636f7665725369676e6572a264697066735822122011b6d18a7d11abaf22e7086ce9359d1524d29cedb44931e393862fe88156fe1164736f6c63430008140033",
    "sourceMap": "1779:21414:116:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1553:199:91;;;;;;;;;;-1:-1:-1;1553:199:91;;;;;:::i;:::-;;;;;;;;;;;;16811:262:116;;;;;;;;;;-1:-1:-1;16811:262:116;;;;;:::i;:::-;;:::i;:::-;;;2402:14:123;;2395:22;2377:41;;2365:2;2350:18;16811:262:116;;;;;;;;1925:157:90;;;;;;;;;;-1:-1:-1;1925:157:90;;;;;:::i;:::-;;:::i;:::-;;;3847:25:123;;;3835:2;3820:18;1925:157:90;3701:177:123;1301:143:91;;;;;;;;;;-1:-1:-1;1301:143:91;;;;;:::i;:::-;-1:-1:-1;;;1301:143:91;;;;;;;;;;;-1:-1:-1;;;;;;4804:33:123;;;4786:52;;4774:2;4759:18;1301:143:91;4642:202:123;3374:350:90;;;;;;;;;;-1:-1:-1;3374:350:90;;;;;:::i;:::-;;:::i;1187:580::-;;;;;;;;;;-1:-1:-1;1187:580:90;;;;;:::i;:::-;;:::i;2331:307::-;;;;;;;;;;-1:-1:-1;2331:307:90;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2333:169:116:-;;;;;;;;;;-1:-1:-1;2473:9:116;2333:169;;2973:57;;;;;;;;;;-1:-1:-1;2973:57:116;;;;;:::i;:::-;;:::i;:::-;;;;7833:14:123;7821:27;;;7803:46;;-1:-1:-1;;;;;7923:15:123;;;7918:2;7903:18;;7896:43;7975:15;;7955:18;;;7948:43;7791:2;7776:18;2973:57:116;7603:394:123;3331:199:116;;;;;;;;;;-1:-1:-1;3331:199:116;;;;;:::i;:::-;;:::i;4158:214:32:-;;;;;;:::i;:::-;;:::i;3705:134::-;;;;;;;;;;;;;:::i;14528:622:116:-;;;;;;;;;;-1:-1:-1;14528:622:116;;;;;:::i;:::-;;:::i;15153:432::-;;;;;;;;;;-1:-1:-1;15153:432:116;;;;;:::i;:::-;;:::i;2868:168:90:-;;;;;;;;;;-1:-1:-1;2868:168:90;;;;;:::i;:::-;;:::i;3155:101:30:-;;;;;;;;;;;;;:::i;13751:237:116:-;;;;;;;;;;-1:-1:-1;13751:237:116;;;;;:::i;:::-;;:::i;15904:369::-;;;;;;;;;;-1:-1:-1;15904:369:116;;;;;:::i;:::-;;:::i;17463:222::-;;;;;;;;;;-1:-1:-1;17463:222:116;;;;;:::i;:::-;17631:28;17673:8;;;17463:222;2441:144:30;;;;;;;;;;-1:-1:-1;1313:22:30;2570:8;-1:-1:-1;;;;;2570:8:30;2441:144;;;-1:-1:-1;;;;;10641:32:123;;;10623:51;;10611:2;10596:18;2441:144:30;10477:203:123;16433:87:116;;;;;;;;;;-1:-1:-1;16433:87:116;;;;;:::i;:::-;4158:214:32;;;4849:1416:116;;;;;;;;;;-1:-1:-1;4849:1416:116;;;;;:::i;:::-;;:::i;1941:46::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1941:46:116;;;;;1819:58:32;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:32;;;;;3826:259:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;948:226:91:-;;;;;;;;;;-1:-1:-1;948:226:91;;;;;:::i;:::-;-1:-1:-1;;;948:226:91;;;;;;;;;;;4664:3062:90;;;;;;;;;;-1:-1:-1;4664:3062:90;;;;;:::i;:::-;;:::i;7077:1936:116:-;;;;;;;;;;-1:-1:-1;7077:1936:116;;;;;:::i;:::-;;:::i;13160:241::-;;;;;;;;;;-1:-1:-1;13160:241:116;;;;;:::i;:::-;;:::i;2863:27::-;;;;;;;;;;-1:-1:-1;2863:27:116;;;;-1:-1:-1;;;;;2863:27:116;;;656:153:91;;;;;;;;;;-1:-1:-1;656:153:91;;;;;:::i;:::-;-1:-1:-1;;;656:153:91;;;;;;;;;3405:215:30;;;;;;;;;;-1:-1:-1;3405:215:30;;;;;:::i;:::-;;:::i;2893:77:116:-;;;;;;;;;;-1:-1:-1;2893:77:116;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;2505:290::-;;;;;;;;;;;;;:::i;1990:40::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1990:40:116;;;;;16811:262;16936:4;-1:-1:-1;;;;;;16956:38:116;;-1:-1:-1;;;16956:38:116;;:99;;-1:-1:-1;;;;;;;17015:40:116;;-1:-1:-1;;;17015:40:116;16956:99;16946:109;16811:262;-1:-1:-1;;16811:262:116:o;1925:157:90:-;1992:7;2018:57;2053:10;2067:7;2018:21;:57::i;3374:350::-;3602:21;;;;;;;3847:25:123;;;3602:21:90;;;;;;;;;;3820:18:123;;;3602:21:90;;;;-1:-1:-1;;;3575:61:90;;;3469:6;;3539:10;;3469:6;;3539:10;;3575:26;;:61;;3625:10;;;;3575:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3560:76;-1:-1:-1;;;;;;;3654:28:90;;-1:-1:-1;;;3654:28:90;3653:64;;3715:1;3653:64;;;-1:-1:-1;;;3653:64:90;3646:71;;;;3374:350;;;;;;:::o;1187:580::-;1288:6;1366:10;1288:6;1415:37;1366:10;1446:5;1415:24;:37::i;:::-;1484:22;;;;;;1520:17;;1388:64;;-1:-1:-1;1484:22:90;1462:19;1520:22;1516:209;;1566:32;;-1:-1:-1;;;1566:32:90;;;;;3847:25:123;;;-1:-1:-1;;;;;1566:19:90;;;;;3820:18:123;;1566:32:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1602:1;1566:37;1558:67;;;;-1:-1:-1;;;1558:67:90;;19030:2:123;1558:67:90;;;19012:21:123;19069:2;19049:18;;;19042:30;-1:-1:-1;;;19088:18:123;;;19081:47;19145:18;;1558:67:90;;;;;;;;;1516:209;;;1656:58;;-1:-1:-1;;;1656:58:90;;-1:-1:-1;;;;;1656:20:90;;;;;:58;;1677:11;;1690;;1703:10;;1656:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1516:209;-1:-1:-1;;;;1741:19:90;1187:580;-1:-1:-1;;;;;1187:580:90:o;2331:307::-;2419:12;2443:23;525:66;2490:17;;2519:7;2509:18;;;;;;2479:49;;;;;;;;19801:25:123;;;19857:2;19842:18;;19835:34;19789:2;19774:18;;19627:248;2479:49:90;;;;;;;;;;;;;2469:60;;;;;;2443:86;;2570:4;2563:12;;2584:4;2577:12;;2591:4;-1:-1:-1;;;;;2591:20:90;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2546:85;;-1:-1:-1;;;;;;20322:15:123;;;2546:85:90;;;20310:28:123;20367:15;;;;20354:11;;;20347:36;20399:11;;;20392:27;20435:12;;;20428:28;;;20472:12;;2546:85:90;;;;;;;;;;;;2539:92;;;2331:307;;;;:::o;2973:57:116:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;2973:57:116;;;;;;-1:-1:-1;2973:57:116;;:::o;3331:199::-;8870:21:31;4302:15;;-1:-1:-1;;;4302:15:31;;;;4301:16;;-1:-1:-1;;;;;4348:14:31;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:31;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:31;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:31;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:31;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:31;-1:-1:-1;;;5013:22:31;;;4979:67;3415:22:116::1;3430:6;3415:14;:22::i;:::-;3441:24;:22;:24::i;:::-;3469;:22;:24::i;:::-;3498:12;:28:::0;;-1:-1:-1;;;;;;3498:28:116::1;-1:-1:-1::0;;;;;3498:28:116;::::1;;::::0;;5066:101:31;;;;5100:23;;-1:-1:-1;;;;5100:23:31;;;5142:14;;-1:-1:-1;20648:50:123;;5142:14:31;;20636:2:123;20621:18;5142:14:31;;;;;;;5066:101;4092:1081;;;;;3331:199:116;;:::o;4158:214:32:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;3705:134::-:0;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3705:134:32;:::o;14528:622:116:-;-1:-1:-1;;;;;14590:22:116;;;;;;:14;:22;;;;;:29;:34;;14586:56;;14528:622;:::o;14586:56::-;14687:6;14646:25;14699:448;-1:-1:-1;;;;;14723:22:116;;;;;;:14;:22;;;;;:29;14719:33;;14699:448;;;-1:-1:-1;;;;;14798:22:116;;;;;;:14;:22;;;;;:25;;14833:15;;14798:22;14821:1;;14798:25;;;;;;:::i;:::-;;;;;;;;;;;;;;:32;;;:50;14794:188;;;-1:-1:-1;;;;;14870:22:116;;;;;;:14;:22;;;;;:25;;14856:81;;14870:22;14893:1;;14870:25;;;;;;:::i;:::-;;;;;;;;;;;;;;:33;;;-1:-1:-1;;;;;14905:22:116;;;;;;;;;;;;;:25;;14870:33;;;;;14905:22;14928:1;;14905:25;;;;;;:::i;:::-;;;;;;;;;;;;;;:31;-1:-1:-1;;;14905:31:116;;-1:-1:-1;;;;;14905:31:116;14856:13;:81::i;:::-;-1:-1:-1;;;;;14951:22:116;;;;;;:14;:22;;;;;:25;;14974:1;;14951:25;;;;;;:::i;:::-;;;;;;;;;;;;;;14944:32;;-1:-1:-1;;;;;;14944:32:116;;;;;;;-1:-1:-1;;;;;;14944:32:116;;;14794:188;15044:12;-1:-1:-1;;;;;15044:20:116;;15065:14;:22;15080:6;-1:-1:-1;;;;;15065:22:116;-1:-1:-1;;;;;15065:22:116;;;;;;;;;;;;15088:1;15065:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:31;15044:53;;;;;;-1:-1:-1;;;;;;15044:53:116;;;-1:-1:-1;;;15065:31:116;;;-1:-1:-1;;;;;15065:31:116;15044:53;;;10623:51:123;10596:18;;15044:53:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15039:104;;-1:-1:-1;;;;;15112:22:116;;;;;;:14;:22;;;;;:25;;15135:1;;15112:25;;;;;;:::i;:::-;;;;;;;;;;;;;;15105:32;;-1:-1:-1;;;;;;15105:32:116;;;;;;;-1:-1:-1;;;;;;15105:32:116;;;15039:104;14754:3;;;;:::i;:::-;;;;14699:448;;;;14582:568;14528:622;:::o;15153:432::-;15249:37;;-1:-1:-1;;;15249:37:116;;-1:-1:-1;;;;;10641:32:123;;;15249:37:116;;;10623:51:123;15226:4:116;;;;15249:29;;;;;10596:18:123;;15249:37:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15236:50;;15295:5;15290:33;;15314:4;15307:11;;;;;15290:33;15342:4;15327:12;15351:212;-1:-1:-1;;;;;15375:23:116;;;;;;:14;:23;;;;;:30;15371:34;;15351:212;;;-1:-1:-1;;;;;15421:23:116;;;;;;;:14;:23;;;;;:26;;:42;;;;15445:1;;15421:26;;;;;;:::i;:::-;;;;;;;;;;;;;;:32;-1:-1:-1;;;15421:32:116;;-1:-1:-1;;;;;15421:32:116;:42;:98;;;;-1:-1:-1;;;;;;15467:23:116;;;;;;:14;:23;;;;;:26;;15504:15;;15467:23;15491:1;;15467:26;;;;;;:::i;:::-;;;;;;;;;;;;;;:33;;;:52;;15421:98;15417:142;;;15537:5;15527:15;;15548:5;;15417:142;15407:3;;;;:::i;:::-;;;;15351:212;;;-1:-1:-1;15574:7:116;15153:432;-1:-1:-1;;;;15153:432:116:o;2868:168:90:-;2953:7;2989:39;3014:4;3020:7;2989:24;:39::i;:::-;2979:50;;;;;;2972:57;;2868:168;;;;:::o;3155:101:30:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;13751:237:116:-;13814:10;17631:28;13794:69;;13839:19;;-1:-1:-1;;;13839:19:116;;;;;;;;;;;13794:69;13872:40;;-1:-1:-1;;;13872:40:116;;-1:-1:-1;;;;;10641:32:123;;13872:40:116;;;10623:51:123;13885:10:116;;13872:32;;10596:18:123;;13872:40:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13867:80;;13926:16;;-1:-1:-1;;;13926:16:116;;;;;;;;;;;13867:80;13951:33;13965:10;13977:6;13951:13;:33::i;:::-;13751:237;:::o;15904:369::-;16237:32;16259:9;16237:21;:32::i;:::-;15904:369;;;;;;;;;;;:::o;4849:1416::-;5130:1;5114:13;:17;;;:52;;;;;5151:15;5135:13;:31;;;5114:52;5110:98;;;5180:23;;-1:-1:-1;;;5180:23:116;;;;;;;;;;;5110:98;5282:1;5264:15;:19;;;:56;;;;;5305:15;5287;:33;;;5264:56;5260:97;;;5334:18;;-1:-1:-1;;;5334:18:116;;;;;;;;;;;5260:97;5404:10;5385:16;5516:11;5532:15;5563:12;;5550:56;;-1:-1:-1;;;5550:56:116;;-1:-1:-1;;;;;21555:32:123;;;5550:56:116;;;21537:51:123;21604:18;;;21597:34;;;5483:45:116;;-1:-1:-1;5532:15:116;;5563:12;;5550:40;;21510:18:123;;5550:56:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5532:74;;5672:28;5692:7;5672:19;:28::i;:::-;5732:20;5755:69;5779:18;5799:24;;5755:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5755:23:116;;-1:-1:-1;;;5755:69:116:i;:::-;5732:92;;5891:8;-1:-1:-1;;;;;5875:24:116;:12;-1:-1:-1;;;;;5875:24:116;;5871:71;;5913:24;;-1:-1:-1;;;5913:24:116;;;;;;;;;;;5871:71;6020:192;;;;;;;;6048:13;6020:192;;;;;;6083:15;6020:192;;;;;;6122:17;;6020:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6154:8;-1:-1:-1;;;;;6020:192:116;;;;;6174:12;-1:-1:-1;;;;;6020:192:116;;;;;6200:7;-1:-1:-1;;;;;6020:192:116;;;;5972:15;:25;5988:8;-1:-1:-1;;;;;5972:25:116;-1:-1:-1;;;;;5972:25:116;;;;;;;;;;;;:45;5998:18;5972:45;;;;;;;;;;;:240;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5972:240:116;;;;;;;;;-1:-1:-1;;;;;;5972:240:116;;;-1:-1:-1;;;;;5972:240:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6222:39;;3847:25:123;;;6222:39:116;;;;;;3835:2:123;3820:18;6222:39:116;;;;;;;5060:1205;;;;4849:1416;;;;;;;;:::o;3826:259:90:-;4010:46;;-1:-1:-1;;;4010:46:90;;747:3;4010:46;;;21537:51:123;4053:2:90;21604:18:123;;;21597:34;3871:16:90;;3959:10;;3934:9;;3959:10;;4010:24;;21510:18:123;;4010:46:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4010:46:90;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3981:75:90;3826:259;-1:-1:-1;;;3826:259:90:o;4664:3062::-;4756:21;5157:4;5151:11;-1:-1:-1;;;5333:16:90;5326:44;5835:4;5819:14;5815:25;5809:4;5802;5784:16;5780:27;5767:74;6974:4;6948;6466:14;6428:16;6405:1;6375:8;6248:5;6222:774;6201:809;;7445:4;7427:16;7423:27;7481:4;7475:11;7463:23;;7526:12;7516:8;7512:27;7506:4;7499:41;7584:12;7578:4;7568:8;7553:44;;7627:4;7621:11;7611:99;;7686:8;7680:15;7673:4;7663:8;7659:19;7652:44;7077:1936:116;7230:23;;;:43;;-1:-1:-1;7257:16:116;;7230:43;:81;;;-1:-1:-1;7277:34:116;;7230:81;7226:124;;;7325:20;;-1:-1:-1;;;7325:20:116;;;;;;;;;;;7226:124;7446:10;7391:36;7430:27;;;:15;:27;;;;;;;;:47;;;;;;;;7391:86;;;;;;;;;;;;;;;-1:-1:-1;;;7391:86:116;;;;;;;;;;;;;;;;;;7430:47;7391:86;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7391:86:116;;;-1:-1:-1;;7391:86:116;;;;-1:-1:-1;;;;;7391:86:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7485:20;;;;7391:86;;-1:-1:-1;7485:34:116;7481:81;;7533:24;;-1:-1:-1;;;7533:24:116;;;;;;;;;;;7481:81;7612:21;;:25;;;;;;:68;;;7665:15;7641:14;:21;;;:39;;;7612:68;7608:114;;;7694:23;;-1:-1:-1;;;7694:23:116;;;;;;;;;;;7608:114;7811:1;7778:14;:30;;;:34;;;:86;;;;;7849:15;7816:14;:30;;;:48;;;7778:86;7774:127;;;7878:18;;-1:-1:-1;;;7878:18:116;;;;;;;;;;;7774:127;7999:23;;;;7948:10;;-1:-1:-1;;;;;7999:35:116;;;7995:75;;8048:17;;-1:-1:-1;;;8048:17:116;;;;;;;;;;;7995:75;8079:74;8097:8;8107:11;8120:14;:32;;;8079:17;:74::i;:::-;8074:115;;8167:17;;-1:-1:-1;;;8167:17:116;;;;;;;;;;;8074:115;8310:14;:20;;;-1:-1:-1;;;;;8246:84:116;:60;8270:11;8283:22;;8246:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8246:23:116;;-1:-1:-1;;;8246:60:116:i;:::-;-1:-1:-1;;;;;8246:84:116;;8242:138;;8344:31;;-1:-1:-1;;;8344:31:116;;;;;;;;;;;8242:138;8417:56;8428:14;:22;;;8452:14;:20;;;8417:10;:56::i;:::-;8557:22;;;;-1:-1:-1;;;;;8542:38:116;8518:21;8542:38;;;:14;:38;;;;;:45;-1:-1:-1;;8595:34:116;;8591:77;;8643:20;;-1:-1:-1;;;8643:20:116;;;;;;;;;;;8591:77;8687:22;;;;;-1:-1:-1;;;;;8672:38:116;;;;;;;:14;:38;;;;;;;;8720:125;;;;;;;8818:21;;8720:125;;;;;;8747:20;;;;8720:125;;;;;;;;8782:22;;8720:125;;;;;;;;8672:177;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8672:177:116;-1:-1:-1;;;;;;8672:177:116;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8672:177:116;;;;;;;;;;8889:25;;;;;;;;;;;:45;;;;;;;;;8882:52;;-1:-1:-1;;8882:52:116;;;8889:45;8882:52;;;;8672:38;8882:52;:::i;:::-;-1:-1:-1;8882:52:116;;;;;-1:-1:-1;;;;;;8882:52:116;;;;;;;;;;;;;;;;;;;;;;;;;;8964:22;;;;8988:20;;;;8944:65;;-1:-1:-1;;;;;10641:32:123;;;10623:51;;8944:65:116;;;;;;;;;;10611:2:123;10596:18;8944:65:116;;;;;;;7191:1822;;;7077:1936;;;;:::o;13160:241::-;13226:10;17631:28;13206:69;;13251:19;;-1:-1:-1;;;13251:19:116;;;;;;;;;;;13206:69;13283:40;;-1:-1:-1;;;13283:40:116;;-1:-1:-1;;;;;10641:32:123;;13283:40:116;;;10623:51:123;13296:10:116;;13283:32;;10596:18:123;;13283:40:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13279:84;;;13337:21;;-1:-1:-1;;;13337:21:116;;;;;;;;;;;13279:84;13367:30;13378:10;13390:6;13367:10;:30::i;3405:215:30:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:30;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:30;;3562:1:::1;3534:31;::::0;::::1;10623:51:123::0;10596:18;;3534:31:30::1;10477:203:123::0;3485:91:30::1;3585:28;3604:8;3585:18;:28::i;2893:77:116:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2893:77:116;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;2893:77:116;;;;;;;;;;;;;;;-1:-1:-1;;;;;2893:77:116;;;;;;;;-1:-1:-1;2893:77:116;;:::o;2505:290::-;2553:7;2209:66;2608:25;;2667:4;;;;;;;;;;;;;-1:-1:-1;;;2667:4:116;;;2650:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;2640:33;;;;;;2707:7;;;;;;;;;;;;;-1:-1:-1;;;2707:7:116;;;2690:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;2680:36;;;;;;2723:12;2473:9;;2333:169;2723:12;2591:195;;;;;;26637:25:123;;;;26678:18;;26671:34;;;;26721:18;;;26714:34;26764:18;;;26757:34;2776:4:116;26807:19:123;;;26800:61;26609:19;;2591:195:116;;;;;;;;;;;;2576:215;;;;;;2566:225;;2505:290;:::o;1847:127:30:-;6931:20:31;:18;:20::i;:::-;1929:38:30::1;1954:12;1929:24;:38::i;2968:67:32:-:0;6931:20:31;:18;:20::i;2540:111:38:-;6931:20:31;:18;:20::i;:::-;2610:34:38::1;:32;:34::i;4599:312:32:-:0;4679:4;-1:-1:-1;;;;;4688:6:32;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:32;:32;-1:-1:-1;;;;;;;;;;;2035:53:47;-1:-1:-1;;;;;2035:53:47;;1957:138;4749:32:32;-1:-1:-1;;;;;4749:42:32;;;4671:120;4654:251;;;4865:29;;-1:-1:-1;;;4865:29:32;;;;;;;;;;;3663:114:116;2334:13:30;:11;:13::i;6052:538:32:-;6169:17;-1:-1:-1;;;;;6151:50:32;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:32;;;;;;;;-1:-1:-1;;6151:52:32;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;-1:-1:-1;;;6513:60:32;;-1:-1:-1;;;;;10641:32:123;;6513:60:32;;;10623:51:123;10596:18;;6513:60:32;10477:203:123;6147:437:32;-1:-1:-1;;;;;;;;;;;6245:40:32;;6241:120;;6312:34;;-1:-1:-1;;;6312:34:32;;;;;3847:25:123;;;3820:18;;6312:34:32;3701:177:123;6241:120:32;6374:54;6404:17;6423:4;6374:29;:54::i;5028:213::-;5102:4;-1:-1:-1;;;;;5111:6:32;5094:23;;5090:145;;5195:29;;-1:-1:-1;;;5195:29:32;;;;;;;;;;;11810:993:116;11938:28;;-1:-1:-1;;;11938:28:116;;-1:-1:-1;;;;;10641:32:123;;;11938:28:116;;;10623:51:123;11920:7:116;;11938:20;;;;;;10596:18:123;;11938:28:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11933:68;;11980:16;;-1:-1:-1;;;11980:16:116;;;;;;;;;;;11933:68;12005:17;12025:12;-1:-1:-1;;;;;12025:25:116;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12005:47;;12113:23;12139:12;-1:-1:-1;;;;;12139:22:116;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12139:24:116;;;;;;;;;;;;:::i;:::-;12113:50;-1:-1:-1;12195:3:116;12226:6;12167:17;12294:240;12318:6;:13;12314:1;:17;12294:240;;;12360:6;-1:-1:-1;;;;;12347:19:116;:6;12354:1;12347:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;12347:19:116;;12343:187;;12468:5;;12464:50;;12494:6;12501:5;12505:1;12501;:5;:::i;:::-;12494:13;;;;;;;;:::i;:::-;;;;;;;12482:25;;12464:50;12519:5;;12343:187;12333:3;;;;:::i;:::-;;;;12294:240;;;-1:-1:-1;12558:78:116;;-1:-1:-1;;;;;27631:15:123;;;12558:78:116;;;27613:34:123;27683:15;;27663:18;;;27656:43;27715:18;;;27708:34;;;12538:17:116;;27548:18:123;;12558:78:116;;;-1:-1:-1;;12558:78:116;;;;;;;;;;;;;;-1:-1:-1;;;;;12558:78:116;-1:-1:-1;;;12558:78:116;;;12656:87;-1:-1:-1;;;12656:87:116;;12558:78;;-1:-1:-1;;;;;;;;12656:48:116;;;;;:87;;12670:7;;-1:-1:-1;;12558:78:116;;-1:-1:-1;;12656:87:116;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12641:102;;12752:7;12747:53;;12773:22;;-1:-1:-1;;;12773:22:116;;;;;;;;;;;12747:53;11875:928;;;;;;;11810:993;;:::o;2658:162:30:-;966:10:36;2717:7:30;1313:22;2570:8;-1:-1:-1;;;;;2570:8:30;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:30;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:30;;966:10:36;2763:40:30;;;10623:51:123;10596:18;;2763:40:30;10477:203:123;3774:248:30;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:30;;-1:-1:-1;;;;;3941:19:30;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;22963:176:116:-;23022:22;;;;;;;;:17;:22;;;23048:87;;-1:-1:-1;;;23048:87:116;;23022:22;;-1:-1:-1;;;;;23048:48:116;;;;;:87;;23062:7;;23022:17;:22;;:17;;23048:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20441:183::-;280:34:119;20537:14:116;267:48:119;;;325:4;318:18;;;366:4;350:21;;20564:56:116;;20609:10;20564:13;:56::i;18717:1418::-;18824:4;18892:14;18909:42;18933:5;18940:10;18909:23;:42::i;:::-;18892:59;-1:-1:-1;;;;;;19034:20:116;;19030:48;;19068:5;19061:12;;;;;19030:48;19163:7;-1:-1:-1;;;;;19153:17:116;:6;-1:-1:-1;;;;;19153:17:116;;19149:44;;19184:4;19177:11;;;;;19149:44;17631:28;;19268:52;;19310:5;19303:12;;;;;19268:52;19478:53;;-1:-1:-1;;;19478:53:116;;-1:-1:-1;;;;;19478:34:116;;;;;:53;;19513:5;;19520:10;;19478:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;19478:53:116;;;;;;;;-1:-1:-1;;19478:53:116;;;;;;;;;;;;:::i;:::-;;;19474:519;;;-1:-1:-1;;;;;;19660:24:116;;-1:-1:-1;;;19660:24:116;19656:120;;19699:4;19692:11;;;;;;19656:120;19532:330;19474:519;20094:37;;-1:-1:-1;;;20094:37:116;;-1:-1:-1;;;;;10641:32:123;;;20094:37:116;;;10623:51:123;20094:29:116;;;;;10596:18:123;;20094:37:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20087:44;18717:1418;-1:-1:-1;;;;;18717:1418:116:o;10472:764::-;17631:28;;10541:66;;10583:19;;-1:-1:-1;;;10583:19:116;;;;;;;;;;;10541:66;10735:19;10770:7;-1:-1:-1;;;;;10757:31:116;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10757:33:116;;;;;;;;;;;;:::i;:::-;:40;;-1:-1:-1;10825:2:116;10806:15;10757:40;10820:1;10806:15;:::i;:::-;10805:22;10801:112;;;10834:74;10848:7;10870;-1:-1:-1;;;;;10857:31:116;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10857:33:116;;;;;;;;;;;;:::i;:::-;10891:15;10905:1;10891:11;:15;:::i;:::-;10857:50;;;;;;;;:::i;:::-;;;;;;;10834:13;:74::i;:::-;10917:17;10950:7;-1:-1:-1;;;;;10937:34:116;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10998:74;;-1:-1:-1;;;;;21555:32:123;;10998:74:116;;;21537:51:123;21604:18;;;21597:34;;;10917:56:116;;-1:-1:-1;10978:17:116;;21510:18:123;;10998:74:116;;;-1:-1:-1;;10998:74:116;;;;;;;;;;;;;;-1:-1:-1;;;;;10998:74:116;-1:-1:-1;;;10998:74:116;;;11092:87;-1:-1:-1;;;11092:87:116;;10998:74;;-1:-1:-1;;;;;;;;11092:48:116;;;;;:87;;11106:7;;-1:-1:-1;;10998:74:116;;-1:-1:-1;;11092:87:116;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11077:102;;11188:7;11183:50;;11209:19;;-1:-1:-1;;;11209:19:116;;;;;;;;;;;11183:50;10537:699;;;;10472:764;;:::o;7084:141:31:-;8870:21;8560:40;-1:-1:-1;;;8560:40:31;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:31;;;;;;;;;;;1980:235:30;6931:20:31;:18;:20::i;2657:183:38:-;6931:20:31;:18;:20::i;:::-;1805:1:38::1;2388:30:::0;2810:23;2657:183::o;2779:335:47:-;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:47;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;20922:1809:116:-;21008:14;21036:10;:17;21057:2;21036:23;21028:94;;;;-1:-1:-1;;;21028:94:116;;29015:2:123;21028:94:116;;;28997:21:123;29054:2;29034:18;;;29027:30;-1:-1:-1;;;;;;;;;;;29073:18:123;;;29066:62;29164:28;29144:18;;;29137:56;29210:19;;21028:94:116;28813:422:123;21028:94:116;21170:7;21186:10;21197:2;21186:14;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;21205:9:116;21217:26;21229:10;21205:9;21217:11;:26::i;:::-;21205:38;;21247:9;21259:27;21271:10;21283:2;21259:11;:27::i;:::-;21247:39;-1:-1:-1;22264:66:116;22251:79;;22247:166;;;22337:71;;-1:-1:-1;;;22337:71:116;;29442:2:123;22337:71:116;;;29424:21:123;29481:2;29461:18;;;29454:30;-1:-1:-1;;;;;;;;;;;29500:18:123;;;29493:62;29591:31;29571:18;;;29564:59;29640:19;;22337:71:116;29240:425:123;22247:166:116;22421:1;:7;;22426:2;22421:7;;:18;;;;;22432:1;:7;;22437:2;22432:7;;22421:18;22417:105;;;22446:71;;-1:-1:-1;;;22446:71:116;;29872:2:123;22446:71:116;;;29854:21:123;29911:2;29891:18;;;29884:30;-1:-1:-1;;;;;;;;;;;29930:18:123;;;29923:62;30021:31;30001:18;;;29994:59;30070:19;;22446:71:116;29670:425:123;22417:105:116;22561:25;;;;;;;;;;;;30327::123;;;30400:4;30388:17;;30368:18;;;30361:45;;;;30422:18;;;30415:34;;;30465:18;;;30458:34;;;22561:25:116;;30299:19:123;;22561:25:116;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22561:25:116;;-1:-1:-1;;22561:25:116;;;-1:-1:-1;;;;;;;22634:22:116;;22626:83;;;;-1:-1:-1;;;22626:83:116;;30705:2:123;22626:83:116;;;30687:21:123;30744:2;30724:18;;;30717:30;-1:-1:-1;;;;;;;;;;;30763:18:123;;;30756:62;-1:-1:-1;;;30834:18:123;;;30827:46;30890:19;;22626:83:116;30503:412:123;22626:83:116;22714:13;;;20922:1809;;;;:::o;2186:281:47:-;2263:17;-1:-1:-1;;;;;2263:29:47;;2296:1;2263:34;2259:119;;2320:47;;-1:-1:-1;;;2320:47:47;;-1:-1:-1;;;;;10641:32:123;;2320:47:47;;;10623:51:123;10596:18;;2320:47:47;10477:203:123;2259:119:47;-1:-1:-1;;;;;;;;;;;2387:73:47;;-1:-1:-1;;;;;;2387:73:47;-1:-1:-1;;;;;2387:73:47;;;;;;;;;;2186:281::o;4106:253:57:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:57;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;6598:122:47:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:47;;;;;;;;;;;17991:235:116;18069:14;18112:10;:5;18120:2;18112:10;:::i;:::-;18097:4;:11;:25;;18089:70;;;;-1:-1:-1;;;18089:70:116;;31414:2:123;18089:70:116;;;31396:21:123;;;31433:18;;;31426:30;31492:34;31472:18;;;31465:62;31544:18;;18089:70:116;31212:356:123;18089:70:116;-1:-1:-1;18193:25:116;18207:2;18193:25;18187:32;;17991:235::o;4625:582:57:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:57;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:57;;-1:-1:-1;;;;;10641:32:123;;5121:24:57;;;10623:51:123;10596:18;;5121:24:57;10477:203:123;5041:119:57;-1:-1:-1;5180:10:57;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:57;;;;;;;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:131:123:-;-1:-1:-1;;;;;89:31:123;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:347::-;340:8;350:6;404:3;397:4;389:6;385:17;381:27;371:55;;422:1;419;412:12;371:55;-1:-1:-1;445:20:123;;-1:-1:-1;;;;;477:30:123;;474:50;;;520:1;517;510:12;474:50;557:4;549:6;545:17;533:29;;609:3;602:4;593:6;585;581:19;577:30;574:39;571:59;;;626:1;623;616:12;571:59;289:347;;;;;:::o;641:1205::-;767:6;775;783;791;799;807;815;823;876:3;864:9;855:7;851:23;847:33;844:53;;;893:1;890;883:12;844:53;932:9;919:23;951:31;976:5;951:31;:::i;:::-;1001:5;-1:-1:-1;1058:2:123;1043:18;;1030:32;1071:33;1030:32;1071:33;:::i;:::-;1123:7;-1:-1:-1;1182:2:123;1167:18;;1154:32;1195:33;1154:32;1195:33;:::i;:::-;1247:7;-1:-1:-1;1301:2:123;1286:18;;1273:32;;-1:-1:-1;1356:3:123;1341:19;;1328:33;-1:-1:-1;;;;;1410:14:123;;;1407:34;;;1437:1;1434;1427:12;1407:34;1476:58;1526:7;1517:6;1506:9;1502:22;1476:58;:::i;:::-;1553:8;;-1:-1:-1;1450:84:123;-1:-1:-1;1641:3:123;1626:19;;1613:33;;-1:-1:-1;1658:16:123;;;1655:36;;;1687:1;1684;1677:12;1655:36;;1726:60;1778:7;1767:8;1756:9;1752:24;1726:60;:::i;:::-;641:1205;;;;-1:-1:-1;641:1205:123;;-1:-1:-1;641:1205:123;;;;;;1805:8;-1:-1:-1;;;641:1205:123:o;1851:131::-;-1:-1:-1;;;;;;1925:32:123;;1915:43;;1905:71;;1972:1;1969;1962:12;1987:245;2045:6;2098:2;2086:9;2077:7;2073:23;2069:32;2066:52;;;2114:1;2111;2104:12;2066:52;2153:9;2140:23;2172:30;2196:5;2172:30;:::i;2429:127::-;2490:10;2485:3;2481:20;2478:1;2471:31;2521:4;2518:1;2511:15;2545:4;2542:1;2535:15;2561:275;2632:2;2626:9;2697:2;2678:13;;-1:-1:-1;;2674:27:123;2662:40;;-1:-1:-1;;;;;2717:34:123;;2753:22;;;2714:62;2711:88;;;2779:18;;:::i;:::-;2815:2;2808:22;2561:275;;-1:-1:-1;2561:275:123:o;2841:530::-;2883:5;2936:3;2929:4;2921:6;2917:17;2913:27;2903:55;;2954:1;2951;2944:12;2903:55;2990:6;2977:20;-1:-1:-1;;;;;3012:2:123;3009:26;3006:52;;;3038:18;;:::i;:::-;3082:55;3125:2;3106:13;;-1:-1:-1;;3102:27:123;3131:4;3098:38;3082:55;:::i;:::-;3162:2;3153:7;3146:19;3208:3;3201:4;3196:2;3188:6;3184:15;3180:26;3177:35;3174:55;;;3225:1;3222;3215:12;3174:55;3290:2;3283:4;3275:6;3271:17;3264:4;3255:7;3251:18;3238:55;3338:1;3313:16;;;3331:4;3309:27;3302:38;;;;3317:7;2841:530;-1:-1:-1;;;2841:530:123:o;3376:320::-;3444:6;3497:2;3485:9;3476:7;3472:23;3468:32;3465:52;;;3513:1;3510;3503:12;3465:52;3553:9;3540:23;-1:-1:-1;;;;;3578:6:123;3575:30;3572:50;;;3618:1;3615;3608:12;3572:50;3641:49;3682:7;3673:6;3662:9;3658:22;3641:49;:::i;:::-;3631:59;3376:320;-1:-1:-1;;;;3376:320:123:o;3883:754::-;3980:6;3988;3996;4004;4012;4065:3;4053:9;4044:7;4040:23;4036:33;4033:53;;;4082:1;4079;4072:12;4033:53;4121:9;4108:23;4140:31;4165:5;4140:31;:::i;:::-;4190:5;-1:-1:-1;4247:2:123;4232:18;;4219:32;4260:33;4219:32;4260:33;:::i;:::-;4312:7;-1:-1:-1;4366:2:123;4351:18;;4338:32;;-1:-1:-1;4421:2:123;4406:18;;4393:32;-1:-1:-1;;;;;4437:30:123;;4434:50;;;4480:1;4477;4470:12;4434:50;4519:58;4569:7;4560:6;4549:9;4545:22;4519:58;:::i;:::-;3883:754;;;;-1:-1:-1;3883:754:123;;-1:-1:-1;4596:8:123;;4493:84;3883:754;-1:-1:-1;;;3883:754:123:o;4849:477::-;4928:6;4936;4944;4997:2;4985:9;4976:7;4972:23;4968:32;4965:52;;;5013:1;5010;5003:12;4965:52;5049:9;5036:23;5026:33;;5110:2;5099:9;5095:18;5082:32;-1:-1:-1;;;;;5129:6:123;5126:30;5123:50;;;5169:1;5166;5159:12;5123:50;5208:58;5258:7;5249:6;5238:9;5234:22;5208:58;:::i;:::-;4849:477;;5285:8;;-1:-1:-1;5182:84:123;;-1:-1:-1;;;;4849:477:123:o;5331:539::-;5417:6;5425;5478:2;5466:9;5457:7;5453:23;5449:32;5446:52;;;5494:1;5491;5484:12;5446:52;5534:9;5521:23;-1:-1:-1;;;;;5604:2:123;5596:6;5593:14;5590:34;;;5620:1;5617;5610:12;5590:34;5643:49;5684:7;5675:6;5664:9;5660:22;5643:49;:::i;:::-;5633:59;;5745:2;5734:9;5730:18;5717:32;5701:48;;5774:2;5764:8;5761:16;5758:36;;;5790:1;5787;5780:12;5758:36;;5813:51;5856:7;5845:8;5834:9;5830:24;5813:51;:::i;:::-;5803:61;;;5331:539;;;;;:::o;5875:469::-;5966:6;5974;6027:2;6015:9;6006:7;6002:23;5998:32;5995:52;;;6043:1;6040;6033:12;5995:52;6082:9;6069:23;6101:31;6126:5;6101:31;:::i;:::-;6151:5;-1:-1:-1;6207:2:123;6192:18;;6179:32;-1:-1:-1;;;;;6223:30:123;;6220:50;;;6266:1;6263;6256:12;6220:50;6289:49;6330:7;6321:6;6310:9;6306:22;6289:49;:::i;6349:250::-;6434:1;6444:113;6458:6;6455:1;6452:13;6444:113;;;6534:11;;;6528:18;6515:11;;;6508:39;6480:2;6473:10;6444:113;;;-1:-1:-1;;6591:1:123;6573:16;;6566:27;6349:250::o;6604:270::-;6645:3;6683:5;6677:12;6710:6;6705:3;6698:19;6726:76;6795:6;6788:4;6783:3;6779:14;6772:4;6765:5;6761:16;6726:76;:::i;:::-;6856:2;6835:15;-1:-1:-1;;6831:29:123;6822:39;;;;6863:4;6818:50;;6604:270;-1:-1:-1;;6604:270:123:o;6879:217::-;7026:2;7015:9;7008:21;6989:4;7046:44;7086:2;7075:9;7071:18;7063:6;7046:44;:::i;7283:315::-;7351:6;7359;7412:2;7400:9;7391:7;7387:23;7383:32;7380:52;;;7428:1;7425;7418:12;7380:52;7467:9;7454:23;7486:31;7511:5;7486:31;:::i;:::-;7536:5;7588:2;7573:18;;;;7560:32;;-1:-1:-1;;;7283:315:123:o;8002:388::-;8070:6;8078;8131:2;8119:9;8110:7;8106:23;8102:32;8099:52;;;8147:1;8144;8137:12;8099:52;8186:9;8173:23;8205:31;8230:5;8205:31;:::i;:::-;8255:5;-1:-1:-1;8312:2:123;8297:18;;8284:32;8325:33;8284:32;8325:33;:::i;:::-;8377:7;8367:17;;;8002:388;;;;;:::o;8855:247::-;8914:6;8967:2;8955:9;8946:7;8942:23;8938:32;8935:52;;;8983:1;8980;8973:12;8935:52;9022:9;9009:23;9041:31;9066:5;9041:31;:::i;9107:150::-;9182:20;;9231:1;9221:12;;9211:40;;9247:1;9244;9237:12;9262:1210;9452:6;9460;9468;9476;9484;9492;9500;9508;9516;9524;9532:7;9586:3;9574:9;9565:7;9561:23;9557:33;9554:53;;;9603:1;9600;9593:12;9554:53;9626:29;9645:9;9626:29;:::i;:::-;9616:39;;9702:2;9691:9;9687:18;9674:32;9664:42;;-1:-1:-1;;;;;9792:2:123;9786;9775:9;9771:18;9758:32;9755:40;9752:60;;;9808:1;9805;9798:12;9752:60;9831:75;9898:7;9891:2;9880:9;9876:18;9863:32;9852:9;9848:48;9831:75;:::i;:::-;9821:85;;9925:45;9966:2;9955:9;9951:18;9925:45;:::i;:::-;9915:55;;10017:3;10006:9;10002:19;9989:33;9979:43;;10069:3;10058:9;10054:19;10041:33;10031:43;;10121:3;10110:9;10106:19;10093:33;10083:43;;10145:39;10179:3;10168:9;10164:19;10145:39;:::i;:::-;10135:49;;10203:39;10237:3;10226:9;10222:19;10203:39;:::i;:::-;10193:49;;10292:2;10285:3;10274:9;10270:19;10257:33;10254:41;10251:61;;;10308:1;10305;10298:12;10251:61;;10331:76;10399:7;10391:3;10380:9;10376:19;10363:33;10352:9;10348:49;10331:76;:::i;:::-;10321:86;;10427:39;10461:3;10450:9;10446:19;10427:39;:::i;:::-;10416:50;;9262:1210;;;;;;;;;;;;;;:::o;10685:118::-;10771:5;10764:13;10757:21;10750:5;10747:32;10737:60;;10793:1;10790;10783:12;10808:309;10873:6;10881;10934:2;10922:9;10913:7;10909:23;10905:32;10902:52;;;10950:1;10947;10940:12;10902:52;10986:9;10973:23;10963:33;;11046:2;11035:9;11031:18;11018:32;11059:28;11081:5;11059:28;:::i;11122:167::-;11189:20;;11249:14;11238:26;;11228:37;;11218:65;;11279:1;11276;11269:12;11294:1000;11418:6;11426;11434;11442;11450;11458;11466;11474;11527:3;11515:9;11506:7;11502:23;11498:33;11495:53;;;11544:1;11541;11534:12;11495:53;11580:9;11567:23;11557:33;;11637:2;11626:9;11622:18;11609:32;11599:42;;11692:2;11681:9;11677:18;11664:32;-1:-1:-1;;;;;11756:2:123;11748:6;11745:14;11742:34;;;11772:1;11769;11762:12;11742:34;11811:58;11861:7;11852:6;11841:9;11837:22;11811:58;:::i;:::-;11888:8;;-1:-1:-1;11785:84:123;-1:-1:-1;11976:2:123;11961:18;;11948:32;;-1:-1:-1;11992:16:123;;;11989:36;;;12021:1;12018;12011:12;11989:36;;12060:60;12112:7;12101:8;12090:9;12086:24;12060:60;:::i;:::-;12139:8;;-1:-1:-1;12034:86:123;-1:-1:-1;12193:38:123;;-1:-1:-1;12226:3:123;12211:19;;12193:38;:::i;:::-;12183:48;;12250:38;12283:3;12272:9;12268:19;12250:38;:::i;:::-;12240:48;;11294:1000;;;;;;;;;;;:::o;12523:658::-;12694:2;12746:21;;;12816:13;;12719:18;;;12838:22;;;12665:4;;12694:2;12917:15;;;;12891:2;12876:18;;;12665:4;12960:195;12974:6;12971:1;12968:13;12960:195;;;13039:13;;-1:-1:-1;;;;;13035:39:123;13023:52;;13130:15;;;;13095:12;;;;13071:1;12989:9;12960:195;;;-1:-1:-1;13172:3:123;;12523:658;-1:-1:-1;;;;;;12523:658:123:o;13186:367::-;13249:8;13259:6;13313:3;13306:4;13298:6;13294:17;13290:27;13280:55;;13331:1;13328;13321:12;13280:55;-1:-1:-1;13354:20:123;;-1:-1:-1;;;;;13386:30:123;;13383:50;;;13429:1;13426;13419:12;13383:50;13466:4;13458:6;13454:17;13442:29;;13526:3;13519:4;13509:6;13506:1;13502:14;13494:6;13490:27;13486:38;13483:47;13480:67;;;13543:1;13540;13533:12;13558:1338;13718:6;13726;13734;13742;13750;13758;13766;13774;13827:3;13815:9;13806:7;13802:23;13798:33;13795:53;;;13844:1;13841;13834:12;13795:53;13883:9;13870:23;13902:31;13927:5;13902:31;:::i;:::-;13952:5;-1:-1:-1;14009:2:123;13994:18;;13981:32;14022:33;13981:32;14022:33;:::i;:::-;14074:7;-1:-1:-1;14132:2:123;14117:18;;14104:32;-1:-1:-1;;;;;14185:14:123;;;14182:34;;;14212:1;14209;14202:12;14182:34;14251:70;14313:7;14304:6;14293:9;14289:22;14251:70;:::i;:::-;14340:8;;-1:-1:-1;14225:96:123;-1:-1:-1;14428:2:123;14413:18;;14400:32;;-1:-1:-1;14444:16:123;;;14441:36;;;14473:1;14470;14463:12;14441:36;14512:72;14576:7;14565:8;14554:9;14550:24;14512:72;:::i;:::-;14603:8;;-1:-1:-1;14486:98:123;-1:-1:-1;14691:3:123;14676:19;;14663:33;;-1:-1:-1;14708:16:123;;;14705:36;;;14737:1;14734;14727:12;14901:544;14980:6;14988;14996;15049:2;15037:9;15028:7;15024:23;15020:32;15017:52;;;15065:1;15062;15055:12;15017:52;15104:9;15091:23;15123:31;15148:5;15123:31;:::i;:::-;15173:5;-1:-1:-1;15229:2:123;15214:18;;15201:32;-1:-1:-1;;;;;15245:30:123;;15242:50;;;15288:1;15285;15278:12;15450:545;15538:6;15546;15554;15562;15615:2;15603:9;15594:7;15590:23;15586:32;15583:52;;;15631:1;15628;15621:12;15583:52;15667:9;15654:23;15644:33;;15724:2;15713:9;15709:18;15696:32;15686:42;;15779:2;15768:9;15764:18;15751:32;-1:-1:-1;;;;;15798:6:123;15795:30;15792:50;;;15838:1;15835;15828:12;15792:50;15877:58;15927:7;15918:6;15907:9;15903:22;15877:58;:::i;:::-;15450:545;;;;-1:-1:-1;15954:8:123;-1:-1:-1;;;;15450:545:123:o;16000:823::-;16106:6;16114;16122;16130;16138;16146;16199:3;16187:9;16178:7;16174:23;16170:33;16167:53;;;16216:1;16213;16206:12;16167:53;16255:9;16242:23;16274:31;16299:5;16274:31;:::i;:::-;16324:5;-1:-1:-1;16381:2:123;16366:18;;16353:32;16394:33;16353:32;16394:33;:::i;:::-;16446:7;-1:-1:-1;16500:2:123;16485:18;;16472:32;;-1:-1:-1;16551:2:123;16536:18;;16523:32;;-1:-1:-1;16606:3:123;16591:19;;16578:33;-1:-1:-1;;;;;16623:30:123;;16620:50;;;16666:1;16663;16656:12;16620:50;16705:58;16755:7;16746:6;16735:9;16731:22;16705:58;:::i;:::-;16000:823;;;;-1:-1:-1;16000:823:123;;-1:-1:-1;16000:823:123;;16782:8;;16000:823;-1:-1:-1;;;16000:823:123:o;17148:688::-;17394:4;17423:14;17476:2;17468:6;17464:15;17453:9;17446:34;17528:2;17520:6;17516:15;17511:2;17500:9;17496:18;17489:43;;17568:3;17563:2;17552:9;17548:18;17541:31;17589:45;17629:3;17618:9;17614:19;17606:6;17589:45;:::i;:::-;-1:-1:-1;;;;;17708:15:123;;;17703:2;17688:18;;17681:43;17761:15;;;17755:3;17740:19;;17733:44;-1:-1:-1;17814:15:123;;17661:3;17793:19;;;17786:44;;;;17761:15;17581:53;-1:-1:-1;;;17148:688:123:o;17841:539::-;18044:2;18033:9;18026:21;18007:4;18070:44;18110:2;18099:9;18095:18;18087:6;18070:44;:::i;:::-;18162:9;18154:6;18150:22;18145:2;18134:9;18130:18;18123:50;18197:6;18189;18182:22;18251:6;18243;18238:2;18230:6;18226:15;18213:45;18304:1;18299:2;18290:6;18282;18278:19;18274:28;18267:39;18371:2;18364;18360:7;18355:2;18347:6;18343:15;18339:29;18331:6;18327:42;18323:51;18315:59;;;17841:539;;;;;;:::o;18385:249::-;18454:6;18507:2;18495:9;18486:7;18482:23;18478:32;18475:52;;;18523:1;18520;18513:12;18475:52;18555:9;18549:16;18574:30;18598:5;18574:30;:::i;18639:184::-;18709:6;18762:2;18750:9;18741:7;18737:23;18733:32;18730:52;;;18778:1;18775;18768:12;18730:52;-1:-1:-1;18801:16:123;;18639:184;-1:-1:-1;18639:184:123:o;19174:448::-;19395:6;19384:9;19377:25;19438:2;19433;19422:9;19418:18;19411:30;19358:4;19464:44;19504:2;19493:9;19489:18;19481:6;19464:44;:::i;:::-;19556:9;19548:6;19544:22;19539:2;19528:9;19524:18;19517:50;19584:32;19609:6;19601;19584:32;:::i;:::-;19576:40;19174:448;-1:-1:-1;;;;;;19174:448:123:o;20709:127::-;20770:10;20765:3;20761:20;20758:1;20751:31;20801:4;20798:1;20791:15;20825:4;20822:1;20815:15;20841:245;20908:6;20961:2;20949:9;20940:7;20936:23;20932:32;20929:52;;;20977:1;20974;20967:12;20929:52;21009:9;21003:16;21028:28;21050:5;21028:28;:::i;21091:127::-;21152:10;21147:3;21143:20;21140:1;21133:31;21183:4;21180:1;21173:15;21207:4;21204:1;21197:15;21223:135;21262:3;21283:17;;;21280:43;;21303:18;;:::i;:::-;-1:-1:-1;21350:1:123;21339:13;;21223:135::o;21642:251::-;21712:6;21765:2;21753:9;21744:7;21740:23;21736:32;21733:52;;;21781:1;21778;21771:12;21733:52;21813:9;21807:16;21832:31;21857:5;21832:31;:::i;21898:380::-;21977:1;21973:12;;;;22020;;;22041:61;;22095:4;22087:6;22083:17;22073:27;;22041:61;22148:2;22140:6;22137:14;22117:18;22114:38;22111:161;;22194:10;22189:3;22185:20;22182:1;22175:31;22229:4;22226:1;22219:15;22257:4;22254:1;22247:15;22111:161;;21898:380;;;:::o;22408:544::-;22509:2;22504:3;22501:11;22498:448;;;22545:1;22570:5;22566:2;22559:17;22615:4;22611:2;22601:19;22685:2;22673:10;22669:19;22666:1;22662:27;22656:4;22652:38;22721:4;22709:10;22706:20;22703:47;;;-1:-1:-1;22744:4:123;22703:47;22799:2;22794:3;22790:12;22787:1;22783:20;22777:4;22773:31;22763:41;;22854:82;22872:2;22865:5;22862:13;22854:82;;;22917:17;;;22898:1;22887:13;22854:82;;23128:1348;23252:3;23246:10;-1:-1:-1;;;;;23271:6:123;23268:30;23265:56;;;23301:18;;:::i;:::-;23330:96;23419:6;23379:38;23411:4;23405:11;23379:38;:::i;:::-;23373:4;23330:96;:::i;:::-;23481:4;;23545:2;23534:14;;23562:1;23557:662;;;;24263:1;24280:6;24277:89;;;-1:-1:-1;24332:19:123;;;24326:26;24277:89;-1:-1:-1;;23085:1:123;23081:11;;;23077:24;23073:29;23063:40;23109:1;23105:11;;;23060:57;24379:81;;23527:943;;23557:662;22355:1;22348:14;;;22392:4;22379:18;;-1:-1:-1;;23593:20:123;;;23710:236;23724:7;23721:1;23718:14;23710:236;;;23813:19;;;23807:26;23792:42;;23905:27;;;;23873:1;23861:14;;;;23740:19;;23710:236;;;23714:3;23974:6;23965:7;23962:19;23959:201;;;24035:19;;;24029:26;-1:-1:-1;;24118:1:123;24114:14;;;24130:3;24110:24;24106:37;24102:42;24087:58;24072:74;;23959:201;-1:-1:-1;;;;;24206:1:123;24190:14;;;24186:22;24173:36;;-1:-1:-1;23128:1348:123:o;24769:784::-;24834:5;24887:3;24880:4;24872:6;24868:17;24864:27;24854:55;;24905:1;24902;24895:12;24854:55;24934:6;24928:13;24960:4;-1:-1:-1;;;;;24979:2:123;24976:26;24973:52;;;25005:18;;:::i;:::-;25051:2;25048:1;25044:10;25074:28;25098:2;25094;25090:11;25074:28;:::i;:::-;25136:15;;;25206;;;25202:24;;;25167:12;;;;25238:15;;;25235:35;;;25266:1;25263;25256:12;25235:35;25302:2;25294:6;25290:15;25279:26;;25314:210;25330:6;25325:3;25322:15;25314:210;;;25403:3;25397:10;25420:31;25445:5;25420:31;:::i;:::-;25464:18;;25347:12;;;;25502;;;;25314:210;;;25542:5;24769:784;-1:-1:-1;;;;;;;24769:784:123:o;25558:491::-;25662:6;25670;25723:2;25711:9;25702:7;25698:23;25694:32;25691:52;;;25739:1;25736;25729:12;25691:52;25772:9;25766:16;-1:-1:-1;;;;;25797:6:123;25794:30;25791:50;;;25837:1;25834;25827:12;25791:50;25860:72;25924:7;25915:6;25904:9;25900:22;25860:72;:::i;:::-;25850:82;;;25975:2;25964:9;25960:18;25954:25;25988:31;26013:5;25988:31;:::i;26054:289::-;26185:3;26223:6;26217:13;26239:66;26298:6;26293:3;26286:4;26278:6;26274:17;26239:66;:::i;:::-;26321:16;;;;;26054:289;-1:-1:-1;;26054:289:123:o;26872:363::-;26967:6;27020:2;27008:9;26999:7;26995:23;26991:32;26988:52;;;27036:1;27033;27026:12;26988:52;27069:9;27063:16;-1:-1:-1;;;;;27094:6:123;27091:30;27088:50;;;27134:1;27131;27124:12;27088:50;27157:72;27221:7;27212:6;27201:9;27197:22;27157:72;:::i;27240:128::-;27307:9;;;27328:11;;;27325:37;;;27342:18;;:::i;27753:632::-;28034:1;28030;28025:3;28021:11;28017:19;28009:6;28005:32;27994:9;27987:51;28074:6;28069:2;28058:9;28054:18;28047:34;28117:3;28112:2;28101:9;28097:18;28090:31;27968:4;28138:45;28178:3;28167:9;28163:19;28155:6;28138:45;:::i;:::-;28130:53;;28213:1;28205:6;28202:13;28192:144;;28258:10;28253:3;28249:20;28246:1;28239:31;28293:4;28290:1;28283:15;28321:4;28318:1;28311:15;28192:144;28372:6;28367:2;28356:9;28352:18;28345:34;27753:632;;;;;;;:::o;28390:288::-;28565:6;28554:9;28547:25;28608:2;28603;28592:9;28588:18;28581:30;28528:4;28628:44;28668:2;28657:9;28653:18;28645:6;28628:44;:::i;28683:125::-;28748:9;;;28769:10;;;28766:36;;;28782:18;;:::i",
    "linkReferences": {},
    "immutableReferences": {
      "40392": [
        { "start": 7447, "length": 32 },
        { "start": 7488, "length": 32 },
        { "start": 7809, "length": 32 }
      ]
    }
  },
  "methodIdentifiers": {
    "NAME()": "a3f4df7e",
    "UPGRADE_INTERFACE_VERSION()": "ad3cb1cc",
    "VERSION()": "ffa1ad74",
    "activeSessions(address,uint256)": "45fd1315",
    "addSigner(address)": "eb12d61e",
    "checkAfterExecution(bytes32,bool)": "93271368",
    "checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)": "75f0bb52",
    "confirm(bytes32,bytes32,bytes)": "e26be210",
    "contractExists(address)": "7709bc78",
    "domainSeparator()": "f698da25",
    "encodeMessageDataForSafe(address,bytes)": "23031640",
    "getChainId()": "3408e470",
    "getMessageHash(bytes)": "0a1028c4",
    "getMessageHashForSafe(address,bytes)": "6ac24784",
    "getModules()": "b2494df3",
    "initialize(address,address)": "485cc955",
    "isExpired(address,address)": "6290319a",
    "isValidSignature(bytes,bytes)": "20c13b0b",
    "isValidSignature(bytes32,bytes)": "1626ba7e",
    "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": "bc197c81",
    "onERC1155Received(address,address,uint256,uint256,bytes)": "f23a6e61",
    "onERC721Received(address,address,uint256,bytes)": "150b7a02",
    "owner()": "8da5cb5b",
    "proxiableUUID()": "52d1902d",
    "removeExpiredSessions(address)": "5e413c5a",
    "renounceOwnership()": "715018a6",
    "request(bytes32,bytes32,bytes,bytes,uint48,uint48)": "9b7177e7",
    "revoke(address)": "74a8f103",
    "sessionRequests(address,bytes32)": "f681de3b",
    "simulate(address,bytes)": "bd61951d",
    "supportsInterface(bytes4)": "01ffc9a7",
    "tokensReceived(address,address,address,uint256,bytes,bytes)": "0023de29",
    "transferOwnership(address)": "f2fde38b",
    "twoFAFactory()": "ee2b8f3e",
    "upgradeToAndCall(address,bytes)": "4f1ef286"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccountNotCreated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ArrayLimitExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChallengeExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedToAddSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedToRemoveSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOwnerSignedSessionHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProvider\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSessionData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SessionOwnerIsProvider\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SessionRequestExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SessionRequestNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignerAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignerNotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sessionOwner\",\"type\":\"address\"}],\"name\":\"Confirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sessionRequestHash\",\"type\":\"bytes32\"}],\"name\":\"Requested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"NAME\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"activeSessions\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"expiry\",\"type\":\"uint48\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"addSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"checkAfterExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"enum Enum.Operation\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"}],\"name\":\"checkTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sessionRequestHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sessionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"ownerSignedSessionHash\",\"type\":\"bytes\"}],\"name\":\"confirm\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Safe\",\"name\":\"safe\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"encodeMessageDataForSafe\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Safe\",\"name\":\"safe\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"getMessageHashForSafe\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getModules\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_twoFAFactory\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"isExpired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"removeExpiredSessions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sessionSalt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sessionRequestHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signedSessionRequestHash\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signedSessionHash\",\"type\":\"bytes\"},{\"internalType\":\"uint48\",\"name\":\"sessionExpiry\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"challengeExpiry\",\"type\":\"uint48\"}],\"name\":\"request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sessionRequests\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"expiry\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"challengeExpiry\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"signedSessionHash\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"calldataPayload\",\"type\":\"bytes\"}],\"name\":\"simulate\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"response\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"tokensReceived\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"twoFAFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"addSigner(address)\":{\"custom:throws\":\"AccountNotCreated if the caller is not a valid contractSignerAlreadyExists if the signer is already an owner of the account\",\"details\":\"Can only be called by an existing account contract\",\"params\":{\"signer\":\"The address to add as a new signer to the account\"}},\"checkAfterExecution(bytes32,bool)\":{\"details\":\"Required by the Guard interface but not used in this implementation\"},\"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)\":{\"details\":\"Implements the Guard interface to automatically clean up expired sessions      before any transaction is executed\"},\"confirm(bytes32,bytes32,bytes)\":{\"custom:emits\":\"Confirmed event with provider, account, and session owner addresses\",\"custom:throws\":\"SessionRequestNotFound if the session request doesn't existSessionRequestExpired if the session request has expiredInvalidProvider if the recovered provider doesn't match the senderInvalidOwnerSignedSessionHash if the owner signature is invalid\",\"details\":\"Verifies signatures from both provider and owner before adding the owner as a signer\",\"params\":{\"ownerSignedSessionHash\":\"Signature of the session hash by the session owner\",\"sessionHash\":\"Hash of the session data\",\"sessionRequestHash\":\"Hash of the session request to confirm\"}},\"contractExists(address)\":{\"details\":\"Uses assembly to check the code size at the address\",\"params\":{\"contractAddress\":\"The address to check for contract code\"},\"returns\":{\"_0\":\"True if contract code exists at the address, false otherwise\"}},\"encodeMessageDataForSafe(address,bytes)\":{\"details\":\"Returns the pre-image of the message hash (see getMessageHashForSafe).\",\"params\":{\"message\":\"Message that should be encoded.\",\"safe\":\"Safe to which the message is targeted.\"},\"returns\":{\"_0\":\"Encoded message.\"}},\"getChainId()\":{\"details\":\"Returns the chain id used by this contract.\"},\"getMessageHash(bytes)\":{\"details\":\"Returns the hash of a message to be signed by owners.\",\"params\":{\"message\":\"Raw message bytes.\"},\"returns\":{\"_0\":\"Message hash.\"}},\"getMessageHashForSafe(address,bytes)\":{\"details\":\"Returns hash of a message that can be signed by owners.\",\"params\":{\"message\":\"Message that should be hashed.\",\"safe\":\"Safe to which the message is targeted.\"},\"returns\":{\"_0\":\"Message hash.\"}},\"getModules()\":{\"details\":\"Returns array of first 10 modules.\",\"returns\":{\"_0\":\"Array of modules.\"}},\"isValidSignature(bytes,bytes)\":{\"details\":\"Implementation of ISignatureValidator (see `interfaces/ISignatureValidator.sol`)\",\"params\":{\"_data\":\"Arbitrary length data signed on the behalf of address(msg.sender).\",\"_signature\":\"Signature byte array associated with _data.\"},\"returns\":{\"_0\":\"The EIP-1271 magic value.\"}},\"isValidSignature(bytes32,bytes)\":{\"params\":{\"_dataHash\":\"Hash of the data signed on the behalf of address(msg.sender)\",\"_signature\":\"Signature byte array associated with _dataHash\"},\"returns\":{\"_0\":\"Updated EIP1271 magic value if signature is valid, otherwise 0x0\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"removeExpiredSessions(address)\":{\"custom:security\":\"This function is called automatically by the Guard's checkTransaction function                  before any transaction execution to ensure expired sessions are properly cleaned up\",\"details\":\"Iterates through all active sessions, removes signers from accounts where sessions have expired,      and deletes the expired session entries from the activeSessions array\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"request(bytes32,bytes32,bytes,bytes,uint48,uint48)\":{\"custom:emits\":\"Requested event with provider address and session request hash\",\"custom:throws\":\"SessionRequestExpired if the expiry timestamp is in the pastSessionOwnerIsProvider if the recovered session owner is the same as the provider\",\"details\":\"Creates or retrieves an account and stores the session request for later confirmation\",\"params\":{\"challengeExpiry\":\"Timestamp when the challenge expires (0 for no challenge)\",\"sessionExpiry\":\"Timestamp when the session request expires (0 for no expiry)\",\"sessionRequestHash\":\"Hash of the session request data\",\"sessionSalt\":\"A unique salt used to deterministically generate the account address\",\"signedSessionHash\":\"Signature of the session hash by the provider\",\"signedSessionRequestHash\":\"Signature of the session request hash by the session owner\"}},\"revoke(address)\":{\"custom:throws\":\"AccountNotCreated if the caller is not a valid contractSignerNotOwner if the signer is not an owner of the account\",\"details\":\"Can only be called by an existing account contract\",\"params\":{\"signer\":\"The address to remove as a signer from the account\"}},\"simulate(address,bytes)\":{\"details\":\"Performs a delegatecall on a targetContract in the context of self. Internally reverts execution to avoid side effects (making it static). Catches revert and returns encoded result as bytes.Inspired by https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\",\"params\":{\"calldataPayload\":\"Calldata that should be sent to the target contract (encoded method name and arguments).\",\"targetContract\":\"Address of the contract containing the code to execute.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Overrides both BaseGuard and TokenCallbackHandler implementations\",\"params\":{\"interfaceId\":\"The interface identifier to check\"},\"returns\":{\"_0\":\"True if the contract implements the interface, false otherwise\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addSigner(address)\":{\"notice\":\"Adds a new signer to the calling account\"},\"checkAfterExecution(bytes32,bool)\":{\"notice\":\"Hook that is called after a transaction has been executed\"},\"checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)\":{\"notice\":\"Hook that is called before any transaction execution\"},\"confirm(bytes32,bytes32,bytes)\":{\"notice\":\"Confirms a session request and adds the session owner as a signer to the account\"},\"contractExists(address)\":{\"notice\":\"Checks if a contract exists at the given address\"},\"isValidSignature(bytes,bytes)\":{\"notice\":\"Legacy EIP-1271 signature validation method.\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Implementation of updated EIP-1271 signature validation method.\"},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"Handles ERC1155 Token batch callback. return Standardized onERC1155BatchReceived return value.\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"notice\":\"Handles ERC1155 Token callback. return Standardized onERC1155Received return value.\"},\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"Handles ERC721 Token callback.  return Standardized onERC721Received return value.\"},\"removeExpiredSessions(address)\":{\"notice\":\"Removes all expired sessions from active sessions\"},\"request(bytes32,bytes32,bytes,bytes,uint48,uint48)\":{\"notice\":\"Initiates a session request between a provider and a session owner\"},\"revoke(address)\":{\"notice\":\"Removes a signer from the calling account\"},\"supportsInterface(bytes4)\":{\"notice\":\"Determines if the contract implements a specific interface\"},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"notice\":\"Handles ERC777 Token callback. return nothing (not standardized)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Modules/Session/SessionManagerModule.sol\":\"SessionManagerModule\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@cloned/=cloned/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":modulekit/=lib/modulekit/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0x1e2c73d51d6b0d1101f3a4cf0e6def9818a891d6aa8d306f2b127943a69dca2d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ab436d74b405f890e2634c6077df15cc196b4032ec1bdabaaf021ef209e68db\",\"dweb:/ipfs/Qmbb1Qgtdn6S4aqrnpg3y9TDX7erFFcRir9GN62Y7QazaY\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0x62bed173cb126f6d5006706cf249bac8a2d51bfa18f773f314784ff18adc622d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5acc33dddbf2492e37dc32e89cd56ce917272d303a6874805f3a5768a6bfbf54\",\"dweb:/ipfs/QmTsgFhcpUf16gAVazUXU3WspgX8nHke2hzVCvoqS25WEp\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0xc8a57915ace96f5b6a85b57e57690fc038cad9034a3dc368c11828a3707c61ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa880a1a6e5d94005dcf4811b4c0df8d9c06407017ae111bd351483e2b76a72d\",\"dweb:/ipfs/QmcxkEE58gE1vDcZofTr8QpvdjXjgR72yYg7o4vTPSLCsy\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x4a5853bb9688c4e1c65626036cddd8ea2af84ef1046b704ddc3782d84a892410\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://09c1024e6aac9657312fcfcf5c3dee62c22edf9f74a1065e6924c4ec710ecafa\",\"dweb:/ipfs/QmRNURoTUkd6DiZnf8yY8o3stJpVQBifopdSpQgP9RhvRr\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3b4bb409a156dee9ce261458117fe9f81080ca844a8a26c07c857c46d155effe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5792c69fe24bdc063a14e08fe68275007fdb1e5e7e343840a77938cb7e95a64e\",\"dweb:/ipfs/QmcAMhaurUwzhytJFYix4vRNeZeV8g27b8LnV3t7dvYtiK\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0x7121b5b99c4baefb34fdc1f3cc7235aac7138bbc2265344571709417623f5029\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://3866315b5f89f81746192969834b5932b30c62d7e86ad646e99b6055bdc0ca74\",\"dweb:/ipfs/QmRLhuB96iRxeF5pX4FdsizAaqgDaH2eCWFqfEXbdz9v7n\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194\",\"dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IERC165.sol\":{\"keccak256\":\"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc\",\"dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT\"]},\"lib/forge-std/src/interfaces/IERC20.sol\":{\"keccak256\":\"0x4cab887298790f908c27de107e4e2907ca5413aee482ef776f8d2f353c5ef947\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb715e0c4a2bdbe432bb624501506041f06e878e0b72675aebba30ad2c2b72e7\",\"dweb:/ipfs/QmWhhLSvkxS2NrukJJHqFY8gDVE5r9rD4PfHvR24pwdKv9\"]},\"lib/forge-std/src/interfaces/IERC721.sol\":{\"keccak256\":\"0xf069262a264fdb69f8f37a10d2df7374649e9ba73f8414c9c8a3b51184625f15\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://924a41ca82a68ffbd503a5faf2f76d13e9938f10501a71094716f12bb64b4b7f\",\"dweb:/ipfs/QmdWnqfKc5ZGhmxNPTde4zrFchnv9Yk9MpCMb2rdhXE5gm\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/mocks/MockERC20.sol\":{\"keccak256\":\"0xadbdfc6639edec00ba94bb1133a0fd8de31ccafe45c2ef5df9b3ca61b60b559b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc766f01bccf669abac8cc7b2096cc1352a66471ca3772ae61b1801dedc4ed4f\",\"dweb:/ipfs/QmNigaPj1LYkP7Z5xr4ijkUxr2K66fDGeoifG3WoM9ruyw\"]},\"lib/forge-std/src/mocks/MockERC721.sol\":{\"keccak256\":\"0xbfbb755bb379f58b97699f7cda0e9a2b9113daaa072e41b280a5ce6a3bff44c9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5ae0c31d29db14d6a0e9b62d33d550feb307f48a6f45068901a013321f337f87\",\"dweb:/ipfs/QmX25DVXW6XZDvRm6SNBGCWrZQ6oNhdq5CmgtVocvsUdwv\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x85a45f3f10014a0f8be41157a32b6a5f905753ea64a4b64e29fc12b7deeecf39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c74009ce36136b36c77c23935b8e4a7b4f253be2da2be4fb4a916b1ce43743\",\"dweb:/ipfs/QmcH36v3iN7SJJuF73AunLR2LtNxhVJ1wm63ph4dPZ4pcL\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/safe-smart-account/contracts/Safe.sol\":{\"keccak256\":\"0xbab2f7bec33283e349342e7b23f5191c678c64fe02065bac4f4f44fb3f5d2638\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://f95884e85691d49ba3efb9b2a160466fed17377bfa92fc8bf5923f3c61e99119\",\"dweb:/ipfs/QmQjhP9RnB3Cj3DNpWLzWqqvRdKBya6Efx6xzmRrwLqjm9\"]},\"lib/safe-smart-account/contracts/base/Executor.sol\":{\"keccak256\":\"0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://710022b40c9f78a5b55b97f6ce600e4834df2ddd36bf714974d953883c82d58c\",\"dweb:/ipfs/QmbdJNKH5opevm7HxQKQAe6W7dQTgSHKa4nKvbUNGRcQQp\"]},\"lib/safe-smart-account/contracts/base/FallbackManager.sol\":{\"keccak256\":\"0x646b3088f15af8b4f71ac5eeffaa24ce0c1abed5f494f90368208b09e35d5165\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://7975be46d228510c70659b18076aecb3b0e7331b4d3a162444304145143bdc6e\",\"dweb:/ipfs/QmRRbZrWUnoky6pVo8zMUzCTsshR4sZ2FjR13s8vyAb8dV\"]},\"lib/safe-smart-account/contracts/base/GuardManager.sol\":{\"keccak256\":\"0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://3ff8a4194d1160d2e23142937bc9d7eac7b6b553b1ee226390a0df07ebac1b64\",\"dweb:/ipfs/QmSw8Y7z4TQrUTEosdWqcug7TUv9Tg1kxqMKHd7RuTnyzx\"]},\"lib/safe-smart-account/contracts/base/ModuleManager.sol\":{\"keccak256\":\"0xd71b0d56dce386fa6f67c51061face071b2c7b03ec535d68717e2538ec47113a\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://30812896d9f57cae84a432c67fbb3007d566071ec203b2992f1c0f762722df0d\",\"dweb:/ipfs/QmRyJ3JbsUwDQxQDTrqDDX4qNtVu7XiW8cD8WP5kgNJGGz\"]},\"lib/safe-smart-account/contracts/base/OwnerManager.sol\":{\"keccak256\":\"0xec9799093eb7a73461cd5e563198751ee222f956f754ea622a03fe953e515b2c\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://5729c58b14e7b656c71dd3377e9519c0d34ef8c04851a9a21c3d62393e4fae7a\",\"dweb:/ipfs/QmRRtfFpNqvdANny9TYBr8rA3HbT1egUCpb2uXALMHkVxK\"]},\"lib/safe-smart-account/contracts/common/Enum.sol\":{\"keccak256\":\"0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://385929800d1c0f92eb165fcf37a9e28b395b17d8b74f74755654d3a096a0fc34\",\"dweb:/ipfs/QmagieLuN2jrp2oJHFyZuyz65Sh1CcupnXSEKypGFS5Gvo\"]},\"lib/safe-smart-account/contracts/common/NativeCurrencyPaymentFallback.sol\":{\"keccak256\":\"0x3ddcd4130c67326033dcf773d2d87d7147e3a8386993ea3ab3f1c38da406adba\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://740a729397b6a0d903f4738a50e856d4e5039555024937b148d97529525dbfa9\",\"dweb:/ipfs/QmQJuNVvHbkeJ6jjd75D8FsZBPXH6neoGBZdQgtsA82E7g\"]},\"lib/safe-smart-account/contracts/common/SecuredTokenTransfer.sol\":{\"keccak256\":\"0x1eb8c3601538b73dd6a823ac4fca49bb8adc97d1302a936622156636c971eb05\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://c26495b1fe9229ea17f90b70f295030880d629b9ea3016ea20b634983865f7b3\",\"dweb:/ipfs/QmTc1UmKcynkKn8DeviLMuy6scxNvAVSdLoX4ndUtdEL9N\"]},\"lib/safe-smart-account/contracts/common/SelfAuthorized.sol\":{\"keccak256\":\"0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://8e9a317f0c3c02ab1d6c38039bff2b3e0c97f4dc9d229d3d9149c1af1c5023b3\",\"dweb:/ipfs/QmNcZjNChsuXF34T6f3Zu7i3tnqvKN4NyWBWZ4tXLH9kMu\"]},\"lib/safe-smart-account/contracts/common/SignatureDecoder.sol\":{\"keccak256\":\"0x2a3baf0efa1585ddf2276505c6d34fa16f01cafff1288e40110d5e67fb459c7c\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://00cdded3068b9051ee0a966f40926fbc57dbe7ef8bf4285db3740f9d50468c80\",\"dweb:/ipfs/QmcP5hKmaRqBe7TpgoXtncZqsNKKdCCKxZgXoxEL4Nj5F4\"]},\"lib/safe-smart-account/contracts/common/Singleton.sol\":{\"keccak256\":\"0xcab7c6e5fb6d7295a9343f72fec26a2f632ddfe220a6f267b5c5a1eb2f9bce50\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://dd1c31d5787ef590a60f6b0dbc74d09e6fe4d3ad2f0529940d662bf315521cde\",\"dweb:/ipfs/QmSAS5DYrGksJe4cPQ4wLrveXa1CjxAuEiohcLpPG5h2bo\"]},\"lib/safe-smart-account/contracts/common/StorageAccessible.sol\":{\"keccak256\":\"0x2c5412a8f014db332322a6b24ee3cedce15dca17a721ae49fdef368568d4391e\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://e775f267d3e60ebe452d9533f46a0eb1f1dc4593d1bcb553e86cea205a5f361e\",\"dweb:/ipfs/QmQdYDHGQsiMx1AADWRhX7tduU9ycTzrT5q3zBWvphXzKZ\"]},\"lib/safe-smart-account/contracts/external/SafeMath.sol\":{\"keccak256\":\"0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://351c66e5fe92c0a51f79d133521545dabdd3f756312a7b1428c1fc813c512a1c\",\"dweb:/ipfs/QmdnrRmgef8SdamEU6fVEqFD5RQwXeDFTfQuZEfX2vxC4x\"]},\"lib/safe-smart-account/contracts/handler/CompatibilityFallbackHandler.sol\":{\"keccak256\":\"0x3eee5c142041e92895d45f8e9acb9ac2203b0ac39418e8d2971e78bf0775bcf7\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://6ca95ba88f388a206e14ea0ac2c4a2bb0b60b83a619d1dd3d61772588394fa07\",\"dweb:/ipfs/QmbhhRhBP4n9TVLohTV4GtESeRsumrk4JduLG7DwbBrtxH\"]},\"lib/safe-smart-account/contracts/handler/TokenCallbackHandler.sol\":{\"keccak256\":\"0xc8fb9e60f5e561c7e4992a396e928344c278c2fbec8af65aebec44281542e7cb\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://e197c9a628bdce9a1df8da8ba07733ce0e8b5496a28a22a370dec979104c79da\",\"dweb:/ipfs/QmUx8YhmT22YZYEXp2bVNR91hSb9w5qjAkzGiFy6DRNpdu\"]},\"lib/safe-smart-account/contracts/interfaces/ERC1155TokenReceiver.sol\":{\"keccak256\":\"0x87e62665c041cade64e753ecdccf931cb100ab6e4bcc98769c1e6474be9db493\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://59ca1157dcfe19c72b9d1244a6ae5ec70fee9793d4d8af523b70f22ae567d55c\",\"dweb:/ipfs/QmfE3kv73QuQWAWQND927LWVHVLCp19m1mLUvxVYJDEFZM\"]},\"lib/safe-smart-account/contracts/interfaces/ERC721TokenReceiver.sol\":{\"keccak256\":\"0x96c4c5457fede2d4c6012011dfda36f8e8ffdb7388468f2dddb35661538bf479\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://99a54737bc23722f79ec9cf9de63ba35b556a61df453eb332f3cac783503f26c\",\"dweb:/ipfs/QmbLW5C2RhoLbwDWEPtTKpyYE5apT9B3q4U11PZG3wSM1n\"]},\"lib/safe-smart-account/contracts/interfaces/ERC777TokensRecipient.sol\":{\"keccak256\":\"0x32ca7f1610659f35e52f5a989e1d844b7847ad57fab06e0cae5bc027248536ac\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://9082896ec697e320087b1a682b69a5cdf71b33a2f7a956e2fb6054f9f9d56d06\",\"dweb:/ipfs/QmUu7iNkQNvvqBPbbxuhqiQpYPYYnfsyPEsf4AMQFANXFZ\"]},\"lib/safe-smart-account/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://bb2039e1459ace1e68761e873632fc339866332f9f5ecb7452a0bc3a3b847e89\",\"dweb:/ipfs/QmYXvDQXJnDkXFvsvKLyZXaAv4x42qvtbtmwHftP4RKX38\"]},\"lib/safe-smart-account/contracts/interfaces/ISignatureValidator.sol\":{\"keccak256\":\"0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://3c4a1371948b11f78171bc4ae4fd169a1eec11e5c4b273eb2c54bc030a1aae25\",\"dweb:/ipfs/QmPuztatXZYVS65n8YbCyccJFZYPP6zQfBQ8tTY27pB978\"]},\"lib/safe-smart-account/contracts/proxies/IProxyCreationCallback.sol\":{\"keccak256\":\"0xf5410c842c1bbff96a2047b31f5437a9dc5183d004ab1fc9f952220f11379602\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://0ac1fa0c7d6fc683384a3ce0b328c66adcc53b6a3e59d3b67c62404dd57c3099\",\"dweb:/ipfs/QmcVvxtcjZqyQwQcU4cPU4SZZ2LEahsmVWgJWGh5n8EHa7\"]},\"lib/safe-smart-account/contracts/proxies/SafeProxy.sol\":{\"keccak256\":\"0x5dccbe86285c1d4c4b2fed0ae8007620c3186d22411f43feecfbf8a028e5c7e2\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://a1a02d01a92895110505e141d05b0924ea457a25b89a161f0aeedf6b5cb41aec\",\"dweb:/ipfs/QmYWEsFbWwtrVvEF9MNQtf4X3Qt13dAE8o44tEyAS9jmKP\"]},\"lib/safe-smart-account/contracts/proxies/SafeProxyFactory.sol\":{\"keccak256\":\"0xdc68ce6d07d02723fcdde9f115c976d78bc599667b4f9d08e6cda50f51949533\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://0389c45311e383f0a27a928594341da67f061bf88795aafdbfb5e8449416fc26\",\"dweb:/ipfs/QmZXmXReN6uro3RAbh661G6LqfMEMeaLKRVoeJr5nx1tnh\"]},\"src/Modules/Session/SessionManagerModule.sol\":{\"keccak256\":\"0x5264d5c9368cb19b3f8c104f9fae634699768b0d61118ba9f6c9c8927b184505\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://06d8b95f217ec1e1808e629ef9584a363d3d3c3412f2ab86fd154a8a1ad4aa6f\",\"dweb:/ipfs/QmXNmJmvWGgHhoJ3RjRDR7uzVG8hQevfTyVq9QSwmRgZZy\"]},\"src/Modules/Session/SessionRequest.sol\":{\"keccak256\":\"0x233fc5d46accf2fb98d6463d5ad1f78315cd42b029e45367241a6f8600268ce4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e63959db5fc6ce12945185776130aa83d8bca0829488dd147f0997d7d7da86bd\",\"dweb:/ipfs/QmVhkBRjUu95TDapLFKSK1a9fHdGSCpdPu5rjY9saC7EvP\"]},\"src/Modules/Session/TwoFAFactory.sol\":{\"keccak256\":\"0xed2e50fa097bc368fae7efed010e01703a520fd4b3ad2296454b96e18798cfeb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3605e49d0e8238726d6210c2bf3bca2703b4fee774a408344ae3dcef3b3077a\",\"dweb:/ipfs/QmSUrQoGuRDnmUzHyc7eTUisjtjZioyaSHZ4QTmechNkQo\"]},\"src/utils/Helpers.sol\":{\"keccak256\":\"0xc657478b79d81046384ff1206c14e8ad57fc54fc409f4ac7d11d990d8a97011c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a37bf5a576c3f2f0c14685a436d6268c8f26cfdba434a86ff63c2f5a07e15c01\",\"dweb:/ipfs/QmUP4nQsJKKchBqXNCGL57yGz4wumsgZVYqtsM1r5dkF3h\"]},\"src/utils/SafeSuiteLib.sol\":{\"keccak256\":\"0x7ab55dac7abd26606f2d32422a405d79ce7c655dfb3fd964a699c1878ab2f41b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://270de7ce7fb6c641a6782fe8a50aacb8b598dc0f5693d08d1af8ffdd91f8ac00\",\"dweb:/ipfs/QmRaa71vgWUwytZWw8UUHmAE3vXmi96JLGyVySVbpDxbQJ\"]}},\"version\":1}",
  "metadata": {
    "compiler": { "version": "0.8.20+commit.a1b79de6" },
    "language": "Solidity",
    "output": {
      "abi": [
        { "inputs": [], "type": "error", "name": "AccountNotCreated" },
        {
          "inputs": [
            { "internalType": "address", "name": "target", "type": "address" }
          ],
          "type": "error",
          "name": "AddressEmptyCode"
        },
        { "inputs": [], "type": "error", "name": "ArrayLimitExceeded" },
        { "inputs": [], "type": "error", "name": "ChallengeExpired" },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "implementation",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "ERC1967InvalidImplementation"
        },
        { "inputs": [], "type": "error", "name": "ERC1967NonPayable" },
        { "inputs": [], "type": "error", "name": "FailedInnerCall" },
        { "inputs": [], "type": "error", "name": "FailedToAddSigner" },
        { "inputs": [], "type": "error", "name": "FailedToRemoveSigner" },
        { "inputs": [], "type": "error", "name": "InvalidInitialization" },
        {
          "inputs": [],
          "type": "error",
          "name": "InvalidOwnerSignedSessionHash"
        },
        { "inputs": [], "type": "error", "name": "InvalidProvider" },
        { "inputs": [], "type": "error", "name": "InvalidSessionData" },
        { "inputs": [], "type": "error", "name": "NotInitializing" },
        {
          "inputs": [
            { "internalType": "address", "name": "owner", "type": "address" }
          ],
          "type": "error",
          "name": "OwnableInvalidOwner"
        },
        {
          "inputs": [
            { "internalType": "address", "name": "account", "type": "address" }
          ],
          "type": "error",
          "name": "OwnableUnauthorizedAccount"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "ReentrancyGuardReentrantCall"
        },
        { "inputs": [], "type": "error", "name": "SessionOwnerIsProvider" },
        { "inputs": [], "type": "error", "name": "SessionRequestExpired" },
        { "inputs": [], "type": "error", "name": "SessionRequestNotFound" },
        { "inputs": [], "type": "error", "name": "SignerAlreadyExists" },
        { "inputs": [], "type": "error", "name": "SignerNotOwner" },
        {
          "inputs": [],
          "type": "error",
          "name": "UUPSUnauthorizedCallContext"
        },
        {
          "inputs": [
            { "internalType": "bytes32", "name": "slot", "type": "bytes32" }
          ],
          "type": "error",
          "name": "UUPSUnsupportedProxiableUUID"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "provider",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "account",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "sessionOwner",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Confirmed",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint64",
              "name": "version",
              "type": "uint64",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Initialized",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "previousOwner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipTransferred",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "provider",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "bytes32",
              "name": "sessionRequestHash",
              "type": "bytes32",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Requested",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "implementation",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "Upgraded",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "NAME",
          "outputs": [
            { "internalType": "string", "name": "", "type": "string" }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "UPGRADE_INTERFACE_VERSION",
          "outputs": [
            { "internalType": "string", "name": "", "type": "string" }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "VERSION",
          "outputs": [
            { "internalType": "string", "name": "", "type": "string" }
          ]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "uint256", "name": "", "type": "uint256" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "activeSessions",
          "outputs": [
            { "internalType": "uint48", "name": "expiry", "type": "uint48" },
            { "internalType": "address", "name": "owner", "type": "address" },
            { "internalType": "address", "name": "account", "type": "address" }
          ]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "signer", "type": "address" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "addSigner"
        },
        {
          "inputs": [
            { "internalType": "bytes32", "name": "", "type": "bytes32" },
            { "internalType": "bool", "name": "", "type": "bool" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "checkAfterExecution"
        },
        {
          "inputs": [
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "uint256", "name": "", "type": "uint256" },
            { "internalType": "bytes", "name": "", "type": "bytes" },
            {
              "internalType": "enum Enum.Operation",
              "name": "",
              "type": "uint8"
            },
            { "internalType": "uint256", "name": "", "type": "uint256" },
            { "internalType": "uint256", "name": "", "type": "uint256" },
            { "internalType": "uint256", "name": "", "type": "uint256" },
            { "internalType": "address", "name": "", "type": "address" },
            {
              "internalType": "address payable",
              "name": "",
              "type": "address"
            },
            { "internalType": "bytes", "name": "", "type": "bytes" },
            {
              "internalType": "address",
              "name": "msgSender",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "checkTransaction"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "sessionRequestHash",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "sessionHash",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "ownerSignedSessionHash",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "confirm"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "contractAddress",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "contractExists",
          "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "domainSeparator",
          "outputs": [
            { "internalType": "bytes32", "name": "", "type": "bytes32" }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract Safe",
              "name": "safe",
              "type": "address"
            },
            { "internalType": "bytes", "name": "message", "type": "bytes" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "encodeMessageDataForSafe",
          "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getChainId",
          "outputs": [
            { "internalType": "uint256", "name": "", "type": "uint256" }
          ]
        },
        {
          "inputs": [
            { "internalType": "bytes", "name": "message", "type": "bytes" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getMessageHash",
          "outputs": [
            { "internalType": "bytes32", "name": "", "type": "bytes32" }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract Safe",
              "name": "safe",
              "type": "address"
            },
            { "internalType": "bytes", "name": "message", "type": "bytes" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getMessageHashForSafe",
          "outputs": [
            { "internalType": "bytes32", "name": "", "type": "bytes32" }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getModules",
          "outputs": [
            { "internalType": "address[]", "name": "", "type": "address[]" }
          ]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "_owner", "type": "address" },
            {
              "internalType": "address",
              "name": "_twoFAFactory",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "initialize"
        },
        {
          "inputs": [
            { "internalType": "address", "name": "account", "type": "address" },
            { "internalType": "address", "name": "_owner", "type": "address" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "isExpired",
          "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "_dataHash",
              "type": "bytes32"
            },
            { "internalType": "bytes", "name": "_signature", "type": "bytes" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "isValidSignature",
          "outputs": [
            { "internalType": "bytes4", "name": "", "type": "bytes4" }
          ]
        },
        {
          "inputs": [
            { "internalType": "bytes", "name": "_data", "type": "bytes" },
            { "internalType": "bytes", "name": "_signature", "type": "bytes" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "isValidSignature",
          "outputs": [
            { "internalType": "bytes4", "name": "", "type": "bytes4" }
          ]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "uint256[]", "name": "", "type": "uint256[]" },
            { "internalType": "uint256[]", "name": "", "type": "uint256[]" },
            { "internalType": "bytes", "name": "", "type": "bytes" }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "onERC1155BatchReceived",
          "outputs": [
            { "internalType": "bytes4", "name": "", "type": "bytes4" }
          ]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "uint256", "name": "", "type": "uint256" },
            { "internalType": "uint256", "name": "", "type": "uint256" },
            { "internalType": "bytes", "name": "", "type": "bytes" }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "onERC1155Received",
          "outputs": [
            { "internalType": "bytes4", "name": "", "type": "bytes4" }
          ]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "uint256", "name": "", "type": "uint256" },
            { "internalType": "bytes", "name": "", "type": "bytes" }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "onERC721Received",
          "outputs": [
            { "internalType": "bytes4", "name": "", "type": "bytes4" }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "owner",
          "outputs": [
            { "internalType": "address", "name": "", "type": "address" }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "proxiableUUID",
          "outputs": [
            { "internalType": "bytes32", "name": "", "type": "bytes32" }
          ]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "sender", "type": "address" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "removeExpiredSessions"
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "renounceOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "sessionSalt",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "sessionRequestHash",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "signedSessionRequestHash",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "signedSessionHash",
              "type": "bytes"
            },
            {
              "internalType": "uint48",
              "name": "sessionExpiry",
              "type": "uint48"
            },
            {
              "internalType": "uint48",
              "name": "challengeExpiry",
              "type": "uint48"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "request"
        },
        {
          "inputs": [
            { "internalType": "address", "name": "signer", "type": "address" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "revoke"
        },
        {
          "inputs": [
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "bytes32", "name": "", "type": "bytes32" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "sessionRequests",
          "outputs": [
            { "internalType": "uint48", "name": "expiry", "type": "uint48" },
            {
              "internalType": "uint48",
              "name": "challengeExpiry",
              "type": "uint48"
            },
            {
              "internalType": "bytes",
              "name": "signedSessionHash",
              "type": "bytes"
            },
            {
              "internalType": "address",
              "name": "provider",
              "type": "address"
            },
            { "internalType": "address", "name": "owner", "type": "address" },
            { "internalType": "address", "name": "account", "type": "address" }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "targetContract",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "calldataPayload",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "simulate",
          "outputs": [
            { "internalType": "bytes", "name": "response", "type": "bytes" }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "bytes4",
              "name": "interfaceId",
              "type": "bytes4"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "supportsInterface",
          "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "uint256", "name": "", "type": "uint256" },
            { "internalType": "bytes", "name": "", "type": "bytes" },
            { "internalType": "bytes", "name": "", "type": "bytes" }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "tokensReceived"
        },
        {
          "inputs": [
            { "internalType": "address", "name": "newOwner", "type": "address" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferOwnership"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "twoFAFactory",
          "outputs": [
            { "internalType": "address", "name": "", "type": "address" }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newImplementation",
              "type": "address"
            },
            { "internalType": "bytes", "name": "data", "type": "bytes" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "upgradeToAndCall"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "addSigner(address)": {
            "custom:throws": "AccountNotCreated if the caller is not a valid contractSignerAlreadyExists if the signer is already an owner of the account",
            "details": "Can only be called by an existing account contract",
            "params": {
              "signer": "The address to add as a new signer to the account"
            }
          },
          "checkAfterExecution(bytes32,bool)": {
            "details": "Required by the Guard interface but not used in this implementation"
          },
          "checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)": {
            "details": "Implements the Guard interface to automatically clean up expired sessions      before any transaction is executed"
          },
          "confirm(bytes32,bytes32,bytes)": {
            "custom:emits": "Confirmed event with provider, account, and session owner addresses",
            "custom:throws": "SessionRequestNotFound if the session request doesn't existSessionRequestExpired if the session request has expiredInvalidProvider if the recovered provider doesn't match the senderInvalidOwnerSignedSessionHash if the owner signature is invalid",
            "details": "Verifies signatures from both provider and owner before adding the owner as a signer",
            "params": {
              "ownerSignedSessionHash": "Signature of the session hash by the session owner",
              "sessionHash": "Hash of the session data",
              "sessionRequestHash": "Hash of the session request to confirm"
            }
          },
          "contractExists(address)": {
            "details": "Uses assembly to check the code size at the address",
            "params": {
              "contractAddress": "The address to check for contract code"
            },
            "returns": {
              "_0": "True if contract code exists at the address, false otherwise"
            }
          },
          "encodeMessageDataForSafe(address,bytes)": {
            "details": "Returns the pre-image of the message hash (see getMessageHashForSafe).",
            "params": {
              "message": "Message that should be encoded.",
              "safe": "Safe to which the message is targeted."
            },
            "returns": { "_0": "Encoded message." }
          },
          "getChainId()": {
            "details": "Returns the chain id used by this contract."
          },
          "getMessageHash(bytes)": {
            "details": "Returns the hash of a message to be signed by owners.",
            "params": { "message": "Raw message bytes." },
            "returns": { "_0": "Message hash." }
          },
          "getMessageHashForSafe(address,bytes)": {
            "details": "Returns hash of a message that can be signed by owners.",
            "params": {
              "message": "Message that should be hashed.",
              "safe": "Safe to which the message is targeted."
            },
            "returns": { "_0": "Message hash." }
          },
          "getModules()": {
            "details": "Returns array of first 10 modules.",
            "returns": { "_0": "Array of modules." }
          },
          "isValidSignature(bytes,bytes)": {
            "details": "Implementation of ISignatureValidator (see `interfaces/ISignatureValidator.sol`)",
            "params": {
              "_data": "Arbitrary length data signed on the behalf of address(msg.sender).",
              "_signature": "Signature byte array associated with _data."
            },
            "returns": { "_0": "The EIP-1271 magic value." }
          },
          "isValidSignature(bytes32,bytes)": {
            "params": {
              "_dataHash": "Hash of the data signed on the behalf of address(msg.sender)",
              "_signature": "Signature byte array associated with _dataHash"
            },
            "returns": {
              "_0": "Updated EIP1271 magic value if signature is valid, otherwise 0x0"
            }
          },
          "owner()": { "details": "Returns the address of the current owner." },
          "proxiableUUID()": {
            "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."
          },
          "removeExpiredSessions(address)": {
            "custom:security": "This function is called automatically by the Guard's checkTransaction function                  before any transaction execution to ensure expired sessions are properly cleaned up",
            "details": "Iterates through all active sessions, removes signers from accounts where sessions have expired,      and deletes the expired session entries from the activeSessions array"
          },
          "renounceOwnership()": {
            "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
          },
          "request(bytes32,bytes32,bytes,bytes,uint48,uint48)": {
            "custom:emits": "Requested event with provider address and session request hash",
            "custom:throws": "SessionRequestExpired if the expiry timestamp is in the pastSessionOwnerIsProvider if the recovered session owner is the same as the provider",
            "details": "Creates or retrieves an account and stores the session request for later confirmation",
            "params": {
              "challengeExpiry": "Timestamp when the challenge expires (0 for no challenge)",
              "sessionExpiry": "Timestamp when the session request expires (0 for no expiry)",
              "sessionRequestHash": "Hash of the session request data",
              "sessionSalt": "A unique salt used to deterministically generate the account address",
              "signedSessionHash": "Signature of the session hash by the provider",
              "signedSessionRequestHash": "Signature of the session request hash by the session owner"
            }
          },
          "revoke(address)": {
            "custom:throws": "AccountNotCreated if the caller is not a valid contractSignerNotOwner if the signer is not an owner of the account",
            "details": "Can only be called by an existing account contract",
            "params": {
              "signer": "The address to remove as a signer from the account"
            }
          },
          "simulate(address,bytes)": {
            "details": "Performs a delegatecall on a targetContract in the context of self. Internally reverts execution to avoid side effects (making it static). Catches revert and returns encoded result as bytes.Inspired by https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol",
            "params": {
              "calldataPayload": "Calldata that should be sent to the target contract (encoded method name and arguments).",
              "targetContract": "Address of the contract containing the code to execute."
            }
          },
          "supportsInterface(bytes4)": {
            "details": "Overrides both BaseGuard and TokenCallbackHandler implementations",
            "params": { "interfaceId": "The interface identifier to check" },
            "returns": {
              "_0": "True if the contract implements the interface, false otherwise"
            }
          },
          "transferOwnership(address)": {
            "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
          },
          "upgradeToAndCall(address,bytes)": {
            "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall",
            "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "addSigner(address)": {
            "notice": "Adds a new signer to the calling account"
          },
          "checkAfterExecution(bytes32,bool)": {
            "notice": "Hook that is called after a transaction has been executed"
          },
          "checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)": {
            "notice": "Hook that is called before any transaction execution"
          },
          "confirm(bytes32,bytes32,bytes)": {
            "notice": "Confirms a session request and adds the session owner as a signer to the account"
          },
          "contractExists(address)": {
            "notice": "Checks if a contract exists at the given address"
          },
          "isValidSignature(bytes,bytes)": {
            "notice": "Legacy EIP-1271 signature validation method."
          },
          "isValidSignature(bytes32,bytes)": {
            "notice": "Implementation of updated EIP-1271 signature validation method."
          },
          "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": {
            "notice": "Handles ERC1155 Token batch callback. return Standardized onERC1155BatchReceived return value."
          },
          "onERC1155Received(address,address,uint256,uint256,bytes)": {
            "notice": "Handles ERC1155 Token callback. return Standardized onERC1155Received return value."
          },
          "onERC721Received(address,address,uint256,bytes)": {
            "notice": "Handles ERC721 Token callback.  return Standardized onERC721Received return value."
          },
          "removeExpiredSessions(address)": {
            "notice": "Removes all expired sessions from active sessions"
          },
          "request(bytes32,bytes32,bytes,bytes,uint48,uint48)": {
            "notice": "Initiates a session request between a provider and a session owner"
          },
          "revoke(address)": {
            "notice": "Removes a signer from the calling account"
          },
          "supportsInterface(bytes4)": {
            "notice": "Determines if the contract implements a specific interface"
          },
          "tokensReceived(address,address,address,uint256,bytes,bytes)": {
            "notice": "Handles ERC777 Token callback. return nothing (not standardized)"
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@cloned/=cloned/",
        "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        "account-abstraction/=lib/account-abstraction/contracts/",
        "ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
        "forge-std/=lib/forge-std/src/",
        "modulekit/=lib/modulekit/src/",
        "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/",
        "safe-smart-account/=lib/safe-smart-account/",
        "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"
      ],
      "optimizer": { "enabled": true, "runs": 200 },
      "metadata": { "bytecodeHash": "ipfs" },
      "compilationTarget": {
        "src/Modules/Session/SessionManagerModule.sol": "SessionManagerModule"
      },
      "evmVersion": "paris",
      "libraries": {}
    },
    "sources": {
      "lib/forge-std/src/Base.sol": {
        "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c",
        "urls": [
          "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224",
          "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/StdAssertions.sol": {
        "keccak256": "0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270",
        "urls": [
          "bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe",
          "dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/StdChains.sol": {
        "keccak256": "0x1e2c73d51d6b0d1101f3a4cf0e6def9818a891d6aa8d306f2b127943a69dca2d",
        "urls": [
          "bzz-raw://0ab436d74b405f890e2634c6077df15cc196b4032ec1bdabaaf021ef209e68db",
          "dweb:/ipfs/Qmbb1Qgtdn6S4aqrnpg3y9TDX7erFFcRir9GN62Y7QazaY"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/StdCheats.sol": {
        "keccak256": "0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7",
        "urls": [
          "bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2",
          "dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/StdError.sol": {
        "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77",
        "urls": [
          "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6",
          "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/StdInvariant.sol": {
        "keccak256": "0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d",
        "urls": [
          "bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391",
          "dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/StdJson.sol": {
        "keccak256": "0x62bed173cb126f6d5006706cf249bac8a2d51bfa18f773f314784ff18adc622d",
        "urls": [
          "bzz-raw://5acc33dddbf2492e37dc32e89cd56ce917272d303a6874805f3a5768a6bfbf54",
          "dweb:/ipfs/QmTsgFhcpUf16gAVazUXU3WspgX8nHke2hzVCvoqS25WEp"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/StdMath.sol": {
        "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2",
        "urls": [
          "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92",
          "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/StdStorage.sol": {
        "keccak256": "0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc",
        "urls": [
          "bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57",
          "dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/StdStyle.sol": {
        "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d",
        "urls": [
          "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8",
          "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/StdToml.sol": {
        "keccak256": "0xc8a57915ace96f5b6a85b57e57690fc038cad9034a3dc368c11828a3707c61ab",
        "urls": [
          "bzz-raw://fa880a1a6e5d94005dcf4811b4c0df8d9c06407017ae111bd351483e2b76a72d",
          "dweb:/ipfs/QmcxkEE58gE1vDcZofTr8QpvdjXjgR72yYg7o4vTPSLCsy"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/StdUtils.sol": {
        "keccak256": "0x4a5853bb9688c4e1c65626036cddd8ea2af84ef1046b704ddc3782d84a892410",
        "urls": [
          "bzz-raw://09c1024e6aac9657312fcfcf5c3dee62c22edf9f74a1065e6924c4ec710ecafa",
          "dweb:/ipfs/QmRNURoTUkd6DiZnf8yY8o3stJpVQBifopdSpQgP9RhvRr"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/Test.sol": {
        "keccak256": "0x3b4bb409a156dee9ce261458117fe9f81080ca844a8a26c07c857c46d155effe",
        "urls": [
          "bzz-raw://5792c69fe24bdc063a14e08fe68275007fdb1e5e7e343840a77938cb7e95a64e",
          "dweb:/ipfs/QmcAMhaurUwzhytJFYix4vRNeZeV8g27b8LnV3t7dvYtiK"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/Vm.sol": {
        "keccak256": "0x7121b5b99c4baefb34fdc1f3cc7235aac7138bbc2265344571709417623f5029",
        "urls": [
          "bzz-raw://3866315b5f89f81746192969834b5932b30c62d7e86ad646e99b6055bdc0ca74",
          "dweb:/ipfs/QmRLhuB96iRxeF5pX4FdsizAaqgDaH2eCWFqfEXbdz9v7n"
        ],
        "license": "MIT OR Apache-2.0"
      },
      "lib/forge-std/src/console.sol": {
        "keccak256": "0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a",
        "urls": [
          "bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194",
          "dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/console2.sol": {
        "keccak256": "0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f",
        "urls": [
          "bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d",
          "dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/interfaces/IERC165.sol": {
        "keccak256": "0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600",
        "urls": [
          "bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc",
          "dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/interfaces/IERC20.sol": {
        "keccak256": "0x4cab887298790f908c27de107e4e2907ca5413aee482ef776f8d2f353c5ef947",
        "urls": [
          "bzz-raw://bb715e0c4a2bdbe432bb624501506041f06e878e0b72675aebba30ad2c2b72e7",
          "dweb:/ipfs/QmWhhLSvkxS2NrukJJHqFY8gDVE5r9rD4PfHvR24pwdKv9"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/interfaces/IERC721.sol": {
        "keccak256": "0xf069262a264fdb69f8f37a10d2df7374649e9ba73f8414c9c8a3b51184625f15",
        "urls": [
          "bzz-raw://924a41ca82a68ffbd503a5faf2f76d13e9938f10501a71094716f12bb64b4b7f",
          "dweb:/ipfs/QmdWnqfKc5ZGhmxNPTde4zrFchnv9Yk9MpCMb2rdhXE5gm"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/interfaces/IMulticall3.sol": {
        "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a",
        "urls": [
          "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0",
          "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/mocks/MockERC20.sol": {
        "keccak256": "0xadbdfc6639edec00ba94bb1133a0fd8de31ccafe45c2ef5df9b3ca61b60b559b",
        "urls": [
          "bzz-raw://bc766f01bccf669abac8cc7b2096cc1352a66471ca3772ae61b1801dedc4ed4f",
          "dweb:/ipfs/QmNigaPj1LYkP7Z5xr4ijkUxr2K66fDGeoifG3WoM9ruyw"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/mocks/MockERC721.sol": {
        "keccak256": "0xbfbb755bb379f58b97699f7cda0e9a2b9113daaa072e41b280a5ce6a3bff44c9",
        "urls": [
          "bzz-raw://5ae0c31d29db14d6a0e9b62d33d550feb307f48a6f45068901a013321f337f87",
          "dweb:/ipfs/QmX25DVXW6XZDvRm6SNBGCWrZQ6oNhdq5CmgtVocvsUdwv"
        ],
        "license": "MIT"
      },
      "lib/forge-std/src/safeconsole.sol": {
        "keccak256": "0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11",
        "urls": [
          "bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab",
          "dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": {
        "keccak256": "0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a",
        "urls": [
          "bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6",
          "dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": {
        "keccak256": "0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b",
        "urls": [
          "bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609",
          "dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol": {
        "keccak256": "0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53",
        "urls": [
          "bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930",
          "dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": {
        "keccak256": "0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397",
        "urls": [
          "bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9",
          "dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol": {
        "keccak256": "0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74",
        "urls": [
          "bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45",
          "dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol": {
        "keccak256": "0x85a45f3f10014a0f8be41157a32b6a5f905753ea64a4b64e29fc12b7deeecf39",
        "urls": [
          "bzz-raw://c3c74009ce36136b36c77c23935b8e4a7b4f253be2da2be4fb4a916b1ce43743",
          "dweb:/ipfs/QmcH36v3iN7SJJuF73AunLR2LtNxhVJ1wm63ph4dPZ4pcL"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": {
        "keccak256": "0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c",
        "urls": [
          "bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9",
          "dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol": {
        "keccak256": "0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7",
        "urls": [
          "bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f",
          "dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol": {
        "keccak256": "0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65",
        "urls": [
          "bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a",
          "dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": {
        "keccak256": "0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c",
        "urls": [
          "bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa",
          "dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol": {
        "keccak256": "0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80",
        "urls": [
          "bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229",
          "dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70",
        "urls": [
          "bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c",
          "dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
        "keccak256": "0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2",
        "urls": [
          "bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850",
          "dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Address.sol": {
        "keccak256": "0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721",
        "urls": [
          "bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245",
          "dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Context.sol": {
        "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
        "urls": [
          "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
          "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
        "keccak256": "0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418",
        "urls": [
          "bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c",
          "dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"
        ],
        "license": "MIT"
      },
      "lib/safe-smart-account/contracts/Safe.sol": {
        "keccak256": "0xbab2f7bec33283e349342e7b23f5191c678c64fe02065bac4f4f44fb3f5d2638",
        "urls": [
          "bzz-raw://f95884e85691d49ba3efb9b2a160466fed17377bfa92fc8bf5923f3c61e99119",
          "dweb:/ipfs/QmQjhP9RnB3Cj3DNpWLzWqqvRdKBya6Efx6xzmRrwLqjm9"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/base/Executor.sol": {
        "keccak256": "0xf0be832e7529e92000544170a5529d73666a9b5e836b30c6f2ed6ef7d7d8c94a",
        "urls": [
          "bzz-raw://710022b40c9f78a5b55b97f6ce600e4834df2ddd36bf714974d953883c82d58c",
          "dweb:/ipfs/QmbdJNKH5opevm7HxQKQAe6W7dQTgSHKa4nKvbUNGRcQQp"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/base/FallbackManager.sol": {
        "keccak256": "0x646b3088f15af8b4f71ac5eeffaa24ce0c1abed5f494f90368208b09e35d5165",
        "urls": [
          "bzz-raw://7975be46d228510c70659b18076aecb3b0e7331b4d3a162444304145143bdc6e",
          "dweb:/ipfs/QmRRbZrWUnoky6pVo8zMUzCTsshR4sZ2FjR13s8vyAb8dV"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/base/GuardManager.sol": {
        "keccak256": "0xedfc7c830ab35e52d1208986b253f3422c2f0ca68054c10819fb348fcc6ccf5d",
        "urls": [
          "bzz-raw://3ff8a4194d1160d2e23142937bc9d7eac7b6b553b1ee226390a0df07ebac1b64",
          "dweb:/ipfs/QmSw8Y7z4TQrUTEosdWqcug7TUv9Tg1kxqMKHd7RuTnyzx"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/base/ModuleManager.sol": {
        "keccak256": "0xd71b0d56dce386fa6f67c51061face071b2c7b03ec535d68717e2538ec47113a",
        "urls": [
          "bzz-raw://30812896d9f57cae84a432c67fbb3007d566071ec203b2992f1c0f762722df0d",
          "dweb:/ipfs/QmRyJ3JbsUwDQxQDTrqDDX4qNtVu7XiW8cD8WP5kgNJGGz"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/base/OwnerManager.sol": {
        "keccak256": "0xec9799093eb7a73461cd5e563198751ee222f956f754ea622a03fe953e515b2c",
        "urls": [
          "bzz-raw://5729c58b14e7b656c71dd3377e9519c0d34ef8c04851a9a21c3d62393e4fae7a",
          "dweb:/ipfs/QmRRtfFpNqvdANny9TYBr8rA3HbT1egUCpb2uXALMHkVxK"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/common/Enum.sol": {
        "keccak256": "0x4ff3008926a118e9f36e6747facc39dd13168e0d00f516888ae966ec20766453",
        "urls": [
          "bzz-raw://385929800d1c0f92eb165fcf37a9e28b395b17d8b74f74755654d3a096a0fc34",
          "dweb:/ipfs/QmagieLuN2jrp2oJHFyZuyz65Sh1CcupnXSEKypGFS5Gvo"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/common/NativeCurrencyPaymentFallback.sol": {
        "keccak256": "0x3ddcd4130c67326033dcf773d2d87d7147e3a8386993ea3ab3f1c38da406adba",
        "urls": [
          "bzz-raw://740a729397b6a0d903f4738a50e856d4e5039555024937b148d97529525dbfa9",
          "dweb:/ipfs/QmQJuNVvHbkeJ6jjd75D8FsZBPXH6neoGBZdQgtsA82E7g"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/common/SecuredTokenTransfer.sol": {
        "keccak256": "0x1eb8c3601538b73dd6a823ac4fca49bb8adc97d1302a936622156636c971eb05",
        "urls": [
          "bzz-raw://c26495b1fe9229ea17f90b70f295030880d629b9ea3016ea20b634983865f7b3",
          "dweb:/ipfs/QmTc1UmKcynkKn8DeviLMuy6scxNvAVSdLoX4ndUtdEL9N"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/common/SelfAuthorized.sol": {
        "keccak256": "0xfb0e176bb208e047a234fe757e2acd13787e27879570b8544547ac787feb5f13",
        "urls": [
          "bzz-raw://8e9a317f0c3c02ab1d6c38039bff2b3e0c97f4dc9d229d3d9149c1af1c5023b3",
          "dweb:/ipfs/QmNcZjNChsuXF34T6f3Zu7i3tnqvKN4NyWBWZ4tXLH9kMu"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/common/SignatureDecoder.sol": {
        "keccak256": "0x2a3baf0efa1585ddf2276505c6d34fa16f01cafff1288e40110d5e67fb459c7c",
        "urls": [
          "bzz-raw://00cdded3068b9051ee0a966f40926fbc57dbe7ef8bf4285db3740f9d50468c80",
          "dweb:/ipfs/QmcP5hKmaRqBe7TpgoXtncZqsNKKdCCKxZgXoxEL4Nj5F4"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/common/Singleton.sol": {
        "keccak256": "0xcab7c6e5fb6d7295a9343f72fec26a2f632ddfe220a6f267b5c5a1eb2f9bce50",
        "urls": [
          "bzz-raw://dd1c31d5787ef590a60f6b0dbc74d09e6fe4d3ad2f0529940d662bf315521cde",
          "dweb:/ipfs/QmSAS5DYrGksJe4cPQ4wLrveXa1CjxAuEiohcLpPG5h2bo"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/common/StorageAccessible.sol": {
        "keccak256": "0x2c5412a8f014db332322a6b24ee3cedce15dca17a721ae49fdef368568d4391e",
        "urls": [
          "bzz-raw://e775f267d3e60ebe452d9533f46a0eb1f1dc4593d1bcb553e86cea205a5f361e",
          "dweb:/ipfs/QmQdYDHGQsiMx1AADWRhX7tduU9ycTzrT5q3zBWvphXzKZ"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/external/SafeMath.sol": {
        "keccak256": "0x5f856674d9be11344c5899deb43364e19baa75bc881cada4c159938270b2bd89",
        "urls": [
          "bzz-raw://351c66e5fe92c0a51f79d133521545dabdd3f756312a7b1428c1fc813c512a1c",
          "dweb:/ipfs/QmdnrRmgef8SdamEU6fVEqFD5RQwXeDFTfQuZEfX2vxC4x"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/handler/CompatibilityFallbackHandler.sol": {
        "keccak256": "0x3eee5c142041e92895d45f8e9acb9ac2203b0ac39418e8d2971e78bf0775bcf7",
        "urls": [
          "bzz-raw://6ca95ba88f388a206e14ea0ac2c4a2bb0b60b83a619d1dd3d61772588394fa07",
          "dweb:/ipfs/QmbhhRhBP4n9TVLohTV4GtESeRsumrk4JduLG7DwbBrtxH"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/handler/TokenCallbackHandler.sol": {
        "keccak256": "0xc8fb9e60f5e561c7e4992a396e928344c278c2fbec8af65aebec44281542e7cb",
        "urls": [
          "bzz-raw://e197c9a628bdce9a1df8da8ba07733ce0e8b5496a28a22a370dec979104c79da",
          "dweb:/ipfs/QmUx8YhmT22YZYEXp2bVNR91hSb9w5qjAkzGiFy6DRNpdu"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/interfaces/ERC1155TokenReceiver.sol": {
        "keccak256": "0x87e62665c041cade64e753ecdccf931cb100ab6e4bcc98769c1e6474be9db493",
        "urls": [
          "bzz-raw://59ca1157dcfe19c72b9d1244a6ae5ec70fee9793d4d8af523b70f22ae567d55c",
          "dweb:/ipfs/QmfE3kv73QuQWAWQND927LWVHVLCp19m1mLUvxVYJDEFZM"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/interfaces/ERC721TokenReceiver.sol": {
        "keccak256": "0x96c4c5457fede2d4c6012011dfda36f8e8ffdb7388468f2dddb35661538bf479",
        "urls": [
          "bzz-raw://99a54737bc23722f79ec9cf9de63ba35b556a61df453eb332f3cac783503f26c",
          "dweb:/ipfs/QmbLW5C2RhoLbwDWEPtTKpyYE5apT9B3q4U11PZG3wSM1n"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/interfaces/ERC777TokensRecipient.sol": {
        "keccak256": "0x32ca7f1610659f35e52f5a989e1d844b7847ad57fab06e0cae5bc027248536ac",
        "urls": [
          "bzz-raw://9082896ec697e320087b1a682b69a5cdf71b33a2f7a956e2fb6054f9f9d56d06",
          "dweb:/ipfs/QmUu7iNkQNvvqBPbbxuhqiQpYPYYnfsyPEsf4AMQFANXFZ"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/interfaces/IERC165.sol": {
        "keccak256": "0x779ed3893a8812e383670b755f65c7727e9343dadaa4d7a4aa7f4aa35d859fdb",
        "urls": [
          "bzz-raw://bb2039e1459ace1e68761e873632fc339866332f9f5ecb7452a0bc3a3b847e89",
          "dweb:/ipfs/QmYXvDQXJnDkXFvsvKLyZXaAv4x42qvtbtmwHftP4RKX38"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/interfaces/ISignatureValidator.sol": {
        "keccak256": "0x2459cb3ed73ecb80e1e7a6508d09a58cc59570b049f77042f669dedfcc5f6457",
        "urls": [
          "bzz-raw://3c4a1371948b11f78171bc4ae4fd169a1eec11e5c4b273eb2c54bc030a1aae25",
          "dweb:/ipfs/QmPuztatXZYVS65n8YbCyccJFZYPP6zQfBQ8tTY27pB978"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/proxies/IProxyCreationCallback.sol": {
        "keccak256": "0xf5410c842c1bbff96a2047b31f5437a9dc5183d004ab1fc9f952220f11379602",
        "urls": [
          "bzz-raw://0ac1fa0c7d6fc683384a3ce0b328c66adcc53b6a3e59d3b67c62404dd57c3099",
          "dweb:/ipfs/QmcVvxtcjZqyQwQcU4cPU4SZZ2LEahsmVWgJWGh5n8EHa7"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/proxies/SafeProxy.sol": {
        "keccak256": "0x5dccbe86285c1d4c4b2fed0ae8007620c3186d22411f43feecfbf8a028e5c7e2",
        "urls": [
          "bzz-raw://a1a02d01a92895110505e141d05b0924ea457a25b89a161f0aeedf6b5cb41aec",
          "dweb:/ipfs/QmYWEsFbWwtrVvEF9MNQtf4X3Qt13dAE8o44tEyAS9jmKP"
        ],
        "license": "LGPL-3.0-only"
      },
      "lib/safe-smart-account/contracts/proxies/SafeProxyFactory.sol": {
        "keccak256": "0xdc68ce6d07d02723fcdde9f115c976d78bc599667b4f9d08e6cda50f51949533",
        "urls": [
          "bzz-raw://0389c45311e383f0a27a928594341da67f061bf88795aafdbfb5e8449416fc26",
          "dweb:/ipfs/QmZXmXReN6uro3RAbh661G6LqfMEMeaLKRVoeJr5nx1tnh"
        ],
        "license": "LGPL-3.0-only"
      },
      "src/Modules/Session/SessionManagerModule.sol": {
        "keccak256": "0x5264d5c9368cb19b3f8c104f9fae634699768b0d61118ba9f6c9c8927b184505",
        "urls": [
          "bzz-raw://06d8b95f217ec1e1808e629ef9584a363d3d3c3412f2ab86fd154a8a1ad4aa6f",
          "dweb:/ipfs/QmXNmJmvWGgHhoJ3RjRDR7uzVG8hQevfTyVq9QSwmRgZZy"
        ],
        "license": "MIT"
      },
      "src/Modules/Session/SessionRequest.sol": {
        "keccak256": "0x233fc5d46accf2fb98d6463d5ad1f78315cd42b029e45367241a6f8600268ce4",
        "urls": [
          "bzz-raw://e63959db5fc6ce12945185776130aa83d8bca0829488dd147f0997d7d7da86bd",
          "dweb:/ipfs/QmVhkBRjUu95TDapLFKSK1a9fHdGSCpdPu5rjY9saC7EvP"
        ],
        "license": "MIT"
      },
      "src/Modules/Session/TwoFAFactory.sol": {
        "keccak256": "0xed2e50fa097bc368fae7efed010e01703a520fd4b3ad2296454b96e18798cfeb",
        "urls": [
          "bzz-raw://b3605e49d0e8238726d6210c2bf3bca2703b4fee774a408344ae3dcef3b3077a",
          "dweb:/ipfs/QmSUrQoGuRDnmUzHyc7eTUisjtjZioyaSHZ4QTmechNkQo"
        ],
        "license": "MIT"
      },
      "src/utils/Helpers.sol": {
        "keccak256": "0xc657478b79d81046384ff1206c14e8ad57fc54fc409f4ac7d11d990d8a97011c",
        "urls": [
          "bzz-raw://a37bf5a576c3f2f0c14685a436d6268c8f26cfdba434a86ff63c2f5a07e15c01",
          "dweb:/ipfs/QmUP4nQsJKKchBqXNCGL57yGz4wumsgZVYqtsM1r5dkF3h"
        ],
        "license": "MIT"
      },
      "src/utils/SafeSuiteLib.sol": {
        "keccak256": "0x7ab55dac7abd26606f2d32422a405d79ce7c655dfb3fd964a699c1878ab2f41b",
        "urls": [
          "bzz-raw://270de7ce7fb6c641a6782fe8a50aacb8b598dc0f5693d08d1af8ffdd91f8ac00",
          "dweb:/ipfs/QmRaa71vgWUwytZWw8UUHmAE3vXmi96JLGyVySVbpDxbQJ"
        ],
        "license": "MIT"
      }
    },
    "version": 1
  },
  "storageLayout": {
    "storage": [
      {
        "astId": 59244,
        "contract": "src/Modules/Session/SessionManagerModule.sol:SessionManagerModule",
        "label": "twoFAFactory",
        "offset": 0,
        "slot": "0",
        "type": "t_address"
      },
      {
        "astId": 59251,
        "contract": "src/Modules/Session/SessionManagerModule.sol:SessionManagerModule",
        "label": "sessionRequests",
        "offset": 0,
        "slot": "1",
        "type": "t_mapping(t_address,t_mapping(t_bytes32,t_struct(SessionRequest)60395_storage))"
      },
      {
        "astId": 59257,
        "contract": "src/Modules/Session/SessionManagerModule.sol:SessionManagerModule",
        "label": "activeSessions",
        "offset": 0,
        "slot": "2",
        "type": "t_mapping(t_address,t_array(t_struct(ActiveSession)60402_storage)dyn_storage)"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_array(t_struct(ActiveSession)60402_storage)dyn_storage": {
        "encoding": "dynamic_array",
        "label": "struct ActiveSession[]",
        "numberOfBytes": "32",
        "base": "t_struct(ActiveSession)60402_storage"
      },
      "t_bytes32": {
        "encoding": "inplace",
        "label": "bytes32",
        "numberOfBytes": "32"
      },
      "t_bytes_storage": {
        "encoding": "bytes",
        "label": "bytes",
        "numberOfBytes": "32"
      },
      "t_mapping(t_address,t_array(t_struct(ActiveSession)60402_storage)dyn_storage)": {
        "encoding": "mapping",
        "key": "t_address",
        "label": "mapping(address => struct ActiveSession[])",
        "numberOfBytes": "32",
        "value": "t_array(t_struct(ActiveSession)60402_storage)dyn_storage"
      },
      "t_mapping(t_address,t_mapping(t_bytes32,t_struct(SessionRequest)60395_storage))": {
        "encoding": "mapping",
        "key": "t_address",
        "label": "mapping(address => mapping(bytes32 => struct SessionRequest))",
        "numberOfBytes": "32",
        "value": "t_mapping(t_bytes32,t_struct(SessionRequest)60395_storage)"
      },
      "t_mapping(t_bytes32,t_struct(SessionRequest)60395_storage)": {
        "encoding": "mapping",
        "key": "t_bytes32",
        "label": "mapping(bytes32 => struct SessionRequest)",
        "numberOfBytes": "32",
        "value": "t_struct(SessionRequest)60395_storage"
      },
      "t_struct(ActiveSession)60402_storage": {
        "encoding": "inplace",
        "label": "struct ActiveSession",
        "numberOfBytes": "64",
        "members": [
          {
            "astId": 60397,
            "contract": "src/Modules/Session/SessionManagerModule.sol:SessionManagerModule",
            "label": "expiry",
            "offset": 0,
            "slot": "0",
            "type": "t_uint48"
          },
          {
            "astId": 60399,
            "contract": "src/Modules/Session/SessionManagerModule.sol:SessionManagerModule",
            "label": "owner",
            "offset": 6,
            "slot": "0",
            "type": "t_address"
          },
          {
            "astId": 60401,
            "contract": "src/Modules/Session/SessionManagerModule.sol:SessionManagerModule",
            "label": "account",
            "offset": 0,
            "slot": "1",
            "type": "t_address"
          }
        ]
      },
      "t_struct(SessionRequest)60395_storage": {
        "encoding": "inplace",
        "label": "struct SessionRequest",
        "numberOfBytes": "160",
        "members": [
          {
            "astId": 60384,
            "contract": "src/Modules/Session/SessionManagerModule.sol:SessionManagerModule",
            "label": "expiry",
            "offset": 0,
            "slot": "0",
            "type": "t_uint48"
          },
          {
            "astId": 60386,
            "contract": "src/Modules/Session/SessionManagerModule.sol:SessionManagerModule",
            "label": "challengeExpiry",
            "offset": 6,
            "slot": "0",
            "type": "t_uint48"
          },
          {
            "astId": 60388,
            "contract": "src/Modules/Session/SessionManagerModule.sol:SessionManagerModule",
            "label": "signedSessionHash",
            "offset": 0,
            "slot": "1",
            "type": "t_bytes_storage"
          },
          {
            "astId": 60390,
            "contract": "src/Modules/Session/SessionManagerModule.sol:SessionManagerModule",
            "label": "provider",
            "offset": 0,
            "slot": "2",
            "type": "t_address"
          },
          {
            "astId": 60392,
            "contract": "src/Modules/Session/SessionManagerModule.sol:SessionManagerModule",
            "label": "owner",
            "offset": 0,
            "slot": "3",
            "type": "t_address"
          },
          {
            "astId": 60394,
            "contract": "src/Modules/Session/SessionManagerModule.sol:SessionManagerModule",
            "label": "account",
            "offset": 0,
            "slot": "4",
            "type": "t_address"
          }
        ]
      },
      "t_uint48": {
        "encoding": "inplace",
        "label": "uint48",
        "numberOfBytes": "6"
      }
    }
  },
  "ast": {
    "absolutePath": "src/Modules/Session/SessionManagerModule.sol",
    "id": 60381,
    "exportedSymbols": {
      "AccountNotCreated": [59168],
      "ActiveSession": [60402],
      "ArrayLimitExceeded": [59178],
      "BaseGuard": [52741],
      "ChallengeExpired": [59158],
      "CompatibilityFallbackHandler": [54267],
      "ERC20": [43321],
      "Enum": [53749],
      "FailedToAddSigner": [59170],
      "FailedToRemoveSigner": [59172],
      "Guard": [52715],
      "IERC1271": [41922],
      "IERC165": [54479],
      "IERC20": [43399],
      "Initializable": [40372],
      "InvalidOwnerSignedSessionHash": [59166],
      "InvalidProvider": [59162],
      "InvalidSessionData": [59180],
      "ModuleManager": [53229],
      "OwnableUpgradeable": [40118],
      "OwnerManager": [53742],
      "ReentrancyGuardUpgradeable": [41637],
      "SessionManagerModule": [60380],
      "SessionOwnerIsProvider": [59160],
      "SessionRequest": [60395],
      "SessionRequestExpired": [59156],
      "SessionRequestNotFound": [59164],
      "SignerAlreadyExists": [59176],
      "SignerNotOwner": [59174],
      "TokenCallbackHandler": [54392],
      "TwoFAFactory": [60764],
      "UUPSUpgradeable": [40554],
      "console": [24844],
      "toEthSignedMessageHash": [60775]
    },
    "nodeType": "SourceUnit",
    "src": "32:23162:116",
    "nodes": [
      {
        "id": 59119,
        "nodeType": "PragmaDirective",
        "src": "32:24:116",
        "nodes": [],
        "literals": ["solidity", "^", "0.8", ".20"]
      },
      {
        "id": 59121,
        "nodeType": "ImportDirective",
        "src": "58:45:116",
        "nodes": [],
        "absolutePath": "lib/forge-std/src/Test.sol",
        "file": "forge-std/Test.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 12683,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59120,
              "name": "console",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 24844,
              "src": "67:7:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59122,
        "nodeType": "ImportDirective",
        "src": "105:57:116",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol",
        "file": "@openzeppelin/contracts/interfaces/IERC1271.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 41923,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 59124,
        "nodeType": "ImportDirective",
        "src": "163:72:116",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 43400,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59123,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 43399,
              "src": "172:6:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59126,
        "nodeType": "ImportDirective",
        "src": "236:70:116",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 43322,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59125,
              "name": "ERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 43321,
              "src": "245:5:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59128,
        "nodeType": "ImportDirective",
        "src": "308:117:116",
        "nodes": [],
        "absolutePath": "lib/safe-smart-account/contracts/handler/CompatibilityFallbackHandler.sol",
        "file": "safe-smart-account/contracts/handler/CompatibilityFallbackHandler.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 54268,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59127,
              "name": "CompatibilityFallbackHandler",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 54267,
              "src": "317:28:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59132,
        "nodeType": "ImportDirective",
        "src": "426:90:116",
        "nodes": [],
        "absolutePath": "lib/safe-smart-account/contracts/Safe.sol",
        "file": "safe-smart-account/contracts/Safe.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 52580,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59129,
              "name": "Enum",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 53749,
              "src": "435:4:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 59130,
              "name": "ModuleManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 53229,
              "src": "441:13:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 59131,
              "name": "OwnerManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 53742,
              "src": "456:12:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59135,
        "nodeType": "ImportDirective",
        "src": "517:86:116",
        "nodes": [],
        "absolutePath": "lib/safe-smart-account/contracts/base/GuardManager.sol",
        "file": "safe-smart-account/contracts/base/GuardManager.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 52804,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59133,
              "name": "BaseGuard",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 52741,
              "src": "526:9:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 59134,
              "name": "Guard",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 52715,
              "src": "537:5:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59137,
        "nodeType": "ImportDirective",
        "src": "604:78:116",
        "nodes": [],
        "absolutePath": "lib/safe-smart-account/contracts/interfaces/IERC165.sol",
        "file": "safe-smart-account/contracts/interfaces/IERC165.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 54480,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59136,
              "name": "IERC165",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 54479,
              "src": "613:7:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59139,
        "nodeType": "ImportDirective",
        "src": "683:101:116",
        "nodes": [],
        "absolutePath": "lib/safe-smart-account/contracts/handler/TokenCallbackHandler.sol",
        "file": "safe-smart-account/contracts/handler/TokenCallbackHandler.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 54393,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59138,
              "name": "TokenCallbackHandler",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 54392,
              "src": "692:20:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59141,
        "nodeType": "ImportDirective",
        "src": "786:98:116",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 40373,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59140,
              "name": "Initializable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 40372,
              "src": "795:13:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59143,
        "nodeType": "ImportDirective",
        "src": "885:103:116",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 40119,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59142,
              "name": "OwnableUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 40118,
              "src": "894:18:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59145,
        "nodeType": "ImportDirective",
        "src": "989:102:116",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 40555,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59144,
              "name": "UUPSUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 40554,
              "src": "998:15:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59147,
        "nodeType": "ImportDirective",
        "src": "1092:118:116",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 41638,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59146,
              "name": "ReentrancyGuardUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 41637,
              "src": "1101:26:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59149,
        "nodeType": "ImportDirective",
        "src": "1212:50:116",
        "nodes": [],
        "absolutePath": "src/Modules/Session/TwoFAFactory.sol",
        "file": "./TwoFAFactory.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 60765,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59148,
              "name": "TwoFAFactory",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60764,
              "src": "1221:12:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59152,
        "nodeType": "ImportDirective",
        "src": "1263:69:116",
        "nodes": [],
        "absolutePath": "src/Modules/Session/SessionRequest.sol",
        "file": "./SessionRequest.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 60403,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59150,
              "name": "SessionRequest",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60395,
              "src": "1272:14:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 59151,
              "name": "ActiveSession",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60402,
              "src": "1288:13:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59154,
        "nodeType": "ImportDirective",
        "src": "1334:65:116",
        "nodes": [],
        "absolutePath": "src/utils/Helpers.sol",
        "file": "../../utils/Helpers.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 60381,
        "sourceUnit": 60776,
        "symbolAliases": [
          {
            "foreign": {
              "id": 59153,
              "name": "toEthSignedMessageHash",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60775,
              "src": "1343:22:116",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 59156,
        "nodeType": "ErrorDefinition",
        "src": "1401:30:116",
        "nodes": [],
        "errorSelector": "391168ba",
        "name": "SessionRequestExpired",
        "nameLocation": "1407:21:116",
        "parameters": {
          "id": 59155,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1428:2:116"
        }
      },
      {
        "id": 59158,
        "nodeType": "ErrorDefinition",
        "src": "1432:25:116",
        "nodes": [],
        "errorSelector": "f06506c5",
        "name": "ChallengeExpired",
        "nameLocation": "1438:16:116",
        "parameters": {
          "id": 59157,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1454:2:116"
        }
      },
      {
        "id": 59160,
        "nodeType": "ErrorDefinition",
        "src": "1458:31:116",
        "nodes": [],
        "errorSelector": "5da6eea6",
        "name": "SessionOwnerIsProvider",
        "nameLocation": "1464:22:116",
        "parameters": {
          "id": 59159,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1486:2:116"
        }
      },
      {
        "id": 59162,
        "nodeType": "ErrorDefinition",
        "src": "1490:24:116",
        "nodes": [],
        "errorSelector": "7626db82",
        "name": "InvalidProvider",
        "nameLocation": "1496:15:116",
        "parameters": {
          "id": 59161,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1511:2:116"
        }
      },
      {
        "id": 59164,
        "nodeType": "ErrorDefinition",
        "src": "1515:31:116",
        "nodes": [],
        "errorSelector": "35d3a91e",
        "name": "SessionRequestNotFound",
        "nameLocation": "1521:22:116",
        "parameters": {
          "id": 59163,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1543:2:116"
        }
      },
      {
        "id": 59166,
        "nodeType": "ErrorDefinition",
        "src": "1547:38:116",
        "nodes": [],
        "errorSelector": "89d52d5f",
        "name": "InvalidOwnerSignedSessionHash",
        "nameLocation": "1553:29:116",
        "parameters": {
          "id": 59165,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1582:2:116"
        }
      },
      {
        "id": 59168,
        "nodeType": "ErrorDefinition",
        "src": "1586:26:116",
        "nodes": [],
        "errorSelector": "20ddd638",
        "name": "AccountNotCreated",
        "nameLocation": "1592:17:116",
        "parameters": {
          "id": 59167,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1609:2:116"
        }
      },
      {
        "id": 59170,
        "nodeType": "ErrorDefinition",
        "src": "1613:26:116",
        "nodes": [],
        "errorSelector": "dfae2d2f",
        "name": "FailedToAddSigner",
        "nameLocation": "1619:17:116",
        "parameters": {
          "id": 59169,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1636:2:116"
        }
      },
      {
        "id": 59172,
        "nodeType": "ErrorDefinition",
        "src": "1640:29:116",
        "nodes": [],
        "errorSelector": "10da2473",
        "name": "FailedToRemoveSigner",
        "nameLocation": "1646:20:116",
        "parameters": {
          "id": 59171,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1666:2:116"
        }
      },
      {
        "id": 59174,
        "nodeType": "ErrorDefinition",
        "src": "1670:23:116",
        "nodes": [],
        "errorSelector": "51c65eae",
        "name": "SignerNotOwner",
        "nameLocation": "1676:14:116",
        "parameters": {
          "id": 59173,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1690:2:116"
        }
      },
      {
        "id": 59176,
        "nodeType": "ErrorDefinition",
        "src": "1694:28:116",
        "nodes": [],
        "errorSelector": "38615ecc",
        "name": "SignerAlreadyExists",
        "nameLocation": "1700:19:116",
        "parameters": {
          "id": 59175,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1719:2:116"
        }
      },
      {
        "id": 59178,
        "nodeType": "ErrorDefinition",
        "src": "1723:27:116",
        "nodes": [],
        "errorSelector": "b311c972",
        "name": "ArrayLimitExceeded",
        "nameLocation": "1729:18:116",
        "parameters": {
          "id": 59177,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1747:2:116"
        }
      },
      {
        "id": 59180,
        "nodeType": "ErrorDefinition",
        "src": "1751:27:116",
        "nodes": [],
        "errorSelector": "9bdfc59f",
        "name": "InvalidSessionData",
        "nameLocation": "1757:18:116",
        "parameters": {
          "id": 59179,
          "nodeType": "ParameterList",
          "parameters": [],
          "src": "1775:2:116"
        }
      },
      {
        "id": 60380,
        "nodeType": "ContractDefinition",
        "src": "1779:21414:116",
        "nodes": [
          {
            "id": 59195,
            "nodeType": "VariableDeclaration",
            "src": "1941:46:116",
            "nodes": [],
            "constant": true,
            "functionSelector": "a3f4df7e",
            "mutability": "constant",
            "name": "NAME",
            "nameLocation": "1964:4:116",
            "scope": 60380,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory_ptr",
              "typeString": "string"
            },
            "typeName": {
              "id": 59193,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1941:6:116",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "hexValue": "53657373696f6e204d6f64756c65",
              "id": 59194,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1971:16:116",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b5543f1dd2d911a860dc2ba83886e38771c21c05953106b15854a62e33799fb8",
                "typeString": "literal_string \"Session Module\""
              },
              "value": "Session Module"
            },
            "visibility": "public"
          },
          {
            "id": 59198,
            "nodeType": "VariableDeclaration",
            "src": "1990:40:116",
            "nodes": [],
            "constant": true,
            "functionSelector": "ffa1ad74",
            "mutability": "constant",
            "name": "VERSION",
            "nameLocation": "2013:7:116",
            "scope": 60380,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory_ptr",
              "typeString": "string"
            },
            "typeName": {
              "id": 59196,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1990:6:116",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "hexValue": "302e302e33",
              "id": 59197,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2023:7:116",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_cf7237ef3acb94b87ad359c2a069e622db390803036159a6818cbdd245669abf",
                "typeString": "literal_string \"0.0.3\""
              },
              "value": "0.0.3"
            },
            "visibility": "public"
          },
          {
            "id": 59201,
            "nodeType": "VariableDeclaration",
            "src": "2154:121:116",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "DOMAIN_SEPARATOR_TYPEHASH",
            "nameLocation": "2179:25:116",
            "scope": 60380,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 59199,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2154:7:116",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307838623733633363363962623866653364353132656363346366373539636337393233396637623137396230666661636161396137356435323262333934303066",
              "id": 59200,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2209:66:116",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_63076024560530113402979550242307453568063438748328787417531900361828837441551_by_1",
                "typeString": "int_const 6307...(69 digits omitted)...1551"
              },
              "value": "0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f"
            },
            "visibility": "private"
          },
          {
            "id": 59214,
            "nodeType": "FunctionDefinition",
            "src": "2333:169:116",
            "nodes": [],
            "body": {
              "id": 59213,
              "nodeType": "Block",
              "src": "2385:117:116",
              "nodes": [],
              "statements": [
                {
                  "assignments": [59208],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59208,
                      "mutability": "mutable",
                      "name": "id",
                      "nameLocation": "2397:2:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59213,
                      "src": "2389:10:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 59207,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2389:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59209,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2389:10:116"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2462:24:116",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "2467:15:116",
                        "value": {
                          "arguments": [],
                          "functionName": {
                            "name": "chainid",
                            "nodeType": "YulIdentifier",
                            "src": "2473:7:116"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2473:9:116"
                        },
                        "variableNames": [
                          {
                            "name": "id",
                            "nodeType": "YulIdentifier",
                            "src": "2467:2:116"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 59208,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2467:2:116",
                      "valueSize": 1
                    }
                  ],
                  "id": 59210,
                  "nodeType": "InlineAssembly",
                  "src": "2453:33:116"
                },
                {
                  "expression": {
                    "id": 59211,
                    "name": "id",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 59208,
                    "src": "2496:2:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 59206,
                  "id": 59212,
                  "nodeType": "Return",
                  "src": "2489:9:116"
                }
              ]
            },
            "documentation": {
              "id": 59202,
              "nodeType": "StructuredDocumentation",
              "src": "2279:52:116",
              "text": "@dev Returns the chain id used by this contract."
            },
            "functionSelector": "3408e470",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getChainId",
            "nameLocation": "2342:10:116",
            "parameters": {
              "id": 59203,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2352:2:116"
            },
            "returnParameters": {
              "id": 59206,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59205,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 59214,
                  "src": "2376:7:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 59204,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2376:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2375:9:116"
            },
            "scope": 60380,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 59242,
            "nodeType": "FunctionDefinition",
            "src": "2505:290:116",
            "nodes": [],
            "body": {
              "id": 59241,
              "nodeType": "Block",
              "src": "2562:233:116",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 59222,
                            "name": "DOMAIN_SEPARATOR_TYPEHASH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59201,
                            "src": "2608:25:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 59226,
                                    "name": "NAME",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 59195,
                                    "src": "2667:4:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 59224,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "2650:3:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 59225,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "2654:12:116",
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "src": "2650:16:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 59227,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2650:22:116",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 59223,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "2640:9:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 59228,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2640:33:116",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 59232,
                                    "name": "VERSION",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 59198,
                                    "src": "2707:7:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 59230,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "2690:3:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 59231,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "2694:12:116",
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "src": "2690:16:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 59233,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2690:25:116",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 59229,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "2680:9:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 59234,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2680:36:116",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 59235,
                              "name": "getChainId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59214,
                              "src": "2723:10:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 59236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2723:12:116",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 59237,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "2776:4:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_SessionManagerModule_$60380",
                              "typeString": "contract SessionManagerModule"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_contract$_SessionManagerModule_$60380",
                              "typeString": "contract SessionManagerModule"
                            }
                          ],
                          "expression": {
                            "id": 59220,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "2591:3:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 59221,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "2595:6:116",
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "2591:10:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 59238,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2591:195:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 59219,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "2576:9:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 59239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2576:215:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 59218,
                  "id": 59240,
                  "nodeType": "Return",
                  "src": "2566:225:116"
                }
              ]
            },
            "functionSelector": "f698da25",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "domainSeparator",
            "nameLocation": "2514:15:116",
            "parameters": {
              "id": 59215,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2529:2:116"
            },
            "returnParameters": {
              "id": 59218,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59217,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 59242,
                  "src": "2553:7:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 59216,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2553:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2552:9:116"
            },
            "scope": 60380,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 59244,
            "nodeType": "VariableDeclaration",
            "src": "2863:27:116",
            "nodes": [],
            "constant": false,
            "functionSelector": "ee2b8f3e",
            "mutability": "mutable",
            "name": "twoFAFactory",
            "nameLocation": "2878:12:116",
            "scope": 60380,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 59243,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "2863:7:116",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "id": 59251,
            "nodeType": "VariableDeclaration",
            "src": "2893:77:116",
            "nodes": [],
            "constant": false,
            "functionSelector": "f681de3b",
            "mutability": "mutable",
            "name": "sessionRequests",
            "nameLocation": "2955:15:116",
            "scope": 60380,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_struct$_SessionRequest_$60395_storage_$_$",
              "typeString": "mapping(address => mapping(bytes32 => struct SessionRequest))"
            },
            "typeName": {
              "id": 59250,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 59245,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2901:7:116",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2893:54:116",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_struct$_SessionRequest_$60395_storage_$_$",
                "typeString": "mapping(address => mapping(bytes32 => struct SessionRequest))"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 59249,
                "keyName": "",
                "keyNameLocation": "-1:-1:-1",
                "keyType": {
                  "id": 59246,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "2920:7:116",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "nodeType": "Mapping",
                "src": "2912:34:116",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_SessionRequest_$60395_storage_$",
                  "typeString": "mapping(bytes32 => struct SessionRequest)"
                },
                "valueName": "",
                "valueNameLocation": "-1:-1:-1",
                "valueType": {
                  "id": 59248,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 59247,
                    "name": "SessionRequest",
                    "nameLocations": ["2931:14:116"],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 60395,
                    "src": "2931:14:116"
                  },
                  "referencedDeclaration": 60395,
                  "src": "2931:14:116",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_SessionRequest_$60395_storage_ptr",
                    "typeString": "struct SessionRequest"
                  }
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 59257,
            "nodeType": "VariableDeclaration",
            "src": "2973:57:116",
            "nodes": [],
            "constant": false,
            "functionSelector": "45fd1315",
            "mutability": "mutable",
            "name": "activeSessions",
            "nameLocation": "3016:14:116",
            "scope": 60380,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
              "typeString": "mapping(address => struct ActiveSession[])"
            },
            "typeName": {
              "id": 59256,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 59252,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2981:7:116",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2973:35:116",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                "typeString": "mapping(address => struct ActiveSession[])"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "baseType": {
                  "id": 59254,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 59253,
                    "name": "ActiveSession",
                    "nameLocations": ["2992:13:116"],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 60402,
                    "src": "2992:13:116"
                  },
                  "referencedDeclaration": 60402,
                  "src": "2992:13:116",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ActiveSession_$60402_storage_ptr",
                    "typeString": "struct ActiveSession"
                  }
                },
                "id": 59255,
                "nodeType": "ArrayTypeName",
                "src": "2992:15:116",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_ptr",
                  "typeString": "struct ActiveSession[]"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 59263,
            "nodeType": "EventDefinition",
            "src": "3096:70:116",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "070669e6be82aa9b077a096b0f9617893a4dc5cb05897e27fd7a6112c8e6629e",
            "name": "Requested",
            "nameLocation": "3102:9:116",
            "parameters": {
              "id": 59262,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59259,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "provider",
                  "nameLocation": "3128:8:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59263,
                  "src": "3112:24:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59258,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3112:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59261,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "sessionRequestHash",
                  "nameLocation": "3146:18:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59263,
                  "src": "3138:26:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 59260,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3138:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3111:54:116"
            }
          },
          {
            "id": 59271,
            "nodeType": "EventDefinition",
            "src": "3168:89:116",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "603c57ecb4a9802537649ceb6523e5d48c939e7856768ce6f9b3128a889a5cfe",
            "name": "Confirmed",
            "nameLocation": "3174:9:116",
            "parameters": {
              "id": 59270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59265,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "provider",
                  "nameLocation": "3200:8:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59271,
                  "src": "3184:24:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59264,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3184:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59267,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "3226:7:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59271,
                  "src": "3210:23:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59266,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3210:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59269,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "sessionOwner",
                  "nameLocation": "3243:12:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59271,
                  "src": "3235:20:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59268,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3235:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3183:73:116"
            }
          },
          {
            "id": 59295,
            "nodeType": "FunctionDefinition",
            "src": "3331:199:116",
            "nodes": [],
            "body": {
              "id": 59294,
              "nodeType": "Block",
              "src": "3411:119:116",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 59281,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59273,
                        "src": "3430:6:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 59280,
                      "name": "__Ownable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 39978,
                      "src": "3415:14:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 59282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3415:22:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59283,
                  "nodeType": "ExpressionStatement",
                  "src": "3415:22:116"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 59284,
                      "name": "__UUPSUpgradeable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 40426,
                      "src": "3441:22:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 59285,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3441:24:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59286,
                  "nodeType": "ExpressionStatement",
                  "src": "3441:24:116"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 59287,
                      "name": "__ReentrancyGuard_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 41548,
                      "src": "3469:22:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 59288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3469:24:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59289,
                  "nodeType": "ExpressionStatement",
                  "src": "3469:24:116"
                },
                {
                  "expression": {
                    "id": 59292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 59290,
                      "name": "twoFAFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59244,
                      "src": "3498:12:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 59291,
                      "name": "_twoFAFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59275,
                      "src": "3513:13:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3498:28:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 59293,
                  "nodeType": "ExpressionStatement",
                  "src": "3498:28:116"
                }
              ]
            },
            "functionSelector": "485cc955",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 59278,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 59277,
                  "name": "initializer",
                  "nameLocations": ["3399:11:116"],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 40226,
                  "src": "3399:11:116"
                },
                "nodeType": "ModifierInvocation",
                "src": "3399:11:116"
              }
            ],
            "name": "initialize",
            "nameLocation": "3340:10:116",
            "parameters": {
              "id": 59276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59273,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3359:6:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59295,
                  "src": "3351:14:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59272,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3351:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59275,
                  "mutability": "mutable",
                  "name": "_twoFAFactory",
                  "nameLocation": "3375:13:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59295,
                  "src": "3367:21:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59274,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3367:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3350:39:116"
            },
            "returnParameters": {
              "id": 59279,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3411:0:116"
            },
            "scope": 60380,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59307,
            "nodeType": "FunctionDefinition",
            "src": "3663:114:116",
            "nodes": [],
            "body": {
              "id": 59306,
              "nodeType": "Block",
              "src": "3750:27:116",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "id": 59303,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59297,
                        "src": "3755:17:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "id": 59304,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3754:19:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 59305,
                  "nodeType": "ExpressionStatement",
                  "src": "3754:19:116"
                }
              ]
            },
            "baseFunctions": [40508],
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 59301,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 59300,
                  "name": "onlyOwner",
                  "nameLocations": ["3740:9:116"],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 40013,
                  "src": "3740:9:116"
                },
                "nodeType": "ModifierInvocation",
                "src": "3740:9:116"
              }
            ],
            "name": "_authorizeUpgrade",
            "nameLocation": "3672:17:116",
            "overrides": {
              "id": 59299,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3731:8:116"
            },
            "parameters": {
              "id": 59298,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59297,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "3698:17:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59307,
                  "src": "3690:25:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59296,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3690:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3689:27:116"
            },
            "returnParameters": {
              "id": 59302,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3750:0:116"
            },
            "scope": 60380,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 59410,
            "nodeType": "FunctionDefinition",
            "src": "4849:1416:116",
            "nodes": [],
            "body": {
              "id": 59409,
              "nodeType": "Block",
              "src": "5060:1205:116",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 59330,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint48",
                        "typeString": "uint48"
                      },
                      "id": 59325,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 59323,
                        "name": "sessionExpiry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59318,
                        "src": "5114:13:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint48",
                          "typeString": "uint48"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 59324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5130:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5114:17:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 59329,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 59326,
                        "name": "sessionExpiry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59318,
                        "src": "5135:13:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint48",
                          "typeString": "uint48"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "expression": {
                          "id": 59327,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "5151:5:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 59328,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5157:9:116",
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5151:15:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5135:31:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5114:52:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59335,
                  "nodeType": "IfStatement",
                  "src": "5110:98:116",
                  "trueBody": {
                    "id": 59334,
                    "nodeType": "Block",
                    "src": "5168:40:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59331,
                            "name": "SessionRequestExpired",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59156,
                            "src": "5180:21:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59332,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5180:23:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59333,
                        "nodeType": "RevertStatement",
                        "src": "5173:30:116"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 59343,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint48",
                        "typeString": "uint48"
                      },
                      "id": 59338,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 59336,
                        "name": "challengeExpiry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59320,
                        "src": "5264:15:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint48",
                          "typeString": "uint48"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 59337,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5282:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5264:19:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 59342,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 59339,
                        "name": "challengeExpiry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59320,
                        "src": "5287:15:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint48",
                          "typeString": "uint48"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "expression": {
                          "id": 59340,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "5305:5:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 59341,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5311:9:116",
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5305:15:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5287:33:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5264:56:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59348,
                  "nodeType": "IfStatement",
                  "src": "5260:97:116",
                  "trueBody": {
                    "id": 59347,
                    "nodeType": "Block",
                    "src": "5322:35:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59344,
                            "name": "ChallengeExpired",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59158,
                            "src": "5334:16:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5334:18:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59346,
                        "nodeType": "RevertStatement",
                        "src": "5327:25:116"
                      }
                    ]
                  }
                },
                {
                  "assignments": [59350],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59350,
                      "mutability": "mutable",
                      "name": "provider",
                      "nameLocation": "5393:8:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59409,
                      "src": "5385:16:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 59349,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5385:7:116",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59353,
                  "initialValue": {
                    "expression": {
                      "id": 59351,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "5404:3:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 59352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "5408:6:116",
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "5404:10:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5385:29:116"
                },
                {
                  "assignments": [59355],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59355,
                      "mutability": "mutable",
                      "name": "salt",
                      "nameLocation": "5491:4:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59409,
                      "src": "5483:12:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 59354,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5483:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59359,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 59357,
                        "name": "sessionSalt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59310,
                        "src": "5516:11:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 59356,
                      "name": "_bytes32ToUint256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59629,
                      "src": "5498:17:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (uint256)"
                      }
                    },
                    "id": 59358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5498:30:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5483:45:116"
                },
                {
                  "assignments": [59361],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59361,
                      "mutability": "mutable",
                      "name": "account",
                      "nameLocation": "5540:7:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59409,
                      "src": "5532:15:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 59360,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5532:7:116",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59369,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 59366,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59350,
                        "src": "5591:8:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 59367,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59355,
                        "src": "5601:4:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 59363,
                            "name": "twoFAFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59244,
                            "src": "5563:12:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 59362,
                          "name": "TwoFAFactory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60764,
                          "src": "5550:12:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TwoFAFactory_$60764_$",
                            "typeString": "type(contract TwoFAFactory)"
                          }
                        },
                        "id": 59364,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5550:26:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TwoFAFactory_$60764",
                          "typeString": "contract TwoFAFactory"
                        }
                      },
                      "id": 59365,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5577:13:116",
                      "memberName": "createAccount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60501,
                      "src": "5550:40:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (address,uint256) external returns (address)"
                      }
                    },
                    "id": 59368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5550:56:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5532:74:116"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 59371,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59361,
                        "src": "5692:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 59370,
                      "name": "_incrementSafeNonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60379,
                      "src": "5672:19:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 59372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5672:28:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59373,
                  "nodeType": "ExpressionStatement",
                  "src": "5672:28:116"
                },
                {
                  "assignments": [59375],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59375,
                      "mutability": "mutable",
                      "name": "sessionOwner",
                      "nameLocation": "5740:12:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59409,
                      "src": "5732:20:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 59374,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5732:7:116",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59380,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 59377,
                        "name": "sessionRequestHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59312,
                        "src": "5779:18:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 59378,
                        "name": "signedSessionRequestHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59314,
                        "src": "5799:24:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 59376,
                      "name": "_recoverEthSignedSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60268,
                      "src": "5755:23:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 59379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5755:69:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5732:92:116"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 59383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 59381,
                      "name": "sessionOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59375,
                      "src": "5875:12:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 59382,
                      "name": "provider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59350,
                      "src": "5891:8:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5875:24:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59388,
                  "nodeType": "IfStatement",
                  "src": "5871:71:116",
                  "trueBody": {
                    "id": 59387,
                    "nodeType": "Block",
                    "src": "5901:41:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59384,
                            "name": "SessionOwnerIsProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59160,
                            "src": "5913:22:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5913:24:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59386,
                        "nodeType": "RevertStatement",
                        "src": "5906:31:116"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 59402,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 59389,
                          "name": "sessionRequests",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59251,
                          "src": "5972:15:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_struct$_SessionRequest_$60395_storage_$_$",
                            "typeString": "mapping(address => mapping(bytes32 => struct SessionRequest storage ref))"
                          }
                        },
                        "id": 59392,
                        "indexExpression": {
                          "id": 59390,
                          "name": "provider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59350,
                          "src": "5988:8:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5972:25:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_SessionRequest_$60395_storage_$",
                          "typeString": "mapping(bytes32 => struct SessionRequest storage ref)"
                        }
                      },
                      "id": 59393,
                      "indexExpression": {
                        "id": 59391,
                        "name": "sessionRequestHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59312,
                        "src": "5998:18:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5972:45:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SessionRequest_$60395_storage",
                        "typeString": "struct SessionRequest storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 59395,
                          "name": "sessionExpiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59318,
                          "src": "6048:13:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint48",
                            "typeString": "uint48"
                          }
                        },
                        {
                          "id": 59396,
                          "name": "challengeExpiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59320,
                          "src": "6083:15:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint48",
                            "typeString": "uint48"
                          }
                        },
                        {
                          "id": 59397,
                          "name": "signedSessionHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59316,
                          "src": "6122:17:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "id": 59398,
                          "name": "provider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59350,
                          "src": "6154:8:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 59399,
                          "name": "sessionOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59375,
                          "src": "6174:12:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 59400,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59361,
                          "src": "6200:7:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint48",
                            "typeString": "uint48"
                          },
                          {
                            "typeIdentifier": "t_uint48",
                            "typeString": "uint48"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 59394,
                        "name": "SessionRequest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60395,
                        "src": "6020:14:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_SessionRequest_$60395_storage_ptr_$",
                          "typeString": "type(struct SessionRequest storage pointer)"
                        }
                      },
                      "id": 59401,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "nameLocations": [
                        "6040:6:116",
                        "6066:15:116",
                        "6103:17:116",
                        "6144:8:116",
                        "6167:5:116",
                        "6191:7:116"
                      ],
                      "names": [
                        "expiry",
                        "challengeExpiry",
                        "signedSessionHash",
                        "provider",
                        "owner",
                        "account"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "6020:192:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                        "typeString": "struct SessionRequest memory"
                      }
                    },
                    "src": "5972:240:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SessionRequest_$60395_storage",
                      "typeString": "struct SessionRequest storage ref"
                    }
                  },
                  "id": 59403,
                  "nodeType": "ExpressionStatement",
                  "src": "5972:240:116"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 59405,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59350,
                        "src": "6232:8:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 59406,
                        "name": "sessionRequestHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59312,
                        "src": "6242:18:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 59404,
                      "name": "Requested",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59263,
                      "src": "6222:9:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,bytes32)"
                      }
                    },
                    "id": 59407,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6222:39:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59408,
                  "nodeType": "EmitStatement",
                  "src": "6217:44:116"
                }
              ]
            },
            "documentation": {
              "id": 59308,
              "nodeType": "StructuredDocumentation",
              "src": "3907:940:116",
              "text": " @notice Initiates a session request between a provider and a session owner\n @dev Creates or retrieves an account and stores the session request for later confirmation\n @param sessionSalt A unique salt used to deterministically generate the account address\n @param sessionRequestHash Hash of the session request data\n @param signedSessionRequestHash Signature of the session request hash by the session owner\n @param signedSessionHash Signature of the session hash by the provider\n @param sessionExpiry Timestamp when the session request expires (0 for no expiry)\n @param challengeExpiry Timestamp when the challenge expires (0 for no challenge)\n @custom:throws SessionRequestExpired if the expiry timestamp is in the past\n @custom:throws SessionOwnerIsProvider if the recovered session owner is the same as the provider\n @custom:emits Requested event with provider address and session request hash"
            },
            "functionSelector": "9b7177e7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "request",
            "nameLocation": "4858:7:116",
            "parameters": {
              "id": 59321,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59310,
                  "mutability": "mutable",
                  "name": "sessionSalt",
                  "nameLocation": "4877:11:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59410,
                  "src": "4869:19:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 59309,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4869:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59312,
                  "mutability": "mutable",
                  "name": "sessionRequestHash",
                  "nameLocation": "4900:18:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59410,
                  "src": "4892:26:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 59311,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4892:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59314,
                  "mutability": "mutable",
                  "name": "signedSessionRequestHash",
                  "nameLocation": "4937:24:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59410,
                  "src": "4922:39:116",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 59313,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4922:5:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59316,
                  "mutability": "mutable",
                  "name": "signedSessionHash",
                  "nameLocation": "4980:17:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59410,
                  "src": "4965:32:116",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 59315,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4965:5:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59318,
                  "mutability": "mutable",
                  "name": "sessionExpiry",
                  "nameLocation": "5008:13:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59410,
                  "src": "5001:20:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint48",
                    "typeString": "uint48"
                  },
                  "typeName": {
                    "id": 59317,
                    "name": "uint48",
                    "nodeType": "ElementaryTypeName",
                    "src": "5001:6:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint48",
                      "typeString": "uint48"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59320,
                  "mutability": "mutable",
                  "name": "challengeExpiry",
                  "nameLocation": "5032:15:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59410,
                  "src": "5025:22:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint48",
                    "typeString": "uint48"
                  },
                  "typeName": {
                    "id": 59319,
                    "name": "uint48",
                    "nodeType": "ElementaryTypeName",
                    "src": "5025:6:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint48",
                      "typeString": "uint48"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4865:185:116"
            },
            "returnParameters": {
              "id": 59322,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5060:0:116"
            },
            "scope": 60380,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59585,
            "nodeType": "FunctionDefinition",
            "src": "7077:1936:116",
            "nodes": [],
            "body": {
              "id": 59584,
              "nodeType": "Block",
              "src": "7191:1822:116",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 59431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 59426,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 59422,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 59420,
                          "name": "sessionRequestHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59413,
                          "src": "7230:18:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 59421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7252:1:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7230:23:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 59425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 59423,
                          "name": "sessionHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59415,
                          "src": "7257:11:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 59424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7272:1:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7257:16:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "7230:43:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 59430,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 59427,
                          "name": "ownerSignedSessionHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59417,
                          "src": "7277:22:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "id": 59428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7300:6:116",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "7277:29:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 59429,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7310:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "7277:34:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7230:81:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59436,
                  "nodeType": "IfStatement",
                  "src": "7226:124:116",
                  "trueBody": {
                    "id": 59435,
                    "nodeType": "Block",
                    "src": "7313:37:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59432,
                            "name": "InvalidSessionData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59180,
                            "src": "7325:18:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7325:20:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59434,
                        "nodeType": "RevertStatement",
                        "src": "7318:27:116"
                      }
                    ]
                  }
                },
                {
                  "assignments": [59439],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59439,
                      "mutability": "mutable",
                      "name": "sessionRequest",
                      "nameLocation": "7413:14:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59584,
                      "src": "7391:36:116",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                        "typeString": "struct SessionRequest"
                      },
                      "typeName": {
                        "id": 59438,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 59437,
                          "name": "SessionRequest",
                          "nameLocations": ["7391:14:116"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 60395,
                          "src": "7391:14:116"
                        },
                        "referencedDeclaration": 60395,
                        "src": "7391:14:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SessionRequest_$60395_storage_ptr",
                          "typeString": "struct SessionRequest"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59446,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 59440,
                        "name": "sessionRequests",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59251,
                        "src": "7430:15:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_struct$_SessionRequest_$60395_storage_$_$",
                          "typeString": "mapping(address => mapping(bytes32 => struct SessionRequest storage ref))"
                        }
                      },
                      "id": 59443,
                      "indexExpression": {
                        "expression": {
                          "id": 59441,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "7446:3:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 59442,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7450:6:116",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "7446:10:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "7430:27:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_SessionRequest_$60395_storage_$",
                        "typeString": "mapping(bytes32 => struct SessionRequest storage ref)"
                      }
                    },
                    "id": 59445,
                    "indexExpression": {
                      "id": 59444,
                      "name": "sessionRequestHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59413,
                      "src": "7458:18:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7430:47:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_SessionRequest_$60395_storage",
                      "typeString": "struct SessionRequest storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7391:86:116"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 59453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 59447,
                        "name": "sessionRequest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59439,
                        "src": "7485:14:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                          "typeString": "struct SessionRequest memory"
                        }
                      },
                      "id": 59448,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7500:5:116",
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60392,
                      "src": "7485:20:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 59451,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7517:1:116",
                          "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": 59450,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7509:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 59449,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7509:7:116",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 59452,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7509:10:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7485:34:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59458,
                  "nodeType": "IfStatement",
                  "src": "7481:81:116",
                  "trueBody": {
                    "id": 59457,
                    "nodeType": "Block",
                    "src": "7521:41:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59454,
                            "name": "SessionRequestNotFound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59164,
                            "src": "7533:22:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7533:24:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59456,
                        "nodeType": "RevertStatement",
                        "src": "7526:31:116"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 59468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint48",
                        "typeString": "uint48"
                      },
                      "id": 59462,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 59459,
                          "name": "sessionRequest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59439,
                          "src": "7612:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                            "typeString": "struct SessionRequest memory"
                          }
                        },
                        "id": 59460,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7627:6:116",
                        "memberName": "expiry",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 60384,
                        "src": "7612:21:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint48",
                          "typeString": "uint48"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 59461,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7636:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "7612:25:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 59467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 59463,
                          "name": "sessionRequest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59439,
                          "src": "7641:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                            "typeString": "struct SessionRequest memory"
                          }
                        },
                        "id": 59464,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7656:6:116",
                        "memberName": "expiry",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 60384,
                        "src": "7641:21:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint48",
                          "typeString": "uint48"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "expression": {
                          "id": 59465,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "7665:5:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 59466,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7671:9:116",
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "7665:15:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7641:39:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7612:68:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59473,
                  "nodeType": "IfStatement",
                  "src": "7608:114:116",
                  "trueBody": {
                    "id": 59472,
                    "nodeType": "Block",
                    "src": "7682:40:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59469,
                            "name": "SessionRequestExpired",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59156,
                            "src": "7694:21:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59470,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7694:23:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59471,
                        "nodeType": "RevertStatement",
                        "src": "7687:30:116"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 59483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint48",
                        "typeString": "uint48"
                      },
                      "id": 59477,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 59474,
                          "name": "sessionRequest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59439,
                          "src": "7778:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                            "typeString": "struct SessionRequest memory"
                          }
                        },
                        "id": 59475,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7793:15:116",
                        "memberName": "challengeExpiry",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 60386,
                        "src": "7778:30:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint48",
                          "typeString": "uint48"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 59476,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7811:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "7778:34:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 59482,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 59478,
                          "name": "sessionRequest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59439,
                          "src": "7816:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                            "typeString": "struct SessionRequest memory"
                          }
                        },
                        "id": 59479,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7831:15:116",
                        "memberName": "challengeExpiry",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 60386,
                        "src": "7816:30:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint48",
                          "typeString": "uint48"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "expression": {
                          "id": 59480,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "7849:5:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 59481,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7855:9:116",
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "7849:15:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7816:48:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7778:86:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59488,
                  "nodeType": "IfStatement",
                  "src": "7774:127:116",
                  "trueBody": {
                    "id": 59487,
                    "nodeType": "Block",
                    "src": "7866:35:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59484,
                            "name": "ChallengeExpired",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59158,
                            "src": "7878:16:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7878:18:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59486,
                        "nodeType": "RevertStatement",
                        "src": "7871:25:116"
                      }
                    ]
                  }
                },
                {
                  "assignments": [59490],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59490,
                      "mutability": "mutable",
                      "name": "provider",
                      "nameLocation": "7937:8:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59584,
                      "src": "7929:16:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 59489,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7929:7:116",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59493,
                  "initialValue": {
                    "expression": {
                      "id": 59491,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "7948:3:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 59492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "7952:6:116",
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "7948:10:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7929:29:116"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 59497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 59494,
                        "name": "sessionRequest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59439,
                        "src": "7999:14:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                          "typeString": "struct SessionRequest memory"
                        }
                      },
                      "id": 59495,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8014:8:116",
                      "memberName": "provider",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60390,
                      "src": "7999:23:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 59496,
                      "name": "provider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59490,
                      "src": "8026:8:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7999:35:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59502,
                  "nodeType": "IfStatement",
                  "src": "7995:75:116",
                  "trueBody": {
                    "id": 59501,
                    "nodeType": "Block",
                    "src": "8036:34:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59498,
                            "name": "InvalidProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59162,
                            "src": "8048:15:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8048:17:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59500,
                        "nodeType": "RevertStatement",
                        "src": "8041:24:116"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 59509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "8078:75:116",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 59504,
                          "name": "provider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59490,
                          "src": "8097:8:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 59505,
                          "name": "sessionHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59415,
                          "src": "8107:11:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "expression": {
                            "id": 59506,
                            "name": "sessionRequest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59439,
                            "src": "8120:14:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                              "typeString": "struct SessionRequest memory"
                            }
                          },
                          "id": 59507,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "8135:17:116",
                          "memberName": "signedSessionHash",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 60388,
                          "src": "8120:32:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 59503,
                        "name": "_isOwnerSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60250,
                        "src": "8079:17:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (address,bytes32,bytes memory) view returns (bool)"
                        }
                      },
                      "id": 59508,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8079:74:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59514,
                  "nodeType": "IfStatement",
                  "src": "8074:115:116",
                  "trueBody": {
                    "id": 59513,
                    "nodeType": "Block",
                    "src": "8155:34:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59510,
                            "name": "InvalidProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59162,
                            "src": "8167:15:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59511,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8167:17:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59512,
                        "nodeType": "RevertStatement",
                        "src": "8160:24:116"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 59521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 59516,
                          "name": "sessionHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59415,
                          "src": "8270:11:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 59517,
                          "name": "ownerSignedSessionHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59417,
                          "src": "8283:22:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "id": 59515,
                        "name": "_recoverEthSignedSigner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60268,
                        "src": "8246:23:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                          "typeString": "function (bytes32,bytes memory) pure returns (address)"
                        }
                      },
                      "id": 59518,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8246:60:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 59519,
                        "name": "sessionRequest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59439,
                        "src": "8310:14:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                          "typeString": "struct SessionRequest memory"
                        }
                      },
                      "id": 59520,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8325:5:116",
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60392,
                      "src": "8310:20:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8246:84:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59526,
                  "nodeType": "IfStatement",
                  "src": "8242:138:116",
                  "trueBody": {
                    "id": 59525,
                    "nodeType": "Block",
                    "src": "8332:48:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59522,
                            "name": "InvalidOwnerSignedSessionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59166,
                            "src": "8344:29:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59523,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8344:31:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59524,
                        "nodeType": "RevertStatement",
                        "src": "8337:38:116"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 59528,
                          "name": "sessionRequest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59439,
                          "src": "8428:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                            "typeString": "struct SessionRequest memory"
                          }
                        },
                        "id": 59529,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8443:7:116",
                        "memberName": "account",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 60394,
                        "src": "8428:22:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 59530,
                          "name": "sessionRequest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59439,
                          "src": "8452:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                            "typeString": "struct SessionRequest memory"
                          }
                        },
                        "id": 59531,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8467:5:116",
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 60392,
                        "src": "8452:20:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 59527,
                      "name": "_addSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59717,
                      "src": "8417:10:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 59532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8417:56:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59533,
                  "nodeType": "ExpressionStatement",
                  "src": "8417:56:116"
                },
                {
                  "assignments": [59535],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59535,
                      "mutability": "mutable",
                      "name": "currentLength",
                      "nameLocation": "8526:13:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59584,
                      "src": "8518:21:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 59534,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8518:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59541,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 59536,
                        "name": "activeSessions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59257,
                        "src": "8542:14:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                          "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                        }
                      },
                      "id": 59539,
                      "indexExpression": {
                        "expression": {
                          "id": 59537,
                          "name": "sessionRequest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59439,
                          "src": "8557:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                            "typeString": "struct SessionRequest memory"
                          }
                        },
                        "id": 59538,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8572:7:116",
                        "memberName": "account",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 60394,
                        "src": "8557:22:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "8542:38:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                        "typeString": "struct ActiveSession storage ref[] storage ref"
                      }
                    },
                    "id": 59540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "8581:6:116",
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "8542:45:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8518:69:116"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 59548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 59542,
                      "name": "currentLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59535,
                      "src": "8595:13:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 59545,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8617:7:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 59544,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8617:7:116",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          ],
                          "id": 59543,
                          "name": "type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -27,
                          "src": "8612:4:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 59546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8612:13:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_meta_type_t_uint256",
                          "typeString": "type(uint256)"
                        }
                      },
                      "id": 59547,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "8626:3:116",
                      "memberName": "max",
                      "nodeType": "MemberAccess",
                      "src": "8612:17:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8595:34:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59553,
                  "nodeType": "IfStatement",
                  "src": "8591:77:116",
                  "trueBody": {
                    "id": 59552,
                    "nodeType": "Block",
                    "src": "8631:37:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59549,
                            "name": "ArrayLimitExceeded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59178,
                            "src": "8643:18:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8643:20:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59551,
                        "nodeType": "RevertStatement",
                        "src": "8636:27:116"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 59560,
                              "name": "sessionRequest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59439,
                              "src": "8747:14:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                                "typeString": "struct SessionRequest memory"
                              }
                            },
                            "id": 59561,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8762:5:116",
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 60392,
                            "src": "8747:20:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "expression": {
                              "id": 59562,
                              "name": "sessionRequest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59439,
                              "src": "8782:14:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                                "typeString": "struct SessionRequest memory"
                              }
                            },
                            "id": 59563,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8797:7:116",
                            "memberName": "account",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 60394,
                            "src": "8782:22:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "expression": {
                              "id": 59564,
                              "name": "sessionRequest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59439,
                              "src": "8818:14:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                                "typeString": "struct SessionRequest memory"
                              }
                            },
                            "id": 59565,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8833:6:116",
                            "memberName": "expiry",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 60384,
                            "src": "8818:21:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint48",
                              "typeString": "uint48"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint48",
                              "typeString": "uint48"
                            }
                          ],
                          "id": 59559,
                          "name": "ActiveSession",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60402,
                          "src": "8720:13:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ActiveSession_$60402_storage_ptr_$",
                            "typeString": "type(struct ActiveSession storage pointer)"
                          }
                        },
                        "id": 59566,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "8740:5:116",
                          "8773:7:116",
                          "8810:6:116"
                        ],
                        "names": ["owner", "account", "expiry"],
                        "nodeType": "FunctionCall",
                        "src": "8720:125:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ActiveSession_$60402_memory_ptr",
                          "typeString": "struct ActiveSession memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_ActiveSession_$60402_memory_ptr",
                          "typeString": "struct ActiveSession memory"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 59554,
                          "name": "activeSessions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59257,
                          "src": "8672:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                          }
                        },
                        "id": 59557,
                        "indexExpression": {
                          "expression": {
                            "id": 59555,
                            "name": "sessionRequest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59439,
                            "src": "8687:14:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                              "typeString": "struct SessionRequest memory"
                            }
                          },
                          "id": 59556,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "8702:7:116",
                          "memberName": "account",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 60394,
                          "src": "8687:22:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8672:38:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                          "typeString": "struct ActiveSession storage ref[] storage ref"
                        }
                      },
                      "id": 59558,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8711:4:116",
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "src": "8672:43:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_ptr_$_t_struct$_ActiveSession_$60402_storage_$returns$__$attached_to$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_ptr_$",
                        "typeString": "function (struct ActiveSession storage ref[] storage pointer,struct ActiveSession storage ref)"
                      }
                    },
                    "id": 59567,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8672:177:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59568,
                  "nodeType": "ExpressionStatement",
                  "src": "8672:177:116"
                },
                {
                  "expression": {
                    "id": 59574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8882:52:116",
                    "subExpression": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 59569,
                          "name": "sessionRequests",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59251,
                          "src": "8889:15:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_struct$_SessionRequest_$60395_storage_$_$",
                            "typeString": "mapping(address => mapping(bytes32 => struct SessionRequest storage ref))"
                          }
                        },
                        "id": 59571,
                        "indexExpression": {
                          "id": 59570,
                          "name": "provider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59490,
                          "src": "8905:8:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8889:25:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_SessionRequest_$60395_storage_$",
                          "typeString": "mapping(bytes32 => struct SessionRequest storage ref)"
                        }
                      },
                      "id": 59573,
                      "indexExpression": {
                        "id": 59572,
                        "name": "sessionRequestHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59413,
                        "src": "8915:18:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8889:45:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_SessionRequest_$60395_storage",
                        "typeString": "struct SessionRequest storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59575,
                  "nodeType": "ExpressionStatement",
                  "src": "8882:52:116"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 59577,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59490,
                        "src": "8954:8:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 59578,
                          "name": "sessionRequest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59439,
                          "src": "8964:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                            "typeString": "struct SessionRequest memory"
                          }
                        },
                        "id": 59579,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8979:7:116",
                        "memberName": "account",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 60394,
                        "src": "8964:22:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 59580,
                          "name": "sessionRequest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59439,
                          "src": "8988:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_SessionRequest_$60395_memory_ptr",
                            "typeString": "struct SessionRequest memory"
                          }
                        },
                        "id": 59581,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9003:5:116",
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 60392,
                        "src": "8988:20:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 59576,
                      "name": "Confirmed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59271,
                      "src": "8944:9:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 59582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8944:65:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59583,
                  "nodeType": "EmitStatement",
                  "src": "8939:70:116"
                }
              ]
            },
            "documentation": {
              "id": 59411,
              "nodeType": "StructuredDocumentation",
              "src": "6268:807:116",
              "text": " @notice Confirms a session request and adds the session owner as a signer to the account\n @dev Verifies signatures from both provider and owner before adding the owner as a signer\n @param sessionRequestHash Hash of the session request to confirm\n @param sessionHash Hash of the session data\n @param ownerSignedSessionHash Signature of the session hash by the session owner\n @custom:throws SessionRequestNotFound if the session request doesn't exist\n @custom:throws SessionRequestExpired if the session request has expired\n @custom:throws InvalidProvider if the recovered provider doesn't match the sender\n @custom:throws InvalidOwnerSignedSessionHash if the owner signature is invalid\n @custom:emits Confirmed event with provider, account, and session owner addresses"
            },
            "functionSelector": "e26be210",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "confirm",
            "nameLocation": "7086:7:116",
            "parameters": {
              "id": 59418,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59413,
                  "mutability": "mutable",
                  "name": "sessionRequestHash",
                  "nameLocation": "7102:18:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59585,
                  "src": "7094:26:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 59412,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7094:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59415,
                  "mutability": "mutable",
                  "name": "sessionHash",
                  "nameLocation": "7130:11:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59585,
                  "src": "7122:19:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 59414,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7122:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59417,
                  "mutability": "mutable",
                  "name": "ownerSignedSessionHash",
                  "nameLocation": "7158:22:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59585,
                  "src": "7143:37:116",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 59416,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7143:5:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7093:88:116"
            },
            "returnParameters": {
              "id": 59419,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7191:0:116"
            },
            "scope": 60380,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 59615,
            "nodeType": "FunctionDefinition",
            "src": "9374:248:116",
            "nodes": [],
            "body": {
              "id": 59614,
              "nodeType": "Block",
              "src": "9455:167:116",
              "nodes": [],
              "statements": [
                {
                  "assignments": [59594],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59594,
                      "mutability": "mutable",
                      "name": "salt",
                      "nameLocation": "9467:4:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59614,
                      "src": "9459:12:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 59593,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9459:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59598,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 59596,
                        "name": "sessionSalt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59588,
                        "src": "9492:11:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 59595,
                      "name": "_bytes32ToUint256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59629,
                      "src": "9474:17:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (uint256)"
                      }
                    },
                    "id": 59597,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9474:30:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9459:45:116"
                },
                {
                  "assignments": [59600],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59600,
                      "mutability": "mutable",
                      "name": "accountAddress",
                      "nameLocation": "9517:14:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59614,
                      "src": "9509:22:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 59599,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "9509:7:116",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59611,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 59607,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "9580:4:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_SessionManagerModule_$60380",
                              "typeString": "contract SessionManagerModule"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_SessionManagerModule_$60380",
                              "typeString": "contract SessionManagerModule"
                            }
                          ],
                          "id": 59606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9572:7:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 59605,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9572:7:116",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 59608,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9572:13:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 59609,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59594,
                        "src": "9587:4:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 59602,
                            "name": "twoFAFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59244,
                            "src": "9547:12:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 59601,
                          "name": "TwoFAFactory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60764,
                          "src": "9534:12:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TwoFAFactory_$60764_$",
                            "typeString": "type(contract TwoFAFactory)"
                          }
                        },
                        "id": 59603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9534:26:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TwoFAFactory_$60764",
                          "typeString": "contract TwoFAFactory"
                        }
                      },
                      "id": 59604,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9561:10:116",
                      "memberName": "getAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60530,
                      "src": "9534:37:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (address,uint256) view external returns (address)"
                      }
                    },
                    "id": 59610,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9534:58:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9509:83:116"
                },
                {
                  "expression": {
                    "id": 59612,
                    "name": "accountAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 59600,
                    "src": "9604:14:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 59592,
                  "id": 59613,
                  "nodeType": "Return",
                  "src": "9597:21:116"
                }
              ]
            },
            "documentation": {
              "id": 59586,
              "nodeType": "StructuredDocumentation",
              "src": "9016:356:116",
              "text": " @notice Calculates the deterministic account address for a given session salt\n @dev Uses the TwoFAFactory to compute the address without deploying the contract\n @param sessionSalt A unique salt used to deterministically generate the account address\n @return The address where the account contract would be deployed with the given salt"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getAccountAddress",
            "nameLocation": "9383:18:116",
            "parameters": {
              "id": 59589,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59588,
                  "mutability": "mutable",
                  "name": "sessionSalt",
                  "nameLocation": "9410:11:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59615,
                  "src": "9402:19:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 59587,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9402:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9401:21:116"
            },
            "returnParameters": {
              "id": 59592,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59591,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 59615,
                  "src": "9446:7:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59590,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9446:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9445:9:116"
            },
            "scope": 60380,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 59629,
            "nodeType": "FunctionDefinition",
            "src": "9827:95:116",
            "nodes": [],
            "body": {
              "id": 59628,
              "nodeType": "Block",
              "src": "9897:25:116",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 59625,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59618,
                        "src": "9916:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 59624,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "9908:7:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 59623,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9908:7:116",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 59626,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9908:10:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 59622,
                  "id": 59627,
                  "nodeType": "Return",
                  "src": "9901:17:116"
                }
              ]
            },
            "documentation": {
              "id": 59616,
              "nodeType": "StructuredDocumentation",
              "src": "9625:200:116",
              "text": " @notice Converts a bytes32 value to a uint256\n @dev Simple type conversion used for salt calculations\n @param b The bytes32 value to convert\n @return The equivalent uint256 value"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_bytes32ToUint256",
            "nameLocation": "9836:17:116",
            "parameters": {
              "id": 59619,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59618,
                  "mutability": "mutable",
                  "name": "b",
                  "nameLocation": "9862:1:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59629,
                  "src": "9854:9:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 59617,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9854:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9853:11:116"
            },
            "returnParameters": {
              "id": 59622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59621,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 59629,
                  "src": "9888:7:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 59620,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9888:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9887:9:116"
            },
            "scope": 60380,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 59717,
            "nodeType": "FunctionDefinition",
            "src": "10472:764:116",
            "nodes": [],
            "body": {
              "id": 59716,
              "nodeType": "Block",
              "src": "10537:699:116",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "id": 59640,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "10545:24:116",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 59638,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59632,
                          "src": "10561:7:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 59637,
                        "name": "contractExists",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60154,
                        "src": "10546:14:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 59639,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10546:23:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59645,
                  "nodeType": "IfStatement",
                  "src": "10541:66:116",
                  "trueBody": {
                    "id": 59644,
                    "nodeType": "Block",
                    "src": "10571:36:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59641,
                            "name": "AccountNotCreated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59168,
                            "src": "10583:17:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59642,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10583:19:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59643,
                        "nodeType": "RevertStatement",
                        "src": "10576:26:116"
                      }
                    ]
                  }
                },
                {
                  "assignments": [59647],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59647,
                      "mutability": "mutable",
                      "name": "ownerAmount",
                      "nameLocation": "10743:11:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59716,
                      "src": "10735:19:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 59646,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10735:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59654,
                  "initialValue": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "arguments": [
                            {
                              "id": 59649,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59632,
                              "src": "10770:7:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 59648,
                            "name": "OwnerManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53742,
                            "src": "10757:12:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_OwnerManager_$53742_$",
                              "typeString": "type(contract OwnerManager)"
                            }
                          },
                          "id": 59650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10757:21:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_OwnerManager_$53742",
                            "typeString": "contract OwnerManager"
                          }
                        },
                        "id": 59651,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "10779:9:116",
                        "memberName": "getOwners",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53741,
                        "src": "10757:31:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                          "typeString": "function () view external returns (address[] memory)"
                        }
                      },
                      "id": 59652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10757:33:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[] memory"
                      }
                    },
                    "id": 59653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "10791:6:116",
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "10757:40:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10735:62:116"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 59660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 59657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 59655,
                            "name": "ownerAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59647,
                            "src": "10806:11:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 59656,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10820:1:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "10806:15:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 59658,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "10805:17:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "3530",
                      "id": 59659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10825:2:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_50_by_1",
                        "typeString": "int_const 50"
                      },
                      "value": "50"
                    },
                    "src": "10805:22:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59675,
                  "nodeType": "IfStatement",
                  "src": "10801:112:116",
                  "trueBody": {
                    "id": 59674,
                    "nodeType": "Block",
                    "src": "10829:84:116",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 59662,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59632,
                              "src": "10848:7:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 59664,
                                        "name": "account",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 59632,
                                        "src": "10870:7:116",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 59663,
                                      "name": "OwnerManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 53742,
                                      "src": "10857:12:116",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_OwnerManager_$53742_$",
                                        "typeString": "type(contract OwnerManager)"
                                      }
                                    },
                                    "id": 59665,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10857:21:116",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_OwnerManager_$53742",
                                      "typeString": "contract OwnerManager"
                                    }
                                  },
                                  "id": 59666,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "10879:9:116",
                                  "memberName": "getOwners",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 53741,
                                  "src": "10857:31:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                                    "typeString": "function () view external returns (address[] memory)"
                                  }
                                },
                                "id": 59667,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10857:33:116",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 59671,
                              "indexExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 59670,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 59668,
                                  "name": "ownerAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 59647,
                                  "src": "10891:11:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 59669,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10905:1:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "10891:15:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10857:50:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 59661,
                            "name": "_removeSigner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59836,
                            "src": "10834:13:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 59672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10834:74:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59673,
                        "nodeType": "ExpressionStatement",
                        "src": "10834:74:116"
                      }
                    ]
                  }
                },
                {
                  "assignments": [59677],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59677,
                      "mutability": "mutable",
                      "name": "threshold",
                      "nameLocation": "10925:9:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59716,
                      "src": "10917:17:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 59676,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10917:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59683,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "id": 59679,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59632,
                            "src": "10950:7:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 59678,
                          "name": "OwnerManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53742,
                          "src": "10937:12:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_OwnerManager_$53742_$",
                            "typeString": "type(contract OwnerManager)"
                          }
                        },
                        "id": 59680,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10937:21:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_OwnerManager_$53742",
                          "typeString": "contract OwnerManager"
                        }
                      },
                      "id": 59681,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10959:12:116",
                      "memberName": "getThreshold",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53668,
                      "src": "10937:34:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 59682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10937:36:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10917:56:116"
                },
                {
                  "assignments": [59685],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59685,
                      "mutability": "mutable",
                      "name": "data",
                      "nameLocation": "10991:4:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59716,
                      "src": "10978:17:116",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 59684,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "10978:5:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59694,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 59688,
                          "name": "OwnerManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53742,
                          "src": "11013:12:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_OwnerManager_$53742_$",
                            "typeString": "type(contract OwnerManager)"
                          }
                        },
                        "id": 59689,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "11026:21:116",
                        "memberName": "addOwnerWithThreshold",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53451,
                        "src": "11013:34:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function OwnerManager.addOwnerWithThreshold(address,uint256)"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 59690,
                            "name": "newSigner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59634,
                            "src": "11050:9:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 59691,
                            "name": "threshold",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59677,
                            "src": "11061:9:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 59692,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "11049:22:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$",
                          "typeString": "tuple(address,uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function OwnerManager.addOwnerWithThreshold(address,uint256)"
                        },
                        {
                          "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$",
                          "typeString": "tuple(address,uint256)"
                        }
                      ],
                      "expression": {
                        "id": 59686,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "10998:3:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 59687,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "11002:10:116",
                      "memberName": "encodeCall",
                      "nodeType": "MemberAccess",
                      "src": "10998:14:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 59693,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10998:74:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10978:94:116"
                },
                {
                  "assignments": [59696],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59696,
                      "mutability": "mutable",
                      "name": "success",
                      "nameLocation": "11082:7:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59716,
                      "src": "11077:12:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 59695,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "11077:4:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59708,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 59701,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59632,
                        "src": "11141:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 59702,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11150:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "id": 59703,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59685,
                        "src": "11153:4:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 59704,
                            "name": "Enum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53749,
                            "src": "11159:4:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Enum_$53749_$",
                              "typeString": "type(contract Enum)"
                            }
                          },
                          "id": 59705,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "11164:9:116",
                          "memberName": "Operation",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 53748,
                          "src": "11159:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Operation_$53748_$",
                            "typeString": "type(enum Enum.Operation)"
                          }
                        },
                        "id": 59706,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "11174:4:116",
                        "memberName": "Call",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53746,
                        "src": "11159:19:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Operation_$53748",
                          "typeString": "enum Enum.Operation"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_enum$_Operation_$53748",
                          "typeString": "enum Enum.Operation"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 59698,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59632,
                            "src": "11106:7:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 59697,
                          "name": "ModuleManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53229,
                          "src": "11092:13:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ModuleManager_$53229_$",
                            "typeString": "type(contract ModuleManager)"
                          }
                        },
                        "id": 59699,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11092:22:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ModuleManager_$53229",
                          "typeString": "contract ModuleManager"
                        }
                      },
                      "id": 59700,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11115:25:116",
                      "memberName": "execTransactionFromModule",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53066,
                      "src": "11092:48:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$53748_$returns$_t_bool_$",
                        "typeString": "function (address,uint256,bytes memory,enum Enum.Operation) external returns (bool)"
                      }
                    },
                    "id": 59707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11092:87:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11077:102:116"
                },
                {
                  "condition": {
                    "id": 59710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "11187:8:116",
                    "subExpression": {
                      "id": 59709,
                      "name": "success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59696,
                      "src": "11188:7:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59715,
                  "nodeType": "IfStatement",
                  "src": "11183:50:116",
                  "trueBody": {
                    "id": 59714,
                    "nodeType": "Block",
                    "src": "11197:36:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59711,
                            "name": "FailedToAddSigner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59170,
                            "src": "11209:17:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11209:19:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59713,
                        "nodeType": "RevertStatement",
                        "src": "11202:26:116"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 59630,
              "nodeType": "StructuredDocumentation",
              "src": "9999:471:116",
              "text": " @notice Internal function to add a new signer to an account\n @dev Uses the Safe's ModuleManager to execute the addOwnerWithThreshold function\n      while maintaining the same threshold\n @param account The address of the account to modify\n @param newSigner The address to add as a new signer\n @custom:throws AccountNotCreated if the account is not a valid contract\n @custom:throws FailedToAddSigner if the transaction to add the signer fails"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addSigner",
            "nameLocation": "10481:10:116",
            "parameters": {
              "id": 59635,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59632,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "10500:7:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59717,
                  "src": "10492:15:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59631,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10492:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59634,
                  "mutability": "mutable",
                  "name": "newSigner",
                  "nameLocation": "10517:9:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59717,
                  "src": "10509:17:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59633,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10509:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10491:36:116"
            },
            "returnParameters": {
              "id": 59636,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10537:0:116"
            },
            "scope": 60380,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 59836,
            "nodeType": "FunctionDefinition",
            "src": "11810:993:116",
            "nodes": [],
            "body": {
              "id": 59835,
              "nodeType": "Block",
              "src": "11875:928:116",
              "nodes": [],
              "statements": [
                {
                  "assignments": [59727],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59727,
                      "mutability": "mutable",
                      "name": "ownerManager",
                      "nameLocation": "11892:12:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59835,
                      "src": "11879:25:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_OwnerManager_$53742",
                        "typeString": "contract OwnerManager"
                      },
                      "typeName": {
                        "id": 59726,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 59725,
                          "name": "OwnerManager",
                          "nameLocations": ["11879:12:116"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 53742,
                          "src": "11879:12:116"
                        },
                        "referencedDeclaration": 53742,
                        "src": "11879:12:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_OwnerManager_$53742",
                          "typeString": "contract OwnerManager"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59731,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 59729,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59720,
                        "src": "11920:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 59728,
                      "name": "OwnerManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53742,
                      "src": "11907:12:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_OwnerManager_$53742_$",
                        "typeString": "type(contract OwnerManager)"
                      }
                    },
                    "id": 59730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11907:21:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_OwnerManager_$53742",
                      "typeString": "contract OwnerManager"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11879:49:116"
                },
                {
                  "condition": {
                    "id": 59736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "11937:29:116",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 59734,
                          "name": "signer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59722,
                          "src": "11959:6:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 59732,
                          "name": "ownerManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59727,
                          "src": "11938:12:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_OwnerManager_$53742",
                            "typeString": "contract OwnerManager"
                          }
                        },
                        "id": 59733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "11951:7:116",
                        "memberName": "isOwner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53690,
                        "src": "11938:20:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view external returns (bool)"
                        }
                      },
                      "id": 59735,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11938:28:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59741,
                  "nodeType": "IfStatement",
                  "src": "11933:68:116",
                  "trueBody": {
                    "id": 59740,
                    "nodeType": "Block",
                    "src": "11968:33:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59737,
                            "name": "SignerNotOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59174,
                            "src": "11980:14:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11980:16:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59739,
                        "nodeType": "RevertStatement",
                        "src": "11973:23:116"
                      }
                    ]
                  }
                },
                {
                  "assignments": [59743],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59743,
                      "mutability": "mutable",
                      "name": "threshold",
                      "nameLocation": "12013:9:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59835,
                      "src": "12005:17:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 59742,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12005:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59747,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 59744,
                        "name": "ownerManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59727,
                        "src": "12025:12:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_OwnerManager_$53742",
                          "typeString": "contract OwnerManager"
                        }
                      },
                      "id": 59745,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12038:12:116",
                      "memberName": "getThreshold",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53668,
                      "src": "12025:25:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 59746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12025:27:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12005:47:116"
                },
                {
                  "assignments": [59752],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59752,
                      "mutability": "mutable",
                      "name": "owners",
                      "nameLocation": "12130:6:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59835,
                      "src": "12113:23:116",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 59750,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12113:7:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 59751,
                        "nodeType": "ArrayTypeName",
                        "src": "12113:9:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59756,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 59753,
                        "name": "ownerManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59727,
                        "src": "12139:12:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_OwnerManager_$53742",
                          "typeString": "contract OwnerManager"
                        }
                      },
                      "id": 59754,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12152:9:116",
                      "memberName": "getOwners",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53741,
                      "src": "12139:22:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function () view external returns (address[] memory)"
                      }
                    },
                    "id": 59755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12139:24:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12113:50:116"
                },
                {
                  "assignments": [59758],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59758,
                      "mutability": "mutable",
                      "name": "prevOwner",
                      "nameLocation": "12175:9:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59835,
                      "src": "12167:17:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 59757,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12167:7:116",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59763,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "307831",
                        "id": 59761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12195:3:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "0x1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 59760,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "12187:7:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 59759,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12187:7:116",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 59762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12187:12:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12167:32:116"
                },
                {
                  "assignments": [59765],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59765,
                      "mutability": "mutable",
                      "name": "currentOwner",
                      "nameLocation": "12211:12:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59835,
                      "src": "12203:20:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 59764,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12203:7:116",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59767,
                  "initialValue": {
                    "id": 59766,
                    "name": "signer",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 59722,
                    "src": "12226:6:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12203:29:116"
                },
                {
                  "body": {
                    "id": 59800,
                    "nodeType": "Block",
                    "src": "12338:196:116",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 59783,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 59779,
                              "name": "owners",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59752,
                              "src": "12347:6:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 59781,
                            "indexExpression": {
                              "id": 59780,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59769,
                              "src": "12354:1:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12347:9:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 59782,
                            "name": "signer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59722,
                            "src": "12360:6:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "12347:19:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 59799,
                        "nodeType": "IfStatement",
                        "src": "12343:187:116",
                        "trueBody": {
                          "id": 59798,
                          "nodeType": "Block",
                          "src": "12368:162:116",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 59786,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 59784,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 59769,
                                  "src": "12468:1:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 59785,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12472:1:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "12468:5:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 59796,
                              "nodeType": "IfStatement",
                              "src": "12464:50:116",
                              "trueBody": {
                                "id": 59795,
                                "nodeType": "Block",
                                "src": "12475:39:116",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 59793,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 59787,
                                        "name": "prevOwner",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 59758,
                                        "src": "12482:9:116",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "baseExpression": {
                                          "id": 59788,
                                          "name": "owners",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 59752,
                                          "src": "12494:6:116",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                            "typeString": "address[] memory"
                                          }
                                        },
                                        "id": 59792,
                                        "indexExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 59791,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 59789,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 59769,
                                            "src": "12501:1:116",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "hexValue": "31",
                                            "id": 59790,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "12505:1:116",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "12501:5:116",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "12494:13:116",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "src": "12482:25:116",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 59794,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12482:25:116"
                                  }
                                ]
                              }
                            },
                            {
                              "id": 59797,
                              "nodeType": "Break",
                              "src": "12519:5:116"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 59775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 59772,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59769,
                      "src": "12314:1:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 59773,
                        "name": "owners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59752,
                        "src": "12318:6:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 59774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12325:6:116",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "12318:13:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12314:17:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59801,
                  "initializationExpression": {
                    "assignments": [59769],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 59769,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "12307:1:116",
                        "nodeType": "VariableDeclaration",
                        "scope": 59801,
                        "src": "12299:9:116",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 59768,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12299:7:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 59771,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 59770,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12311:1:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "12299:13:116"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 59777,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "12333:3:116",
                      "subExpression": {
                        "id": 59776,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59769,
                        "src": "12333:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 59778,
                    "nodeType": "ExpressionStatement",
                    "src": "12333:3:116"
                  },
                  "nodeType": "ForStatement",
                  "src": "12294:240:116"
                },
                {
                  "assignments": [59803],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59803,
                      "mutability": "mutable",
                      "name": "data",
                      "nameLocation": "12551:4:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59835,
                      "src": "12538:17:116",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 59802,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "12538:5:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59813,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 59806,
                          "name": "OwnerManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53742,
                          "src": "12573:12:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_OwnerManager_$53742_$",
                            "typeString": "type(contract OwnerManager)"
                          }
                        },
                        "id": 59807,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "12586:11:116",
                        "memberName": "removeOwner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53528,
                        "src": "12573:24:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function OwnerManager.removeOwner(address,address,uint256)"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 59808,
                            "name": "prevOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59758,
                            "src": "12600:9:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 59809,
                            "name": "currentOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59765,
                            "src": "12611:12:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 59810,
                            "name": "threshold",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59743,
                            "src": "12625:9:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 59811,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "12599:36:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$",
                          "typeString": "tuple(address,address,uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function OwnerManager.removeOwner(address,address,uint256)"
                        },
                        {
                          "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$",
                          "typeString": "tuple(address,address,uint256)"
                        }
                      ],
                      "expression": {
                        "id": 59804,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "12558:3:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 59805,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "12562:10:116",
                      "memberName": "encodeCall",
                      "nodeType": "MemberAccess",
                      "src": "12558:14:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 59812,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12558:78:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12538:98:116"
                },
                {
                  "assignments": [59815],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59815,
                      "mutability": "mutable",
                      "name": "success",
                      "nameLocation": "12646:7:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59835,
                      "src": "12641:12:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 59814,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "12641:4:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59827,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 59820,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59720,
                        "src": "12705:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 59821,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12714:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "id": 59822,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59803,
                        "src": "12717:4:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 59823,
                            "name": "Enum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53749,
                            "src": "12723:4:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Enum_$53749_$",
                              "typeString": "type(contract Enum)"
                            }
                          },
                          "id": 59824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "12728:9:116",
                          "memberName": "Operation",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 53748,
                          "src": "12723:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Operation_$53748_$",
                            "typeString": "type(enum Enum.Operation)"
                          }
                        },
                        "id": 59825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "12738:4:116",
                        "memberName": "Call",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53746,
                        "src": "12723:19:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Operation_$53748",
                          "typeString": "enum Enum.Operation"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_enum$_Operation_$53748",
                          "typeString": "enum Enum.Operation"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 59817,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59720,
                            "src": "12670:7:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 59816,
                          "name": "ModuleManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53229,
                          "src": "12656:13:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ModuleManager_$53229_$",
                            "typeString": "type(contract ModuleManager)"
                          }
                        },
                        "id": 59818,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12656:22:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ModuleManager_$53229",
                          "typeString": "contract ModuleManager"
                        }
                      },
                      "id": 59819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12679:25:116",
                      "memberName": "execTransactionFromModule",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53066,
                      "src": "12656:48:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$53748_$returns$_t_bool_$",
                        "typeString": "function (address,uint256,bytes memory,enum Enum.Operation) external returns (bool)"
                      }
                    },
                    "id": 59826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12656:87:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12641:102:116"
                },
                {
                  "condition": {
                    "id": 59829,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "12751:8:116",
                    "subExpression": {
                      "id": 59828,
                      "name": "success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59815,
                      "src": "12752:7:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59834,
                  "nodeType": "IfStatement",
                  "src": "12747:53:116",
                  "trueBody": {
                    "id": 59833,
                    "nodeType": "Block",
                    "src": "12761:39:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59830,
                            "name": "FailedToRemoveSigner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59172,
                            "src": "12773:20:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12773:22:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59832,
                        "nodeType": "RevertStatement",
                        "src": "12766:29:116"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 59718,
              "nodeType": "StructuredDocumentation",
              "src": "11239:569:116",
              "text": " @notice Internal function to remove a signer from an account\n @dev Uses the Safe's ModuleManager to execute the removeOwner function\n      Safe uses a linked list structure for owners, so we need to find the previous owner\n      in the list before removing the target signer\n @param account The address of the account to modify\n @param signer The address to remove as a signer\n @custom:throws SignerNotOwner if the signer is not an owner of the account\n @custom:throws FailedToRemoveSigner if the transaction to remove the signer fails"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removeSigner",
            "nameLocation": "11819:13:116",
            "parameters": {
              "id": 59723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59720,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "11841:7:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59836,
                  "src": "11833:15:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59719,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11833:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 59722,
                  "mutability": "mutable",
                  "name": "signer",
                  "nameLocation": "11858:6:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59836,
                  "src": "11850:14:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59721,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11850:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11832:33:116"
            },
            "returnParameters": {
              "id": 59724,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11875:0:116"
            },
            "scope": 60380,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 59871,
            "nodeType": "FunctionDefinition",
            "src": "13160:241:116",
            "nodes": [],
            "body": {
              "id": 59870,
              "nodeType": "Block",
              "src": "13202:199:116",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "id": 59846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "13210:27:116",
                    "subExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 59843,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "13226:3:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 59844,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13230:6:116",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "13226:10:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 59842,
                        "name": "contractExists",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60154,
                        "src": "13211:14:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 59845,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13211:26:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59851,
                  "nodeType": "IfStatement",
                  "src": "13206:69:116",
                  "trueBody": {
                    "id": 59850,
                    "nodeType": "Block",
                    "src": "13239:36:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59847,
                            "name": "AccountNotCreated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59168,
                            "src": "13251:17:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59848,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13251:19:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59849,
                        "nodeType": "RevertStatement",
                        "src": "13244:26:116"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 59857,
                        "name": "signer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59839,
                        "src": "13316:6:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 59853,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "13296:3:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 59854,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "13300:6:116",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "13296:10:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 59852,
                          "name": "OwnerManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53742,
                          "src": "13283:12:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_OwnerManager_$53742_$",
                            "typeString": "type(contract OwnerManager)"
                          }
                        },
                        "id": 59855,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13283:24:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_OwnerManager_$53742",
                          "typeString": "contract OwnerManager"
                        }
                      },
                      "id": 59856,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13308:7:116",
                      "memberName": "isOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53690,
                      "src": "13283:32:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view external returns (bool)"
                      }
                    },
                    "id": 59858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13283:40:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59863,
                  "nodeType": "IfStatement",
                  "src": "13279:84:116",
                  "trueBody": {
                    "id": 59862,
                    "nodeType": "Block",
                    "src": "13325:38:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59859,
                            "name": "SignerAlreadyExists",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59176,
                            "src": "13337:19:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59860,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13337:21:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59861,
                        "nodeType": "RevertStatement",
                        "src": "13330:28:116"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 59865,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "13378:3:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 59866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "13382:6:116",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "13378:10:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 59867,
                        "name": "signer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59839,
                        "src": "13390:6:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 59864,
                      "name": "_addSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59717,
                      "src": "13367:10:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 59868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13367:30:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59869,
                  "nodeType": "ExpressionStatement",
                  "src": "13367:30:116"
                }
              ]
            },
            "documentation": {
              "id": 59837,
              "nodeType": "StructuredDocumentation",
              "src": "12806:352:116",
              "text": " @notice Adds a new signer to the calling account\n @dev Can only be called by an existing account contract\n @param signer The address to add as a new signer to the account\n @custom:throws AccountNotCreated if the caller is not a valid contract\n @custom:throws SignerAlreadyExists if the signer is already an owner of the account"
            },
            "functionSelector": "eb12d61e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addSigner",
            "nameLocation": "13169:9:116",
            "parameters": {
              "id": 59840,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59839,
                  "mutability": "mutable",
                  "name": "signer",
                  "nameLocation": "13187:6:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59871,
                  "src": "13179:14:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59838,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13179:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13178:16:116"
            },
            "returnParameters": {
              "id": 59841,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13202:0:116"
            },
            "scope": 60380,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 59907,
            "nodeType": "FunctionDefinition",
            "src": "13751:237:116",
            "nodes": [],
            "body": {
              "id": 59906,
              "nodeType": "Block",
              "src": "13790:198:116",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "id": 59881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "13798:27:116",
                    "subExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 59878,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "13814:3:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 59879,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13818:6:116",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "13814:10:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 59877,
                        "name": "contractExists",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60154,
                        "src": "13799:14:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 59880,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13799:26:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59886,
                  "nodeType": "IfStatement",
                  "src": "13794:69:116",
                  "trueBody": {
                    "id": 59885,
                    "nodeType": "Block",
                    "src": "13827:36:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59882,
                            "name": "AccountNotCreated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59168,
                            "src": "13839:17:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59883,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13839:19:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59884,
                        "nodeType": "RevertStatement",
                        "src": "13832:26:116"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 59894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "13871:41:116",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 59892,
                          "name": "signer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59874,
                          "src": "13905:6:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 59888,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "13885:3:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 59889,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "13889:6:116",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "13885:10:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 59887,
                            "name": "OwnerManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53742,
                            "src": "13872:12:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_OwnerManager_$53742_$",
                              "typeString": "type(contract OwnerManager)"
                            }
                          },
                          "id": 59890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13872:24:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_OwnerManager_$53742",
                            "typeString": "contract OwnerManager"
                          }
                        },
                        "id": 59891,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "13897:7:116",
                        "memberName": "isOwner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53690,
                        "src": "13872:32:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view external returns (bool)"
                        }
                      },
                      "id": 59893,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13872:40:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59899,
                  "nodeType": "IfStatement",
                  "src": "13867:80:116",
                  "trueBody": {
                    "id": 59898,
                    "nodeType": "Block",
                    "src": "13914:33:116",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 59895,
                            "name": "SignerNotOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59174,
                            "src": "13926:14:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 59896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13926:16:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 59897,
                        "nodeType": "RevertStatement",
                        "src": "13919:23:116"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 59901,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "13965:3:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 59902,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "13969:6:116",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "13965:10:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 59903,
                        "name": "signer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59874,
                        "src": "13977:6:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 59900,
                      "name": "_removeSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59836,
                      "src": "13951:13:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 59904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13951:33:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 59905,
                  "nodeType": "ExpressionStatement",
                  "src": "13951:33:116"
                }
              ]
            },
            "documentation": {
              "id": 59872,
              "nodeType": "StructuredDocumentation",
              "src": "13404:345:116",
              "text": " @notice Removes a signer from the calling account\n @dev Can only be called by an existing account contract\n @param signer The address to remove as a signer from the account\n @custom:throws AccountNotCreated if the caller is not a valid contract\n @custom:throws SignerNotOwner if the signer is not an owner of the account"
            },
            "functionSelector": "74a8f103",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "revoke",
            "nameLocation": "13760:6:116",
            "parameters": {
              "id": 59875,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59874,
                  "mutability": "mutable",
                  "name": "signer",
                  "nameLocation": "13775:6:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59907,
                  "src": "13767:14:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59873,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13767:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13766:16:116"
            },
            "returnParameters": {
              "id": 59876,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13790:0:116"
            },
            "scope": 60380,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 59997,
            "nodeType": "FunctionDefinition",
            "src": "14528:622:116",
            "nodes": [],
            "body": {
              "id": 59996,
              "nodeType": "Block",
              "src": "14582:568:116",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 59918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 59913,
                          "name": "activeSessions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59257,
                          "src": "14590:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                          }
                        },
                        "id": 59915,
                        "indexExpression": {
                          "id": 59914,
                          "name": "sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59910,
                          "src": "14605:6:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14590:22:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                          "typeString": "struct ActiveSession storage ref[] storage ref"
                        }
                      },
                      "id": 59916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14613:6:116",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "14590:29:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 59917,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14623:1:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14590:34:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59921,
                  "nodeType": "IfStatement",
                  "src": "14586:56:116",
                  "trueBody": {
                    "id": 59920,
                    "nodeType": "Block",
                    "src": "14626:16:116",
                    "statements": [
                      {
                        "functionReturnParameters": 59912,
                        "id": 59919,
                        "nodeType": "Return",
                        "src": "14631:7:116"
                      }
                    ]
                  }
                },
                {
                  "assignments": [59924],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 59924,
                      "mutability": "mutable",
                      "name": "ownerManager",
                      "nameLocation": "14659:12:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 59996,
                      "src": "14646:25:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_OwnerManager_$53742",
                        "typeString": "contract OwnerManager"
                      },
                      "typeName": {
                        "id": 59923,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 59922,
                          "name": "OwnerManager",
                          "nameLocations": ["14646:12:116"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 53742,
                          "src": "14646:12:116"
                        },
                        "referencedDeclaration": 53742,
                        "src": "14646:12:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_OwnerManager_$53742",
                          "typeString": "contract OwnerManager"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 59928,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 59926,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59910,
                        "src": "14687:6:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 59925,
                      "name": "OwnerManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53742,
                      "src": "14674:12:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_OwnerManager_$53742_$",
                        "typeString": "type(contract OwnerManager)"
                      }
                    },
                    "id": 59927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14674:20:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_OwnerManager_$53742",
                      "typeString": "contract OwnerManager"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14646:48:116"
                },
                {
                  "body": {
                    "id": 59994,
                    "nodeType": "Block",
                    "src": "14759:388:116",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 59950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 59942,
                                  "name": "activeSessions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 59257,
                                  "src": "14798:14:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                                    "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                                  }
                                },
                                "id": 59944,
                                "indexExpression": {
                                  "id": 59943,
                                  "name": "sender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 59910,
                                  "src": "14813:6:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "14798:22:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                                  "typeString": "struct ActiveSession storage ref[] storage ref"
                                }
                              },
                              "id": 59946,
                              "indexExpression": {
                                "id": 59945,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 59930,
                                "src": "14821:1:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "14798:25:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ActiveSession_$60402_storage",
                                "typeString": "struct ActiveSession storage ref"
                              }
                            },
                            "id": 59947,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14824:6:116",
                            "memberName": "expiry",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 60397,
                            "src": "14798:32:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint48",
                              "typeString": "uint48"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 59948,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "14833:5:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 59949,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14839:9:116",
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "14833:15:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14798:50:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 59974,
                        "nodeType": "IfStatement",
                        "src": "14794:188:116",
                        "trueBody": {
                          "id": 59973,
                          "nodeType": "Block",
                          "src": "14850:132:116",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "baseExpression": {
                                          "id": 59952,
                                          "name": "activeSessions",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 59257,
                                          "src": "14870:14:116",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                                            "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                                          }
                                        },
                                        "id": 59954,
                                        "indexExpression": {
                                          "id": 59953,
                                          "name": "sender",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 59910,
                                          "src": "14885:6:116",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "14870:22:116",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                                          "typeString": "struct ActiveSession storage ref[] storage ref"
                                        }
                                      },
                                      "id": 59956,
                                      "indexExpression": {
                                        "id": 59955,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 59930,
                                        "src": "14893:1:116",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "14870:25:116",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ActiveSession_$60402_storage",
                                        "typeString": "struct ActiveSession storage ref"
                                      }
                                    },
                                    "id": 59957,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "14896:7:116",
                                    "memberName": "account",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 60401,
                                    "src": "14870:33:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "baseExpression": {
                                          "id": 59958,
                                          "name": "activeSessions",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 59257,
                                          "src": "14905:14:116",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                                            "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                                          }
                                        },
                                        "id": 59960,
                                        "indexExpression": {
                                          "id": 59959,
                                          "name": "sender",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 59910,
                                          "src": "14920:6:116",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "14905:22:116",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                                          "typeString": "struct ActiveSession storage ref[] storage ref"
                                        }
                                      },
                                      "id": 59962,
                                      "indexExpression": {
                                        "id": 59961,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 59930,
                                        "src": "14928:1:116",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "14905:25:116",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ActiveSession_$60402_storage",
                                        "typeString": "struct ActiveSession storage ref"
                                      }
                                    },
                                    "id": 59963,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "14931:5:116",
                                    "memberName": "owner",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 60399,
                                    "src": "14905:31:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 59951,
                                  "name": "_removeSigner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 59836,
                                  "src": "14856:13:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                    "typeString": "function (address,address)"
                                  }
                                },
                                "id": 59964,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14856:81:116",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 59965,
                              "nodeType": "ExpressionStatement",
                              "src": "14856:81:116"
                            },
                            {
                              "expression": {
                                "id": 59971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "14944:32:116",
                                "subExpression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 59966,
                                      "name": "activeSessions",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 59257,
                                      "src": "14951:14:116",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                                        "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                                      }
                                    },
                                    "id": 59968,
                                    "indexExpression": {
                                      "id": 59967,
                                      "name": "sender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 59910,
                                      "src": "14966:6:116",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "14951:22:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                                      "typeString": "struct ActiveSession storage ref[] storage ref"
                                    }
                                  },
                                  "id": 59970,
                                  "indexExpression": {
                                    "id": 59969,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 59930,
                                    "src": "14974:1:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "14951:25:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ActiveSession_$60402_storage",
                                    "typeString": "struct ActiveSession storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 59972,
                              "nodeType": "ExpressionStatement",
                              "src": "14944:32:116"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "id": 59984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "15043:54:116",
                          "subExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 59977,
                                      "name": "activeSessions",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 59257,
                                      "src": "15065:14:116",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                                        "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                                      }
                                    },
                                    "id": 59979,
                                    "indexExpression": {
                                      "id": 59978,
                                      "name": "sender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 59910,
                                      "src": "15080:6:116",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "15065:22:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                                      "typeString": "struct ActiveSession storage ref[] storage ref"
                                    }
                                  },
                                  "id": 59981,
                                  "indexExpression": {
                                    "id": 59980,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 59930,
                                    "src": "15088:1:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15065:25:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ActiveSession_$60402_storage",
                                    "typeString": "struct ActiveSession storage ref"
                                  }
                                },
                                "id": 59982,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "15091:5:116",
                                "memberName": "owner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 60399,
                                "src": "15065:31:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 59975,
                                "name": "ownerManager",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 59924,
                                "src": "15044:12:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_OwnerManager_$53742",
                                  "typeString": "contract OwnerManager"
                                }
                              },
                              "id": 59976,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15057:7:116",
                              "memberName": "isOwner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 53690,
                              "src": "15044:20:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address) view external returns (bool)"
                              }
                            },
                            "id": 59983,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15044:53:116",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 59993,
                        "nodeType": "IfStatement",
                        "src": "15039:104:116",
                        "trueBody": {
                          "id": 59992,
                          "nodeType": "Block",
                          "src": "15099:44:116",
                          "statements": [
                            {
                              "expression": {
                                "id": 59990,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "15105:32:116",
                                "subExpression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 59985,
                                      "name": "activeSessions",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 59257,
                                      "src": "15112:14:116",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                                        "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                                      }
                                    },
                                    "id": 59987,
                                    "indexExpression": {
                                      "id": 59986,
                                      "name": "sender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 59910,
                                      "src": "15127:6:116",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "15112:22:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                                      "typeString": "struct ActiveSession storage ref[] storage ref"
                                    }
                                  },
                                  "id": 59989,
                                  "indexExpression": {
                                    "id": 59988,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 59930,
                                    "src": "15135:1:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "15112:25:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ActiveSession_$60402_storage",
                                    "typeString": "struct ActiveSession storage ref"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 59991,
                              "nodeType": "ExpressionStatement",
                              "src": "15105:32:116"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 59938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 59933,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59930,
                      "src": "14719:1:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 59934,
                          "name": "activeSessions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59257,
                          "src": "14723:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                          }
                        },
                        "id": 59936,
                        "indexExpression": {
                          "id": 59935,
                          "name": "sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59910,
                          "src": "14738:6:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14723:22:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                          "typeString": "struct ActiveSession storage ref[] storage ref"
                        }
                      },
                      "id": 59937,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14746:6:116",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "14723:29:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14719:33:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 59995,
                  "initializationExpression": {
                    "assignments": [59930],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 59930,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "14712:1:116",
                        "nodeType": "VariableDeclaration",
                        "scope": 59995,
                        "src": "14704:9:116",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 59929,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14704:7:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 59932,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 59931,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14716:1:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "14704:13:116"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 59940,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "14754:3:116",
                      "subExpression": {
                        "id": 59939,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59930,
                        "src": "14754:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 59941,
                    "nodeType": "ExpressionStatement",
                    "src": "14754:3:116"
                  },
                  "nodeType": "ForStatement",
                  "src": "14699:448:116"
                }
              ]
            },
            "documentation": {
              "id": 59908,
              "nodeType": "StructuredDocumentation",
              "src": "14066:460:116",
              "text": " @notice Removes all expired sessions from active sessions\n @dev Iterates through all active sessions, removes signers from accounts where sessions have expired,\n      and deletes the expired session entries from the activeSessions array\n @custom:security This function is called automatically by the Guard's checkTransaction function\n                  before any transaction execution to ensure expired sessions are properly cleaned up"
            },
            "functionSelector": "5e413c5a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "removeExpiredSessions",
            "nameLocation": "14537:21:116",
            "parameters": {
              "id": 59911,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59910,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "14567:6:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 59997,
                  "src": "14559:14:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59909,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14559:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14558:16:116"
            },
            "returnParameters": {
              "id": 59912,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14582:0:116"
            },
            "scope": 60380,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 60068,
            "nodeType": "FunctionDefinition",
            "src": "15153:432:116",
            "nodes": [],
            "body": {
              "id": 60067,
              "nodeType": "Block",
              "src": "15232:353:116",
              "nodes": [],
              "statements": [
                {
                  "assignments": [60007],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 60007,
                      "mutability": "mutable",
                      "name": "owner",
                      "nameLocation": "15241:5:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 60067,
                      "src": "15236:10:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 60006,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "15236:4:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 60014,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 60012,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60001,
                        "src": "15279:6:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 60009,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59999,
                            "src": "15262:7:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 60008,
                          "name": "OwnerManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53742,
                          "src": "15249:12:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_OwnerManager_$53742_$",
                            "typeString": "type(contract OwnerManager)"
                          }
                        },
                        "id": 60010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15249:21:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_OwnerManager_$53742",
                          "typeString": "contract OwnerManager"
                        }
                      },
                      "id": 60011,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15271:7:116",
                      "memberName": "isOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53690,
                      "src": "15249:29:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view external returns (bool)"
                      }
                    },
                    "id": 60013,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15249:37:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15236:50:116"
                },
                {
                  "condition": {
                    "id": 60016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "15294:6:116",
                    "subExpression": {
                      "id": 60015,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60007,
                      "src": "15295:5:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 60020,
                  "nodeType": "IfStatement",
                  "src": "15290:33:116",
                  "trueBody": {
                    "id": 60019,
                    "nodeType": "Block",
                    "src": "15302:21:116",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 60017,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15314:4:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 60005,
                        "id": 60018,
                        "nodeType": "Return",
                        "src": "15307:11:116"
                      }
                    ]
                  }
                },
                {
                  "assignments": [60022],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 60022,
                      "mutability": "mutable",
                      "name": "expired",
                      "nameLocation": "15332:7:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 60067,
                      "src": "15327:12:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 60021,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "15327:4:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 60024,
                  "initialValue": {
                    "hexValue": "74727565",
                    "id": 60023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "15342:4:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15327:19:116"
                },
                {
                  "body": {
                    "id": 60063,
                    "nodeType": "Block",
                    "src": "15412:151:116",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 60055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 60045,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 60038,
                                    "name": "activeSessions",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 59257,
                                    "src": "15421:14:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                                      "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 60040,
                                  "indexExpression": {
                                    "id": 60039,
                                    "name": "account",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 59999,
                                    "src": "15436:7:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15421:23:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                                    "typeString": "struct ActiveSession storage ref[] storage ref"
                                  }
                                },
                                "id": 60042,
                                "indexExpression": {
                                  "id": 60041,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 60026,
                                  "src": "15445:1:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "15421:26:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ActiveSession_$60402_storage",
                                  "typeString": "struct ActiveSession storage ref"
                                }
                              },
                              "id": 60043,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15448:5:116",
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 60399,
                              "src": "15421:32:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 60044,
                              "name": "_owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 60001,
                              "src": "15457:6:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "15421:42:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 60054,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 60046,
                                    "name": "activeSessions",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 59257,
                                    "src": "15467:14:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                                      "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 60048,
                                  "indexExpression": {
                                    "id": 60047,
                                    "name": "account",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 59999,
                                    "src": "15482:7:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15467:23:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                                    "typeString": "struct ActiveSession storage ref[] storage ref"
                                  }
                                },
                                "id": 60050,
                                "indexExpression": {
                                  "id": 60049,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 60026,
                                  "src": "15491:1:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "15467:26:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ActiveSession_$60402_storage",
                                  "typeString": "struct ActiveSession storage ref"
                                }
                              },
                              "id": 60051,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15494:6:116",
                              "memberName": "expiry",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 60397,
                              "src": "15467:33:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint48",
                                "typeString": "uint48"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "expression": {
                                "id": 60052,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "15504:5:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 60053,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15510:9:116",
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "15504:15:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "15467:52:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "15421:98:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 60062,
                        "nodeType": "IfStatement",
                        "src": "15417:142:116",
                        "trueBody": {
                          "id": 60061,
                          "nodeType": "Block",
                          "src": "15521:38:116",
                          "statements": [
                            {
                              "expression": {
                                "id": 60058,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 60056,
                                  "name": "expired",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 60022,
                                  "src": "15527:7:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "66616c7365",
                                  "id": 60057,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "15537:5:116",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "false"
                                },
                                "src": "15527:15:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 60059,
                              "nodeType": "ExpressionStatement",
                              "src": "15527:15:116"
                            },
                            {
                              "id": 60060,
                              "nodeType": "Break",
                              "src": "15548:5:116"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 60034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 60029,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60026,
                      "src": "15371:1:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 60030,
                          "name": "activeSessions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59257,
                          "src": "15375:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct ActiveSession storage ref[] storage ref)"
                          }
                        },
                        "id": 60032,
                        "indexExpression": {
                          "id": 60031,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 59999,
                          "src": "15390:7:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "15375:23:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ActiveSession_$60402_storage_$dyn_storage",
                          "typeString": "struct ActiveSession storage ref[] storage ref"
                        }
                      },
                      "id": 60033,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15399:6:116",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "15375:30:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15371:34:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 60064,
                  "initializationExpression": {
                    "assignments": [60026],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 60026,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "15364:1:116",
                        "nodeType": "VariableDeclaration",
                        "scope": 60064,
                        "src": "15356:9:116",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 60025,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15356:7:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 60028,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 60027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15368:1:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "15356:13:116"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 60036,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "15407:3:116",
                      "subExpression": {
                        "id": 60035,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60026,
                        "src": "15407:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 60037,
                    "nodeType": "ExpressionStatement",
                    "src": "15407:3:116"
                  },
                  "nodeType": "ForStatement",
                  "src": "15351:212:116"
                },
                {
                  "expression": {
                    "id": 60065,
                    "name": "expired",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 60022,
                    "src": "15574:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 60005,
                  "id": 60066,
                  "nodeType": "Return",
                  "src": "15567:14:116"
                }
              ]
            },
            "functionSelector": "6290319a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isExpired",
            "nameLocation": "15162:9:116",
            "parameters": {
              "id": 60002,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 59999,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "15180:7:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60068,
                  "src": "15172:15:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59998,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15172:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60001,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "15197:6:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60068,
                  "src": "15189:14:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 60000,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15189:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15171:33:116"
            },
            "returnParameters": {
              "id": 60005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60004,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60068,
                  "src": "15226:4:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 60003,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15226:4:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15225:6:116"
            },
            "scope": 60380,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 60101,
            "nodeType": "FunctionDefinition",
            "src": "15904:369:116",
            "nodes": [],
            "body": {
              "id": 60100,
              "nodeType": "Block",
              "src": "16233:40:116",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 60097,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60092,
                        "src": "16259:9:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 60096,
                      "name": "removeExpiredSessions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 59997,
                      "src": "16237:21:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 60098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16237:32:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 60099,
                  "nodeType": "ExpressionStatement",
                  "src": "16237:32:116"
                }
              ]
            },
            "baseFunctions": [52707],
            "documentation": {
              "id": 60069,
              "nodeType": "StructuredDocumentation",
              "src": "15702:200:116",
              "text": " @notice Hook that is called before any transaction execution\n @dev Implements the Guard interface to automatically clean up expired sessions\n      before any transaction is executed"
            },
            "functionSelector": "75f0bb52",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkTransaction",
            "nameLocation": "15913:16:116",
            "overrides": {
              "id": 60094,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16224:8:116"
            },
            "parameters": {
              "id": 60093,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60071,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60101,
                  "src": "15933:7:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 60070,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15933:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60073,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60101,
                  "src": "15951:7:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 60072,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15951:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60075,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60101,
                  "src": "15972:12:116",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 60074,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15972:5:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60078,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60101,
                  "src": "15997:14:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Operation_$53748",
                    "typeString": "enum Enum.Operation"
                  },
                  "typeName": {
                    "id": 60077,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 60076,
                      "name": "Enum.Operation",
                      "nameLocations": ["15997:4:116", "16002:9:116"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 53748,
                      "src": "15997:14:116"
                    },
                    "referencedDeclaration": 53748,
                    "src": "15997:14:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Operation_$53748",
                      "typeString": "enum Enum.Operation"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60080,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60101,
                  "src": "16029:7:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 60079,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16029:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60082,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60101,
                  "src": "16054:7:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 60081,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16054:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60084,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60101,
                  "src": "16077:7:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 60083,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16077:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60086,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60101,
                  "src": "16101:7:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 60085,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16101:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60088,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60101,
                  "src": "16125:15:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 60087,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16125:15:116",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60090,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60101,
                  "src": "16163:12:116",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 60089,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16163:5:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60092,
                  "mutability": "mutable",
                  "name": "msgSender",
                  "nameLocation": "16202:9:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60101,
                  "src": "16194:17:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 60091,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16194:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15929:285:116"
            },
            "returnParameters": {
              "id": 60095,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16233:0:116"
            },
            "scope": 60380,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 60111,
            "nodeType": "FunctionDefinition",
            "src": "16433:87:116",
            "nodes": [],
            "body": {
              "id": 60110,
              "nodeType": "Block",
              "src": "16518:2:116",
              "nodes": [],
              "statements": []
            },
            "baseFunctions": [52714],
            "documentation": {
              "id": 60102,
              "nodeType": "StructuredDocumentation",
              "src": "16276:155:116",
              "text": " @notice Hook that is called after a transaction has been executed\n @dev Required by the Guard interface but not used in this implementation"
            },
            "functionSelector": "93271368",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkAfterExecution",
            "nameLocation": "16442:19:116",
            "overrides": {
              "id": 60108,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16509:8:116"
            },
            "parameters": {
              "id": 60107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60104,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60111,
                  "src": "16462:7:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 60103,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "16462:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60106,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60111,
                  "src": "16482:4:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 60105,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16482:4:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16461:38:116"
            },
            "returnParameters": {
              "id": 60109,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16518:0:116"
            },
            "scope": 60380,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 60137,
            "nodeType": "FunctionDefinition",
            "src": "16811:262:116",
            "nodes": [],
            "body": {
              "id": 60136,
              "nodeType": "Block",
              "src": "16942:131:116",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 60134,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 60127,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 60122,
                        "name": "interfaceId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60114,
                        "src": "16956:11:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "arguments": [
                            {
                              "id": 60124,
                              "name": "Guard",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52715,
                              "src": "16976:5:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Guard_$52715_$",
                                "typeString": "type(contract Guard)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_contract$_Guard_$52715_$",
                                "typeString": "type(contract Guard)"
                              }
                            ],
                            "id": 60123,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -27,
                            "src": "16971:4:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 60125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16971:11:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_contract$_Guard_$52715",
                            "typeString": "type(contract Guard)"
                          }
                        },
                        "id": 60126,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "16983:11:116",
                        "memberName": "interfaceId",
                        "nodeType": "MemberAccess",
                        "src": "16971:23:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "16956:38:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 60133,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 60128,
                        "name": "interfaceId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60114,
                        "src": "17015:11:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "arguments": [
                            {
                              "id": 60130,
                              "name": "IERC165",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54479,
                              "src": "17035:7:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC165_$54479_$",
                                "typeString": "type(contract IERC165)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_contract$_IERC165_$54479_$",
                                "typeString": "type(contract IERC165)"
                              }
                            ],
                            "id": 60129,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -27,
                            "src": "17030:4:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 60131,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17030:13:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_contract$_IERC165_$54479",
                            "typeString": "type(contract IERC165)"
                          }
                        },
                        "id": 60132,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "17044:11:116",
                        "memberName": "interfaceId",
                        "nodeType": "MemberAccess",
                        "src": "17030:25:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "17015:40:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "16956:99:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 60121,
                  "id": 60135,
                  "nodeType": "Return",
                  "src": "16946:109:116"
                }
              ]
            },
            "baseFunctions": [52740, 54391],
            "documentation": {
              "id": 60112,
              "nodeType": "StructuredDocumentation",
              "src": "16523:286:116",
              "text": " @notice Determines if the contract implements a specific interface\n @dev Overrides both BaseGuard and TokenCallbackHandler implementations\n @param interfaceId The interface identifier to check\n @return True if the contract implements the interface, false otherwise"
            },
            "functionSelector": "01ffc9a7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nameLocation": "16820:17:116",
            "overrides": {
              "id": 60118,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 60116,
                  "name": "BaseGuard",
                  "nameLocations": ["16894:9:116"],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 52741,
                  "src": "16894:9:116"
                },
                {
                  "id": 60117,
                  "name": "TokenCallbackHandler",
                  "nameLocations": ["16905:20:116"],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54392,
                  "src": "16905:20:116"
                }
              ],
              "src": "16885:41:116"
            },
            "parameters": {
              "id": 60115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60114,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nameLocation": "16848:11:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60137,
                  "src": "16841:18:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 60113,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "16841:6:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16837:25:116"
            },
            "returnParameters": {
              "id": 60121,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60120,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60137,
                  "src": "16936:4:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 60119,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16936:4:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16935:6:116"
            },
            "scope": 60380,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "id": 60154,
            "nodeType": "FunctionDefinition",
            "src": "17463:222:116",
            "nodes": [],
            "body": {
              "id": 60153,
              "nodeType": "Block",
              "src": "17539:146:116",
              "nodes": [],
              "statements": [
                {
                  "assignments": [60146],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 60146,
                      "mutability": "mutable",
                      "name": "size",
                      "nameLocation": "17551:4:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 60153,
                      "src": "17543:12:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 60145,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17543:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 60147,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17543:12:116"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "17618:45:116",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "17623:36:116",
                        "value": {
                          "arguments": [
                            {
                              "name": "contractAddress",
                              "nodeType": "YulIdentifier",
                              "src": "17643:15:116"
                            }
                          ],
                          "functionName": {
                            "name": "extcodesize",
                            "nodeType": "YulIdentifier",
                            "src": "17631:11:116"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17631:28:116"
                        },
                        "variableNames": [
                          {
                            "name": "size",
                            "nodeType": "YulIdentifier",
                            "src": "17623:4:116"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 60140,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "17643:15:116",
                      "valueSize": 1
                    },
                    {
                      "declaration": 60146,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "17623:4:116",
                      "valueSize": 1
                    }
                  ],
                  "id": 60148,
                  "nodeType": "InlineAssembly",
                  "src": "17609:54:116"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 60151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 60149,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60146,
                      "src": "17673:4:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 60150,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17680:1:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "17673:8:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 60144,
                  "id": 60152,
                  "nodeType": "Return",
                  "src": "17666:15:116"
                }
              ]
            },
            "documentation": {
              "id": 60138,
              "nodeType": "StructuredDocumentation",
              "src": "17192:269:116",
              "text": " @notice Checks if a contract exists at the given address\n @dev Uses assembly to check the code size at the address\n @param contractAddress The address to check for contract code\n @return True if contract code exists at the address, false otherwise"
            },
            "functionSelector": "7709bc78",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "contractExists",
            "nameLocation": "17472:14:116",
            "parameters": {
              "id": 60141,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60140,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nameLocation": "17495:15:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60154,
                  "src": "17487:23:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 60139,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17487:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17486:25:116"
            },
            "returnParameters": {
              "id": 60144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60143,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60154,
                  "src": "17533:4:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 60142,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17533:4:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17532:6:116"
            },
            "scope": 60380,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 60176,
            "nodeType": "FunctionDefinition",
            "src": "17991:235:116",
            "nodes": [],
            "body": {
              "id": 60175,
              "nodeType": "Block",
              "src": "18085:141:116",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 60170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 60165,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 60157,
                            "src": "18097:4:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 60166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "18102:6:116",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "18097:11:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 60169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 60167,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 60159,
                            "src": "18112:5:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 60168,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18120:2:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "18112:10:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "18097:25:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "72656164427974657333323a20696e76616c69642064617461206c656e677468",
                        "id": 60171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18124:34:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d77473f1f8c77744ad88066899f3a3243dfad6c5ccce0c69bfe650c8de024e95",
                          "typeString": "literal_string \"readBytes32: invalid data length\""
                        },
                        "value": "readBytes32: invalid data length"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        { "typeIdentifier": "t_bool", "typeString": "bool" },
                        {
                          "typeIdentifier": "t_stringliteral_d77473f1f8c77744ad88066899f3a3243dfad6c5ccce0c69bfe650c8de024e95",
                          "typeString": "literal_string \"readBytes32: invalid data length\""
                        }
                      ],
                      "id": 60164,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [-18, -18],
                      "referencedDeclaration": -18,
                      "src": "18089:7:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 60172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18089:70:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 60173,
                  "nodeType": "ExpressionStatement",
                  "src": "18089:70:116"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "18172:51:116",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "18177:42:116",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "data",
                                  "nodeType": "YulIdentifier",
                                  "src": "18197:4:116"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "18207:2:116",
                                      "type": "",
                                      "value": "32"
                                    },
                                    {
                                      "name": "index",
                                      "nodeType": "YulIdentifier",
                                      "src": "18211:5:116"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "18203:3:116"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "18203:14:116"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "18193:3:116"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "18193:25:116"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "18187:5:116"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "18187:32:116"
                        },
                        "variableNames": [
                          {
                            "name": "result",
                            "nodeType": "YulIdentifier",
                            "src": "18177:6:116"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 60157,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "18197:4:116",
                      "valueSize": 1
                    },
                    {
                      "declaration": 60159,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "18211:5:116",
                      "valueSize": 1
                    },
                    {
                      "declaration": 60162,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "18177:6:116",
                      "valueSize": 1
                    }
                  ],
                  "id": 60174,
                  "nodeType": "InlineAssembly",
                  "src": "18163:60:116"
                }
              ]
            },
            "documentation": {
              "id": 60155,
              "nodeType": "StructuredDocumentation",
              "src": "17688:301:116",
              "text": " @notice Extracts a bytes32 value from a bytes array at the specified index\n @dev Uses assembly for efficient memory access\n @param data The bytes array to read from\n @param index The starting position in the bytes array\n @return result The bytes32 value at the specified index"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "readBytes32",
            "nameLocation": "18000:11:116",
            "parameters": {
              "id": 60160,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60157,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "18025:4:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60176,
                  "src": "18012:17:116",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 60156,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "18012:5:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60159,
                  "mutability": "mutable",
                  "name": "index",
                  "nameLocation": "18039:5:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60176,
                  "src": "18031:13:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 60158,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18031:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18011:34:116"
            },
            "returnParameters": {
              "id": 60163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60162,
                  "mutability": "mutable",
                  "name": "result",
                  "nameLocation": "18077:6:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60176,
                  "src": "18069:14:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 60161,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18069:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18068:16:116"
            },
            "scope": 60380,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 60250,
            "nodeType": "FunctionDefinition",
            "src": "18717:1418:116",
            "nodes": [],
            "body": {
              "id": 60249,
              "nodeType": "Block",
              "src": "18830:1305:116",
              "nodes": [],
              "statements": [
                {
                  "assignments": [60189],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 60189,
                      "mutability": "mutable",
                      "name": "signer",
                      "nameLocation": "18900:6:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 60249,
                      "src": "18892:14:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 60188,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "18892:7:116",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 60194,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 60191,
                        "name": "_hash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60181,
                        "src": "18933:5:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 60192,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60183,
                        "src": "18940:10:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 60190,
                      "name": "_recoverEthSignedSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60268,
                      "src": "18909:23:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 60193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18909:42:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18892:59:116"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 60200,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 60195,
                      "name": "signer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60189,
                      "src": "19034:6:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 60198,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19052:1:116",
                          "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": 60197,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "19044:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 60196,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19044:7:116",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 60199,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19044:10:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19034:20:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 60204,
                  "nodeType": "IfStatement",
                  "src": "19030:48:116",
                  "trueBody": {
                    "id": 60203,
                    "nodeType": "Block",
                    "src": "19056:22:116",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 60201,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19068:5:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 60187,
                        "id": 60202,
                        "nodeType": "Return",
                        "src": "19061:12:116"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 60207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 60205,
                      "name": "signer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60189,
                      "src": "19153:6:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 60206,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60179,
                      "src": "19163:7:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19153:17:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 60211,
                  "nodeType": "IfStatement",
                  "src": "19149:44:116",
                  "trueBody": {
                    "id": 60210,
                    "nodeType": "Block",
                    "src": "19172:21:116",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 60208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19184:4:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 60187,
                        "id": 60209,
                        "nodeType": "Return",
                        "src": "19177:11:116"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 60215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "19272:24:116",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 60213,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60179,
                          "src": "19288:7:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 60212,
                        "name": "contractExists",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60154,
                        "src": "19273:14:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 60214,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19273:23:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 60219,
                  "nodeType": "IfStatement",
                  "src": "19268:52:116",
                  "trueBody": {
                    "id": 60218,
                    "nodeType": "Block",
                    "src": "19298:22:116",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 60216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19310:5:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 60187,
                        "id": 60217,
                        "nodeType": "Return",
                        "src": "19303:12:116"
                      }
                    ]
                  }
                },
                {
                  "clauses": [
                    {
                      "block": {
                        "id": 60237,
                        "nodeType": "Block",
                        "src": "19560:302:116",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 60232,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 60230,
                                "name": "magicValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 60228,
                                "src": "19660:10:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30783136323662613765",
                                "id": 60231,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "19674:10:116",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_371636862_by_1",
                                  "typeString": "int_const 371636862"
                                },
                                "value": "0x1626ba7e"
                              },
                              "src": "19660:24:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 60236,
                            "nodeType": "IfStatement",
                            "src": "19656:120:116",
                            "trueBody": {
                              "id": 60235,
                              "nodeType": "Block",
                              "src": "19686:90:116",
                              "statements": [
                                {
                                  "expression": {
                                    "hexValue": "74727565",
                                    "id": 60233,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "19699:4:116",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  "functionReturnParameters": 60187,
                                  "id": 60234,
                                  "nodeType": "Return",
                                  "src": "19692:11:116"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 60238,
                      "nodeType": "TryCatchClause",
                      "parameters": {
                        "id": 60229,
                        "nodeType": "ParameterList",
                        "parameters": [
                          {
                            "constant": false,
                            "id": 60228,
                            "mutability": "mutable",
                            "name": "magicValue",
                            "nameLocation": "19548:10:116",
                            "nodeType": "VariableDeclaration",
                            "scope": 60238,
                            "src": "19541:17:116",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "typeName": {
                              "id": 60227,
                              "name": "bytes4",
                              "nodeType": "ElementaryTypeName",
                              "src": "19541:6:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "src": "19540:19:116"
                      },
                      "src": "19532:330:116"
                    },
                    {
                      "block": {
                        "id": 60239,
                        "nodeType": "Block",
                        "src": "19869:124:116",
                        "statements": []
                      },
                      "errorName": "",
                      "id": 60240,
                      "nodeType": "TryCatchClause",
                      "src": "19863:130:116"
                    }
                  ],
                  "externalCall": {
                    "arguments": [
                      {
                        "id": 60224,
                        "name": "_hash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60181,
                        "src": "19513:5:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 60225,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60183,
                        "src": "19520:10:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 60221,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 60179,
                            "src": "19487:7:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 60220,
                          "name": "IERC1271",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 41922,
                          "src": "19478:8:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1271_$41922_$",
                            "typeString": "type(contract IERC1271)"
                          }
                        },
                        "id": 60222,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19478:17:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1271_$41922",
                          "typeString": "contract IERC1271"
                        }
                      },
                      "id": 60223,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "19496:16:116",
                      "memberName": "isValidSignature",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 41921,
                      "src": "19478:34:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                        "typeString": "function (bytes32,bytes memory) view external returns (bytes4)"
                      }
                    },
                    "id": 60226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19478:53:116",
                    "tryCall": true,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "id": 60241,
                  "nodeType": "TryStatement",
                  "src": "19474:519:116"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 60246,
                        "name": "signer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60189,
                        "src": "20124:6:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 60243,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 60179,
                            "src": "20107:7:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 60242,
                          "name": "OwnerManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53742,
                          "src": "20094:12:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_OwnerManager_$53742_$",
                            "typeString": "type(contract OwnerManager)"
                          }
                        },
                        "id": 60244,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20094:21:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_OwnerManager_$53742",
                          "typeString": "contract OwnerManager"
                        }
                      },
                      "id": 60245,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "20116:7:116",
                      "memberName": "isOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53690,
                      "src": "20094:29:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view external returns (bool)"
                      }
                    },
                    "id": 60247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20094:37:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 60187,
                  "id": 60248,
                  "nodeType": "Return",
                  "src": "20087:44:116"
                }
              ]
            },
            "documentation": {
              "id": 60177,
              "nodeType": "StructuredDocumentation",
              "src": "18229:486:116",
              "text": " @notice Determines if a signature is valid for an account, either directly or through ERC1271 validation\n @dev Checks multiple validation paths: direct signer match, ERC1271 contract validation, or ownership via OwnerManager\n @param account The account address to check ownership against\n @param _hash The message hash that was signed\n @param _signature The signature bytes to validate\n @return True if the signature is valid for the account, false otherwise"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isOwnerSignature",
            "nameLocation": "18726:17:116",
            "parameters": {
              "id": 60184,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60179,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "18752:7:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60250,
                  "src": "18744:15:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 60178,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18744:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60181,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nameLocation": "18769:5:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60250,
                  "src": "18761:13:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 60180,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18761:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60183,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nameLocation": "18789:10:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60250,
                  "src": "18776:23:116",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 60182,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "18776:5:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18743:57:116"
            },
            "returnParameters": {
              "id": 60187,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60186,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 60250,
                  "src": "18824:4:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 60185,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18824:4:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18823:6:116"
            },
            "scope": 60380,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 60268,
            "nodeType": "FunctionDefinition",
            "src": "20441:183:116",
            "nodes": [],
            "body": {
              "id": 60267,
              "nodeType": "Block",
              "src": "20553:71:116",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 60262,
                            "name": "_hash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 60253,
                            "src": "20601:5:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 60261,
                          "name": "toEthSignedMessageHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60775,
                          "src": "20578:22:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32) pure returns (bytes32)"
                          }
                        },
                        "id": 60263,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20578:29:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 60264,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60255,
                        "src": "20609:10:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 60260,
                      "name": "recoverSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60356,
                      "src": "20564:13:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 60265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20564:56:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 60259,
                  "id": 60266,
                  "nodeType": "Return",
                  "src": "20557:63:116"
                }
              ]
            },
            "documentation": {
              "id": 60251,
              "nodeType": "StructuredDocumentation",
              "src": "20138:301:116",
              "text": " @notice Recovers the signer of an Ethereum signed message hash\n @dev Converts the hash to an Ethereum signed message hash before recovery\n @param _hash The original hash that was signed\n @param _signature The signature bytes\n @return signer The address that signed the message"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_recoverEthSignedSigner",
            "nameLocation": "20450:23:116",
            "parameters": {
              "id": 60256,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60253,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nameLocation": "20482:5:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60268,
                  "src": "20474:13:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 60252,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "20474:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60255,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nameLocation": "20502:10:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60268,
                  "src": "20489:23:116",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 60254,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20489:5:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20473:40:116"
            },
            "returnParameters": {
              "id": 60259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60258,
                  "mutability": "mutable",
                  "name": "signer",
                  "nameLocation": "20545:6:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60268,
                  "src": "20537:14:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 60257,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20537:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20536:16:116"
            },
            "scope": 60380,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 60356,
            "nodeType": "FunctionDefinition",
            "src": "20922:1809:116",
            "nodes": [],
            "body": {
              "id": 60355,
              "nodeType": "Block",
              "src": "21024:1707:116",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 60282,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 60279,
                            "name": "_signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 60273,
                            "src": "21036:10:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 60280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "21047:6:116",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "21036:17:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "3635",
                          "id": 60281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "21057:2:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_65_by_1",
                            "typeString": "int_const 65"
                          },
                          "value": "65"
                        },
                        "src": "21036:23:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265206c656e677468",
                        "id": 60283,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21061:60:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1d138784aeab358a2437404941034f0b4e0b7f39d8d8b5a6ee0b61f2b53e6759",
                          "typeString": "literal_string \"SignatureValidator#recoverSigner: invalid signature length\""
                        },
                        "value": "SignatureValidator#recoverSigner: invalid signature length"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        { "typeIdentifier": "t_bool", "typeString": "bool" },
                        {
                          "typeIdentifier": "t_stringliteral_1d138784aeab358a2437404941034f0b4e0b7f39d8d8b5a6ee0b61f2b53e6759",
                          "typeString": "literal_string \"SignatureValidator#recoverSigner: invalid signature length\""
                        }
                      ],
                      "id": 60278,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [-18, -18],
                      "referencedDeclaration": -18,
                      "src": "21028:7:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 60284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21028:94:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 60285,
                  "nodeType": "ExpressionStatement",
                  "src": "21028:94:116"
                },
                {
                  "assignments": [60287],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 60287,
                      "mutability": "mutable",
                      "name": "v",
                      "nameLocation": "21176:1:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 60355,
                      "src": "21170:7:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 60286,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "21170:5:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 60294,
                  "initialValue": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 60290,
                          "name": "_signature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60273,
                          "src": "21186:10:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 60292,
                        "indexExpression": {
                          "hexValue": "3634",
                          "id": 60291,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "21197:2:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_64_by_1",
                            "typeString": "int_const 64"
                          },
                          "value": "64"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "21186:14:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes1",
                          "typeString": "bytes1"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        { "typeIdentifier": "t_bytes1", "typeString": "bytes1" }
                      ],
                      "id": 60289,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "21180:5:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint8_$",
                        "typeString": "type(uint8)"
                      },
                      "typeName": {
                        "id": 60288,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "21180:5:116",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 60293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21180:21:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21170:31:116"
                },
                {
                  "assignments": [60296],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 60296,
                      "mutability": "mutable",
                      "name": "r",
                      "nameLocation": "21213:1:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 60355,
                      "src": "21205:9:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 60295,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "21205:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 60301,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 60298,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60273,
                        "src": "21229:10:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 60299,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21241:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 60297,
                      "name": "readBytes32",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60176,
                      "src": "21217:11:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                      }
                    },
                    "id": 60300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21217:26:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21205:38:116"
                },
                {
                  "assignments": [60303],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 60303,
                      "mutability": "mutable",
                      "name": "s",
                      "nameLocation": "21255:1:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 60355,
                      "src": "21247:9:116",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 60302,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "21247:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 60308,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 60305,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60273,
                        "src": "21271:10:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "3332",
                        "id": 60306,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21283:2:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        }
                      ],
                      "id": 60304,
                      "name": "readBytes32",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60176,
                      "src": "21259:11:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                      }
                    },
                    "id": 60307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21259:27:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21247:39:116"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 60314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 60311,
                          "name": "s",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60303,
                          "src": "22259:1:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 60310,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "22251:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 60309,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "22251:7:116",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 60312,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22251:10:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130",
                      "id": 60313,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22264:66:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1",
                        "typeString": "int_const 5789...(69 digits omitted)...7168"
                      },
                      "value": "0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0"
                    },
                    "src": "22251:79:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 60320,
                  "nodeType": "IfStatement",
                  "src": "22247:166:116",
                  "trueBody": {
                    "id": 60319,
                    "nodeType": "Block",
                    "src": "22332:81:116",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202773272076616c7565",
                              "id": 60316,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22344:63:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_085d61997e31ee1942f7a1c6d45aa6a2c0d3fc2187871e84ccb40f9e139405f9",
                                "typeString": "literal_string \"SignatureValidator#recoverSigner: invalid signature 's' value\""
                              },
                              "value": "SignatureValidator#recoverSigner: invalid signature 's' value"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_085d61997e31ee1942f7a1c6d45aa6a2c0d3fc2187871e84ccb40f9e139405f9",
                                "typeString": "literal_string \"SignatureValidator#recoverSigner: invalid signature 's' value\""
                              }
                            ],
                            "id": 60315,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [-19, -19],
                            "referencedDeclaration": -19,
                            "src": "22337:6:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 60317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22337:71:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 60318,
                        "nodeType": "ExpressionStatement",
                        "src": "22337:71:116"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 60327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 60323,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 60321,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60287,
                        "src": "22421:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "hexValue": "3237",
                        "id": 60322,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22426:2:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_27_by_1",
                          "typeString": "int_const 27"
                        },
                        "value": "27"
                      },
                      "src": "22421:7:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 60326,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 60324,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60287,
                        "src": "22432:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "hexValue": "3238",
                        "id": 60325,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22437:2:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_28_by_1",
                          "typeString": "int_const 28"
                        },
                        "value": "28"
                      },
                      "src": "22432:7:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "22421:18:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 60333,
                  "nodeType": "IfStatement",
                  "src": "22417:105:116",
                  "trueBody": {
                    "id": 60332,
                    "nodeType": "Block",
                    "src": "22441:81:116",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202776272076616c7565",
                              "id": 60329,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22453:63:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7d29c56b0c689130c2b0b34bce1ac41566e47bd5aff37a4a5d601005ec2b900d",
                                "typeString": "literal_string \"SignatureValidator#recoverSigner: invalid signature 'v' value\""
                              },
                              "value": "SignatureValidator#recoverSigner: invalid signature 'v' value"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_7d29c56b0c689130c2b0b34bce1ac41566e47bd5aff37a4a5d601005ec2b900d",
                                "typeString": "literal_string \"SignatureValidator#recoverSigner: invalid signature 'v' value\""
                              }
                            ],
                            "id": 60328,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [-19, -19],
                            "referencedDeclaration": -19,
                            "src": "22446:6:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 60330,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22446:71:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 60331,
                        "nodeType": "ExpressionStatement",
                        "src": "22446:71:116"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 60341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 60334,
                      "name": "signer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60276,
                      "src": "22552:6:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 60336,
                          "name": "_hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60271,
                          "src": "22571:5:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 60337,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60287,
                          "src": "22578:1:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 60338,
                          "name": "r",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60296,
                          "src": "22581:1:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 60339,
                          "name": "s",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60303,
                          "src": "22584:1:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 60335,
                        "name": "ecrecover",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -6,
                        "src": "22561:9:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                        }
                      },
                      "id": 60340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22561:25:116",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "22552:34:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 60342,
                  "nodeType": "ExpressionStatement",
                  "src": "22552:34:116"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 60349,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 60344,
                          "name": "signer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60276,
                          "src": "22634:6:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "307830",
                              "id": 60347,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22652:3:116",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0x0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 60346,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "22644:7:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 60345,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "22644:7:116",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 60348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22644:12:116",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "22634:22:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5369676e617475726556616c696461746f72237265636f7665725369676e65723a20494e56414c49445f5349474e4552",
                        "id": 60350,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22658:50:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8c787dd1220435c3a6ddfa31cea706223069335b8a1a69e25d9365677f72b5a4",
                          "typeString": "literal_string \"SignatureValidator#recoverSigner: INVALID_SIGNER\""
                        },
                        "value": "SignatureValidator#recoverSigner: INVALID_SIGNER"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        { "typeIdentifier": "t_bool", "typeString": "bool" },
                        {
                          "typeIdentifier": "t_stringliteral_8c787dd1220435c3a6ddfa31cea706223069335b8a1a69e25d9365677f72b5a4",
                          "typeString": "literal_string \"SignatureValidator#recoverSigner: INVALID_SIGNER\""
                        }
                      ],
                      "id": 60343,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [-18, -18],
                      "referencedDeclaration": -18,
                      "src": "22626:7:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 60351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22626:83:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 60352,
                  "nodeType": "ExpressionStatement",
                  "src": "22626:83:116"
                },
                {
                  "expression": {
                    "id": 60353,
                    "name": "signer",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 60276,
                    "src": "22721:6:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 60277,
                  "id": 60354,
                  "nodeType": "Return",
                  "src": "22714:13:116"
                }
              ]
            },
            "documentation": {
              "id": 60269,
              "nodeType": "StructuredDocumentation",
              "src": "20627:293:116",
              "text": " @notice Recover the signer of hash, assuming it's an EOA account\n @dev Only for EthSign signatures\n @param _hash Hash of message that was signed\n @param _signature Signature encoded as (bytes32 r, bytes32 s, uint8 v)\n @return signer The address that signed the message"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "recoverSigner",
            "nameLocation": "20931:13:116",
            "parameters": {
              "id": 60274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60271,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nameLocation": "20953:5:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60356,
                  "src": "20945:13:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 60270,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "20945:7:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 60273,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nameLocation": "20973:10:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60356,
                  "src": "20960:23:116",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 60272,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20960:5:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20944:40:116"
            },
            "returnParameters": {
              "id": 60277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60276,
                  "mutability": "mutable",
                  "name": "signer",
                  "nameLocation": "21016:6:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60356,
                  "src": "21008:14:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 60275,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21008:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21007:16:116"
            },
            "scope": 60380,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 60379,
            "nodeType": "FunctionDefinition",
            "src": "22963:176:116",
            "nodes": [],
            "body": {
              "id": 60378,
              "nodeType": "Block",
              "src": "23018:121:116",
              "nodes": [],
              "statements": [
                {
                  "assignments": [60363],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 60363,
                      "mutability": "mutable",
                      "name": "data",
                      "nameLocation": "23035:4:116",
                      "nodeType": "VariableDeclaration",
                      "scope": 60378,
                      "src": "23022:17:116",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 60362,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "23022:5:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 60365,
                  "initialValue": {
                    "hexValue": "",
                    "id": 60364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "23042:2:116",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                      "typeString": "literal_string \"\""
                    },
                    "value": ""
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23022:22:116"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 60370,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60359,
                        "src": "23097:7:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 60371,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23106:1:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "id": 60372,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60363,
                        "src": "23109:4:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 60373,
                            "name": "Enum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53749,
                            "src": "23115:4:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Enum_$53749_$",
                              "typeString": "type(contract Enum)"
                            }
                          },
                          "id": 60374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "23120:9:116",
                          "memberName": "Operation",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 53748,
                          "src": "23115:14:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Operation_$53748_$",
                            "typeString": "type(enum Enum.Operation)"
                          }
                        },
                        "id": 60375,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "23130:4:116",
                        "memberName": "Call",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 53746,
                        "src": "23115:19:116",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Operation_$53748",
                          "typeString": "enum Enum.Operation"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_enum$_Operation_$53748",
                          "typeString": "enum Enum.Operation"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 60367,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 60359,
                            "src": "23062:7:116",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 60366,
                          "name": "ModuleManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53229,
                          "src": "23048:13:116",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ModuleManager_$53229_$",
                            "typeString": "type(contract ModuleManager)"
                          }
                        },
                        "id": 60368,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23048:22:116",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ModuleManager_$53229",
                          "typeString": "contract ModuleManager"
                        }
                      },
                      "id": 60369,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23071:25:116",
                      "memberName": "execTransactionFromModule",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 53066,
                      "src": "23048:48:116",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$53748_$returns$_t_bool_$",
                        "typeString": "function (address,uint256,bytes memory,enum Enum.Operation) external returns (bool)"
                      }
                    },
                    "id": 60376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23048:87:116",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 60377,
                  "nodeType": "ExpressionStatement",
                  "src": "23048:87:116"
                }
              ]
            },
            "documentation": {
              "id": 60357,
              "nodeType": "StructuredDocumentation",
              "src": "22734:227:116",
              "text": " @notice Increments the Safe's internal nonce by executing a no-op transaction\n @dev This is needed to sync the Safe's nonce with the ERC-4337 entrypoint's nonce\n @param account The address of the Safe account"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_incrementSafeNonce",
            "nameLocation": "22972:19:116",
            "parameters": {
              "id": 60360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 60359,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "23000:7:116",
                  "nodeType": "VariableDeclaration",
                  "scope": 60379,
                  "src": "22992:15:116",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 60358,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22992:7:116",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22991:17:116"
            },
            "returnParameters": {
              "id": 60361,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23018:0:116"
            },
            "scope": 60380,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 59181,
              "name": "CompatibilityFallbackHandler",
              "nameLocations": ["1813:28:116"],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 54267,
              "src": "1813:28:116"
            },
            "id": 59182,
            "nodeType": "InheritanceSpecifier",
            "src": "1813:28:116"
          },
          {
            "baseName": {
              "id": 59183,
              "name": "BaseGuard",
              "nameLocations": ["1844:9:116"],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 52741,
              "src": "1844:9:116"
            },
            "id": 59184,
            "nodeType": "InheritanceSpecifier",
            "src": "1844:9:116"
          },
          {
            "baseName": {
              "id": 59185,
              "name": "Initializable",
              "nameLocations": ["1856:13:116"],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 40372,
              "src": "1856:13:116"
            },
            "id": 59186,
            "nodeType": "InheritanceSpecifier",
            "src": "1856:13:116"
          },
          {
            "baseName": {
              "id": 59187,
              "name": "ReentrancyGuardUpgradeable",
              "nameLocations": ["1872:26:116"],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 41637,
              "src": "1872:26:116"
            },
            "id": 59188,
            "nodeType": "InheritanceSpecifier",
            "src": "1872:26:116"
          },
          {
            "baseName": {
              "id": 59189,
              "name": "OwnableUpgradeable",
              "nameLocations": ["1901:18:116"],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 40118,
              "src": "1901:18:116"
            },
            "id": 59190,
            "nodeType": "InheritanceSpecifier",
            "src": "1901:18:116"
          },
          {
            "baseName": {
              "id": 59191,
              "name": "UUPSUpgradeable",
              "nameLocations": ["1922:15:116"],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 40554,
              "src": "1922:15:116"
            },
            "id": 59192,
            "nodeType": "InheritanceSpecifier",
            "src": "1922:15:116"
          }
        ],
        "canonicalName": "SessionManagerModule",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          60380, 40554, 41953, 40118, 41332, 41637, 40372, 52741, 52715, 54267,
          54498, 54485, 54392, 54479, 54447, 54467, 54429
        ],
        "name": "SessionManagerModule",
        "nameLocation": "1788:20:116",
        "scope": 60381,
        "usedErrors": [
          39954, 39959, 40135, 40138, 40399, 40404, 41539, 42163, 42176, 43438,
          43441, 59156, 59158, 59160, 59162, 59164, 59166, 59168, 59170, 59172,
          59174, 59176, 59178, 59180
        ],
        "usedEvents": [39965, 40143, 42142, 59263, 59271]
      }
    ],
    "license": "MIT"
  },
  "id": 116
}
