{
  "contractName": "TransactionLimit",
  "abi": [
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKey",
          "type": "address"
        }
      ],
      "name": "addAuthKey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_msgHash",
          "type": "bytes32"
        },
        {
          "name": "_signatures",
          "type": "bytes"
        }
      ],
      "name": "isValidSignature",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKeys",
          "type": "address[]"
        }
      ],
      "name": "removeMultipleAuthKeys",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_msgHash",
          "type": "bytes32"
        },
        {
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "_isValidAuthKeySignature",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_txDataMessageHash",
          "type": "bytes32"
        },
        {
          "name": "_transactionDataSignature",
          "type": "bytes"
        },
        {
          "name": "_loginKeyAuthorizationSignature",
          "type": "bytes"
        }
      ],
      "name": "validateLoginKeyMetaTxSigs",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "authKeys",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_oldAuthKeys",
          "type": "address[]"
        },
        {
          "name": "_newAuthKeys",
          "type": "address[]"
        }
      ],
      "name": "swapMultipleAuthKeys",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "dailyLimit",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CHAIN_ID",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKey",
          "type": "address"
        }
      ],
      "name": "removeAuthKey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "dailyLimitTracker",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nonce",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_oldAuthKey",
          "type": "address"
        },
        {
          "name": "_newAuthKey",
          "type": "address"
        }
      ],
      "name": "swapAuthKeys",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "authKeysArray",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getAuthKeysArrayLength",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "name": "_destination",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        },
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "executeTransaction",
      "outputs": [
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "authKeysArrayIndex",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKeys",
          "type": "address[]"
        }
      ],
      "name": "addMultipleAuthKeys",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "authKey",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newDailyLimit",
          "type": "uint256"
        }
      ],
      "name": "DailyLimitChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "FundsReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "authKey",
          "type": "address"
        }
      ],
      "name": "AddedAuthKey",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "authKey",
          "type": "address"
        }
      ],
      "name": "RemovedAuthKey",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "oldAuthKey",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newAuthKey",
          "type": "address"
        }
      ],
      "name": "SwappedAuthKeys",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "encodedData",
          "type": "bytes32"
        }
      ],
      "name": "CallFailed",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newDailyLimit",
          "type": "uint256"
        }
      ],
      "name": "changeDailyLimit",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentDay",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.8+commit.23d335f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"_authKey\",\"type\":\"address\"}],\"name\":\"addAuthKey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_msgHash\",\"type\":\"bytes32\"},{\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authKeys\",\"type\":\"address[]\"}],\"name\":\"removeMultipleAuthKeys\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_msgHash\",\"type\":\"bytes32\"},{\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"_isValidAuthKeySignature\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentDay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_txDataMessageHash\",\"type\":\"bytes32\"},{\"name\":\"_transactionDataSignature\",\"type\":\"bytes\"},{\"name\":\"_loginKeyAuthorizationSignature\",\"type\":\"bytes\"}],\"name\":\"validateLoginKeyMetaTxSigs\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"authKeys\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_oldAuthKeys\",\"type\":\"address[]\"},{\"name\":\"_newAuthKeys\",\"type\":\"address[]\"}],\"name\":\"swapMultipleAuthKeys\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"dailyLimit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CHAIN_ID\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authKey\",\"type\":\"address\"}],\"name\":\"removeAuthKey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"dailyLimitTracker\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_oldAuthKey\",\"type\":\"address\"},{\"name\":\"_newAuthKey\",\"type\":\"address\"}],\"name\":\"swapAuthKeys\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"authKeysArray\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAuthKeysArrayLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newDailyLimit\",\"type\":\"uint256\"}],\"name\":\"changeDailyLimit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\"},{\"name\":\"_destination\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"authKeysArrayIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authKeys\",\"type\":\"address[]\"}],\"name\":\"addMultipleAuthKeys\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"authKey\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newDailyLimit\",\"type\":\"uint256\"}],\"name\":\"DailyLimitChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"FundsReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"authKey\",\"type\":\"address\"}],\"name\":\"AddedAuthKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"authKey\",\"type\":\"address\"}],\"name\":\"RemovedAuthKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"oldAuthKey\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newAuthKey\",\"type\":\"address\"}],\"name\":\"SwappedAuthKeys\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"encodedData\",\"type\":\"bytes32\"}],\"name\":\"CallFailed\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"addAuthKey(address)\":{\"details\":\"Add an auth key to the list of auth keys\",\"params\":{\"_authKey\":\"Address of the auth key to add\"}},\"addMultipleAuthKeys(address[])\":{\"details\":\"Add multiple auth keys to the list of auth keys\",\"params\":{\"_authKeys\":\"Array of addresses to add to the auth keys list\"}},\"changeDailyLimit(uint256)\":{\"details\":\"Change the daily limit for a user_newDailyLimit New daily limit to set\"},\"executeTransaction(uint256,address,uint256,bytes)\":{\"details\":\"Execute a transaction\",\"params\":{\"_data\":\"Data of the transaction\",\"_destination\":\"Destination of the transaction\",\"_nonce\":\"Nonce of the transaction\",\"_value\":\"Value of the transaction\"}},\"getAuthKeysArrayLength()\":{\"details\":\"Return the length of the authKeysArray\"},\"getCurrentDay()\":{\"details\":\"Sets the current day for the contract\"},\"removeAuthKey(address)\":{\"details\":\"Remove an auth key from the list of auth keys\",\"params\":{\"_authKey\":\"Address of the auth key to remove\"}},\"removeMultipleAuthKeys(address[])\":{\"details\":\"Remove multiple auth keys to the list of auth keys\",\"params\":{\"_authKeys\":\"Array of addresses to remove to the auth keys list\"}},\"swapAuthKeys(address,address)\":{\"details\":\"Swap one authKey for a non-authKey\",\"params\":{\"_newAuthKey\":\"A non-existing authKey\",\"_oldAuthKey\":\"An existing authKey\"}},\"swapMultipleAuthKeys(address[],address[])\":{\"details\":\"Swap multiple auth keys to the list of auth keys\",\"params\":{\"_newAuthKeys\":\"Array of addresses to add to the auth keys list\",\"_oldAuthKeys\":\"Array of addresses to remove to the auth keys list\"}},\"validateLoginKeyMetaTxSigs(bytes32,bytes,bytes)\":{\"details\":\"Validate signatures from an AuthKeyMetaTx\",\"params\":{\"_loginKeyAuthorizationSignature\":\"Signed loginKey\",\"_transactionDataSignature\":\"Signed tx data\",\"_txDataMessageHash\":\"Ethereum signed message of the transaction\"}}}},\"userdoc\":{\"methods\":{\"executeTransaction(uint256,address,uint256,bytes)\":{\"notice\":\"This is to be called directly by an AuthKey\"},\"initialize()\":{\"notice\":\"Public functions\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/firewall/TransactionLimit.sol\":\"TransactionLimit\"},\"evmVersion\":\"constantinople\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/Account.sol\":{\"keccak256\":\"0x5e2492fe50205a6fb3abe4e5f38ec4707b10694cc3a5a6fa89e3582b0634df09\",\"urls\":[\"bzzr://a8fce51e92840cce08b52ca7c6c9facf875d71ddcb3389c4de8d74d70e8590ce\"]},\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/firewall/TransactionLimit.sol\":{\"keccak256\":\"0xc249c743cb81b2fdcb528b736215ed6b34d64a5b675628b07738698265c41f1d\",\"urls\":[\"bzzr://ee1ec6c9c4848aabb0bd1dd387948b2c5b07f0845c8ef86e1a3eae59797ebd10\"]},\"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0xc19027309407a962d4d5f68ad3e5c31eab6ffb6b134dd4811fd0f3d93ffd618a\",\"urls\":[\"bzzr://0fd21475ca178757005990869d51729368cbebd5f0222656141b4fbe5e12a363\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\"]},\"solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xde793835499803e9a2b59683de8bca5b77e2c4dc63748cf8b72973193e65e656\",\"urls\":[\"bzzr://d3ab468bc9bcc85b245abea04a7dbe404db1f70d2f63e3b9b70ed1fde8138ee9\"]},\"zos-lib/contracts/Initializable.sol\":{\"keccak256\":\"0xf79d9851c085aa8412e87d7a26d3485488fe12538ecb4e317ce41fc1f2c3a16a\",\"urls\":[\"bzzr://e45c5a995f57637b2300a376647ee345cc9cb30ee1984735091fcd4b10ff3500\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506121e8806100206000396000f3fe60806040526004361061012a5760003560e01c806385e1f4d0116100ab578063bd1a84ab1161006f578063bd1a84ab14610a0d578063cd11331e14610a88578063cea0862114610ab3578063e0eae14d14610aee578063ed8fc6b814610c63578063f399f1dd14610cc85761012a565b806385e1f4d0146108a65780639565389e146108d15780639657b80914610922578063affed0e014610971578063b4c271641461099c5761012a565b80634c477daf116100f25780634c477daf146104f95780635175ca5e146106a25780635b79818f1461070b57806367eeba0c146108645780638129fc1c1461088f5761012a565b806313f8c578146101705780631626ba7e146101c15780631704db30146102e557806320433e26146103aa5780633e6968b6146104ce575b343373ffffffffffffffffffffffffffffffffffffffff167f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f60405160405180910390a3005b34801561017c57600080fd5b506101bf6004803603602081101561019357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d8d565b005b3480156101cd57600080fd5b50610291600480360360408110156101e457600080fd5b81019080803590602001909291908035906020019064010000000081111561020b57600080fd5b82018360208201111561021d57600080fd5b8035906020019184600183028401116401000000008311171561023f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610fa6565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156102f157600080fd5b506103a86004803603602081101561030857600080fd5b810190808035906020019064010000000081111561032557600080fd5b82018360208201111561033757600080fd5b8035906020019184602083028401116401000000008311171561035957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611052565b005b3480156103b657600080fd5b5061047a600480360360408110156103cd57600080fd5b8101908080359060200190929190803590602001906401000000008111156103f457600080fd5b82018360208201111561040657600080fd5b8035906020019184600183028401116401000000008311171561042857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611097565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156104da57600080fd5b506104e3611123565b6040518082815260200191505060405180910390f35b34801561050557600080fd5b506106606004803603606081101561051c57600080fd5b81019080803590602001909291908035906020019064010000000081111561054357600080fd5b82018360208201111561055557600080fd5b8035906020019184600183028401116401000000008311171561057757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156105da57600080fd5b8201836020820111156105ec57600080fd5b8035906020019184600183028401116401000000008311171561060e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611137565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106ae57600080fd5b506106f1600480360360208110156106c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111de565b604051808215151515815260200191505060405180910390f35b34801561071757600080fd5b506108626004803603604081101561072e57600080fd5b810190808035906020019064010000000081111561074b57600080fd5b82018360208201111561075d57600080fd5b8035906020019184602083028401116401000000008311171561077f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107df57600080fd5b8201836020820111156107f157600080fd5b8035906020019184602083028401116401000000008311171561081357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506111fe565b005b34801561087057600080fd5b506108796112cf565b6040518082815260200191505060405180910390f35b34801561089b57600080fd5b506108a46112d5565b005b3480156108b257600080fd5b506108bb6113e3565b6040518082815260200191505060405180910390f35b3480156108dd57600080fd5b50610920600480360360208110156108f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113e9565b005b34801561092e57600080fd5b5061095b6004803603602081101561094557600080fd5b810190808035906020019092919050505061161a565b6040518082815260200191505060405180910390f35b34801561097d57600080fd5b50610986611632565b6040518082815260200191505060405180910390f35b3480156109a857600080fd5b50610a0b600480360360408110156109bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611638565b005b348015610a1957600080fd5b50610a4660048036036020811015610a3057600080fd5b8101908080359060200190929190505050611827565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a9457600080fd5b50610a9d611863565b6040518082815260200191505060405180910390f35b348015610abf57600080fd5b50610aec60048036036020811015610ad657600080fd5b8101908080359060200190929190505050611870565b005b348015610afa57600080fd5b50610be860048036036080811015610b1157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610b6257600080fd5b820183602082011115610b7457600080fd5b80359060200191846001830284011164010000000083111715610b9657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506118c9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c28578082015181840152602081019050610c0d565b50505050905090810190601f168015610c555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c6f57600080fd5b50610cb260048036036020811015610c8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118ea565b6040518082815260200191505060405180910390f35b348015610cd457600080fd5b50610d8b60048036036020811015610ceb57600080fd5b8101908080359060200190640100000000811115610d0857600080fd5b820183602082011115610d1a57600080fd5b80359060200191846020830284011164010000000083111715610d3c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611902565b005b610d9633611947565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b657920616c72656164792061646465640000000000000000000081525060200191505060405180910390fd5b6001603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060338190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600160338054905003603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f9e46251f3febb4bf40cf64591f0efc1d6ac8a9f0b8900b2adaeb83227757058860405160405180910390a250565b6000604182511415610fc357610fbc8383611097565b905061104c565b608282511415610fde57610fd78383611a46565b905061104c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c6964205f7369676e617475726573206c656e67746800000000000081525060200191505060405180910390fd5b92915050565b61105b33611947565b60008090505b81518110156110935761108682828151811061107957fe5b60200260200101516113e9565b8080600101915050611061565b5050565b6000806110ad8385611b8990919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611111576320c13b0b60e01b91505061111d565b63ffffffff60e01b9150505b92915050565b600062015180428161113157fe5b06905090565b60008061114d8486611b8990919063ffffffff16565b905060006111af82604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120611c8d565b905060006111c68583611b8990919063ffffffff16565b90506111d181611947565b8293505050509392505050565b60356020528060005260406000206000915054906101000a900460ff1681565b61120733611947565b805182511461127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e70757420617272617973206e6f7420657175616c206c656e67746800000081525060200191505060405180910390fd5b60008090505b82518110156112ca576112bd83828151811061129c57fe5b60200260200101518383815181106112b057fe5b6020026020010151611638565b8080600101915050611284565b505050565b60385481565b600060019054906101000a900460ff16806112f457506112f3611ce5565b5b8061130b57506000809054906101000a900460ff16155b611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061218f602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1615905080156113b0576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b678ac7230489e8000060388190555080156113e05760008060016101000a81548160ff0219169083151502179055505b50565b60375481565b6113f233611947565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b6579206e6f74207965742061646465640000000000000000000081525060200191505060405180910390fd5b60016114bb611863565b1161152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616e6e6f742072656d6f7665206c6173742061757468206b6579000000000081525060200191505060405180910390fd5b6000603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061158f81611cf6565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f24a1d50afe4670e7a657fa10322b233e347dc26799afb2d72147a679e693f31f60405160405180910390a250565b60396020528060005260406000206000915090505481565b60365481565b603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4f6c642061757468206b657920646f6573206e6f74206578697374000000000081525060200191505060405180910390fd5b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e65772061757468206b657920616c726561647920657869737473000000000081525060200191505060405180910390fd5b6117c081610d8d565b6117c9826113e9565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f084d1bb6d163e102e9e0ca9dcb761e37f325346ac27c1d8bbfb23c105ffba70660405160405180910390a35050565b6033818154811061183457fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603380549050905090565b61187933611947565b806038819055506038543373ffffffffffffffffffffffffffffffffffffffff167fca0b3dabefdbd8c72c0a9cf4a6e9d107da897abf036ef3f3f3b010cdd259415960405160405180910390a350565b60606118d433611947565b6118e085858585611e4a565b9050949350505050565b60346020528060005260406000206000915090505481565b61190b33611947565b60008090505b81518110156119435761193682828151811061192957fe5b6020026020010151610d8d565b8080600101915050611911565b5050565b60011515603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514806119d157503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f41757468206b657920697320696e76616c69640000000000000000000000000081525060200191505060405180910390fd5b50565b60006060611a616000604185611fec9092919063ffffffff16565b90506060611a7b60418086611fec9092919063ffffffff16565b90506000611a928387611b8990919063ffffffff16565b90506000611af482604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120611c8d565b90506000611b0b8483611b8990919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b73576320c13b0b60e01b95505050505050611b83565b63ffffffff60e01b955050505050505b92915050565b60006041825114611b9d5760009050611c87565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115611bf15760009350505050611c87565b601b8160ff1614158015611c095750601c8160ff1614155b15611c1a5760009350505050611c87565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611c77573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600080303b90506000811491505090565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008190505b600160338054905003811015611ded5760336001820181548110611d6057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660338281548110611d9857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050611d40565b50603360016033805490500381548110611e0357fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556033805480919060019003611e45919061213d565b505050565b60606036548514611ec3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e636f7272656374206e6f6e6365000000000000000000000000000000000081525060200191505060405180910390fd5b603660008154809291906001019190505550600060608573ffffffffffffffffffffffffffffffffffffffff1685856040518082805190602001908083835b60208310611f255780518252602082019150602081019050602083039250611f02565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611f87576040519150601f19603f3d011682016040523d82523d6000602084013e611f8c565b606091505b509150915081611fdf576000611fa488888888612078565b90507fe22e3683fe845a34c5adea424d0beb84895f513ea06745002d9d65f90100591a816040518082815260200191505060405180910390a1505b8092505050949350505050565b606081830184511015611ffe57600080fd5b606082156000811461201b5760405191506020820160405261206c565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612059578051835260208301925060208101905061203c565b50868552601f19601f8301166040525050505b50809150509392505050565b600084848484604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b602083106120f557805182526020820191506020810190506020830392506120d2565b6001836020036101000a038019825116818451168082178552505050505050905001945050505050604051602081830303815290604052805190602001209050949350505050565b815481835581811115612164578183600052602060002091820191016121639190612169565b5b505050565b61218b91905b8082111561218757600081600090555060010161216f565b5090565b9056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a165627a7a72305820b938ba3d083cc5daa2c5cc9703fcb40ccee7e151643fd61ec13aaf91532e47c50029",
  "deployedBytecode": "0x60806040526004361061012a5760003560e01c806385e1f4d0116100ab578063bd1a84ab1161006f578063bd1a84ab14610a0d578063cd11331e14610a88578063cea0862114610ab3578063e0eae14d14610aee578063ed8fc6b814610c63578063f399f1dd14610cc85761012a565b806385e1f4d0146108a65780639565389e146108d15780639657b80914610922578063affed0e014610971578063b4c271641461099c5761012a565b80634c477daf116100f25780634c477daf146104f95780635175ca5e146106a25780635b79818f1461070b57806367eeba0c146108645780638129fc1c1461088f5761012a565b806313f8c578146101705780631626ba7e146101c15780631704db30146102e557806320433e26146103aa5780633e6968b6146104ce575b343373ffffffffffffffffffffffffffffffffffffffff167f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f60405160405180910390a3005b34801561017c57600080fd5b506101bf6004803603602081101561019357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d8d565b005b3480156101cd57600080fd5b50610291600480360360408110156101e457600080fd5b81019080803590602001909291908035906020019064010000000081111561020b57600080fd5b82018360208201111561021d57600080fd5b8035906020019184600183028401116401000000008311171561023f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610fa6565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156102f157600080fd5b506103a86004803603602081101561030857600080fd5b810190808035906020019064010000000081111561032557600080fd5b82018360208201111561033757600080fd5b8035906020019184602083028401116401000000008311171561035957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611052565b005b3480156103b657600080fd5b5061047a600480360360408110156103cd57600080fd5b8101908080359060200190929190803590602001906401000000008111156103f457600080fd5b82018360208201111561040657600080fd5b8035906020019184600183028401116401000000008311171561042857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611097565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156104da57600080fd5b506104e3611123565b6040518082815260200191505060405180910390f35b34801561050557600080fd5b506106606004803603606081101561051c57600080fd5b81019080803590602001909291908035906020019064010000000081111561054357600080fd5b82018360208201111561055557600080fd5b8035906020019184600183028401116401000000008311171561057757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156105da57600080fd5b8201836020820111156105ec57600080fd5b8035906020019184600183028401116401000000008311171561060e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611137565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106ae57600080fd5b506106f1600480360360208110156106c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111de565b604051808215151515815260200191505060405180910390f35b34801561071757600080fd5b506108626004803603604081101561072e57600080fd5b810190808035906020019064010000000081111561074b57600080fd5b82018360208201111561075d57600080fd5b8035906020019184602083028401116401000000008311171561077f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107df57600080fd5b8201836020820111156107f157600080fd5b8035906020019184602083028401116401000000008311171561081357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506111fe565b005b34801561087057600080fd5b506108796112cf565b6040518082815260200191505060405180910390f35b34801561089b57600080fd5b506108a46112d5565b005b3480156108b257600080fd5b506108bb6113e3565b6040518082815260200191505060405180910390f35b3480156108dd57600080fd5b50610920600480360360208110156108f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113e9565b005b34801561092e57600080fd5b5061095b6004803603602081101561094557600080fd5b810190808035906020019092919050505061161a565b6040518082815260200191505060405180910390f35b34801561097d57600080fd5b50610986611632565b6040518082815260200191505060405180910390f35b3480156109a857600080fd5b50610a0b600480360360408110156109bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611638565b005b348015610a1957600080fd5b50610a4660048036036020811015610a3057600080fd5b8101908080359060200190929190505050611827565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a9457600080fd5b50610a9d611863565b6040518082815260200191505060405180910390f35b348015610abf57600080fd5b50610aec60048036036020811015610ad657600080fd5b8101908080359060200190929190505050611870565b005b348015610afa57600080fd5b50610be860048036036080811015610b1157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610b6257600080fd5b820183602082011115610b7457600080fd5b80359060200191846001830284011164010000000083111715610b9657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506118c9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c28578082015181840152602081019050610c0d565b50505050905090810190601f168015610c555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c6f57600080fd5b50610cb260048036036020811015610c8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118ea565b6040518082815260200191505060405180910390f35b348015610cd457600080fd5b50610d8b60048036036020811015610ceb57600080fd5b8101908080359060200190640100000000811115610d0857600080fd5b820183602082011115610d1a57600080fd5b80359060200191846020830284011164010000000083111715610d3c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611902565b005b610d9633611947565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b657920616c72656164792061646465640000000000000000000081525060200191505060405180910390fd5b6001603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060338190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600160338054905003603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f9e46251f3febb4bf40cf64591f0efc1d6ac8a9f0b8900b2adaeb83227757058860405160405180910390a250565b6000604182511415610fc357610fbc8383611097565b905061104c565b608282511415610fde57610fd78383611a46565b905061104c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c6964205f7369676e617475726573206c656e67746800000000000081525060200191505060405180910390fd5b92915050565b61105b33611947565b60008090505b81518110156110935761108682828151811061107957fe5b60200260200101516113e9565b8080600101915050611061565b5050565b6000806110ad8385611b8990919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611111576320c13b0b60e01b91505061111d565b63ffffffff60e01b9150505b92915050565b600062015180428161113157fe5b06905090565b60008061114d8486611b8990919063ffffffff16565b905060006111af82604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120611c8d565b905060006111c68583611b8990919063ffffffff16565b90506111d181611947565b8293505050509392505050565b60356020528060005260406000206000915054906101000a900460ff1681565b61120733611947565b805182511461127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e70757420617272617973206e6f7420657175616c206c656e67746800000081525060200191505060405180910390fd5b60008090505b82518110156112ca576112bd83828151811061129c57fe5b60200260200101518383815181106112b057fe5b6020026020010151611638565b8080600101915050611284565b505050565b60385481565b600060019054906101000a900460ff16806112f457506112f3611ce5565b5b8061130b57506000809054906101000a900460ff16155b611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061218f602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1615905080156113b0576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b678ac7230489e8000060388190555080156113e05760008060016101000a81548160ff0219169083151502179055505b50565b60375481565b6113f233611947565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b6579206e6f74207965742061646465640000000000000000000081525060200191505060405180910390fd5b60016114bb611863565b1161152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616e6e6f742072656d6f7665206c6173742061757468206b6579000000000081525060200191505060405180910390fd5b6000603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061158f81611cf6565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f24a1d50afe4670e7a657fa10322b233e347dc26799afb2d72147a679e693f31f60405160405180910390a250565b60396020528060005260406000206000915090505481565b60365481565b603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4f6c642061757468206b657920646f6573206e6f74206578697374000000000081525060200191505060405180910390fd5b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e65772061757468206b657920616c726561647920657869737473000000000081525060200191505060405180910390fd5b6117c081610d8d565b6117c9826113e9565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f084d1bb6d163e102e9e0ca9dcb761e37f325346ac27c1d8bbfb23c105ffba70660405160405180910390a35050565b6033818154811061183457fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603380549050905090565b61187933611947565b806038819055506038543373ffffffffffffffffffffffffffffffffffffffff167fca0b3dabefdbd8c72c0a9cf4a6e9d107da897abf036ef3f3f3b010cdd259415960405160405180910390a350565b60606118d433611947565b6118e085858585611e4a565b9050949350505050565b60346020528060005260406000206000915090505481565b61190b33611947565b60008090505b81518110156119435761193682828151811061192957fe5b6020026020010151610d8d565b8080600101915050611911565b5050565b60011515603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514806119d157503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f41757468206b657920697320696e76616c69640000000000000000000000000081525060200191505060405180910390fd5b50565b60006060611a616000604185611fec9092919063ffffffff16565b90506060611a7b60418086611fec9092919063ffffffff16565b90506000611a928387611b8990919063ffffffff16565b90506000611af482604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120611c8d565b90506000611b0b8483611b8990919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b73576320c13b0b60e01b95505050505050611b83565b63ffffffff60e01b955050505050505b92915050565b60006041825114611b9d5760009050611c87565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115611bf15760009350505050611c87565b601b8160ff1614158015611c095750601c8160ff1614155b15611c1a5760009350505050611c87565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611c77573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600080303b90506000811491505090565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008190505b600160338054905003811015611ded5760336001820181548110611d6057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660338281548110611d9857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050611d40565b50603360016033805490500381548110611e0357fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556033805480919060019003611e45919061213d565b505050565b60606036548514611ec3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e636f7272656374206e6f6e6365000000000000000000000000000000000081525060200191505060405180910390fd5b603660008154809291906001019190505550600060608573ffffffffffffffffffffffffffffffffffffffff1685856040518082805190602001908083835b60208310611f255780518252602082019150602081019050602083039250611f02565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611f87576040519150601f19603f3d011682016040523d82523d6000602084013e611f8c565b606091505b509150915081611fdf576000611fa488888888612078565b90507fe22e3683fe845a34c5adea424d0beb84895f513ea06745002d9d65f90100591a816040518082815260200191505060405180910390a1505b8092505050949350505050565b606081830184511015611ffe57600080fd5b606082156000811461201b5760405191506020820160405261206c565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612059578051835260208301925060208101905061203c565b50868552601f19601f8301166040525050505b50809150509392505050565b600084848484604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b602083106120f557805182526020820191506020810190506020830392506120d2565b6001836020036101000a038019825116818451168082178552505050505050905001945050505050604051602081830303815290604052805190602001209050949350505050565b815481835581811115612164578183600052602060002091820191016121639190612169565b5b505050565b61218b91905b8082111561218757600081600090555060010161216f565b5090565b9056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a165627a7a72305820b938ba3d083cc5daa2c5cc9703fcb40ccee7e151643fd61ec13aaf91532e47c50029",
  "sourceMap": "59:1252:9:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;59:1252:9;;;;;;;",
  "deployedSourceMap": "59:1252:9:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1286:9:1;1274:10;1260:36;;;;;;;;;;;;59:1252:9;2225:314:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2225:314:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2225:314:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;4886:458;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4886:458:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4886:458:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4886:458:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4886:458:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4886:458:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4886:458:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;3526:205;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3526:205:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3526:205:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3526:205:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3526:205:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;3526:205:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3526:205:1;;;;;;;;;;;;;;;:::i;:::-;;5350:377;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5350:377:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5350:377:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;5350:377:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5350:377:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5350:377:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;5350:377:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;745:102:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;745:102:9;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8128:735:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8128:735:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8128:735:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;8128:735:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8128:735:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8128:735:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8128:735:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;8128:735:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8128:735:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8128:735:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8128:735:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;478:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;478:40:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;478:40:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4485:395;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4485:395:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4485:395:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4485:395:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4485:395:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;4485:395:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4485:395:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4485:395:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4485:395:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;4485:395:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4485:395:1;;;;;;;;;;;;;;;:::i;:::-;;103:25:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;103:25:9;;;:::i;:::-;;;;;;;;;;;;;;;;;;;321:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;321:79:9;;;:::i;:::-;;550:23:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;550:23:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3001:379;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3001:379:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3001:379:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;134:52:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;134:52:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;134:52:9;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;524:20:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;524:20:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3882:380;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3882:380:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3882:380:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;383:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;383:30:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;383:30:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1403:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1403:108:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;504:184:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;504:184:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;504:184:9;;;;;;;;;;;;;;;;;:::i;:::-;;1810:301:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1810:301:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1810:301:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1810:301:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1810:301:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1810:301:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1810:301:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1810:301:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;419:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;419:53:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;419:53:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2679:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2679:199:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2679:199:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2679:199:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2679:199:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;2679:199:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2679:199:1;;;;;;;;;;;;;;;:::i;:::-;;2225:314;1088:28;1105:10;1088:16;:28::i;:::-;2312:8;:18;2321:8;2312:18;;;;;;;;;;;;;;;;;;;;;;;;;2311:19;2303:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2388:4;2367:8;:18;2376:8;2367:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;2402:13;2421:8;2402:28;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;2402:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2494:1;2471:13;:20;;;;:24;2440:18;:28;2459:8;2440:28;;;;;;;;;;;;;;;:55;;;;2523:8;2510:22;;;;;;;;;;;;2225:314;:::o;4886:458::-;5023:6;5071:2;5049:11;:18;:24;5045:293;;;5096:47;5121:8;5131:11;5096:24;:47::i;:::-;5089:54;;;;5045:293;5186:3;5164:11;:18;:25;5160:178;;;5212:48;5238:8;5248:11;5212:25;:48::i;:::-;5205:55;;;;5160:178;5291:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4886:458;;;;;:::o;3526:205::-;1088:28;1105:10;1088:16;:28::i;:::-;3631:9;3643:1;3631:13;;3626:99;3650:9;:16;3646:1;:20;3626:99;;;3687:27;3701:9;3711:1;3701:12;;;;;;;;;;;;;;3687:13;:27::i;:::-;3668:3;;;;;;;3626:99;;;;3526:205;:::o;5350:377::-;5494:6;5516:22;5541:50;5571:10;5541:8;:16;;:50;;;;:::i;:::-;5516:75;;5605:8;:24;5614:14;5605:24;;;;;;;;;;;;;;;;;;;;;;;;;5602:119;;;674:10;5652:9;;5645:16;;;;;5602:119;729:10;5699:11;;5692:18;;;5350:377;;;;;:::o;745:102:9:-;791:7;835:5;817:15;:23;;;;;;810:30;;745:102;:::o;8128:735:1:-;8353:7;8376:29;8408:75;8448:25;8408:18;:26;;:75;;;;:::i;:::-;8376:107;;8494:40;8537:97;8577:21;8547:61;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8547:61:1;;;8537:72;;;;;;:95;:97::i;:::-;8494:140;;8645:27;8675:95;8729:31;8675:32;:40;;:95;;;;:::i;:::-;8645:125;;8780:37;8797:19;8780:16;:37::i;:::-;8835:21;8828:28;;;;;8128:735;;;;;:::o;478:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;4485:395::-;1088:28;1105:10;1088:16;:28::i;:::-;4690:12;:19;4667:12;:19;:42;4659:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4758:9;4770:1;4758:13;;4753:121;4777:12;:19;4773:1;:23;4753:121;;;4817:46;4830:12;4843:1;4830:15;;;;;;;;;;;;;;4847:12;4860:1;4847:15;;;;;;;;;;;;;;4817:12;:46::i;:::-;4798:3;;;;;;;4753:121;;;;4485:395;;:::o;103:25:9:-;;;;:::o;321:79::-;1024:12:17;;;;;;;;;;;:31;;;;1040:15;:13;:15::i;:::-;1024:31;:47;;;;1060:11;;;;;;;;;;;1059:12;1024:47;1016:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;;;;;;1151:13;1129:35;;1174:14;1170:80;;;1213:4;1198:12;;:19;;;;;;;;;;;;;;;;;;1239:4;1225:11;;:18;;;;;;;;;;;;;;;;;;1170:80;385:8:9;372:10;:21;;;;1268:14:17;1264:55;;;1307:5;1292:12;;:20;;;;;;;;;;;;;;;;;;1264:55;321:79:9;:::o;550:23:1:-;;;;:::o;3001:379::-;1088:28;1105:10;1088:16;:28::i;:::-;3090:8;:18;3099:8;3090:18;;;;;;;;;;;;;;;;;;;;;;;;;3082:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3180:1;3153:24;:22;:24::i;:::-;:28;3145:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3244:5;3223:8;:18;3232:8;3223:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3259:33;3283:8;3259:23;:33::i;:::-;3333:1;3302:18;:28;3321:8;3302:28;;;;;;;;;;;;;;;:32;;;;3364:8;3349:24;;;;;;;;;;;;3001:379;:::o;134:52:9:-;;;;;;;;;;;;;;;;;:::o;524:20:1:-;;;;:::o;3882:380::-;4005:8;:21;4014:11;4005:21;;;;;;;;;;;;;;;;;;;;;;;;;3997:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:8;:21;4086:11;4077:21;;;;;;;;;;;;;;;;;;;;;;;;;4076:22;4068:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4140:23;4151:11;4140:10;:23::i;:::-;4173:26;4187:11;4173:13;:26::i;:::-;4243:11;4214:41;;4230:11;4214:41;;;;;;;;;;;;3882:380;;:::o;383:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1403:108::-;1458:7;1484:13;:20;;;;1477:27;;1403:108;:::o;504:184:9:-;1088:28:1;1105:10;1088:16;:28::i;:::-;611:14:9;598:10;:27;;;;670:10;;658;640:41;;;;;;;;;;;;504:184;:::o;1810:301:1:-;2013:12;1088:28;1105:10;1088:16;:28::i;:::-;2048:56;2068:6;2076:12;2090:6;2098:5;2048:19;:56::i;:::-;2041:63;;1810:301;;;;;;:::o;419:53::-;;;;;;;;;;;;;;;;;:::o;2679:199::-;1088:28;1105:10;1088:16;:28::i;:::-;2781:9;2793:1;2781:13;;2776:96;2800:9;:16;2796:1;:20;2776:96;;;2837:24;2848:9;2858:1;2848:12;;;;;;;;;;;;;;2837:10;:24::i;:::-;2818:3;;;;;;;2776:96;;;;2679:199;:::o;7138:164::-;7236:4;7214:26;;:8;:18;7223:8;7214:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;:57;;;;7266:4;7244:27;;:10;:27;;;7214:57;7206:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7138:164;:::o;5733:821::-;5881:6;5903:29;5935:24;5953:1;5956:2;5935:11;:17;;:24;;;;;:::i;:::-;5903:56;;5969:43;6015:25;6033:2;6037;6015:11;:17;;:25;;;;;:::i;:::-;5969:71;;6051:23;6077:56;6107:16;6077:8;:16;;:56;;;;:::i;:::-;6051:82;;6144:40;6187:91;6227:15;6197:55;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6197:55:1;;;6187:66;;;;;;:89;:91::i;:::-;6144:134;;6289:27;6319:94;6373:30;6319:32;:40;;:94;;;;:::i;:::-;6289:124;;6427:8;:29;6436:19;6427:29;;;;;;;;;;;;;;;;;;;;;;;;;6424:124;;;674:10;6479:9;;6472:16;;;;;;;;;6424:124;729:10;6526:11;;6519:18;;;;;;;5733:821;;;;;:::o;1229:1891:13:-;1307:7;1388:2;1368:9;:16;:22;1364:72;;1422:1;1406:19;;;;1364:72;1502:9;1521;1540:7;1786:4;1775:9;1771:20;1765:27;1760:32;;1831:4;1820:9;1816:20;1810:27;1805:32;;1884:4;1873:9;1869:20;1863:27;1860:1;1855:36;1850:41;;2802:66;2797:1;2789:10;;:79;2785:127;;;2899:1;2884:17;;;;;;;2785:127;2931:2;2926:1;:7;;;;:18;;;;;2942:2;2937:1;:7;;;;2926:18;2922:66;;;2975:1;2960:17;;;;;;;2922:66;3089:24;3099:4;3105:1;3108;3111;3089:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3089:24:13;;;;;;;;3082:31;;;;;1229:1891;;;;;:::o;3386:265::-;3455:7;3638:4;3585:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3585:58:13;;;3575:69;;;;;;3568:76;;3386:265;;;:::o;1409:467:17:-;1456:4;1797:10;1842:7;1830:20;1824:26;;1870:1;1864:2;:7;1857:14;;;1409:467;:::o;6696:343:1:-;6766:13;6782:18;:28;6801:8;6782:28;;;;;;;;;;;;;;;;6766:44;;6826:9;6838:5;6826:17;;6821:123;6872:1;6849:13;:20;;;;:24;6845:1;:28;6821:123;;;6913:13;6931:1;6927;:5;6913:20;;;;;;;;;;;;;;;;;;;;;;;;;6894:13;6908:1;6894:16;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;6875:3;;;;;;;6821:123;;;;6961:13;6998:1;6975:13;:20;;;;:24;6961:39;;;;;;;;;;;;;;;;6954:46;;;;;;;;;;;7010:13;:22;;;;;;;;;;;;:::i;:::-;;6696:343;;:::o;9177:544::-;9352:12;9398:5;;9388:6;:15;9380:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9433:5;;:7;;;;;;;;;;;;;9451:12;9465:21;9490:12;:17;;9514:6;9522:5;9490:38;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;9490:38:1;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;9450:78:1;;;;9544:7;9539:151;;9567:19;9589:48;9601:6;9609:12;9623:6;9631:5;9589:11;:48::i;:::-;9567:70;;9656:23;9667:11;9656:23;;;;;;;;;;;;;;;;;;9539:151;;9706:8;9699:15;;;;9177:544;;;;;;:::o;9430:2536:16:-;9570:12;9633:7;9624:6;:16;9606:6;:13;:35;;9598:44;;;;;;9653:22;9723:7;9716:15;9749:1;9744:1967;;;;11852:4;11846:11;11833:24;;11903:4;11892:9;11888:20;11882:4;11875:34;9709:2214;;9744:1967;9926:4;9920:11;9907:24;;10585:2;10576:7;10572:16;10967:9;10960:17;10954:4;10950:28;10938:9;10927;10923:25;10919:60;11015:7;11011:2;11007:16;11267:6;11253:9;11246:17;11240:4;11236:28;11224:9;11216:6;11212:22;11208:57;11204:70;11041:425;11300:3;11296:2;11293:11;11041:425;;;11444:2;11438:9;11434:2;11427:21;11341:4;11337:2;11333:13;11327:19;;11381:4;11377:2;11373:13;11367:19;;11041:425;;;11045:247;11502:7;11491:9;11484:26;11692:2;11688:7;11683:2;11679;11675:11;11671:25;11665:4;11658:39;9751:1960;;;9709:2214;;11950:9;11943:16;;;9430:2536;;;;;:::o;11533:339:1:-;11713:7;11783:6;11803:12;11829:6;11849:5;11753:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;11753:111:1;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11753:111:1;;;11743:122;;;;;;11736:129;;11533:339;;;;;;:::o;59:1252:9:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.5.8;\n\nimport \"../account/Account.sol\";\n\ncontract TransactionLimit is Account {\n\n    uint256 public dailyLimit;\n    mapping(uint256 => uint256) public dailyLimitTracker;\n\n    event DailyLimitChanged(address indexed authKey, uint256 indexed newDailyLimit);\n\n    /**\n     *  Public functions\n     */\n\n    function initialize() public initializer {\n        dailyLimit = 10 ether;\n    }\n\n    /// @dev Change the daily limit for a user\n    /// @dev _newDailyLimit New daily limit to set\n    function changeDailyLimit(uint256 _newDailyLimit) public\n    onlyValidAuthKeyOrSelf {\n        dailyLimit = _newDailyLimit;\n        emit DailyLimitChanged(msg.sender, dailyLimit);\n    }\n\n    /// @dev Sets the current day for the contract\n    function getCurrentDay() public view returns (uint256) {\n        return block.timestamp % 86400;\n    }\n\n    /**\n     *  Internal functions\n     */\n\n    /// @dev Check the daily limit for a user\n    /// @param _value Value being sent with the current transaction\n    function checkDailyTransactionLimit(uint256 _value) internal {\n        uint256 currentDay = getCurrentDay();\n        uint256 dailySpend = dailyLimitTracker[currentDay] + _value;\n        require(dailySpend <= dailyLimit, \"Daily limit reached\");\n        dailyLimitTracker[currentDay] += _value;\n    }\n}",
  "sourcePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/firewall/TransactionLimit.sol",
  "ast": {
    "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/firewall/TransactionLimit.sol",
    "exportedSymbols": {
      "TransactionLimit": [
        2024
      ]
    },
    "id": 2025,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1937,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:9"
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/Account.sol",
        "file": "../account/Account.sol",
        "id": 1938,
        "nodeType": "ImportDirective",
        "scope": 2025,
        "sourceUnit": 816,
        "src": "25:32:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1939,
              "name": "Account",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 815,
              "src": "88:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Account_$815",
                "typeString": "contract Account"
              }
            },
            "id": 1940,
            "nodeType": "InheritanceSpecifier",
            "src": "88:7:9"
          }
        ],
        "contractDependencies": [
          815,
          4673
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2024,
        "linearizedBaseContracts": [
          2024,
          815,
          4673
        ],
        "name": "TransactionLimit",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1942,
            "name": "dailyLimit",
            "nodeType": "VariableDeclaration",
            "scope": 2024,
            "src": "103:25:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1941,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "103:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1946,
            "name": "dailyLimitTracker",
            "nodeType": "VariableDeclaration",
            "scope": 2024,
            "src": "134:52:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 1945,
              "keyType": {
                "id": 1943,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "142:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "134:27:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueType": {
                "id": 1944,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "153:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1952,
            "name": "DailyLimitChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1948,
                  "indexed": true,
                  "name": "authKey",
                  "nodeType": "VariableDeclaration",
                  "scope": 1952,
                  "src": "217:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "217:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1950,
                  "indexed": true,
                  "name": "newDailyLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 1952,
                  "src": "242:29:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1949,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "242:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "216:56:9"
            },
            "src": "193:80:9"
          },
          {
            "body": {
              "id": 1961,
              "nodeType": "Block",
              "src": "362:38:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1957,
                      "name": "dailyLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1942,
                      "src": "372:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3130",
                      "id": 1958,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "385:8:9",
                      "subdenomination": "ether",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000000000000000000_by_1",
                        "typeString": "int_const 10000000000000000000"
                      },
                      "value": "10"
                    },
                    "src": "372:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1960,
                  "nodeType": "ExpressionStatement",
                  "src": "372:21:9"
                }
              ]
            },
            "documentation": " Public functions",
            "id": 1962,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1955,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1954,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4654,
                  "src": "350:11:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "350:11:9"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1953,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "340:2:9"
            },
            "returnParameters": {
              "id": 1956,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "362:0:9"
            },
            "scope": 2024,
            "src": "321:79:9",
            "stateMutability": "nonpayable",
            "superFunction": 137,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1979,
              "nodeType": "Block",
              "src": "588:100:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1969,
                      "name": "dailyLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1942,
                      "src": "598:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1970,
                      "name": "_newDailyLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1964,
                      "src": "611:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "598:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1972,
                  "nodeType": "ExpressionStatement",
                  "src": "598:27:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1974,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4688,
                          "src": "658:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1975,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "658:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1976,
                        "name": "dailyLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1942,
                        "src": "670:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1973,
                      "name": "DailyLimitChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1952,
                      "src": "640:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 1977,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "640:41:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1978,
                  "nodeType": "EmitStatement",
                  "src": "635:46:9"
                }
              ]
            },
            "documentation": "@dev Change the daily limit for a user\n @dev _newDailyLimit New daily limit to set",
            "id": 1980,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1967,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1966,
                  "name": "onlyValidAuthKeyOrSelf",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 127,
                  "src": "565:22:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "565:22:9"
              }
            ],
            "name": "changeDailyLimit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1964,
                  "name": "_newDailyLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 1980,
                  "src": "530:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1963,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "530:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "529:24:9"
            },
            "returnParameters": {
              "id": 1968,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "588:0:9"
            },
            "scope": 2024,
            "src": "504:184:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1990,
              "nodeType": "Block",
              "src": "800:47:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1985,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4678,
                        "src": "817:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 1986,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "817:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "%",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3836343030",
                      "id": 1987,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "835:5:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_86400_by_1",
                        "typeString": "int_const 86400"
                      },
                      "value": "86400"
                    },
                    "src": "817:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1984,
                  "id": 1989,
                  "nodeType": "Return",
                  "src": "810:30:9"
                }
              ]
            },
            "documentation": "@dev Sets the current day for the contract",
            "id": 1991,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentDay",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1981,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "767:2:9"
            },
            "returnParameters": {
              "id": 1984,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1983,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1991,
                  "src": "791:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1982,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "791:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "790:9:9"
            },
            "scope": 2024,
            "src": "745:102:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2022,
              "nodeType": "Block",
              "src": "1072:237:9",
              "statements": [
                {
                  "assignments": [
                    1997
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1997,
                      "name": "currentDay",
                      "nodeType": "VariableDeclaration",
                      "scope": 2022,
                      "src": "1082:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1996,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1082:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2000,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1998,
                      "name": "getCurrentDay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1991,
                      "src": "1103:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 1999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1103:15:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1082:36:9"
                },
                {
                  "assignments": [
                    2002
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2002,
                      "name": "dailySpend",
                      "nodeType": "VariableDeclaration",
                      "scope": 2022,
                      "src": "1128:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2001,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1128:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2008,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2003,
                        "name": "dailyLimitTracker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1946,
                        "src": "1149:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 2005,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2004,
                        "name": "currentDay",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1997,
                        "src": "1167:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1149:29:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2006,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1993,
                      "src": "1181:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1149:38:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1128:59:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2012,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2010,
                          "name": "dailySpend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2002,
                          "src": "1205:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2011,
                          "name": "dailyLimit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1942,
                          "src": "1219:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1205:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4461696c79206c696d69742072656163686564",
                        "id": 2013,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1231:21:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3f50b2936f8688a29ea35871896e59170fb964cb0d9b64b323b2a7e6b1330de2",
                          "typeString": "literal_string \"Daily limit reached\""
                        },
                        "value": "Daily limit reached"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3f50b2936f8688a29ea35871896e59170fb964cb0d9b64b323b2a7e6b1330de2",
                          "typeString": "literal_string \"Daily limit reached\""
                        }
                      ],
                      "id": 2009,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4691,
                        4692
                      ],
                      "referencedDeclaration": 4692,
                      "src": "1197:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1197:56:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2015,
                  "nodeType": "ExpressionStatement",
                  "src": "1197:56:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2016,
                        "name": "dailyLimitTracker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1946,
                        "src": "1263:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 2018,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2017,
                        "name": "currentDay",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1997,
                        "src": "1281:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1263:29:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2019,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1993,
                      "src": "1296:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1263:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2021,
                  "nodeType": "ExpressionStatement",
                  "src": "1263:39:9"
                }
              ]
            },
            "documentation": "@dev Check the daily limit for a user\n @param _value Value being sent with the current transaction",
            "id": 2023,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkDailyTransactionLimit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1994,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1993,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 2023,
                  "src": "1047:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1992,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1047:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1046:16:9"
            },
            "returnParameters": {
              "id": 1995,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1072:0:9"
            },
            "scope": 2024,
            "src": "1011:298:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 2025,
        "src": "59:1252:9"
      }
    ],
    "src": "0:1311:9"
  },
  "legacyAST": {
    "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/firewall/TransactionLimit.sol",
    "exportedSymbols": {
      "TransactionLimit": [
        2024
      ]
    },
    "id": 2025,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1937,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:9"
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/Account.sol",
        "file": "../account/Account.sol",
        "id": 1938,
        "nodeType": "ImportDirective",
        "scope": 2025,
        "sourceUnit": 816,
        "src": "25:32:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1939,
              "name": "Account",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 815,
              "src": "88:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Account_$815",
                "typeString": "contract Account"
              }
            },
            "id": 1940,
            "nodeType": "InheritanceSpecifier",
            "src": "88:7:9"
          }
        ],
        "contractDependencies": [
          815,
          4673
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2024,
        "linearizedBaseContracts": [
          2024,
          815,
          4673
        ],
        "name": "TransactionLimit",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1942,
            "name": "dailyLimit",
            "nodeType": "VariableDeclaration",
            "scope": 2024,
            "src": "103:25:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1941,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "103:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1946,
            "name": "dailyLimitTracker",
            "nodeType": "VariableDeclaration",
            "scope": 2024,
            "src": "134:52:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 1945,
              "keyType": {
                "id": 1943,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "142:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "134:27:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueType": {
                "id": 1944,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "153:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 1952,
            "name": "DailyLimitChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1948,
                  "indexed": true,
                  "name": "authKey",
                  "nodeType": "VariableDeclaration",
                  "scope": 1952,
                  "src": "217:23:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "217:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1950,
                  "indexed": true,
                  "name": "newDailyLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 1952,
                  "src": "242:29:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1949,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "242:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "216:56:9"
            },
            "src": "193:80:9"
          },
          {
            "body": {
              "id": 1961,
              "nodeType": "Block",
              "src": "362:38:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1957,
                      "name": "dailyLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1942,
                      "src": "372:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3130",
                      "id": 1958,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "385:8:9",
                      "subdenomination": "ether",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000000000000000000_by_1",
                        "typeString": "int_const 10000000000000000000"
                      },
                      "value": "10"
                    },
                    "src": "372:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1960,
                  "nodeType": "ExpressionStatement",
                  "src": "372:21:9"
                }
              ]
            },
            "documentation": " Public functions",
            "id": 1962,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1955,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1954,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4654,
                  "src": "350:11:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "350:11:9"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1953,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "340:2:9"
            },
            "returnParameters": {
              "id": 1956,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "362:0:9"
            },
            "scope": 2024,
            "src": "321:79:9",
            "stateMutability": "nonpayable",
            "superFunction": 137,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1979,
              "nodeType": "Block",
              "src": "588:100:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1969,
                      "name": "dailyLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1942,
                      "src": "598:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1970,
                      "name": "_newDailyLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1964,
                      "src": "611:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "598:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1972,
                  "nodeType": "ExpressionStatement",
                  "src": "598:27:9"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1974,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4688,
                          "src": "658:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1975,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "658:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1976,
                        "name": "dailyLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1942,
                        "src": "670:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1973,
                      "name": "DailyLimitChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1952,
                      "src": "640:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 1977,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "640:41:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1978,
                  "nodeType": "EmitStatement",
                  "src": "635:46:9"
                }
              ]
            },
            "documentation": "@dev Change the daily limit for a user\n @dev _newDailyLimit New daily limit to set",
            "id": 1980,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1967,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1966,
                  "name": "onlyValidAuthKeyOrSelf",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 127,
                  "src": "565:22:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "565:22:9"
              }
            ],
            "name": "changeDailyLimit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1964,
                  "name": "_newDailyLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 1980,
                  "src": "530:22:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1963,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "530:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "529:24:9"
            },
            "returnParameters": {
              "id": 1968,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "588:0:9"
            },
            "scope": 2024,
            "src": "504:184:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1990,
              "nodeType": "Block",
              "src": "800:47:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1985,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4678,
                        "src": "817:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 1986,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "817:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "%",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3836343030",
                      "id": 1987,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "835:5:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_86400_by_1",
                        "typeString": "int_const 86400"
                      },
                      "value": "86400"
                    },
                    "src": "817:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1984,
                  "id": 1989,
                  "nodeType": "Return",
                  "src": "810:30:9"
                }
              ]
            },
            "documentation": "@dev Sets the current day for the contract",
            "id": 1991,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentDay",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1981,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "767:2:9"
            },
            "returnParameters": {
              "id": 1984,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1983,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1991,
                  "src": "791:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1982,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "791:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "790:9:9"
            },
            "scope": 2024,
            "src": "745:102:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2022,
              "nodeType": "Block",
              "src": "1072:237:9",
              "statements": [
                {
                  "assignments": [
                    1997
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1997,
                      "name": "currentDay",
                      "nodeType": "VariableDeclaration",
                      "scope": 2022,
                      "src": "1082:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1996,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1082:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2000,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1998,
                      "name": "getCurrentDay",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1991,
                      "src": "1103:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 1999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1103:15:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1082:36:9"
                },
                {
                  "assignments": [
                    2002
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2002,
                      "name": "dailySpend",
                      "nodeType": "VariableDeclaration",
                      "scope": 2022,
                      "src": "1128:18:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2001,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1128:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2008,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2003,
                        "name": "dailyLimitTracker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1946,
                        "src": "1149:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 2005,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2004,
                        "name": "currentDay",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1997,
                        "src": "1167:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1149:29:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2006,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1993,
                      "src": "1181:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1149:38:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1128:59:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2012,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2010,
                          "name": "dailySpend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2002,
                          "src": "1205:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2011,
                          "name": "dailyLimit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1942,
                          "src": "1219:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1205:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4461696c79206c696d69742072656163686564",
                        "id": 2013,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1231:21:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3f50b2936f8688a29ea35871896e59170fb964cb0d9b64b323b2a7e6b1330de2",
                          "typeString": "literal_string \"Daily limit reached\""
                        },
                        "value": "Daily limit reached"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3f50b2936f8688a29ea35871896e59170fb964cb0d9b64b323b2a7e6b1330de2",
                          "typeString": "literal_string \"Daily limit reached\""
                        }
                      ],
                      "id": 2009,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4691,
                        4692
                      ],
                      "referencedDeclaration": 4692,
                      "src": "1197:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1197:56:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2015,
                  "nodeType": "ExpressionStatement",
                  "src": "1197:56:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2016,
                        "name": "dailyLimitTracker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1946,
                        "src": "1263:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 2018,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2017,
                        "name": "currentDay",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1997,
                        "src": "1281:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1263:29:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2019,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1993,
                      "src": "1296:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1263:39:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2021,
                  "nodeType": "ExpressionStatement",
                  "src": "1263:39:9"
                }
              ]
            },
            "documentation": "@dev Check the daily limit for a user\n @param _value Value being sent with the current transaction",
            "id": 2023,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkDailyTransactionLimit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1994,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1993,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 2023,
                  "src": "1047:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1992,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1047:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1046:16:9"
            },
            "returnParameters": {
              "id": 1995,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1072:0:9"
            },
            "scope": 2024,
            "src": "1011:298:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 2025,
        "src": "59:1252:9"
      }
    ],
    "src": "0:1311:9"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.8+commit.23d335f2.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.11",
  "updatedAt": "2019-07-12T19:22:56.372Z",
  "devdoc": {
    "methods": {
      "addAuthKey(address)": {
        "details": "Add an auth key to the list of auth keys",
        "params": {
          "_authKey": "Address of the auth key to add"
        }
      },
      "addMultipleAuthKeys(address[])": {
        "details": "Add multiple auth keys to the list of auth keys",
        "params": {
          "_authKeys": "Array of addresses to add to the auth keys list"
        }
      },
      "changeDailyLimit(uint256)": {
        "details": "Change the daily limit for a user_newDailyLimit New daily limit to set"
      },
      "executeTransaction(uint256,address,uint256,bytes)": {
        "details": "Execute a transaction",
        "params": {
          "_data": "Data of the transaction",
          "_destination": "Destination of the transaction",
          "_nonce": "Nonce of the transaction",
          "_value": "Value of the transaction"
        }
      },
      "getAuthKeysArrayLength()": {
        "details": "Return the length of the authKeysArray"
      },
      "getCurrentDay()": {
        "details": "Sets the current day for the contract"
      },
      "removeAuthKey(address)": {
        "details": "Remove an auth key from the list of auth keys",
        "params": {
          "_authKey": "Address of the auth key to remove"
        }
      },
      "removeMultipleAuthKeys(address[])": {
        "details": "Remove multiple auth keys to the list of auth keys",
        "params": {
          "_authKeys": "Array of addresses to remove to the auth keys list"
        }
      },
      "swapAuthKeys(address,address)": {
        "details": "Swap one authKey for a non-authKey",
        "params": {
          "_newAuthKey": "A non-existing authKey",
          "_oldAuthKey": "An existing authKey"
        }
      },
      "swapMultipleAuthKeys(address[],address[])": {
        "details": "Swap multiple auth keys to the list of auth keys",
        "params": {
          "_newAuthKeys": "Array of addresses to add to the auth keys list",
          "_oldAuthKeys": "Array of addresses to remove to the auth keys list"
        }
      },
      "validateLoginKeyMetaTxSigs(bytes32,bytes,bytes)": {
        "details": "Validate signatures from an AuthKeyMetaTx",
        "params": {
          "_loginKeyAuthorizationSignature": "Signed loginKey",
          "_transactionDataSignature": "Signed tx data",
          "_txDataMessageHash": "Ethereum signed message of the transaction"
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "executeTransaction(uint256,address,uint256,bytes)": {
        "notice": "This is to be called directly by an AuthKey"
      },
      "initialize()": {
        "notice": "Public functions"
      }
    }
  }
}