{
  "_format": "hh-sol-artifact-1",
  "contractName": "AdventureERC721CWithBasicRoyalties",
  "sourceName": "contracts/examples/adventure-erc721c/AdventureERC721CWithBasicRoyalties.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "royaltyReceiver_",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "royaltyFeeNumerator_",
          "type": "uint96"
        },
        {
          "internalType": "uint256",
          "name": "maxSimultaneousQuests_",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__AdventureApprovalToCaller",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__AlreadyOnQuest",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__AnActiveQuestIsPreventingTransfers",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__CallerNotApprovedForAdventure",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__CallerNotTokenOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__MaxSimultaneousQuestsCannotBeZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__MaxSimultaneousQuestsExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__NotOnQuest",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__QuestIdOutOfRange",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__TooManyActiveQuests",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__AdventureIsStillWhitelisted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__AlreadyWhitelisted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__ArrayIndexOverflowsUint128",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__CallerNotAWhitelistedAdventure",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__InvalidAdventureContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__NotWhitelisted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__InvalidTransferValidatorContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__SetTransferValidatorFirst",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ShouldNotMintToBurnAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "AdventureApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "whitelisted",
          "type": "bool"
        }
      ],
      "name": "AdventureWhitelistUpdated",
      "type": "event"
    },
    {
      "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": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "DefaultRoyaltySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "questId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "active",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "booted",
          "type": "bool"
        }
      ],
      "name": "QuestUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "TokenRoyaltySet",
      "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": false,
          "internalType": "address",
          "name": "oldValidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newValidator",
          "type": "address"
        }
      ],
      "name": "TransferValidatorUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_OPERATOR_WHITELIST_ID",
      "outputs": [
        {
          "internalType": "uint120",
          "name": "",
          "type": "uint120"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_SECURITY_LEVEL",
      "outputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_VALIDATOR",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "activeQuestList",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "activeQuestLookup",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isActive",
          "type": "bool"
        },
        {
          "internalType": "uint32",
          "name": "questId",
          "type": "uint32"
        },
        {
          "internalType": "uint64",
          "name": "startTimestamp",
          "type": "uint64"
        },
        {
          "internalType": "uint32",
          "name": "arrayIndex",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "adventureBurn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "adventureSafeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "adventureTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "areAdventuresApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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": "address",
          "name": "adventure",
          "type": "address"
        }
      ],
      "name": "bootFromAllQuests",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "questId",
          "type": "uint256"
        }
      ],
      "name": "enterQuest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "questId",
          "type": "uint256"
        }
      ],
      "name": "exitQuest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        }
      ],
      "name": "getActiveQuests",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "isActive",
              "type": "bool"
            },
            {
              "internalType": "uint32",
              "name": "questId",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "startTimestamp",
              "type": "uint64"
            },
            {
              "internalType": "uint32",
              "name": "arrayIndex",
              "type": "uint32"
            }
          ],
          "internalType": "struct Quest[]",
          "name": "activeQuests",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPermittedContractReceivers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        }
      ],
      "name": "getQuestCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSecurityPolicy",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum TransferSecurityLevels",
              "name": "transferSecurityLevel",
              "type": "uint8"
            },
            {
              "internalType": "uint120",
              "name": "operatorWhitelistId",
              "type": "uint120"
            },
            {
              "internalType": "uint120",
              "name": "permittedContractReceiversId",
              "type": "uint120"
            }
          ],
          "internalType": "struct CollectionSecurityPolicy",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "questId",
          "type": "uint256"
        }
      ],
      "name": "getTimeOnQuest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTransferValidator",
      "outputs": [
        {
          "internalType": "contract ICreatorTokenTransferValidator",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWhitelistedOperators",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isAdventureWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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": "receiver",
          "type": "address"
        }
      ],
      "name": "isContractReceiverPermitted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isOperatorWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "questId",
          "type": "uint256"
        }
      ],
      "name": "isParticipatingInQuest",
      "outputs": [
        {
          "internalType": "bool",
          "name": "participatingInQuest",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "startTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "isTransferAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxSimultaneousQuests",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "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": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "setAdventuresApprovedForAll",
      "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": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "setDefaultRoyalty",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "validator",
          "type": "address"
        },
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomValidatorAndSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setToDefaultSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "setTokenRoyalty",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "transferValidator_",
          "type": "address"
        }
      ],
      "name": "setTransferValidator",
      "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": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "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": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        }
      ],
      "name": "unwhitelistAdventure",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        }
      ],
      "name": "userExitAllQuests",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "questId",
          "type": "uint256"
        }
      ],
      "name": "userExitQuest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        }
      ],
      "name": "whitelistAdventure",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "whitelistedAdventureList",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "whitelistedAdventures",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isWhitelisted",
          "type": "bool"
        },
        {
          "internalType": "uint128",
          "name": "arrayIndex",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523480156200001157600080fd5b50604051620050df380380620050df833981016040819052620000349162000495565b84848484846040518060200160405280600081525060405180602001604052806000815250620000736200006d620000dd60201b60201c565b620000e1565b81516200008890600990602085019062000322565b5080516200009e90600a90602084019062000322565b505050620000b382826200013160201b60201c565b50620000c190508162000161565b608052620000d0828262000176565b5050505050505062000587565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516200014690600f90602085019062000322565b5080516200015c90601090602084019062000322565b505050565b6200016c81620001d8565b6003556001600455565b6200018d82826200021d60201b6200249e1760201c565b6040516001600160601b03821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b80620001f75760405163ed21f5e560e01b815260040160405180910390fd5b60648111156200021a5760405163dbb0ece360e01b815260040160405180910390fd5b50565b6127106001600160601b0382161115620002915760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620002e95760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000288565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217601255565b82805462000330906200054a565b90600052602060002090601f0160209004810192826200035457600085556200039f565b82601f106200036f57805160ff19168380011785556200039f565b828001600101855582156200039f579182015b828111156200039f57825182559160200191906001019062000382565b50620003ad929150620003b1565b5090565b5b80821115620003ad5760008155600101620003b2565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003f057600080fd5b81516001600160401b03808211156200040d576200040d620003c8565b604051601f8301601f19908116603f01168101908282118183101715620004385762000438620003c8565b816040528381526020925086838588010111156200045557600080fd5b600091505b838210156200047957858201830151818301840152908201906200045a565b838211156200048b5760008385830101525b9695505050505050565b600080600080600060a08688031215620004ae57600080fd5b85516001600160a01b0381168114620004c657600080fd5b60208701519095506001600160601b0381168114620004e457600080fd5b6040870151606088015191955093506001600160401b03808211156200050957600080fd5b6200051789838a01620003de565b935060808801519150808211156200052e57600080fd5b506200053d88828901620003de565b9150509295509295909350565b600181811c908216806200055f57607f821691505b602082108114156200058157634e487b7160e01b600052602260045260246000fd5b50919050565b608051614b35620005aa600039600081816107ab01526134a80152614b356000f3fe608060405234801561001057600080fd5b506004361061038e5760003560e01c80636c3b8699116101de578063a22cb4651161010f578063c87b56dd116100ad578063e985e9c51161007c578063e985e9c514610970578063f1e923c5146109ac578063f2fde38b146109bf578063fd762d92146109d257600080fd5b8063c87b56dd1461092f578063d007af5c14610942578063e2989f4c1461094a578063e370ab461461095d57600080fd5b8063aca139f7116100e9578063aca139f7146108e1578063b88d4fde146108f4578063be537f4314610907578063c05e2f441461091c57600080fd5b8063a22cb46514610857578063a9fc664e1461086a578063aa6cab5a1461087d57600080fd5b8063869f91101161017c57806395d89b411161015657806395d89b41146108165780639bc17ea41461081e5780639d645a4414610831578063a14481941461084457600080fd5b8063869f9110146107a95780638da5cb5b146107cf57806391623718146107e057600080fd5b8063715018a6116101b8578063715018a61461073f5780637e10b35b146107475780637f1a5ce11461075a578063816a15011461079657600080fd5b80636c3b8699146106e6578063703fa929146106ee57806370a082311461071e57600080fd5b80632a55205a116102c3578063495c8bf9116102615780635944c753116102305780635944c753146106855780635d4c1d461461069857806361347162146106c05780636352211e146106d357600080fd5b8063495c8bf9146106225780634e02c0781461063757806351dadc281461064a57806353401df91461067257600080fd5b8063301be7401161029d578063301be740146105bd57806340c10f19146105e957806342842e0e146105fc57806342966c681461060f57600080fd5b80632a55205a146105655780632e8da829146105975780632ebb386a146105aa57600080fd5b8063098144d41161033057806311ad40811161030a57806311ad4081146105175780631b25b0771461052a5780631c33b3281461053d57806323b872dd1461055257600080fd5b8063098144d41461044f5780630f3d911c14610460578063113405571461048057600080fd5b806306fdde031161036c57806306fdde0314610401578063070cba1714610416578063081812fc14610429578063095ea7b31461043c57600080fd5b8063014635461461039357806301ffc9a7146103c957806304634d8d146103ec575b600080fd5b6103ac71721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b6103dc6103d73660046141b7565b6109e5565b60405190151581526020016103c0565b6103ff6103fa36600461420a565b6109f6565b005b610409610a0c565b6040516103c09190614297565b6103ff6104243660046142aa565b610a9e565b6103ac6104373660046142c7565b610d01565b6103ff61044a3660046142e0565b610d28565b6011546001600160a01b03166103ac565b61047361046e36600461430c565b610e5f565b6040516103c0919061433c565b6104e061048e3660046143b5565b600860209081526000938452604080852082529284528284209052825290205460ff81169063ffffffff610100820481169167ffffffffffffffff6501000000000082041691600160681b9091041684565b60408051941515855263ffffffff938416602086015267ffffffffffffffff909216918401919091521660608201526080016103c0565b6103ff610525366004614400565b611079565b6103dc610538366004614422565b611095565b610545600181565b6040516103c09190614484565b6103ff610560366004614492565b61112e565b610578610573366004614400565b6111b5565b604080516001600160a01b0390931683526020830191909152016103c0565b6103dc6105a53660046142aa565b611270565b6103ff6105b836600461430c565b6113a2565b6103dc6105cb3660046142aa565b6001600160a01b031660009081526002602052604090205460ff1690565b6103ff6105f73660046142e0565b6113c0565b6103ff61060a366004614492565b6113ca565b6103ff61061d3660046142c7565b6113e5565b61062a6113f1565b6040516103c091906144d3565b6103ff610645366004614520565b611528565b61065d610658366004614520565b611545565b60405163ffffffff90911681526020016103c0565b6103ff610680366004614400565b61159b565b6103ff610693366004614547565b6115b7565b6106a0600181565b6040516effffffffffffffffffffffffffffff90911681526020016103c0565b6103ff6106ce3660046145af565b6115ca565b6103ac6106e13660046142c7565b61176f565b6103ff6117d4565b6107016106fc366004614520565b6118cc565b6040805193151584526020840192909252908201526060016103c0565b61073161072c3660046142aa565b61196c565b6040519081526020016103c0565b6103ff611a06565b6103ff6107553660046142aa565b611a1a565b6103dc6107683660046145ef565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6107316107a4366004614520565b611c54565b7f0000000000000000000000000000000000000000000000000000000000000000610731565b6000546001600160a01b03166103ac565b6107316107ee36600461430c565b60009182526007602090815260408084206001600160a01b0393909316845291905290205490565b610409611c89565b6103ff61082c3660046142c7565b611c98565b6103dc61083f3660046142aa565b611cbf565b6103ff6108523660046142e0565b611d9e565b6103ff61086536600461462b565b611da8565b6103ff6108783660046142aa565b611db3565b6108b961088b3660046142aa565b60026020526000908152604090205460ff81169061010090046fffffffffffffffffffffffffffffffff1682565b6040805192151583526fffffffffffffffffffffffffffffffff9091166020830152016103c0565b6103ff6108ef366004614492565b611f00565b6103ff6109023660046146a0565b611f3e565b61090f611fc6565b6040516103c09190614764565b6103ff61092a36600461462b565b612090565b61040961093d3660046142c7565b612142565b61062a6121b5565b6103ac6109583660046142c7565b612285565b6103ff61096b366004614492565b6122af565b6103dc61097e3660046145ef565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205460ff1690565b6103ff6109ba36600461430c565b6122d0565b6103ff6109cd3660046142aa565b6122ed565b6103ff6109e03660046147a8565b61237a565b60006109f0826125b8565b92915050565b6109fe6125f6565b610a0882826125fe565b5050565b6060600f8054610a1b90614804565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4790614804565b8015610a945780601f10610a6957610100808354040283529160200191610a94565b820191906000526020600020905b815481529060010190602001808311610a7757829003601f168201915b5050505050905090565b610aa66125f6565b6001600160a01b03811660009081526002602052604090205460ff16610af8576040517f385f0cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812054600180546101009092046fffffffffffffffffffffffffffffffff169291610b399190614855565b905080826fffffffffffffffffffffffffffffffff1614610c675760018181548110610b6757610b6761486c565b600091825260209091200154600180546001600160a01b03909216916fffffffffffffffffffffffffffffffff8516908110610ba557610ba561486c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600260006001856fffffffffffffffffffffffffffffffff1681548110610bfd57610bfd61486c565b60009182526020808320909101546001600160a01b03168352820192909252604001902080546fffffffffffffffffffffffffffffffff92909216610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff9092169190911790555b6001805480610c7857610c78614882565b60008281526020808220600019908401810180546001600160a01b03191690559092019092556001600160a01b038516808352600282526040808420805470ffffffffffffffffffffffffffffffffff1916905551928352917fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a2505050565b6000610d0c82612651565b506000908152600d60205260409020546001600160a01b031690565b6000610d338261176f565b9050806001600160a01b0316836001600160a01b03161415610dc25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b0382161480610dde5750610dde813361097e565b610e505760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610db9565b610e5a83836126b5565b505050565b60008281526007602090815260408083206001600160a01b03851684529091529020546060908067ffffffffffffffff811115610e9e57610e9e614659565b604051908082528060200260200182016040528015610ef057816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610ebc5790505b5060008581526007602090815260408083206001600160a01b0388168452825280832080548251818502810185019093528083529496509293909291830182828015610f8757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f4a5790505b5050505050905060005b828110156110705760008681526008602090815260408083206001600160a01b038916845290915281208351909190849084908110610fd257610fd261486c565b60209081029190910181015163ffffffff90811683528282019390935260409182016000208251608081018452905460ff811615158252610100810485169282019290925267ffffffffffffffff6501000000000083041692810192909252600160681b9004909116606082015284518590839081106110545761105461486c565b60200260200101819052508061106990614898565b9050610f91565b50505092915050565b611081612723565b61108a82612762565b610a088233836127aa565b6011546000906001600160a01b0316156111235760115460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b1580156110fe57600080fd5b505afa92505050801561110f575060015b61111b57506000611127565b506001611127565b5060015b9392505050565b6111383382612bd5565b6111aa5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610db9565b610e5a838383612c54565b60008281526013602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff169282019290925282916112345750604080518082019091526012546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b602081015160009061271090611258906bffffffffffffffffffffffff16876148b3565b61126291906148d2565b915196919550909350505050565b6011546000906001600160a01b03161561139a57601154604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b1580156112cf57600080fd5b505afa1580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130791906148f4565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b15801561136257600080fd5b505afa158015611376573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f09190614966565b506000919050565b6113ab81612e62565b6113b482612eb5565b610a0882826000612eff565b610a0882826131ea565b610e5a83838360405180602001604052806000815250611f3e565b6113ee8161338d565b50565b6011546060906001600160a01b03161561151557601154604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b15801561145057600080fd5b505afa158015611464573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148891906148f4565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b1580156114d457600080fd5b505afa1580156114e8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115109190810190614983565b905090565b5060408051600081526020810190915290565b61153182612e62565b61153a83612eb5565b610e5a8383836127aa565b6007602052826000526040600020602052816000526040600020818154811061156d57600080fd5b906000526020600020906008918282040191900660040292509250509054906101000a900463ffffffff1681565b6115a3612723565b6115ac82612762565b610a0882338361343a565b6115bf6125f6565b610e5a838383613777565b6115d26125f6565b60006115e66011546001600160a01b031690565b90506001600160a01b038116611628576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c0906116569030908890600401614a35565b600060405180830381600087803b15801561167057600080fd5b505af1158015611684573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b1580156116e057600080fd5b505af11580156116f4573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b15801561175157600080fd5b505af1158015611765573d6000803e3d6000fd5b5050505050505050565b6000818152600b60205260408120546001600160a01b0316806109f05760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610db9565b6117dc6125f6565b6117f771721c310194ccfc01e523fc93c9cccfa2a0ac611db3565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c09061182f903090600190600401614a35565b600060405180830381600087803b15801561184957600080fd5b505af115801561185d573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b1580156118b257600080fd5b505af11580156118c6573d6000803e3d6000fd5b50505050565b6000808063ffffffff84111561190e576040517f0b2530f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505060009283526008602090815260408085206001600160a01b0394909416855292815282842063ffffffff9283168552905291205460ff81169265010000000000820467ffffffffffffffff1692600160681b90920490911690565b60006001600160a01b0382166119ea5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610db9565b506001600160a01b03166000908152600c602052604090205490565b611a0e6137cd565b611a186000613827565b565b611a226125f6565b6001600160a01b03811660009081526002602052604090205460ff1615611a75576040517fd8110a5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516301ffc9a760e01b81527f977e0c1c0000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a79060240160206040518083038186803b158015611ad457600080fd5b505afa158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0c9190614966565b611b42576040517fb50e580c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546fffffffffffffffffffffffffffffffff811115611b8f576040517f6daf72d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660008181526002602090815260408083208054600170ffffffffffffffffffffffffffffffffff199091166101006fffffffffffffffffffffffffffffffff89160217811790915580548082018255938190527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690930180546001600160a01b03191685179055519182527fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e91015b60405180910390a25050565b6000806000611c648686866118cc565b509150915081611c75576000611c7f565b611c7f8142614855565b9695505050505050565b606060108054610a1b90614804565b611ca0612723565b611ca981612762565b6002600455611cb7816113e5565b506001600455565b6011546000906001600160a01b03161561139a57601154604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b158015611d1e57600080fd5b505afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5691906148f4565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b038516602482015260440161134a565b610a088282613877565b610a08338383613891565b611dbb6125f6565b60006001600160a01b0382163b15611e49576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b158015611e0d57600080fd5b505afa925050508015611e3d575060408051601f3d908101601f19168201909252611e3a91810190614966565b60015b611e4657611e49565b90505b6001600160a01b03821615801590611e5f575080155b15611e96576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601154604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a150601180546001600160a01b0319166001600160a01b0392909216919091179055565b611f08612723565b611f1181612762565b6002600481905550611f3483838360405180602001604052806000815250611fba565b5050600160045550565b611f483383612bd5565b611fba5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610db9565b6118c684848484613958565b60408051606081018252600080825260208201819052918101919091526011546001600160a01b03161561206f57601154604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561203757600080fd5b505afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151091906148f4565b50604080516060810182526000808252602082018190529181019190915290565b336001600160a01b0383168114156120d4576040517fc934974800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03818116600081815260066020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f83347dcc77580bb841ae3bac834b5b8ac5ccd2326276d265e638987eb6b2c05691015b60405180910390a3505050565b606061214d82612651565b600061216460408051602081019091526000815290565b905060008151116121845760405180602001604052806000815250611127565b8061218e846139e1565b60405160200161219f929190614a52565b6040516020818303038152906040529392505050565b6011546060906001600160a01b03161561151557601154604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561221457600080fd5b505afa158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c91906148f4565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024016114bc565b6001818154811061229557600080fd5b6000918252602090912001546001600160a01b0316905081565b6122b7612723565b6122c081612762565b6002600455611f348383836111aa565b6122d86125f6565b6122e181612e62565b610a0882826001612eff565b6122f56137cd565b6001600160a01b0381166123715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610db9565b6113ee81613827565b6123826125f6565b61238b84611db3565b604051630368065360e61b81526001600160a01b0385169063da0194c0906123b99030908790600401614a35565b600060405180830381600087803b1580156123d357600080fd5b505af11580156123e7573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561244357600080fd5b505af1158015612457573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d7443149150604401611737565b6127106bffffffffffffffffffffffff821611156125245760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610db9565b6001600160a01b03821661257a5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610db9565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff9091166020909201829052600160a01b90910217601255565b60006001600160e01b031982167f2a55205a0000000000000000000000000000000000000000000000000000000014806109f057506109f082613a8b565b611a186137cd565b612608828261249e565b6040516bffffffffffffffffffffffff821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef90602001611c48565b6000818152600b60205260409020546001600160a01b03166113ee5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610db9565b6000818152600d6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906126ea8261176f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61272c336105cb565b611a18576040517ff4b8028800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61277461276e82613ac9565b33610768565b6113ee576040517fdb07237500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006127ba8686866118cc565b925092509250826127f7576040517f85fceded00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008681526007602090815260408083206001600160a01b038916845290915281205485919061282990600190614855565b90508083146129ae5760008881526007602090815260408083206001600160a01b038b16845290915290208054829081106128665761286661486c565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16600760008a81526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002084815481106128d3576128d361486c565b600091825260208083206008808404909101805463ffffffff96871660046007968716026101000a90810297021916959095179094558b835292835260408083206001600160a01b038c168085529085528184208d855292855281842090845290935291812080548693929190859081106129505761295061486c565b6000918252602080832060088304015460079092166004026101000a90910463ffffffff90811684529083019390935260409091019020805470ffffffff000000000000000000000000001916600160681b93909216929092021790555b60008881526007602090815260408083206001600160a01b038b16845290915290208054806129df576129df614882565b600082815260208082206008600019909401848104909101805463ffffffff600460078516026101000a81021990911690915594558b825291825260408082206001600160a01b038c1683528352808220938616825292909152908120805470ffffffffffffffffffffffffffffffffff19169055612a5d89613ac9565b9050876001600160a01b0316816001600160a01b03168a7f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee8a600080604051612abb9392919092835290151560208301521515604082015260600190565b60405180910390a4876001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612afc57600080fd5b505afa158015612b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b349190614966565b15612b5a5760008981526005602052604081208054909190612b5590614a81565b909155505b604051636d4229c960e01b81526001600160a01b038281166004830152602482018b90526044820189905260648201879052891690636d4229c990608401600060405180830381600087803b158015612bb257600080fd5b505af1158015612bc6573d6000803e3d6000fd5b50505050505050505050505050565b600080612be18361176f565b9050806001600160a01b0316846001600160a01b03161480612c2857506001600160a01b038082166000908152600e602090815260408083209388168352929052205460ff165b80612c4c5750836001600160a01b0316612c4184610d01565b6001600160a01b0316145b949350505050565b826001600160a01b0316612c678261176f565b6001600160a01b031614612ccb5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610db9565b6001600160a01b038216612d465760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610db9565b612d538383836001613ad4565b826001600160a01b0316612d668261176f565b6001600160a01b031614612dca5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610db9565b6000818152600d6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652600c8552838620805460001901905590871680865283862080546001019055868652600b90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4610e5a8383836001613b59565b6001600160a01b03811660009081526002602052604090205460ff16156113ee576040517fb6708d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33612ebf82613ac9565b6001600160a01b0316146113ee576040517fb1160e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612f0a84613ac9565b60008581526007602090815260408083206001600160a01b038816845290915281205491925050836001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612f6a57600080fd5b505afa158015612f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa29190614966565b15612fcb5760008581526005602052604081208054839290612fc5908490614855565b90915550505b60005b818110156131b75760008681526007602090815260408083206001600160a01b0389168452909152812080548390811061300a5761300a61486c565b600091825260208083206008808404909101548b855290825260408085206001600160a01b038c8116808852918552828720600790961660040261010090810a90940463ffffffff9081168089529686528388208451608081018652905460ff81161515825295860482168188015265010000000000860467ffffffffffffffff16818601819052600160681b9096049091166060808301919091528451888152968701989098528c151593860193909352949650909491939092908916918c917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee910160405180910390a460008981526008602090815260408083206001600160a01b038c811680865291845282852063ffffffff8916808752945293829020805470ffffffffffffffffffffffffffffffffff191690559051636d4229c960e01b81529289166004840152602483018c905260448301919091526064820183905290636d4229c990608401600060405180830381600087803b15801561319157600080fd5b505af11580156131a5573d6000803e3d6000fd5b50505050836001019350505050612fce565b5060008581526007602090815260408083206001600160a01b038816845290915281206131e391614168565b5050505050565b6001600160a01b0382166132405760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610db9565b6000818152600b60205260409020546001600160a01b0316156132a55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610db9565b6132b3600083836001613ad4565b6000818152600b60205260409020546001600160a01b0316156133185760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610db9565b6001600160a01b0382166000818152600c6020908152604080832080546001019055848352600b90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4610a08600083836001613b59565b60006133988261176f565b90506133a8816000846001613ad4565b6133b18261176f565b6000838152600d6020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552600c84528285208054600019019055878552600b909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4610a08816000846001613b59565b60006134478484846118cc565b505090508015613483576040517fbf2bc3b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526007602090815260408083206001600160a01b03871684529091529020547f000000000000000000000000000000000000000000000000000000000000000081106134ff576040517f026a381300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526007602081815260408084206001600160a01b038916808652908352818520805460018082018355918752848720600880830490910180549290971660040261010090810a63ffffffff818102199094168d8516918202179098558d895290865284882093885292855283872086885290945291852080547fffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff0016650100000000004267ffffffffffffffff1602179092177fffffffffffffffffffffffffffffff00000000ffffffffffffffff00000000ff16930270ffffffff00000000000000000000000000191692909217600160681b91851691909102179055839061360b87613ac9565b604080518781526001602082015260008183015290519192506001600160a01b0388811692908416918a917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee9181900360600190a4856001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b15801561369957600080fd5b505afa1580156136ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d19190614966565b156136ec576000878152600560205260409020805460010190555b6040517f688a37410000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018990526044820187905287169063688a374190606401600060405180830381600087803b15801561375657600080fd5b505af115801561376a573d6000803e3d6000fd5b5050505050505050505050565b613782838383613b80565b6040516bffffffffffffffffffffffff821681526001600160a01b0383169084907f7f5b076c952c0ec86e5425963c1326dd0f03a3595c19f81d765e8ff559a6e33c90602001612135565b6000546001600160a01b03163314611a185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610db9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610a08828260405180602001604052806000815250613cab565b816001600160a01b0316836001600160a01b031614156138f35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610db9565b6001600160a01b038381166000818152600e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101612135565b613963848484612c54565b61396f84848484613d34565b6118c65760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610db9565b606060006139ee83613e97565b600101905060008167ffffffffffffffff811115613a0e57613a0e614659565b6040519080825280601f01601f191660200182016040528015613a38576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613a7e57613a83565b613a42565b509392505050565b60006001600160e01b031982167f86455d280000000000000000000000000000000000000000000000000000000014806109f057506109f082613f79565b60006109f08261176f565b6000805b82811015613b5157613aea8185614a98565b60008181526005602052604090205490925015613b33576040517fe49dac6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004541415613b4957613b49868684613fb7565b600101613ad8565b505050505050565b60005b818110156131e357613b788585613b738487614a98565b614013565b600101613b5c565b6127106bffffffffffffffffffffffff82161115613c065760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610db9565b6001600160a01b038216613c5c5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610db9565b6040805180820182526001600160a01b0393841681526bffffffffffffffffffffffff92831660208083019182526000968752601390529190942093519051909116600160a01b029116179055565b613cb583836131ea565b613cc26000848484613d34565b610e5a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610db9565b60006001600160a01b0384163b15613e8c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613d78903390899088908890600401614ab0565b602060405180830381600087803b158015613d9257600080fd5b505af1925050508015613dc2575060408051601f3d908101601f19168201909252613dbf91810190614ae2565b60015b613e72573d808015613df0576040519150601f19603f3d011682016040523d82523d6000602084013e613df5565b606091505b508051613e6a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610db9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612c4c565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613ee0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613f0c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613f2a57662386f26fc10000830492506010015b6305f5e1008310613f42576305f5e100830492506008015b6127108310613f5657612710830492506004015b60648310613f68576064830492506002015b600a83106109f05760010192915050565b60006001600160e01b031982167ff9f7ab410000000000000000000000000000000000000000000000000000000014806109f057506109f082614061565b6001600160a01b038381161590831615818015613fd15750805b15613fef57604051635cbd944160e01b815260040160405180910390fd5b8115613ffb575b6131e3565b801561400657613ff6565b6131e333868686346140e3565b6001600160a01b03838116159083161581801561402d5750805b1561404b57604051635cbd944160e01b815260040160405180910390fd5b811561405657613ff6565b8015613ff657613ff6565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806140c457506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806109f057506301ffc9a760e01b6001600160e01b03198316146109f0565b6011546001600160a01b0316156131e35760115460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561414957600080fd5b505afa15801561415d573d6000803e3d6000fd5b505050505050505050565b5080546000825560070160089004906000526020600020908101906113ee91905b8082111561419d5760008155600101614189565b5090565b6001600160e01b0319811681146113ee57600080fd5b6000602082840312156141c957600080fd5b8135611127816141a1565b6001600160a01b03811681146113ee57600080fd5b80356bffffffffffffffffffffffff8116811461420557600080fd5b919050565b6000806040838503121561421d57600080fd5b8235614228816141d4565b9150614236602084016141e9565b90509250929050565b60005b8381101561425a578181015183820152602001614242565b838111156118c65750506000910152565b6000815180845261428381602086016020860161423f565b601f01601f19169290920160200192915050565b602081526000611127602083018461426b565b6000602082840312156142bc57600080fd5b8135611127816141d4565b6000602082840312156142d957600080fd5b5035919050565b600080604083850312156142f357600080fd5b82356142fe816141d4565b946020939093013593505050565b6000806040838503121561431f57600080fd5b823591506020830135614331816141d4565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b828110156143a85781518051151585528681015163ffffffff908116888701528682015167ffffffffffffffff1687870152606091820151169085015260809093019290850190600101614359565b5091979650505050505050565b6000806000606084860312156143ca57600080fd5b8335925060208401356143dc816141d4565b9150604084013563ffffffff811681146143f557600080fd5b809150509250925092565b6000806040838503121561441357600080fd5b50508035926020909101359150565b60008060006060848603121561443757600080fd5b8335614442816141d4565b92506020840135614452816141d4565b915060408401356143f5816141d4565b6007811061448057634e487b7160e01b600052602160045260246000fd5b9052565b602081016109f08284614462565b6000806000606084860312156144a757600080fd5b83356144b2816141d4565b925060208401356144c2816141d4565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156145145783516001600160a01b0316835292840192918401916001016144ef565b50909695505050505050565b60008060006060848603121561453557600080fd5b8335925060208401356144c2816141d4565b60008060006060848603121561455c57600080fd5b83359250602084013561456e816141d4565b915061457c604085016141e9565b90509250925092565b600781106113ee57600080fd5b6effffffffffffffffffffffffffffff811681146113ee57600080fd5b6000806000606084860312156145c457600080fd5b83356145cf81614585565b925060208401356145df81614592565b915060408401356143f581614592565b6000806040838503121561460257600080fd5b823561460d816141d4565b91506020830135614331816141d4565b80151581146113ee57600080fd5b6000806040838503121561463e57600080fd5b8235614649816141d4565b915060208301356143318161461d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561469857614698614659565b604052919050565b600080600080608085870312156146b657600080fd5b84356146c1816141d4565b93506020858101356146d2816141d4565b935060408601359250606086013567ffffffffffffffff808211156146f657600080fd5b818801915088601f83011261470a57600080fd5b81358181111561471c5761471c614659565b61472e601f8201601f1916850161466f565b9150808252898482850101111561474457600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000606082019050614777828451614462565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b600080600080608085870312156147be57600080fd5b84356147c9816141d4565b935060208501356147d981614585565b925060408501356147e981614592565b915060608501356147f981614592565b939692955090935050565b600181811c9082168061481857607f821691505b6020821081141561483957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156148675761486761483f565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006000198214156148ac576148ac61483f565b5060010190565b60008160001904831182151516156148cd576148cd61483f565b500290565b6000826148ef57634e487b7160e01b600052601260045260246000fd5b500490565b60006060828403121561490657600080fd5b6040516060810181811067ffffffffffffffff8211171561492957614929614659565b604052825161493781614585565b8152602083015161494781614592565b6020820152604083015161495a81614592565b60408201529392505050565b60006020828403121561497857600080fd5b81516111278161461d565b6000602080838503121561499657600080fd5b825167ffffffffffffffff808211156149ae57600080fd5b818501915085601f8301126149c257600080fd5b8151818111156149d4576149d4614659565b8060051b91506149e584830161466f565b81815291830184019184810190888411156149ff57600080fd5b938501935b83851015614a295784519250614a19836141d4565b8282529385019390850190614a04565b98975050505050505050565b6001600160a01b0383168152604081016111276020830184614462565b60008351614a6481846020880161423f565b835190830190614a7881836020880161423f565b01949350505050565b600081614a9057614a9061483f565b506000190190565b60008219821115614aab57614aab61483f565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611c7f608083018461426b565b600060208284031215614af457600080fd5b8151611127816141a156fea2646970667358221220e8b3bcab179002e8ce39e7a3415164eec9e1df90d0737407ea3628389bfd44ab64736f6c63430008090033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061038e5760003560e01c80636c3b8699116101de578063a22cb4651161010f578063c87b56dd116100ad578063e985e9c51161007c578063e985e9c514610970578063f1e923c5146109ac578063f2fde38b146109bf578063fd762d92146109d257600080fd5b8063c87b56dd1461092f578063d007af5c14610942578063e2989f4c1461094a578063e370ab461461095d57600080fd5b8063aca139f7116100e9578063aca139f7146108e1578063b88d4fde146108f4578063be537f4314610907578063c05e2f441461091c57600080fd5b8063a22cb46514610857578063a9fc664e1461086a578063aa6cab5a1461087d57600080fd5b8063869f91101161017c57806395d89b411161015657806395d89b41146108165780639bc17ea41461081e5780639d645a4414610831578063a14481941461084457600080fd5b8063869f9110146107a95780638da5cb5b146107cf57806391623718146107e057600080fd5b8063715018a6116101b8578063715018a61461073f5780637e10b35b146107475780637f1a5ce11461075a578063816a15011461079657600080fd5b80636c3b8699146106e6578063703fa929146106ee57806370a082311461071e57600080fd5b80632a55205a116102c3578063495c8bf9116102615780635944c753116102305780635944c753146106855780635d4c1d461461069857806361347162146106c05780636352211e146106d357600080fd5b8063495c8bf9146106225780634e02c0781461063757806351dadc281461064a57806353401df91461067257600080fd5b8063301be7401161029d578063301be740146105bd57806340c10f19146105e957806342842e0e146105fc57806342966c681461060f57600080fd5b80632a55205a146105655780632e8da829146105975780632ebb386a146105aa57600080fd5b8063098144d41161033057806311ad40811161030a57806311ad4081146105175780631b25b0771461052a5780631c33b3281461053d57806323b872dd1461055257600080fd5b8063098144d41461044f5780630f3d911c14610460578063113405571461048057600080fd5b806306fdde031161036c57806306fdde0314610401578063070cba1714610416578063081812fc14610429578063095ea7b31461043c57600080fd5b8063014635461461039357806301ffc9a7146103c957806304634d8d146103ec575b600080fd5b6103ac71721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b6103dc6103d73660046141b7565b6109e5565b60405190151581526020016103c0565b6103ff6103fa36600461420a565b6109f6565b005b610409610a0c565b6040516103c09190614297565b6103ff6104243660046142aa565b610a9e565b6103ac6104373660046142c7565b610d01565b6103ff61044a3660046142e0565b610d28565b6011546001600160a01b03166103ac565b61047361046e36600461430c565b610e5f565b6040516103c0919061433c565b6104e061048e3660046143b5565b600860209081526000938452604080852082529284528284209052825290205460ff81169063ffffffff610100820481169167ffffffffffffffff6501000000000082041691600160681b9091041684565b60408051941515855263ffffffff938416602086015267ffffffffffffffff909216918401919091521660608201526080016103c0565b6103ff610525366004614400565b611079565b6103dc610538366004614422565b611095565b610545600181565b6040516103c09190614484565b6103ff610560366004614492565b61112e565b610578610573366004614400565b6111b5565b604080516001600160a01b0390931683526020830191909152016103c0565b6103dc6105a53660046142aa565b611270565b6103ff6105b836600461430c565b6113a2565b6103dc6105cb3660046142aa565b6001600160a01b031660009081526002602052604090205460ff1690565b6103ff6105f73660046142e0565b6113c0565b6103ff61060a366004614492565b6113ca565b6103ff61061d3660046142c7565b6113e5565b61062a6113f1565b6040516103c091906144d3565b6103ff610645366004614520565b611528565b61065d610658366004614520565b611545565b60405163ffffffff90911681526020016103c0565b6103ff610680366004614400565b61159b565b6103ff610693366004614547565b6115b7565b6106a0600181565b6040516effffffffffffffffffffffffffffff90911681526020016103c0565b6103ff6106ce3660046145af565b6115ca565b6103ac6106e13660046142c7565b61176f565b6103ff6117d4565b6107016106fc366004614520565b6118cc565b6040805193151584526020840192909252908201526060016103c0565b61073161072c3660046142aa565b61196c565b6040519081526020016103c0565b6103ff611a06565b6103ff6107553660046142aa565b611a1a565b6103dc6107683660046145ef565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6107316107a4366004614520565b611c54565b7f0000000000000000000000000000000000000000000000000000000000000000610731565b6000546001600160a01b03166103ac565b6107316107ee36600461430c565b60009182526007602090815260408084206001600160a01b0393909316845291905290205490565b610409611c89565b6103ff61082c3660046142c7565b611c98565b6103dc61083f3660046142aa565b611cbf565b6103ff6108523660046142e0565b611d9e565b6103ff61086536600461462b565b611da8565b6103ff6108783660046142aa565b611db3565b6108b961088b3660046142aa565b60026020526000908152604090205460ff81169061010090046fffffffffffffffffffffffffffffffff1682565b6040805192151583526fffffffffffffffffffffffffffffffff9091166020830152016103c0565b6103ff6108ef366004614492565b611f00565b6103ff6109023660046146a0565b611f3e565b61090f611fc6565b6040516103c09190614764565b6103ff61092a36600461462b565b612090565b61040961093d3660046142c7565b612142565b61062a6121b5565b6103ac6109583660046142c7565b612285565b6103ff61096b366004614492565b6122af565b6103dc61097e3660046145ef565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205460ff1690565b6103ff6109ba36600461430c565b6122d0565b6103ff6109cd3660046142aa565b6122ed565b6103ff6109e03660046147a8565b61237a565b60006109f0826125b8565b92915050565b6109fe6125f6565b610a0882826125fe565b5050565b6060600f8054610a1b90614804565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4790614804565b8015610a945780601f10610a6957610100808354040283529160200191610a94565b820191906000526020600020905b815481529060010190602001808311610a7757829003601f168201915b5050505050905090565b610aa66125f6565b6001600160a01b03811660009081526002602052604090205460ff16610af8576040517f385f0cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812054600180546101009092046fffffffffffffffffffffffffffffffff169291610b399190614855565b905080826fffffffffffffffffffffffffffffffff1614610c675760018181548110610b6757610b6761486c565b600091825260209091200154600180546001600160a01b03909216916fffffffffffffffffffffffffffffffff8516908110610ba557610ba561486c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600260006001856fffffffffffffffffffffffffffffffff1681548110610bfd57610bfd61486c565b60009182526020808320909101546001600160a01b03168352820192909252604001902080546fffffffffffffffffffffffffffffffff92909216610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff9092169190911790555b6001805480610c7857610c78614882565b60008281526020808220600019908401810180546001600160a01b03191690559092019092556001600160a01b038516808352600282526040808420805470ffffffffffffffffffffffffffffffffff1916905551928352917fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a2505050565b6000610d0c82612651565b506000908152600d60205260409020546001600160a01b031690565b6000610d338261176f565b9050806001600160a01b0316836001600160a01b03161415610dc25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b0382161480610dde5750610dde813361097e565b610e505760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610db9565b610e5a83836126b5565b505050565b60008281526007602090815260408083206001600160a01b03851684529091529020546060908067ffffffffffffffff811115610e9e57610e9e614659565b604051908082528060200260200182016040528015610ef057816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610ebc5790505b5060008581526007602090815260408083206001600160a01b0388168452825280832080548251818502810185019093528083529496509293909291830182828015610f8757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f4a5790505b5050505050905060005b828110156110705760008681526008602090815260408083206001600160a01b038916845290915281208351909190849084908110610fd257610fd261486c565b60209081029190910181015163ffffffff90811683528282019390935260409182016000208251608081018452905460ff811615158252610100810485169282019290925267ffffffffffffffff6501000000000083041692810192909252600160681b9004909116606082015284518590839081106110545761105461486c565b60200260200101819052508061106990614898565b9050610f91565b50505092915050565b611081612723565b61108a82612762565b610a088233836127aa565b6011546000906001600160a01b0316156111235760115460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b1580156110fe57600080fd5b505afa92505050801561110f575060015b61111b57506000611127565b506001611127565b5060015b9392505050565b6111383382612bd5565b6111aa5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610db9565b610e5a838383612c54565b60008281526013602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff169282019290925282916112345750604080518082019091526012546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b602081015160009061271090611258906bffffffffffffffffffffffff16876148b3565b61126291906148d2565b915196919550909350505050565b6011546000906001600160a01b03161561139a57601154604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b1580156112cf57600080fd5b505afa1580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130791906148f4565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b15801561136257600080fd5b505afa158015611376573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f09190614966565b506000919050565b6113ab81612e62565b6113b482612eb5565b610a0882826000612eff565b610a0882826131ea565b610e5a83838360405180602001604052806000815250611f3e565b6113ee8161338d565b50565b6011546060906001600160a01b03161561151557601154604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b15801561145057600080fd5b505afa158015611464573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148891906148f4565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b1580156114d457600080fd5b505afa1580156114e8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115109190810190614983565b905090565b5060408051600081526020810190915290565b61153182612e62565b61153a83612eb5565b610e5a8383836127aa565b6007602052826000526040600020602052816000526040600020818154811061156d57600080fd5b906000526020600020906008918282040191900660040292509250509054906101000a900463ffffffff1681565b6115a3612723565b6115ac82612762565b610a0882338361343a565b6115bf6125f6565b610e5a838383613777565b6115d26125f6565b60006115e66011546001600160a01b031690565b90506001600160a01b038116611628576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c0906116569030908890600401614a35565b600060405180830381600087803b15801561167057600080fd5b505af1158015611684573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b1580156116e057600080fd5b505af11580156116f4573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b15801561175157600080fd5b505af1158015611765573d6000803e3d6000fd5b5050505050505050565b6000818152600b60205260408120546001600160a01b0316806109f05760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610db9565b6117dc6125f6565b6117f771721c310194ccfc01e523fc93c9cccfa2a0ac611db3565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c09061182f903090600190600401614a35565b600060405180830381600087803b15801561184957600080fd5b505af115801561185d573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b1580156118b257600080fd5b505af11580156118c6573d6000803e3d6000fd5b50505050565b6000808063ffffffff84111561190e576040517f0b2530f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505060009283526008602090815260408085206001600160a01b0394909416855292815282842063ffffffff9283168552905291205460ff81169265010000000000820467ffffffffffffffff1692600160681b90920490911690565b60006001600160a01b0382166119ea5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610db9565b506001600160a01b03166000908152600c602052604090205490565b611a0e6137cd565b611a186000613827565b565b611a226125f6565b6001600160a01b03811660009081526002602052604090205460ff1615611a75576040517fd8110a5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516301ffc9a760e01b81527f977e0c1c0000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a79060240160206040518083038186803b158015611ad457600080fd5b505afa158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0c9190614966565b611b42576040517fb50e580c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546fffffffffffffffffffffffffffffffff811115611b8f576040517f6daf72d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660008181526002602090815260408083208054600170ffffffffffffffffffffffffffffffffff199091166101006fffffffffffffffffffffffffffffffff89160217811790915580548082018255938190527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690930180546001600160a01b03191685179055519182527fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e91015b60405180910390a25050565b6000806000611c648686866118cc565b509150915081611c75576000611c7f565b611c7f8142614855565b9695505050505050565b606060108054610a1b90614804565b611ca0612723565b611ca981612762565b6002600455611cb7816113e5565b506001600455565b6011546000906001600160a01b03161561139a57601154604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b158015611d1e57600080fd5b505afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5691906148f4565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b038516602482015260440161134a565b610a088282613877565b610a08338383613891565b611dbb6125f6565b60006001600160a01b0382163b15611e49576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b158015611e0d57600080fd5b505afa925050508015611e3d575060408051601f3d908101601f19168201909252611e3a91810190614966565b60015b611e4657611e49565b90505b6001600160a01b03821615801590611e5f575080155b15611e96576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601154604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a150601180546001600160a01b0319166001600160a01b0392909216919091179055565b611f08612723565b611f1181612762565b6002600481905550611f3483838360405180602001604052806000815250611fba565b5050600160045550565b611f483383612bd5565b611fba5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610db9565b6118c684848484613958565b60408051606081018252600080825260208201819052918101919091526011546001600160a01b03161561206f57601154604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561203757600080fd5b505afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151091906148f4565b50604080516060810182526000808252602082018190529181019190915290565b336001600160a01b0383168114156120d4576040517fc934974800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03818116600081815260066020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f83347dcc77580bb841ae3bac834b5b8ac5ccd2326276d265e638987eb6b2c05691015b60405180910390a3505050565b606061214d82612651565b600061216460408051602081019091526000815290565b905060008151116121845760405180602001604052806000815250611127565b8061218e846139e1565b60405160200161219f929190614a52565b6040516020818303038152906040529392505050565b6011546060906001600160a01b03161561151557601154604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561221457600080fd5b505afa158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c91906148f4565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024016114bc565b6001818154811061229557600080fd5b6000918252602090912001546001600160a01b0316905081565b6122b7612723565b6122c081612762565b6002600455611f348383836111aa565b6122d86125f6565b6122e181612e62565b610a0882826001612eff565b6122f56137cd565b6001600160a01b0381166123715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610db9565b6113ee81613827565b6123826125f6565b61238b84611db3565b604051630368065360e61b81526001600160a01b0385169063da0194c0906123b99030908790600401614a35565b600060405180830381600087803b1580156123d357600080fd5b505af11580156123e7573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561244357600080fd5b505af1158015612457573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d7443149150604401611737565b6127106bffffffffffffffffffffffff821611156125245760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610db9565b6001600160a01b03821661257a5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610db9565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff9091166020909201829052600160a01b90910217601255565b60006001600160e01b031982167f2a55205a0000000000000000000000000000000000000000000000000000000014806109f057506109f082613a8b565b611a186137cd565b612608828261249e565b6040516bffffffffffffffffffffffff821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef90602001611c48565b6000818152600b60205260409020546001600160a01b03166113ee5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610db9565b6000818152600d6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906126ea8261176f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61272c336105cb565b611a18576040517ff4b8028800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61277461276e82613ac9565b33610768565b6113ee576040517fdb07237500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006127ba8686866118cc565b925092509250826127f7576040517f85fceded00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008681526007602090815260408083206001600160a01b038916845290915281205485919061282990600190614855565b90508083146129ae5760008881526007602090815260408083206001600160a01b038b16845290915290208054829081106128665761286661486c565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16600760008a81526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002084815481106128d3576128d361486c565b600091825260208083206008808404909101805463ffffffff96871660046007968716026101000a90810297021916959095179094558b835292835260408083206001600160a01b038c168085529085528184208d855292855281842090845290935291812080548693929190859081106129505761295061486c565b6000918252602080832060088304015460079092166004026101000a90910463ffffffff90811684529083019390935260409091019020805470ffffffff000000000000000000000000001916600160681b93909216929092021790555b60008881526007602090815260408083206001600160a01b038b16845290915290208054806129df576129df614882565b600082815260208082206008600019909401848104909101805463ffffffff600460078516026101000a81021990911690915594558b825291825260408082206001600160a01b038c1683528352808220938616825292909152908120805470ffffffffffffffffffffffffffffffffff19169055612a5d89613ac9565b9050876001600160a01b0316816001600160a01b03168a7f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee8a600080604051612abb9392919092835290151560208301521515604082015260600190565b60405180910390a4876001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612afc57600080fd5b505afa158015612b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b349190614966565b15612b5a5760008981526005602052604081208054909190612b5590614a81565b909155505b604051636d4229c960e01b81526001600160a01b038281166004830152602482018b90526044820189905260648201879052891690636d4229c990608401600060405180830381600087803b158015612bb257600080fd5b505af1158015612bc6573d6000803e3d6000fd5b50505050505050505050505050565b600080612be18361176f565b9050806001600160a01b0316846001600160a01b03161480612c2857506001600160a01b038082166000908152600e602090815260408083209388168352929052205460ff165b80612c4c5750836001600160a01b0316612c4184610d01565b6001600160a01b0316145b949350505050565b826001600160a01b0316612c678261176f565b6001600160a01b031614612ccb5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610db9565b6001600160a01b038216612d465760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610db9565b612d538383836001613ad4565b826001600160a01b0316612d668261176f565b6001600160a01b031614612dca5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610db9565b6000818152600d6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652600c8552838620805460001901905590871680865283862080546001019055868652600b90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4610e5a8383836001613b59565b6001600160a01b03811660009081526002602052604090205460ff16156113ee576040517fb6708d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33612ebf82613ac9565b6001600160a01b0316146113ee576040517fb1160e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612f0a84613ac9565b60008581526007602090815260408083206001600160a01b038816845290915281205491925050836001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612f6a57600080fd5b505afa158015612f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa29190614966565b15612fcb5760008581526005602052604081208054839290612fc5908490614855565b90915550505b60005b818110156131b75760008681526007602090815260408083206001600160a01b0389168452909152812080548390811061300a5761300a61486c565b600091825260208083206008808404909101548b855290825260408085206001600160a01b038c8116808852918552828720600790961660040261010090810a90940463ffffffff9081168089529686528388208451608081018652905460ff81161515825295860482168188015265010000000000860467ffffffffffffffff16818601819052600160681b9096049091166060808301919091528451888152968701989098528c151593860193909352949650909491939092908916918c917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee910160405180910390a460008981526008602090815260408083206001600160a01b038c811680865291845282852063ffffffff8916808752945293829020805470ffffffffffffffffffffffffffffffffff191690559051636d4229c960e01b81529289166004840152602483018c905260448301919091526064820183905290636d4229c990608401600060405180830381600087803b15801561319157600080fd5b505af11580156131a5573d6000803e3d6000fd5b50505050836001019350505050612fce565b5060008581526007602090815260408083206001600160a01b038816845290915281206131e391614168565b5050505050565b6001600160a01b0382166132405760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610db9565b6000818152600b60205260409020546001600160a01b0316156132a55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610db9565b6132b3600083836001613ad4565b6000818152600b60205260409020546001600160a01b0316156133185760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610db9565b6001600160a01b0382166000818152600c6020908152604080832080546001019055848352600b90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4610a08600083836001613b59565b60006133988261176f565b90506133a8816000846001613ad4565b6133b18261176f565b6000838152600d6020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552600c84528285208054600019019055878552600b909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4610a08816000846001613b59565b60006134478484846118cc565b505090508015613483576040517fbf2bc3b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526007602090815260408083206001600160a01b03871684529091529020547f000000000000000000000000000000000000000000000000000000000000000081106134ff576040517f026a381300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526007602081815260408084206001600160a01b038916808652908352818520805460018082018355918752848720600880830490910180549290971660040261010090810a63ffffffff818102199094168d8516918202179098558d895290865284882093885292855283872086885290945291852080547fffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff0016650100000000004267ffffffffffffffff1602179092177fffffffffffffffffffffffffffffff00000000ffffffffffffffff00000000ff16930270ffffffff00000000000000000000000000191692909217600160681b91851691909102179055839061360b87613ac9565b604080518781526001602082015260008183015290519192506001600160a01b0388811692908416918a917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee9181900360600190a4856001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b15801561369957600080fd5b505afa1580156136ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d19190614966565b156136ec576000878152600560205260409020805460010190555b6040517f688a37410000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018990526044820187905287169063688a374190606401600060405180830381600087803b15801561375657600080fd5b505af115801561376a573d6000803e3d6000fd5b5050505050505050505050565b613782838383613b80565b6040516bffffffffffffffffffffffff821681526001600160a01b0383169084907f7f5b076c952c0ec86e5425963c1326dd0f03a3595c19f81d765e8ff559a6e33c90602001612135565b6000546001600160a01b03163314611a185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610db9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610a08828260405180602001604052806000815250613cab565b816001600160a01b0316836001600160a01b031614156138f35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610db9565b6001600160a01b038381166000818152600e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101612135565b613963848484612c54565b61396f84848484613d34565b6118c65760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610db9565b606060006139ee83613e97565b600101905060008167ffffffffffffffff811115613a0e57613a0e614659565b6040519080825280601f01601f191660200182016040528015613a38576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613a7e57613a83565b613a42565b509392505050565b60006001600160e01b031982167f86455d280000000000000000000000000000000000000000000000000000000014806109f057506109f082613f79565b60006109f08261176f565b6000805b82811015613b5157613aea8185614a98565b60008181526005602052604090205490925015613b33576040517fe49dac6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004541415613b4957613b49868684613fb7565b600101613ad8565b505050505050565b60005b818110156131e357613b788585613b738487614a98565b614013565b600101613b5c565b6127106bffffffffffffffffffffffff82161115613c065760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610db9565b6001600160a01b038216613c5c5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610db9565b6040805180820182526001600160a01b0393841681526bffffffffffffffffffffffff92831660208083019182526000968752601390529190942093519051909116600160a01b029116179055565b613cb583836131ea565b613cc26000848484613d34565b610e5a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610db9565b60006001600160a01b0384163b15613e8c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613d78903390899088908890600401614ab0565b602060405180830381600087803b158015613d9257600080fd5b505af1925050508015613dc2575060408051601f3d908101601f19168201909252613dbf91810190614ae2565b60015b613e72573d808015613df0576040519150601f19603f3d011682016040523d82523d6000602084013e613df5565b606091505b508051613e6a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610db9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612c4c565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613ee0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613f0c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613f2a57662386f26fc10000830492506010015b6305f5e1008310613f42576305f5e100830492506008015b6127108310613f5657612710830492506004015b60648310613f68576064830492506002015b600a83106109f05760010192915050565b60006001600160e01b031982167ff9f7ab410000000000000000000000000000000000000000000000000000000014806109f057506109f082614061565b6001600160a01b038381161590831615818015613fd15750805b15613fef57604051635cbd944160e01b815260040160405180910390fd5b8115613ffb575b6131e3565b801561400657613ff6565b6131e333868686346140e3565b6001600160a01b03838116159083161581801561402d5750805b1561404b57604051635cbd944160e01b815260040160405180910390fd5b811561405657613ff6565b8015613ff657613ff6565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806140c457506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806109f057506301ffc9a760e01b6001600160e01b03198316146109f0565b6011546001600160a01b0316156131e35760115460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561414957600080fd5b505afa15801561415d573d6000803e3d6000fd5b505050505050505050565b5080546000825560070160089004906000526020600020908101906113ee91905b8082111561419d5760008155600101614189565b5090565b6001600160e01b0319811681146113ee57600080fd5b6000602082840312156141c957600080fd5b8135611127816141a1565b6001600160a01b03811681146113ee57600080fd5b80356bffffffffffffffffffffffff8116811461420557600080fd5b919050565b6000806040838503121561421d57600080fd5b8235614228816141d4565b9150614236602084016141e9565b90509250929050565b60005b8381101561425a578181015183820152602001614242565b838111156118c65750506000910152565b6000815180845261428381602086016020860161423f565b601f01601f19169290920160200192915050565b602081526000611127602083018461426b565b6000602082840312156142bc57600080fd5b8135611127816141d4565b6000602082840312156142d957600080fd5b5035919050565b600080604083850312156142f357600080fd5b82356142fe816141d4565b946020939093013593505050565b6000806040838503121561431f57600080fd5b823591506020830135614331816141d4565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b828110156143a85781518051151585528681015163ffffffff908116888701528682015167ffffffffffffffff1687870152606091820151169085015260809093019290850190600101614359565b5091979650505050505050565b6000806000606084860312156143ca57600080fd5b8335925060208401356143dc816141d4565b9150604084013563ffffffff811681146143f557600080fd5b809150509250925092565b6000806040838503121561441357600080fd5b50508035926020909101359150565b60008060006060848603121561443757600080fd5b8335614442816141d4565b92506020840135614452816141d4565b915060408401356143f5816141d4565b6007811061448057634e487b7160e01b600052602160045260246000fd5b9052565b602081016109f08284614462565b6000806000606084860312156144a757600080fd5b83356144b2816141d4565b925060208401356144c2816141d4565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156145145783516001600160a01b0316835292840192918401916001016144ef565b50909695505050505050565b60008060006060848603121561453557600080fd5b8335925060208401356144c2816141d4565b60008060006060848603121561455c57600080fd5b83359250602084013561456e816141d4565b915061457c604085016141e9565b90509250925092565b600781106113ee57600080fd5b6effffffffffffffffffffffffffffff811681146113ee57600080fd5b6000806000606084860312156145c457600080fd5b83356145cf81614585565b925060208401356145df81614592565b915060408401356143f581614592565b6000806040838503121561460257600080fd5b823561460d816141d4565b91506020830135614331816141d4565b80151581146113ee57600080fd5b6000806040838503121561463e57600080fd5b8235614649816141d4565b915060208301356143318161461d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561469857614698614659565b604052919050565b600080600080608085870312156146b657600080fd5b84356146c1816141d4565b93506020858101356146d2816141d4565b935060408601359250606086013567ffffffffffffffff808211156146f657600080fd5b818801915088601f83011261470a57600080fd5b81358181111561471c5761471c614659565b61472e601f8201601f1916850161466f565b9150808252898482850101111561474457600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000606082019050614777828451614462565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b600080600080608085870312156147be57600080fd5b84356147c9816141d4565b935060208501356147d981614585565b925060408501356147e981614592565b915060608501356147f981614592565b939692955090935050565b600181811c9082168061481857607f821691505b6020821081141561483957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156148675761486761483f565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006000198214156148ac576148ac61483f565b5060010190565b60008160001904831182151516156148cd576148cd61483f565b500290565b6000826148ef57634e487b7160e01b600052601260045260246000fd5b500490565b60006060828403121561490657600080fd5b6040516060810181811067ffffffffffffffff8211171561492957614929614659565b604052825161493781614585565b8152602083015161494781614592565b6020820152604083015161495a81614592565b60408201529392505050565b60006020828403121561497857600080fd5b81516111278161461d565b6000602080838503121561499657600080fd5b825167ffffffffffffffff808211156149ae57600080fd5b818501915085601f8301126149c257600080fd5b8151818111156149d4576149d4614659565b8060051b91506149e584830161466f565b81815291830184019184810190888411156149ff57600080fd5b938501935b83851015614a295784519250614a19836141d4565b8282529385019390850190614a04565b98975050505050505050565b6001600160a01b0383168152604081016111276020830184614462565b60008351614a6481846020880161423f565b835190830190614a7881836020880161423f565b01949350505050565b600081614a9057614a9061483f565b506000190190565b60008219821115614aab57614aab61483f565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611c7f608083018461426b565b600060208284031215614af457600080fd5b8151611127816141a156fea2646970667358221220e8b3bcab179002e8ce39e7a3415164eec9e1df90d0737407ea3628389bfd44ab64736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
