{
  "_format": "hh-sol-artifact-1",
  "contractName": "ApproveTransferTest",
  "sourceName": "contracts/compliance/legacy/test/ApproveTransferTest.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "AgentAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "AgentRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "ApprovalRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "TokenAgentAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "TokenAgentRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "TokenBound",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "TokenUnbound",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "TransferApproved",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "addTokenAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "approveAndTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "approveTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "bindToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "canTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "complianceCheckOnApproveTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "created",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "destroyed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "isTokenAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "isTokenBound",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "removeApproval",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "removeTokenAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenBound",
      "outputs": [
        {
          "internalType": "contract IToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transferred",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "unbindToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61126c8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806384e79842116100b857806397a6278e1161007c57806397a6278e14610264578063993e8b9514610277578063cdde29321461028a578063e46638e61461029d578063f2fde38b146102b0578063ff3e6954146102c357600080fd5b806384e79842146102065780638baf29b4146102195780638d2ea772146101d85780638da5cb5b1461022c57806393e62f071461025157600080fd5b806340db3b50116100ff57806340db3b50146101b257806356db9096146101c55780635f8dead3146101d8578063715018a6146101eb57806382580805146101f357600080fd5b80630e20cc851461013c5780631ffbb064146101515780632ca9ea4314610179578063346531fa1461018c5780633ff5aa021461019f575b600080fd5b61014f61014a3660046110bb565b6102d6565b005b61016461015f3660046110f7565b610366565b60405190151581526020015b60405180910390f35b61014f6101873660046110bb565b610379565b61016461019a3660046110f7565b610512565b61014f6101ad3660046110f7565b6105bb565b61014f6101c03660046110f7565b6106a0565b6101646101d33660046110bb565b6107c2565b61014f6101e6366004611112565b61081f565b61014f610847565b61014f6102013660046110bb565b61085b565b61014f6102143660046110f7565b6109e1565b61014f6102273660046110bb565b610a81565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610170565b600354610239906001600160a01b031681565b61014f6102723660046110f7565b610ab5565b6101646102853660046110f7565b610b55565b61014f6102983660046110f7565b610b75565b6101646102ab3660046110bb565b610c36565b61014f6102be3660046110f7565b610c4f565b61014f6102d13660046110f7565b610cc8565b6102e183838361085b565b6003546040516323b872dd60e01b81526001600160a01b038581166004830152848116602483015260448201849052909116906323b872dd906064016020604051808303816000875af115801561033c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610360919061113c565b50505050565b6000610373600183610d8d565b92915050565b3361038c6000546001600160a01b031690565b6001600160a01b0316148061040857506003546040516307feec1960e21b81523360048201526001600160a01b0390911690631ffbb06490602401602060405180830381865afa1580156103e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610408919061113c565b61042d5760405162461bcd60e51b81526004016104249061115e565b60405180910390fd5b60035460009061044b908590859085906001600160a01b0316610e10565b60008181526004602052604090205490915060ff166104ac5760405162461bcd60e51b815260206004820152601960248201527f7472616e73666572206e6f7420617070726f76656420796574000000000000006044820152606401610424565b60008181526004602052604090819020805460ff1916905560035490517f611476e33c1d844d9fa71ba7de6e7130e18b22971d28580fd76321e4af69635691610504918791879187916001600160a01b0316906111a1565b60405180910390a150505050565b6001600160a01b03811660009081526002602052604081205460ff161580156105a657506003546040516307feec1960e21b81526001600160a01b03848116600483015290911690631ffbb06490602401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a4919061113c565b155b156105b357506000919050565b506001919050565b336105ce6000546001600160a01b031690565b6001600160a01b031614806105ff57506003546001600160a01b03161580156105ff5750336001600160a01b038216145b61064b5760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e6572206f7220746f6b656e2063616e2063616c6c000000006044820152606401610424565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f2de35142b19ed5a07796cf30791959c592018f70b1d2d7c460eef8ffe713692b906020015b60405180910390a150565b336106b36000546001600160a01b031690565b6001600160a01b031614806106d05750336001600160a01b038216145b61071c5760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e6572206f7220746f6b656e2063616e2063616c6c000000006044820152606401610424565b6003546001600160a01b038281169116146107795760405162461bcd60e51b815260206004820152601760248201527f5468697320746f6b656e206973206e6f7420626f756e640000000000000000006044820152606401610424565b600380546001600160a01b03191690556040516001600160a01b03821681527f28a4ca7134a3b3f9aff286e79ad3daadb4a06d1b43d037a3a98bdc074edd9b7a90602001610695565b60006107cd84610512565b610814576003546000906107ef908690869086906001600160a01b0316610e10565b60008181526004602052604090205490915060ff16610812576000915050610818565b505b5060015b9392505050565b610827610e4c565b6108435760405162461bcd60e51b8152600401610424906111cc565b5050565b61084f610e5c565b6108596000610eb6565b565b3361086e6000546001600160a01b031690565b6001600160a01b031614806108ea57506003546040516307feec1960e21b81523360048201526001600160a01b0390911690631ffbb06490602401602060405180830381865afa1580156108c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ea919061113c565b6109065760405162461bcd60e51b81526004016104249061115e565b600354600090610924908590859085906001600160a01b0316610e10565b60008181526004602052604090205490915060ff16156109865760405162461bcd60e51b815260206004820152601960248201527f7472616e7366657220616c726561647920617070726f766564000000000000006044820152606401610424565b60008181526004602052604090819020805460ff1916600117905560035490517f776c895685d60b5ac3aa2c3381ed2b021825c000fbb0d8ff1359636700aa165191610504918791879187916001600160a01b0316906111a1565b6109e9610e5c565b6001600160a01b038116610a3f5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420617267756d656e74202d207a65726f2061646472657373006044820152606401610424565b610a4a600182610f06565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b610a89610e4c565b610aa55760405162461bcd60e51b8152600401610424906111cc565b610ab0838383610f82565b505050565b610abd610e5c565b6001600160a01b038116610b135760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420617267756d656e74202d207a65726f2061646472657373006044820152606401610424565b610b1e600182610f8d565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6003546000906001600160a01b038381169116146105b357506000919050565b610b7d610e5c565b6001600160a01b03811660009081526002602052604090205460ff16610be55760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e74206973206e6f742072656769737465726564207965746044820152606401610424565b6001600160a01b038116600081815260026020908152604091829020805460ff1916905590519182527f6a659bb87bb23efbdc295f8eed8ae8c4379bfb77660ced2ef0f3d7d26b05c6a69101610695565b6000610c438484846107c2565b61081457506000610818565b610c57610e5c565b6001600160a01b038116610cbc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610424565b610cc581610eb6565b50565b610cd0610e5c565b6001600160a01b03811660009081526002602052604090205460ff1615610d395760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e7420697320616c726561647920726567697374657265646044820152606401610424565b6001600160a01b038116600081815260026020908152604091829020805460ff1916600117905590519182527fd62c45e13ac30396aceb3ad37c89bd1ba9048032fe61679000e92eb93dbfd67d9101610695565b60006001600160a01b038216610df05760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610424565b506001600160a01b03166000908152602091909152604090205460ff1690565b60008085858585604051602001610e2a94939291906111a1565b60408051808303601f1901815291905280516020909101209695505050505050565b6000610e5733610b55565b905090565b6000546001600160a01b031633146108595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610424565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f108282610d8d565b15610f5d5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610424565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610ab083838361100f565b610f978282610d8d565b610fed5760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610424565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b60035460009061102d908590859085906001600160a01b0316610e10565b60008181526004602052604090205490915060ff16156103605760008181526004602052604090819020805460ff1916905560035490517f611476e33c1d844d9fa71ba7de6e7130e18b22971d28580fd76321e4af69635691610504918791879187916001600160a01b0316906111a1565b80356001600160a01b03811681146110b657600080fd5b919050565b6000806000606084860312156110d057600080fd5b6110d98461109f565b92506110e76020850161109f565b9150604084013590509250925092565b60006020828403121561110957600080fd5b6108188261109f565b6000806040838503121561112557600080fd5b61112e8361109f565b946020939093013593505050565b60006020828403121561114e57600080fd5b8151801515811461081857600080fd5b60208082526023908201527f63616e2062652063616c6c6564206f6e6c792062792041646d696e206164647260408201526265737360e81b606082015260800190565b6001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b60208082526044908201527f6572726f72203a20746869732061646472657373206973206e6f74206120746f60408201527f6b656e20626f756e6420746f2074686520636f6d706c69616e636520636f6e746060820152631c9858dd60e21b608082015260a0019056fea2646970667358221220a2d0b2c22cf5007027ef54b511fd8945c3d47a34328bf5439ab78e1f36e2b9c464736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806384e79842116100b857806397a6278e1161007c57806397a6278e14610264578063993e8b9514610277578063cdde29321461028a578063e46638e61461029d578063f2fde38b146102b0578063ff3e6954146102c357600080fd5b806384e79842146102065780638baf29b4146102195780638d2ea772146101d85780638da5cb5b1461022c57806393e62f071461025157600080fd5b806340db3b50116100ff57806340db3b50146101b257806356db9096146101c55780635f8dead3146101d8578063715018a6146101eb57806382580805146101f357600080fd5b80630e20cc851461013c5780631ffbb064146101515780632ca9ea4314610179578063346531fa1461018c5780633ff5aa021461019f575b600080fd5b61014f61014a3660046110bb565b6102d6565b005b61016461015f3660046110f7565b610366565b60405190151581526020015b60405180910390f35b61014f6101873660046110bb565b610379565b61016461019a3660046110f7565b610512565b61014f6101ad3660046110f7565b6105bb565b61014f6101c03660046110f7565b6106a0565b6101646101d33660046110bb565b6107c2565b61014f6101e6366004611112565b61081f565b61014f610847565b61014f6102013660046110bb565b61085b565b61014f6102143660046110f7565b6109e1565b61014f6102273660046110bb565b610a81565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610170565b600354610239906001600160a01b031681565b61014f6102723660046110f7565b610ab5565b6101646102853660046110f7565b610b55565b61014f6102983660046110f7565b610b75565b6101646102ab3660046110bb565b610c36565b61014f6102be3660046110f7565b610c4f565b61014f6102d13660046110f7565b610cc8565b6102e183838361085b565b6003546040516323b872dd60e01b81526001600160a01b038581166004830152848116602483015260448201849052909116906323b872dd906064016020604051808303816000875af115801561033c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610360919061113c565b50505050565b6000610373600183610d8d565b92915050565b3361038c6000546001600160a01b031690565b6001600160a01b0316148061040857506003546040516307feec1960e21b81523360048201526001600160a01b0390911690631ffbb06490602401602060405180830381865afa1580156103e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610408919061113c565b61042d5760405162461bcd60e51b81526004016104249061115e565b60405180910390fd5b60035460009061044b908590859085906001600160a01b0316610e10565b60008181526004602052604090205490915060ff166104ac5760405162461bcd60e51b815260206004820152601960248201527f7472616e73666572206e6f7420617070726f76656420796574000000000000006044820152606401610424565b60008181526004602052604090819020805460ff1916905560035490517f611476e33c1d844d9fa71ba7de6e7130e18b22971d28580fd76321e4af69635691610504918791879187916001600160a01b0316906111a1565b60405180910390a150505050565b6001600160a01b03811660009081526002602052604081205460ff161580156105a657506003546040516307feec1960e21b81526001600160a01b03848116600483015290911690631ffbb06490602401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a4919061113c565b155b156105b357506000919050565b506001919050565b336105ce6000546001600160a01b031690565b6001600160a01b031614806105ff57506003546001600160a01b03161580156105ff5750336001600160a01b038216145b61064b5760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e6572206f7220746f6b656e2063616e2063616c6c000000006044820152606401610424565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f2de35142b19ed5a07796cf30791959c592018f70b1d2d7c460eef8ffe713692b906020015b60405180910390a150565b336106b36000546001600160a01b031690565b6001600160a01b031614806106d05750336001600160a01b038216145b61071c5760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e6572206f7220746f6b656e2063616e2063616c6c000000006044820152606401610424565b6003546001600160a01b038281169116146107795760405162461bcd60e51b815260206004820152601760248201527f5468697320746f6b656e206973206e6f7420626f756e640000000000000000006044820152606401610424565b600380546001600160a01b03191690556040516001600160a01b03821681527f28a4ca7134a3b3f9aff286e79ad3daadb4a06d1b43d037a3a98bdc074edd9b7a90602001610695565b60006107cd84610512565b610814576003546000906107ef908690869086906001600160a01b0316610e10565b60008181526004602052604090205490915060ff16610812576000915050610818565b505b5060015b9392505050565b610827610e4c565b6108435760405162461bcd60e51b8152600401610424906111cc565b5050565b61084f610e5c565b6108596000610eb6565b565b3361086e6000546001600160a01b031690565b6001600160a01b031614806108ea57506003546040516307feec1960e21b81523360048201526001600160a01b0390911690631ffbb06490602401602060405180830381865afa1580156108c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ea919061113c565b6109065760405162461bcd60e51b81526004016104249061115e565b600354600090610924908590859085906001600160a01b0316610e10565b60008181526004602052604090205490915060ff16156109865760405162461bcd60e51b815260206004820152601960248201527f7472616e7366657220616c726561647920617070726f766564000000000000006044820152606401610424565b60008181526004602052604090819020805460ff1916600117905560035490517f776c895685d60b5ac3aa2c3381ed2b021825c000fbb0d8ff1359636700aa165191610504918791879187916001600160a01b0316906111a1565b6109e9610e5c565b6001600160a01b038116610a3f5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420617267756d656e74202d207a65726f2061646472657373006044820152606401610424565b610a4a600182610f06565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b610a89610e4c565b610aa55760405162461bcd60e51b8152600401610424906111cc565b610ab0838383610f82565b505050565b610abd610e5c565b6001600160a01b038116610b135760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420617267756d656e74202d207a65726f2061646472657373006044820152606401610424565b610b1e600182610f8d565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6003546000906001600160a01b038381169116146105b357506000919050565b610b7d610e5c565b6001600160a01b03811660009081526002602052604090205460ff16610be55760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e74206973206e6f742072656769737465726564207965746044820152606401610424565b6001600160a01b038116600081815260026020908152604091829020805460ff1916905590519182527f6a659bb87bb23efbdc295f8eed8ae8c4379bfb77660ced2ef0f3d7d26b05c6a69101610695565b6000610c438484846107c2565b61081457506000610818565b610c57610e5c565b6001600160a01b038116610cbc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610424565b610cc581610eb6565b50565b610cd0610e5c565b6001600160a01b03811660009081526002602052604090205460ff1615610d395760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e7420697320616c726561647920726567697374657265646044820152606401610424565b6001600160a01b038116600081815260026020908152604091829020805460ff1916600117905590519182527fd62c45e13ac30396aceb3ad37c89bd1ba9048032fe61679000e92eb93dbfd67d9101610695565b60006001600160a01b038216610df05760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610424565b506001600160a01b03166000908152602091909152604090205460ff1690565b60008085858585604051602001610e2a94939291906111a1565b60408051808303601f1901815291905280516020909101209695505050505050565b6000610e5733610b55565b905090565b6000546001600160a01b031633146108595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610424565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f108282610d8d565b15610f5d5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610424565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610ab083838361100f565b610f978282610d8d565b610fed5760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610424565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b60035460009061102d908590859085906001600160a01b0316610e10565b60008181526004602052604090205490915060ff16156103605760008181526004602052604090819020805460ff1916905560035490517f611476e33c1d844d9fa71ba7de6e7130e18b22971d28580fd76321e4af69635691610504918791879187916001600160a01b0316906111a1565b80356001600160a01b03811681146110b657600080fd5b919050565b6000806000606084860312156110d057600080fd5b6110d98461109f565b92506110e76020850161109f565b9150604084013590509250925092565b60006020828403121561110957600080fd5b6108188261109f565b6000806040838503121561112557600080fd5b61112e8361109f565b946020939093013593505050565b60006020828403121561114e57600080fd5b8151801515811461081857600080fd5b60208082526023908201527f63616e2062652063616c6c6564206f6e6c792062792041646d696e206164647260408201526265737360e81b606082015260800190565b6001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b60208082526044908201527f6572726f72203a20746869732061646472657373206973206e6f74206120746f60408201527f6b656e20626f756e6420746f2074686520636f6d706c69616e636520636f6e746060820152631c9858dd60e21b608082015260a0019056fea2646970667358221220a2d0b2c22cf5007027ef54b511fd8945c3d47a34328bf5439ab78e1f36e2b9c464736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
