{
  "_format": "hh-sol-artifact-1",
  "contractName": "MAHAXLocker",
  "sourceName": "contracts/MAHAXLocker.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_registry",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_royaltyRcv",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_renderingContract",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "_royaltyFeeNumerator",
          "type": "uint96"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "locktime",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "enum INFTLocker.DepositType",
          "name": "deposit_type",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "ts",
          "type": "uint256"
        }
      ],
      "name": "Deposit",
      "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": false,
          "internalType": "uint256",
          "name": "prevSupply",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "supply",
          "type": "uint256"
        }
      ],
      "name": "Supply",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "ts",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIGRATION_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_approved",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_block",
          "type": "uint256"
        }
      ],
      "name": "balanceOfAtNFT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "balanceOfNFT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_t",
          "type": "uint256"
        }
      ],
      "name": "balanceOfNFTAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "blockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "checkpoint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lockDuration",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "_stakeNFT",
          "type": "bool"
        }
      ],
      "name": "createLock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lockDuration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_stakeNFT",
          "type": "bool"
        }
      ],
      "name": "createLockFor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "depositFor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "emergencyRefund",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "epoch",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "getLastUserSlope",
      "outputs": [
        {
          "internalType": "int128",
          "name": "",
          "type": "int128"
        }
      ],
      "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": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": [],
      "name": "inBootstrapMode",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "increaseAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lockDuration",
          "type": "uint256"
        }
      ],
      "name": "increaseUnlockTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "isApprovedOrOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "isStaked",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "locked",
      "outputs": [
        {
          "internalType": "int128",
          "name": "amount",
          "type": "int128"
        },
        {
          "internalType": "uint256",
          "name": "end",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "lockedEnd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_from",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_to",
          "type": "uint256"
        }
      ],
      "name": "merge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lockDuration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "migrateTokenFor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minLockAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "ownershipChange",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        }
      ],
      "name": "pointHistory",
      "outputs": [
        {
          "components": [
            {
              "internalType": "int128",
              "name": "bias",
              "type": "int128"
            },
            {
              "internalType": "int128",
              "name": "slope",
              "type": "int128"
            },
            {
              "internalType": "uint256",
              "name": "ts",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "blk",
              "type": "uint256"
            }
          ],
          "internalType": "struct INFTLocker.Point",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract IRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renderingContract",
      "outputs": [
        {
          "internalType": "contract ITokenURIGenerator",
          "name": "",
          "type": "address"
        }
      ],
      "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": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minLockAmount",
          "type": "uint256"
        }
      ],
      "name": "setMinLockAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ITokenURIGenerator",
          "name": "_contract",
          "type": "address"
        }
      ],
      "name": "setRenderingContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_royaltyRcv",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "_royaltyFeeNumerator",
          "type": "uint96"
        }
      ],
      "name": "setRoyaltyInfo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "slopeChanges",
      "outputs": [
        {
          "internalType": "int128",
          "name": "",
          "type": "int128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stopBootstrapMode",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "supply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "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": "_owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenIndex",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_block",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "t",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyAtT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupplyWithoutDecay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_users",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_value",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_lockDuration",
          "type": "uint256[]"
        },
        {
          "internalType": "bool",
          "name": "_stakeNFT",
          "type": "bool"
        }
      ],
      "name": "uploadUsers",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "userPointEpoch",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loc",
          "type": "uint256"
        }
      ],
      "name": "userPointHistory",
      "outputs": [
        {
          "components": [
            {
              "internalType": "int128",
              "name": "bias",
              "type": "int128"
            },
            {
              "internalType": "int128",
              "name": "slope",
              "type": "int128"
            },
            {
              "internalType": "uint256",
              "name": "ts",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "blk",
              "type": "uint256"
            }
          ],
          "internalType": "struct INFTLocker.Point",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_idx",
          "type": "uint256"
        }
      ],
      "name": "userPointHistoryTs",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "votingPowerOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_power",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526004805460ff60a01b1916600160a01b17905568055de6a779bbac0000600e553480156200003157600080fd5b5060405162004fbe38038062004fbe8339810160408190526200005491620002ec565b60016000908155600480546001600160a01b0319166001600160a01b038716179055808052600a602052437f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e555427f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e455620000d0903362000132565b620000fc7f9d7b1cf62e8376e2ef102e20d4e487b829ff44d58ddb1f416ee01cf2ed26829e3362000132565b62000108838262000142565b50600580546001600160a01b0319166001600160a01b039290921691909117905550620003559050565b6200013e828262000247565b5050565b6127106001600160601b0382161115620001b65760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b0382166200020e5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401620001ad565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600255565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff166200013e5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b80516001600160a01b0381168114620002e757600080fd5b919050565b6000806000806080858703121562000302578384fd5b6200030d85620002cf565b93506200031d60208601620002cf565b92506200032d60408601620002cf565b60608601519092506001600160601b03811681146200034a578182fd5b939692955090935050565b614c5980620003656000396000f3fe608060405234801561001057600080fd5b506004361061035b5760003560e01c80636352211e116101ca578063b45a3c0e11610105578063d1c2babb116100a8578063d1c2babb146108c9578063d490dbca146108dc578063d547741f146108e4578063d60371a7146108f7578063e0514aba1461090a578063e58f59471461091d578063e7e242d41461093d578063e985e9c514610950578063f52a36f71461098c57600080fd5b8063b45a3c0e146107fb578063b7f1d0721461084f578063b88d4fde14610862578063baa51f8614610875578063bcc3f3bd14610888578063c2c4c5c11461089b578063c7fecbcc146108a3578063c87b56dd146108b657600080fd5b806391d148541161016d57806391d148541461075d57806395d89b4114610770578063981b24d0146107945780639d507b8b146107a7578063a217fddf146107ba578063a22cb465146107c2578063b128fd86146107d5578063b2383e55146107e857600080fd5b80636352211e146106cf57806370a08231146106e25780637116c60c146106f55780637b103999146107085780638ad4c4471461071b5780638c2c9baf1461072e5780638df4b13b14610741578063900cf0cf1461075457600080fd5b8063248a9ca31161029a57806342842e0e1161023d57806342842e0e146105d1578063430c2081146105e457806344acb42a146105f75780634bd2d9b31461064857806354fd4d501461065c5780635633e0a61461068057806357e871e7146106a6578063626944df146106ac57600080fd5b8063248a9ca3146104ee5780632a55205a146105125780632e1a7d4d146105335780632f2ff15d146105465780632f745c5914610559578063313ce5671461058f57806336568abe146105a957806339c6d4cb146105bc57600080fd5b8063095ea7b311610302578063095ea7b31461045f5780630a2abdb3146104725780630ec84dda146104855780630f68ae401461049857806318160ddd146104ab5780632277cdc2146104b357806323857d51146104bb57806323b872dd146104db57600080fd5b806301ffc9a71461036057806302fa7c4714610388578063045f70191461039d578063047fc9aa146103b057806305ae4f8c146103c757806306fdde03146103da578063081812fc146104155780630880427514610456575b600080fd5b61037361036e3660046143f4565b6109af565b60405190151581526020015b60405180910390f35b61039b61039636600461426e565b610a10565b005b61039b6103ab3660046140c5565b610a4e565b6103b960065481565b60405190815260200161037f565b6103b96103d53660046144b6565b610cbd565b6104086040518060400160405280600f81526020016e131bd8dad959081350521048139195608a1b81525081565b60405161037f919061466c565b61043e6104233660046143b8565b6000908152601160205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161037f565b6103b9600e5481565b61039b61046d366004614243565b610cfd565b6103b961048036600461450f565b610d07565b61039b6104933660046144b6565b610d4d565b61039b6104a63660046143b8565b610e5d565b6103b9610e89565b61039b610e99565b6103b96104c93660046143b8565b60086020526000908152604090205481565b61039b6104e9366004614135565b610ecf565b6103b96104fc3660046143b8565b6000908152600160208190526040909120015490565b6105256105203660046144b6565b610ee0565b60405161037f929190614653565b61039b6105413660046143b8565b610f8c565b61039b6105543660046143d0565b6112ce565b6103b9610567366004614243565b6001600160a01b03919091166000908152601360209081526040808320938352929052205490565b610597601281565b60405160ff909116815260200161037f565b61039b6105b73660046143d0565b6112f4565b6103b9600080516020614be483398151915281565b61039b6105df366004614135565b61136e565b6103736105f2366004614243565b611389565b61060a6106053660046144b6565b61139c565b60405161037f919060006080820190508251600f0b82526020830151600f0b6020830152604083015160408301526060830151606083015292915050565b60045461037390600160a01b900460ff1681565b610408604051806040016040528060058152602001640312e302e360dc1b81525081565b61069361068e3660046143b8565b611426565b604051600f9190910b815260200161037f565b436103b9565b6103b96106ba3660046143b8565b60009081526007602052604090206001015490565b61043e6106dd3660046143b8565b611477565b6103b96106f03660046140c5565b611494565b6103b96107033660046143b8565b61149f565b60045461043e906001600160a01b031681565b61060a6107293660046143b8565b611507565b6103b961073c3660046144b6565b611566565b6103b961074f3660046144d7565b611572565b6103b960095481565b61037361076b3660046143d0565b6115b7565b6104086040518060400160405280600581526020016409a829082b60db1b81525081565b6103b96107a23660046143b8565b6115e2565b61039b6107b53660046144b6565b6117a2565b6103b9600081565b61039b6107d0366004614216565b6119b5565b61039b6107e33660046142a6565b611a48565b61039b6107f63660046144b6565b611b67565b61082f6108093660046143b8565b600760205260009081526040902080546001820154600290920154600f9190910b919083565b60408051600f9490940b845260208401929092529082015260600161037f565b61039b61085d3660046140c5565b611c6d565b61039b610870366004614175565b611cb6565b6103736108833660046143b8565b611df0565b6103b96108963660046140c5565b611dfb565b61039b611e73565b60055461043e906001600160a01b031681565b6104086108c43660046143b8565b611ec1565b61039b6108d73660046144b6565b611f42565b6006546103b9565b61039b6108f23660046143d0565b6121c5565b6103b9610905366004614558565b6121eb565b6103b96109183660046144b6565b612230565b6103b961092b3660046143b8565b600c6020526000908152604090205481565b6103b961094b3660046143b8565b61223c565b61037361095e3660046140fd565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205460ff1690565b61069361099a3660046143b8565b600d60205260009081526040902054600f0b81565b60006301ffc9a760e01b6001600160e01b0319831614806109e057506380ac58cd60e01b6001600160e01b03198316145b806109fb5750635b5e139f60e01b6001600160e01b03198316145b80610a0a5750610a0a82612264565b92915050565b610a1b6000336115b7565b610a405760405162461bcd60e51b8152600401610a3790614818565b60405180910390fd5b610a4a8282612289565b5050565b610a596000336115b7565b610a755760405162461bcd60e51b8152600401610a3790614818565b600454600160a01b900460ff16610ac65760405162461bcd60e51b81526020600482015260156024820152746e6f7420696e20626f6f747374726170206d6f646560581b6044820152606401610a37565b6004805460408051631ef0061b60e11b815290516001600160a01b0390921692633de00c36928282019260209290829003018186803b158015610b0857600080fd5b505afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4091906140e1565b6001600160a01b031663a9059cbb82600460009054906101000a90046001600160a01b03166001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9d57600080fd5b505afa158015610bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd591906140e1565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b158015610c1657600080fd5b505afa158015610c2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4e919061449e565b6040518363ffffffff1660e01b8152600401610c6b929190614653565b602060405180830381600087803b158015610c8557600080fd5b505af1158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4a919061439c565b6000828152600b6020526040812082633b9aca008110610ced57634e487b7160e01b600052603260045260246000fd5b6003020160010154905092915050565b610a4a8282612382565b600060026000541415610d2c5760405162461bcd60e51b8152600401610a37906147e1565b6002600055610d3f858585600186612500565b600160005595945050505050565b60026000541415610d705760405162461bcd60e51b8152600401610a37906147e1565b600260008181558381526007602090815260409182902082516060810184528154600f90810b810b900b81526001820154928101929092529092015490820152610db983612714565b15610dd65760405162461bcd60e51b8152600401610a37906146b6565b60008211610df65760405162461bcd60e51b8152600401610a37906146d6565b60008160000151600f0b13610e1d5760405162461bcd60e51b8152600401610a3790614765565b42816020015111610e405760405162461bcd60e51b8152600401610a379061467f565b610e538383600084600060016000612819565b5050600160005550565b610e686000336115b7565b610e845760405162461bcd60e51b8152600401610a3790614818565b600e55565b6000610e944261149f565b905090565b610ea46000336115b7565b610ec05760405162461bcd60e51b8152600401610a3790614818565b6004805460ff60a01b19169055565b610edb83838333612c3c565b505050565b60008281526003602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610f555750604080518082019091526002546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610f74906001600160601b031687614a45565b610f7e919061499f565b915196919550909350505050565b60026000541415610faf5760405162461bcd60e51b8152600401610a37906147e1565b6002600055610fbe3382612d08565b610fda5760405162461bcd60e51b8152600401610a3790614730565b610fe381612714565b156110005760405162461bcd60e51b8152600401610a37906146b6565b60008181526007602090815260409182902082516060810184528154600f90810b810b900b81526001820154928101839052600290910154928101929092524210156110875760405162461bcd60e51b8152602060048201526016602482015275546865206c6f636b206469646e27742065787069726560501b6044820152606401610a37565b80516040805160608101825260008082526020808301828152838501838152888452600790925293909120915182546001600160801b0319166001600160801b03600f92830b16178355925160018301555160029091015560065491900b906110f08282614af3565b600681905550611121848460405180606001604052806000600f0b8152602001600081526020016000815250612d6b565b6004805460408051631ef0061b60e11b815290516001600160a01b0390921692633de00c36928282019260209290829003018186803b15801561116357600080fd5b505afa158015611177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119b91906140e1565b6001600160a01b031663a9059cbb33846040518363ffffffff1660e01b81526004016111c8929190614653565b602060405180830381600087803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121a919061439c565b61123457634e487b7160e01b600052600160045260246000fd5b61123d846133a4565b60408051858152602081018490524281830152905133917f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94919081900360600190a27f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c816112ab8482614af3565b6040805192835260208301919091520160405180910390a1505060016000555050565b600082815260016020819052604090912001546112ea81613421565b610edb838361342e565b6001600160a01b03811633146113645760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a37565b610a4a8282613499565b610edb83838360405180602001604052806000815250611cb6565b60006113958383612d08565b9392505050565b6113a4614018565b6000838152600b6020526040902082633b9aca0081106113d457634e487b7160e01b600052603260045260246000fd5b60408051608081018252600392909202929092018054600f81810b810b810b8452600160801b909104810b810b900b602083015260018101549282019290925260029091015460608201529392505050565b6000818152600c6020908152604080832054600b909252822081633b9aca00811061146157634e487b7160e01b600052603260045260246000fd5b6003020154600160801b9004600f0b9392505050565b6000818152601060205260408120546001600160a01b0316610a0a565b6000610a0a82613500565b6009546000818152600a6020908152604080832081516080810183528154600f81810b810b810b8352600160801b909104810b810b900b938101939093526001810154918301919091526002015460608201529091906114ff818561351b565b949350505050565b61150f614018565b506000908152600a602090815260409182902082516080810184528154600f81810b810b810b8352600160801b909104810b810b900b92810192909252600181015492820192909252600290910154606082015290565b60006113958383613625565b600061158c600080516020614be4833981519152336115b7565b6115a85760405162461bcd60e51b8152600401610a3790614795565b6114ff84848460006001612500565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60004382111561160257634e487b7160e01b600052600160045260246000fd5b60095460006116118483613946565b6000818152600a6020908152604080832081516080810183528154600f81810b810b810b8352600160801b909104810b810b900b9381019390935260018101549183019190915260020154606082015291925083831015611730576000600a8161167c866001614949565b8152602080820192909252604090810160002081516080810183528154600f81810b810b810b8352600160801b909104810b810b900b938101939093526001810154918301919091526002015460608083018290528501519192501461172a57826060015181606001516116f09190614af3565b836040015182604001516117049190614af3565b6060850151611713908a614af3565b61171d9190614a45565b611727919061499f565b91505b5061177f565b4382606001511461177f57606082015161174a9043614af3565b60408301516117599042614af3565b60608401516117689089614af3565b6117729190614a45565b61177c919061499f565b90505b611798828284604001516117939190614949565b61351b565b9695505050505050565b600260005414156117c55760405162461bcd60e51b8152600401610a37906147e1565b60026000556117d43383612d08565b6117f05760405162461bcd60e51b8152600401610a3790614730565b600082815260076020908152604080832081516060810183528154600f90810b810b900b815260018201549381019390935260020154908201529062093a808061183a8542614949565b611844919061499f565b61184e9190614a45565b9050428260200151116118925760405162461bcd60e51b815260206004820152600c60248201526b131bd8dac8195e1c1a5c995960a21b6044820152606401610a37565b60008260000151600f0b136118dd5760405162461bcd60e51b8152602060048201526011602482015270139bdd1a1a5b99c81a5cc81b1bd8dad959607a1b6044820152606401610a37565b816020015181116119305760405162461bcd60e51b815260206004820152601f60248201527f43616e206f6e6c7920696e637265617365206c6f636b206475726174696f6e006044820152606401610a37565b61193e630784ce0042614949565b81111561195d5760405162461bcd60e51b8152600401610a37906146f9565b630784ce0082604001516119719190614949565b8111156119905760405162461bcd60e51b8152600401610a37906146f9565b6119aa8460008385600360006119a58b612714565b612819565b505060016000555050565b6001600160a01b0382163314156119dc57634e487b7160e01b600052600160045260246000fd5b3360008181526015602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611a60600080516020614be4833981519152336115b7565b611a7c5760405162461bcd60e51b8152600401610a3790614795565b8151835114611a9d5760405162461bcd60e51b8152600401610a37906147bb565b8251845114611abe5760405162461bcd60e51b8152600401610a37906147bb565b60005b8451811015611b6057611b4d848281518110611aed57634e487b7160e01b600052603260045260246000fd5b6020026020010151848381518110611b1557634e487b7160e01b600052603260045260246000fd5b6020026020010151878481518110611b3d57634e487b7160e01b600052603260045260246000fd5b6020026020010151600086612500565b5080611b5881614b4d565b915050611ac1565b5050505050565b60026000541415611b8a5760405162461bcd60e51b8152600401610a37906147e1565b6002600055611b993383612d08565b611bb55760405162461bcd60e51b8152600401610a3790614730565b60008281526007602090815260409182902082516060810184528154600f90810b810b900b8152600182015492810192909252600201549181019190915281611c0e57634e487b7160e01b600052600160045260246000fd5b60008160000151600f0b13611c355760405162461bcd60e51b8152600401610a3790614765565b42816020015111611c585760405162461bcd60e51b8152600401610a379061467f565b610e538383600084600260016119a58a612714565b611c786000336115b7565b611c945760405162461bcd60e51b8152600401610a3790614818565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b611cc284848433612c3c565b823b15611dea57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611cfb903390889087908790600401614620565b602060405180830381600087803b158015611d1557600080fd5b505af1925050508015611d45575060408051601f3d908101601f19168201909252611d4291810190614410565b60015b611b60573d808015611d73576040519150601f19603f3d011682016040523d82523d6000602084013e611d78565b606091505b508051611de25760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610a37565b805181602001fd5b50505050565b6000610a0a82612714565b6000805b6001600160a01b038316600090815260126020526040902054811015611e6d576001600160a01b0383166000908152601360209081526040808320848452909152902054611e4d81426139d0565b611e579084614949565b9250508080611e6590614b4d565b915050611dff565b50919050565b611ebf600060405180606001604052806000600f0b815260200160008152602001600081525060405180606001604052806000600f0b8152602001600081526020016000815250612d6b565b565b60055460405163c87b56dd60e01b8152600481018390526060916001600160a01b03169063c87b56dd9060240160006040518083038186803b158015611f0657600080fd5b505afa158015611f1a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a0a919081019061442c565b611f4b82612714565b15611f865760405162461bcd60e51b815260206004820152600b60248201526a199c9bdb481cdd185ad95960aa1b6044820152606401610a37565b611f8f81612714565b15611fc85760405162461bcd60e51b81526020600482015260096024820152681d1bc81cdd185ad95960ba1b6044820152606401610a37565b808214156120035760405162461bcd60e51b81526020600482015260086024820152671cd85b59481b999d60c21b6044820152606401610a37565b61200d3383612d08565b61204d5760405162461bcd60e51b8152602060048201526011602482015270199c9bdb481b9bdd08185c1c1c9bdd9959607a1b6044820152606401610a37565b6120573382612d08565b6120955760405162461bcd60e51b815260206004820152600f60248201526e1d1bc81b9bdd08185c1c1c9bdd9959608a1b6044820152606401610a37565b60008281526007602081815260408084208151606080820184528254600f90810b810b810b8352600180850154848801908152600295860154858801528a8a52978752858920865193840187528054830b830b830b8452908101549683018790529093015493810193909352805194519095929490910b92111561211d578260200151612123565b83602001515b6040805160608082018352600080835260208084018281528486018381528d84526007835286842095518654600f9190910b6001600160801b03166001600160801b0319909116178655905160018601555160029094019390935583519182018452808252918101829052918201529091506121a29087908690612d6b565b6121ab866133a4565b6121bd85838386600460016000612819565b505050505050565b600082815260016020819052604090912001546121e181613421565b610edb8383613499565b6000600260005414156122105760405162461bcd60e51b8152600401610a37906147e1565b6002600055612223848433600186612500565b6001600055949350505050565b600061139583836139d0565b60008181526008602052604081205443141561225a57506000919050565b610a0a82426139d0565b60006001600160e01b0319821663152a902d60e11b1480610a0a5750610a0a82613aba565b6127106001600160601b03821611156122f75760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401610a37565b6001600160a01b0382166123495760405162461bcd60e51b815260206004820152601960248201527822a921991c9c189d1034b73b30b634b2103932b1b2b4bb32b960391b6044820152606401610a37565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600255565b6000818152601060205260409020546001600160a01b0316806123d65760405162461bcd60e51b815260206004820152600c60248201526b06f776e6572206973203078360a41b6044820152606401610a37565b806001600160a01b0316836001600160a01b031614156124245760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610a37565b6000828152601060209081526040808320546001600160a01b0385811685526015845282852033808752945291909320549216149060ff1681806124655750805b6124a25760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b6044820152606401610a37565b60008481526011602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918716917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050505050565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663f9fa21236040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561255257600080fd5b505af1158015612566573d6000803e3d6000fd5b50505050600062093a8080874261257d9190614949565b612587919061499f565b6125919190614a45565b9050600087116125b35760405162461bcd60e51b8152600401610a37906146d6565b4281116126025760405162461bcd60e51b815260206004820152601b60248201527f43616e206f6e6c79206c6f636b20696e207468652066757475726500000000006044820152606401610a37565b612610630784ce0042614949565b81111561262f5760405162461bcd60e51b8152600401610a37906146f9565b600f6000815461263e90614b4d565b90915550600f5461264f8682613aef565b506126ae818984600760008681526020019081526020016000206040518060600160405290816000820160009054906101000a9004600f0b600f0b600f0b81526020016001820154815260200160028201548152505060018a8a612819565b600e546126bb82426139d0565b10156127095760405162461bcd60e51b815260206004820152601a60248201527f6d696e20616d6f756e7420666f72206e6674206e6f74206d65740000000000006044820152606401610a37565b979650505050505050565b6000600460009054906101000a90046001600160a01b03166001600160a01b0316635ebaf1db6040518163ffffffff1660e01b815260040160206040518083038186803b15801561276457600080fd5b505afa158015612778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279c91906140e1565b6001600160a01b031663baa51f86836040518263ffffffff1660e01b81526004016127c991815260200190565b60206040518083038186803b1580156127e157600080fd5b505afa1580156127f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a919061439c565b600480546040805163f9fa212360e01b815290516001600160a01b039092169263f9fa212392828201926000929082900301818387803b15801561285c57600080fd5b505af1158015612870573d6000803e3d6000fd5b505060065486925090506128848882614949565b6006556040805160608101825260008082526020820181905291810191909152825160208085015190830152600f90810b900b81528251899084906128ca9083906148f8565b600f90810b900b90525087156128e257602083018890525b600186600481111561290457634e487b7160e01b600052602160045260246000fd5b1415612911574260408401525b60008a81526007602090815260409182902085518154600f9190910b6001600160801b03166001600160801b0319909116178155908501516001820155908401516002909101556129638a8285612d6b565b3389158015906129935750600487600481111561299057634e487b7160e01b600052602160045260246000fd5b14155b801561299c5750855b15612abf576004805460408051631ef0061b60e11b815290516001600160a01b0390921692633de00c36928282019260209290829003018186803b1580156129e357600080fd5b505afa1580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1b91906140e1565b6040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018d905291909116906323b872dd90606401602060405180830381600087803b158015612a6d57600080fd5b505af1158015612a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa5919061439c565b612abf57634e487b7160e01b600052600160045260246000fd5b8415612b9f576004805460408051635ebaf1db60e01b815290516001600160a01b0390921692635ebaf1db928282019260209290829003018186803b158015612b0757600080fd5b505afa158015612b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3f91906140e1565b6001600160a01b031663630b4b908c6040518263ffffffff1660e01b8152600401612b6c91815260200190565b600060405180830381600087803b158015612b8657600080fd5b505af1158015612b9a573d6000803e3d6000fd5b505050505b8360200151816001600160a01b03167fff04ccafc360e16b67d682d17bd9503c4c6b9a131f6be6325762dc9ffc7de6248d8d8b42604051612be39493929190614840565b60405180910390a37f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c83612c178c82614949565b6040805192835260208301919091520160405180910390a15050505050505050505050565b612c4582612714565b15612c625760405162461bcd60e51b8152600401610a37906146b6565b612c6c8183612d08565b612cae5760405162461bcd60e51b81526020600482015260136024820152723737ba1030b8383937bb32b21039b2b73232b960691b6044820152606401610a37565b612cb88483613b4e565b612cc28483613bc1565b612ccc8383613c50565b6000828152600860205260408082204390555183916001600160a01b038087169290881691600080516020614c0483398151915291a450505050565b60008181526010602090815260408083205460118352818420546001600160a01b039182168086526015855283862088841680885295529285205492938085149392909116149060ff168280612d5b5750815b8061270957509695505050505050565b612d73614018565b612d7b614018565b60095460009081908715612eaf57428760200151118015612da3575060008760000151600f0b135b15612df0578651612db990630784ce0090614961565b600f90810b900b602080870191909152870151612dd7904290614af3565b8560200151612de691906149b3565b600f90810b900b85525b428660200151118015612e0a575060008660000151600f0b135b15612e57578551612e2090630784ce0090614961565b600f90810b900b602080860191909152860151612e3e904290614af3565b8460200151612e4d91906149b3565b600f90810b900b84525b6020808801516000908152600d8252604090205490870151600f9190910b935015612eaf57866020015186602001511415612e9457829150612eaf565b6020808701516000908152600d9091526040902054600f0b91505b604080516080810182526000808252602082015242918101919091524360608201528115612f2c57506000818152600a602090815260409182902082516080810184528154600f81810b810b810b8352600160801b909104810b810b900b9281019290925260018101549282019290925260029091015460608201525b604081015181600042831015612f79576040840151612f4b9042614af3565b6060850151612f5a9043614af3565b612f6c90670de0b6b3a7640000614a45565b612f76919061499f565b90505b600062093a80612f89818661499f565b612f939190614a45565b905060005b60ff81101561311c57612fae62093a8083614949565b9150600042831115612fc257429250612fd6565b506000828152600d6020526040902054600f0b5b612fe08684614af3565b8760200151612fef91906149b3565b87518890612ffe908390614a64565b600f90810b900b90525060208701805182919061301c9083906148f8565b600f90810b810b90915288516000910b1215905061303957600087525b60008760200151600f0b121561305157600060208801525b60408088018490528501519295508592670de0b6b3a7640000906130759085614af3565b61307f9086614a45565b613089919061499f565b85606001516130989190614949565b60608801526130a8600189614949565b9750428314156130be575043606087015261311c565b6000888152600a60209081526040918290208951918a0151600f90810b6001600160801b03908116600160801b029390910b1691909117815590880151600182015560608801516002909101555061311581614b4d565b9050612f98565b505060098590558b156131ad578860200151886020015161313d9190614a64565b8460200181815161314e91906148f8565b600f90810b900b905250885188516131669190614a64565b845185906131759083906148f8565b600f90810b810b90915260208601516000910b1215905061319857600060208501525b60008460000151600f0b12156131ad57600084525b6000858152600a6020908152604091829020865191870151600f90810b6001600160801b03908116600160801b029390910b1691909117815590850151600182015560608501516002909101558b1561339657428b60200151111561327157602089015161321b90886148f8565b96508a602001518a60200151141561323f57602088015161323c9088614a64565b96505b60208b8101516000908152600d9091526040902080546001600160801b0319166001600160801b03600f8a900b161790555b428a6020015111156132d0578a602001518a6020015111156132d057602088015161329c9087614a64565b60208b8101516000908152600d9091526040902080546001600160801b0319166001600160801b03600f84900b1617905595505b60008c8152600c60205260408120546132ea906001614949565b905080600c60008f815260200190815260200160002081905550428960400181815250504389606001818152505088600b60008f815260200190815260200160002082633b9aca00811061334e57634e487b7160e01b600052603260045260246000fd5b82516020840151600f90810b6001600160801b03908116600160801b029290910b16176003919091029190910190815560408201516001820155606090910151600290910155505b505050505050505050505050565b6133ae3382612d08565b6133ca5760405162461bcd60e51b8152600401610a3790614730565b6000818152601060205260408120546001600160a01b0316906133ed9083612382565b6133f73383613bc1565b60405182906000906001600160a01b03841690600080516020614c04833981519152908390a45050565b61342b8133613cdd565b50565b61343882826115b7565b610a4a5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6134a382826115b7565b15610a4a5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b031660009081526012602052604090205490565b600080839050600062093a80808360400151613537919061499f565b6135419190614a45565b905060005b60ff8110156135fd5761355c62093a8083614949565b915060008583111561357057859250613584565b506000828152600d6020526040902054600f0b5b60408401516135939084614af3565b84602001516135a291906149b3565b845185906135b1908390614a64565b600f90810b900b905250828614156135c957506135fd565b80846020018181516135db91906148f8565b600f90810b900b90525050604083018290526135f681614b4d565b9050613546565b5060008260000151600f0b121561361357600082525b50516001600160801b03169392505050565b60004382111561364557634e487b7160e01b600052600160045260246000fd5b6000838152600c6020526040812054815b60808110156136f75781831061366b576136f7565b600060026136798486614949565b613684906001614949565b61368e919061499f565b6000888152600b60205260409020909150869082633b9aca0081106136c357634e487b7160e01b600052603260045260246000fd5b6003020160020154116136d8578093506136e6565b6136e3600182614af3565b92505b506136f081614b4d565b9050613656565b506000858152600b6020526040812083633b9aca00811061372857634e487b7160e01b600052603260045260246000fd5b60408051608081018252600392909202929092018054600f81810b810b810b8452600160801b909104810b810b900b6020830152600181015492820192909252600290910154606082015260095490915060006137858783613946565b6000818152600a6020908152604080832081516080810183528154600f81810b810b810b8352600160801b909104810b810b900b938101939093526001810154918301919091526002015460608201529192508084841015613874576000600a816137f1876001614949565b8152602080820192909252604090810160002081516080810183528154600f81810b810b810b8352600160801b909104810b810b900b938101939093526001810154918301919091526002015460608083018290528601519192506138569190614af3565b92508360400151816040015161386c9190614af3565b915050613898565b60608301516138839043614af3565b91508260400151426138959190614af3565b90505b604083015182156138d5578284606001518c6138b49190614af3565b6138be9084614a45565b6138c8919061499f565b6138d29082614949565b90505b60408701516138e49082614af3565b87602001516138f391906149b3565b87518890613902908390614a64565b600f90810b810b90915288516000910b12905061393457505093516001600160801b03169650610a0a95505050505050565b60009950505050505050505050610a0a565b60008082815b60808110156139c657818310613961576139c6565b6000600261396f8486614949565b61397a906001614949565b613984919061499f565b6000818152600a602052604090206002015490915087106139a7578093506139b5565b6139b2600182614af3565b92505b506139bf81614b4d565b905061394c565b5090949350505050565b6000828152600c6020526040812054806139ee576000915050610a0a565b6000848152600b6020526040812082633b9aca008110613a1e57634e487b7160e01b600052603260045260246000fd5b60408051608081018252600392909202929092018054600f81810b810b810b8452600160801b909104810b810b900b602083015260018101549282018390526002015460608201529150613a729085614ab4565b8160200151613a8191906149b3565b81518290613a90908390614a64565b600f90810b810b90915282516000910b12159050613aad57600081525b51600f0b9150610a0a9050565b60006001600160e01b03198216637965db0b60e01b1480610a0a57506301ffc9a760e01b6001600160e01b0319831614610a0a565b60006001600160a01b038316613b1557634e487b7160e01b600052600160045260246000fd5b613b1f8383613c50565b60405182906001600160a01b03851690600090600080516020614c04833981519152908290a450600192915050565b6000818152601060205260409020546001600160a01b03838116911614613b8557634e487b7160e01b600052600160045260246000fd5b6000818152601160205260409020546001600160a01b031615610a4a57600090815260116020526040902080546001600160a01b031916905550565b6000818152601060205260409020546001600160a01b03838116911614613bf857634e487b7160e01b600052600160045260246000fd5b600081815260106020526040902080546001600160a01b0319169055613c1e8282613d41565b6001600160a01b0382166000908152601260205260408120805460019290613c47908490614af3565b90915550505050565b6000818152601060205260409020546001600160a01b031615613c8357634e487b7160e01b600052600160045260246000fd5b600081815260106020526040902080546001600160a01b0319166001600160a01b038416179055613cb48282613df3565b6001600160a01b0382166000908152601260205260408120805460019290613c47908490614949565b613ce782826115b7565b610a4a57613cff816001600160a01b03166014613e37565b613d0a836020613e37565b604051602001613d1b9291906145b1565b60408051601f198184030181529082905262461bcd60e51b8252610a379160040161466c565b60006001613d4e84613500565b613d589190614af3565b60008381526014602052604090205490915080821415613da8576001600160a01b038416600090815260136020908152604080832085845282528083208390558583526014909152812055611dea565b6001600160a01b039390931660009081526013602090815260408083209383529281528282208054868452848420819055835260149091528282209490945592839055908252812055565b6000613dfe83613500565b6001600160a01b039093166000908152601360209081526040808320868452825280832085905593825260149052919091209190915550565b60606000613e46836002614a45565b613e51906002614949565b6001600160401b03811115613e7657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613ea0576020820181803683370190505b509050600360fc1b81600081518110613ec957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613f0657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000613f2a846002614a45565b613f35906001614949565b90505b6001811115613fc9576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613f7757634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110613f9b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93613fc281614b36565b9050613f38565b5083156113955760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a37565b60405180608001604052806000600f0b81526020016000600f0b815260200160008152602001600081525090565b600082601f830112614056578081fd5b8135602061406b614066836148ae565b61487e565b80838252828201915082860187848660051b890101111561408a578586fd5b855b858110156140a85781358452928401929084019060010161408c565b5090979650505050505050565b80356140c081614bbf565b919050565b6000602082840312156140d6578081fd5b813561139581614baa565b6000602082840312156140f2578081fd5b815161139581614baa565b6000806040838503121561410f578081fd5b823561411a81614baa565b9150602083013561412a81614baa565b809150509250929050565b600080600060608486031215614149578081fd5b833561415481614baa565b9250602084013561416481614baa565b929592945050506040919091013590565b6000806000806080858703121561418a578081fd5b843561419581614baa565b935060208501356141a581614baa565b92506040850135915060608501356001600160401b038111156141c6578182fd5b8501601f810187136141d6578182fd5b80356141e4614066826148d1565b8181528860208385010111156141f8578384fd5b81602084016020830137908101602001929092525092959194509250565b60008060408385031215614228578182fd5b823561423381614baa565b9150602083013561412a81614bbf565b60008060408385031215614255578182fd5b823561426081614baa565b946020939093013593505050565b60008060408385031215614280578182fd5b823561428b81614baa565b915060208301356001600160601b038116811461412a578182fd5b600080600080608085870312156142bb578182fd5b84356001600160401b03808211156142d1578384fd5b818701915087601f8301126142e4578384fd5b813560206142f4614066836148ae565b8083825282820191508286018c848660051b8901011115614313578889fd5b8896505b8487101561433e57803561432a81614baa565b835260019690960195918301918301614317565b5098505088013592505080821115614354578384fd5b61436088838901614046565b94506040870135915080821115614375578384fd5b5061438287828801614046565b925050614391606086016140b5565b905092959194509250565b6000602082840312156143ad578081fd5b815161139581614bbf565b6000602082840312156143c9578081fd5b5035919050565b600080604083850312156143e2578182fd5b82359150602083013561412a81614baa565b600060208284031215614405578081fd5b813561139581614bcd565b600060208284031215614421578081fd5b815161139581614bcd565b60006020828403121561443d578081fd5b81516001600160401b03811115614452578182fd5b8201601f81018413614462578182fd5b8051614470614066826148d1565b818152856020838501011115614484578384fd5b614495826020830160208601614b0a565b95945050505050565b6000602082840312156144af578081fd5b5051919050565b600080604083850312156144c8578182fd5b50508035926020909101359150565b6000806000606084860312156144eb578081fd5b8335925060208401359150604084013561450481614baa565b809150509250925092565b60008060008060808587031215614524578182fd5b8435935060208501359250604085013561453d81614baa565b9150606085013561454d81614bbf565b939692955090935050565b60008060006060848603121561456c578081fd5b8335925060208401359150604084013561450481614bbf565b6000815180845261459d816020860160208601614b0a565b601f01601f19169290920160200192915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516145e3816017850160208801614b0a565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614614816028840160208801614b0a565b01602801949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061179890830184614585565b6001600160a01b03929092168252602082015260400190565b6020815260006113956020830184614585565b6020808252601b908201527f43616e6e6f742061646420746f2065787069726564206c6f636b2e0000000000604082015260600190565b6020808252600690820152651cdd185ad95960d21b604082015260600190565b602080825260099082015268076616c7565203d20360bc1b604082015260600190565b6020808252601e908201527f566f74696e67206c6f636b2063616e2062652034207965617273206d61780000604082015260600190565b6020808252818101527f63616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564604082015260600190565b602080825260169082015275139bc8195e1a5cdd1a5b99c81b1bd8dac8199bdd5b9960521b604082015260600190565b6020808252600c908201526b3737ba1036b4b3b930ba37b960a11b604082015260600190565b6020808252600c908201526b696e76616c6964206461746160a01b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252600e908201526d6e6f7420676f7665726e616e636560901b604082015260600190565b84815260208101849052608081016005841061486c57634e487b7160e01b600052602160045260246000fd5b60408201939093526060015292915050565b604051601f8201601f191681016001600160401b03811182821017156148a6576148a6614b94565b604052919050565b60006001600160401b038211156148c7576148c7614b94565b5060051b60200190565b60006001600160401b038211156148ea576148ea614b94565b50601f01601f191660200190565b6000600f82810b9084900b828212801560016001607f1b038490038313161561492357614923614b68565b60016001607f1b0319839003821281161561494057614940614b68565b50019392505050565b6000821982111561495c5761495c614b68565b500190565b600081600f0b83600f0b8061497857614978614b7e565b60016001607f1b031982146000198214161561499657614996614b68565b90059392505050565b6000826149ae576149ae614b7e565b500490565b6000600f82810b9084900b60016001607f1b03838213848413808216848404861116156149e2576149e2614b68565b60016001607f1b031986851282811687830587121615614a0457614a04614b68565b878712925085820587128484161615614a1f57614a1f614b68565b85850587128184161615614a3557614a35614b68565b5050509290910295945050505050565b6000816000190483118215151615614a5f57614a5f614b68565b500290565b6000600f82810b9084900b828112801560016001607f1b0319830184121615614a8f57614a8f614b68565b60016001607f1b0382018313811615614aaa57614aaa614b68565b5090039392505050565b60008083128015600160ff1b850184121615614ad257614ad2614b68565b6001600160ff1b0384018313811615614aed57614aed614b68565b50500390565b600082821015614b0557614b05614b68565b500390565b60005b83811015614b25578181015183820152602001614b0d565b83811115611dea5750506000910152565b600081614b4557614b45614b68565b506000190190565b6000600019821415614b6157614b61614b68565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461342b57600080fd5b801515811461342b57600080fd5b6001600160e01b03198116811461342b57600080fdfe9d7b1cf62e8376e2ef102e20d4e487b829ff44d58ddb1f416ee01cf2ed26829eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212206388773be12479f96825d9aac10d932b2a88383cffb4091d994f4d4f62fef7ad64736f6c63430008040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061035b5760003560e01c80636352211e116101ca578063b45a3c0e11610105578063d1c2babb116100a8578063d1c2babb146108c9578063d490dbca146108dc578063d547741f146108e4578063d60371a7146108f7578063e0514aba1461090a578063e58f59471461091d578063e7e242d41461093d578063e985e9c514610950578063f52a36f71461098c57600080fd5b8063b45a3c0e146107fb578063b7f1d0721461084f578063b88d4fde14610862578063baa51f8614610875578063bcc3f3bd14610888578063c2c4c5c11461089b578063c7fecbcc146108a3578063c87b56dd146108b657600080fd5b806391d148541161016d57806391d148541461075d57806395d89b4114610770578063981b24d0146107945780639d507b8b146107a7578063a217fddf146107ba578063a22cb465146107c2578063b128fd86146107d5578063b2383e55146107e857600080fd5b80636352211e146106cf57806370a08231146106e25780637116c60c146106f55780637b103999146107085780638ad4c4471461071b5780638c2c9baf1461072e5780638df4b13b14610741578063900cf0cf1461075457600080fd5b8063248a9ca31161029a57806342842e0e1161023d57806342842e0e146105d1578063430c2081146105e457806344acb42a146105f75780634bd2d9b31461064857806354fd4d501461065c5780635633e0a61461068057806357e871e7146106a6578063626944df146106ac57600080fd5b8063248a9ca3146104ee5780632a55205a146105125780632e1a7d4d146105335780632f2ff15d146105465780632f745c5914610559578063313ce5671461058f57806336568abe146105a957806339c6d4cb146105bc57600080fd5b8063095ea7b311610302578063095ea7b31461045f5780630a2abdb3146104725780630ec84dda146104855780630f68ae401461049857806318160ddd146104ab5780632277cdc2146104b357806323857d51146104bb57806323b872dd146104db57600080fd5b806301ffc9a71461036057806302fa7c4714610388578063045f70191461039d578063047fc9aa146103b057806305ae4f8c146103c757806306fdde03146103da578063081812fc146104155780630880427514610456575b600080fd5b61037361036e3660046143f4565b6109af565b60405190151581526020015b60405180910390f35b61039b61039636600461426e565b610a10565b005b61039b6103ab3660046140c5565b610a4e565b6103b960065481565b60405190815260200161037f565b6103b96103d53660046144b6565b610cbd565b6104086040518060400160405280600f81526020016e131bd8dad959081350521048139195608a1b81525081565b60405161037f919061466c565b61043e6104233660046143b8565b6000908152601160205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161037f565b6103b9600e5481565b61039b61046d366004614243565b610cfd565b6103b961048036600461450f565b610d07565b61039b6104933660046144b6565b610d4d565b61039b6104a63660046143b8565b610e5d565b6103b9610e89565b61039b610e99565b6103b96104c93660046143b8565b60086020526000908152604090205481565b61039b6104e9366004614135565b610ecf565b6103b96104fc3660046143b8565b6000908152600160208190526040909120015490565b6105256105203660046144b6565b610ee0565b60405161037f929190614653565b61039b6105413660046143b8565b610f8c565b61039b6105543660046143d0565b6112ce565b6103b9610567366004614243565b6001600160a01b03919091166000908152601360209081526040808320938352929052205490565b610597601281565b60405160ff909116815260200161037f565b61039b6105b73660046143d0565b6112f4565b6103b9600080516020614be483398151915281565b61039b6105df366004614135565b61136e565b6103736105f2366004614243565b611389565b61060a6106053660046144b6565b61139c565b60405161037f919060006080820190508251600f0b82526020830151600f0b6020830152604083015160408301526060830151606083015292915050565b60045461037390600160a01b900460ff1681565b610408604051806040016040528060058152602001640312e302e360dc1b81525081565b61069361068e3660046143b8565b611426565b604051600f9190910b815260200161037f565b436103b9565b6103b96106ba3660046143b8565b60009081526007602052604090206001015490565b61043e6106dd3660046143b8565b611477565b6103b96106f03660046140c5565b611494565b6103b96107033660046143b8565b61149f565b60045461043e906001600160a01b031681565b61060a6107293660046143b8565b611507565b6103b961073c3660046144b6565b611566565b6103b961074f3660046144d7565b611572565b6103b960095481565b61037361076b3660046143d0565b6115b7565b6104086040518060400160405280600581526020016409a829082b60db1b81525081565b6103b96107a23660046143b8565b6115e2565b61039b6107b53660046144b6565b6117a2565b6103b9600081565b61039b6107d0366004614216565b6119b5565b61039b6107e33660046142a6565b611a48565b61039b6107f63660046144b6565b611b67565b61082f6108093660046143b8565b600760205260009081526040902080546001820154600290920154600f9190910b919083565b60408051600f9490940b845260208401929092529082015260600161037f565b61039b61085d3660046140c5565b611c6d565b61039b610870366004614175565b611cb6565b6103736108833660046143b8565b611df0565b6103b96108963660046140c5565b611dfb565b61039b611e73565b60055461043e906001600160a01b031681565b6104086108c43660046143b8565b611ec1565b61039b6108d73660046144b6565b611f42565b6006546103b9565b61039b6108f23660046143d0565b6121c5565b6103b9610905366004614558565b6121eb565b6103b96109183660046144b6565b612230565b6103b961092b3660046143b8565b600c6020526000908152604090205481565b6103b961094b3660046143b8565b61223c565b61037361095e3660046140fd565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205460ff1690565b61069361099a3660046143b8565b600d60205260009081526040902054600f0b81565b60006301ffc9a760e01b6001600160e01b0319831614806109e057506380ac58cd60e01b6001600160e01b03198316145b806109fb5750635b5e139f60e01b6001600160e01b03198316145b80610a0a5750610a0a82612264565b92915050565b610a1b6000336115b7565b610a405760405162461bcd60e51b8152600401610a3790614818565b60405180910390fd5b610a4a8282612289565b5050565b610a596000336115b7565b610a755760405162461bcd60e51b8152600401610a3790614818565b600454600160a01b900460ff16610ac65760405162461bcd60e51b81526020600482015260156024820152746e6f7420696e20626f6f747374726170206d6f646560581b6044820152606401610a37565b6004805460408051631ef0061b60e11b815290516001600160a01b0390921692633de00c36928282019260209290829003018186803b158015610b0857600080fd5b505afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4091906140e1565b6001600160a01b031663a9059cbb82600460009054906101000a90046001600160a01b03166001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9d57600080fd5b505afa158015610bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd591906140e1565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b158015610c1657600080fd5b505afa158015610c2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4e919061449e565b6040518363ffffffff1660e01b8152600401610c6b929190614653565b602060405180830381600087803b158015610c8557600080fd5b505af1158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4a919061439c565b6000828152600b6020526040812082633b9aca008110610ced57634e487b7160e01b600052603260045260246000fd5b6003020160010154905092915050565b610a4a8282612382565b600060026000541415610d2c5760405162461bcd60e51b8152600401610a37906147e1565b6002600055610d3f858585600186612500565b600160005595945050505050565b60026000541415610d705760405162461bcd60e51b8152600401610a37906147e1565b600260008181558381526007602090815260409182902082516060810184528154600f90810b810b900b81526001820154928101929092529092015490820152610db983612714565b15610dd65760405162461bcd60e51b8152600401610a37906146b6565b60008211610df65760405162461bcd60e51b8152600401610a37906146d6565b60008160000151600f0b13610e1d5760405162461bcd60e51b8152600401610a3790614765565b42816020015111610e405760405162461bcd60e51b8152600401610a379061467f565b610e538383600084600060016000612819565b5050600160005550565b610e686000336115b7565b610e845760405162461bcd60e51b8152600401610a3790614818565b600e55565b6000610e944261149f565b905090565b610ea46000336115b7565b610ec05760405162461bcd60e51b8152600401610a3790614818565b6004805460ff60a01b19169055565b610edb83838333612c3c565b505050565b60008281526003602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610f555750604080518082019091526002546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610f74906001600160601b031687614a45565b610f7e919061499f565b915196919550909350505050565b60026000541415610faf5760405162461bcd60e51b8152600401610a37906147e1565b6002600055610fbe3382612d08565b610fda5760405162461bcd60e51b8152600401610a3790614730565b610fe381612714565b156110005760405162461bcd60e51b8152600401610a37906146b6565b60008181526007602090815260409182902082516060810184528154600f90810b810b900b81526001820154928101839052600290910154928101929092524210156110875760405162461bcd60e51b8152602060048201526016602482015275546865206c6f636b206469646e27742065787069726560501b6044820152606401610a37565b80516040805160608101825260008082526020808301828152838501838152888452600790925293909120915182546001600160801b0319166001600160801b03600f92830b16178355925160018301555160029091015560065491900b906110f08282614af3565b600681905550611121848460405180606001604052806000600f0b8152602001600081526020016000815250612d6b565b6004805460408051631ef0061b60e11b815290516001600160a01b0390921692633de00c36928282019260209290829003018186803b15801561116357600080fd5b505afa158015611177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119b91906140e1565b6001600160a01b031663a9059cbb33846040518363ffffffff1660e01b81526004016111c8929190614653565b602060405180830381600087803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121a919061439c565b61123457634e487b7160e01b600052600160045260246000fd5b61123d846133a4565b60408051858152602081018490524281830152905133917f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94919081900360600190a27f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c816112ab8482614af3565b6040805192835260208301919091520160405180910390a1505060016000555050565b600082815260016020819052604090912001546112ea81613421565b610edb838361342e565b6001600160a01b03811633146113645760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a37565b610a4a8282613499565b610edb83838360405180602001604052806000815250611cb6565b60006113958383612d08565b9392505050565b6113a4614018565b6000838152600b6020526040902082633b9aca0081106113d457634e487b7160e01b600052603260045260246000fd5b60408051608081018252600392909202929092018054600f81810b810b810b8452600160801b909104810b810b900b602083015260018101549282019290925260029091015460608201529392505050565b6000818152600c6020908152604080832054600b909252822081633b9aca00811061146157634e487b7160e01b600052603260045260246000fd5b6003020154600160801b9004600f0b9392505050565b6000818152601060205260408120546001600160a01b0316610a0a565b6000610a0a82613500565b6009546000818152600a6020908152604080832081516080810183528154600f81810b810b810b8352600160801b909104810b810b900b938101939093526001810154918301919091526002015460608201529091906114ff818561351b565b949350505050565b61150f614018565b506000908152600a602090815260409182902082516080810184528154600f81810b810b810b8352600160801b909104810b810b900b92810192909252600181015492820192909252600290910154606082015290565b60006113958383613625565b600061158c600080516020614be4833981519152336115b7565b6115a85760405162461bcd60e51b8152600401610a3790614795565b6114ff84848460006001612500565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60004382111561160257634e487b7160e01b600052600160045260246000fd5b60095460006116118483613946565b6000818152600a6020908152604080832081516080810183528154600f81810b810b810b8352600160801b909104810b810b900b9381019390935260018101549183019190915260020154606082015291925083831015611730576000600a8161167c866001614949565b8152602080820192909252604090810160002081516080810183528154600f81810b810b810b8352600160801b909104810b810b900b938101939093526001810154918301919091526002015460608083018290528501519192501461172a57826060015181606001516116f09190614af3565b836040015182604001516117049190614af3565b6060850151611713908a614af3565b61171d9190614a45565b611727919061499f565b91505b5061177f565b4382606001511461177f57606082015161174a9043614af3565b60408301516117599042614af3565b60608401516117689089614af3565b6117729190614a45565b61177c919061499f565b90505b611798828284604001516117939190614949565b61351b565b9695505050505050565b600260005414156117c55760405162461bcd60e51b8152600401610a37906147e1565b60026000556117d43383612d08565b6117f05760405162461bcd60e51b8152600401610a3790614730565b600082815260076020908152604080832081516060810183528154600f90810b810b900b815260018201549381019390935260020154908201529062093a808061183a8542614949565b611844919061499f565b61184e9190614a45565b9050428260200151116118925760405162461bcd60e51b815260206004820152600c60248201526b131bd8dac8195e1c1a5c995960a21b6044820152606401610a37565b60008260000151600f0b136118dd5760405162461bcd60e51b8152602060048201526011602482015270139bdd1a1a5b99c81a5cc81b1bd8dad959607a1b6044820152606401610a37565b816020015181116119305760405162461bcd60e51b815260206004820152601f60248201527f43616e206f6e6c7920696e637265617365206c6f636b206475726174696f6e006044820152606401610a37565b61193e630784ce0042614949565b81111561195d5760405162461bcd60e51b8152600401610a37906146f9565b630784ce0082604001516119719190614949565b8111156119905760405162461bcd60e51b8152600401610a37906146f9565b6119aa8460008385600360006119a58b612714565b612819565b505060016000555050565b6001600160a01b0382163314156119dc57634e487b7160e01b600052600160045260246000fd5b3360008181526015602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611a60600080516020614be4833981519152336115b7565b611a7c5760405162461bcd60e51b8152600401610a3790614795565b8151835114611a9d5760405162461bcd60e51b8152600401610a37906147bb565b8251845114611abe5760405162461bcd60e51b8152600401610a37906147bb565b60005b8451811015611b6057611b4d848281518110611aed57634e487b7160e01b600052603260045260246000fd5b6020026020010151848381518110611b1557634e487b7160e01b600052603260045260246000fd5b6020026020010151878481518110611b3d57634e487b7160e01b600052603260045260246000fd5b6020026020010151600086612500565b5080611b5881614b4d565b915050611ac1565b5050505050565b60026000541415611b8a5760405162461bcd60e51b8152600401610a37906147e1565b6002600055611b993383612d08565b611bb55760405162461bcd60e51b8152600401610a3790614730565b60008281526007602090815260409182902082516060810184528154600f90810b810b900b8152600182015492810192909252600201549181019190915281611c0e57634e487b7160e01b600052600160045260246000fd5b60008160000151600f0b13611c355760405162461bcd60e51b8152600401610a3790614765565b42816020015111611c585760405162461bcd60e51b8152600401610a379061467f565b610e538383600084600260016119a58a612714565b611c786000336115b7565b611c945760405162461bcd60e51b8152600401610a3790614818565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b611cc284848433612c3c565b823b15611dea57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611cfb903390889087908790600401614620565b602060405180830381600087803b158015611d1557600080fd5b505af1925050508015611d45575060408051601f3d908101601f19168201909252611d4291810190614410565b60015b611b60573d808015611d73576040519150601f19603f3d011682016040523d82523d6000602084013e611d78565b606091505b508051611de25760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610a37565b805181602001fd5b50505050565b6000610a0a82612714565b6000805b6001600160a01b038316600090815260126020526040902054811015611e6d576001600160a01b0383166000908152601360209081526040808320848452909152902054611e4d81426139d0565b611e579084614949565b9250508080611e6590614b4d565b915050611dff565b50919050565b611ebf600060405180606001604052806000600f0b815260200160008152602001600081525060405180606001604052806000600f0b8152602001600081526020016000815250612d6b565b565b60055460405163c87b56dd60e01b8152600481018390526060916001600160a01b03169063c87b56dd9060240160006040518083038186803b158015611f0657600080fd5b505afa158015611f1a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a0a919081019061442c565b611f4b82612714565b15611f865760405162461bcd60e51b815260206004820152600b60248201526a199c9bdb481cdd185ad95960aa1b6044820152606401610a37565b611f8f81612714565b15611fc85760405162461bcd60e51b81526020600482015260096024820152681d1bc81cdd185ad95960ba1b6044820152606401610a37565b808214156120035760405162461bcd60e51b81526020600482015260086024820152671cd85b59481b999d60c21b6044820152606401610a37565b61200d3383612d08565b61204d5760405162461bcd60e51b8152602060048201526011602482015270199c9bdb481b9bdd08185c1c1c9bdd9959607a1b6044820152606401610a37565b6120573382612d08565b6120955760405162461bcd60e51b815260206004820152600f60248201526e1d1bc81b9bdd08185c1c1c9bdd9959608a1b6044820152606401610a37565b60008281526007602081815260408084208151606080820184528254600f90810b810b810b8352600180850154848801908152600295860154858801528a8a52978752858920865193840187528054830b830b830b8452908101549683018790529093015493810193909352805194519095929490910b92111561211d578260200151612123565b83602001515b6040805160608082018352600080835260208084018281528486018381528d84526007835286842095518654600f9190910b6001600160801b03166001600160801b0319909116178655905160018601555160029094019390935583519182018452808252918101829052918201529091506121a29087908690612d6b565b6121ab866133a4565b6121bd85838386600460016000612819565b505050505050565b600082815260016020819052604090912001546121e181613421565b610edb8383613499565b6000600260005414156122105760405162461bcd60e51b8152600401610a37906147e1565b6002600055612223848433600186612500565b6001600055949350505050565b600061139583836139d0565b60008181526008602052604081205443141561225a57506000919050565b610a0a82426139d0565b60006001600160e01b0319821663152a902d60e11b1480610a0a5750610a0a82613aba565b6127106001600160601b03821611156122f75760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401610a37565b6001600160a01b0382166123495760405162461bcd60e51b815260206004820152601960248201527822a921991c9c189d1034b73b30b634b2103932b1b2b4bb32b960391b6044820152606401610a37565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600255565b6000818152601060205260409020546001600160a01b0316806123d65760405162461bcd60e51b815260206004820152600c60248201526b06f776e6572206973203078360a41b6044820152606401610a37565b806001600160a01b0316836001600160a01b031614156124245760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610a37565b6000828152601060209081526040808320546001600160a01b0385811685526015845282852033808752945291909320549216149060ff1681806124655750805b6124a25760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b6044820152606401610a37565b60008481526011602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918716917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050505050565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663f9fa21236040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561255257600080fd5b505af1158015612566573d6000803e3d6000fd5b50505050600062093a8080874261257d9190614949565b612587919061499f565b6125919190614a45565b9050600087116125b35760405162461bcd60e51b8152600401610a37906146d6565b4281116126025760405162461bcd60e51b815260206004820152601b60248201527f43616e206f6e6c79206c6f636b20696e207468652066757475726500000000006044820152606401610a37565b612610630784ce0042614949565b81111561262f5760405162461bcd60e51b8152600401610a37906146f9565b600f6000815461263e90614b4d565b90915550600f5461264f8682613aef565b506126ae818984600760008681526020019081526020016000206040518060600160405290816000820160009054906101000a9004600f0b600f0b600f0b81526020016001820154815260200160028201548152505060018a8a612819565b600e546126bb82426139d0565b10156127095760405162461bcd60e51b815260206004820152601a60248201527f6d696e20616d6f756e7420666f72206e6674206e6f74206d65740000000000006044820152606401610a37565b979650505050505050565b6000600460009054906101000a90046001600160a01b03166001600160a01b0316635ebaf1db6040518163ffffffff1660e01b815260040160206040518083038186803b15801561276457600080fd5b505afa158015612778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279c91906140e1565b6001600160a01b031663baa51f86836040518263ffffffff1660e01b81526004016127c991815260200190565b60206040518083038186803b1580156127e157600080fd5b505afa1580156127f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a919061439c565b600480546040805163f9fa212360e01b815290516001600160a01b039092169263f9fa212392828201926000929082900301818387803b15801561285c57600080fd5b505af1158015612870573d6000803e3d6000fd5b505060065486925090506128848882614949565b6006556040805160608101825260008082526020820181905291810191909152825160208085015190830152600f90810b900b81528251899084906128ca9083906148f8565b600f90810b900b90525087156128e257602083018890525b600186600481111561290457634e487b7160e01b600052602160045260246000fd5b1415612911574260408401525b60008a81526007602090815260409182902085518154600f9190910b6001600160801b03166001600160801b0319909116178155908501516001820155908401516002909101556129638a8285612d6b565b3389158015906129935750600487600481111561299057634e487b7160e01b600052602160045260246000fd5b14155b801561299c5750855b15612abf576004805460408051631ef0061b60e11b815290516001600160a01b0390921692633de00c36928282019260209290829003018186803b1580156129e357600080fd5b505afa1580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1b91906140e1565b6040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018d905291909116906323b872dd90606401602060405180830381600087803b158015612a6d57600080fd5b505af1158015612a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa5919061439c565b612abf57634e487b7160e01b600052600160045260246000fd5b8415612b9f576004805460408051635ebaf1db60e01b815290516001600160a01b0390921692635ebaf1db928282019260209290829003018186803b158015612b0757600080fd5b505afa158015612b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3f91906140e1565b6001600160a01b031663630b4b908c6040518263ffffffff1660e01b8152600401612b6c91815260200190565b600060405180830381600087803b158015612b8657600080fd5b505af1158015612b9a573d6000803e3d6000fd5b505050505b8360200151816001600160a01b03167fff04ccafc360e16b67d682d17bd9503c4c6b9a131f6be6325762dc9ffc7de6248d8d8b42604051612be39493929190614840565b60405180910390a37f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c83612c178c82614949565b6040805192835260208301919091520160405180910390a15050505050505050505050565b612c4582612714565b15612c625760405162461bcd60e51b8152600401610a37906146b6565b612c6c8183612d08565b612cae5760405162461bcd60e51b81526020600482015260136024820152723737ba1030b8383937bb32b21039b2b73232b960691b6044820152606401610a37565b612cb88483613b4e565b612cc28483613bc1565b612ccc8383613c50565b6000828152600860205260408082204390555183916001600160a01b038087169290881691600080516020614c0483398151915291a450505050565b60008181526010602090815260408083205460118352818420546001600160a01b039182168086526015855283862088841680885295529285205492938085149392909116149060ff168280612d5b5750815b8061270957509695505050505050565b612d73614018565b612d7b614018565b60095460009081908715612eaf57428760200151118015612da3575060008760000151600f0b135b15612df0578651612db990630784ce0090614961565b600f90810b900b602080870191909152870151612dd7904290614af3565b8560200151612de691906149b3565b600f90810b900b85525b428660200151118015612e0a575060008660000151600f0b135b15612e57578551612e2090630784ce0090614961565b600f90810b900b602080860191909152860151612e3e904290614af3565b8460200151612e4d91906149b3565b600f90810b900b84525b6020808801516000908152600d8252604090205490870151600f9190910b935015612eaf57866020015186602001511415612e9457829150612eaf565b6020808701516000908152600d9091526040902054600f0b91505b604080516080810182526000808252602082015242918101919091524360608201528115612f2c57506000818152600a602090815260409182902082516080810184528154600f81810b810b810b8352600160801b909104810b810b900b9281019290925260018101549282019290925260029091015460608201525b604081015181600042831015612f79576040840151612f4b9042614af3565b6060850151612f5a9043614af3565b612f6c90670de0b6b3a7640000614a45565b612f76919061499f565b90505b600062093a80612f89818661499f565b612f939190614a45565b905060005b60ff81101561311c57612fae62093a8083614949565b9150600042831115612fc257429250612fd6565b506000828152600d6020526040902054600f0b5b612fe08684614af3565b8760200151612fef91906149b3565b87518890612ffe908390614a64565b600f90810b900b90525060208701805182919061301c9083906148f8565b600f90810b810b90915288516000910b1215905061303957600087525b60008760200151600f0b121561305157600060208801525b60408088018490528501519295508592670de0b6b3a7640000906130759085614af3565b61307f9086614a45565b613089919061499f565b85606001516130989190614949565b60608801526130a8600189614949565b9750428314156130be575043606087015261311c565b6000888152600a60209081526040918290208951918a0151600f90810b6001600160801b03908116600160801b029390910b1691909117815590880151600182015560608801516002909101555061311581614b4d565b9050612f98565b505060098590558b156131ad578860200151886020015161313d9190614a64565b8460200181815161314e91906148f8565b600f90810b900b905250885188516131669190614a64565b845185906131759083906148f8565b600f90810b810b90915260208601516000910b1215905061319857600060208501525b60008460000151600f0b12156131ad57600084525b6000858152600a6020908152604091829020865191870151600f90810b6001600160801b03908116600160801b029390910b1691909117815590850151600182015560608501516002909101558b1561339657428b60200151111561327157602089015161321b90886148f8565b96508a602001518a60200151141561323f57602088015161323c9088614a64565b96505b60208b8101516000908152600d9091526040902080546001600160801b0319166001600160801b03600f8a900b161790555b428a6020015111156132d0578a602001518a6020015111156132d057602088015161329c9087614a64565b60208b8101516000908152600d9091526040902080546001600160801b0319166001600160801b03600f84900b1617905595505b60008c8152600c60205260408120546132ea906001614949565b905080600c60008f815260200190815260200160002081905550428960400181815250504389606001818152505088600b60008f815260200190815260200160002082633b9aca00811061334e57634e487b7160e01b600052603260045260246000fd5b82516020840151600f90810b6001600160801b03908116600160801b029290910b16176003919091029190910190815560408201516001820155606090910151600290910155505b505050505050505050505050565b6133ae3382612d08565b6133ca5760405162461bcd60e51b8152600401610a3790614730565b6000818152601060205260408120546001600160a01b0316906133ed9083612382565b6133f73383613bc1565b60405182906000906001600160a01b03841690600080516020614c04833981519152908390a45050565b61342b8133613cdd565b50565b61343882826115b7565b610a4a5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6134a382826115b7565b15610a4a5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b031660009081526012602052604090205490565b600080839050600062093a80808360400151613537919061499f565b6135419190614a45565b905060005b60ff8110156135fd5761355c62093a8083614949565b915060008583111561357057859250613584565b506000828152600d6020526040902054600f0b5b60408401516135939084614af3565b84602001516135a291906149b3565b845185906135b1908390614a64565b600f90810b900b905250828614156135c957506135fd565b80846020018181516135db91906148f8565b600f90810b900b90525050604083018290526135f681614b4d565b9050613546565b5060008260000151600f0b121561361357600082525b50516001600160801b03169392505050565b60004382111561364557634e487b7160e01b600052600160045260246000fd5b6000838152600c6020526040812054815b60808110156136f75781831061366b576136f7565b600060026136798486614949565b613684906001614949565b61368e919061499f565b6000888152600b60205260409020909150869082633b9aca0081106136c357634e487b7160e01b600052603260045260246000fd5b6003020160020154116136d8578093506136e6565b6136e3600182614af3565b92505b506136f081614b4d565b9050613656565b506000858152600b6020526040812083633b9aca00811061372857634e487b7160e01b600052603260045260246000fd5b60408051608081018252600392909202929092018054600f81810b810b810b8452600160801b909104810b810b900b6020830152600181015492820192909252600290910154606082015260095490915060006137858783613946565b6000818152600a6020908152604080832081516080810183528154600f81810b810b810b8352600160801b909104810b810b900b938101939093526001810154918301919091526002015460608201529192508084841015613874576000600a816137f1876001614949565b8152602080820192909252604090810160002081516080810183528154600f81810b810b810b8352600160801b909104810b810b900b938101939093526001810154918301919091526002015460608083018290528601519192506138569190614af3565b92508360400151816040015161386c9190614af3565b915050613898565b60608301516138839043614af3565b91508260400151426138959190614af3565b90505b604083015182156138d5578284606001518c6138b49190614af3565b6138be9084614a45565b6138c8919061499f565b6138d29082614949565b90505b60408701516138e49082614af3565b87602001516138f391906149b3565b87518890613902908390614a64565b600f90810b810b90915288516000910b12905061393457505093516001600160801b03169650610a0a95505050505050565b60009950505050505050505050610a0a565b60008082815b60808110156139c657818310613961576139c6565b6000600261396f8486614949565b61397a906001614949565b613984919061499f565b6000818152600a602052604090206002015490915087106139a7578093506139b5565b6139b2600182614af3565b92505b506139bf81614b4d565b905061394c565b5090949350505050565b6000828152600c6020526040812054806139ee576000915050610a0a565b6000848152600b6020526040812082633b9aca008110613a1e57634e487b7160e01b600052603260045260246000fd5b60408051608081018252600392909202929092018054600f81810b810b810b8452600160801b909104810b810b900b602083015260018101549282018390526002015460608201529150613a729085614ab4565b8160200151613a8191906149b3565b81518290613a90908390614a64565b600f90810b810b90915282516000910b12159050613aad57600081525b51600f0b9150610a0a9050565b60006001600160e01b03198216637965db0b60e01b1480610a0a57506301ffc9a760e01b6001600160e01b0319831614610a0a565b60006001600160a01b038316613b1557634e487b7160e01b600052600160045260246000fd5b613b1f8383613c50565b60405182906001600160a01b03851690600090600080516020614c04833981519152908290a450600192915050565b6000818152601060205260409020546001600160a01b03838116911614613b8557634e487b7160e01b600052600160045260246000fd5b6000818152601160205260409020546001600160a01b031615610a4a57600090815260116020526040902080546001600160a01b031916905550565b6000818152601060205260409020546001600160a01b03838116911614613bf857634e487b7160e01b600052600160045260246000fd5b600081815260106020526040902080546001600160a01b0319169055613c1e8282613d41565b6001600160a01b0382166000908152601260205260408120805460019290613c47908490614af3565b90915550505050565b6000818152601060205260409020546001600160a01b031615613c8357634e487b7160e01b600052600160045260246000fd5b600081815260106020526040902080546001600160a01b0319166001600160a01b038416179055613cb48282613df3565b6001600160a01b0382166000908152601260205260408120805460019290613c47908490614949565b613ce782826115b7565b610a4a57613cff816001600160a01b03166014613e37565b613d0a836020613e37565b604051602001613d1b9291906145b1565b60408051601f198184030181529082905262461bcd60e51b8252610a379160040161466c565b60006001613d4e84613500565b613d589190614af3565b60008381526014602052604090205490915080821415613da8576001600160a01b038416600090815260136020908152604080832085845282528083208390558583526014909152812055611dea565b6001600160a01b039390931660009081526013602090815260408083209383529281528282208054868452848420819055835260149091528282209490945592839055908252812055565b6000613dfe83613500565b6001600160a01b039093166000908152601360209081526040808320868452825280832085905593825260149052919091209190915550565b60606000613e46836002614a45565b613e51906002614949565b6001600160401b03811115613e7657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613ea0576020820181803683370190505b509050600360fc1b81600081518110613ec957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613f0657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000613f2a846002614a45565b613f35906001614949565b90505b6001811115613fc9576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613f7757634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110613f9b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93613fc281614b36565b9050613f38565b5083156113955760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a37565b60405180608001604052806000600f0b81526020016000600f0b815260200160008152602001600081525090565b600082601f830112614056578081fd5b8135602061406b614066836148ae565b61487e565b80838252828201915082860187848660051b890101111561408a578586fd5b855b858110156140a85781358452928401929084019060010161408c565b5090979650505050505050565b80356140c081614bbf565b919050565b6000602082840312156140d6578081fd5b813561139581614baa565b6000602082840312156140f2578081fd5b815161139581614baa565b6000806040838503121561410f578081fd5b823561411a81614baa565b9150602083013561412a81614baa565b809150509250929050565b600080600060608486031215614149578081fd5b833561415481614baa565b9250602084013561416481614baa565b929592945050506040919091013590565b6000806000806080858703121561418a578081fd5b843561419581614baa565b935060208501356141a581614baa565b92506040850135915060608501356001600160401b038111156141c6578182fd5b8501601f810187136141d6578182fd5b80356141e4614066826148d1565b8181528860208385010111156141f8578384fd5b81602084016020830137908101602001929092525092959194509250565b60008060408385031215614228578182fd5b823561423381614baa565b9150602083013561412a81614bbf565b60008060408385031215614255578182fd5b823561426081614baa565b946020939093013593505050565b60008060408385031215614280578182fd5b823561428b81614baa565b915060208301356001600160601b038116811461412a578182fd5b600080600080608085870312156142bb578182fd5b84356001600160401b03808211156142d1578384fd5b818701915087601f8301126142e4578384fd5b813560206142f4614066836148ae565b8083825282820191508286018c848660051b8901011115614313578889fd5b8896505b8487101561433e57803561432a81614baa565b835260019690960195918301918301614317565b5098505088013592505080821115614354578384fd5b61436088838901614046565b94506040870135915080821115614375578384fd5b5061438287828801614046565b925050614391606086016140b5565b905092959194509250565b6000602082840312156143ad578081fd5b815161139581614bbf565b6000602082840312156143c9578081fd5b5035919050565b600080604083850312156143e2578182fd5b82359150602083013561412a81614baa565b600060208284031215614405578081fd5b813561139581614bcd565b600060208284031215614421578081fd5b815161139581614bcd565b60006020828403121561443d578081fd5b81516001600160401b03811115614452578182fd5b8201601f81018413614462578182fd5b8051614470614066826148d1565b818152856020838501011115614484578384fd5b614495826020830160208601614b0a565b95945050505050565b6000602082840312156144af578081fd5b5051919050565b600080604083850312156144c8578182fd5b50508035926020909101359150565b6000806000606084860312156144eb578081fd5b8335925060208401359150604084013561450481614baa565b809150509250925092565b60008060008060808587031215614524578182fd5b8435935060208501359250604085013561453d81614baa565b9150606085013561454d81614bbf565b939692955090935050565b60008060006060848603121561456c578081fd5b8335925060208401359150604084013561450481614bbf565b6000815180845261459d816020860160208601614b0a565b601f01601f19169290920160200192915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516145e3816017850160208801614b0a565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614614816028840160208801614b0a565b01602801949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061179890830184614585565b6001600160a01b03929092168252602082015260400190565b6020815260006113956020830184614585565b6020808252601b908201527f43616e6e6f742061646420746f2065787069726564206c6f636b2e0000000000604082015260600190565b6020808252600690820152651cdd185ad95960d21b604082015260600190565b602080825260099082015268076616c7565203d20360bc1b604082015260600190565b6020808252601e908201527f566f74696e67206c6f636b2063616e2062652034207965617273206d61780000604082015260600190565b6020808252818101527f63616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564604082015260600190565b602080825260169082015275139bc8195e1a5cdd1a5b99c81b1bd8dac8199bdd5b9960521b604082015260600190565b6020808252600c908201526b3737ba1036b4b3b930ba37b960a11b604082015260600190565b6020808252600c908201526b696e76616c6964206461746160a01b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252600e908201526d6e6f7420676f7665726e616e636560901b604082015260600190565b84815260208101849052608081016005841061486c57634e487b7160e01b600052602160045260246000fd5b60408201939093526060015292915050565b604051601f8201601f191681016001600160401b03811182821017156148a6576148a6614b94565b604052919050565b60006001600160401b038211156148c7576148c7614b94565b5060051b60200190565b60006001600160401b038211156148ea576148ea614b94565b50601f01601f191660200190565b6000600f82810b9084900b828212801560016001607f1b038490038313161561492357614923614b68565b60016001607f1b0319839003821281161561494057614940614b68565b50019392505050565b6000821982111561495c5761495c614b68565b500190565b600081600f0b83600f0b8061497857614978614b7e565b60016001607f1b031982146000198214161561499657614996614b68565b90059392505050565b6000826149ae576149ae614b7e565b500490565b6000600f82810b9084900b60016001607f1b03838213848413808216848404861116156149e2576149e2614b68565b60016001607f1b031986851282811687830587121615614a0457614a04614b68565b878712925085820587128484161615614a1f57614a1f614b68565b85850587128184161615614a3557614a35614b68565b5050509290910295945050505050565b6000816000190483118215151615614a5f57614a5f614b68565b500290565b6000600f82810b9084900b828112801560016001607f1b0319830184121615614a8f57614a8f614b68565b60016001607f1b0382018313811615614aaa57614aaa614b68565b5090039392505050565b60008083128015600160ff1b850184121615614ad257614ad2614b68565b6001600160ff1b0384018313811615614aed57614aed614b68565b50500390565b600082821015614b0557614b05614b68565b500390565b60005b83811015614b25578181015183820152602001614b0d565b83811115611dea5750506000910152565b600081614b4557614b45614b68565b506000190190565b6000600019821415614b6157614b61614b68565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461342b57600080fd5b801515811461342b57600080fd5b6001600160e01b03198116811461342b57600080fdfe9d7b1cf62e8376e2ef102e20d4e487b829ff44d58ddb1f416ee01cf2ed26829eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212206388773be12479f96825d9aac10d932b2a88383cffb4091d994f4d4f62fef7ad64736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
