3 txs
4 calls
constructor
constructor(address[] _initialGovernors)
functions
adToken
viewfunction adToken() view returns (address)
chefOfAdvertising
viewfunction chefOfAdvertising() view returns (address)
currentEvent
viewfunction currentEvent() view returns (string name, uint256 startTime, uint256 endTime, uint256 multiplier, bool isActive)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getAdvertisement
viewfunction getAdvertisement(uint256 _index) view returns (string link, string imageUrl, uint256 price, address advertiser, address referrer, bool isActive, uint256 engagements, uint256 createdAt)
getChiefTimes
viewfunction getChiefTimes(address _user) view returns (uint256)
getLatestAd
viewfunction getLatestAd() view returns (string link, string imageUrl, uint256 price, address advertiser, address referrer, bool isActive, uint256 engagements, uint256 createdAt)
getReputation
viewfunction getReputation(address _user) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getTotalAds
viewfunction getTotalAds() view returns (uint256)
getUserDetails
viewfunction getUserDetails(address _user) view returns (uint256 reputation, uint256 timesChief, address referredBy, bool isAdvertiser)
getUserStats
viewfunction getUserStats(address _user) view returns (uint256 totalEngagements, uint256 engagedAdsCount, uint256 level, bool isActive)
governance
viewfunction governance() view returns (address)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
lastWeeklyResetTime
viewfunction lastWeeklyResetTime() view returns (uint256)
paused
viewfunction paused() view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
createAdvertisement
payablefunction createAdvertisement(string _link, string _imageUrl, address _referrer) payable
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
pause
nonpayablefunction pause()
recordEngagement
nonpayablefunction recordEngagement(uint256 _adIndex)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
startEvent
nonpayablefunction startEvent(string _name, uint256 _duration, uint256 _multiplier)
unpause
nonpayablefunction unpause()
withdraw
nonpayablefunction withdraw()
events
AdCreated
event AdCreated(uint256 indexed adIndex, address indexed advertiser, uint256 indexed price)
AdDeactivated
event AdDeactivated(uint256 indexed adIndex)
ChiefUpdated
event ChiefUpdated(address indexed newChief)
EngagementRecorded
event EngagementRecorded(uint256 indexed adIndex, address indexed user)
Paused
event Paused(address account)
ReferralRecorded
event ReferralRecorded(address indexed referrer, address indexed referred)
RewardDistributed
event RewardDistributed(address indexed user, uint256 indexed amount, string indexed rewardType)
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)
Unpaused
event Unpaused(address account)
WithdrawExecuted
event WithdrawExecuted(address indexed admin, uint256 indexed amount, uint256 indexed timestamp)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
creation bytecode
0x60c060405234801561001057600080fd5b50604051613c73380380613c7383398101604081905261002f916102aa565b60016000556002805460ff19169055604051819061004c9061025e565b6100569190610379565b604051809103906000f080158015610072573d6000803e3d6000fd5b506001600160a01b031660a05260405161008b9061026b565b604051809103906000f0801580156100a7573d6000803e3d6000fd5b506001600160a01b031660808190526040805163d539139360e01b81529051632f2ff15d91839163d5391393916004808201926020929091908290030181865afa1580156100f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011d91906103c5565b6040516001600160e01b031960e084901b1681526004810191909152306024820152604401600060405180830381600087803b15801561015c57600080fd5b505af1158015610170573d6000803e3d6000fd5b506101829250600091503390506101c9565b506101ad7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775336101c9565b50504260035560028054610100600160a81b03191690556103de565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166102545760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610258565b5060005b92915050565b6108db8061225d83390190565b61113b80612b3883390190565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146102a557600080fd5b919050565b6000602082840312156102bc57600080fd5b81516001600160401b038111156102d257600080fd5b8201601f810184136102e357600080fd5b80516001600160401b038111156102fc576102fc610278565b604051600582901b90603f8201601f191681016001600160401b038111828210171561032a5761032a610278565b60405291825260208184018101929081018784111561034857600080fd5b6020850194505b8385101561036e576103608561028e565b81526020948501940161034f565b509695505050505050565b602080825282518282018190526000918401906040840190835b818110156103ba5783516001600160a01b0316835260209384019390920191600101610393565b509095945050505050565b6000602082840312156103d757600080fd5b5051919050565b60805160a051611e4561041860003960006103940152600081816103f80152818161136d015281816114d6015261170a0152611e456000f3fe6080604052600436106101815760003560e01c8063774b1b05116100d1578063970834e21161008a578063cc3d967b11610064578063cc3d967b14610507578063d547741f14610599578063f9179295146105b9578063fc783db1146105ce57600080fd5b8063970834e21461049c5780639c89a0e2146104bc578063a217fddf146104f257600080fd5b8063774b1b05146103e65780638456cb591461041a578063867abec41461042f57806391d14854146104545780639322a4f01461047457806396e576141461048757600080fd5b80633ccfd60b1161013e57806350750f251161011857806350750f25146103465780635a00539c1461036c5780635aa6e675146103825780635c975abb146103ce57600080fd5b80633ccfd60b146102a65780633f4ba83a146102bb5780634e43603a146102d057600080fd5b806301ffc9a714610186578063056c436c146101bb5780630f990f19146101ff578063248a9ca3146102335780632f2ff15d1461026457806336568abe14610286575b600080fd5b34801561019257600080fd5b506101a66101a1366004611855565b6105ee565b60405190151581526020015b60405180910390f35b3480156101c757600080fd5b506101f16101d63660046118a2565b6001600160a01b03166000908152600a602052604090205490565b6040519081526020016101b2565b34801561020b57600080fd5b5061021f61021a3660046118bd565b610625565b6040516101b298979695949392919061191c565b34801561023f57600080fd5b506101f161024e3660046118bd565b6000908152600160208190526040909120015490565b34801561027057600080fd5b5061028461027f36600461197d565b610816565b005b34801561029257600080fd5b506102846102a136600461197d565b610842565b3480156102b257600080fd5b5061028461087a565b3480156102c757600080fd5b506102846109a9565b3480156102dc57600080fd5b506103246102eb3660046118a2565b6001600160a01b031660009081526005602090815260408083206002810154600790935292205460048301549254919390929160ff1690565b60408051948552602085019390935291830152151560608201526080016101b2565b34801561035257600080fd5b5061035b6109cc565b6040516101b29594939291906119a9565b34801561037857600080fd5b506101f160035481565b34801561038e57600080fd5b506103b67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101b2565b3480156103da57600080fd5b5060025460ff166101a6565b3480156103f257600080fd5b506103b67f000000000000000000000000000000000000000000000000000000000000000081565b34801561042657600080fd5b50610284610a7a565b34801561043b57600080fd5b506002546103b69061010090046001600160a01b031681565b34801561046057600080fd5b506101a661046f36600461197d565b610a9a565b610284610482366004611a2b565b610ac5565b34801561049357600080fd5b5061021f610db5565b3480156104a857600080fd5b506102846104b73660046118bd565b610e35565b3480156104c857600080fd5b506101f16104d73660046118a2565b6001600160a01b031660009081526008602052604090205490565b3480156104fe57600080fd5b506101f1600081565b34801561051357600080fd5b506105686105223660046118a2565b6001600160a01b03908116600090815260086020908152604080832054600a83528184205460098452828520546005909452919093205492949093919091169160ff1690565b6040516101b2949392919093845260208401929092526001600160a01b031660408301521515606082015260800190565b3480156105a557600080fd5b506102846105b436600461197d565b610f7b565b3480156105c557600080fd5b506004546101f1565b3480156105da57600080fd5b506102846105e9366004611ab1565b610fa1565b60006001600160e01b03198216637965db0b60e01b148061061f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606080600080600080600080600480549050891061067a5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b60448201526064015b60405180910390fd5b600060048a8154811061068f5761068f611b02565b6000918252602090912060079091020160028101546003820154600483015460058401546006850154855495965086956001870195946001600160a01b039081169490811693600160a01b90910460ff1692909188906106ee90611b18565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90611b18565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050975086805461077a90611b18565b80601f01602080910402602001604051908101604052809291908181526020018280546107a690611b18565b80156107f35780601f106107c8576101008083540402835291602001916107f3565b820191906000526020600020905b8154815290600101906020018083116107d657829003601f168201915b505050505096509850985098509850985098509850985050919395975091939597565b6000828152600160208190526040909120015461083281611078565b61083c8383611082565b50505050565b6001600160a01b038116331461086b5760405163334bd91960e11b815260040160405180910390fd5b61087582826110fb565b505050565b610882611168565b600080516020611df083398151915261089a81611078565b47806108d55760405162461bcd60e51b815260206004820152600a6024820152694e6f2062616c616e636560b01b6044820152606401610671565b6040513390600090829084908381818185875af1925050503d8060008114610919576040519150601f19603f3d011682016040523d82523d6000602084013e61091e565b606091505b50509050806109615760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610671565b4283836001600160a01b03167ff6c0fc94edc8fd2a37514f1fb85af88fca386b00a54127b912273e6b83322e0860405160405180910390a4505050506109a76001600055565b565b600080516020611df08339815191526109c181611078565b6109c9611192565b50565b600b805481906109db90611b18565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0790611b18565b8015610a545780601f10610a2957610100808354040283529160200191610a54565b820191906000526020600020905b815481529060010190602001808311610a3757829003601f168201915b505050506001830154600284015460038501546004909501549394919390925060ff1685565b600080516020611df0833981519152610a9281611078565b6109c96111e4565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610acd611168565b610ad5611221565b6000610adf611245565b33600090815260086020526040812054919250906103e890610b02908490611b68565b610b0c9190611b7f565b9050610b188183611ba1565b9150610b23836112ab565b15610b7d576064610b35600a82611ba1565b610b3f9084611b68565b610b499190611b7f565b9150610b54836112f4565b33600090815260096020526040902080546001600160a01b0319166001600160a01b0385161790555b81341015610bc45760405162461bcd60e51b8152602060048201526014602482015273125b9cdd59999a58da595b9d081c185e5b595b9d60621b6044820152606401610671565b60048054604080516101206020601f8c01819004028201810190925261010081018a815292939290918291908c908c9081908501838280828437600092019190915250505090825250604080516020601f8b0181900481028201810190925289815291810191908a908a9081908401838280828437600092018290525093855250505060208083018890523360408401526001600160a01b038916606084015260016080840181905260a084018390524260c09094019390935284549283018555938152929092208151919260070201908190610ca19082611c11565b5060208201516001820190610cb69082611c11565b50604082810151600283015560608301516003830180546001600160a01b0319166001600160a01b03928316179055608084015160048401805460a0870151929093166001600160a81b031990931692909217600160a01b9115159190910217905560c083015160058084019190915560e0909301516006909201919091553360008181526020939093529120805460ff191660019081178255908101839055610d609190611427565b610d6983611458565b610d7283611593565b6040518390339083907fc7ee275ef2ba193e42bf9f80a17bc8bbf309d0453255f7c34f1eab54a06922d690600090a4505050610dae6001600055565b5050505050565b606080600080600080600080600060048054905011610e0a5760405162461bcd60e51b81526020600482015260116024820152704e6f206164766572746973656d656e747360781b6044820152606401610671565b600454610e1d9061021a90600190611ba1565b969f959e50939c50919a509850965094509092509050565b610e3d611168565b610e45611221565b6004548110610e835760405162461bcd60e51b815260206004820152600a602482015269125b9d985b1a5908185960b21b6044820152606401610671565b600060048281548110610e9857610e98611b02565b906000526020600020906007020190508060040160149054906101000a900460ff168015610ed3575060038101546001600160a01b03163314155b610f145760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a5908195b99d859d95b595b9d60721b6044820152606401610671565b336000908152600560205260409020610f2e8282856115d5565b610f3781611672565b610f42336001611427565b604051339084907f4be4b3157d2e1c8bb2b7e5df6cc94072a7710c7d8222fa79ec6fe260a8f864ea90600090a350506109c96001600055565b60008281526001602081905260409091200154610f9781611078565b61083c83836110fb565b600080516020611df0833981519152610fb981611078565b6040518060a0016040528086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252504260208201819052604090910190611016908690611cd0565b81526020810184905260016040909101528051600b9081906110389082611c11565b506020820151600182015560408201516002820155606082015160038201556080909101516004909101805460ff19169115159190911790555050505050565b6109c981336117c3565b600061108e8383610a9a565b6110f35760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161061f565b50600061061f565b60006111078383610a9a565b156110f35760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161061f565b60026000540361118b57604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b61119a6117fc565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6111ec611221565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111c73390565b60025460ff16156109a75760405163d93c066560e01b815260040160405180910390fd5b600454600090810361125d5750660110d9316ec00090565b60045460009061126e906069611dca565b9050600061128382660110d9316ec000611b68565b600454909150600090611297906064611dca565b90506112a38183611b7f565b935050505090565b60006001600160a01b038216158015906112ce57506001600160a01b0382163314155b801561061f5750506001600160a01b031660009081526005602052604090205460ff1690565b6001600160a01b03811660009081526005602052604081206004015460649061131d9082611cd0565b611330670de0b6b3a76400006032611b68565b61133a9190611b68565b6113449190611b7f565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018390529192507f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f1990604401600060405180830381600087803b1580156113b357600080fd5b505af11580156113c7573d6000803e3d6000fd5b505050506040516113e690671c9959995c9c985b60c21b815260080190565b6040519081900381209082906001600160a01b038516907f49649141d16971a88c3cfdd73fec34babb1cf163cf8b804c8f537a023c6ce50690600090a45050565b6001600160a01b0382166000908152600860205260408120805483929061144f908490611cd0565b90915550505050565b60025461010090046001600160a01b031615801590611487575060025461010090046001600160a01b03163314155b156109c9576000606461149b836005611b68565b6114a59190611b7f565b6002546040516340c10f1960e01b81526001600160a01b0361010090920482166004820152602481018390529192507f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b15801561151a57600080fd5b505af115801561152e573d6000803e3d6000fd5b5050505060405161154a906431b434b2b360d91b815260050190565b6040519081900381206002549091839161010090046001600160a01b0316907f49649141d16971a88c3cfdd73fec34babb1cf163cf8b804c8f537a023c6ce50690600090a45050565b803411156109c957336108fc6115a98334611ba1565b6040518115909202916000818181858888f193505050501580156115d1573d6000803e3d6000fd5b5050565b6005830180549060006115e783611dd6565b90915550506002820180549060006115fe83611dd6565b909155505033600090815260066020526040812080549161161e83611dd6565b90915550503360009081526007602090815260408220805460018101825590835290822001829055600283015461165790603290611b7f565b9050826004015481111561083c576004830181905550505050565b60038101546116849062015180611cd0565b421161168d5750565b60006064826004015460646116a29190611cd0565b6116b5670de0b6b3a76400006002611b68565b6116bf9190611b68565b6116c99190611b7f565b9050600060646116d761181f565b6116e19084611b68565b6116eb9190611b7f565b6040516340c10f1960e01b8152336004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561175657600080fd5b505af115801561176a573d6000803e3d6000fd5b5050426003860155505060405169195b99d859d95b595b9d60b21b8152600a0160405190819003812090829033907f49649141d16971a88c3cfdd73fec34babb1cf163cf8b804c8f537a023c6ce50690600090a4505050565b6117cd8282610a9a565b6115d15760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610671565b60025460ff166109a757604051638dfc202b60e01b815260040160405180910390fd5b600f5460009060ff1680156118365750600c544210155b80156118445750600d544211155b61184e5750606490565b50600e5490565b60006020828403121561186757600080fd5b81356001600160e01b03198116811461187f57600080fd5b9392505050565b80356001600160a01b038116811461189d57600080fd5b919050565b6000602082840312156118b457600080fd5b61187f82611886565b6000602082840312156118cf57600080fd5b5035919050565b6000815180845260005b818110156118fc576020818501810151868301820152016118e0565b506000602082860101526020601f19601f83011685010191505092915050565b6101008152600061193161010083018b6118d6565b8281036020840152611943818b6118d6565b604084019990995250506001600160a01b03958616606082015293909416608084015290151560a083015260c082015260e0015292915050565b6000806040838503121561199057600080fd5b823591506119a060208401611886565b90509250929050565b60a0815260006119bc60a08301886118d6565b905085602083015284604083015283606083015282151560808301529695505050505050565b60008083601f8401126119f457600080fd5b50813567ffffffffffffffff811115611a0c57600080fd5b602083019150836020828501011115611a2457600080fd5b9250929050565b600080600080600060608688031215611a4357600080fd5b853567ffffffffffffffff811115611a5a57600080fd5b611a66888289016119e2565b909650945050602086013567ffffffffffffffff811115611a8657600080fd5b611a92888289016119e2565b9094509250611aa5905060408701611886565b90509295509295909350565b60008060008060608587031215611ac757600080fd5b843567ffffffffffffffff811115611ade57600080fd5b611aea878288016119e2565b90989097506020870135966040013595509350505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611b2c57607f821691505b602082108103611b4c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761061f5761061f611b52565b600082611b9c57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561061f5761061f611b52565b634e487b7160e01b600052604160045260246000fd5b601f82111561087557806000526020600020601f840160051c81016020851015611bf15750805b601f840160051c820191505b81811015610dae5760008155600101611bfd565b815167ffffffffffffffff811115611c2b57611c2b611bb4565b611c3f81611c398454611b18565b84611bca565b6020601f821160018114611c735760008315611c5b5750848201515b600019600385901b1c1916600184901b178455610dae565b600084815260208120601f198516915b82811015611ca35787850151825560209485019460019092019101611c83565b5084821015611cc15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561061f5761061f611b52565b6001815b6001841115611d1e57808504811115611d0257611d02611b52565b6001841615611d1057908102905b60019390931c928002611ce7565b935093915050565b600082611d355750600161061f565b81611d425750600061061f565b8160018114611d585760028114611d6257611d7e565b600191505061061f565b60ff841115611d7357611d73611b52565b50506001821b61061f565b5060208310610133831016604e8410600b8410161715611da1575081810a61061f565b611dae6000198484611ce3565b8060001904821115611dc257611dc2611b52565b029392505050565b600061187f8383611d26565b600060018201611de857611de8611b52565b506001019056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212208607d6e6bac8c54323928d944e0c9c5d025f4fd3e65344a3b1c7a696dde81a3964736f6c634300081a003360e0604052620151806080526203f48060a0526202a30060c05234801561002557600080fd5b506040516108db3803806108db83398101604081905261004491610142565b60038151101561008c5760405162461bcd60e51b815260206004820152600f60248201526e4d696e203320676f7665726e6f727360881b604482015260640160405180910390fd5b60005b81518110156100e95760018060008484815181106100af576100af610211565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161008f565b50805160028181556003916100fd91610227565b6101079190610252565b60035550610274565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b038116811461013d57600080fd5b919050565b60006020828403121561015457600080fd5b81516001600160401b0381111561016a57600080fd5b8201601f8101841361017b57600080fd5b80516001600160401b0381111561019457610194610110565b604051600582901b90603f8201601f191681016001600160401b03811182821017156101c2576101c2610110565b6040529182526020818401810192908101878411156101e057600080fd5b6020850194505b83851015610206576101f885610126565b8152602094850194016101e7565b509695505050505050565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761024c57634e487b7160e01b600052601160045260246000fd5b92915050565b60008261026f57634e487b7160e01b600052601260045260246000fd5b500490565b60805160a05160c05161062a6102b16000396000610139015260008181610183015261030e0152600081816101aa01526102dc015261062a6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063d6159fe511610066578063d6159fe5146101a5578063dc8452cd146101cc578063e3eece26146101d5578063e8c9fd4514610208578063f4ae11231461021157600080fd5b806332ed5b12146100985780635ba1c1a91461013457806399882cdb14610169578063b1610d7e1461017e575b600080fd5b6100f06100a636600461052e565b600060208190529081526040902080546001820154600283015460038401546004850154600586015460069096015494956001600160a01b03909416949293919290919060ff1687565b604080519788526001600160a01b039096166020880152948601939093526060850191909152608084015260a0830152151560c082015260e0015b60405180910390f35b61015b7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161012b565b61017c61017736600461052e565b610224565b005b61015b7f000000000000000000000000000000000000000000000000000000000000000081565b61015b7f000000000000000000000000000000000000000000000000000000000000000081565b61015b60035481565b6101f86101e3366004610547565b60016020526000908152604090205460ff1681565b604051901515815260200161012b565b61015b60025481565b61017c61021f366004610577565b610369565b3360009081526001602052604090205460ff166102775760405162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93737b960a11b60448201526064015b60405180910390fd5b60008181526020819052604090206004810154156102c05760405162461bcd60e51b815260206004820152600660248201526545786973747360d01b604482015260640161026e565b8181556001810180546001600160a01b031916331790556103017f0000000000000000000000000000000000000000000000000000000000000000426105c2565b60048201819055610333907f0000000000000000000000000000000000000000000000000000000000000000906105c2565b6005820155604051339083907fe90bb18a6fc9203e3678a7f41e132910465e0fce1421609662d02c481fbfbcf890600090a35050565b3360009081526001602052604090205460ff166103b75760405162461bcd60e51b815260206004820152600c60248201526b2737ba1033b7bb32b93737b960a11b604482015260640161026e565b600082815260208190526040902060048101544210156104075760405162461bcd60e51b815260206004820152600b60248201526a139bdd081cdd185c9d195960aa1b604482015260640161026e565b80600501544211156104435760405162461bcd60e51b8152602060048201526005602482015264115b99195960da1b604482015260640161026e565b33600090815260078201602052604090205460ff16156104955760405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b604482015260640161026e565b81156104b7576002810180549060006104ad836105db565b91905055506104cf565b6003810180549060006104c9836105db565b91905055505b33600081815260078301602052604090819020805460ff191660011790555184907f8b40665146691327ee30f5bf56e9b2d6f445d2830d3b09b56385cd30f630ecfb9061052190861515815260200190565b60405180910390a3505050565b60006020828403121561054057600080fd5b5035919050565b60006020828403121561055957600080fd5b81356001600160a01b038116811461057057600080fd5b9392505050565b6000806040838503121561058a57600080fd5b82359150602083013580151581146105a157600080fd5b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b808201808211156105d5576105d56105ac565b92915050565b6000600182016105ed576105ed6105ac565b506001019056fea26469706673582212208092164d3720410a3c0ee40206cd8b2c89c7802455906c594ea931b0b0aabacc64736f6c634300081a0033608060405234801561001057600080fd5b506040518060400160405280600781526020016620b22a37b5b2b760c91b81525060405180604001604052806002815260200161412b60f01b815250816003908161005b919061039a565b506004610068828261039a565b505050600061007b6100dd60201b60201c565b61008690600a610555565b610094906302faf08061056b565b90506100a16000336100e2565b506100cc7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336100e2565b506100d73382610192565b50610595565b601290565b60008281526005602090815260408083206001600160a01b038516845290915281205460ff166101885760008381526005602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101403390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161018c565b5060005b92915050565b6001600160a01b0382166101c15760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b6101cd600083836101d1565b5050565b6001600160a01b0383166101fc5780600260008282546101f19190610582565b9091555061026e9050565b6001600160a01b0383166000908152602081905260409020548181101561024f5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016101b8565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661028a576002805482900390556102a9565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516102ee91815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061032557607f821691505b60208210810361034557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561039557806000526020600020601f840160051c810160208510156103725750805b601f840160051c820191505b81811015610392576000815560010161037e565b50505b505050565b81516001600160401b038111156103b3576103b36102fb565b6103c7816103c18454610311565b8461034b565b6020601f8211600181146103fb57600083156103e35750848201515b600019600385901b1c1916600184901b178455610392565b600084815260208120601f198516915b8281101561042b578785015182556020948501946001909201910161040b565b50848210156104495786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156104a95780850481111561048d5761048d610458565b600184161561049b57908102905b60019390931c928002610472565b935093915050565b6000826104c05750600161018c565b816104cd5750600061018c565b81600181146104e357600281146104ed57610509565b600191505061018c565b60ff8411156104fe576104fe610458565b50506001821b61018c565b5060208310610133831016604e8410600b841016171561052c575081810a61018c565b610539600019848461046e565b806000190482111561054d5761054d610458565b029392505050565b600061056460ff8416836104b1565b9392505050565b808202811582820484141761018c5761018c610458565b8082018082111561018c5761018c610458565b610b97806105a46000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806340c10f19116100a2578063a217fddf11610071578063a217fddf14610241578063a9059cbb14610249578063d53913931461025c578063d547741f14610283578063dd62ed3e1461029657600080fd5b806340c10f19146101ea57806370a08231146101fd57806391d148541461022657806395d89b411461023957600080fd5b806323b872dd116100e957806323b872dd1461017d578063248a9ca3146101905780632f2ff15d146101b3578063313ce567146101c857806336568abe146101d757600080fd5b806301ffc9a71461011b57806306fdde0314610143578063095ea7b31461015857806318160ddd1461016b575b600080fd5b61012e61012936600461097a565b6102cf565b60405190151581526020015b60405180910390f35b61014b610306565b60405161013a91906109ab565b61012e610166366004610a15565b610398565b6002545b60405190815260200161013a565b61012e61018b366004610a3f565b6103b0565b61016f61019e366004610a7c565b60009081526005602052604090206001015490565b6101c66101c1366004610a95565b6103d4565b005b6040516012815260200161013a565b6101c66101e5366004610a95565b6103ff565b6101c66101f8366004610a15565b610437565b61016f61020b366004610ac1565b6001600160a01b031660009081526020819052604090205490565b61012e610234366004610a95565b6104ad565b61014b6104d8565b61016f600081565b61012e610257366004610a15565b6104e7565b61016f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6101c6610291366004610a95565b6104f5565b61016f6102a4366004610adc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006001600160e01b03198216637965db0b60e01b148061030057506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461031590610b06565b80601f016020809104026020016040519081016040528092919081815260200182805461034190610b06565b801561038e5780601f106103635761010080835404028352916020019161038e565b820191906000526020600020905b81548152906001019060200180831161037157829003601f168201915b5050505050905090565b6000336103a681858561051a565b5060019392505050565b6000336103be858285610527565b6103c985858561059f565b506001949350505050565b6000828152600560205260409020600101546103ef816105fe565b6103f9838361060b565b50505050565b6001600160a01b03811633146104285760405163334bd91960e11b815260040160405180910390fd5b610432828261069f565b505050565b6104617f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336104ad565b61049f5760405162461bcd60e51b815260206004820152600a6024820152692737ba1036b4b73a32b960b11b60448201526064015b60405180910390fd5b6104a9828261070c565b5050565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606004805461031590610b06565b6000336103a681858561059f565b600082815260056020526040902060010154610510816105fe565b6103f9838361069f565b6104328383836001610742565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146103f9578181101561059057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610496565b6103f984848484036000610742565b6001600160a01b0383166105c957604051634b637e8f60e11b815260006004820152602401610496565b6001600160a01b0382166105f35760405163ec442f0560e01b815260006004820152602401610496565b610432838383610817565b6106088133610941565b50565b600061061783836104ad565b6106975760008381526005602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561064f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610300565b506000610300565b60006106ab83836104ad565b156106975760008381526005602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610300565b6001600160a01b0382166107365760405163ec442f0560e01b815260006004820152602401610496565b6104a960008383610817565b6001600160a01b03841661076c5760405163e602df0560e01b815260006004820152602401610496565b6001600160a01b03831661079657604051634a1406b160e11b815260006004820152602401610496565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156103f957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161080991815260200190565b60405180910390a350505050565b6001600160a01b0383166108425780600260008282546108379190610b40565b909155506108b49050565b6001600160a01b038316600090815260208190526040902054818110156108955760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610496565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166108d0576002805482900390556108ef565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161093491815260200190565b60405180910390a3505050565b61094b82826104ad565b6104a95760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610496565b60006020828403121561098c57600080fd5b81356001600160e01b0319811681146109a457600080fd5b9392505050565b602081526000825180602084015260005b818110156109d957602081860181015160408684010152016109bc565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610a1057600080fd5b919050565b60008060408385031215610a2857600080fd5b610a31836109f9565b946020939093013593505050565b600080600060608486031215610a5457600080fd5b610a5d846109f9565b9250610a6b602085016109f9565b929592945050506040919091013590565b600060208284031215610a8e57600080fd5b5035919050565b60008060408385031215610aa857600080fd5b82359150610ab8602084016109f9565b90509250929050565b600060208284031215610ad357600080fd5b6109a4826109f9565b60008060408385031215610aef57600080fd5b610af8836109f9565b9150610ab8602084016109f9565b600181811c90821680610b1a57607f821691505b602082108103610b3a57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561030057634e487b7160e01b600052601160045260246000fdfea2646970667358221220132a10ff2dd4202997bb9d35494422de7747364f9dadb77b18e2ae3171a37ad464736f6c634300081a003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000bb7430d9e1a9b121719d99e544380976e5e976d6000000000000000000000000d1a8dd23e356b9fae27df5def9ea025a602ec81e000000000000000000000000489e0cbf61337d493d4e3542739223832aecffd6