[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "NewOwnerIsZeroAddress", "type": "error" }, { "inputs": [], "name": "NoHandoverRequest", "type": "error" }, { "inputs": [], "name": "Unauthorized", "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": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "OperatorAllowed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "blocked", "type": "bool" } ], "name": "OperatorBlocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "redeemableId", "type": "uint256" } ], "name": "RedeemableCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "RolesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "redeemableId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "TokenRedeemed", "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" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "BURNER_ROLE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MANAGER_ROLE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "cancelOwnershipHandover", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "completeOwnershipHandover", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint256", "name": "maxQuantity", "type": "uint256" }, { "internalType": "uint256", "name": "maxPerWallet", "type": "uint256" }, { "internalType": "uint256", "name": "maxPerMint", "type": "uint256" } ], "name": "createRedeemable", "outputs": [], "stateMutability": "nonpayable", "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": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "grantRoles", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "hasAllRoles", "outputs": [ { "internalType": "bool", "name": "result", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "hasAnyRole", "outputs": [ { "internalType": "bool", "name": "result", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner_", "type": "address" }, { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "address", "name": "treasury_", "type": "address" }, { "internalType": "address", "name": "royalty_", "type": "address" }, { "internalType": "uint96", "name": "royaltyFee_", "type": "uint96" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "redeemableId", "type": "uint256" } ], "name": "invalidate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isAllowedOperator", "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": "isOperator", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isBlockedOperator", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "ordinalsFromRoles", "outputs": [ { "internalType": "uint8[]", "name": "ordinals", "type": "uint8[]" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "result", "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": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "ownershipHandoverExpiresAt", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ownershipHandoverValidFor", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "redeemableId", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "redeem", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "redeemableAt", "outputs": [ { "components": [ { "internalType": "string", "name": "tokenURI", "type": "string" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint256", "name": "maxQuantity", "type": "uint256" }, { "internalType": "uint256", "name": "maxPerWallet", "type": "uint256" }, { "internalType": "uint256", "name": "maxPerMint", "type": "uint256" }, { "internalType": "uint256", "name": "redeemedCount", "type": "uint256" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "internalType": "struct Redeemables.Redeemable", "name": "data", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "renounceRoles", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "requestOwnershipHandover", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "redeemableId", "type": "uint256" } ], "name": "revoke", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "revokeRoles", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8[]", "name": "ordinals", "type": "uint8[]" } ], "name": "rolesFromOrdinals", "outputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "rolesOf", "outputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "setAllowedOperator", "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": "operator", "type": "address" }, { "internalType": "bool", "name": "blocked", "type": "bool" } ], "name": "setBlockedOperator", "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": "uint256", "name": "redeemableId", "type": "uint256" }, { "internalType": "bytes32", "name": "newRoot", "type": "bytes32" } ], "name": "setMerkleRoot", "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": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "newUri", "type": "string" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newTreasury", "type": "address" } ], "name": "setTreasury", "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": "totalRedeemables", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalRevenue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61449980620000f46000396000f3fe6080604052600436106103765760003560e01c806354d1f13d116101d1578063b88d4fde11610102578063d7533f02116100a0578063f04e283e1161006f578063f04e283e14610a73578063f0f4426014610a93578063f2fde38b14610ab3578063fee81cf414610ad357600080fd5b8063d7533f02146109e7578063e18bc08a14610a05578063e985e9c514610a3e578063ec87621c14610a5e57600080fd5b8063bfa9aadc116100dc578063bfa9aadc14610972578063c13e33f314610992578063c87b56dd146109a7578063d3fc9864146109c757600080fd5b8063b88d4fde1461092a578063b9b607471461094a578063bf2d9e0b1461095d57600080fd5b80637359e41f1161016f5780638afc7cb3116101495780638afc7cb3146108bc5780638da5cb5b146108dc57806395d89b41146108f5578063a22cb4651461090a57600080fd5b80637359e41f1461084157806375b238fc1461086e57806388924a661461088357600080fd5b80636352211e116101ab5780636352211e146107bf578063691ebfb7146107df57806370a082311461080c578063715018a61461082c57600080fd5b806354d1f13d1461076c5780635944c7531461078157806361d027b3146107a157600080fd5b80631ea1afdb116102ab5780632f745c591161024957806342966c681161022357806342966c68146106d55780634a4ee7b1146106f55780634f6ccce714610715578063514e62fc1461073557600080fd5b80632f745c59146106805780633ccfd60b146106a057806342842e0e146106b557600080fd5b8063256929621161028557806325692962146105e6578063282c51f3146105fb5780632a55205a146106105780632de948071461064f57600080fd5b80631ea1afdb1461058657806320c5429b146105a657806323b872dd146105c657600080fd5b8063162094c41161031857806318712c21116102f257806318712c21146104ef5780631bace9a81461050f5780631c10893f1461052f5780631cd64df41461054f57600080fd5b8063162094c41461049a57806318160ddd146104ba578063183a4f6e146104cf57600080fd5b8063081812fc11610354578063081812fc146103f4578063095ea7b31461042c5780630daf00bc1461044c57806313a661ed1461046c57600080fd5b806301ffc9a71461037b57806304634d8d146103b057806306fdde03146103d2575b600080fd5b34801561038757600080fd5b5061039b610396366004613876565b610b04565b60405190151581526020015b60405180910390f35b3480156103bc57600080fd5b506103d06103cb3660046138c6565b610b42565b005b3480156103de57600080fd5b506103e7610b87565b6040516103a79190613951565b34801561040057600080fd5b5061041461040f366004613964565b610c19565b6040516001600160a01b0390911681526020016103a7565b34801561043857600080fd5b506103d061044736600461397d565b610c40565b34801561045857600080fd5b506103d0610467366004613a64565b610d55565b34801561047857600080fd5b5061048c610487366004613ac0565b610da0565b6040519081526020016103a7565b3480156104a657600080fd5b506103d06104b5366004613b78565b610dd3565b3480156104c657600080fd5b5060d35461048c565b3480156104db57600080fd5b506103d06104ea366004613964565b610e13565b3480156104fb57600080fd5b506103d061050a366004613bbe565b610e20565b34801561051b57600080fd5b506103d061052a366004613be0565b610e60565b34801561053b57600080fd5b506103d061054a36600461397d565b610ef7565b34801561055b57600080fd5b5061039b61056a36600461397d565b60609190911b638b78c6d8176000908152602090205481161490565b34801561059257600080fd5b506103d06105a1366004613964565b610f20565b3480156105b257600080fd5b506103d06105c1366004613964565b610f5f565b3480156105d257600080fd5b506103d06105e1366004613c1c565b610f9e565b3480156105f257600080fd5b506103d0610fd0565b34801561060757600080fd5b5061048c600481565b34801561061c57600080fd5b5061063061062b366004613bbe565b611020565b604080516001600160a01b0390931683526020830191909152016103a7565b34801561065b57600080fd5b5061048c61066a366004613c58565b60601b638b78c6d8176000908152602090205490565b34801561068c57600080fd5b5061048c61069b36600461397d565b6110ce565b3480156106ac57600080fd5b506103d0611164565b3480156106c157600080fd5b506103d06106d0366004613c1c565b611299565b3480156106e157600080fd5b506103d06106f0366004613964565b6112b4565b34801561070157600080fd5b506103d061071036600461397d565b6112e2565b34801561072157600080fd5b5061048c610730366004613964565b611307565b34801561074157600080fd5b5061039b61075036600461397d565b60609190911b638b78c6d8176000908152602090205416151590565b34801561077857600080fd5b506103d061139a565b34801561078d57600080fd5b506103d061079c366004613c73565b6113d7565b3480156107ad57600080fd5b50609b546001600160a01b0316610414565b3480156107cb57600080fd5b506104146107da366004613964565b61141e565b3480156107eb57600080fd5b506107ff6107fa366004613964565b61147e565b6040516103a79190613caf565b34801561081857600080fd5b5061048c610827366004613c58565b6115da565b34801561083857600080fd5b506103d0611660565b34801561084d57600080fd5b5061086161085c366004613964565b61169c565b6040516103a79190613d32565b34801561087a57600080fd5b5061048c600181565b34801561088f57600080fd5b5061039b61089e366004613c58565b6001600160a01b03166000908152609e602052604090205460ff1690565b3480156108c857600080fd5b506103d06108d7366004613be0565b6116e4565b3480156108e857600080fd5b50638b78c6d81954610414565b34801561090157600080fd5b506103e7611772565b34801561091657600080fd5b506103d0610925366004613be0565b611781565b34801561093657600080fd5b506103d0610945366004613d79565b611809565b6103d0610958366004613e38565b61183b565b34801561096957600080fd5b50609c5461048c565b34801561097e57600080fd5b506103d061098d366004613ee8565b6118ed565b34801561099e57600080fd5b5061048c611a38565b3480156109b357600080fd5b506103e76109c2366004613964565b611a48565b3480156109d357600080fd5b506103d06109e2366004613f8c565b611a53565b3480156109f357600080fd5b506040516202a30081526020016103a7565b348015610a1157600080fd5b5061039b610a20366004613c58565b6001600160a01b03166000908152609d602052604090205460ff1690565b348015610a4a57600080fd5b5061039b610a59366004613fe2565b611a94565b348015610a6a57600080fd5b5061048c600281565b348015610a7f57600080fd5b506103d0610a8e366004613c58565b611b17565b348015610a9f57600080fd5b506103d0610aae366004613c58565b611b87565b348015610abf57600080fd5b506103d0610ace366004613c58565b611be0565b348015610adf57600080fd5b5061048c610aee366004613c58565b60601b63389a75e1176000908152602090205490565b6000610b0f82611c35565b80610b1e5750610b1e82611c75565b80610b2d5750610b2d82611c9a565b80610b3c5750610b3c82611c75565b92915050565b6001638b78c6d83360601b176000528060206000205416610b7857638b78c6d819543314610b78576382b429006000526004601cfd5b610b828383611cbf565b505050565b6060609f8054610b969061400c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc29061400c565b8015610c0f5780601f10610be457610100808354040283529160200191610c0f565b820191906000526020600020905b815481529060010190602001808311610bf257829003601f168201915b5050505050905090565b6000610c2482611d79565b50600090815260a360205260409020546001600160a01b031690565b6000610c4b8261141e565b9050806001600160a01b0316836001600160a01b031603610cbd5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610cd95750610cd98133611a94565b610d4b5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610cb4565b610b828383611dd8565b6002638b78c6d83360601b176000528060206000205416610d8b57638b78c6d819543314610d8b576382b429006000526004601cfd5b610d988686868686611e46565b505050505050565b600060208201825160051b81015b808214610dcc57600160ff8351161b83179250602082019150610dae565b5050919050565b6002638b78c6d83360601b176000528060206000205416610e0957638b78c6d819543314610e09576382b429006000526004601cfd5b610b828383611f58565b610e1d3382611fec565b50565b6002638b78c6d83360601b176000528060206000205416610e5657638b78c6d819543314610e56576382b429006000526004601cfd5b610b82838361203d565b6002638b78c6d83360601b176000528060206000205416610e9657638b78c6d819543314610e96576382b429006000526004601cfd5b6001600160a01b0383166000818152609e6020908152604091829020805460ff191686151590811790915591519182527fee6f72776cc4e6e5957f9692e86b52e270b1578d343bf9f46351ffab538487ac91015b60405180910390a2505050565b638b78c6d819543314610f12576382b429006000526004601cfd5b610f1c8282612083565b5050565b6002638b78c6d83360601b176000528060206000205416610f5657638b78c6d819543314610f56576382b429006000526004601cfd5b610f1c826120cf565b6002638b78c6d83360601b176000528060206000205416610f9557638b78c6d819543314610f95576382b429006000526004601cfd5b610f1c82612132565b610fa9335b8261217e565b610fc55760405162461bcd60e51b8152600401610cb490614046565b610b828383836121dd565b60006202a3006001600160401b03164201905063389a75e13360601b1760005280602060002055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b60008281526069602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282019290925282916110955750604080518082019091526068546001600160a01b0381168252600160a01b90046001600160601b031660208201525b6020810151600090612710906110b4906001600160601b0316876140aa565b6110be91906140df565b91519350909150505b9250929050565b60006110d9836115da565b821061113b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610cb4565b506001600160a01b0391909116600090815260d160209081526040808320938352929052205490565b600047116111a05760405162461bcd60e51b8152602060048201526009602482015268302062616c616e636560b81b6044820152606401610cb4565b609a54604051639af608c960e01b81523060048201526001600160a01b039091169047906000908390639af608c990602401602060405180830381865afa1580156111ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121391906140f3565b60405163b9bff4bb60e01b8152600481018290529091506001600160a01b0384169063b9bff4bb90602401600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b5050505061127a8382612384565b609b54610b82906001600160a01b0316611294848461249d565b612384565b610b8283838360405180602001604052806000815250611809565b6112bd33610fa3565b6112d95760405162461bcd60e51b8152600401610cb490614046565b610e1d816124a9565b638b78c6d8195433146112fd576382b429006000526004601cfd5b610f1c8282611fec565b600061131260d35490565b82106113755760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610cb4565b60d382815481106113885761138861410c565b90600052602060002001549050919050565b63389a75e13360601b176000526000602060002055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6001638b78c6d83360601b17600052806020600020541661140d57638b78c6d81954331461140d576382b429006000526004601cfd5b6114188484846124b2565b50505050565b600081815260a160205260408120546001600160a01b031680610b3c5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cb4565b6114d260405180610120016040528060608152602001600081526020016000815260200160008152602001600081526020016000815260200160008019168152602001600015158152602001600081525090565b60008281526034602052604090819020815161012081019092528054829082906114fb9061400c565b80601f01602080910402602001604051908101604052809291908181526020018280546115279061400c565b80156115745780601f1061154957610100808354040283529160200191611574565b820191906000526020600020905b81548152906001019060200180831161155757829003601f168201915b505050918352505060018201546020820152600282015460408201526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460ff16151560e08201526008909101546101009091015292915050565b60006001600160a01b0382166116445760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610cb4565b506001600160a01b0316600090815260a2602052604090205490565b638b78c6d81954331461167b576382b429006000526004601cfd5b600033600080516020614444833981519152600080a36000638b78c6d81955565b606060206040510160005b8082526001841660051b820191508360011c935083156116c9576001016116a7565b5060405191508060405260208201810360051c825250919050565b6002638b78c6d83360601b17600052806020600020541661171a57638b78c6d81954331461171a576382b429006000526004601cfd5b6001600160a01b0383166000818152609d6020908152604091829020805460ff191686151590811790915591519182527f5d9603027afffb9569796fb6d9fc189bbf68724bd0430924681595302758b4f09101610eea565b606060a08054610b969061400c565b6001600160a01b0382166000908152609e602052604090205460ff16156117ff5760405162461bcd60e51b815260206004820152602c60248201527f4f70657261746f7220686173206265656e20626c6f636b656420627920636f6e60448201526b3a3930b1ba1037bbb732b91760a11b6064820152608401610cb4565b610f1c828261257d565b611813338361217e565b61182f5760405162461bcd60e51b8152600401610cb490614046565b61141884848484612588565b60006118468761147e565b609c5490915061185690346125bb565b609c55609a5460405163107e9cf160e01b81523460048201526001600160a01b039091169063107e9cf190602401600060405180830381600087803b15801561189e57600080fd5b505af11580156118b2573d6000803e3d6000fd5b505050506118c96118c03390565b825188906125c7565b6118e4878787876118dd638b78c6d8195490565b888861260c565b50505050505050565b600054610100900460ff161580801561190d5750600054600160ff909116105b806119275750303b158015611927575060005460ff166001145b61198a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cb4565b6000805460ff1916600117905580156119ad576000805461ff0019166101001790555b6119b786866129ed565b6119bf612a1e565b6119c7612a1e565b6119cf612a1e565b6119db87858585612a47565b6119ea61016780546001019055565b80156118e4576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b6000611a4360335490565b905090565b6060610b3c82612ab2565b6002638b78c6d83360601b176000528060206000205416611a8957638b78c6d819543314611a89576382b429006000526004601cfd5b6114188484846125c7565b6001600160a01b0381166000908152609d602052604081205460ff1615611abd57506001610b3c565b6001600160a01b0382166000908152609e602052604090205460ff1615611ae657506000610b3c565b6001600160a01b03808416600090815260a4602090815260408083209386168352929052205460ff165b9392505050565b638b78c6d819543314611b32576382b429006000526004601cfd5b8060601b60601c905063389a75e18160601b1760005260206000208054421115611b6457636f5e88186000526004601cfd5b60008155508033600080516020614444833981519152600080a3638b78c6d81955565b6001638b78c6d83360601b176000528060206000205416611bbd57638b78c6d819543314611bbd576382b429006000526004601cfd5b50609b80546001600160a01b0319166001600160a01b0392909216919091179055565b638b78c6d819543314611bfb576382b429006000526004601cfd5b6001600160a01b031680611c1757637448fbae6000526004601cfd5b8033600080516020614444833981519152600080a3638b78c6d81955565b60006001600160e01b031982166380ac58cd60e01b1480611c6657506001600160e01b03198216635b5e139f60e01b145b80610b3c5750610b3c82611c9a565b60006001600160e01b0319821663780e9d6360e01b1480610b3c5750610b3c82611c35565b60006001600160e01b03198216632fea6ab760e21b1480610b3c5750610b3c82612bbb565b6127106001600160601b0382161115611cea5760405162461bcd60e51b8152600401610cb490614122565b6001600160a01b038216611d405760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610cb4565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217606855565b600081815260a160205260409020546001600160a01b0316610e1d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cb4565b600081815260a36020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e0d8261141e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e5160335490565b9050611e61603380546001019055565b604080516101208101825287815260208082018890528183018790526060820186905260808201859052600060a0830181905260c08301819052600160e0840152610100830181905284815260349091529190912081518190611ec490826141b2565b50602082015160018201556040808301516002830155606083015160038301556080830151600483015560a0830151600583015560c0830151600683015560e083015160078301805460ff1916911515919091179055610100909201516008909101555181907f722868ecddb510067469fb495ac2904c250692c67941ad0bd36e01c2059fc77890600090a2505050505050565b600082815260a160205260409020546001600160a01b0316611fd35760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610cb4565b600082815261010360205260409020610b8282826141b2565b638b78c6d88260601b176000526020600020805482811681189050808255808460601b60601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a350505050565b60008281526034602052604090206007015460ff1661206e5760405162461bcd60e51b8152600401610cb490614271565b60009182526034602052604090912060060155565b638b78c6d88260601b17600052602060002081815417808255808460601b60601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a350505050565b60008181526034602052604090206007015460ff166121005760405162461bcd60e51b8152600401610cb490614271565b60008181526034602052604090206008015461211d9060016125bb565b60009182526034602052604090912060080155565b60008181526034602052604090206007015460ff166121635760405162461bcd60e51b8152600401610cb490614271565b6000908152603460205260409020600701805460ff19169055565b60008061218a8361141e565b9050806001600160a01b0316846001600160a01b031614806121b157506121b18185611a94565b806121d55750836001600160a01b03166121ca84610c19565b6001600160a01b0316145b949350505050565b826001600160a01b03166121f08261141e565b6001600160a01b0316146122545760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610cb4565b6001600160a01b0382166122b65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610cb4565b6122c1838383612bf0565b6122cc600082611dd8565b6001600160a01b038316600090815260a2602052604081208054600192906122f5908490614295565b90915550506001600160a01b038216600090815260a2602052604081208054600192906123239084906142ac565b9091555050600081815260a1602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b804710156123d45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610cb4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612421576040519150601f19603f3d011682016040523d82523d6000602084013e612426565b606091505b5050905080610b825760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610cb4565b6000611b108284614295565b610e1d81612bfb565b6127106001600160601b03821611156124dd5760405162461bcd60e51b8152600401610cb490614122565b6001600160a01b0382166125335760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610cb4565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752606990529190942093519051909116600160a01b029116179055565b610f1c338383612c3d565b6125938484846121dd565b61259f84848484612d0b565b6114185760405162461bcd60e51b8152600401610cb4906142c4565b6000611b1082846142ac565b60005b828110156114185760006125de6101675490565b90506125ef61016780546001019055565b6125f98582612e0c565b6126038184611f58565b506001016125ca565b60006126178861147e565b90508060e0015161263a5760405162461bcd60e51b8152600401610cb490614271565b6020810151349061264b9089612e26565b111561268b5760405162461bcd60e51b815260206004820152600f60248201526e15985b1d59481a5b98dbdc9c9958dd608a1b6044820152606401610cb4565b80608001518711156126d75760405162461bcd60e51b8152602060048201526015602482015274115e18d959591959081b585e081c195c881b5a5b9d605a1b6044820152606401610cb4565b604081015160a08201516126eb90896125bb565b111561272f5760405162461bcd60e51b8152602060048201526013602482015272115e18d959591959081b585e08185b5bdd5b9d606a1b6044820152606401610cb4565b6060810151600089815260356020908152604080832033845290915290205461275890896125bb565b11156127a65760405162461bcd60e51b815260206004820152601760248201527f4578636565646564206d6178207065722077616c6c65740000000000000000006044820152606401610cb4565b836001600160a01b031661287687878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505061010085015161287091506127fe908d906125bb565b60405160200161281091815260200190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90612e32565b6001600160a01b0316146128c05760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610cb4565b60c08101511561297a5761293e83838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050505060c08301516040516bffffffffffffffffffffffff193360601b16602082015260340160405160208183030381529060405280519060200120612e56565b61297a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610cb4565b60008881526034602090815260408083206005018054600190810190915560358352818420338086529084529382902080549091019055518981528a92917fac100af3f918c30d71d2bfb00d975e36374d10738748c899376504e76c70bc73910160405180910390a35050505050505050565b600054610100900460ff16612a145760405162461bcd60e51b8152600401610cb490614316565b610f1c8282612e6c565b600054610100900460ff16612a455760405162461bcd60e51b8152600401610cb490614316565b565b600054610100900460ff16612a6e5760405162461bcd60e51b8152600401610cb490614316565b612a7784612eac565b612a7f612a1e565b609a8054336001600160a01b031991821617909155609b80549091166001600160a01b0385161790556114188282611cbf565b6060612abd82611d79565b6000828152610103602052604081208054612ad79061400c565b80601f0160208091040260200160405190810160405280929190818152602001828054612b039061400c565b8015612b505780601f10612b2557610100808354040283529160200191612b50565b820191906000526020600020905b815481529060010190602001808311612b3357829003601f168201915b505050505090506000612b6e60408051602081019091526000815290565b90508051600003612b80575092915050565b815115612bb2578082604051602001612b9a929190614361565b60405160208183030381529060405292505050919050565b6121d584612ed6565b60006001600160e01b0319821663152a902d60e11b1480610b3c57506301ffc9a760e01b6001600160e01b0319831614610b3c565b610b82838383612f49565b612c0481613001565b6000818152610103602052604090208054612c1e9061400c565b159050610e1d57600081815261010360205260408120610e1d91613812565b816001600160a01b0316836001600160a01b031603612c9e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610cb4565b6001600160a01b03838116600081815260a46020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60006001600160a01b0384163b15612e0157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612d4f903390899088908890600401614390565b6020604051808303816000875af1925050508015612d8a575060408051601f3d908101601f19168201909252612d87918101906143cd565b60015b612de7573d808015612db8576040519150601f19603f3d011682016040523d82523d6000602084013e612dbd565b606091505b508051600003612ddf5760405162461bcd60e51b8152600401610cb4906142c4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121d5565b506001949350505050565b610f1c8282604051806020016040528060008152506130a8565b6000611b1082846140aa565b6000806000612e4185856130db565b91509150612e4e8161311d565b509392505050565b600082612e6385846132d3565b14949350505050565b600054610100900460ff16612e935760405162461bcd60e51b8152600401610cb490614316565b609f612e9f83826141b2565b5060a0610b8282826141b2565b6001600160a01b0316638b78c6d8198190558060006000805160206144448339815191528180a350565b6060612ee182611d79565b6000612ef860408051602081019091526000815290565b90506000815111612f185760405180602001604052806000815250611b10565b80612f2284613318565b604051602001612f33929190614361565b6040516020818303038152906040529392505050565b6001600160a01b038316612fa457612f9f8160d38054600083815260d460205260408120829055600182018355919091527f915c3eb987b20e1af620c1403197bf687fb7f18513b3a73fde6e78c7072c41a60155565b612fc7565b816001600160a01b0316836001600160a01b031614612fc757612fc78382613418565b6001600160a01b038216612fde57610b82816134b5565b826001600160a01b0316826001600160a01b031614610b8257610b828282613564565b600061300c8261141e565b905061301a81600084612bf0565b613025600083611dd8565b6001600160a01b038116600090815260a26020526040812080546001929061304e908490614295565b9091555050600082815260a1602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6130b283836135a8565b6130bf6000848484612d0b565b610b825760405162461bcd60e51b8152600401610cb4906142c4565b60008082516041036131115760208301516040840151606085015160001a613105878285856136f6565b945094505050506110c7565b506000905060026110c7565b6000816004811115613131576131316143ea565b036131395750565b600181600481111561314d5761314d6143ea565b0361319a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610cb4565b60028160048111156131ae576131ae6143ea565b036131fb5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610cb4565b600381600481111561320f5761320f6143ea565b036132675760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610cb4565b600481600481111561327b5761327b6143ea565b03610e1d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610cb4565b600081815b8451811015612e4e57613304828683815181106132f7576132f761410c565b60200260200101516137e3565b91508061331081614400565b9150506132d8565b60608160000361333f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613369578061335381614400565b91506133629050600a836140df565b9150613343565b6000816001600160401b03811115613383576133836139a7565b6040519080825280601f01601f1916602001820160405280156133ad576020820181803683370190505b5090505b84156121d5576133c2600183614295565b91506133cf600a86614419565b6133da9060306142ac565b60f81b8183815181106133ef576133ef61410c565b60200101906001600160f81b031916908160001a905350613411600a866140df565b94506133b1565b60006001613425846115da565b61342f9190614295565b600083815260d26020526040902054909150808214613482576001600160a01b038416600090815260d160209081526040808320858452825280832054848452818420819055835260d290915290208190555b50600091825260d2602090815260408084208490556001600160a01b03909416835260d181528383209183525290812055565b60d3546000906134c790600190614295565b600083815260d4602052604081205460d380549394509092849081106134ef576134ef61410c565b906000526020600020015490508060d383815481106135105761351061410c565b600091825260208083209091019290925582815260d4909152604080822084905585825281205560d38054806135485761354861442d565b6001900381819060005260206000200160009055905550505050565b600061356f836115da565b6001600160a01b03909316600090815260d160209081526040808320868452825280832085905593825260d29052919091209190915550565b6001600160a01b0382166135fe5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610cb4565b600081815260a160205260409020546001600160a01b0316156136635760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cb4565b61366f60008383612bf0565b6001600160a01b038216600090815260a2602052604081208054600192906136989084906142ac565b9091555050600081815260a1602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561372d57506000905060036137da565b8460ff16601b1415801561374557508460ff16601c14155b1561375657506000905060046137da565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156137aa573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166137d3576000600192509250506137da565b9150600090505b94509492505050565b60008183106137ff576000828152602084905260409020611b10565b6000838152602083905260409020611b10565b50805461381e9061400c565b6000825580601f1061382e575050565b601f016020900490600052602060002090810190610e1d91905b8082111561385c5760008155600101613848565b5090565b6001600160e01b031981168114610e1d57600080fd5b60006020828403121561388857600080fd5b8135611b1081613860565b80356001600160a01b03811681146138aa57600080fd5b919050565b80356001600160601b03811681146138aa57600080fd5b600080604083850312156138d957600080fd5b6138e283613893565b91506138f0602084016138af565b90509250929050565b60005b838110156139145781810151838201526020016138fc565b838111156114185750506000910152565b6000815180845261393d8160208601602086016138f9565b601f01601f19169290920160200192915050565b602081526000611b106020830184613925565b60006020828403121561397657600080fd5b5035919050565b6000806040838503121561399057600080fd5b61399983613893565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156139e5576139e56139a7565b604052919050565b60006001600160401b03831115613a0657613a066139a7565b613a19601f8401601f19166020016139bd565b9050828152838383011115613a2d57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613a5557600080fd5b611b10838335602085016139ed565b600080600080600060a08688031215613a7c57600080fd5b85356001600160401b03811115613a9257600080fd5b613a9e88828901613a44565b9860208801359850604088013597606081013597506080013595509350505050565b60006020808385031215613ad357600080fd5b82356001600160401b0380821115613aea57600080fd5b818501915085601f830112613afe57600080fd5b813581811115613b1057613b106139a7565b8060051b9150613b218483016139bd565b8181529183018401918481019088841115613b3b57600080fd5b938501935b83851015613b6c578435925060ff83168314613b5c5760008081fd5b8282529385019390850190613b40565b98975050505050505050565b60008060408385031215613b8b57600080fd5b8235915060208301356001600160401b03811115613ba857600080fd5b613bb485828601613a44565b9150509250929050565b60008060408385031215613bd157600080fd5b50508035926020909101359150565b60008060408385031215613bf357600080fd5b613bfc83613893565b915060208301358015158114613c1157600080fd5b809150509250929050565b600080600060608486031215613c3157600080fd5b613c3a84613893565b9250613c4860208501613893565b9150604084013590509250925092565b600060208284031215613c6a57600080fd5b611b1082613893565b600080600060608486031215613c8857600080fd5b83359250613c9860208501613893565b9150613ca6604085016138af565b90509250925092565b6020815260008251610120806020850152613cce610140850183613925565b9150602085015160408501526040850151606085015260608501516080850152608085015160a085015260a085015160c085015260c085015160e085015260e0850151610100613d218187018315159052565b959095015193019290925250919050565b6020808252825182820181905260009190848201906040850190845b81811015613d6d57835160ff1683529284019291840191600101613d4e565b50909695505050505050565b60008060008060808587031215613d8f57600080fd5b613d9885613893565b9350613da660208601613893565b92506040850135915060608501356001600160401b03811115613dc857600080fd5b8501601f81018713613dd957600080fd5b613de8878235602084016139ed565b91505092959194509250565b60008083601f840112613e0657600080fd5b5081356001600160401b03811115613e1d57600080fd5b6020830191508360208260051b85010111156110c757600080fd5b60008060008060008060808789031215613e5157600080fd5b863595506020870135945060408701356001600160401b0380821115613e7657600080fd5b818901915089601f830112613e8a57600080fd5b813581811115613e9957600080fd5b8a6020828501011115613eab57600080fd5b602083019650809550506060890135915080821115613ec957600080fd5b50613ed689828a01613df4565b979a9699509497509295939492505050565b60008060008060008060c08789031215613f0157600080fd5b613f0a87613893565b955060208701356001600160401b0380821115613f2657600080fd5b613f328a838b01613a44565b96506040890135915080821115613f4857600080fd5b50613f5589828a01613a44565b945050613f6460608801613893565b9250613f7260808801613893565b9150613f8060a088016138af565b90509295509295509295565b600080600060608486031215613fa157600080fd5b613faa84613893565b92506020840135915060408401356001600160401b03811115613fcc57600080fd5b613fd886828701613a44565b9150509250925092565b60008060408385031215613ff557600080fd5b613ffe83613893565b91506138f060208401613893565b600181811c9082168061402057607f821691505b60208210810361404057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156140c4576140c4614094565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826140ee576140ee6140c9565b500490565b60006020828403121561410557600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b601f821115610b8257600081815260208120601f850160051c810160208610156141935750805b601f850160051c820191505b81811015610d985782815560010161419f565b81516001600160401b038111156141cb576141cb6139a7565b6141df816141d9845461400c565b8461416c565b602080601f83116001811461421457600084156141fc5750858301515b600019600386901b1c1916600185901b178555610d98565b600085815260208120601f198616915b8281101561424357888601518255948401946001909101908401614224565b50858210156142615787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252600a90820152694e6f742061637469766560b01b604082015260600190565b6000828210156142a7576142a7614094565b500390565b600082198211156142bf576142bf614094565b500190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600083516143738184602088016138f9565b8351908301906143878183602088016138f9565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906143c390830184613925565b9695505050505050565b6000602082840312156143df57600080fd5b8151611b1081613860565b634e487b7160e01b600052602160045260246000fd5b60006001820161441257614412614094565b5060010190565b600082614428576144286140c9565b500690565b634e487b7160e01b600052603160045260246000fdfe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220289db5c874d8170c3805f21bd046209454c9eb583849a01315733148a97d518e64736f6c634300080f0033