{
    "_format": "hh-sol-artifact-1",
    "contractName": "LockedNORI",
    "sourceName": "contracts/LockedNORI.sol",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Approval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "tokenHolder",
                    "type": "address"
                }
            ],
            "name": "AuthorizedOperator",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "operatorData",
                    "type": "bytes"
                }
            ],
            "name": "Burned",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "operatorData",
                    "type": "bytes"
                }
            ],
            "name": "Minted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Paused",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "tokenHolder",
                    "type": "address"
                }
            ],
            "name": "RevokedOperator",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "previousAdminRole",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "newAdminRole",
                    "type": "bytes32"
                }
            ],
            "name": "RoleAdminChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleGranted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleRevoked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "operatorData",
                    "type": "bytes"
                }
            ],
            "name": "Sent",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address[]",
                    "name": "recipients",
                    "type": "address[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint256[]",
                    "name": "amounts",
                    "type": "uint256[]"
                },
                {
                    "indexed": false,
                    "internalType": "bytes[]",
                    "name": "userData",
                    "type": "bytes[]"
                },
                {
                    "indexed": false,
                    "internalType": "bytes[]",
                    "name": "operatorData",
                    "type": "bytes[]"
                },
                {
                    "indexed": false,
                    "internalType": "bool[]",
                    "name": "requireReceptionAck",
                    "type": "bool[]"
                }
            ],
            "name": "SentBatch",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "startTime",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "vestEndTime",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "unlockEndTime",
                    "type": "uint256"
                }
            ],
            "name": "TokenGrantCreated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "quantity",
                    "type": "uint256"
                }
            ],
            "name": "TokensClaimed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Transfer",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Unpaused",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "atTime",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "quantity",
                    "type": "uint256"
                }
            ],
            "name": "UnvestedTokensRevoked",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "DEFAULT_ADMIN_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "ERC777_TOKENS_RECIPIENT_HASH",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "PAUSER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "TOKEN_GRANTER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "holder",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                }
            ],
            "name": "allowance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "approve",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                }
            ],
            "name": "authorizeOperator",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "tokenHolder",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "accounts",
                    "type": "address[]"
                }
            ],
            "name": "balanceOfBatch",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "",
                    "type": "uint256[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "accounts",
                    "type": "address[]"
                }
            ],
            "name": "batchGetGrant",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "grantAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "recipient",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "startTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "vestEndTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "unlockEndTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "cliff1Time",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "cliff2Time",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "vestCliff1Amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "vestCliff2Amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "unlockCliff1Amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "unlockCliff2Amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "claimedAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "originalAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "lastRevocationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "lastQuantityRevoked",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bool",
                            "name": "exists",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct LockedNORI.TokenGrantDetail[]",
                    "name": "",
                    "type": "tuple[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "fromAccounts",
                    "type": "address[]"
                },
                {
                    "internalType": "address[]",
                    "name": "toAccounts",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "atTimes",
                    "type": "uint256[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "amounts",
                    "type": "uint256[]"
                }
            ],
            "name": "batchRevokeUnvestedTokenAmounts",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "recipients",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "amounts",
                    "type": "uint256[]"
                },
                {
                    "internalType": "bytes[]",
                    "name": "userData",
                    "type": "bytes[]"
                },
                {
                    "internalType": "bytes[]",
                    "name": "operatorData",
                    "type": "bytes[]"
                },
                {
                    "internalType": "bool[]",
                    "name": "requireReceptionAck",
                    "type": "bool[]"
                }
            ],
            "name": "batchSend",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "name": "burn",
            "outputs": [],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "startTime",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "vestEndTime",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "unlockEndTime",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "cliff1Time",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "cliff2Time",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "vestCliff1Amount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "vestCliff2Amount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "unlockCliff1Amount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "unlockCliff2Amount",
                    "type": "uint256"
                }
            ],
            "name": "createGrant",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "decimals",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "defaultOperators",
            "outputs": [
                {
                    "internalType": "address[]",
                    "name": "",
                    "type": "address[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "getGrant",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "grantAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "recipient",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "startTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "vestEndTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "unlockEndTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "cliff1Time",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "cliff2Time",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "vestCliff1Amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "vestCliff2Amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "unlockCliff1Amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "unlockCliff2Amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "claimedAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "originalAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "lastRevocationTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "lastQuantityRevoked",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bool",
                            "name": "exists",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct LockedNORI.TokenGrantDetail",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleAdmin",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "uint256",
                    "name": "index",
                    "type": "uint256"
                }
            ],
            "name": "getRoleMember",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleMemberCount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "grantRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "granularity",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "hasRole",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract BridgedPolygonNORI",
                    "name": "bridgedPolygonNoriAddress",
                    "type": "address"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "tokenHolder",
                    "type": "address"
                }
            ],
            "name": "isOperatorFor",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "name",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "name": "operatorBurn",
            "outputs": [],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "name": "operatorSend",
            "outputs": [],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "pause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "paused",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "quantityRevokedFrom",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "renounceRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                }
            ],
            "name": "revokeOperator",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "revokeRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "name": "send",
            "outputs": [],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "symbol",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "userData",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "operatorData",
                    "type": "bytes"
                }
            ],
            "name": "tokensReceived",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSupply",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "transfer",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "transferFrom",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "unlockedBalanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "unpause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "vestedBalanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "withdrawTo",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x608060405234801561001057600080fd5b50615097806100206000396000f3fe608060405234801561001057600080fd5b506004361061027e5760003560e01c806370a082311161015c578063a217fddf116100ce578063d95b637111610087578063d95b6371146105bd578063dd62ed3e146105d0578063e63ab1e914610609578063fad8b32a1461061e578063fc673c4f14610631578063fe9d93031461064457600080fd5b8063a217fddf14610549578063a9059cbb14610551578063bf31dbf414610564578063c4d66de814610584578063ca15c87314610597578063d547741f146105aa57600080fd5b8063959b8c3f11610120578063959b8c3f146104d557806395d89b41146104e85780639952d6e4146104f05780639bd9bbc6146105035780639e3f3cac146105165780639f916c211461052957600080fd5b806370a08231146104535780638456cb591461047c57806384955c88146104845780639010d07c1461049757806391d14854146104c257600080fd5b80632f2ff15d116101f5578063521189a9116101b9578063521189a9146103df578063556f0dc7146104065780635c975abb1461040d57806362ad1b8314610418578063633d9be01461042b57806366cf8bce1461044057600080fd5b80632f2ff15d14610382578063313ce5671461039557806336568abe146103a45780633f4ba83a146103b7578063458c738e146103bf57600080fd5b80630e2d1a2a116102475780630e2d1a2a146102fd57806318160ddd1461031e578063205c28781461032657806323b872dd14610339578063248a9ca31461034c578063271c6e1a1461036f57600080fd5b806223de291461028357806301ffc9a71461029857806306e48538146102c057806306fdde03146102d5578063095ea7b3146102ea575b600080fd5b610296610291366004614033565b610652565b005b6102ab6102a63660046140e3565b6107cb565b60405190151581526020015b60405180910390f35b6102c86107f6565b6040516102b79190614151565b6102dd610858565b6040516102b791906141bc565b6102ab6102f83660046141cf565b6108e1565b61031061030b3660046141fb565b610927565b6040519081526020016102b7565b603454610310565b6102ab6103343660046141cf565b610933565b6102ab610347366004614218565b610a42565b61031061035a366004614259565b600090815260c9602052604090206001015490565b61029661037d366004614272565b610a8d565b6102966103903660046142f1565b610b4e565b604051601281526020016102b7565b6102966103b23660046142f1565b610b79565b610296610bf7565b6103d26103cd366004614427565b610c1b565b6040516102b7919061448b565b6103107fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b81565b6001610310565b60655460ff166102ab565b61029661042636600461450d565b610cdc565b61031060008051602061502283398151915281565b61029661044e3660046146e3565b610d24565b6103106104613660046141fb565b6001600160a01b031660009081526033602052604090205490565b610296611003565b6103106104923660046141fb565b611024565b6104aa6104a53660046147a7565b611030565b6040516001600160a01b0390911681526020016102b7565b6102ab6104d03660046142f1565b611048565b6102966104e33660046141fb565b611073565b6102dd611087565b6102966104fe36600461480d565b611096565b6102966105113660046148bc565b6112a8565b6103106105243660046141fb565b6112e7565b61053c610537366004614914565b611314565b6040516102b79190614a10565b610310600081565b6102ab61055f3660046141cf565b6113d9565b6105776105723660046141fb565b611424565b6040516102b79190614a5f565b6102966105923660046141fb565b611520565b6103106105a5366004614259565b611776565b6102966105b83660046142f1565b61178d565b6102ab6105cb366004614a6e565b6117b3565b6103106105de366004614a6e565b6001600160a01b039182166000908152603b6020908152604080832093909416825291909152205490565b61031060008051602061504283398151915281565b61029661062c3660046141fb565b611854565b61029661063f366004614a9c565b611868565b61029661063f366004614b1b565b610160546001600160a01b0316336001600160a01b0316146106bb5760405162461bcd60e51b815260206004820152601d60248201527f6c4e4f52493a206e6f742042726964676564506f6c79676f6e4e4f524900000060448201526064015b60405180910390fd5b6106d360008051602061502283398151915289611048565b6107385760405162461bcd60e51b815260206004820152603060248201527f6c4e4f52493a2073656e646572206973206d697373696e6720726f6c6520544f60448201526f4b454e5f4752414e5445525f524f4c4560801b60648201526084016106b2565b6000610746848601866141fb565b90506001600160a01b0381166107b25760405162461bcd60e51b815260206004820152602b60248201527f6c4e4f52493a20746f6b656e2073656e64206d697373696e672072657175697260448201526a656420757365724461746160a81b60648201526084016106b2565b6107bf86868686866118b0565b50505050505050505050565b60006001600160e01b03198216635a05180f60e01b14806107f057506107f082611a0d565b92915050565b6060603780548060200260200160405190810160405280929190818152602001828054801561084e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610830575b5050505050905090565b60606035805461086790614b61565b80601f016020809104026020016040519081016040528092919081815260200182805461089390614b61565b801561084e5780601f106108b55761010080835404028352916020019161084e565b820191906000526020600020905b8154815290600101906020018083116108c357509395945050505050565b60006108ef60655460ff1690565b1561090c5760405162461bcd60e51b81526004016106b290614b9b565b6109168383611a42565b6109208383611a8a565b9392505050565b60006107f08242611aa2565b33600081815261015f60209081526040808320815180840183528481528251938401909252838352929361096a9290918691611b8a565b61016054604051634decdde360e11b81526001600160a01b03868116600483015260248201869052606060448301526000606483015290911690639bd9bbc690608401600060405180830381600087803b1580156109c757600080fd5b505af11580156109db573d6000803e3d6000fd5b505050508281600d0160008282546109f39190614bdb565b90915550506040518381526001600160a01b0385169033907fa86305abc2db271df4609aa86a8d044bc11fb36939841bfdad6c1ab2b26e94719060200160405180910390a35060019392505050565b60405162461bcd60e51b815260206004820152601c60248201527f6c4e4f52493a207472616e7366657246726f6d2064697361626c65640000000060448201526000906064016106b2565b60655460ff1615610ab05760405162461bcd60e51b81526004016106b290614b9b565b600080516020615022833981519152610ac98133611d4c565b604080516001600160a01b038d1660208201529081018b9052606081018a90526080810189905260a0810188905260c0810187905260e08101869052610100810185905261012081018490526101408101839052600090610160016040516020818303038152906040529050610b3f8d82611db0565b50505050505050505050505050565b600082815260c96020526040902060010154610b6a8133611d4c565b610b748383612195565b505050565b6001600160a01b0381163314610be95760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106b2565b610bf382826121a9565b5050565b600080516020615042833981519152610c108133611d4c565b610c186121bd565b50565b6060600082516001600160401b03811115610c3857610c38614321565b604051908082528060200260200182016040528015610c61578160200160208202803683370190505b50905060005b8351811015610cd557610ca8848281518110610c8557610c85614bf3565b60200260200101516001600160a01b031660009081526033602052604090205490565b828281518110610cba57610cba614bf3565b6020908102919091010152610cce81614c09565b9050610c67565b5092915050565b60405162461bcd60e51b815260206004820152601c60248201527f6c4e4f52493a206f70657261746f7253656e642064697361626c65640000000060448201526064016106b2565b8351855114610d985760405162461bcd60e51b8152602060048201526046602482015260008051602061500283398151915260448201527f3a20726563697069656e7420616e6420616d6f756e74206c656e677468206d696064820152650e6dac2e8c6d60d31b608482015260a4016106b2565b8251845114610e0c5760405162461bcd60e51b8152602060048201526046602482015260008051602061500283398151915260448201527f3a20616d6f756e747320616e64207573657244617461206c656e677468206d696064820152650e6dac2e8c6d60d31b608482015260a4016106b2565b8151835114610e855760405162461bcd60e51b815260206004820152604b602482015260008051602061500283398151915260448201527f3a20757365724461746120616e64206f70657261746f7244617461206c656e6760648201526a0e8d040dad2e6dac2e8c6d60ab1b608482015260a4016106b2565b8051825114610f095760405162461bcd60e51b8152602060048201526056602482015260008051602061500283398151915260448201527f3a206f70657261746f724461746120616e6420726571756972655265636570746064820152750d2dedc82c6d640d8cadccee8d040dad2e6dac2e8c6d60531b608482015260a4016106b2565b60005b8551811015610fb257610fa033878381518110610f2b57610f2b614bf3565b6020026020010151878481518110610f4557610f45614bf3565b6020026020010151878581518110610f5f57610f5f614bf3565b6020026020010151878681518110610f7957610f79614bf3565b6020026020010151878781518110610f9357610f93614bf3565b6020026020010151612250565b80610faa81614c09565b915050610f0c565b50336001600160a01b03167fd5865ae34f92a2d6a803fa13140b8165046f54e61e68560b26950c62a668c6b68686868686604051610ff4959493929190614c77565b60405180910390a25050505050565b60008051602061504283398151915261101c8133611d4c565b610c1861233c565b60006107f08242612394565b600082815260fb602052604081206109209083612485565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61107e816000611a42565b610c1881612491565b60606036805461086790614b61565b60655460ff16156110b95760405162461bcd60e51b81526004016106b290614b9b565b6000805160206150228339815191526110d28133611d4c565b87861461113c5760405162461bcd60e51b815260206004820152603260248201527f6c4e4f52493a2066726f6d4163636f756e747320616e6420746f4163636f756e6044820152710e8e640d8cadccee8d040dad2e6dac2e8c6d60731b60648201526084016106b2565b8584146111a15760405162461bcd60e51b815260206004820152602d60248201527f6c4e4f52493a20746f4163636f756e747320616e6420617454696d6573206c6560448201526c0dccee8d040dad2e6dac2e8c6d609b1b60648201526084016106b2565b8382146112035760405162461bcd60e51b815260206004820152602a60248201527f6c4e4f52493a20617454696d657320616e6420616d6f756e7473206c656e67746044820152690d040dad2e6dac2e8c6d60b31b60648201526084016106b2565b60005b888110156107bf576112968a8a8381811061122357611223614bf3565b905060200201602081019061123891906141fb565b89898481811061124a5761124a614bf3565b905060200201602081019061125f91906141fb565b88888581811061127157611271614bf3565b9050602002013587878681811061128a5761128a614bf3565b905060200201356125ae565b806112a081614c09565b915050611206565b60405162461bcd60e51b81526020600482015260146024820152731b1393d4924e881cd95b9908191a5cd8589b195960621b60448201526064016106b2565b6001600160a01b038116600090815261015f60205260408120600c810154600e8201546109209190614d0c565b60606000826001600160401b0381111561133057611330614321565b60405190808252806020026020018201604052801561136957816020015b611356613e60565b81526020019060019003908161134e5790505b50905060005b838110156113d1576113a185858381811061138c5761138c614bf3565b905060200201602081019061057291906141fb565b8282815181106113b3576113b3614bf3565b602002602001018190525080806113c990614c09565b91505061136f565b509392505050565b60405162461bcd60e51b815260206004820152601860248201527f6c4e4f52493a207472616e736665722064697361626c6564000000000000000060448201526000906064016106b2565b61142c613e60565b506001600160a01b0316600081815261015f60209081526040808320815161020081018352600c82015481528084019590955260068101548583015260018082015460608701526007820154608087015284805260098201808552838620805460a0890152828752818652848720805460c08a01528780526003850180885286892085015460e08b01528489528752948720830154610100890152820154610120880152948190529390925290910154610140830152600d810154610160830152600e81015461018083015260108101546101a083015260118101546101c0830152600f015460ff1615156101e082015290565b600054610100900460ff1661153b5760005460ff161561153f565b303b155b6115a25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106b2565b600054610100900460ff161580156115c4576000805461ffff19166101011790555b6040805160018082528183019092526000916020808301908036833701905050905033816000815181106115fa576115fa614bf3565b60200260200101906001600160a01b031690816001600160a01b031681525050611622612967565b61162a612967565b611632612967565b61163a612967565b611642612990565b61164a6129c3565b6116956040518060400160405280600b81526020016a4c6f636b6564204e4f524960a81b815250604051806040016040528060058152602001646c4e4f524960d81b81525083612a0d565b61016080546001600160a01b0319166001600160a01b0385161790556040516329965a1d60e01b815230600482018190527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b15801561172a57600080fd5b505af115801561173e573d6000803e3d6000fd5b5050505061176060008051602061502283398151915261175b3390565b612195565b508015610bf3576000805461ff00191690555050565b600081815260fb602052604081206107f090612bf7565b600082815260c960205260409020600101546117a98133611d4c565b610b7483836121a9565b6000816001600160a01b0316836001600160a01b0316148061181e57506001600160a01b03831660009081526038602052604090205460ff16801561181e57506001600160a01b038083166000908152603a602090815260408083209387168352929052205460ff16155b806109205750506001600160a01b0390811660009081526039602090815260408083209490931682529290925290205460ff1690565b61185f816000611a42565b610c1881612c01565b60405162461bcd60e51b815260206004820152601c60248201527f6c4e4f52493a206275726e696e67206e6f7420737570706f727465640000000060448201526064016106b2565b6000806118bf85870187614d23565b60208101519091501561190c5761190c8787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611db092505050565b80516001600160a01b0316600090815261015f60205260409020600f015460ff166119875760405162461bcd60e51b815260206004820152602560248201527f6c4e4f52493a2043616e6e6f74206465706f73697420776974686f757420612060448201526419dc985b9d60da1b60648201526084016106b2565b611a0081600001518888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250612d1c92505050565b5060019695505050505050565b60006001600160e01b03198216637965db0b60e01b14806107f057506301ffc9a760e01b6001600160e01b03198316146107f0565b60405162461bcd60e51b815260206004820181905260248201527f6c4e4f52493a206f70657261746f7220616374696f6e732064697361626c656460448201526064016106b2565b600033611a98818585612d30565b5060019392505050565b6001600160a01b038216600081815261015f602052604080822090516370a0823160e01b815260048101939093529091829030906370a0823190602401602060405180830381865afa158015611afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b209190614d7a565b600f83015490915060ff1615611b8257611b3985612e57565b15611b6b57600d820154611b5a611b508487612e88565b84600c0154612ea8565b611b649190614d0c565b9050611b82565b81600d015482600c0154611b7f9190614d0c565b90505b949350505050565b6001600160a01b038416611beb5760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016106b2565b33611bfb81866000878787612ebe565b611c088186600087612fe5565b6001600160a01b03851660009081526033602052604090205484811015611c7d5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b60648201526084016106b2565b6001600160a01b0386166000908152603360205260408120868303905560348054879290611cac908490614d0c565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098878787604051611cfa93929190614d93565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050505050565b611d568282611048565b610bf357611d6e816001600160a01b03166014613125565b611d79836020613125565b604051602001611d8a929190614dbe565b60408051601f198184030181529082905262461bcd60e51b82526106b2916004016141bc565b600081806020019051810190611dc69190614e43565b80519091506001600160a01b0316611e305760405162461bcd60e51b815260206004820152602760248201527f6c4e4f52493a20526563697069656e742063616e6e6f74206265207a65726f206044820152666164647265737360c81b60648201526084016106b2565b611e4c6000805160206150228339815191528260000151611048565b15611ea85760405162461bcd60e51b815260206004820152602660248201527f6c4e4f52493a20526563697069656e742063616e6e6f74206265206772616e746044820152651030b236b4b760d11b60648201526084016106b2565b8060600151816020015110611f175760405162461bcd60e51b815260206004820152602f60248201527f6c4e4f52493a20756e6c6f636b456e6454696d652063616e6e6f74206265206260448201526e65666f726520737461727454696d6560881b60648201526084016106b2565b80606001514210611f7d5760405162461bcd60e51b815260206004820152602a60248201527f6c4e4f52493a20756e6c6f636b456e6454696d652063616e6e6f7420626520696044820152691b881d1a19481c185cdd60b21b60648201526084016106b2565b80516001600160a01b0316600090815261015f60205260409020600f015460ff1615611feb5760405162461bcd60e51b815260206004820152601b60248201527f6c4e4f52493a204772616e7420616c726561647920657869737473000000000060448201526064016106b2565b80516001600160a01b0316600090815261015f6020908152604091829020600c8101869055600e8101869055600f8101805460ff191660011790559083015191830151909110156120e5578161010001518260c0015110158061205757508161012001518260e0015110155b6120a35760405162461bcd60e51b815260206004820181905260248201527f6c4e4f52493a20756e6c6f636b20636c696666203e207665737420636c69666660448201526064016106b2565b600281018490556020820151815560408201516001820155608082015160c08301516120d09183916132c0565b60a082015160e08301516120e59183916132c0565b600881018490556020820151600682019081556060830151600783015560808301516101008401516121189291906132c0565b60a08201516101208301516121319160068401916132c0565b81602001518483600001516001600160a01b03167f17161516b6ce34594617177a800b150a86ddee02c06993a73ef000a02367d11985604001518660600151604051612187929190918252602082015260400190565b60405180910390a450505050565b61219f82826134f4565b610bf3828261359c565b6121b382826134f4565b610bf382826135be565b60655460ff166122065760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106b2565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0386166122b15760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016106b2565b6001600160a01b0385166123075760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f206164647265737360448201526064016106b2565b33612316818888888888612ebe565b6123248188888888886135e0565b61233381888888888888613752565b50505050505050565b60655460ff161561235f5760405162461bcd60e51b81526004016106b290614b9b565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122333390565b6001600160a01b038216600081815261015f602052604080822090516370a0823160e01b815260048101939093529091829030906370a0823190602401602060405180830381865afa1580156123ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124129190614d7a565b9050600061241f86612e57565b61242d5782600c0154612437565b6124378386612e88565b600f84015490915060ff161561247c57600d83015461246f61246583612460600688018a612e88565b612ea8565b85600c0154612ea8565b6124799190614d0c565b91505b50949350505050565b60006109208383613917565b6001600160a01b03811633036124f55760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b60648201526084016106b2565b6001600160a01b03811660009081526038602052604090205460ff161561254657336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff19169055612575565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b811580156125bc5750600081115b806125d057506000821180156125d0575080155b6126425760405162461bcd60e51b815260206004820152603b60248201527f6c4e4f52493a204d75737420737065636966792061207265766f636174696f6e60448201527f2074696d65206f7220616e20616d6f756e74206e6f7420626f7468000000000060648201526084016106b2565b6001600160a01b038416600090815261015f60205260409020600f81015460ff166126a85760405162461bcd60e51b81526020600482015260166024820152756c4e4f52493a206e6f206772616e742065786973747360501b60448201526064016106b2565b6126b185612e57565b61270f5760405162461bcd60e51b815260206004820152602960248201527f6c4e4f52493a206e6f2076657374696e67207363686564756c6520666f7220746044820152681a1a5cc819dc985b9d60ba1b60648201526084016106b2565b60008315801561271f5750600083115b612729578361272b565b425b90504281101561278d5760405162461bcd60e51b815260206004820152602760248201527f6c4e4f52493a205265766f636174696f6e2063616e6e6f7420626520696e20746044820152661a19481c185cdd60ca1b60648201526084016106b2565b60006127998383612e88565b905082600c015481106127ee5760405162461bcd60e51b815260206004820152601c60248201527f6c4e4f52493a20746f6b656e7320616c7265616479207665737465640000000060448201526064016106b2565b60008184600c01546128009190614d0c565b905060008515612861578186111561285a5760405162461bcd60e51b815260206004820152601e60248201527f6c4e4f52493a20746f6f2066657720756e76657374656420746f6b656e73000060448201526064016106b2565b5084612864565b50805b8085600c01546128749190614d0c565b600c86015560108501849055601185018190556040805160208082018352600080835283519182019093529182526128af918b918491611b8a565b61016054604051634decdde360e11b81526001600160a01b038a8116600483015260248201849052606060448301526000606483015290911690639bd9bbc690608401600060405180830381600087803b15801561290c57600080fd5b505af1158015612920573d6000803e3d6000fd5b5050505080896001600160a01b0316857f0bbe3f9ae306d75ae6df08cd4a79ac5c6eae93ffae7d7e52f2859bf27592519d60405160405180910390a4505050505050505050565b600054610100900460ff1661298e5760405162461bcd60e51b81526004016106b290614ed1565b565b600054610100900460ff166129b75760405162461bcd60e51b81526004016106b290614ed1565b6065805460ff19169055565b600054610100900460ff166129ea5760405162461bcd60e51b81526004016106b290614ed1565b6129f5600033612195565b61298e60008051602061504283398151915233612195565b600054610100900460ff16612a345760405162461bcd60e51b81526004016106b290614ed1565b8251612a47906035906020860190613ee8565b508151612a5b906036906020850190613ee8565b508051612a6f906037906020840190613f6c565b5060005b8151811015612ad857600160386000848481518110612a9457612a94614bf3565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580612ad081614c09565b915050612a73565b506040516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b158015612b5257600080fd5b505af1158015612b66573d6000803e3d6000fd5b50506040516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad2492506329965a1d9150606401600060405180830381600087803b158015612be357600080fd5b505af1158015612333573d6000803e3d6000fd5b60006107f0825490565b336001600160a01b03821603612c635760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b60648201526084016106b2565b6001600160a01b03811660009081526038602052604090205460ff1615612cb757336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ce3565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b612d2a848484846001613941565b50505050565b6001600160a01b038316612d945760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b2565b6001600160a01b038216612df65760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106b2565b6001600160a01b038381166000818152603b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038116600090815261015f60205260408120600f81015460ff168015610920575054151592915050565b6000612e948383613a87565b612e9e8484613b46565b6109209190614bdb565b6000818310612eb75781610920565b5090919050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015612f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f639190614f1c565b90506001600160a01b0381161561233357604051633ad5cbc160e11b81526001600160a01b038216906375ab978290612faa908a908a908a908a908a908a90600401614f39565b600060405180830381600087803b158015612fc457600080fd5b505af1158015612fd8573d6000803e3d6000fd5b5050505050505050505050565b6001600160a01b038381161590831615600061300f60008051602061502283398151915288611048565b90506001600160a01b038781169087161415600061302c88611024565b861115905083801561303b5750815b80156130445750825b156130bc5785613069896001600160a01b031660009081526033602052604090205490565b10156130b75760405162461bcd60e51b815260206004820152601b60248201527f6c4e4f52493a20696e73756666696369656e742062616c616e6365000000000060448201526064016106b2565b61310e565b8461310e578061310e5760405162461bcd60e51b815260206004820152601b60248201527f6c4e4f52493a20696e73756666696369656e742062616c616e6365000000000060448201526064016106b2565b61311a89898989613bbc565b505050505050505050565b60606000613134836002614f93565b61313f906002614bdb565b6001600160401b0381111561315657613156614321565b6040519080825280601f01601f191660200182016040528015613180576020820181803683370190505b509050600360fc1b8160008151811061319b5761319b614bf3565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131ca576131ca614bf3565b60200101906001600160f81b031916908160001a90535060006131ee846002614f93565b6131f9906001614bdb565b90505b6001811115613271576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061322d5761322d614bf3565b1a60f81b82828151811061324357613243614bf3565b60200101906001600160f81b031916908160001a90535060049490941c9361326a81614fb2565b90506131fc565b5083156109205760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106b2565b600483015460008190036133375783548310156133325760405162461bcd60e51b815260206004820152602a60248201527f5363686564756c655574696c733a20436c696666206265666f72652073636865604482015269191d5b19481cdd185c9d60b21b60648201526084016106b2565b6133b9565b600384016000613348600184614d0c565b8152602001908152602001600020600001548310156133b95760405162461bcd60e51b815260206004820152602760248201527f5363686564756c655574696c733a20436c69666673206e6f74206368726f6e6f6044820152661b1bd9da58d85b60ca1b60648201526084016106b2565b83600101548311156134255760405162461bcd60e51b815260206004820152602f60248201527f5363686564756c655574696c733a20436c696666732063616e6e6f7420656e6460448201526e206166746572207363686564756c6560881b60648201526084016106b2565b836002015482856005015461343a9190614bdb565b111561349a5760405162461bcd60e51b815260206004820152602960248201527f5363686564756c655574696c733a20436c69666620616d6f756e747320657863604482015268195959081d1bdd185b60ba1b60648201526084016106b2565b600081815260038501602052604081208481556001808201859055600487018054929391929091906134cd908490614bdb565b92505081905550828560050160008282546134e89190614bdb565b90915550505050505050565b6134fe8282613be4565b6000805160206150228339815191528203610bf3576001600160a01b038116600090815261015f60205260409020600f015460ff1615610bf35760405162461bcd60e51b815260206004820152603360248201527f6c4e4f52493a2043616e6e6f742061737369676e20726f6c6520746f2061206760448201527272616e7420686f6c646572206164647265737360681b60648201526084016106b2565b6135a68282613c07565b600082815260fb60205260409020610b749082613c8d565b6135c88282613ca2565b600082815260fb60205260409020610b749082613d09565b6135ec86868686612fe5565b6001600160a01b038516600090815260336020526040902054838110156136655760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b60648201526084016106b2565b6001600160a01b0380871660009081526033602052604080822087850390559187168152908120805486929061369c908490614bdb565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc826146779878787876040516136f493929190614d93565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161374191815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa1580156137d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f79190614f1c565b90506001600160a01b03811615613873576040516223de2960e01b81526001600160a01b038216906223de299061383c908b908b908b908b908b908b90600401614f39565b600060405180830381600087803b15801561385657600080fd5b505af115801561386a573d6000803e3d6000fd5b5050505061390d565b811561390d576001600160a01b0386163b1561390d5760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a4016106b2565b5050505050505050565b600082600001828154811061392e5761392e614bf3565b9060005260206000200154905092915050565b6001600160a01b0385166139975760405162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f206164647265737360448201526064016106b2565b336139a58160008888612fe5565b84603460008282546139b79190614bdb565b90915550506001600160a01b038616600090815260336020526040812080548792906139e4908490614bdb565b909155506139fa90508160008888888888613752565b856001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d878787604051613a4193929190614d93565b60405180910390a36040518581526001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611d3c565b6000808360050154846002015410613ab05783600501548460020154613aad9190614d0c565b90505b83600101548310613ac25790506107f0565b8354600485015415613afa5784600301600060018760040154613ae59190614d0c565b81526020019081526020016000206000015490505b6000818660010154613b0c9190614d0c565b9050818510613b395780613b208387614d0c565b613b2a9085614f93565b613b349190614fc9565b613b3c565b60005b9695505050505050565b60048201546000908190815b81811015613ba45760008181526003870160205260409020548510613b92576000818152600387016020526040902060010154613b8f9084614bdb565b92505b80613b9c81614c09565b915050613b52565b50613bb3856002015483612ea8565b95945050505050565b60655460ff1615613bdf5760405162461bcd60e51b81526004016106b290614b9b565b612d2a565b60655460ff1615610bf35760405162461bcd60e51b81526004016106b290614b9b565b613c118282611048565b610bf357600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613c493390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610920836001600160a01b038416613d1e565b613cac8282611048565b15610bf357600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610920836001600160a01b038416613d6d565b6000818152600183016020526040812054613d65575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107f0565b5060006107f0565b60008181526001830160205260408120548015613e56576000613d91600183614d0c565b8554909150600090613da590600190614d0c565b9050818114613e0a576000866000018281548110613dc557613dc5614bf3565b9060005260206000200154905080876000018481548110613de857613de8614bf3565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613e1b57613e1b614feb565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107f0565b60009150506107f0565b6040518061020001604052806000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b828054613ef490614b61565b90600052602060002090601f016020900481019282613f165760008555613f5c565b82601f10613f2f57805160ff1916838001178555613f5c565b82800160010185558215613f5c579182015b82811115613f5c578251825591602001919060010190613f41565b50613f68929150613fc1565b5090565b828054828255906000526020600020908101928215613f5c579160200282015b82811115613f5c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613f8c565b5b80821115613f685760008155600101613fc2565b6001600160a01b0381168114610c1857600080fd5b60008083601f840112613ffd57600080fd5b5081356001600160401b0381111561401457600080fd5b60208301915083602082850101111561402c57600080fd5b9250929050565b60008060008060008060008060c0898b03121561404f57600080fd5b883561405a81613fd6565b9750602089013561406a81613fd6565b9650604089013561407a81613fd6565b95506060890135945060808901356001600160401b038082111561409d57600080fd5b6140a98c838d01613feb565b909650945060a08b01359150808211156140c257600080fd5b506140cf8b828c01613feb565b999c989b5096995094979396929594505050565b6000602082840312156140f557600080fd5b81356001600160e01b03198116811461092057600080fd5b600081518084526020808501945080840160005b838110156141465781516001600160a01b031687529582019590820190600101614121565b509495945050505050565b602081526000610920602083018461410d565b60005b8381101561417f578181015183820152602001614167565b83811115612d2a5750506000910152565b600081518084526141a8816020860160208601614164565b601f01601f19169290920160200192915050565b6020815260006109206020830184614190565b600080604083850312156141e257600080fd5b82356141ed81613fd6565b946020939093013593505050565b60006020828403121561420d57600080fd5b813561092081613fd6565b60008060006060848603121561422d57600080fd5b833561423881613fd6565b9250602084013561424881613fd6565b929592945050506040919091013590565b60006020828403121561426b57600080fd5b5035919050565b60008060008060008060008060008060006101608c8e03121561429457600080fd5b8b359a5060208c01356142a681613fd6565b9a9d9a9c505050506040890135986060810135986080820135985060a0820135975060c0820135965060e0820135955061010082013594506101208201359350610140909101359150565b6000806040838503121561430457600080fd5b82359150602083013561431681613fd6565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b038111828210171561435a5761435a614321565b60405290565b604051601f8201601f191681016001600160401b038111828210171561438857614388614321565b604052919050565b60006001600160401b038211156143a9576143a9614321565b5060051b60200190565b600082601f8301126143c457600080fd5b813560206143d96143d483614390565b614360565b82815260059290921b840181019181810190868411156143f857600080fd5b8286015b8481101561441c57803561440f81613fd6565b83529183019183016143fc565b509695505050505050565b60006020828403121561443957600080fd5b81356001600160401b0381111561444f57600080fd5b611b82848285016143b3565b600081518084526020808501945080840160005b838110156141465781518752958201959082019060010161446f565b602081526000610920602083018461445b565b600082601f8301126144af57600080fd5b81356001600160401b038111156144c8576144c8614321565b6144db601f8201601f1916602001614360565b8181528460208386010111156144f057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561452557600080fd5b853561453081613fd6565b9450602086013561454081613fd6565b93506040860135925060608601356001600160401b038082111561456357600080fd5b61456f89838a0161449e565b9350608088013591508082111561458557600080fd5b506145928882890161449e565b9150509295509295909350565b600082601f8301126145b057600080fd5b813560206145c06143d483614390565b82815260059290921b840181019181810190868411156145df57600080fd5b8286015b8481101561441c57803583529183019183016145e3565b600082601f83011261460b57600080fd5b8135602061461b6143d483614390565b82815260059290921b8401810191818101908684111561463a57600080fd5b8286015b8481101561441c5780356001600160401b0381111561465d5760008081fd5b61466b8986838b010161449e565b84525091830191830161463e565b600082601f83011261468a57600080fd5b8135602061469a6143d483614390565b82815260059290921b840181019181810190868411156146b957600080fd5b8286015b8481101561441c57803580151581146146d65760008081fd5b83529183019183016146bd565b600080600080600060a086880312156146fb57600080fd5b85356001600160401b038082111561471257600080fd5b61471e89838a016143b3565b9650602088013591508082111561473457600080fd5b61474089838a0161459f565b9550604088013591508082111561475657600080fd5b61476289838a016145fa565b9450606088013591508082111561477857600080fd5b61478489838a016145fa565b9350608088013591508082111561479a57600080fd5b5061459288828901614679565b600080604083850312156147ba57600080fd5b50508035926020909101359150565b60008083601f8401126147db57600080fd5b5081356001600160401b038111156147f257600080fd5b6020830191508360208260051b850101111561402c57600080fd5b6000806000806000806000806080898b03121561482957600080fd5b88356001600160401b038082111561484057600080fd5b61484c8c838d016147c9565b909a50985060208b013591508082111561486557600080fd5b6148718c838d016147c9565b909850965060408b013591508082111561488a57600080fd5b6148968c838d016147c9565b909650945060608b01359150808211156148af57600080fd5b506140cf8b828c016147c9565b6000806000606084860312156148d157600080fd5b83356148dc81613fd6565b92506020840135915060408401356001600160401b038111156148fe57600080fd5b61490a8682870161449e565b9150509250925092565b6000806020838503121561492757600080fd5b82356001600160401b0381111561493d57600080fd5b614949858286016147c9565b90969095509350505050565b80518252602081015161497360208401826001600160a01b03169052565b5060408181015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e08082015180151582850152612d2a565b6020808252825182820181905260009190848201906040850190845b81811015614a5357614a3f838551614955565b928401926102009290920191600101614a2c565b50909695505050505050565b61020081016107f08284614955565b60008060408385031215614a8157600080fd5b8235614a8c81613fd6565b9150602083013561431681613fd6565b60008060008060808587031215614ab257600080fd5b8435614abd81613fd6565b93506020850135925060408501356001600160401b0380821115614ae057600080fd5b614aec8883890161449e565b93506060870135915080821115614b0257600080fd5b50614b0f8782880161449e565b91505092959194509250565b60008060408385031215614b2e57600080fd5b8235915060208301356001600160401b03811115614b4b57600080fd5b614b578582860161449e565b9150509250929050565b600181811c90821680614b7557607f821691505b602082108103614b9557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115614bee57614bee614bc5565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201614c1b57614c1b614bc5565b5060010190565b600081518084526020808501808196508360051b8101915082860160005b85811015614c6a578284038952614c58848351614190565b98850198935090840190600101614c40565b5091979650505050505050565b60a081526000614c8a60a083018861410d565b602083820381850152614c9d828961445b565b91508382036040850152614cb18288614c22565b91508382036060850152614cc58287614c22565b8481036080860152855180825282870193509082019060005b81811015614cfc578451151583529383019391830191600101614cde565b50909a9950505050505050505050565b600082821015614d1e57614d1e614bc5565b500390565b600060408284031215614d3557600080fd5b604051604081018181106001600160401b0382111715614d5757614d57614321565b6040528235614d6581613fd6565b81526020928301359281019290925250919050565b600060208284031215614d8c57600080fd5b5051919050565b838152606060208201526000614dac6060830185614190565b8281036040840152613b3c8185614190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614df6816017850160208801614164565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614e27816028840160208801614164565b01602801949350505050565b8051614e3e81613fd6565b919050565b60006101408284031215614e5657600080fd5b614e5e614337565b614e6783614e33565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101208084015181830152508091505092915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215614f2e57600080fd5b815161092081613fd6565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c060808201819052600090614f7490830185614190565b82810360a0840152614f868185614190565b9998505050505050505050565b6000816000190483118215151615614fad57614fad614bc5565b500290565b600081614fc157614fc1614bc5565b506000190190565b600082614fe657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fdfe4552433737375072657365745061757361626c655065726d697373696f6e6564a52f07bb8dc8df886598eb50edeaba2b8e45715237ed244354b60ea04d0390b865d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212205875699fe59728351a72546aac76c4af76dabb440c090412ecff6f41c62c3fa464736f6c634300080d0033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061027e5760003560e01c806370a082311161015c578063a217fddf116100ce578063d95b637111610087578063d95b6371146105bd578063dd62ed3e146105d0578063e63ab1e914610609578063fad8b32a1461061e578063fc673c4f14610631578063fe9d93031461064457600080fd5b8063a217fddf14610549578063a9059cbb14610551578063bf31dbf414610564578063c4d66de814610584578063ca15c87314610597578063d547741f146105aa57600080fd5b8063959b8c3f11610120578063959b8c3f146104d557806395d89b41146104e85780639952d6e4146104f05780639bd9bbc6146105035780639e3f3cac146105165780639f916c211461052957600080fd5b806370a08231146104535780638456cb591461047c57806384955c88146104845780639010d07c1461049757806391d14854146104c257600080fd5b80632f2ff15d116101f5578063521189a9116101b9578063521189a9146103df578063556f0dc7146104065780635c975abb1461040d57806362ad1b8314610418578063633d9be01461042b57806366cf8bce1461044057600080fd5b80632f2ff15d14610382578063313ce5671461039557806336568abe146103a45780633f4ba83a146103b7578063458c738e146103bf57600080fd5b80630e2d1a2a116102475780630e2d1a2a146102fd57806318160ddd1461031e578063205c28781461032657806323b872dd14610339578063248a9ca31461034c578063271c6e1a1461036f57600080fd5b806223de291461028357806301ffc9a71461029857806306e48538146102c057806306fdde03146102d5578063095ea7b3146102ea575b600080fd5b610296610291366004614033565b610652565b005b6102ab6102a63660046140e3565b6107cb565b60405190151581526020015b60405180910390f35b6102c86107f6565b6040516102b79190614151565b6102dd610858565b6040516102b791906141bc565b6102ab6102f83660046141cf565b6108e1565b61031061030b3660046141fb565b610927565b6040519081526020016102b7565b603454610310565b6102ab6103343660046141cf565b610933565b6102ab610347366004614218565b610a42565b61031061035a366004614259565b600090815260c9602052604090206001015490565b61029661037d366004614272565b610a8d565b6102966103903660046142f1565b610b4e565b604051601281526020016102b7565b6102966103b23660046142f1565b610b79565b610296610bf7565b6103d26103cd366004614427565b610c1b565b6040516102b7919061448b565b6103107fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b81565b6001610310565b60655460ff166102ab565b61029661042636600461450d565b610cdc565b61031060008051602061502283398151915281565b61029661044e3660046146e3565b610d24565b6103106104613660046141fb565b6001600160a01b031660009081526033602052604090205490565b610296611003565b6103106104923660046141fb565b611024565b6104aa6104a53660046147a7565b611030565b6040516001600160a01b0390911681526020016102b7565b6102ab6104d03660046142f1565b611048565b6102966104e33660046141fb565b611073565b6102dd611087565b6102966104fe36600461480d565b611096565b6102966105113660046148bc565b6112a8565b6103106105243660046141fb565b6112e7565b61053c610537366004614914565b611314565b6040516102b79190614a10565b610310600081565b6102ab61055f3660046141cf565b6113d9565b6105776105723660046141fb565b611424565b6040516102b79190614a5f565b6102966105923660046141fb565b611520565b6103106105a5366004614259565b611776565b6102966105b83660046142f1565b61178d565b6102ab6105cb366004614a6e565b6117b3565b6103106105de366004614a6e565b6001600160a01b039182166000908152603b6020908152604080832093909416825291909152205490565b61031060008051602061504283398151915281565b61029661062c3660046141fb565b611854565b61029661063f366004614a9c565b611868565b61029661063f366004614b1b565b610160546001600160a01b0316336001600160a01b0316146106bb5760405162461bcd60e51b815260206004820152601d60248201527f6c4e4f52493a206e6f742042726964676564506f6c79676f6e4e4f524900000060448201526064015b60405180910390fd5b6106d360008051602061502283398151915289611048565b6107385760405162461bcd60e51b815260206004820152603060248201527f6c4e4f52493a2073656e646572206973206d697373696e6720726f6c6520544f60448201526f4b454e5f4752414e5445525f524f4c4560801b60648201526084016106b2565b6000610746848601866141fb565b90506001600160a01b0381166107b25760405162461bcd60e51b815260206004820152602b60248201527f6c4e4f52493a20746f6b656e2073656e64206d697373696e672072657175697260448201526a656420757365724461746160a81b60648201526084016106b2565b6107bf86868686866118b0565b50505050505050505050565b60006001600160e01b03198216635a05180f60e01b14806107f057506107f082611a0d565b92915050565b6060603780548060200260200160405190810160405280929190818152602001828054801561084e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610830575b5050505050905090565b60606035805461086790614b61565b80601f016020809104026020016040519081016040528092919081815260200182805461089390614b61565b801561084e5780601f106108b55761010080835404028352916020019161084e565b820191906000526020600020905b8154815290600101906020018083116108c357509395945050505050565b60006108ef60655460ff1690565b1561090c5760405162461bcd60e51b81526004016106b290614b9b565b6109168383611a42565b6109208383611a8a565b9392505050565b60006107f08242611aa2565b33600081815261015f60209081526040808320815180840183528481528251938401909252838352929361096a9290918691611b8a565b61016054604051634decdde360e11b81526001600160a01b03868116600483015260248201869052606060448301526000606483015290911690639bd9bbc690608401600060405180830381600087803b1580156109c757600080fd5b505af11580156109db573d6000803e3d6000fd5b505050508281600d0160008282546109f39190614bdb565b90915550506040518381526001600160a01b0385169033907fa86305abc2db271df4609aa86a8d044bc11fb36939841bfdad6c1ab2b26e94719060200160405180910390a35060019392505050565b60405162461bcd60e51b815260206004820152601c60248201527f6c4e4f52493a207472616e7366657246726f6d2064697361626c65640000000060448201526000906064016106b2565b60655460ff1615610ab05760405162461bcd60e51b81526004016106b290614b9b565b600080516020615022833981519152610ac98133611d4c565b604080516001600160a01b038d1660208201529081018b9052606081018a90526080810189905260a0810188905260c0810187905260e08101869052610100810185905261012081018490526101408101839052600090610160016040516020818303038152906040529050610b3f8d82611db0565b50505050505050505050505050565b600082815260c96020526040902060010154610b6a8133611d4c565b610b748383612195565b505050565b6001600160a01b0381163314610be95760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106b2565b610bf382826121a9565b5050565b600080516020615042833981519152610c108133611d4c565b610c186121bd565b50565b6060600082516001600160401b03811115610c3857610c38614321565b604051908082528060200260200182016040528015610c61578160200160208202803683370190505b50905060005b8351811015610cd557610ca8848281518110610c8557610c85614bf3565b60200260200101516001600160a01b031660009081526033602052604090205490565b828281518110610cba57610cba614bf3565b6020908102919091010152610cce81614c09565b9050610c67565b5092915050565b60405162461bcd60e51b815260206004820152601c60248201527f6c4e4f52493a206f70657261746f7253656e642064697361626c65640000000060448201526064016106b2565b8351855114610d985760405162461bcd60e51b8152602060048201526046602482015260008051602061500283398151915260448201527f3a20726563697069656e7420616e6420616d6f756e74206c656e677468206d696064820152650e6dac2e8c6d60d31b608482015260a4016106b2565b8251845114610e0c5760405162461bcd60e51b8152602060048201526046602482015260008051602061500283398151915260448201527f3a20616d6f756e747320616e64207573657244617461206c656e677468206d696064820152650e6dac2e8c6d60d31b608482015260a4016106b2565b8151835114610e855760405162461bcd60e51b815260206004820152604b602482015260008051602061500283398151915260448201527f3a20757365724461746120616e64206f70657261746f7244617461206c656e6760648201526a0e8d040dad2e6dac2e8c6d60ab1b608482015260a4016106b2565b8051825114610f095760405162461bcd60e51b8152602060048201526056602482015260008051602061500283398151915260448201527f3a206f70657261746f724461746120616e6420726571756972655265636570746064820152750d2dedc82c6d640d8cadccee8d040dad2e6dac2e8c6d60531b608482015260a4016106b2565b60005b8551811015610fb257610fa033878381518110610f2b57610f2b614bf3565b6020026020010151878481518110610f4557610f45614bf3565b6020026020010151878581518110610f5f57610f5f614bf3565b6020026020010151878681518110610f7957610f79614bf3565b6020026020010151878781518110610f9357610f93614bf3565b6020026020010151612250565b80610faa81614c09565b915050610f0c565b50336001600160a01b03167fd5865ae34f92a2d6a803fa13140b8165046f54e61e68560b26950c62a668c6b68686868686604051610ff4959493929190614c77565b60405180910390a25050505050565b60008051602061504283398151915261101c8133611d4c565b610c1861233c565b60006107f08242612394565b600082815260fb602052604081206109209083612485565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61107e816000611a42565b610c1881612491565b60606036805461086790614b61565b60655460ff16156110b95760405162461bcd60e51b81526004016106b290614b9b565b6000805160206150228339815191526110d28133611d4c565b87861461113c5760405162461bcd60e51b815260206004820152603260248201527f6c4e4f52493a2066726f6d4163636f756e747320616e6420746f4163636f756e6044820152710e8e640d8cadccee8d040dad2e6dac2e8c6d60731b60648201526084016106b2565b8584146111a15760405162461bcd60e51b815260206004820152602d60248201527f6c4e4f52493a20746f4163636f756e747320616e6420617454696d6573206c6560448201526c0dccee8d040dad2e6dac2e8c6d609b1b60648201526084016106b2565b8382146112035760405162461bcd60e51b815260206004820152602a60248201527f6c4e4f52493a20617454696d657320616e6420616d6f756e7473206c656e67746044820152690d040dad2e6dac2e8c6d60b31b60648201526084016106b2565b60005b888110156107bf576112968a8a8381811061122357611223614bf3565b905060200201602081019061123891906141fb565b89898481811061124a5761124a614bf3565b905060200201602081019061125f91906141fb565b88888581811061127157611271614bf3565b9050602002013587878681811061128a5761128a614bf3565b905060200201356125ae565b806112a081614c09565b915050611206565b60405162461bcd60e51b81526020600482015260146024820152731b1393d4924e881cd95b9908191a5cd8589b195960621b60448201526064016106b2565b6001600160a01b038116600090815261015f60205260408120600c810154600e8201546109209190614d0c565b60606000826001600160401b0381111561133057611330614321565b60405190808252806020026020018201604052801561136957816020015b611356613e60565b81526020019060019003908161134e5790505b50905060005b838110156113d1576113a185858381811061138c5761138c614bf3565b905060200201602081019061057291906141fb565b8282815181106113b3576113b3614bf3565b602002602001018190525080806113c990614c09565b91505061136f565b509392505050565b60405162461bcd60e51b815260206004820152601860248201527f6c4e4f52493a207472616e736665722064697361626c6564000000000000000060448201526000906064016106b2565b61142c613e60565b506001600160a01b0316600081815261015f60209081526040808320815161020081018352600c82015481528084019590955260068101548583015260018082015460608701526007820154608087015284805260098201808552838620805460a0890152828752818652848720805460c08a01528780526003850180885286892085015460e08b01528489528752948720830154610100890152820154610120880152948190529390925290910154610140830152600d810154610160830152600e81015461018083015260108101546101a083015260118101546101c0830152600f015460ff1615156101e082015290565b600054610100900460ff1661153b5760005460ff161561153f565b303b155b6115a25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106b2565b600054610100900460ff161580156115c4576000805461ffff19166101011790555b6040805160018082528183019092526000916020808301908036833701905050905033816000815181106115fa576115fa614bf3565b60200260200101906001600160a01b031690816001600160a01b031681525050611622612967565b61162a612967565b611632612967565b61163a612967565b611642612990565b61164a6129c3565b6116956040518060400160405280600b81526020016a4c6f636b6564204e4f524960a81b815250604051806040016040528060058152602001646c4e4f524960d81b81525083612a0d565b61016080546001600160a01b0319166001600160a01b0385161790556040516329965a1d60e01b815230600482018190527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b15801561172a57600080fd5b505af115801561173e573d6000803e3d6000fd5b5050505061176060008051602061502283398151915261175b3390565b612195565b508015610bf3576000805461ff00191690555050565b600081815260fb602052604081206107f090612bf7565b600082815260c960205260409020600101546117a98133611d4c565b610b7483836121a9565b6000816001600160a01b0316836001600160a01b0316148061181e57506001600160a01b03831660009081526038602052604090205460ff16801561181e57506001600160a01b038083166000908152603a602090815260408083209387168352929052205460ff16155b806109205750506001600160a01b0390811660009081526039602090815260408083209490931682529290925290205460ff1690565b61185f816000611a42565b610c1881612c01565b60405162461bcd60e51b815260206004820152601c60248201527f6c4e4f52493a206275726e696e67206e6f7420737570706f727465640000000060448201526064016106b2565b6000806118bf85870187614d23565b60208101519091501561190c5761190c8787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611db092505050565b80516001600160a01b0316600090815261015f60205260409020600f015460ff166119875760405162461bcd60e51b815260206004820152602560248201527f6c4e4f52493a2043616e6e6f74206465706f73697420776974686f757420612060448201526419dc985b9d60da1b60648201526084016106b2565b611a0081600001518888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250612d1c92505050565b5060019695505050505050565b60006001600160e01b03198216637965db0b60e01b14806107f057506301ffc9a760e01b6001600160e01b03198316146107f0565b60405162461bcd60e51b815260206004820181905260248201527f6c4e4f52493a206f70657261746f7220616374696f6e732064697361626c656460448201526064016106b2565b600033611a98818585612d30565b5060019392505050565b6001600160a01b038216600081815261015f602052604080822090516370a0823160e01b815260048101939093529091829030906370a0823190602401602060405180830381865afa158015611afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b209190614d7a565b600f83015490915060ff1615611b8257611b3985612e57565b15611b6b57600d820154611b5a611b508487612e88565b84600c0154612ea8565b611b649190614d0c565b9050611b82565b81600d015482600c0154611b7f9190614d0c565b90505b949350505050565b6001600160a01b038416611beb5760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016106b2565b33611bfb81866000878787612ebe565b611c088186600087612fe5565b6001600160a01b03851660009081526033602052604090205484811015611c7d5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b60648201526084016106b2565b6001600160a01b0386166000908152603360205260408120868303905560348054879290611cac908490614d0c565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098878787604051611cfa93929190614d93565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050505050565b611d568282611048565b610bf357611d6e816001600160a01b03166014613125565b611d79836020613125565b604051602001611d8a929190614dbe565b60408051601f198184030181529082905262461bcd60e51b82526106b2916004016141bc565b600081806020019051810190611dc69190614e43565b80519091506001600160a01b0316611e305760405162461bcd60e51b815260206004820152602760248201527f6c4e4f52493a20526563697069656e742063616e6e6f74206265207a65726f206044820152666164647265737360c81b60648201526084016106b2565b611e4c6000805160206150228339815191528260000151611048565b15611ea85760405162461bcd60e51b815260206004820152602660248201527f6c4e4f52493a20526563697069656e742063616e6e6f74206265206772616e746044820152651030b236b4b760d11b60648201526084016106b2565b8060600151816020015110611f175760405162461bcd60e51b815260206004820152602f60248201527f6c4e4f52493a20756e6c6f636b456e6454696d652063616e6e6f74206265206260448201526e65666f726520737461727454696d6560881b60648201526084016106b2565b80606001514210611f7d5760405162461bcd60e51b815260206004820152602a60248201527f6c4e4f52493a20756e6c6f636b456e6454696d652063616e6e6f7420626520696044820152691b881d1a19481c185cdd60b21b60648201526084016106b2565b80516001600160a01b0316600090815261015f60205260409020600f015460ff1615611feb5760405162461bcd60e51b815260206004820152601b60248201527f6c4e4f52493a204772616e7420616c726561647920657869737473000000000060448201526064016106b2565b80516001600160a01b0316600090815261015f6020908152604091829020600c8101869055600e8101869055600f8101805460ff191660011790559083015191830151909110156120e5578161010001518260c0015110158061205757508161012001518260e0015110155b6120a35760405162461bcd60e51b815260206004820181905260248201527f6c4e4f52493a20756e6c6f636b20636c696666203e207665737420636c69666660448201526064016106b2565b600281018490556020820151815560408201516001820155608082015160c08301516120d09183916132c0565b60a082015160e08301516120e59183916132c0565b600881018490556020820151600682019081556060830151600783015560808301516101008401516121189291906132c0565b60a08201516101208301516121319160068401916132c0565b81602001518483600001516001600160a01b03167f17161516b6ce34594617177a800b150a86ddee02c06993a73ef000a02367d11985604001518660600151604051612187929190918252602082015260400190565b60405180910390a450505050565b61219f82826134f4565b610bf3828261359c565b6121b382826134f4565b610bf382826135be565b60655460ff166122065760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106b2565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0386166122b15760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016106b2565b6001600160a01b0385166123075760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f206164647265737360448201526064016106b2565b33612316818888888888612ebe565b6123248188888888886135e0565b61233381888888888888613752565b50505050505050565b60655460ff161561235f5760405162461bcd60e51b81526004016106b290614b9b565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122333390565b6001600160a01b038216600081815261015f602052604080822090516370a0823160e01b815260048101939093529091829030906370a0823190602401602060405180830381865afa1580156123ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124129190614d7a565b9050600061241f86612e57565b61242d5782600c0154612437565b6124378386612e88565b600f84015490915060ff161561247c57600d83015461246f61246583612460600688018a612e88565b612ea8565b85600c0154612ea8565b6124799190614d0c565b91505b50949350505050565b60006109208383613917565b6001600160a01b03811633036124f55760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b60648201526084016106b2565b6001600160a01b03811660009081526038602052604090205460ff161561254657336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff19169055612575565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b811580156125bc5750600081115b806125d057506000821180156125d0575080155b6126425760405162461bcd60e51b815260206004820152603b60248201527f6c4e4f52493a204d75737420737065636966792061207265766f636174696f6e60448201527f2074696d65206f7220616e20616d6f756e74206e6f7420626f7468000000000060648201526084016106b2565b6001600160a01b038416600090815261015f60205260409020600f81015460ff166126a85760405162461bcd60e51b81526020600482015260166024820152756c4e4f52493a206e6f206772616e742065786973747360501b60448201526064016106b2565b6126b185612e57565b61270f5760405162461bcd60e51b815260206004820152602960248201527f6c4e4f52493a206e6f2076657374696e67207363686564756c6520666f7220746044820152681a1a5cc819dc985b9d60ba1b60648201526084016106b2565b60008315801561271f5750600083115b612729578361272b565b425b90504281101561278d5760405162461bcd60e51b815260206004820152602760248201527f6c4e4f52493a205265766f636174696f6e2063616e6e6f7420626520696e20746044820152661a19481c185cdd60ca1b60648201526084016106b2565b60006127998383612e88565b905082600c015481106127ee5760405162461bcd60e51b815260206004820152601c60248201527f6c4e4f52493a20746f6b656e7320616c7265616479207665737465640000000060448201526064016106b2565b60008184600c01546128009190614d0c565b905060008515612861578186111561285a5760405162461bcd60e51b815260206004820152601e60248201527f6c4e4f52493a20746f6f2066657720756e76657374656420746f6b656e73000060448201526064016106b2565b5084612864565b50805b8085600c01546128749190614d0c565b600c86015560108501849055601185018190556040805160208082018352600080835283519182019093529182526128af918b918491611b8a565b61016054604051634decdde360e11b81526001600160a01b038a8116600483015260248201849052606060448301526000606483015290911690639bd9bbc690608401600060405180830381600087803b15801561290c57600080fd5b505af1158015612920573d6000803e3d6000fd5b5050505080896001600160a01b0316857f0bbe3f9ae306d75ae6df08cd4a79ac5c6eae93ffae7d7e52f2859bf27592519d60405160405180910390a4505050505050505050565b600054610100900460ff1661298e5760405162461bcd60e51b81526004016106b290614ed1565b565b600054610100900460ff166129b75760405162461bcd60e51b81526004016106b290614ed1565b6065805460ff19169055565b600054610100900460ff166129ea5760405162461bcd60e51b81526004016106b290614ed1565b6129f5600033612195565b61298e60008051602061504283398151915233612195565b600054610100900460ff16612a345760405162461bcd60e51b81526004016106b290614ed1565b8251612a47906035906020860190613ee8565b508151612a5b906036906020850190613ee8565b508051612a6f906037906020840190613f6c565b5060005b8151811015612ad857600160386000848481518110612a9457612a94614bf3565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580612ad081614c09565b915050612a73565b506040516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b158015612b5257600080fd5b505af1158015612b66573d6000803e3d6000fd5b50506040516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad2492506329965a1d9150606401600060405180830381600087803b158015612be357600080fd5b505af1158015612333573d6000803e3d6000fd5b60006107f0825490565b336001600160a01b03821603612c635760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b60648201526084016106b2565b6001600160a01b03811660009081526038602052604090205460ff1615612cb757336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ce3565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b612d2a848484846001613941565b50505050565b6001600160a01b038316612d945760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b2565b6001600160a01b038216612df65760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106b2565b6001600160a01b038381166000818152603b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038116600090815261015f60205260408120600f81015460ff168015610920575054151592915050565b6000612e948383613a87565b612e9e8484613b46565b6109209190614bdb565b6000818310612eb75781610920565b5090919050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015612f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f639190614f1c565b90506001600160a01b0381161561233357604051633ad5cbc160e11b81526001600160a01b038216906375ab978290612faa908a908a908a908a908a908a90600401614f39565b600060405180830381600087803b158015612fc457600080fd5b505af1158015612fd8573d6000803e3d6000fd5b5050505050505050505050565b6001600160a01b038381161590831615600061300f60008051602061502283398151915288611048565b90506001600160a01b038781169087161415600061302c88611024565b861115905083801561303b5750815b80156130445750825b156130bc5785613069896001600160a01b031660009081526033602052604090205490565b10156130b75760405162461bcd60e51b815260206004820152601b60248201527f6c4e4f52493a20696e73756666696369656e742062616c616e6365000000000060448201526064016106b2565b61310e565b8461310e578061310e5760405162461bcd60e51b815260206004820152601b60248201527f6c4e4f52493a20696e73756666696369656e742062616c616e6365000000000060448201526064016106b2565b61311a89898989613bbc565b505050505050505050565b60606000613134836002614f93565b61313f906002614bdb565b6001600160401b0381111561315657613156614321565b6040519080825280601f01601f191660200182016040528015613180576020820181803683370190505b509050600360fc1b8160008151811061319b5761319b614bf3565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131ca576131ca614bf3565b60200101906001600160f81b031916908160001a90535060006131ee846002614f93565b6131f9906001614bdb565b90505b6001811115613271576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061322d5761322d614bf3565b1a60f81b82828151811061324357613243614bf3565b60200101906001600160f81b031916908160001a90535060049490941c9361326a81614fb2565b90506131fc565b5083156109205760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106b2565b600483015460008190036133375783548310156133325760405162461bcd60e51b815260206004820152602a60248201527f5363686564756c655574696c733a20436c696666206265666f72652073636865604482015269191d5b19481cdd185c9d60b21b60648201526084016106b2565b6133b9565b600384016000613348600184614d0c565b8152602001908152602001600020600001548310156133b95760405162461bcd60e51b815260206004820152602760248201527f5363686564756c655574696c733a20436c69666673206e6f74206368726f6e6f6044820152661b1bd9da58d85b60ca1b60648201526084016106b2565b83600101548311156134255760405162461bcd60e51b815260206004820152602f60248201527f5363686564756c655574696c733a20436c696666732063616e6e6f7420656e6460448201526e206166746572207363686564756c6560881b60648201526084016106b2565b836002015482856005015461343a9190614bdb565b111561349a5760405162461bcd60e51b815260206004820152602960248201527f5363686564756c655574696c733a20436c69666620616d6f756e747320657863604482015268195959081d1bdd185b60ba1b60648201526084016106b2565b600081815260038501602052604081208481556001808201859055600487018054929391929091906134cd908490614bdb565b92505081905550828560050160008282546134e89190614bdb565b90915550505050505050565b6134fe8282613be4565b6000805160206150228339815191528203610bf3576001600160a01b038116600090815261015f60205260409020600f015460ff1615610bf35760405162461bcd60e51b815260206004820152603360248201527f6c4e4f52493a2043616e6e6f742061737369676e20726f6c6520746f2061206760448201527272616e7420686f6c646572206164647265737360681b60648201526084016106b2565b6135a68282613c07565b600082815260fb60205260409020610b749082613c8d565b6135c88282613ca2565b600082815260fb60205260409020610b749082613d09565b6135ec86868686612fe5565b6001600160a01b038516600090815260336020526040902054838110156136655760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b60648201526084016106b2565b6001600160a01b0380871660009081526033602052604080822087850390559187168152908120805486929061369c908490614bdb565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc826146779878787876040516136f493929190614d93565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161374191815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa1580156137d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f79190614f1c565b90506001600160a01b03811615613873576040516223de2960e01b81526001600160a01b038216906223de299061383c908b908b908b908b908b908b90600401614f39565b600060405180830381600087803b15801561385657600080fd5b505af115801561386a573d6000803e3d6000fd5b5050505061390d565b811561390d576001600160a01b0386163b1561390d5760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a4016106b2565b5050505050505050565b600082600001828154811061392e5761392e614bf3565b9060005260206000200154905092915050565b6001600160a01b0385166139975760405162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f206164647265737360448201526064016106b2565b336139a58160008888612fe5565b84603460008282546139b79190614bdb565b90915550506001600160a01b038616600090815260336020526040812080548792906139e4908490614bdb565b909155506139fa90508160008888888888613752565b856001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d878787604051613a4193929190614d93565b60405180910390a36040518581526001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611d3c565b6000808360050154846002015410613ab05783600501548460020154613aad9190614d0c565b90505b83600101548310613ac25790506107f0565b8354600485015415613afa5784600301600060018760040154613ae59190614d0c565b81526020019081526020016000206000015490505b6000818660010154613b0c9190614d0c565b9050818510613b395780613b208387614d0c565b613b2a9085614f93565b613b349190614fc9565b613b3c565b60005b9695505050505050565b60048201546000908190815b81811015613ba45760008181526003870160205260409020548510613b92576000818152600387016020526040902060010154613b8f9084614bdb565b92505b80613b9c81614c09565b915050613b52565b50613bb3856002015483612ea8565b95945050505050565b60655460ff1615613bdf5760405162461bcd60e51b81526004016106b290614b9b565b612d2a565b60655460ff1615610bf35760405162461bcd60e51b81526004016106b290614b9b565b613c118282611048565b610bf357600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613c493390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610920836001600160a01b038416613d1e565b613cac8282611048565b15610bf357600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610920836001600160a01b038416613d6d565b6000818152600183016020526040812054613d65575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107f0565b5060006107f0565b60008181526001830160205260408120548015613e56576000613d91600183614d0c565b8554909150600090613da590600190614d0c565b9050818114613e0a576000866000018281548110613dc557613dc5614bf3565b9060005260206000200154905080876000018481548110613de857613de8614bf3565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613e1b57613e1b614feb565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107f0565b60009150506107f0565b6040518061020001604052806000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b828054613ef490614b61565b90600052602060002090601f016020900481019282613f165760008555613f5c565b82601f10613f2f57805160ff1916838001178555613f5c565b82800160010185558215613f5c579182015b82811115613f5c578251825591602001919060010190613f41565b50613f68929150613fc1565b5090565b828054828255906000526020600020908101928215613f5c579160200282015b82811115613f5c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613f8c565b5b80821115613f685760008155600101613fc2565b6001600160a01b0381168114610c1857600080fd5b60008083601f840112613ffd57600080fd5b5081356001600160401b0381111561401457600080fd5b60208301915083602082850101111561402c57600080fd5b9250929050565b60008060008060008060008060c0898b03121561404f57600080fd5b883561405a81613fd6565b9750602089013561406a81613fd6565b9650604089013561407a81613fd6565b95506060890135945060808901356001600160401b038082111561409d57600080fd5b6140a98c838d01613feb565b909650945060a08b01359150808211156140c257600080fd5b506140cf8b828c01613feb565b999c989b5096995094979396929594505050565b6000602082840312156140f557600080fd5b81356001600160e01b03198116811461092057600080fd5b600081518084526020808501945080840160005b838110156141465781516001600160a01b031687529582019590820190600101614121565b509495945050505050565b602081526000610920602083018461410d565b60005b8381101561417f578181015183820152602001614167565b83811115612d2a5750506000910152565b600081518084526141a8816020860160208601614164565b601f01601f19169290920160200192915050565b6020815260006109206020830184614190565b600080604083850312156141e257600080fd5b82356141ed81613fd6565b946020939093013593505050565b60006020828403121561420d57600080fd5b813561092081613fd6565b60008060006060848603121561422d57600080fd5b833561423881613fd6565b9250602084013561424881613fd6565b929592945050506040919091013590565b60006020828403121561426b57600080fd5b5035919050565b60008060008060008060008060008060006101608c8e03121561429457600080fd5b8b359a5060208c01356142a681613fd6565b9a9d9a9c505050506040890135986060810135986080820135985060a0820135975060c0820135965060e0820135955061010082013594506101208201359350610140909101359150565b6000806040838503121561430457600080fd5b82359150602083013561431681613fd6565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b038111828210171561435a5761435a614321565b60405290565b604051601f8201601f191681016001600160401b038111828210171561438857614388614321565b604052919050565b60006001600160401b038211156143a9576143a9614321565b5060051b60200190565b600082601f8301126143c457600080fd5b813560206143d96143d483614390565b614360565b82815260059290921b840181019181810190868411156143f857600080fd5b8286015b8481101561441c57803561440f81613fd6565b83529183019183016143fc565b509695505050505050565b60006020828403121561443957600080fd5b81356001600160401b0381111561444f57600080fd5b611b82848285016143b3565b600081518084526020808501945080840160005b838110156141465781518752958201959082019060010161446f565b602081526000610920602083018461445b565b600082601f8301126144af57600080fd5b81356001600160401b038111156144c8576144c8614321565b6144db601f8201601f1916602001614360565b8181528460208386010111156144f057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561452557600080fd5b853561453081613fd6565b9450602086013561454081613fd6565b93506040860135925060608601356001600160401b038082111561456357600080fd5b61456f89838a0161449e565b9350608088013591508082111561458557600080fd5b506145928882890161449e565b9150509295509295909350565b600082601f8301126145b057600080fd5b813560206145c06143d483614390565b82815260059290921b840181019181810190868411156145df57600080fd5b8286015b8481101561441c57803583529183019183016145e3565b600082601f83011261460b57600080fd5b8135602061461b6143d483614390565b82815260059290921b8401810191818101908684111561463a57600080fd5b8286015b8481101561441c5780356001600160401b0381111561465d5760008081fd5b61466b8986838b010161449e565b84525091830191830161463e565b600082601f83011261468a57600080fd5b8135602061469a6143d483614390565b82815260059290921b840181019181810190868411156146b957600080fd5b8286015b8481101561441c57803580151581146146d65760008081fd5b83529183019183016146bd565b600080600080600060a086880312156146fb57600080fd5b85356001600160401b038082111561471257600080fd5b61471e89838a016143b3565b9650602088013591508082111561473457600080fd5b61474089838a0161459f565b9550604088013591508082111561475657600080fd5b61476289838a016145fa565b9450606088013591508082111561477857600080fd5b61478489838a016145fa565b9350608088013591508082111561479a57600080fd5b5061459288828901614679565b600080604083850312156147ba57600080fd5b50508035926020909101359150565b60008083601f8401126147db57600080fd5b5081356001600160401b038111156147f257600080fd5b6020830191508360208260051b850101111561402c57600080fd5b6000806000806000806000806080898b03121561482957600080fd5b88356001600160401b038082111561484057600080fd5b61484c8c838d016147c9565b909a50985060208b013591508082111561486557600080fd5b6148718c838d016147c9565b909850965060408b013591508082111561488a57600080fd5b6148968c838d016147c9565b909650945060608b01359150808211156148af57600080fd5b506140cf8b828c016147c9565b6000806000606084860312156148d157600080fd5b83356148dc81613fd6565b92506020840135915060408401356001600160401b038111156148fe57600080fd5b61490a8682870161449e565b9150509250925092565b6000806020838503121561492757600080fd5b82356001600160401b0381111561493d57600080fd5b614949858286016147c9565b90969095509350505050565b80518252602081015161497360208401826001600160a01b03169052565b5060408181015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e08082015180151582850152612d2a565b6020808252825182820181905260009190848201906040850190845b81811015614a5357614a3f838551614955565b928401926102009290920191600101614a2c565b50909695505050505050565b61020081016107f08284614955565b60008060408385031215614a8157600080fd5b8235614a8c81613fd6565b9150602083013561431681613fd6565b60008060008060808587031215614ab257600080fd5b8435614abd81613fd6565b93506020850135925060408501356001600160401b0380821115614ae057600080fd5b614aec8883890161449e565b93506060870135915080821115614b0257600080fd5b50614b0f8782880161449e565b91505092959194509250565b60008060408385031215614b2e57600080fd5b8235915060208301356001600160401b03811115614b4b57600080fd5b614b578582860161449e565b9150509250929050565b600181811c90821680614b7557607f821691505b602082108103614b9557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115614bee57614bee614bc5565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201614c1b57614c1b614bc5565b5060010190565b600081518084526020808501808196508360051b8101915082860160005b85811015614c6a578284038952614c58848351614190565b98850198935090840190600101614c40565b5091979650505050505050565b60a081526000614c8a60a083018861410d565b602083820381850152614c9d828961445b565b91508382036040850152614cb18288614c22565b91508382036060850152614cc58287614c22565b8481036080860152855180825282870193509082019060005b81811015614cfc578451151583529383019391830191600101614cde565b50909a9950505050505050505050565b600082821015614d1e57614d1e614bc5565b500390565b600060408284031215614d3557600080fd5b604051604081018181106001600160401b0382111715614d5757614d57614321565b6040528235614d6581613fd6565b81526020928301359281019290925250919050565b600060208284031215614d8c57600080fd5b5051919050565b838152606060208201526000614dac6060830185614190565b8281036040840152613b3c8185614190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614df6816017850160208801614164565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614e27816028840160208801614164565b01602801949350505050565b8051614e3e81613fd6565b919050565b60006101408284031215614e5657600080fd5b614e5e614337565b614e6783614e33565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101208084015181830152508091505092915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215614f2e57600080fd5b815161092081613fd6565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c060808201819052600090614f7490830185614190565b82810360a0840152614f868185614190565b9998505050505050505050565b6000816000190483118215151615614fad57614fad614bc5565b500290565b600081614fc157614fc1614bc5565b506000190190565b600082614fe657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fdfe4552433737375072657365745061757361626c655065726d697373696f6e6564a52f07bb8dc8df886598eb50edeaba2b8e45715237ed244354b60ea04d0390b865d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212205875699fe59728351a72546aac76c4af76dabb440c090412ecff6f41c62c3fa464736f6c634300080d0033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
