@settlemint/solidity-token-erc721
Version:
Smart contract set to build an ERC721 token in SettleMint
1,263 lines • 83.2 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "ExampleERC721",
"sourceName": "contracts/ExampleERC721.sol",
"abi": [
{
"inputs": [
{
"internalType": "string",
"name": "name_",
"type": "string"
},
{
"internalType": "string",
"name": "symbol_",
"type": "string"
},
{
"internalType": "string",
"name": "baseTokenURI_",
"type": "string"
},
{
"internalType": "address",
"name": "proxyRegistryAddress_",
"type": "address"
},
{
"internalType": "address payable",
"name": "wallet_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "numerator",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "denominator",
"type": "uint256"
}
],
"name": "ERC2981InvalidDefaultRoyalty",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC2981InvalidDefaultRoyaltyReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "numerator",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "denominator",
"type": "uint256"
}
],
"name": "ERC2981InvalidTokenRoyalty",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC2981InvalidTokenRoyaltyReceiver",
"type": "error"
},
{
"inputs": [],
"name": "ERC721EnumerableForbiddenBatchMint",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC721IncorrectOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ERC721InsufficientApproval",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC721InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "ERC721InvalidOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC721InvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC721InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC721InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ERC721NonexistentToken",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "ERC721OutOfBoundsIndex",
"type": "error"
},
{
"inputs": [],
"name": "EnforcedPause",
"type": "error"
},
{
"inputs": [],
"name": "ExpectedPause",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"type": "error"
},
{
"inputs": [],
"name": "ReentrancyGuardReentrantCall",
"type": "error"
},
{
"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": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "MintPaused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "MintUnpaused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Paused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "_value",
"type": "string"
},
{
"indexed": true,
"internalType": "uint256",
"name": "_id",
"type": "uint256"
}
],
"name": "PermanentURI",
"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": "account",
"type": "address"
}
],
"name": "Unpaused",
"type": "event"
},
{
"inputs": [],
"name": "MAX_PER_TX",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MAX_SUPPLY",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PRICE_IN_WEI_PUBLIC",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PRICE_IN_WEI_WHITELIST",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "RESERVES",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "ROYALTIES_IN_BASIS_POINTS",
"outputs": [
{
"internalType": "uint96",
"name": "",
"type": "uint96"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_proxyRegistryAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_whitelistMerkleRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"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"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "_tokenIds",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "data_",
"type": "bytes"
}
],
"name": "batchSafeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "_tokenIds",
"type": "uint256[]"
}
],
"name": "batchTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "collectReserves",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "disableWhitelistMerkleRoot",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "freeze",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "freezeAllTokens",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "freezeToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "frozen",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "allowance",
"type": "string"
},
{
"internalType": "bytes32[]",
"name": "proof",
"type": "bytes32[]"
}
],
"name": "getAllowance",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "recipients_",
"type": "address[]"
}
],
"name": "gift",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint128",
"name": "value",
"type": "uint128"
}
],
"name": "increaseBalance",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "mintPaused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"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": "pause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "pauseMint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "count",
"type": "uint256"
}
],
"name": "publicMint",
"outputs": [],
"stateMutability": "payable",
"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": "receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "baseTokenURI_",
"type": "string"
}
],
"name": "setBaseURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "proxyRegistryAddress_",
"type": "address"
}
],
"name": "setProxyRegistryAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "whitelistMerkleRoot_",
"type": "bytes32"
}
],
"name": "setWhitelistMerkleRoot",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "startPublicSale",
"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": "index",
"type": "uint256"
}
],
"name": "tokenByIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "tokenOfOwnerByIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "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": [],
"name": "unpause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unpauseMint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "auth",
"type": "address"
}
],
"name": "update",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "wallet",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "count",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "allowance",
"type": "uint256"
},
{
"internalType": "bytes32[]",
"name": "proof",
"type": "bytes32[]"
}
],
"name": "whitelistMint",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60a0604052346105df57613afd80380380610019816105e4565b928339810160a0828203126105df5781516001600160401b0381116105df5781610044918401610609565b60208301519091906001600160401b0381116105df5781610066918501610609565b604084015190916001600160401b0382116105df57610086918501610609565b606084015190936001600160a01b03821682036105df57608001516001600160a01b038116939092908484036105df578051906001600160401b0382116102cc5760025490600182811c921680156105d5575b60208310146103cf5781601f849311610565575b50602090601f83116001146104fd576000926104f2575b50508160011b916000199060031b1c1916176002555b8051906001600160401b0382116102cc5760035490600182811c921680156104e8575b60208310146103cf5781601f849311610478575b50602090601f831160011461041057600092610405575b50508160011b916000199060031b1c1916176003555b600e80546001600160b01b03191660109290921b62010000600160b01b031691909117905533156103ef57600f8054336001600160a01b0319821681179092556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a360016010556014805460ff1916905582516001600160401b0381116102cc57601254600181811c911680156103e5575b60208210146103cf57601f811161036a575b506020601f821160011461030357819293946000926102f8575b50508160011b916000199060031b1c1916176012555b60805280156102e257604080519081016001600160401b038111828210176102cc5760409081528282526101f46020909201919091526001600160a01b03909116607d60a21b1760005551613488908161067582396080518181816110dc015281816112a101526119230152f35b634e487b7160e01b600052604160045260246000fd5b635b6cc80560e11b600052600060045260246000fd5b015190503880610248565b601f198216906012600052806000209160005b81811061035257509583600195969710610339575b505050811b0160125561025e565b015160001960f88460031b161c1916905538808061032b565b9192602060018192868b015181550194019201610316565b60126000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444601f830160051c810191602084106103c5575b601f0160051c01905b8181106103b9575061022e565b600081556001016103ac565b90915081906103a3565b634e487b7160e01b600052602260045260246000fd5b90607f169061021c565b631e4fbdf760e01b600052600060045260246000fd5b015190503880610168565b600360009081528281209350601f198516905b8181106104605750908460019594939210610447575b505050811b0160035561017e565b015160001960f88460031b161c19169055388080610439565b92936020600181928786015181550195019301610423565b60036000529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c810191602085106104de575b90601f859493920160051c01905b8181106104cf5750610151565b600081558493506001016104c2565b90915081906104b4565b91607f169161013d565b015190503880610104565b600260009081528281209350601f198516905b81811061054d5750908460019594939210610534575b505050811b0160025561011a565b015160001960f88460031b161c19169055388080610526565b92936020600181928786015181550195019301610510565b60026000529091507f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace601f840160051c810191602085106105cb575b90601f859493920160051c01905b8181106105bc57506100ed565b600081558493506001016105af565b90915081906105a1565b91607f16916100d9565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176102cc57604052565b81601f820112156105df578051906001600160401b0382116102cc57610638601f8301601f19166020016105e4565b92828452602083830101116105df5760005b82811061065f57505060206000918301015290565b8060208092840101518282870101520161064a56fe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146119c357508063029877b614611901578063054f7d9c146118de57806306fdde0314611835578063081812fc146117f65780630922f9c5146102a3578063095ea7b3146116f55780630c1c972a146116c8578063163e1e61146115e757806318160ddd146115c95780631a8bd2da1461151057806323b872dd146114f95780632a55205a1461146c5780632db11544146113865780632f745c59146112fb57806332cb6b0c146112df5780633ccfd60b146112705780633f4ba83a146111ee57806342842e0e146111c457806342966c68146111a75780634f6ccce71461113d578063501a516214611100578063521eb273146110bc57806355f804b314610ec15780635a4fee3014610e345780635c975abb14610e1157806362a5af3b14610ddc5780636352211e14610dad57806366fddfa914610c6757806370a0823114610c3c578063715018a614610bc95780637ad7614d14610ba75780637e4831d314610b815780638456cb5914610b2757806389cd503a14610afd5780638da5cb5b14610ad657806395d89b4114610a08578063a0b30390146109ea578063a22cb46514610930578063b440297914610910578063b6854f96146108bc578063b88d4fde1461086d578063bd32fb661461084c578063c4be5b5914610651578063c87b56dd1461062e578063cd85cdb514610598578063d0babf381461057b578063d26ea6c01461050f578063d283e3cc14610488578063d2bc37f814610406578063e985e9c5146103d0578063f2fde38b14610316578063f3993d11146102a8578063f43a22dc146102a35763fbd9b92d1461027c57600080fd5b3461029e57600060031936011261029e576020604051669536c7089100008152f35b600080fd5b611c68565b3461029e57606060031936011261029e576102c1611c84565b6102c9611c9a565b9060443567ffffffffffffffff811161029e576102ea903690600401611db7565b60005b8151811015610314578061030e610306600193856120dd565b518686611ece565b016102ed565b005b3461029e57602060031936011261029e576001600160a01b03610337611c84565b61033f6125a2565b1680156103a1576001600160a01b03600f54827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b3461029e57604060031936011261029e5760206103fc6103ee611c84565b6103f6611c9a565b90612a33565b6040519015158152f35b3461029e57600060031936011261029e5761042560ff600e541661218c565b600a5460015b8181111561043557005b80807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b5565720761047b610467610483956123d7565b604051918291602083526020830190611c43565b0390a2611e14565b61042b565b3461029e57604060031936011261029e576104a1611c84565b602435906fffffffffffffffffffffffffffffffff821680920361029e57816104e5576001600160a01b031660005260056020526040600020908154019055600080f35b7f59171fc10000000000000000000000000000000000000000000000000000000060005260046000fd5b3461029e57602060031936011261029e57610528611c84565b6105306125a2565b7fffffffffffffffffffff0000000000000000000000000000000000000000ffff75ffffffffffffffffffffffffffffffffffffffff0000600e549260101b16911617600e55600080f35b3461029e57600060031936011261029e5760206040516101f48152f35b3461029e57600060031936011261029e576105b16125a2565b600e5460ff8160081c166105ea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017600e55005b606460405162461bcd60e51b815260206004820152601f60248201527f4552433732314d696e745061757361626c653a204d696e7420706175736564006044820152fd5b3461029e57602060031936011261029e5761064d6104676004356123d7565b0390f35b606060031936011261029e5760043560243560443567ffffffffffffffff811161029e576106866106d7913690600401611cb0565b61068e6129b6565b6106b1606f6106aa876011546106a5811515611e76565b611ec1565b1115611fb2565b6106d26106c66106c0866132ca565b336129f1565b92600d549236916120f1565b61323d565b156107e2573360005260136020526106f482604060002054611ec1565b1161079e576618838370f3400081028181046618838370f34000148215171561076f57610722903414611ffd565b336000526013602052604060002061073b828254611ec1565b905560005b81811061074e576001601055005b60019061076961075f601154611e14565b80601155336125e4565b01610740565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606460405162461bcd60e51b815260206004820152601b60248201527f457863656564732077686974656c69737420616c6c6f77616e636500000000006044820152fd5b608460405162461bcd60e51b815260206004820152602260248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960448201527f65640000000000000000000000000000000000000000000000000000000000006064820152fd5b3461029e57602060031936011261029e576108656125a2565b600435600d55005b3461029e57608060031936011261029e57610886611c84565b61088e611c9a565b6064359167ffffffffffffffff831161029e576108b2610314933690600401611d5a565b91604435916121fd565b3461029e57602060031936011261029e576004356108de60ff600e541661218c565b7fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b5565720761090b610467836123d7565b0390a2005b3461029e57600060031936011261029e576109296125a2565b6000600d55005b3461029e57604060031936011261029e57610949611c84565b6024359081151580920361029e576001600160a01b03169081156109bc57336000526007602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b507f5b08ba180000000000000000000000000000000000000000000000000000000060005260045260246000fd5b3461029e57600060031936011261029e576020600d54604051908152f35b3461029e57600060031936011261029e576040516000600354610a2a81611e23565b8084529060018116908115610ab25750600114610a52575b61064d8361046781850382611d1b565b91905060036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b916000905b808210610a9857509091508101602001610467610a42565b919260018160209254838588010152019101909291610a80565b60ff191660208086019190915291151560051b840190910191506104679050610a42565b3461029e57600060031936011261029e5760206001600160a01b03600f5416604051908152f35b3461029e57600060031936011261029e5760206001600160a01b03600e5460101c16604051908152f35b3461029e57600060031936011261029e57610b406125a2565b610b48613294565b600160ff19600c541617600c557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b3461029e57600060031936011261029e57602060ff600e5460081c166040519015158152f35b3461029e57600060031936011261029e5760206040516618838370f340008152f35b3461029e57600060031936011261029e57610be26125a2565b60006001600160a01b03600f547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461029e57602060031936011261029e576020610c5f610c5a611c84565b61213d565b604051908152f35b3461029e57604060031936011261029e5760043567ffffffffffffffff811161029e57610c98903690600401611d5a565b60243567ffffffffffffffff811161029e57610cbb610ccf913690600401611cb0565b9190610cc784336129f1565b9236916120f1565b90600d548015610d6957610ce29261323d565b15610cff5761064d90604051918291602083526020830190611c43565b608460405162461bcd60e51b815260206004820152602360248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152fd5b606460405162461bcd60e51b815260206004820152601d60248201527f57686974656c697374206d65726b6c6520726f6f74206e6f74207365740000006044820152fd5b3461029e57602060031936011261029e576020610dcb600435612966565b6001600160a01b0360405191168152f35b3461029e57600060031936011261029e57610df56125a2565b600160ff19600e54610e0a60ff821615612092565b1617600e55005b3461029e57600060031936011261029e57602060ff600c54166040519015158152f35b3461029e57608060031936011261029e57610e4d611c84565b610e55611c9a565b9060443567ffffffffffffffff811161029e57610e76903690600401611db7565b60643567ffffffffffffffff811161029e57610e96903690600401611d5a565b60005b82518110156103145780610ebb83610eb3600194876120dd565b5188886121fd565b01610e99565b3461029e57602060031936011261029e5760043567ffffffffffffffff811161029e57610ef2903690600401611d5a565b610efa6125a2565b610f0960ff600e541615612092565b805167ffffffffffffffff811161108d57610f25601254611e23565b601f8111610fea575b50602091601f8211600114610f6c57918192600092610f61575b50506000198260011b9260031b1c191617601255600080f35b015190508280610f48565b601f1982169260126000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34449160005b858110610fd257508360019510610fb9575b505050811b01601255005b015160001960f88460031b161c19169055828080610fae565b91926020600181928685015181550194019201610f9c565b6012600052601f820160051c7fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444019060208310611065575b601f0160051c7fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344401905b8181106110595750610f2e565b6000815560010161104c565b7fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34449150611022565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b3461029e57600060031936011261029e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461029e57606060031936011261029e57611119611c84565b604435906001600160a01b038216820361029e57602091610dcb9160243590612ecd565b3461029e57602060031936011261029e57600435600a5481101561117557611166602091612048565b90549060031b1c604051908152f35b7fa57d13dc00000000000000000000000000000000000000000000000000000000600052600060045260245260446000fd5b3461029e57602060031936011261029e5761031433600435612b2c565b3461029e576103146111d536611ce1565b90604051926111e5602085611d1b565b600084526121fd565b3461029e57600060031936011261029e576112076125a2565b600c5460ff8116156112465760ff1916600c557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461029e57600060031936011261029e576112896125a2565b6000808080478181156112d6575b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690f1156112ca57005b6040513d6000823e3d90fd5b506108fc611297565b3461029e57600060031936011261029e576020604051606f8152f35b3461029e57604060031936011261029e57611314611c84565b6001600160a01b03602435916113298161213d565b831015611355571660005260086020526040600020906000526020526020604060002054604051908152f35b7fa57d13dc000000000000000000000000000000000000000000000000000000006000521660045260245260446000fd5b602060031936011261029e5760043561139d6129b6565b6113a9600d5415611f67565b6113b760ff60145416611f67565b6113ce606f6106aa836011546106a5811515611e76565b600581101561142857669536c7089100008102818104669536c708910000148215171561076f57611400903414611ffd565b60005b818110611411576001601055005b60019061142261075f601154611e14565b01611403565b606460405162461bcd60e51b815260206004820152601b60248201527f45786365656473206d617820706572207472616e73616374696f6e00000000006044820152fd5b3461029e57604060031936011261029e5760243560043560005260016020526040600020546001600160a01b0381169060a01c81156114e1575b6bffffffffffffffffffffffff169182810292818404149015171561076f57612710604092046001600160a01b038351921682526020820152f35b50506000546001600160a01b0381169060a01c6114a6565b3461029e5761031461150a36611ce1565b91611ece565b3461029e57600060031936011261029e576115296125a2565b600e5460ff8160081c161561155f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16600e55005b608460405162461bcd60e51b815260206004820152602360248201527f4552433732314d696e745061757361626c653a204d696e74206e6f742070617560448201527f73656400000000000000000000000000000000000000000000000000000000006064820152fd5b3461029e57600060031936011261029e576020600a54604051908152f35b3461029e57602060031936011261029e5760043567ffffffffffffffff811161029e57611618903690600401611cb0565b6116206125a2565b606f611634826011546106a5811515611e76565b116116845760005b818110156103145760008160051b840135906001600160a01b038216820361168157509061167b600192611671601154611e14565b90816011556125e4565b0161163c565b80fd5b606460405162461bcd60e51b815260206004820152601260248201527f45786365646573206d617820737570706c7900000000000000000000000000006044820152fd5b3461029e57600060031936011261029e576116e16125a2565b6000600d556014805460ff19166001179055005b3461029e57604060031936011261029e5761170e611c84565b60243561171a81612966565b331515806117e3575b806117d2575b6117a45781906001600160a01b0380851691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a460005260066020526001600160a01b03604060002091167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b7fa9fbf51f000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b506117dd3382612a33565b15611729565b50336001600160a01b0382161415611723565b3461029e57602060031936011261029e5760043561181381612966565b50600052600660205260206001600160a01b0360406000205416604051908152f35b3461029e57600060031936011261029e57604051600060025461185781611e23565b8084529060018116908115610ab2575060011461187e5761064d8361046781850382611d1b565b91905060026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace916000905b8082106118c457509091508101602001610467610a42565b9192600181602092548385880101520191019092916118ac565b3461029e57600060031936011261029e57602060ff600e54166040519015158152f35b3461029e57600060031936011261029e5761191a6125a2565b60115461197f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660015b600581111561195957005b61197a9061197561196b601154611e14565b80601155846125e4565b611e14565b61194e565b606460405162461bcd60e51b815260206004820152601a60248201527f526573657276657320616c726561647920636f6c6c65637465640000000000006044820152fd5b3461029e57602060031936011261029e57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361029e57817f0e0830760000000000000000000000000000000000000000000000000000000060209314908115611bf6575b8115611bcc575b8115611ba2575b8115611b78575b8115611b4e575b8115611a5a575b5015158152f35b7f780e9d6300000000000000000000000000000000000000000000000000000000811491508115611a8d575b5083611a53565b7f80ac58cd00000000000000000000000000000000000000000000000000000000811491508115611b24575b8115611ac7575b5083611a86565b7f2a55205a00000000000000000000000000000000000000000000000000000000811491508115611afa575b5083611ac0565b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611af3565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150611ab9565b7f7e4831d30000000000000000000000000000000000000000000000000000000081149150611a4c565b7f617605f20000000000000000000000000000000000000000000000000000000081149150611a45565b7fc64edc390000000000000000000000000000000000000000000000000000000081149150611a3e565b7f79f154c40000000000000000000000000000000000000000000000000000000081149150611a37565b7f42966c680000000000000000000000000000000000000000000000000000000081149150611a30565b60005b838110611c335750506000910152565b8181015183820152602001611c23565b90601f19601f602093611c6181518092818752878088019101611c20565b0116010190565b3461029e57600060031936011261029e57602060405160058152f35b600435906001600160a01b038216820361029e57565b602435906001600160a01b038216820361029e57565b9181601f8401121561029e5782359167ffffffffffffffff831161029e576020808501948460051b01011161029e57565b600319606091011261029e576004356001600160a01b038116810361029e57906024356001600160a01b038116810361029e579060443590565b90601f601f19910116810190811067ffffffffffffffff82111761108d57604052565b67ffffffffffffffff811161108d57601f01601f191660200190565b81601f8201121561029e57602081359101611d7482611d3e565b92611d826040519485611d1b565b8284528282011161029e5781600092602092838601378301015290565b67ffffffffffffffff811161108d5760051b60200190565b9080601f8301121561029e578135611dce81611d9f565b92611ddc6040519485611d1b565b81845260208085019260051b82010192831161029e57602001905b828210611e045750505090565b8135815260209182019101611df7565b600019811461076f5760010190565b90600182811c92168015611e6c575b6020831014611e3d57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611e32565b15611e7d57565b606460405162461bcd60e51b815260206004820152601660248201527f5265736572766573206e6f742074616b656e20796574000000000000000000006044820152fd5b9190820180921161076f57565b91906001600160a01b03811615611f38576001600160a01b03611ef48192843391612ecd565b9316921691808303611f0557505050565b7f64283d7b0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b7f64a0ae9200000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b15611f6e57565b606460405162461bcd60e51b815260206004820152601660248201527f5075626c69632073616c65206e6f7420616374697665000000000000000000006044820152fd5b15611fb957565b606460405162461bcd60e51b815260206004820152601260248201527f45786365656473206d617820737570706c7900000000000000000000000000006044820152fd5b1561200457565b606460405162461bcd60e51b815260206004820152601660248201527f496e76616c69642066756e64732070726f7669646564000000000000000000006044820152fd5b600a5481101561206357600a60005260206000200190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1561209957565b606460405162461bcd60e51b815260206004820152601e60248201527f455243373231467265657a61626c653a205552492069732066726f7a656e00006044820152fd5b80518210156120635760209160051b010190565b9291906120fd81611d9f565b9361210b6040519586611d1b565b602085838152019160051b810192831161029e57905b82821061212d57505050565b8135815260209182019101612121565b6001600160a01b0316801561215d57600052600560205260406000205490565b7f89c62b6400000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b1561219357565b608460405162461bcd60e51b815260206004820152602260248201527f455243373231467265657a61626c653a20555249206973206e6f742066726f7a60448201527f656e0000000000000000000000000000000000000000000000000000000000006064820152fd5b90612209838284611ece565b803b612216575b50505050565b6020916122756001600160a01b038093169560405195869485947f150b7a020000000000000000000000000000000000000000000000000000000086523360048701521660248501526044840152608060648401526084830190611c43565b03816000865af18091600091612378575b50906122f857503d156122f1573d61229d81611d3e565b906122ab6040519283611d1b565b81523d6000602083013e5b805190816122ec57827f64a0ae920000000000000000000000000000000000000000000000000000000060005260045260246000fd5b602001fd5b60606122b6565b7fffffffff000000000000000000000000000000000000000000000000000000007f150b7a020000000000000000000000000000000000000000000000000000000091160361234b575038808080612210565b7f64a0ae920000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6020813d6020116123cf575b8161239160209383611d1b565b810103126123cb5751907fffffffff0000000000000000000000000000000000000000000000000000000082168203611681575038612286565b5080fd5b3d9150612384565b6123e081612966565b5060405160125490916000836123f584611e23565b9182825260208201946001811690816000146125865750600114612525575b61242092500384611d1b565b82516000901561250b57509160206124759261243e612451956132ca565b9060405195869451809285870190611c20565b830161246582518093858085019101611c20565b010103601f198101835282611d1b565b8051600090156124f657506124f3600560206040518461249e8296518092858086019101611c20565b81017f2e6a736f6e0000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5810184520182611d1b565b90565b6040519150612506602083611d1b565b815290565b925050506040519061251e602083611d1b565b8152612475565b509060126000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444906000915b81831061256a57505090602061242092820101612414565b6020919350806001915483858a01015201910190918592612552565b60ff191686525061242092151560051b82016020019050612414565b6001600160a01b03600f541633036125b657565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b906001600160a01b0382168015611f3857600060ff600e541680612926575b5061260c613294565b82815260046020526001600160a01b0360408220541692831594851595866128d4575b84845260056020526040842060018154019055828452600460205260408420857fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558285877fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8780a41561285757600a54828452600b6020528060408520556801000000000000000081101561282a576126ef6126d8826001869401600a55612048565b81939154906000199060031b92831b921b19161790565b90555b8385036127bb575b5050505060ff600e5460081c161580156127b4575b1561274a575061271b57565b7f73c6ac6e00000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b608460405162461bcd60e51b815260206004820152602760248201527f4552433732314d696e745061757361626c653a204d696e74696e67206973206460448201527f697361626c6564000000000000000000000000000000000000000000000000006064820152fd5b508161270f565b6127c49061213d565b9260001984019384116127fd579082916040935260086020528282208483526020528083832055815260096020522055388080806126fa565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024847f4e487b7100000000000000000000000000000000000000000000000000000000815