496 txs
540 calls
constructor
constructor(address _owner, address _artist, address _burner)
functions
accRewardPerShare
viewfunction accRewardPerShare(uint256) view returns (uint256)
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
artist
viewfunction artist() view returns (address)
artistPercentage
viewfunction artistPercentage() view returns (uint16)
balanceOf
viewfunction balanceOf(address account, uint256 id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])
burner
viewfunction burner() view returns (address)
burnPercentage
viewfunction burnPercentage() view returns (uint16)
communityPercentage
viewfunction communityPercentage() view returns (uint16)
communityRewards
viewfunction communityRewards(uint256 tokenId) view returns (uint256)
contractMetadataURI
viewfunction contractMetadataURI() view returns (string)
contractURI
viewfunction contractURI() view returns (string)
currentMint
viewfunction currentMint() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasMetadata
viewfunction hasMetadata(uint256 _tokenId) view returns (bool)
hasMinted
viewfunction hasMinted(uint256, address) view returns (bool)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address account, address operator) view returns (bool)
lastClaimedToken
viewfunction lastClaimedToken(address) view returns (uint256)
mintingStreak
viewfunction mintingStreak(address) view returns (uint8)
mintPrice
viewfunction mintPrice() view returns (uint256)
mintsPerToken
viewfunction mintsPerToken(uint256 tokenId) view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokenCommunityRewards
viewfunction tokenCommunityRewards(uint256) view returns (uint256)
tokenMetadata
viewfunction tokenMetadata(uint256) view returns (string metadata, uint256 createdAt)
totalBalanceOf
viewfunction totalBalanceOf(address account) view returns (uint256 total)
totalMints
viewfunction totalMints(address) view returns (uint256)
totalWeightPerCycle
viewfunction totalWeightPerCycle(uint256) view returns (uint256)
unclaimedRewards
viewfunction unclaimedRewards(address user) view returns (uint256)
uri
viewfunction uri(uint256 _tokenId) view returns (string)
weightOf
viewfunction weightOf(address user) view returns (uint256)
weightSnapshot
viewfunction weightSnapshot(uint256, address) view returns (uint256)
claimRewards
nonpayablefunction claimRewards()
createToken
nonpayablefunction createToken(string _metadata)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
mint
payablefunction mint() payable
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
safeBatchTransferFrom
nonpayablefunction safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] values, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes data)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setContractURI
nonpayablefunction setContractURI(string _uri)
setMintPrice
nonpayablefunction setMintPrice(uint256 _mintPrice)
setPaused
nonpayablefunction setPaused(bool _setPaused)
setPercentages
nonpayablefunction setPercentages(uint256 _burnPercentage, uint256 _artistPercentage, uint256 _communityPercentage)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateTokenMetadata
nonpayablefunction updateTokenMetadata(uint256 _tokenId, string _newMetadata)
events
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed operator, bool approved)
CommunityRewardsClaimed
event CommunityRewardsClaimed(uint256 indexed tokenId, address indexed user, uint256 amount)
MetadataUpdated
event MetadataUpdated(uint256 indexed tokenId, string newMetadata)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PercentagesUpdated
event PercentagesUpdated(uint256 burnPercentage, uint256 artistPercentage, uint256 communityPercentage)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
TokenCreated
event TokenCreated(uint256 indexed tokenId, string metadata)
TransferBatch
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)
TransferSingle
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)
Unpaused
event Unpaused(address account)
URI
event URI(string value, uint256 indexed id)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
EnforcedPause
error EnforcedPause()
ERC1155InsufficientBalance
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId)
ERC1155InvalidApprover
error ERC1155InvalidApprover(address approver)
ERC1155InvalidArrayLength
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength)
ERC1155InvalidOperator
error ERC1155InvalidOperator(address operator)
ERC1155InvalidReceiver
error ERC1155InvalidReceiver(address receiver)
ERC1155InvalidSender
error ERC1155InvalidSender(address sender)
ERC1155MissingApprovalForAll
error ERC1155MissingApprovalForAll(address operator, address owner)
ExpectedPause
error ExpectedPause()
InvalidPercentage
error InvalidPercentage()
MetadataNotSet
error MetadataNotSet()
MustPayMintPrice
error MustPayMintPrice()
NoRewardsToClaim
error NoRewardsToClaim()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
TransferFailed
error TransferFailed()
WithdrawFailed
error WithdrawFailed()
creation bytecode
0x60c060405234801561000f575f80fd5b50604051613e53380380613e5383398101604081905261002e916102c8565b60408051602081019091525f815283906100478161010c565b506001600160a01b03811661007557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61007e8161011c565b506004805460ff60a01b1916905560016006556602d79883d200006007556001600160a01b03828116608052811660a0526009805465ffffffffffff19166513880bb807d01790556100d05f8461016d565b506100fb7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758461016d565b5061010461021a565b50505061045f565b600261011882826103a0565b5050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff16610211575f8381526005602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101c93390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610214565b505f5b92915050565b61022261027a565b6004805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861025d3390565b6040516001600160a01b03909116815260200160405180910390a1565b61028d600454600160a01b900460ff1690565b156102ab5760405163d93c066560e01b815260040160405180910390fd5b565b80516001600160a01b03811681146102c3575f80fd5b919050565b5f805f606084860312156102da575f80fd5b6102e3846102ad565b92506102f1602085016102ad565b91506102ff604085016102ad565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061033057607f821691505b60208210810361034e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561039b57805f5260205f20601f840160051c810160208510156103795750805b601f840160051c820191505b81811015610398575f8155600101610385565b50505b505050565b81516001600160401b038111156103b9576103b9610308565b6103cd816103c7845461031c565b84610354565b602080601f831160018114610400575f84156103e95750858301515b5f19600386901b1c1916600185901b178555610457565b5f85815260208120601f198616915b8281101561042e5788860151825594840194600190910190840161040f565b508582101561044b57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a0516139c561048e5f395f81816104c00152610d5601525f81816105fe0152610dcf01526139c55ff3fe608060405260043610610326575f3560e01c806373e92784116101a7578063c7c02bf5116100e7578063e8b221fc11610092578063f242432a1161006d578063f242432a14610a8c578063f2fde38b14610aab578063f4a0a52814610aca578063f7cae64314610ae9575f80fd5b8063e8b221fc146109f3578063e985e9c514610a1e578063f01f20df14610a72575f80fd5b8063d7179f4c116100c2578063d7179f4c146109a0578063dd4bc101146109c0578063e8a3d485146109df575f80fd5b8063c7c02bf51461092d578063c82403d61461094c578063d547741f14610981575f80fd5b8063a217fddf11610152578063a9d3ce991161012d578063a9d3ce991461088e578063b501eaf5146108ad578063bb8e1b59146108c2578063c194efbf14610902575f80fd5b8063a217fddf14610831578063a22cb46514610844578063a8da614f14610863575f80fd5b806391d148541161018257806391d14854146107a2578063938e3d7b146107f3578063949813b814610812575f80fd5b806373e927841461073157806375b238fc146107455780638da5cb5b14610778575f80fd5b80632f2ff15d1161027257806345576f941161021d5780635c975abb116101f85780635c975abb146106ac5780636817c76c146106db5780636914db60146106f0578063715018a61461071d575f80fd5b806345576f94146106205780634b0ee02a1461063f5780634e1273f414610680575f80fd5b8063372500ab1161024d578063372500ab146105ae5780633f98007e146105c257806343bc1612146105ed575f80fd5b80632f2ff15d146105455780632fb290521461056457806336568abe1461058f575f80fd5b80631df3b33d116102d257806327810b6e116102ad57806327810b6e146104af5780632cb2f52e146105075780632eb2c2d614610526575f80fd5b80631df3b33d1461042057806320863f7314610456578063248a9ca314610481575f80fd5b80630e89341c116103025780630e89341c146103cb5780631249c58b146103f757806316c38b3c14610401575f80fd5b8062fdd58e1461033157806301ffc9a7146103635780630378073314610392575f80fd5b3661032d57005b5f80fd5b34801561033c575f80fd5b5061035061034b366004612e3f565b610b14565b6040519081526020015b60405180910390f35b34801561036e575f80fd5b5061038261037d366004612e94565b610b48565b604051901515815260200161035a565b34801561039d575f80fd5b506103826103ac366004612eaf565b600a60209081525f928352604080842090915290825290205460ff1681565b3480156103d6575f80fd5b506103ea6103e5366004612ed9565b610b52565b60405161035a9190612f3c565b6103ff610bf1565b005b34801561040c575f80fd5b506103ff61041b366004612f5d565b610f7c565b34801561042b575f80fd5b5061035061043a366004612eaf565b601160209081525f928352604080842090915290825290205481565b348015610461575f80fd5b50610350610470366004612f76565b600c6020525f908152604090205481565b34801561048c575f80fd5b5061035061049b366004612ed9565b5f9081526005602052604090206001015490565b3480156104ba575f80fd5b506104e27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161035a565b348015610512575f80fd5b506103ff610521366004613095565b610f9c565b348015610531575f80fd5b506103ff610540366004613168565b611037565b348015610550575f80fd5b506103ff61055f366004612eaf565b611101565b34801561056f575f80fd5b5061035061057e366004612ed9565b5f908152600d602052604090205490565b34801561059a575f80fd5b506103ff6105a9366004612eaf565b61112b565b3480156105b9575f80fd5b506103ff611189565b3480156105cd575f80fd5b506103506105dc366004612f76565b60126020525f908152604090205481565b3480156105f8575f80fd5b506104e27f000000000000000000000000000000000000000000000000000000000000000081565b34801561062b575f80fd5b506103ff61063a36600461320b565b611347565b34801561064a575f80fd5b50610350610659366004612f76565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b34801561068b575f80fd5b5061069f61069a366004613245565b61150c565b60405161035a919061332f565b3480156106b7575f80fd5b5060045474010000000000000000000000000000000000000000900460ff16610382565b3480156106e6575f80fd5b5061035060075481565b3480156106fb575f80fd5b5061070f61070a366004612ed9565b6115f0565b60405161035a929190613341565b348015610728575f80fd5b506103ff611691565b34801561073c575f80fd5b506103ea6116a2565b348015610750575f80fd5b506103507fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b348015610783575f80fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166104e2565b3480156107ad575f80fd5b506103826107bc366004612eaf565b5f91825260056020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156107fe575f80fd5b506103ff61080d366004613362565b61172e565b34801561081d575f80fd5b5061035061082c366004612f76565b611743565b34801561083c575f80fd5b506103505f81565b34801561084f575f80fd5b506103ff61085e3660046133ce565b611810565b34801561086e575f80fd5b5061035061087d366004612ed9565b60136020525f908152604090205481565b348015610899575f80fd5b506103ff6108a83660046133f6565b61181f565b3480156108b8575f80fd5b5061035060085481565b3480156108cd575f80fd5b506108f06108dc366004612f76565b600b6020525f908152604090205460ff1681565b60405160ff909116815260200161035a565b34801561090d575f80fd5b5061035061091c366004612ed9565b60106020525f908152604090205481565b348015610938575f80fd5b50610382610947366004612ed9565b61192a565b348015610957575f80fd5b5060095461096e90640100000000900461ffff1681565b60405161ffff909116815260200161035a565b34801561098c575f80fd5b506103ff61099b366004612eaf565b61194f565b3480156109ab575f80fd5b5060095461096e9062010000900461ffff1681565b3480156109cb575f80fd5b506103506109da366004612f76565b611973565b3480156109ea575f80fd5b506103ea6119be565b3480156109fe575f80fd5b50610350610a0d366004612ed9565b600e6020525f908152604090205481565b348015610a29575f80fd5b50610382610a3836600461341f565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205460ff1690565b348015610a7d575f80fd5b5060095461096e9061ffff1681565b348015610a97575f80fd5b506103ff610aa6366004613447565b611a4e565b348015610ab6575f80fd5b506103ff610ac5366004612f76565b611b0b565b348015610ad5575f80fd5b506103ff610ae4366004612ed9565b611b6b565b348015610af4575f80fd5b50610350610b03366004612ed9565b5f908152600e602052604090205490565b5f8181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b5f610b4282611b78565b5f818152601460205260409020805460609190610b6e906134a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9a906134a7565b8015610be55780601f10610bbc57610100808354040283529160200191610be5565b820191905f5260205f20905b815481529060010190602001808311610bc857829003601f168201915b50505050509050919050565b610bf9611bcd565b610c01611c10565b610c0c60085461192a565b610c42576040517fa1ed599f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754341015610c7e576040517fa7e2194300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c86611c65565b6009545f9061271090610c9d9061ffff1634613525565b610ca7919061353c565b6009549091505f9061271090610cc79062010000900461ffff1634613525565b610cd1919061353c565b6009549091505f9061271090610cf390640100000000900461ffff1634613525565b610cfd919061353c565b90505f8183610d0c8634613574565b610d169190613574565b610d209190613574565b90508315610dc6576040517f42966c680000000000000000000000000000000000000000000000000000000081525f60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342966c689086906024015f604051808303818588803b158015610dae575f80fd5b505af1158015610dc0573d5f803e3d5ffd5b50505050505b8215610e84575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16846040515f6040518083038185875af1925050503d805f8114610e42576040519150601f19603f3d011682016040523d82523d5f602084013e610e47565b606091505b5050905080610e82576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8115610eb0576008545f908152600e602052604081208054849290610eaa908490613587565b90915550505b8015610f6c575f610ed660045473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610f2a576040519150601f19603f3d011682016040523d82523d5f602084013e610f2f565b606091505b5050905080610f6a576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b50505050610f7a6001600655565b565b610f84611e33565b80610f9457610f91611e86565b50565b610f91611f03565b610fa4611e33565b610fad8261192a565b610fe3576040517fa1ed599f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f828152601460205260409020610ffa82826135de565b50817f459157ba24c7ab9878b165ef465fa6ae2ab42bcd8445f576be378768b0c473098260405161102b9190612f3c565b60405180910390a25050565b3373ffffffffffffffffffffffffffffffffffffffff86168114801590611090575073ffffffffffffffffffffffffffffffffffffffff8087165f9081526001602090815260408083209385168352929052205460ff16155b156110ec576040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152871660248201526044015b60405180910390fd5b6110f98686868686611f72565b505050505050565b5f8281526005602052604090206001015461111b81612024565b611125838361202e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461117a576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611184828261212b565b505050565b611191611bcd565b335f908152601260205260408120546111ab906001613587565b6008549091505f825b828111611236575f818152601160209081526040808320338452909152902054801561122d575f82815260106020526040902054670de0b6b3a7640000906111fd908390613525565b611207919061353c565b6112119084613587565b5f83815260116020908152604080832033845290915281205592505b506001016111b4565b50335f908152601260205260408120839055819003611281576040517f73380d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f81146112c0576040519150601f19603f3d011682016040523d82523d5f602084013e6112c5565b606091505b5050905080611300576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6008546040518381523391907fc89f24ff8af936fe4d715ca7b72cb261116b57a89913be3824d859c51fbcab139060200160405180910390a350505050610f7a6001600655565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561137181612024565b6008545f908152600e6020908152604080832054601390925290912054811561147857801561144457806113ad670de0b6b3a764000084613525565b6113b7919061353c565b600880545f90815260106020526040808220939093559054815290812054670de0b6b3a7640000906113ea908490613525565b6113f4919061353c565b90505f6114018285613574565b9050801561143d5780600e5f600854600161141c9190613587565b81526020019081526020015f205f8282546114379190613587565b90915550505b5050611478565b81600e5f60085460016114579190613587565b81526020019081526020015f205f8282546114729190613587565b90915550505b60085f8154611486906136f6565b90915550604080518082018252858152426020808301919091526008545f908152601490915291909120815181906114be90826135de565b50602082015181600101559050506008547f5d3ac5872118b949a1f8db596134a0e1587ecf18f2203bb1e3ea420c3c3f8fa9856040516114fe9190612f3c565b60405180910390a250505050565b6060815183511461155657815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016110e3565b5f835167ffffffffffffffff81111561157157611571612f8f565b60405190808252806020026020018201604052801561159a578160200160208202803683370190505b5090505f5b84518110156115e8576020808202860101516115c390602080840287010151610b14565b8282815181106115d5576115d561372d565b602090810291909101015260010161159f565b509392505050565b60146020525f908152604090208054819061160a906134a7565b80601f0160208091040260200160405190810160405280929190818152602001828054611636906134a7565b80156116815780601f1061165857610100808354040283529160200191611681565b820191905f5260205f20905b81548152906001019060200180831161166457829003601f168201915b5050505050908060010154905082565b611699611e33565b610f7a5f6121e8565b600f80546116af906134a7565b80601f01602080910402602001604051908101604052809291908181526020018280546116db906134a7565b80156117265780601f106116fd57610100808354040283529160200191611726565b820191905f5260205f20905b81548152906001019060200180831161170957829003601f168201915b505050505081565b611736611e33565b600f61118482848361375a565b73ffffffffffffffffffffffffffffffffffffffff81165f908152601260205260408120548190611775906001613587565b6008549091505f825b828111611807575f81815260116020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a16845290915290205480156117f4575f82815260106020526040902054670de0b6b3a7640000906117dd908390613525565b6117e7919061353c565b6117f19084613587565b92505b50806117ff816136f6565b91505061177e565b50949350505050565b61181b33838361225e565b5050565b611827611e33565b612710816118358486613587565b61183f9190613587565b1115611877576040517f1f3b85d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009805461ffff8581167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000085831602177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009184169190910217905560408051848152602081018490529081018290527fb00a98da0c7a71c80f4eb7c6fc5182810a44793a250cbecc3064afdba5c8660b9060600160405180910390a1505050565b5f8181526014602052604081208054829190611945906134a7565b9050119050919050565b5f8281526005602052604090206001015461196981612024565b611125838361212b565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600b602052604081205460ff16600a81116119a957806119ac565b600a5b6119b790600a613587565b9392505050565b6060600f80546119cd906134a7565b80601f01602080910402602001604051908101604052809291908181526020018280546119f9906134a7565b8015611a445780601f10611a1b57610100808354040283529160200191611a44565b820191905f5260205f20905b815481529060010190602001808311611a2757829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff86168114801590611aa7575073ffffffffffffffffffffffffffffffffffffffff8087165f9081526001602090815260408083209385168352929052205460ff16155b15611afe576040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152871660248201526044016110e3565b6110f98686868686612344565b611b13611e33565b73ffffffffffffffffffffffffffffffffffffffff8116611b62576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016110e3565b610f91816121e8565b611b73611e33565b600755565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610b425750610b428261241d565b600260065403611c09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600655565b60045474010000000000000000000000000000000000000000900460ff1615610f7a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c8233600854600160405180602001604052805f8152506124ff565b6008545f908152600d60205260408120805460019290611ca3908490613587565b90915550506008545f908152600a6020908152604080832033845290915290205460ff16610f7a57600880545f908152600a60209081526040808320338452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555415801590611d4d5750600a5f6001600854611d2c9190613574565b815260208082019290925260409081015f90812033825290925290205460ff165b15611daa57335f908152600b6020526040902054600a60ff9091161015611da557335f908152600b60205260408120805460ff1691611d8b83613870565b91906101000a81548160ff021916908360ff160217905550505b611de2565b335f908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b5f611dec33611973565b600880545f9081526011602090815260408083203384528252808320859055925482526013905290812080549293508392909190611e2b908490613587565b909155505050565b60045473ffffffffffffffffffffffffffffffffffffffff163314610f7a576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016110e3565b611e8e612580565b600480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611f0b611c10565b600480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ed93390565b73ffffffffffffffffffffffffffffffffffffffff8416611fc1576040517f57f447ce0000000000000000000000000000000000000000000000000000000081525f60048201526024016110e3565b73ffffffffffffffffffffffffffffffffffffffff8516612010576040517f01a835140000000000000000000000000000000000000000000000000000000081525f60048201526024016110e3565b61201d85858585856125d4565b5050505050565b610f918133612634565b5f82815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16612124575f83815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556120c23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610b42565b505f610b42565b5f82815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615612124575f83815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610b42565b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b73ffffffffffffffffffffffffffffffffffffffff82166122ad576040517fced3e1000000000000000000000000000000000000000000000000000000000081525f60048201526024016110e3565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526001602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8416612393576040517f57f447ce0000000000000000000000000000000000000000000000000000000081525f60048201526024016110e3565b73ffffffffffffffffffffffffffffffffffffffff85166123e2576040517f01a835140000000000000000000000000000000000000000000000000000000081525f60048201526024016110e3565b6040805160018082526020820186905281830190815260608201859052608082019092529061241487878484876125d4565b50505050505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a260000000000000000000000000000000000000000000000000000000014806124af57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b80610b4257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610b42565b73ffffffffffffffffffffffffffffffffffffffff841661254e576040517f57f447ce0000000000000000000000000000000000000000000000000000000081525f60048201526024016110e3565b604080516001808252602082018690528183019081526060820185905260808201909252906110f95f878484876125d4565b60045474010000000000000000000000000000000000000000900460ff16610f7a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125e0858585856126bb565b73ffffffffffffffffffffffffffffffffffffffff84161561201d5782513390600103612626576020848101519084015161261f8389898585896127bc565b50506110f9565b6110f98187878787876129ab565b5f82815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661181b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016110e3565b6126c784848484612b3a565b80515f5b818110156110f9575f8382815181106126e6576126e661372d565b602002602001015190505f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461275d5773ffffffffffffffffffffffffffffffffffffffff87165f9081526003602052604081208054839290612757908490613574565b90915550505b73ffffffffffffffffffffffffffffffffffffffff8616156127b35773ffffffffffffffffffffffffffffffffffffffff86165f90815260036020526040812080548392906127ad908490613587565b90915550505b506001016126cb565b73ffffffffffffffffffffffffffffffffffffffff84163b156110f9576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e6190612833908990899088908890889060040161388e565b6020604051808303815f875af192505050801561288b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612888918101906138dd565b60015b612918573d8080156128b8576040519150601f19603f3d011682016040523d82523d5f602084013e6128bd565b606091505b5080515f03612910576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024016110e3565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014612414576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024016110e3565b73ffffffffffffffffffffffffffffffffffffffff84163b156110f9576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c8190612a2290899089908890889088906004016138f8565b6020604051808303815f875af1925050508015612a7a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612a77918101906138dd565b60015b612aa7573d8080156128b8576040519150601f19603f3d011682016040523d82523d5f602084013e6128bd565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014612414576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024016110e3565b8051825114612b8257815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016110e3565b335f5b8351811015612ceb5760208181028581018201519085019091015173ffffffffffffffffffffffffffffffffffffffff881615612c83575f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8c16845290915290205481811015612c50576040517f03dee4c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1660048201526024810182905260448101839052606481018490526084016110e3565b5f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290209082900390555b73ffffffffffffffffffffffffffffffffffffffff871615612ce1575f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915281208054839290612cdb908490613587565b90915550505b5050600101612b85565b508251600103612d925760208301515f9060208401519091508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612d83929190918252602082015260400190565b60405180910390a4505061201d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612e08929190613962565b60405180910390a45050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612e3a575f80fd5b919050565b5f8060408385031215612e50575f80fd5b612e5983612e17565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610f91575f80fd5b5f60208284031215612ea4575f80fd5b81356119b781612e67565b5f8060408385031215612ec0575f80fd5b82359150612ed060208401612e17565b90509250929050565b5f60208284031215612ee9575f80fd5b5035919050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6119b76020830184612ef0565b80358015158114612e3a575f80fd5b5f60208284031215612f6d575f80fd5b6119b782612f4e565b5f60208284031215612f86575f80fd5b6119b782612e17565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561300357613003612f8f565b604052919050565b5f82601f83011261301a575f80fd5b813567ffffffffffffffff81111561303457613034612f8f565b61306560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612fbc565b818152846020838601011115613079575f80fd5b816020850160208301375f918101602001919091529392505050565b5f80604083850312156130a6575f80fd5b82359150602083013567ffffffffffffffff8111156130c3575f80fd5b6130cf8582860161300b565b9150509250929050565b5f67ffffffffffffffff8211156130f2576130f2612f8f565b5060051b60200190565b5f82601f83011261310b575f80fd5b8135602061312061311b836130d9565b612fbc565b8083825260208201915060208460051b870101935086841115613141575f80fd5b602086015b8481101561315d5780358352918301918301613146565b509695505050505050565b5f805f805f60a0868803121561317c575f80fd5b61318586612e17565b945061319360208701612e17565b9350604086013567ffffffffffffffff808211156131af575f80fd5b6131bb89838a016130fc565b945060608801359150808211156131d0575f80fd5b6131dc89838a016130fc565b935060808801359150808211156131f1575f80fd5b506131fe8882890161300b565b9150509295509295909350565b5f6020828403121561321b575f80fd5b813567ffffffffffffffff811115613231575f80fd5b61323d8482850161300b565b949350505050565b5f8060408385031215613256575f80fd5b823567ffffffffffffffff8082111561326d575f80fd5b818501915085601f830112613280575f80fd5b8135602061329061311b836130d9565b82815260059290921b840181019181810190898411156132ae575f80fd5b948201945b838610156132d3576132c486612e17565b825294820194908201906132b3565b965050860135925050808211156132e8575f80fd5b506130cf858286016130fc565b5f815180845260208085019450602084015f5b8381101561332457815187529582019590820190600101613308565b509495945050505050565b602081525f6119b760208301846132f5565b604081525f6133536040830185612ef0565b90508260208301529392505050565b5f8060208385031215613373575f80fd5b823567ffffffffffffffff8082111561338a575f80fd5b818501915085601f83011261339d575f80fd5b8135818111156133ab575f80fd5b8660208285010111156133bc575f80fd5b60209290920196919550909350505050565b5f80604083850312156133df575f80fd5b6133e883612e17565b9150612ed060208401612f4e565b5f805f60608486031215613408575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215613430575f80fd5b61343983612e17565b9150612ed060208401612e17565b5f805f805f60a0868803121561345b575f80fd5b61346486612e17565b945061347260208701612e17565b93506040860135925060608601359150608086013567ffffffffffffffff81111561349b575f80fd5b6131fe8882890161300b565b600181811c908216806134bb57607f821691505b6020821081036134f2577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610b4257610b426134f8565b5f8261356f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b81810381811115610b4257610b426134f8565b80820180821115610b4257610b426134f8565b601f82111561118457805f5260205f20601f840160051c810160208510156135bf5750805b601f840160051c820191505b8181101561201d575f81556001016135cb565b815167ffffffffffffffff8111156135f8576135f8612f8f565b61360c8161360684546134a7565b8461359a565b602080601f83116001811461365e575f84156136285750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556110f9565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156136aa5788860151825594840194600190910190840161368b565b50858210156136e657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613726576137266134f8565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff83111561377257613772612f8f565b6137868361378083546134a7565b8361359a565b5f601f8411600181146137d6575f85156137a05750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835561201d565b5f838152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08716915b828110156138235786850135825560209485019460019092019101613803565b508682101561385e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f60ff821660ff8103613885576138856134f8565b60010192915050565b5f73ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a060808301526138d260a0830184612ef0565b979650505050505050565b5f602082840312156138ed575f80fd5b81516119b781612e67565b5f73ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a0604083015261393060a08301866132f5565b828103606084015261394281866132f5565b905082810360808401526139568185612ef0565b98975050505050505050565b604081525f61397460408301856132f5565b828103602084015261398681856132f5565b9594505050505056fea2646970667358221220fafb17cb1aa107196e85ab57b151540de0d1930afd1a20a41a1ae3d2874d048764736f6c63430008190033000000000000000000000000d811f3803bee46fdce64e680aa29df3a4382e7e30000000000000000000000001d671d1b191323a38490972d58354971e5c1cd2a0000000000000000000000001595409cbaef3dd2485107fb1e328fa0fa505c10