Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
888,000,888,000,888,000,000,000,000,000,000

Holders:
5
Profile Summary
Blockchain:
Mantle (5000)


Decimals:
Contract Source Code Verified (Partial Match)
Contract Name:
TokenERC20

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 490 runs

Created At:
Mon, 17 Jul 2023 14:52:57 GMT
TokenERC20.sol
contracts
token
TokenERC20.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "delegator",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "fromDelegate",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "toDelegate",
        "type": "address"
      }
    ],
    "name": "DelegateChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "delegate",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "previousBalance",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newBalance",
        "type": "uint256"
      }
    ],
    "name": "DelegateVotesChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "platformFeeRecipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "platformFeeBps",
        "type": "uint256"
      }
    ],
    "name": "PlatformFeeInfoUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "PrimarySaleRecipientUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "previousAdminRole",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "newAdminRole",
        "type": "bytes32"
      }
    ],
    "name": "RoleAdminChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "RoleGranted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "RoleRevoked",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "mintedTo",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "quantityMinted",
        "type": "uint256"
      }
    ],
    "name": "TokensMinted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "signer",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "mintedTo",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "to",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "primarySaleRecipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "quantity",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "price",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "currency",
            "type": "address"
          },
          {
            "internalType": "uint128",
            "name": "validityStartTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "validityEndTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32"
          }
        ],
        "indexed": false,
        "internalType": "struct ITokenERC20.MintRequest",
        "name": "mintRequest",
        "type": "tuple"
      }
    ],
    "name": "TokensMintedWithSignature",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "DEFAULT_ADMIN_ROLE",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DOMAIN_SEPARATOR",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "burnFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint32",
        "name": "pos",
        "type": "uint32"
      }
    ],
    "name": "checkpoints",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "fromBlock",
            "type": "uint32"
          },
          {
            "internalType": "uint224",
            "name": "votes",
            "type": "uint224"
          }
        ],
        "internalType": "struct ERC20VotesUpgradeable.Checkpoint",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractType",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractVersion",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "subtractedValue",
        "type": "uint256"
      }
    ],
    "name": "decreaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "delegatee",
        "type": "address"
      }
    ],
    "name": "delegate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "delegatee",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "nonce",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "expiry",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "delegateBySig",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "delegates",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "blockNumber",
        "type": "uint256"
      }
    ],
    "name": "getPastTotalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "blockNumber",
        "type": "uint256"
      }
    ],
    "name": "getPastVotes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getPlatformFeeInfo",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      }
    ],
    "name": "getRoleAdmin",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "getRoleMember",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      }
    ],
    "name": "getRoleMemberCount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "getVotes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "grantRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "hasRole",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "addedValue",
        "type": "uint256"
      }
    ],
    "name": "increaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_defaultAdmin",
        "type": "address"
      },
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_contractURI",
        "type": "string"
      },
      {
        "internalType": "address[]",
        "name": "_trustedForwarders",
        "type": "address[]"
      },
      {
        "internalType": "address",
        "name": "_primarySaleRecipient",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_platformFeeRecipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_platformFeeBps",
        "type": "uint256"
      }
    ],
    "name": "initialize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "forwarder",
        "type": "address"
      }
    ],
    "name": "isTrustedForwarder",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "mintTo",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "to",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "primarySaleRecipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "quantity",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "price",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "currency",
            "type": "address"
          },
          {
            "internalType": "uint128",
            "name": "validityStartTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "validityEndTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32"
          }
        ],
        "internalType": "struct ITokenERC20.MintRequest",
        "name": "_req",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "_signature",
        "type": "bytes"
      }
    ],
    "name": "mintWithSignature",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes[]",
        "name": "data",
        "type": "bytes[]"
      }
    ],
    "name": "multicall",
    "outputs": [
      {
        "internalType": "bytes[]",
        "name": "results",
        "type": "bytes[]"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "nonces",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "numCheckpoints",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "permit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "primarySaleRecipient",
    "outputs": [
      {
        "internalType": "address",
        "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": "string",
        "name": "_uri",
        "type": "string"
      }
    ],
    "name": "setContractURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_platformFeeRecipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_platformFeeBps",
        "type": "uint256"
      }
    ],
    "name": "setPlatformFeeInfo",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_saleRecipient",
        "type": "address"
      }
    ],
    "name": "setPrimarySaleRecipient",
    "outputs": [],
    "stateMutability": "nonpayable",
    "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": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "to",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "primarySaleRecipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "quantity",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "price",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "currency",
            "type": "address"
          },
          {
            "internalType": "uint128",
            "name": "validityStartTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "validityEndTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32"
          }
        ],
        "internalType": "struct ITokenERC20.MintRequest",
        "name": "_req",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "_signature",
        "type": "bytes"
      }
    ],
    "name": "verify",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]


Contract Creation Code
60806040523480156200001157600080fd5b50600054610100900460ff166200002f5760005460ff161562000039565b62000039620000de565b620000a15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b600054610100900460ff16158015620000c4576000805461ffff19166101011790555b8015620000d7576000805461ff00191690555b506200010b565b6000620000f630620000fc60201b620018f91760201c565b15905090565b6001600160a01b03163b151590565b6147fb806200011b6000396000f3fe6080604052600436106102f85760003560e01c80637ecebe001161019a578063ac9650d8116100e1578063d505accf1161008a578063dfad80a611610064578063dfad80a614610975578063e8a3d48514610995578063f1127ed8146109aa57600080fd5b8063d505accf146108ef578063d547741f1461090f578063dd62ed3e1461092f57600080fd5b8063ca15c873116100bb578063ca15c87314610878578063cb2ef6f714610898578063d45573f6146108b857600080fd5b8063ac9650d8146107ec578063c1b606e214610819578063c3cda5201461085857600080fd5b806395d89b4111610143578063a217fddf1161011d578063a217fddf14610797578063a457c2d7146107ac578063a9059cbb146107cc57600080fd5b806395d89b411461074e5780639ab24eb014610763578063a0a8e4601461078357600080fd5b80639010d07c116101745780639010d07c146106c757806391d14854146106e7578063938e3d7b1461072e57600080fd5b80637ecebe00146106745780638e539e8c146106945780638f0fefbb146106b457600080fd5b806336568abe1161025e578063587cde1e116102075780636fcfff45116101e15780636fcfff45146105e957806370a082311461061e57806379cc67901461065457600080fd5b8063587cde1e1461056f5780635c19a95c146105a95780636f4f2837146105c957600080fd5b806342966c681161023857806342966c68146104f6578063449a52f814610516578063572b6c051461053657600080fd5b806336568abe1461049657806339509351146104b65780633a46b1a8146104d657600080fd5b80631e7ac488116102c05780632f2ff15d1161029a5780632f2ff15d1461043f578063313ce5671461045f5780633644e5151461048157600080fd5b80631e7ac488146103cc57806323b872dd146103ee578063248a9ca31461040e57600080fd5b806301ffc9a7146102fd57806306fdde0314610332578063079fe40e14610354578063095ea7b31461038d57806318160ddd146103ad575b600080fd5b34801561030957600080fd5b5061031d610318366004613dac565b6109f4565b60405190151581526020015b60405180910390f35b34801561033e57600080fd5b50610347610a1f565b6040516103299190613e2e565b34801561036057600080fd5b5061025f54610375906001600160a01b031681565b6040516001600160a01b039091168152602001610329565b34801561039957600080fd5b5061031d6103a8366004613e5d565b610ab1565b3480156103b957600080fd5b5060cb545b604051908152602001610329565b3480156103d857600080fd5b506103ec6103e7366004613e5d565b610ad3565b005b3480156103fa57600080fd5b5061031d610409366004613e87565b610bad565b34801561041a57600080fd5b506103be610429366004613ec3565b60009081526101f8602052604090206001015490565b34801561044b57600080fd5b506103ec61045a366004613edc565b610bdd565b34801561046b57600080fd5b5060125b60405160ff9091168152602001610329565b34801561048d57600080fd5b506103be610c0b565b3480156104a257600080fd5b506103ec6104b1366004613edc565b610c1a565b3480156104c257600080fd5b5061031d6104d1366004613e5d565b610cb6565b3480156104e257600080fd5b506103be6104f1366004613e5d565b610d02565b34801561050257600080fd5b506103ec610511366004613ec3565b610d76565b34801561052257600080fd5b506103ec610531366004613e5d565b610d8a565b34801561054257600080fd5b5061031d610551366004613f08565b6001600160a01b031660009081526065602052604090205460ff1690565b34801561057b57600080fd5b5061037561058a366004613f08565b6001600160a01b03908116600090815261019460205260409020541690565b3480156105b557600080fd5b506103ec6105c4366004613f08565b610dfa565b3480156105d557600080fd5b506103ec6105e4366004613f08565b610e0b565b3480156105f557600080fd5b50610609610604366004613f08565b610e65565b60405163ffffffff9091168152602001610329565b34801561062a57600080fd5b506103be610639366004613f08565b6001600160a01b0316600090815260c9602052604090205490565b34801561066057600080fd5b506103ec61066f366004613e5d565b610e88565b34801561068057600080fd5b506103be61068f366004613f08565b610ea4565b3480156106a057600080fd5b506103be6106af366004613ec3565b610ec3565b6103ec6106c2366004613f65565b610f20565b3480156106d357600080fd5b506103756106e2366004613fc2565b611005565b3480156106f357600080fd5b5061031d610702366004613edc565b60009182526101f8602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561073a57600080fd5b506103ec610749366004613fe4565b61101e565b34801561075a57600080fd5b5061034761103f565b34801561076f57600080fd5b506103be61077e366004613f08565b61104e565b34801561078f57600080fd5b50600161046f565b3480156107a357600080fd5b506103be600081565b3480156107b857600080fd5b5061031d6107c7366004613e5d565b6110d7565b3480156107d857600080fd5b5061031d6107e7366004613e5d565b611181565b3480156107f857600080fd5b5061080c610807366004614026565b611199565b604051610329919061409b565b34801561082557600080fd5b50610839610834366004613f65565b61128e565b6040805192151583526001600160a01b03909116602083015201610329565b34801561086457600080fd5b506103ec61087336600461410e565b611308565b34801561088457600080fd5b506103be610893366004613ec3565b61143e565b3480156108a457600080fd5b50690546f6b656e45524332360b41b6103be565b3480156108c457600080fd5b5061025e5461025d54604080516001600160a01b03909316835261ffff909116602083015201610329565b3480156108fb57600080fd5b506103ec61090a366004614166565b611456565b34801561091b57600080fd5b506103ec61092a366004613edc565b61159d565b34801561093b57600080fd5b506103be61094a3660046141d0565b6001600160a01b03918216600090815260ca6020908152604080832093909416825291909152205490565b34801561098157600080fd5b506103ec61099036600461432d565b6115c6565b3480156109a157600080fd5b506103476117e5565b3480156109b657600080fd5b506109ca6109c5366004614416565b611874565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610329565b60006001600160e01b03198216635a05180f60e01b1480610a195750610a1982611908565b92915050565b606060cc8054610a2e90614456565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5a90614456565b8015610aa75780601f10610a7c57610100808354040283529160200191610aa7565b820191906000526020600020905b815481529060010190602001808311610a8a57829003601f168201915b5050505050905090565b600080610abc61193d565b9050610ac9818585611947565b5060019392505050565b6000610ae681610ae161193d565b611a6b565b612710821115610b2f5760405162461bcd60e51b815260206004820152600f60248201526e65786365656473204d41585f42505360881b60448201526064015b60405180910390fd5b61025d80546fffffffffffffffffffffffffffffffff191667ffffffffffffffff841617905561025e80546001600160a01b0385166001600160a01b031990911681179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f183049060200160405180910390a2505050565b600080610bb861193d565b9050610bc5858285611aec565b610bd0858585611b78565b60019150505b9392505050565b60008281526101f86020526040902060010154610bfc81610ae161193d565b610c068383611d57565b505050565b6000610c15611d7a565b905090565b610c2261193d565b6001600160a01b0316816001600160a01b031614610ca85760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610b26565b610cb28282611df7565b5050565b600080610cc161193d565b6001600160a01b03808216600090815260ca6020908152604080832093891683529290522054909150610ac99082908690610cfd9087906144a1565b611947565b6000438210610d535760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610b26565b6001600160a01b038316600090815261019560205260409020610bd69083611e1a565b610d87610d8161193d565b82611ed7565b50565b610db67f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661070261193d565b610df05760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b4b73a32b91760a91b6044820152606401610b26565b610cb28282611ee1565b610d87610e0561193d565b82611f32565b6000610e1981610ae161193d565b61025f80546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b6001600160a01b03811660009081526101956020526040812054610a1990611fad565b610e9a82610e9461193d565b83611aec565b610cb28282611ed7565b6001600160a01b03811660009081526101616020526040812054610a19565b6000438210610f145760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610b26565b610a1961019683611e1a565b60026001541415610f735760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b26565b60026001556000610f85848484612016565b90506000610f966020860186613f08565b9050610fa1856121d6565b610faf818660400135611ee1565b806001600160a01b0316826001600160a01b03167fc4d88b1adde72eb5acf63f3e219ef5b223262233acf507c3b171277c91973c6787604051610ff291906144d0565b60405180910390a3505060018055505050565b600082815261022a60205260408120610bd6908361238d565b600061102c81610ae161193d565b61103961025c8484613ca3565b50505050565b606060cd8054610a2e90614456565b6001600160a01b0381166000908152610195602052604081205480156110c4576001600160a01b038316600090815261019560205260409020611092600183614566565b815481106110a2576110a261457d565b60009182526020909120015464010000000090046001600160e01b03166110c7565b60005b6001600160e01b03169392505050565b6000806110e261193d565b6001600160a01b03808216600090815260ca6020908152604080832093891683529290522054909150838110156111695760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b26565b6111768286868403611947565b506001949350505050565b60008061118c61193d565b9050610ac9818585611b78565b60608167ffffffffffffffff8111156111b4576111b46141fa565b6040519080825280602002602001820160405280156111e757816020015b60608152602001906001900390816111d25790505b50905060005b82811015611287576112573085858481811061120b5761120b61457d565b905060200281019061121d9190614593565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061239992505050565b8282815181106112695761126961457d565b6020026020010181905250808061127f906145da565b9150506111ed565b5092915050565b600080600061129e86868661248d565b60e08701356000908152610260602052604090205490915060ff161580156112fd57506001600160a01b03811660009081527f796d508d53e3bde377e6bbd6c219cd73260892bdabbb14c51497777bb61efc11602052604090205460ff165b969095509350505050565b834211156113585760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610b26565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906113d2906113ca9060a001604051602081830303815290604052805190602001206124f1565b85858561253f565b90506113dd81612567565b861461142b5760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610b26565b6114358188611f32565b50505050505050565b600081815261022a60205260408120610a1990612590565b834211156114a65760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610b26565b6000610162548888886114b88c612567565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000611513826124f1565b905060006115238287878761253f565b9050896001600160a01b0316816001600160a01b0316146115865760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610b26565b6115918a8a8a611947565b50505050505050505050565b60008281526101f860205260409020600101546115bc81610ae161193d565b610c068383611df7565b600054610100900460ff166115e15760005460ff16156115e5565b303b155b6116485760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b26565b600054610100900460ff1615801561166a576000805461ffff19166101011790555b61167261259a565b61167b856125cb565b6116848861265a565b61168e88886126ad565b85516116a29061025c906020890190613d23565b5061025f80546001600160a01b038087166001600160a01b03199283161790925561025e8054928616929091169190911790556127108211156117195760405162461bcd60e51b815260206004820152600f60248201526e65786365656473204d41585f42505360881b6044820152606401610b26565b61025d80546fffffffffffffffffffffffffffffffff19166001600160801b03841617905561174960008a6126fb565b6117737f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c8a6126fb565b61179d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68a6126fb565b6117c87f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c60006126fb565b80156117da576000805461ff00191690555b505050505050505050565b61025c80546117f390614456565b80601f016020809104026020016040519081016040528092919081815260200182805461181f90614456565b801561186c5780601f106118415761010080835404028352916020019161186c565b820191906000526020600020905b81548152906001019060200180831161184f57829003601f168201915b505050505081565b60408051808201909152600080825260208201526001600160a01b038316600090815261019560205260409020805463ffffffff84169081106118b9576118b961457d565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6001600160a01b03163b151590565b60006001600160e01b03198216637965db0b60e01b1480610a1957506301ffc9a760e01b6001600160e01b0319831614610a19565b6000610c15612705565b6001600160a01b0383166119a95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b26565b6001600160a01b038216611a0a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b26565b6001600160a01b03838116600081815260ca602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008281526101f8602090815260408083206001600160a01b038516845290915290205460ff16610cb257611aaa816001600160a01b0316601461272f565b611ab583602061272f565b604051602001611ac69291906145f5565b60408051601f198184030181529082905262461bcd60e51b8252610b2691600401613e2e565b6001600160a01b03838116600090815260ca602090815260408083209386168352929052205460001981146110395781811015611b6b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b26565b6110398484848403611947565b6001600160a01b038316611bdc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b26565b6001600160a01b038216611c3e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b26565b611c498383836128d8565b6001600160a01b038316600090815260c9602052604090205481811015611cc15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b26565b6001600160a01b03808516600090815260c96020526040808220858503905591851681529081208054849290611cf89084906144a1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d4491815260200190565b60405180910390a3611039848484612a1c565b611d618282612a27565b600082815261022a60205260409020610c069082612acc565b6000610c157f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611daa61012d5490565b61012e546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b611e018282612ae1565b600082815261022a60205260409020610c069082612b84565b8154600090815b81811015611e7e576000611e358284612b99565b905084868281548110611e4a57611e4a61457d565b60009182526020909120015463ffffffff161115611e6a57809250611e78565b611e758160016144a1565b91505b50611e21565b8115611ec25784611e90600184614566565b81548110611ea057611ea061457d565b60009182526020909120015464010000000090046001600160e01b0316611ec5565b60005b6001600160e01b031695945050505050565b610cb28282612bb4565b611eeb8282612bcd565b816001600160a01b03167f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a427382604051611f2691815260200190565b60405180910390a25050565b6001600160a01b03828116600081815261019460208181526040808420805460c9845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611039828483612bd7565b600063ffffffff8211156120125760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610b26565b5090565b600080600061202686868661128e565b91509150816120775760405162461bcd60e51b815260206004820152601160248201527f696e76616c6964207369676e61747572650000000000000000000000000000006044820152606401610b26565b4261208860c0880160a08901614676565b6001600160801b0316111580156120b75750426120ab60e0880160c08901614676565b6001600160801b031610155b6121035760405162461bcd60e51b815260206004820152600f60248201527f72657175657374206578706972656400000000000000000000000000000000006044820152606401610b26565b60006121126020880188613f08565b6001600160a01b031614156121695760405162461bcd60e51b815260206004820152601360248201527f726563697069656e7420756e646566696e6564000000000000000000000000006044820152606401610b26565b60008660400135116121ad5760405162461bcd60e51b815260206004820152600d60248201526c7a65726f207175616e7469747960981b6044820152606401610b26565b60e0860135600090815261026060205260409020805460ff191660011790559150509392505050565b60608101356121e25750565b61025d5460009061271090612204906001600160801b03166060850135614691565b61220e91906146b0565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61223560a0840160808501613f08565b6001600160a01b0316141561229c57816060013534146122975760405162461bcd60e51b815260206004820152601660248201527f6d7573742073656e6420746f74616c2070726963652e000000000000000000006044820152606401610b26565b6122ea565b34156122ea5760405162461bcd60e51b815260206004820152601260248201527f6d73672076616c7565206e6f74207a65726f00000000000000000000000000006044820152606401610b26565b6000806122fd6040850160208601613f08565b6001600160a01b0316146123205761231b6040840160208501613f08565b61232e565b61025f546001600160a01b03165b905061235e61234360a0850160808601613f08565b61234b61193d565b61025e546001600160a01b031685612d16565b610c0661237160a0850160808601613f08565b61237961193d565b83612388866060890135614566565b612d16565b6000610bd68383612d60565b60606001600160a01b0383163b6124015760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610b26565b600080846001600160a01b03168460405161241c91906146d2565b600060405180830381855af49150503d8060008114612457576040519150601f19603f3d011682016040523d82523d6000602084013e61245c565b606091505b5091509150612484828260405180606001604052806027815260200161479f60279139612d8a565b95945050505050565b60006124e983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506124e392506124d79150889050612dc3565b805190602001206124f1565b90612eb7565b949350505050565b6000610a196124fe611d7a565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080600061255087878787612edb565b9150915061255d81612fc8565b5095945050505050565b6001600160a01b0381166000908152610161602052604090208054600181018255905b50919050565b6000610a19825490565b600054610100900460ff166125c15760405162461bcd60e51b8152600401610b26906146ee565b6125c9613183565b565b600054610100900460ff166125f25760405162461bcd60e51b8152600401610b26906146ee565b60005b8151811015610cb2576001606560008484815181106126165761261661457d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580612652816145da565b9150506125f5565b600054610100900460ff166126815760405162461bcd60e51b8152600401610b26906146ee565b6126a481604051806040016040528060018152602001603160f81b8152506131b0565b610d87816131f3565b600054610100900460ff166126d45760405162461bcd60e51b8152600401610b26906146ee565b81516126e79060cc906020850190613d23565b508051610c069060cd906020840190613d23565b610cb28282611d57565b3360009081526065602052604081205460ff161561272a575060131936013560601c90565b503390565b6060600061273e836002614691565b6127499060026144a1565b67ffffffffffffffff811115612761576127616141fa565b6040519080825280601f01601f19166020018201604052801561278b576020820181803683370190505b509050600360fc1b816000815181106127a6576127a661457d565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106127d5576127d561457d565b60200101906001600160f81b031916908160001a90535060006127f9846002614691565b6128049060016144a1565b90505b6001811115612889577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106128455761284561457d565b1a60f81b82828151811061285b5761285b61457d565b60200101906001600160f81b031916908160001a90535060049490941c9361288281614739565b9050612807565b508315610bd65760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610b26565b600080527f8f29fe56722d6f6d7a8d615624f91685484dab3b4b97cb6eb59a109bbb1e64846020527f3aea944386d4a05fda9b64b748cd61a69e0097884edf6f7ec5b31017c42749c85460ff1615801561293a57506001600160a01b03831615155b801561294e57506001600160a01b03821615155b15610c06576001600160a01b03831660009081527f8f29fe56722d6f6d7a8d615624f91685484dab3b4b97cb6eb59a109bbb1e6484602052604090205460ff16806129d057506001600160a01b03821660009081527f8f29fe56722d6f6d7a8d615624f91685484dab3b4b97cb6eb59a109bbb1e6484602052604090205460ff165b610c065760405162461bcd60e51b815260206004820152601560248201527f7472616e736665727320726573747269637465642e00000000000000000000006044820152606401610b26565b610c06838383613242565b60008281526101f8602090815260408083206001600160a01b038516845290915290205460ff16610cb25760008281526101f8602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612a8861193d565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610bd6836001600160a01b038416613275565b60008281526101f8602090815260408083206001600160a01b038516845290915290205460ff1615610cb25760008281526101f8602090815260408083206001600160a01b03851684529091529020805460ff19169055612b4061193d565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000610bd6836001600160a01b0384166132c4565b6000612ba860028484186146b0565b610bd6908484166144a1565b612bbe82826133b7565b61103961019661351883613524565b610cb2828261369d565b816001600160a01b0316836001600160a01b031614158015612bf95750600081115b15610c06576001600160a01b03831615612c88576001600160a01b0383166000908152610195602052604081208190612c359061351885613524565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612c7d929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610c06576001600160a01b0382166000908152610195602052604081208190612cbf9061373585613524565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612d07929190918252602082015260400190565b60405180910390a25050505050565b80612d2057611039565b6001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612d5457612d4f8282613741565b611039565b611039848484846137e4565b6000826000018281548110612d7757612d7761457d565b9060005260206000200154905092915050565b60608315612d99575081610bd6565b825115612da95782518084602001fd5b8160405162461bcd60e51b8152600401610b269190613e2e565b60607fbac245dbd9b8b2bb334c0675db20a7a7a8506de563990c4ce3207f4c3c5b75e1612df36020840184613f08565b612e036040850160208601613f08565b60408501356060860135612e1d60a0880160808901613f08565b612e2d60c0890160a08a01614676565b612e3d60e08a0160c08b01614676565b6040805160208101999099526001600160a01b03978816908901529486166060880152608087019390935260a086019190915290921660c08401526001600160801b0391821660e0808501919091529116610100830152830135610120820152610140016040516020818303038152906040529050919050565b6000806000612ec6858561383d565b91509150612ed381612fc8565b509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612f125750600090506003612fbf565b8460ff16601b14158015612f2a57508460ff16601c14155b15612f3b5750600090506004612fbf565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612f8f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612fb857600060019250925050612fbf565b9150600090505b94509492505050565b6000816004811115612fdc57612fdc614750565b1415612fe55750565b6001816004811115612ff957612ff9614750565b14156130475760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b26565b600281600481111561305b5761305b614750565b14156130a95760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b26565b60038160048111156130bd576130bd614750565b14156131165760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b26565b600481600481111561312a5761312a614750565b1415610d875760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b26565b600054610100900460ff166131aa5760405162461bcd60e51b8152600401610b26906146ee565b60018055565b600054610100900460ff166131d75760405162461bcd60e51b8152600401610b26906146ee565b81516020928301208151919092012061012d9190915561012e55565b600054610100900460ff1661321a5760405162461bcd60e51b8152600401610b26906146ee565b507f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c961016255565b6001600160a01b0383811660009081526101946020526040808220548584168352912054610c0692918216911683612bd7565b60008181526001830160205260408120546132bc57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a19565b506000610a19565b600081815260018301602052604081205480156133ad5760006132e8600183614566565b85549091506000906132fc90600190614566565b905081811461336157600086600001828154811061331c5761331c61457d565b906000526020600020015490508087600001848154811061333f5761333f61457d565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061337257613372614766565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a19565b6000915050610a19565b6001600160a01b0382166134175760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610b26565b613423826000836128d8565b6001600160a01b038216600090815260c96020526040902054818110156134975760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610b26565b6001600160a01b038316600090815260c960205260408120838303905560cb80548492906134c6908490614566565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610c0683600084612a1c565b6000610bd68284614566565b82546000908190801561356f578561353d600183614566565b8154811061354d5761354d61457d565b60009182526020909120015464010000000090046001600160e01b0316613572565b60005b6001600160e01b0316925061358b83858763ffffffff16565b91506000811180156135c9575043866135a5600184614566565b815481106135b5576135b561457d565b60009182526020909120015463ffffffff16145b15613629576135d7826138ad565b866135e3600184614566565b815481106135f3576135f361457d565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b03160217905550613694565b85604051806040016040528061363e43611fad565b63ffffffff168152602001613652856138ad565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b6136a78282613916565b60cb546001600160e01b0310156137265760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f746573000000000000000000000000000000006064820152608401610b26565b61103961019661373583613524565b6000610bd682846144a1565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461378e576040519150601f19603f3d011682016040523d82523d6000602084013e613793565b606091505b5050905080610c065760405162461bcd60e51b815260206004820152601c60248201527f6e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610b26565b816001600160a01b0316836001600160a01b0316141561380357611039565b6001600160a01b03831630141561382857612d4f6001600160a01b0385168383613a09565b6110396001600160a01b038516848484613a6c565b6000808251604114156138745760208301516040840151606085015160001a61386887828585612edb565b945094505050506138a6565b82516040141561389e5760208301516040840151613893868383613aa4565b9350935050506138a6565b506000905060025b9250929050565b60006001600160e01b038211156120125760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610b26565b6001600160a01b03821661396c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610b26565b613978600083836128d8565b8060cb600082825461398a91906144a1565b90915550506001600160a01b038216600090815260c96020526040812080548392906139b79084906144a1565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610cb260008383612a1c565b6040516001600160a01b038316602482015260448101829052610c0690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613af6565b6040516001600160a01b03808516602483015283166044820152606481018290526110399085906323b872dd60e01b90608401613a35565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831681613ada60ff86901c601b6144a1565b9050613ae887828885612edb565b935093505050935093915050565b6000613b4b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613bc89092919063ffffffff16565b805190915015610c065780806020019051810190613b69919061477c565b610c065760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b26565b60606124e98484600085856001600160a01b0385163b613c2a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b26565b600080866001600160a01b03168587604051613c4691906146d2565b60006040518083038185875af1925050503d8060008114613c83576040519150601f19603f3d011682016040523d82523d6000602084013e613c88565b606091505b5091509150613c98828286612d8a565b979650505050505050565b828054613caf90614456565b90600052602060002090601f016020900481019282613cd15760008555613d17565b82601f10613cea5782800160ff19823516178555613d17565b82800160010185558215613d17579182015b82811115613d17578235825591602001919060010190613cfc565b50612012929150613d97565b828054613d2f90614456565b90600052602060002090601f016020900481019282613d515760008555613d17565b82601f10613d6a57805160ff1916838001178555613d17565b82800160010185558215613d17579182015b82811115613d17578251825591602001919060010190613d7c565b5b808211156120125760008155600101613d98565b600060208284031215613dbe57600080fd5b81356001600160e01b031981168114610bd657600080fd5b60005b83811015613df1578181015183820152602001613dd9565b838111156110395750506000910152565b60008151808452613e1a816020860160208601613dd6565b601f01601f19169290920160200192915050565b602081526000610bd66020830184613e02565b80356001600160a01b0381168114613e5857600080fd5b919050565b60008060408385031215613e7057600080fd5b613e7983613e41565b946020939093013593505050565b600080600060608486031215613e9c57600080fd5b613ea584613e41565b9250613eb360208501613e41565b9150604084013590509250925092565b600060208284031215613ed557600080fd5b5035919050565b60008060408385031215613eef57600080fd5b82359150613eff60208401613e41565b90509250929050565b600060208284031215613f1a57600080fd5b610bd682613e41565b60008083601f840112613f3557600080fd5b50813567ffffffffffffffff811115613f4d57600080fd5b6020830191508360208285010111156138a657600080fd5b6000806000838503610120811215613f7c57600080fd5b61010080821215613f8c57600080fd5b859450840135905067ffffffffffffffff811115613fa957600080fd5b613fb586828701613f23565b9497909650939450505050565b60008060408385031215613fd557600080fd5b50508035926020909101359150565b60008060208385031215613ff757600080fd5b823567ffffffffffffffff81111561400e57600080fd5b61401a85828601613f23565b90969095509350505050565b6000806020838503121561403957600080fd5b823567ffffffffffffffff8082111561405157600080fd5b818501915085601f83011261406557600080fd5b81358181111561407457600080fd5b8660208260051b850101111561408957600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156140f057603f198886030184526140de858351613e02565b945092850192908501906001016140c2565b5092979650505050505050565b803560ff81168114613e5857600080fd5b60008060008060008060c0878903121561412757600080fd5b61413087613e41565b9550602087013594506040870135935061414c606088016140fd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561418157600080fd5b61418a88613e41565b965061419860208901613e41565b955060408801359450606088013593506141b4608089016140fd565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156141e357600080fd5b6141ec83613e41565b9150613eff60208401613e41565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614239576142396141fa565b604052919050565b600082601f83011261425257600080fd5b813567ffffffffffffffff81111561426c5761426c6141fa565b61427f601f8201601f1916602001614210565b81815284602083860101111561429457600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126142c257600080fd5b8135602067ffffffffffffffff8211156142de576142de6141fa565b8160051b6142ed828201614210565b928352848101820192828101908785111561430757600080fd5b83870192505b84831015613c985761431e83613e41565b8252918301919083019061430d565b600080600080600080600080610100898b03121561434a57600080fd5b61435389613e41565b9750602089013567ffffffffffffffff8082111561437057600080fd5b61437c8c838d01614241565b985060408b013591508082111561439257600080fd5b61439e8c838d01614241565b975060608b01359150808211156143b457600080fd5b6143c08c838d01614241565b965060808b01359150808211156143d657600080fd5b506143e38b828c016142b1565b9450506143f260a08a01613e41565b925061440060c08a01613e41565b915060e089013590509295985092959890939650565b6000806040838503121561442957600080fd5b61443283613e41565b9150602083013563ffffffff8116811461444b57600080fd5b809150509250929050565b600181811c9082168061446a57607f821691505b6020821081141561258a57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156144b4576144b461448b565b500190565b80356001600160801b0381168114613e5857600080fd5b61010081016001600160a01b03806144e785613e41565b168352806144f760208601613e41565b16602084015260408401356040840152606084013560608401528061451e60808601613e41565b1660808401525061453160a084016144b9565b6001600160801b0380821660a08501528061454e60c087016144b9565b1660c0850152505060e083013560e083015292915050565b6000828210156145785761457861448b565b500390565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126145aa57600080fd5b83018035915067ffffffffffffffff8211156145c557600080fd5b6020019150368190038213156138a657600080fd5b60006000198214156145ee576145ee61448b565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161462d816017850160208801613dd6565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161466a816028840160208801613dd6565b01602801949350505050565b60006020828403121561468857600080fd5b610bd6826144b9565b60008160001904831182151516156146ab576146ab61448b565b500290565b6000826146cd57634e487b7160e01b600052601260045260246000fd5b500490565b600082516146e4818460208701613dd6565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000816147485761474861448b565b506000190190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561478e57600080fd5b81518015158114610bd657600080fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209d7d27d8a86bb0c2137d33b82d012775728e8546bffdc182273e2ba99cc7c8ff64736f6c634300080c0033