More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
FlowerNFTStaking
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-02-02 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/[email protected]/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/[email protected]/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/[email protected]/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // File: @openzeppelin/[email protected]/utils/Context.sol // OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/[email protected]/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: @openzeppelin/[email protected]/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: flowergrowop.sol pragma solidity ^0.8.0; interface IFlowerNFT { function levels(uint256 tokenId) external view returns (uint256); } contract FlowerNFTStaking is Ownable, ReentrancyGuard, Pausable, IERC721Receiver { IERC721 public flowerNFT; IERC20 public flowerToken; IERC721 public stonerToken; uint256 public rewardRate = 1 ether; uint256 public stonerBonusMultiplier = 10; uint256 public flowerNFTBonusMultiplier = 5; uint256 public tapBonusAmount = 0.1 ether; uint256 public tapCooldown = 1 hours; struct Stake { uint256 tokenId; uint256 stakedAt; uint256 lastTapped; } mapping(address => Stake[]) public stakes; mapping(uint256 => address) public stakedTokenOwners; mapping(address => uint256[]) public stonerStakes; event Staked(address indexed user, uint256[] flowerTokenIds, uint256[] stonerTokenIds); event Unstaked(address indexed user, uint256[] flowerTokenIds, uint256[] stonerTokenIds); event RewardClaimed(address indexed user, uint256 amount); event TapBonusClaimed(address indexed user, uint256 amount); event TokensWithdrawn(address indexed owner, uint256 amount); event RewardRateUpdated(uint256 newRate); event StonerBonusUpdated(uint256 newMultiplier); event FlowerNFTBonusUpdated(uint256 newMultiplier); event TapBonusUpdated(uint256 newAmount); event TapCooldownUpdated(uint256 newCooldown); constructor(address _flowerNFT, address _flowerToken, address _stonerToken) { flowerNFT = IERC721(_flowerNFT); flowerToken = IERC20(_flowerToken); stonerToken = IERC721(_stonerToken); } /** ADMIN FUNCTIONS TO SET REWARD PARAMETERS **/ function setRewardRate(uint256 newRate) external onlyOwner { require(newRate > 0, "Reward rate must be greater than zero"); rewardRate = newRate; emit RewardRateUpdated(newRate); } function setStonerBonusMultiplier(uint256 newMultiplier) external onlyOwner { require(newMultiplier >= 1, "Multiplier must be at least 1"); stonerBonusMultiplier = newMultiplier; emit StonerBonusUpdated(newMultiplier); } function setFlowerNFTBonusMultiplier(uint256 newMultiplier) external onlyOwner { require(newMultiplier >= 1, "Multiplier must be at least 1"); flowerNFTBonusMultiplier = newMultiplier; emit FlowerNFTBonusUpdated(newMultiplier); } function setTapBonusAmount(uint256 newAmount) external onlyOwner { require(newAmount > 0, "Bonus amount must be greater than zero"); tapBonusAmount = newAmount; emit TapBonusUpdated(newAmount); } function setTapCooldown(uint256 newCooldown) external onlyOwner { require(newCooldown > 0, "Cooldown must be greater than zero"); tapCooldown = newCooldown; emit TapCooldownUpdated(newCooldown); } /** ADMIN FUNCTION TO WITHDRAW $FLOWER TOKENS **/ function withdrawTokens(uint256 amount) external onlyOwner { require(amount > 0, "Amount must be greater than zero"); require(flowerToken.balanceOf(address(this)) >= amount, "Not enough tokens in contract"); flowerToken.transfer(msg.sender, amount); emit TokensWithdrawn(msg.sender, amount); } /** STAKING MULTIPLE NFTs **/ function stakeMultiple(uint256[] memory flowerTokenIds, uint256[] memory stonerTokenIds) external nonReentrant whenNotPaused { require(flowerTokenIds.length > 0 || stonerTokenIds.length > 0, "No NFTs provided"); for (uint256 i = 0; i < flowerTokenIds.length; i++) { uint256 tokenId = flowerTokenIds[i]; require(flowerNFT.ownerOf(tokenId) == msg.sender, "You do not own this FlowerNFT"); require(stakedTokenOwners[tokenId] == address(0), "This NFT is already staked"); stakes[msg.sender].push(Stake({tokenId: tokenId, stakedAt: block.timestamp, lastTapped: 0})); stakedTokenOwners[tokenId] = msg.sender; flowerNFT.safeTransferFrom(msg.sender, address(this), tokenId); } for (uint256 i = 0; i < stonerTokenIds.length; i++) { uint256 stonerId = stonerTokenIds[i]; require(stonerToken.ownerOf(stonerId) == msg.sender, "You do not own this StonerNFT"); stonerToken.safeTransferFrom(msg.sender, address(this), stonerId); stonerStakes[msg.sender].push(stonerId); } emit Staked(msg.sender, flowerTokenIds, stonerTokenIds); } /** UNSTAKING MULTIPLE NFTs **/ function unstakeMultiple(uint256[] memory flowerTokenIds, uint256[] memory stonerTokenIds) external nonReentrant whenNotPaused { require(flowerTokenIds.length > 0 || stonerTokenIds.length > 0, "No NFTs provided"); uint256 totalReward = 0; for (uint256 i = 0; i < flowerTokenIds.length; i++) { uint256 tokenId = flowerTokenIds[i]; require(stakedTokenOwners[tokenId] == msg.sender, "You do not own this staked NFT"); totalReward += calculateReward(msg.sender, tokenId); _removeStake(msg.sender, tokenId); flowerNFT.safeTransferFrom(address(this), msg.sender, tokenId); } require(stonerStakes[msg.sender].length >= stonerTokenIds.length, "Not enough staked StonerNFTs"); for (uint256 i = 0; i < stonerTokenIds.length; i++) { uint256 stonerId = stonerTokenIds[i]; require(_removeStonerStake(msg.sender, stonerId), "StonerNFT not staked by user"); stonerToken.safeTransferFrom(address(this), msg.sender, stonerId); } if (totalReward > 0) { flowerToken.transfer(msg.sender, totalReward); emit RewardClaimed(msg.sender, totalReward); } emit Unstaked(msg.sender, flowerTokenIds, stonerTokenIds); } /** REWARD CALCULATION **/ function calculateReward(address user, uint256 tokenId) public view returns (uint256) { for (uint256 i = 0; i < stakes[user].length; i++) { if (stakes[user][i].tokenId == tokenId) { uint256 timeStaked = block.timestamp - stakes[user][i].stakedAt; uint256 baseReward = (timeStaked * getFlowerNFTLevel(tokenId) * rewardRate) / 1 days; return baseReward; } } return 0; } function getFlowerNFTLevel(uint256 tokenId) public view returns (uint256) { require(address(flowerNFT) != address(0), "FlowerNFT contract not set"); return IFlowerNFT(address(flowerNFT)).levels(tokenId); } function _removeStake(address user, uint256 tokenId) internal { for (uint256 i = 0; i < stakes[user].length; i++) { if (stakes[user][i].tokenId == tokenId) { stakes[user][i] = stakes[user][stakes[user].length - 1]; stakes[user].pop(); delete stakedTokenOwners[tokenId]; break; } } } function _removeStonerStake(address user, uint256 tokenId) internal returns (bool) { uint256[] storage stakedNFTs = stonerStakes[user]; for (uint256 i = 0; i < stakedNFTs.length; i++) { if (stakedNFTs[i] == tokenId) { stakedNFTs[i] = stakedNFTs[stakedNFTs.length - 1]; stakedNFTs.pop(); return true; } } return false; } function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) { return this.onERC721Received.selector; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_flowerNFT","type":"address"},{"internalType":"address","name":"_flowerToken","type":"address"},{"internalType":"address","name":"_stonerToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"FlowerNFTBonusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"RewardRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"flowerTokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"stonerTokenIds","type":"uint256[]"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"StonerBonusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TapBonusClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"TapBonusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCooldown","type":"uint256"}],"name":"TapCooldownUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"flowerTokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"stonerTokenIds","type":"uint256[]"}],"name":"Unstaked","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"calculateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flowerNFT","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flowerNFTBonusMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flowerToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getFlowerNFTLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"setFlowerNFTBonusMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"setRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"setStonerBonusMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setTapBonusAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCooldown","type":"uint256"}],"name":"setTapCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"flowerTokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"stonerTokenIds","type":"uint256[]"}],"name":"stakeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakedTokenOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"stakedAt","type":"uint256"},{"internalType":"uint256","name":"lastTapped","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stonerBonusMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stonerStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stonerToken","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tapBonusAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tapCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"flowerTokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"stonerTokenIds","type":"uint256[]"}],"name":"unstakeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052670de0b6b3a7640000600555600a600655600560075567016345785d8a0000600855610e106009553480156200003957600080fd5b50604051620035663803806200356683398181016040528101906200005f9190620002a3565b6200007f620000736200016d60201b60201c565b6200017560201b60201c565b600180819055506000600260006101000a81548160ff02191690831515021790555082600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620002ff565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200026b826200023e565b9050919050565b6200027d816200025e565b81146200028957600080fd5b50565b6000815190506200029d8162000272565b92915050565b600080600060608486031215620002bf57620002be62000239565b5b6000620002cf868287016200028c565b9350506020620002e2868287016200028c565b9250506040620002f5868287016200028c565b9150509250925092565b613257806200030f6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063602095ce116100de5780638da5cb5b116100975780639f60421f116100715780639f60421f14610463578063aee8c3a21461047f578063e7d554ac146104af578063f2fde38b146104cb5761018e565b80638da5cb5b1461040b57806396e840a9146104295780639e447fc6146104475761018e565b8063602095ce14610359578063715018a614610377578063721a1f45146103815780637b0a47ee1461039f578063851fbb54146103bd5780638b3d81b3146103db5761018e565b80633b3f944c1161014b57806351f3db481161012557806351f3db48146102d1578063584b62a1146102ed5780635c975abb1461031f5780635cae8f591461033d5761018e565b80633b3f944c146102655780633cfd15681461028357806341cd5f73146102b35761018e565b8063150b7a02146101935780631852e8d9146101c35780631cc6ec93146101f35780632c583bf31461020f578063315a095d1461022b5780633b18dc7114610247575b600080fd5b6101ad60048036038101906101a891906121a5565b6104e7565b6040516101ba9190612263565b60405180910390f35b6101dd60048036038101906101d8919061227e565b6104fb565b6040516101ea91906122cd565b60405180910390f35b61020d600480360381019061020891906122e8565b610685565b005b610229600480360381019061022491906123dd565b610711565b005b610245600480360381019061024091906122e8565b610d7f565b005b61024f610f9a565b60405161025c91906122cd565b60405180910390f35b61026d610fa0565b60405161027a91906122cd565b60405180910390f35b61029d6004803603810190610298919061227e565b610fa6565b6040516102aa91906122cd565b60405180910390f35b6102bb610fd7565b6040516102c891906122cd565b60405180910390f35b6102eb60048036038101906102e691906122e8565b610fdd565b005b6103076004803603810190610302919061227e565b611069565b60405161031693929190612455565b60405180910390f35b6103276110b0565b60405161033491906124a7565b60405180910390f35b610357600480360381019061035291906122e8565b6110c7565b005b610361611154565b60405161036e9190612521565b60405180910390f35b61037f61117a565b005b61038961118e565b604051610396919061255d565b60405180910390f35b6103a76111b4565b6040516103b491906122cd565b60405180910390f35b6103c56111ba565b6040516103d2919061255d565b60405180910390f35b6103f560048036038101906103f091906122e8565b6111e0565b6040516104029190612587565b60405180910390f35b610413611213565b6040516104209190612587565b60405180910390f35b61043161123c565b60405161043e91906122cd565b60405180910390f35b610461600480360381019061045c91906122e8565b611242565b005b61047d600480360381019061047891906123dd565b6112ce565b005b610499600480360381019061049491906122e8565b6117b8565b6040516104a691906122cd565b60405180910390f35b6104c960048036038101906104c491906122e8565b6118ed565b005b6104e560048036038101906104e091906125a2565b61197a565b005b600063150b7a0260e01b9050949350505050565b600080600090505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156106795782600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061059f5761059e6125cf565b5b90600052602060002090600302016000015403610666576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610609576106086125cf565b5b90600052602060002090600302016001015442610626919061262d565b905060006201518060055461063a876117b8565b846106459190612661565b61064f9190612661565b61065991906126d2565b905080935050505061067f565b808061067190612703565b915050610503565b50600090505b92915050565b61068d6119fd565b600081116106d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c7906127ce565b60405180910390fd5b806009819055507fa292edce75c880178d165ee8473be051a702186c35b27ea86dab6c73ce88ff578160405161070691906122cd565b60405180910390a150565b610719611a7b565b610721611aca565b600082511180610732575060008151115b610771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107689061283a565b60405180910390fd5b60005b8251811015610ae2576000838281518110610792576107916125cf565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161080e91906122cd565b602060405180830381865afa15801561082b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084f919061286f565b73ffffffffffffffffffffffffffffffffffffffff16146108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c906128e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093e90612954565b60405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806060016040528083815260200142815260200160008152509080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001556020820151816001015560408201518160020155505033600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b8152600401610a9c93929190612974565b600060405180830381600087803b158015610ab657600080fd5b505af1158015610aca573d6000803e3d6000fd5b50505050508080610ada90612703565b915050610774565b5060005b8151811015610d22576000828281518110610b0457610b036125cf565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610b8091906122cd565b602060405180830381865afa158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc1919061286f565b73ffffffffffffffffffffffffffffffffffffffff1614610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e906129f7565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b8152600401610c7693929190612974565b600060405180830381600087803b158015610c9057600080fd5b505af1158015610ca4573d6000803e3d6000fd5b50505050600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055508080610d1a90612703565b915050610ae6565b503373ffffffffffffffffffffffffffffffffffffffff167f859a4049709b7ed7c28d73c9122229b70aa55880d8744d1931e98e093a1b5b918383604051610d6b929190612ad5565b60405180910390a2610d7b611b14565b5050565b610d876119fd565b60008111610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc190612b58565b60405180910390fd5b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e269190612587565b602060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e679190612b8d565b1015610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90612c06565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610f05929190612c26565b6020604051808303816000875af1158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f489190612c7b565b503373ffffffffffffffffffffffffffffffffffffffff167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051610f8f91906122cd565b60405180910390a250565b60085481565b60075481565b600c6020528160005260406000208181548110610fc257600080fd5b90600052602060002001600091509150505481565b60095481565b610fe56119fd565b60008111611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f90612d1a565b60405180910390fd5b806008819055507f984f97438a61d2a2abf6ae7cccfe9dc9c37c8e3111255c24be5ef1129c6f2c768160405161105e91906122cd565b60405180910390a150565b600a602052816000526040600020818154811061108557600080fd5b9060005260206000209060030201600091509150508060000154908060010154908060020154905083565b6000600260009054906101000a900460ff16905090565b6110cf6119fd565b6001811015611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90612d86565b60405180910390fd5b806006819055507ff4b2d54c414c720f8a9e79192fc7b4918e9b12a7ce94b34ab404a40bccc6821d8160405161114991906122cd565b60405180910390a150565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111826119fd565b61118c6000611b1d565b565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065481565b61124a6119fd565b6000811161128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128490612e18565b60405180910390fd5b806005819055507f41d466ebd06fb97e7786086ac8b69b7eb7da798592036251291d34e9791cde01816040516112c391906122cd565b60405180910390a150565b6112d6611a7b565b6112de611aca565b6000825111806112ef575060008151115b61132e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113259061283a565b60405180910390fd5b6000805b83518110156114c15760008482815181106113505761134f6125cf565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290612e84565b60405180910390fd5b61140533826104fb565b836114109190612ea4565b925061141c3382611be1565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b815260040161147b93929190612974565b600060405180830381600087803b15801561149557600080fd5b505af11580156114a9573d6000803e3d6000fd5b505050505080806114b990612703565b915050611332565b508151600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501015611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90612f24565b60405180910390fd5b60005b8251811015611661576000838281518110611569576115686125cf565b5b6020026020010151905061157d3382611e97565b6115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390612f90565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b815260040161161b93929190612974565b600060405180830381600087803b15801561163557600080fd5b505af1158015611649573d6000803e3d6000fd5b5050505050808061165990612703565b91505061154b565b50600081111561175b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116c8929190612c26565b6020604051808303816000875af11580156116e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170b9190612c7b565b503373ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72418260405161175291906122cd565b60405180910390a25b3373ffffffffffffffffffffffffffffffffffffffff167fef3bc8b2408263209f01abd2cf8120586077da5e4cf45d8a7dd83d2a0545f10384846040516117a3929190612ad5565b60405180910390a2506117b4611b14565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361184a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184190612ffc565b60405180910390fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2596a67836040518263ffffffff1660e01b81526004016118a591906122cd565b602060405180830381865afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e69190612b8d565b9050919050565b6118f56119fd565b6001811015611939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193090612d86565b60405180910390fd5b806007819055507ff3570cd97015150a0e5502c9cf62bb4b8fd0d2891b81254dd7da2d319adf88418160405161196f91906122cd565b60405180910390a150565b6119826119fd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e89061308e565b60405180910390fd5b6119fa81611b1d565b50565b611a05611faf565b73ffffffffffffffffffffffffffffffffffffffff16611a23611213565b73ffffffffffffffffffffffffffffffffffffffff1614611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a70906130fa565b60405180910390fd5b565b600260015403611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab790613166565b60405180910390fd5b6002600181905550565b611ad26110b0565b15611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b09906131d2565b60405180910390fd5b565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015611e925781600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611c8057611c7f6125cf565b5b90600052602060002090600302016000015403611e7f57600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611d25919061262d565b81548110611d3657611d356125cf565b5b9060005260206000209060030201600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611d9557611d946125cf565b5b9060005260206000209060030201600082015481600001556001820154816001015560028201548160020155905050600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480611e1357611e126131f2565b5b60019003818190600052602060002090600302016000808201600090556001820160009055600282016000905550509055600b600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055611e92565b8080611e8a90612703565b915050611be4565b505050565b600080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b8180549050811015611fa25783828281548110611efe57611efd6125cf565b5b906000526020600020015403611f8f578160018380549050611f20919061262d565b81548110611f3157611f306125cf565b5b9060005260206000200154828281548110611f4f57611f4e6125cf565b5b906000526020600020018190555081805480611f6e57611f6d6131f2565b5b60019003818190600052602060002001600090559055600192505050611fa9565b8080611f9a90612703565b915050611ede565b5060009150505b92915050565b600033905090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ff682611fcb565b9050919050565b61200681611feb565b811461201157600080fd5b50565b60008135905061202381611ffd565b92915050565b6000819050919050565b61203c81612029565b811461204757600080fd5b50565b60008135905061205981612033565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6120b282612069565b810181811067ffffffffffffffff821117156120d1576120d061207a565b5b80604052505050565b60006120e4611fb7565b90506120f082826120a9565b919050565b600067ffffffffffffffff8211156121105761210f61207a565b5b61211982612069565b9050602081019050919050565b82818337600083830152505050565b6000612148612143846120f5565b6120da565b90508281526020810184848401111561216457612163612064565b5b61216f848285612126565b509392505050565b600082601f83011261218c5761218b61205f565b5b813561219c848260208601612135565b91505092915050565b600080600080608085870312156121bf576121be611fc1565b5b60006121cd87828801612014565b94505060206121de87828801612014565b93505060406121ef8782880161204a565b925050606085013567ffffffffffffffff8111156122105761220f611fc6565b5b61221c87828801612177565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61225d81612228565b82525050565b60006020820190506122786000830184612254565b92915050565b6000806040838503121561229557612294611fc1565b5b60006122a385828601612014565b92505060206122b48582860161204a565b9150509250929050565b6122c781612029565b82525050565b60006020820190506122e260008301846122be565b92915050565b6000602082840312156122fe576122fd611fc1565b5b600061230c8482850161204a565b91505092915050565b600067ffffffffffffffff8211156123305761232f61207a565b5b602082029050602081019050919050565b600080fd5b600061235961235484612315565b6120da565b9050808382526020820190506020840283018581111561237c5761237b612341565b5b835b818110156123a55780612391888261204a565b84526020840193505060208101905061237e565b5050509392505050565b600082601f8301126123c4576123c361205f565b5b81356123d4848260208601612346565b91505092915050565b600080604083850312156123f4576123f3611fc1565b5b600083013567ffffffffffffffff81111561241257612411611fc6565b5b61241e858286016123af565b925050602083013567ffffffffffffffff81111561243f5761243e611fc6565b5b61244b858286016123af565b9150509250929050565b600060608201905061246a60008301866122be565b61247760208301856122be565b61248460408301846122be565b949350505050565b60008115159050919050565b6124a18161248c565b82525050565b60006020820190506124bc6000830184612498565b92915050565b6000819050919050565b60006124e76124e26124dd84611fcb565b6124c2565b611fcb565b9050919050565b60006124f9826124cc565b9050919050565b600061250b826124ee565b9050919050565b61251b81612500565b82525050565b60006020820190506125366000830184612512565b92915050565b6000612547826124ee565b9050919050565b6125578161253c565b82525050565b6000602082019050612572600083018461254e565b92915050565b61258181611feb565b82525050565b600060208201905061259c6000830184612578565b92915050565b6000602082840312156125b8576125b7611fc1565b5b60006125c684828501612014565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061263882612029565b915061264383612029565b925082820390508181111561265b5761265a6125fe565b5b92915050565b600061266c82612029565b915061267783612029565b925082820261268581612029565b9150828204841483151761269c5761269b6125fe565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006126dd82612029565b91506126e883612029565b9250826126f8576126f76126a3565b5b828204905092915050565b600061270e82612029565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127405761273f6125fe565b5b600182019050919050565b600082825260208201905092915050565b7f436f6f6c646f776e206d7573742062652067726561746572207468616e207a6560008201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b60006127b860228361274b565b91506127c38261275c565b604082019050919050565b600060208201905081810360008301526127e7816127ab565b9050919050565b7f4e6f204e4654732070726f766964656400000000000000000000000000000000600082015250565b600061282460108361274b565b915061282f826127ee565b602082019050919050565b6000602082019050818103600083015261285381612817565b9050919050565b60008151905061286981611ffd565b92915050565b60006020828403121561288557612884611fc1565b5b60006128938482850161285a565b91505092915050565b7f596f7520646f206e6f74206f776e207468697320466c6f7765724e4654000000600082015250565b60006128d2601d8361274b565b91506128dd8261289c565b602082019050919050565b60006020820190508181036000830152612901816128c5565b9050919050565b7f54686973204e465420697320616c7265616479207374616b6564000000000000600082015250565b600061293e601a8361274b565b915061294982612908565b602082019050919050565b6000602082019050818103600083015261296d81612931565b9050919050565b60006060820190506129896000830186612578565b6129966020830185612578565b6129a360408301846122be565b949350505050565b7f596f7520646f206e6f74206f776e20746869732053746f6e65724e4654000000600082015250565b60006129e1601d8361274b565b91506129ec826129ab565b602082019050919050565b60006020820190508181036000830152612a10816129d4565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a4c81612029565b82525050565b6000612a5e8383612a43565b60208301905092915050565b6000602082019050919050565b6000612a8282612a17565b612a8c8185612a22565b9350612a9783612a33565b8060005b83811015612ac8578151612aaf8882612a52565b9750612aba83612a6a565b925050600181019050612a9b565b5085935050505092915050565b60006040820190508181036000830152612aef8185612a77565b90508181036020830152612b038184612a77565b90509392505050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b6000612b4260208361274b565b9150612b4d82612b0c565b602082019050919050565b60006020820190508181036000830152612b7181612b35565b9050919050565b600081519050612b8781612033565b92915050565b600060208284031215612ba357612ba2611fc1565b5b6000612bb184828501612b78565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e20636f6e7472616374000000600082015250565b6000612bf0601d8361274b565b9150612bfb82612bba565b602082019050919050565b60006020820190508181036000830152612c1f81612be3565b9050919050565b6000604082019050612c3b6000830185612578565b612c4860208301846122be565b9392505050565b612c588161248c565b8114612c6357600080fd5b50565b600081519050612c7581612c4f565b92915050565b600060208284031215612c9157612c90611fc1565b5b6000612c9f84828501612c66565b91505092915050565b7f426f6e757320616d6f756e74206d75737420626520677265617465722074686160008201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b6000612d0460268361274b565b9150612d0f82612ca8565b604082019050919050565b60006020820190508181036000830152612d3381612cf7565b9050919050565b7f4d756c7469706c696572206d757374206265206174206c656173742031000000600082015250565b6000612d70601d8361274b565b9150612d7b82612d3a565b602082019050919050565b60006020820190508181036000830152612d9f81612d63565b9050919050565b7f5265776172642072617465206d7573742062652067726561746572207468616e60008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612e0260258361274b565b9150612e0d82612da6565b604082019050919050565b60006020820190508181036000830152612e3181612df5565b9050919050565b7f596f7520646f206e6f74206f776e2074686973207374616b6564204e46540000600082015250565b6000612e6e601e8361274b565b9150612e7982612e38565b602082019050919050565b60006020820190508181036000830152612e9d81612e61565b9050919050565b6000612eaf82612029565b9150612eba83612029565b9250828201905080821115612ed257612ed16125fe565b5b92915050565b7f4e6f7420656e6f756768207374616b65642053746f6e65724e46547300000000600082015250565b6000612f0e601c8361274b565b9150612f1982612ed8565b602082019050919050565b60006020820190508181036000830152612f3d81612f01565b9050919050565b7f53746f6e65724e4654206e6f74207374616b6564206279207573657200000000600082015250565b6000612f7a601c8361274b565b9150612f8582612f44565b602082019050919050565b60006020820190508181036000830152612fa981612f6d565b9050919050565b7f466c6f7765724e465420636f6e7472616374206e6f7420736574000000000000600082015250565b6000612fe6601a8361274b565b9150612ff182612fb0565b602082019050919050565b6000602082019050818103600083015261301581612fd9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061307860268361274b565b91506130838261301c565b604082019050919050565b600060208201905081810360008301526130a78161306b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130e460208361274b565b91506130ef826130ae565b602082019050919050565b60006020820190508181036000830152613113816130d7565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613150601f8361274b565b915061315b8261311a565b602082019050919050565b6000602082019050818103600083015261317f81613143565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006131bc60108361274b565b91506131c782613186565b602082019050919050565b600060208201905081810360008301526131eb816131af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220b2ebf05e09360a0ff4d65b0f4fb6c82de78b65281b7396056f4314b8d6f16f3b64736f6c634300081300330000000000000000000000003be8d7a305856dcc5f6a41ade1b2f63ce4cdc86d000000000000000000000000a58cd405fb0f4ad5c917393518aafd71a72644890000000000000000000000009b567e03d891f537b2b7874aa4a3308cfe2f4fbb
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c8063602095ce116100de5780638da5cb5b116100975780639f60421f116100715780639f60421f14610463578063aee8c3a21461047f578063e7d554ac146104af578063f2fde38b146104cb5761018e565b80638da5cb5b1461040b57806396e840a9146104295780639e447fc6146104475761018e565b8063602095ce14610359578063715018a614610377578063721a1f45146103815780637b0a47ee1461039f578063851fbb54146103bd5780638b3d81b3146103db5761018e565b80633b3f944c1161014b57806351f3db481161012557806351f3db48146102d1578063584b62a1146102ed5780635c975abb1461031f5780635cae8f591461033d5761018e565b80633b3f944c146102655780633cfd15681461028357806341cd5f73146102b35761018e565b8063150b7a02146101935780631852e8d9146101c35780631cc6ec93146101f35780632c583bf31461020f578063315a095d1461022b5780633b18dc7114610247575b600080fd5b6101ad60048036038101906101a891906121a5565b6104e7565b6040516101ba9190612263565b60405180910390f35b6101dd60048036038101906101d8919061227e565b6104fb565b6040516101ea91906122cd565b60405180910390f35b61020d600480360381019061020891906122e8565b610685565b005b610229600480360381019061022491906123dd565b610711565b005b610245600480360381019061024091906122e8565b610d7f565b005b61024f610f9a565b60405161025c91906122cd565b60405180910390f35b61026d610fa0565b60405161027a91906122cd565b60405180910390f35b61029d6004803603810190610298919061227e565b610fa6565b6040516102aa91906122cd565b60405180910390f35b6102bb610fd7565b6040516102c891906122cd565b60405180910390f35b6102eb60048036038101906102e691906122e8565b610fdd565b005b6103076004803603810190610302919061227e565b611069565b60405161031693929190612455565b60405180910390f35b6103276110b0565b60405161033491906124a7565b60405180910390f35b610357600480360381019061035291906122e8565b6110c7565b005b610361611154565b60405161036e9190612521565b60405180910390f35b61037f61117a565b005b61038961118e565b604051610396919061255d565b60405180910390f35b6103a76111b4565b6040516103b491906122cd565b60405180910390f35b6103c56111ba565b6040516103d2919061255d565b60405180910390f35b6103f560048036038101906103f091906122e8565b6111e0565b6040516104029190612587565b60405180910390f35b610413611213565b6040516104209190612587565b60405180910390f35b61043161123c565b60405161043e91906122cd565b60405180910390f35b610461600480360381019061045c91906122e8565b611242565b005b61047d600480360381019061047891906123dd565b6112ce565b005b610499600480360381019061049491906122e8565b6117b8565b6040516104a691906122cd565b60405180910390f35b6104c960048036038101906104c491906122e8565b6118ed565b005b6104e560048036038101906104e091906125a2565b61197a565b005b600063150b7a0260e01b9050949350505050565b600080600090505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156106795782600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061059f5761059e6125cf565b5b90600052602060002090600302016000015403610666576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610609576106086125cf565b5b90600052602060002090600302016001015442610626919061262d565b905060006201518060055461063a876117b8565b846106459190612661565b61064f9190612661565b61065991906126d2565b905080935050505061067f565b808061067190612703565b915050610503565b50600090505b92915050565b61068d6119fd565b600081116106d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c7906127ce565b60405180910390fd5b806009819055507fa292edce75c880178d165ee8473be051a702186c35b27ea86dab6c73ce88ff578160405161070691906122cd565b60405180910390a150565b610719611a7b565b610721611aca565b600082511180610732575060008151115b610771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107689061283a565b60405180910390fd5b60005b8251811015610ae2576000838281518110610792576107916125cf565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161080e91906122cd565b602060405180830381865afa15801561082b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084f919061286f565b73ffffffffffffffffffffffffffffffffffffffff16146108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c906128e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093e90612954565b60405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806060016040528083815260200142815260200160008152509080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001556020820151816001015560408201518160020155505033600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b8152600401610a9c93929190612974565b600060405180830381600087803b158015610ab657600080fd5b505af1158015610aca573d6000803e3d6000fd5b50505050508080610ada90612703565b915050610774565b5060005b8151811015610d22576000828281518110610b0457610b036125cf565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610b8091906122cd565b602060405180830381865afa158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc1919061286f565b73ffffffffffffffffffffffffffffffffffffffff1614610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e906129f7565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b8152600401610c7693929190612974565b600060405180830381600087803b158015610c9057600080fd5b505af1158015610ca4573d6000803e3d6000fd5b50505050600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055508080610d1a90612703565b915050610ae6565b503373ffffffffffffffffffffffffffffffffffffffff167f859a4049709b7ed7c28d73c9122229b70aa55880d8744d1931e98e093a1b5b918383604051610d6b929190612ad5565b60405180910390a2610d7b611b14565b5050565b610d876119fd565b60008111610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc190612b58565b60405180910390fd5b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e269190612587565b602060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e679190612b8d565b1015610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90612c06565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610f05929190612c26565b6020604051808303816000875af1158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f489190612c7b565b503373ffffffffffffffffffffffffffffffffffffffff167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051610f8f91906122cd565b60405180910390a250565b60085481565b60075481565b600c6020528160005260406000208181548110610fc257600080fd5b90600052602060002001600091509150505481565b60095481565b610fe56119fd565b60008111611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f90612d1a565b60405180910390fd5b806008819055507f984f97438a61d2a2abf6ae7cccfe9dc9c37c8e3111255c24be5ef1129c6f2c768160405161105e91906122cd565b60405180910390a150565b600a602052816000526040600020818154811061108557600080fd5b9060005260206000209060030201600091509150508060000154908060010154908060020154905083565b6000600260009054906101000a900460ff16905090565b6110cf6119fd565b6001811015611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90612d86565b60405180910390fd5b806006819055507ff4b2d54c414c720f8a9e79192fc7b4918e9b12a7ce94b34ab404a40bccc6821d8160405161114991906122cd565b60405180910390a150565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111826119fd565b61118c6000611b1d565b565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065481565b61124a6119fd565b6000811161128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128490612e18565b60405180910390fd5b806005819055507f41d466ebd06fb97e7786086ac8b69b7eb7da798592036251291d34e9791cde01816040516112c391906122cd565b60405180910390a150565b6112d6611a7b565b6112de611aca565b6000825111806112ef575060008151115b61132e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113259061283a565b60405180910390fd5b6000805b83518110156114c15760008482815181106113505761134f6125cf565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290612e84565b60405180910390fd5b61140533826104fb565b836114109190612ea4565b925061141c3382611be1565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b815260040161147b93929190612974565b600060405180830381600087803b15801561149557600080fd5b505af11580156114a9573d6000803e3d6000fd5b505050505080806114b990612703565b915050611332565b508151600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501015611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90612f24565b60405180910390fd5b60005b8251811015611661576000838281518110611569576115686125cf565b5b6020026020010151905061157d3382611e97565b6115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390612f90565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b815260040161161b93929190612974565b600060405180830381600087803b15801561163557600080fd5b505af1158015611649573d6000803e3d6000fd5b5050505050808061165990612703565b91505061154b565b50600081111561175b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116c8929190612c26565b6020604051808303816000875af11580156116e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170b9190612c7b565b503373ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72418260405161175291906122cd565b60405180910390a25b3373ffffffffffffffffffffffffffffffffffffffff167fef3bc8b2408263209f01abd2cf8120586077da5e4cf45d8a7dd83d2a0545f10384846040516117a3929190612ad5565b60405180910390a2506117b4611b14565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361184a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184190612ffc565b60405180910390fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2596a67836040518263ffffffff1660e01b81526004016118a591906122cd565b602060405180830381865afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e69190612b8d565b9050919050565b6118f56119fd565b6001811015611939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193090612d86565b60405180910390fd5b806007819055507ff3570cd97015150a0e5502c9cf62bb4b8fd0d2891b81254dd7da2d319adf88418160405161196f91906122cd565b60405180910390a150565b6119826119fd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e89061308e565b60405180910390fd5b6119fa81611b1d565b50565b611a05611faf565b73ffffffffffffffffffffffffffffffffffffffff16611a23611213565b73ffffffffffffffffffffffffffffffffffffffff1614611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a70906130fa565b60405180910390fd5b565b600260015403611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab790613166565b60405180910390fd5b6002600181905550565b611ad26110b0565b15611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b09906131d2565b60405180910390fd5b565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015611e925781600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611c8057611c7f6125cf565b5b90600052602060002090600302016000015403611e7f57600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611d25919061262d565b81548110611d3657611d356125cf565b5b9060005260206000209060030201600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611d9557611d946125cf565b5b9060005260206000209060030201600082015481600001556001820154816001015560028201548160020155905050600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480611e1357611e126131f2565b5b60019003818190600052602060002090600302016000808201600090556001820160009055600282016000905550509055600b600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055611e92565b8080611e8a90612703565b915050611be4565b505050565b600080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b8180549050811015611fa25783828281548110611efe57611efd6125cf565b5b906000526020600020015403611f8f578160018380549050611f20919061262d565b81548110611f3157611f306125cf565b5b9060005260206000200154828281548110611f4f57611f4e6125cf565b5b906000526020600020018190555081805480611f6e57611f6d6131f2565b5b60019003818190600052602060002001600090559055600192505050611fa9565b8080611f9a90612703565b915050611ede565b5060009150505b92915050565b600033905090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ff682611fcb565b9050919050565b61200681611feb565b811461201157600080fd5b50565b60008135905061202381611ffd565b92915050565b6000819050919050565b61203c81612029565b811461204757600080fd5b50565b60008135905061205981612033565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6120b282612069565b810181811067ffffffffffffffff821117156120d1576120d061207a565b5b80604052505050565b60006120e4611fb7565b90506120f082826120a9565b919050565b600067ffffffffffffffff8211156121105761210f61207a565b5b61211982612069565b9050602081019050919050565b82818337600083830152505050565b6000612148612143846120f5565b6120da565b90508281526020810184848401111561216457612163612064565b5b61216f848285612126565b509392505050565b600082601f83011261218c5761218b61205f565b5b813561219c848260208601612135565b91505092915050565b600080600080608085870312156121bf576121be611fc1565b5b60006121cd87828801612014565b94505060206121de87828801612014565b93505060406121ef8782880161204a565b925050606085013567ffffffffffffffff8111156122105761220f611fc6565b5b61221c87828801612177565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61225d81612228565b82525050565b60006020820190506122786000830184612254565b92915050565b6000806040838503121561229557612294611fc1565b5b60006122a385828601612014565b92505060206122b48582860161204a565b9150509250929050565b6122c781612029565b82525050565b60006020820190506122e260008301846122be565b92915050565b6000602082840312156122fe576122fd611fc1565b5b600061230c8482850161204a565b91505092915050565b600067ffffffffffffffff8211156123305761232f61207a565b5b602082029050602081019050919050565b600080fd5b600061235961235484612315565b6120da565b9050808382526020820190506020840283018581111561237c5761237b612341565b5b835b818110156123a55780612391888261204a565b84526020840193505060208101905061237e565b5050509392505050565b600082601f8301126123c4576123c361205f565b5b81356123d4848260208601612346565b91505092915050565b600080604083850312156123f4576123f3611fc1565b5b600083013567ffffffffffffffff81111561241257612411611fc6565b5b61241e858286016123af565b925050602083013567ffffffffffffffff81111561243f5761243e611fc6565b5b61244b858286016123af565b9150509250929050565b600060608201905061246a60008301866122be565b61247760208301856122be565b61248460408301846122be565b949350505050565b60008115159050919050565b6124a18161248c565b82525050565b60006020820190506124bc6000830184612498565b92915050565b6000819050919050565b60006124e76124e26124dd84611fcb565b6124c2565b611fcb565b9050919050565b60006124f9826124cc565b9050919050565b600061250b826124ee565b9050919050565b61251b81612500565b82525050565b60006020820190506125366000830184612512565b92915050565b6000612547826124ee565b9050919050565b6125578161253c565b82525050565b6000602082019050612572600083018461254e565b92915050565b61258181611feb565b82525050565b600060208201905061259c6000830184612578565b92915050565b6000602082840312156125b8576125b7611fc1565b5b60006125c684828501612014565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061263882612029565b915061264383612029565b925082820390508181111561265b5761265a6125fe565b5b92915050565b600061266c82612029565b915061267783612029565b925082820261268581612029565b9150828204841483151761269c5761269b6125fe565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006126dd82612029565b91506126e883612029565b9250826126f8576126f76126a3565b5b828204905092915050565b600061270e82612029565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127405761273f6125fe565b5b600182019050919050565b600082825260208201905092915050565b7f436f6f6c646f776e206d7573742062652067726561746572207468616e207a6560008201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b60006127b860228361274b565b91506127c38261275c565b604082019050919050565b600060208201905081810360008301526127e7816127ab565b9050919050565b7f4e6f204e4654732070726f766964656400000000000000000000000000000000600082015250565b600061282460108361274b565b915061282f826127ee565b602082019050919050565b6000602082019050818103600083015261285381612817565b9050919050565b60008151905061286981611ffd565b92915050565b60006020828403121561288557612884611fc1565b5b60006128938482850161285a565b91505092915050565b7f596f7520646f206e6f74206f776e207468697320466c6f7765724e4654000000600082015250565b60006128d2601d8361274b565b91506128dd8261289c565b602082019050919050565b60006020820190508181036000830152612901816128c5565b9050919050565b7f54686973204e465420697320616c7265616479207374616b6564000000000000600082015250565b600061293e601a8361274b565b915061294982612908565b602082019050919050565b6000602082019050818103600083015261296d81612931565b9050919050565b60006060820190506129896000830186612578565b6129966020830185612578565b6129a360408301846122be565b949350505050565b7f596f7520646f206e6f74206f776e20746869732053746f6e65724e4654000000600082015250565b60006129e1601d8361274b565b91506129ec826129ab565b602082019050919050565b60006020820190508181036000830152612a10816129d4565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a4c81612029565b82525050565b6000612a5e8383612a43565b60208301905092915050565b6000602082019050919050565b6000612a8282612a17565b612a8c8185612a22565b9350612a9783612a33565b8060005b83811015612ac8578151612aaf8882612a52565b9750612aba83612a6a565b925050600181019050612a9b565b5085935050505092915050565b60006040820190508181036000830152612aef8185612a77565b90508181036020830152612b038184612a77565b90509392505050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b6000612b4260208361274b565b9150612b4d82612b0c565b602082019050919050565b60006020820190508181036000830152612b7181612b35565b9050919050565b600081519050612b8781612033565b92915050565b600060208284031215612ba357612ba2611fc1565b5b6000612bb184828501612b78565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e20636f6e7472616374000000600082015250565b6000612bf0601d8361274b565b9150612bfb82612bba565b602082019050919050565b60006020820190508181036000830152612c1f81612be3565b9050919050565b6000604082019050612c3b6000830185612578565b612c4860208301846122be565b9392505050565b612c588161248c565b8114612c6357600080fd5b50565b600081519050612c7581612c4f565b92915050565b600060208284031215612c9157612c90611fc1565b5b6000612c9f84828501612c66565b91505092915050565b7f426f6e757320616d6f756e74206d75737420626520677265617465722074686160008201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b6000612d0460268361274b565b9150612d0f82612ca8565b604082019050919050565b60006020820190508181036000830152612d3381612cf7565b9050919050565b7f4d756c7469706c696572206d757374206265206174206c656173742031000000600082015250565b6000612d70601d8361274b565b9150612d7b82612d3a565b602082019050919050565b60006020820190508181036000830152612d9f81612d63565b9050919050565b7f5265776172642072617465206d7573742062652067726561746572207468616e60008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612e0260258361274b565b9150612e0d82612da6565b604082019050919050565b60006020820190508181036000830152612e3181612df5565b9050919050565b7f596f7520646f206e6f74206f776e2074686973207374616b6564204e46540000600082015250565b6000612e6e601e8361274b565b9150612e7982612e38565b602082019050919050565b60006020820190508181036000830152612e9d81612e61565b9050919050565b6000612eaf82612029565b9150612eba83612029565b9250828201905080821115612ed257612ed16125fe565b5b92915050565b7f4e6f7420656e6f756768207374616b65642053746f6e65724e46547300000000600082015250565b6000612f0e601c8361274b565b9150612f1982612ed8565b602082019050919050565b60006020820190508181036000830152612f3d81612f01565b9050919050565b7f53746f6e65724e4654206e6f74207374616b6564206279207573657200000000600082015250565b6000612f7a601c8361274b565b9150612f8582612f44565b602082019050919050565b60006020820190508181036000830152612fa981612f6d565b9050919050565b7f466c6f7765724e465420636f6e7472616374206e6f7420736574000000000000600082015250565b6000612fe6601a8361274b565b9150612ff182612fb0565b602082019050919050565b6000602082019050818103600083015261301581612fd9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061307860268361274b565b91506130838261301c565b604082019050919050565b600060208201905081810360008301526130a78161306b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130e460208361274b565b91506130ef826130ae565b602082019050919050565b60006020820190508181036000830152613113816130d7565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613150601f8361274b565b915061315b8261311a565b602082019050919050565b6000602082019050818103600083015261317f81613143565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006131bc60108361274b565b91506131c782613186565b602082019050919050565b600060208201905081810360008301526131eb816131af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220b2ebf05e09360a0ff4d65b0f4fb6c82de78b65281b7396056f4314b8d6f16f3b64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003be8d7a305856dcc5f6a41ade1b2f63ce4cdc86d000000000000000000000000a58cd405fb0f4ad5c917393518aafd71a72644890000000000000000000000009b567e03d891f537b2b7874aa4a3308cfe2f4fbb
-----Decoded View---------------
Arg [0] : _flowerNFT (address): 0x3be8d7A305856Dcc5f6a41aDE1B2F63CE4CDc86D
Arg [1] : _flowerToken (address): 0xa58cD405FB0F4aD5C917393518aAFd71A7264489
Arg [2] : _stonerToken (address): 0x9b567e03d891F537b2B7874aA4A3308Cfe2F4FBb
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000003be8d7a305856dcc5f6a41ade1b2f63ce4cdc86d
Arg [1] : 000000000000000000000000a58cd405fb0f4ad5c917393518aafd71a7264489
Arg [2] : 0000000000000000000000009b567e03d891f537b2b7874aa4a3308cfe2f4fbb
Deployed Bytecode Sourcemap
19664:7639:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27136:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25562:476;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22268:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22938:1215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22559:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19990:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19940:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20301:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20038:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22033:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20194:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;18512:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21504:252;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19783:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12770:103;;;:::i;:::-;;19752:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19850:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19815:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20242:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12129:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19892:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21284:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24198:1324;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26046:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21764:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13028:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27136:164;27236:6;27262:30;;;27255:37;;27136:164;;;;;;:::o;25562:476::-;25639:7;25664:9;25676:1;25664:13;;25659:353;25683:6;:12;25690:4;25683:12;;;;;;;;;;;;;;;:19;;;;25679:1;:23;25659:353;;;25755:7;25728:6;:12;25735:4;25728:12;;;;;;;;;;;;;;;25741:1;25728:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;:34;25724:277;;25783:18;25822:6;:12;25829:4;25822:12;;;;;;;;;;;;;;;25835:1;25822:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:24;;;25804:15;:42;;;;:::i;:::-;25783:63;;25865:18;25943:6;25929:10;;25900:26;25918:7;25900:17;:26::i;:::-;25887:10;:39;;;;:::i;:::-;:52;;;;:::i;:::-;25886:63;;;;:::i;:::-;25865:84;;25975:10;25968:17;;;;;;;25724:277;25704:3;;;;;:::i;:::-;;;;25659:353;;;;26029:1;26022:8;;25562:476;;;;;:::o;22268:228::-;12015:13;:11;:13::i;:::-;22365:1:::1;22351:11;:15;22343:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22430:11;22416;:25;;;;22457:31;22476:11;22457:31;;;;;;:::i;:::-;;;;;;;;22268:228:::0;:::o;22938:1215::-;15938:21;:19;:21::i;:::-;18117:19:::1;:17;:19::i;:::-;23106:1:::2;23082:14;:21;:25;:54;;;;23135:1;23111:14;:21;:25;23082:54;23074:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23175:9;23170:545;23194:14;:21;23190:1;:25;23170:545;;;23237:15;23255:14;23270:1;23255:17;;;;;;;;:::i;:::-;;;;;;;;23237:35;;23325:10;23295:40;;:9;;;;;;;;;;;:17;;;23313:7;23295:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;23287:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;23430:1;23392:40;;:17;:26;23410:7;23392:26;;;;;;;;;;;;;;;;;;;;;:40;;;23384:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;23480:6;:18;23487:10;23480:18;;;;;;;;;;;;;;;23504:67;;;;;;;;23520:7;23504:67;;;;23539:15;23504:67;;;;23568:1;23504:67;;::::0;23480:92:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23616:10;23587:17;:26;23605:7;23587:26;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23641:9;;;;;;;;;;;:26;;;23668:10;23688:4;23695:7;23641:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;23222:493;23217:3;;;;;:::i;:::-;;;;23170:545;;;;23732:9;23727:351;23751:14;:21;23747:1;:25;23727:351;;;23794:16;23813:14;23828:1;23813:17;;;;;;;;:::i;:::-;;;;;;;;23794:36;;23886:10;23853:43;;:11;;;;;;;;;;;:19;;;23873:8;23853:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;23845:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23947:11;;;;;;;;;;;:28;;;23976:10;23996:4;24003:8;23947:65;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;24027:12;:24;24040:10;24027:24;;;;;;;;;;;;;;;24057:8;24027:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23779:299;23774:3;;;;;:::i;:::-;;;;23727:351;;;;24102:10;24095:50;;;24114:14;24130;24095:50;;;;;;;:::i;:::-;;;;;;;;15982:20:::0;:18;:20::i;:::-;22938:1215;;:::o;22559:336::-;12015:13;:11;:13::i;:::-;22646:1:::1;22637:6;:10;22629:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;22743:6;22703:11;;;;;;;;;;;:21;;;22733:4;22703:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;22695:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;22796:11;;;;;;;;;;;:20;;;22817:10;22829:6;22796:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22868:10;22852:35;;;22880:6;22852:35;;;;;;:::i;:::-;;;;;;;;22559:336:::0;:::o;19990:41::-;;;;:::o;19940:43::-;;;;:::o;20301:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20038:36::-;;;;:::o;22033:227::-;12015:13;:11;:13::i;:::-;22129:1:::1;22117:9;:13;22109:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22201:9;22184:14;:26;;;;22226;22242:9;22226:26;;;;;;:::i;:::-;;;;;;;;22033:227:::0;:::o;20194:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18512:86::-;18559:4;18583:7;;;;;;;;;;;18576:14;;18512:86;:::o;21504:252::-;12015:13;:11;:13::i;:::-;21616:1:::1;21599:13;:18;;21591:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21686:13;21662:21;:37;;;;21715:33;21734:13;21715:33;;;;;;:::i;:::-;;;;;;;;21504:252:::0;:::o;19783:25::-;;;;;;;;;;;;;:::o;12770:103::-;12015:13;:11;:13::i;:::-;12835:30:::1;12862:1;12835:18;:30::i;:::-;12770:103::o:0;19752:24::-;;;;;;;;;;;;;:::o;19850:35::-;;;;:::o;19815:26::-;;;;;;;;;;;;;:::o;20242:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;12129:87::-;12175:7;12202:6;;;;;;;;;;;12195:13;;12129:87;:::o;19892:41::-;;;;:::o;21284:212::-;12015:13;:11;:13::i;:::-;21372:1:::1;21362:7;:11;21354:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21439:7;21426:10;:20;;;;21462:26;21480:7;21462:26;;;;;;:::i;:::-;;;;;;;;21284:212:::0;:::o;24198:1324::-;15938:21;:19;:21::i;:::-;18117:19:::1;:17;:19::i;:::-;24368:1:::2;24344:14;:21;:25;:54;;;;24397:1;24373:14;:21;:25;24344:54;24336:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24430:19;24471:9:::0;24466:405:::2;24490:14;:21;24486:1;:25;24466:405;;;24533:15;24551:14;24566:1;24551:17;;;;;;;;:::i;:::-;;;;;;;;24533:35;;24621:10;24591:40;;:17;:26;24609:7;24591:26;;;;;;;;;;;;;;;;;;;;;:40;;;24583:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24698:36;24714:10;24726:7;24698:15;:36::i;:::-;24683:51;;;;;:::i;:::-;;;24749:33;24762:10;24774:7;24749:12;:33::i;:::-;24797:9;;;;;;;;;;;:26;;;24832:4;24839:10;24851:7;24797:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;24518:353;24513:3;;;;;:::i;:::-;;;;24466:405;;;;24926:14;:21;24891:12;:24;24904:10;24891:24;;;;;;;;;;;;;;;:31;;;;:56;;24883:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;24996:9;24991:293;25015:14;:21;25011:1;:25;24991:293;;;25058:16;25077:14;25092:1;25077:17;;;;;;;;:::i;:::-;;;;;;;;25058:36;;25117:40;25136:10;25148:8;25117:18;:40::i;:::-;25109:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25207:11;;;;;;;;;;;:28;;;25244:4;25251:10;25263:8;25207:65;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;25043:241;25038:3;;;;;:::i;:::-;;;;24991:293;;;;25314:1;25300:11;:15;25296:151;;;25332:11;;;;;;;;;;;:20;;;25353:10;25365:11;25332:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25411:10;25397:38;;;25423:11;25397:38;;;;;;:::i;:::-;;;;;;;;25296:151;25471:10;25462:52;;;25483:14;25499;25462:52;;;;;;;:::i;:::-;;;;;;;;24325:1197;15982:20:::0;:18;:20::i;:::-;24198:1324;;:::o;26046:228::-;26111:7;26169:1;26139:32;;26147:9;;;;;;;;;;;26139:32;;;26131:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26239:9;;;;;;;;;;;26220:37;;;26258:7;26220:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26213:53;;26046:228;;;:::o;21764:261::-;12015:13;:11;:13::i;:::-;21879:1:::1;21862:13;:18;;21854:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21952:13;21925:24;:40;;;;21981:36;22003:13;21981:36;;;;;;:::i;:::-;;;;;;;;21764:261:::0;:::o;13028:201::-;12015:13;:11;:13::i;:::-;13137:1:::1;13117:22;;:8;:22;;::::0;13109:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13193:28;13212:8;13193:18;:28::i;:::-;13028:201:::0;:::o;12294:132::-;12369:12;:10;:12::i;:::-;12358:23;;:7;:5;:7::i;:::-;:23;;;12350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12294:132::o;16018:293::-;15420:1;16152:7;;:19;16144:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;15420:1;16285:7;:18;;;;16018:293::o;18671:108::-;18742:8;:6;:8::i;:::-;18741:9;18733:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18671:108::o;16319:213::-;15376:1;16502:7;:22;;;;16319:213::o;13389:191::-;13463:16;13482:6;;;;;;;;;;;13463:25;;13508:8;13499:6;;:17;;;;;;;;;;;;;;;;;;13563:8;13532:40;;13553:8;13532:40;;;;;;;;;;;;13452:128;13389:191;:::o;26282:399::-;26360:9;26355:319;26379:6;:12;26386:4;26379:12;;;;;;;;;;;;;;;:19;;;;26375:1;:23;26355:319;;;26451:7;26424:6;:12;26431:4;26424:12;;;;;;;;;;;;;;;26437:1;26424:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;:34;26420:243;;26497:6;:12;26504:4;26497:12;;;;;;;;;;;;;;;26532:1;26510:6;:12;26517:4;26510:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;26497:37;;;;;;;;:::i;:::-;;;;;;;;;;;;26479:6;:12;26486:4;26479:12;;;;;;;;;;;;;;;26492:1;26479:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;26553:6;:12;26560:4;26553:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26597:17;:26;26615:7;26597:26;;;;;;;;;;;;26590:33;;;;;;;;;;;26642:5;;26420:243;26400:3;;;;;:::i;:::-;;;;26355:319;;;;26282:399;;:::o;26689:439::-;26766:4;26783:28;26814:12;:18;26827:4;26814:18;;;;;;;;;;;;;;;26783:49;;26850:9;26845:253;26869:10;:17;;;;26865:1;:21;26845:253;;;26929:7;26912:10;26923:1;26912:13;;;;;;;;:::i;:::-;;;;;;;;;;:24;26908:179;;26973:10;27004:1;26984:10;:17;;;;:21;;;;:::i;:::-;26973:33;;;;;;;;:::i;:::-;;;;;;;;;;26957:10;26968:1;26957:13;;;;;;;;:::i;:::-;;;;;;;;;:49;;;;27025:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27067:4;27060:11;;;;;;26908:179;26888:3;;;;;:::i;:::-;;;;26845:253;;;;27115:5;27108:12;;;26689:439;;;;;:::o;10567:98::-;10620:7;10647:10;10640:17;;10567:98;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:117::-;1306:1;1303;1296:12;1320:117;1429:1;1426;1419:12;1443:102;1484:6;1535:2;1531:7;1526:2;1519:5;1515:14;1511:28;1501:38;;1443:102;;;:::o;1551:180::-;1599:77;1596:1;1589:88;1696:4;1693:1;1686:15;1720:4;1717:1;1710:15;1737:281;1820:27;1842:4;1820:27;:::i;:::-;1812:6;1808:40;1950:6;1938:10;1935:22;1914:18;1902:10;1899:34;1896:62;1893:88;;;1961:18;;:::i;:::-;1893:88;2001:10;1997:2;1990:22;1780:238;1737:281;;:::o;2024:129::-;2058:6;2085:20;;:::i;:::-;2075:30;;2114:33;2142:4;2134:6;2114:33;:::i;:::-;2024:129;;;:::o;2159:307::-;2220:4;2310:18;2302:6;2299:30;2296:56;;;2332:18;;:::i;:::-;2296:56;2370:29;2392:6;2370:29;:::i;:::-;2362:37;;2454:4;2448;2444:15;2436:23;;2159:307;;;:::o;2472:146::-;2569:6;2564:3;2559;2546:30;2610:1;2601:6;2596:3;2592:16;2585:27;2472:146;;;:::o;2624:423::-;2701:5;2726:65;2742:48;2783:6;2742:48;:::i;:::-;2726:65;:::i;:::-;2717:74;;2814:6;2807:5;2800:21;2852:4;2845:5;2841:16;2890:3;2881:6;2876:3;2872:16;2869:25;2866:112;;;2897:79;;:::i;:::-;2866:112;2987:54;3034:6;3029:3;3024;2987:54;:::i;:::-;2707:340;2624:423;;;;;:::o;3066:338::-;3121:5;3170:3;3163:4;3155:6;3151:17;3147:27;3137:122;;3178:79;;:::i;:::-;3137:122;3295:6;3282:20;3320:78;3394:3;3386:6;3379:4;3371:6;3367:17;3320:78;:::i;:::-;3311:87;;3127:277;3066:338;;;;:::o;3410:943::-;3505:6;3513;3521;3529;3578:3;3566:9;3557:7;3553:23;3549:33;3546:120;;;3585:79;;:::i;:::-;3546:120;3705:1;3730:53;3775:7;3766:6;3755:9;3751:22;3730:53;:::i;:::-;3720:63;;3676:117;3832:2;3858:53;3903:7;3894:6;3883:9;3879:22;3858:53;:::i;:::-;3848:63;;3803:118;3960:2;3986:53;4031:7;4022:6;4011:9;4007:22;3986:53;:::i;:::-;3976:63;;3931:118;4116:2;4105:9;4101:18;4088:32;4147:18;4139:6;4136:30;4133:117;;;4169:79;;:::i;:::-;4133:117;4274:62;4328:7;4319:6;4308:9;4304:22;4274:62;:::i;:::-;4264:72;;4059:287;3410:943;;;;;;;:::o;4359:149::-;4395:7;4435:66;4428:5;4424:78;4413:89;;4359:149;;;:::o;4514:115::-;4599:23;4616:5;4599:23;:::i;:::-;4594:3;4587:36;4514:115;;:::o;4635:218::-;4726:4;4764:2;4753:9;4749:18;4741:26;;4777:69;4843:1;4832:9;4828:17;4819:6;4777:69;:::i;:::-;4635:218;;;;:::o;4859:474::-;4927:6;4935;4984:2;4972:9;4963:7;4959:23;4955:32;4952:119;;;4990:79;;:::i;:::-;4952:119;5110:1;5135:53;5180:7;5171:6;5160:9;5156:22;5135:53;:::i;:::-;5125:63;;5081:117;5237:2;5263:53;5308:7;5299:6;5288:9;5284:22;5263:53;:::i;:::-;5253:63;;5208:118;4859:474;;;;;:::o;5339:118::-;5426:24;5444:5;5426:24;:::i;:::-;5421:3;5414:37;5339:118;;:::o;5463:222::-;5556:4;5594:2;5583:9;5579:18;5571:26;;5607:71;5675:1;5664:9;5660:17;5651:6;5607:71;:::i;:::-;5463:222;;;;:::o;5691:329::-;5750:6;5799:2;5787:9;5778:7;5774:23;5770:32;5767:119;;;5805:79;;:::i;:::-;5767:119;5925:1;5950:53;5995:7;5986:6;5975:9;5971:22;5950:53;:::i;:::-;5940:63;;5896:117;5691:329;;;;:::o;6026:311::-;6103:4;6193:18;6185:6;6182:30;6179:56;;;6215:18;;:::i;:::-;6179:56;6265:4;6257:6;6253:17;6245:25;;6325:4;6319;6315:15;6307:23;;6026:311;;;:::o;6343:117::-;6452:1;6449;6442:12;6483:710;6579:5;6604:81;6620:64;6677:6;6620:64;:::i;:::-;6604:81;:::i;:::-;6595:90;;6705:5;6734:6;6727:5;6720:21;6768:4;6761:5;6757:16;6750:23;;6821:4;6813:6;6809:17;6801:6;6797:30;6850:3;6842:6;6839:15;6836:122;;;6869:79;;:::i;:::-;6836:122;6984:6;6967:220;7001:6;6996:3;6993:15;6967:220;;;7076:3;7105:37;7138:3;7126:10;7105:37;:::i;:::-;7100:3;7093:50;7172:4;7167:3;7163:14;7156:21;;7043:144;7027:4;7022:3;7018:14;7011:21;;6967:220;;;6971:21;6585:608;;6483:710;;;;;:::o;7216:370::-;7287:5;7336:3;7329:4;7321:6;7317:17;7313:27;7303:122;;7344:79;;:::i;:::-;7303:122;7461:6;7448:20;7486:94;7576:3;7568:6;7561:4;7553:6;7549:17;7486:94;:::i;:::-;7477:103;;7293:293;7216:370;;;;:::o;7592:894::-;7710:6;7718;7767:2;7755:9;7746:7;7742:23;7738:32;7735:119;;;7773:79;;:::i;:::-;7735:119;7921:1;7910:9;7906:17;7893:31;7951:18;7943:6;7940:30;7937:117;;;7973:79;;:::i;:::-;7937:117;8078:78;8148:7;8139:6;8128:9;8124:22;8078:78;:::i;:::-;8068:88;;7864:302;8233:2;8222:9;8218:18;8205:32;8264:18;8256:6;8253:30;8250:117;;;8286:79;;:::i;:::-;8250:117;8391:78;8461:7;8452:6;8441:9;8437:22;8391:78;:::i;:::-;8381:88;;8176:303;7592:894;;;;;:::o;8492:442::-;8641:4;8679:2;8668:9;8664:18;8656:26;;8692:71;8760:1;8749:9;8745:17;8736:6;8692:71;:::i;:::-;8773:72;8841:2;8830:9;8826:18;8817:6;8773:72;:::i;:::-;8855;8923:2;8912:9;8908:18;8899:6;8855:72;:::i;:::-;8492:442;;;;;;:::o;8940:90::-;8974:7;9017:5;9010:13;9003:21;8992:32;;8940:90;;;:::o;9036:109::-;9117:21;9132:5;9117:21;:::i;:::-;9112:3;9105:34;9036:109;;:::o;9151:210::-;9238:4;9276:2;9265:9;9261:18;9253:26;;9289:65;9351:1;9340:9;9336:17;9327:6;9289:65;:::i;:::-;9151:210;;;;:::o;9367:60::-;9395:3;9416:5;9409:12;;9367:60;;;:::o;9433:142::-;9483:9;9516:53;9534:34;9543:24;9561:5;9543:24;:::i;:::-;9534:34;:::i;:::-;9516:53;:::i;:::-;9503:66;;9433:142;;;:::o;9581:126::-;9631:9;9664:37;9695:5;9664:37;:::i;:::-;9651:50;;9581:126;;;:::o;9713:140::-;9777:9;9810:37;9841:5;9810:37;:::i;:::-;9797:50;;9713:140;;;:::o;9859:159::-;9960:51;10005:5;9960:51;:::i;:::-;9955:3;9948:64;9859:159;;:::o;10024:250::-;10131:4;10169:2;10158:9;10154:18;10146:26;;10182:85;10264:1;10253:9;10249:17;10240:6;10182:85;:::i;:::-;10024:250;;;;:::o;10280:141::-;10345:9;10378:37;10409:5;10378:37;:::i;:::-;10365:50;;10280:141;;;:::o;10427:161::-;10529:52;10575:5;10529:52;:::i;:::-;10524:3;10517:65;10427:161;;:::o;10594:252::-;10702:4;10740:2;10729:9;10725:18;10717:26;;10753:86;10836:1;10825:9;10821:17;10812:6;10753:86;:::i;:::-;10594:252;;;;:::o;10852:118::-;10939:24;10957:5;10939:24;:::i;:::-;10934:3;10927:37;10852:118;;:::o;10976:222::-;11069:4;11107:2;11096:9;11092:18;11084:26;;11120:71;11188:1;11177:9;11173:17;11164:6;11120:71;:::i;:::-;10976:222;;;;:::o;11204:329::-;11263:6;11312:2;11300:9;11291:7;11287:23;11283:32;11280:119;;;11318:79;;:::i;:::-;11280:119;11438:1;11463:53;11508:7;11499:6;11488:9;11484:22;11463:53;:::i;:::-;11453:63;;11409:117;11204:329;;;;:::o;11539:180::-;11587:77;11584:1;11577:88;11684:4;11681:1;11674:15;11708:4;11705:1;11698:15;11725:180;11773:77;11770:1;11763:88;11870:4;11867:1;11860:15;11894:4;11891:1;11884:15;11911:194;11951:4;11971:20;11989:1;11971:20;:::i;:::-;11966:25;;12005:20;12023:1;12005:20;:::i;:::-;12000:25;;12049:1;12046;12042:9;12034:17;;12073:1;12067:4;12064:11;12061:37;;;12078:18;;:::i;:::-;12061:37;11911:194;;;;:::o;12111:410::-;12151:7;12174:20;12192:1;12174:20;:::i;:::-;12169:25;;12208:20;12226:1;12208:20;:::i;:::-;12203:25;;12263:1;12260;12256:9;12285:30;12303:11;12285:30;:::i;:::-;12274:41;;12464:1;12455:7;12451:15;12448:1;12445:22;12425:1;12418:9;12398:83;12375:139;;12494:18;;:::i;:::-;12375:139;12159:362;12111:410;;;;:::o;12527:180::-;12575:77;12572:1;12565:88;12672:4;12669:1;12662:15;12696:4;12693:1;12686:15;12713:185;12753:1;12770:20;12788:1;12770:20;:::i;:::-;12765:25;;12804:20;12822:1;12804:20;:::i;:::-;12799:25;;12843:1;12833:35;;12848:18;;:::i;:::-;12833:35;12890:1;12887;12883:9;12878:14;;12713:185;;;;:::o;12904:233::-;12943:3;12966:24;12984:5;12966:24;:::i;:::-;12957:33;;13012:66;13005:5;13002:77;12999:103;;13082:18;;:::i;:::-;12999:103;13129:1;13122:5;13118:13;13111:20;;12904:233;;;:::o;13143:169::-;13227:11;13261:6;13256:3;13249:19;13301:4;13296:3;13292:14;13277:29;;13143:169;;;;:::o;13318:221::-;13458:34;13454:1;13446:6;13442:14;13435:58;13527:4;13522:2;13514:6;13510:15;13503:29;13318:221;:::o;13545:366::-;13687:3;13708:67;13772:2;13767:3;13708:67;:::i;:::-;13701:74;;13784:93;13873:3;13784:93;:::i;:::-;13902:2;13897:3;13893:12;13886:19;;13545:366;;;:::o;13917:419::-;14083:4;14121:2;14110:9;14106:18;14098:26;;14170:9;14164:4;14160:20;14156:1;14145:9;14141:17;14134:47;14198:131;14324:4;14198:131;:::i;:::-;14190:139;;13917:419;;;:::o;14342:166::-;14482:18;14478:1;14470:6;14466:14;14459:42;14342:166;:::o;14514:366::-;14656:3;14677:67;14741:2;14736:3;14677:67;:::i;:::-;14670:74;;14753:93;14842:3;14753:93;:::i;:::-;14871:2;14866:3;14862:12;14855:19;;14514:366;;;:::o;14886:419::-;15052:4;15090:2;15079:9;15075:18;15067:26;;15139:9;15133:4;15129:20;15125:1;15114:9;15110:17;15103:47;15167:131;15293:4;15167:131;:::i;:::-;15159:139;;14886:419;;;:::o;15311:143::-;15368:5;15399:6;15393:13;15384:22;;15415:33;15442:5;15415:33;:::i;:::-;15311:143;;;;:::o;15460:351::-;15530:6;15579:2;15567:9;15558:7;15554:23;15550:32;15547:119;;;15585:79;;:::i;:::-;15547:119;15705:1;15730:64;15786:7;15777:6;15766:9;15762:22;15730:64;:::i;:::-;15720:74;;15676:128;15460:351;;;;:::o;15817:179::-;15957:31;15953:1;15945:6;15941:14;15934:55;15817:179;:::o;16002:366::-;16144:3;16165:67;16229:2;16224:3;16165:67;:::i;:::-;16158:74;;16241:93;16330:3;16241:93;:::i;:::-;16359:2;16354:3;16350:12;16343:19;;16002:366;;;:::o;16374:419::-;16540:4;16578:2;16567:9;16563:18;16555:26;;16627:9;16621:4;16617:20;16613:1;16602:9;16598:17;16591:47;16655:131;16781:4;16655:131;:::i;:::-;16647:139;;16374:419;;;:::o;16799:176::-;16939:28;16935:1;16927:6;16923:14;16916:52;16799:176;:::o;16981:366::-;17123:3;17144:67;17208:2;17203:3;17144:67;:::i;:::-;17137:74;;17220:93;17309:3;17220:93;:::i;:::-;17338:2;17333:3;17329:12;17322:19;;16981:366;;;:::o;17353:419::-;17519:4;17557:2;17546:9;17542:18;17534:26;;17606:9;17600:4;17596:20;17592:1;17581:9;17577:17;17570:47;17634:131;17760:4;17634:131;:::i;:::-;17626:139;;17353:419;;;:::o;17778:442::-;17927:4;17965:2;17954:9;17950:18;17942:26;;17978:71;18046:1;18035:9;18031:17;18022:6;17978:71;:::i;:::-;18059:72;18127:2;18116:9;18112:18;18103:6;18059:72;:::i;:::-;18141;18209:2;18198:9;18194:18;18185:6;18141:72;:::i;:::-;17778:442;;;;;;:::o;18226:179::-;18366:31;18362:1;18354:6;18350:14;18343:55;18226:179;:::o;18411:366::-;18553:3;18574:67;18638:2;18633:3;18574:67;:::i;:::-;18567:74;;18650:93;18739:3;18650:93;:::i;:::-;18768:2;18763:3;18759:12;18752:19;;18411:366;;;:::o;18783:419::-;18949:4;18987:2;18976:9;18972:18;18964:26;;19036:9;19030:4;19026:20;19022:1;19011:9;19007:17;19000:47;19064:131;19190:4;19064:131;:::i;:::-;19056:139;;18783:419;;;:::o;19208:114::-;19275:6;19309:5;19303:12;19293:22;;19208:114;;;:::o;19328:184::-;19427:11;19461:6;19456:3;19449:19;19501:4;19496:3;19492:14;19477:29;;19328:184;;;;:::o;19518:132::-;19585:4;19608:3;19600:11;;19638:4;19633:3;19629:14;19621:22;;19518:132;;;:::o;19656:108::-;19733:24;19751:5;19733:24;:::i;:::-;19728:3;19721:37;19656:108;;:::o;19770:179::-;19839:10;19860:46;19902:3;19894:6;19860:46;:::i;:::-;19938:4;19933:3;19929:14;19915:28;;19770:179;;;;:::o;19955:113::-;20025:4;20057;20052:3;20048:14;20040:22;;19955:113;;;:::o;20104:732::-;20223:3;20252:54;20300:5;20252:54;:::i;:::-;20322:86;20401:6;20396:3;20322:86;:::i;:::-;20315:93;;20432:56;20482:5;20432:56;:::i;:::-;20511:7;20542:1;20527:284;20552:6;20549:1;20546:13;20527:284;;;20628:6;20622:13;20655:63;20714:3;20699:13;20655:63;:::i;:::-;20648:70;;20741:60;20794:6;20741:60;:::i;:::-;20731:70;;20587:224;20574:1;20571;20567:9;20562:14;;20527:284;;;20531:14;20827:3;20820:10;;20228:608;;;20104:732;;;;:::o;20842:634::-;21063:4;21101:2;21090:9;21086:18;21078:26;;21150:9;21144:4;21140:20;21136:1;21125:9;21121:17;21114:47;21178:108;21281:4;21272:6;21178:108;:::i;:::-;21170:116;;21333:9;21327:4;21323:20;21318:2;21307:9;21303:18;21296:48;21361:108;21464:4;21455:6;21361:108;:::i;:::-;21353:116;;20842:634;;;;;:::o;21482:182::-;21622:34;21618:1;21610:6;21606:14;21599:58;21482:182;:::o;21670:366::-;21812:3;21833:67;21897:2;21892:3;21833:67;:::i;:::-;21826:74;;21909:93;21998:3;21909:93;:::i;:::-;22027:2;22022:3;22018:12;22011:19;;21670:366;;;:::o;22042:419::-;22208:4;22246:2;22235:9;22231:18;22223:26;;22295:9;22289:4;22285:20;22281:1;22270:9;22266:17;22259:47;22323:131;22449:4;22323:131;:::i;:::-;22315:139;;22042:419;;;:::o;22467:143::-;22524:5;22555:6;22549:13;22540:22;;22571:33;22598:5;22571:33;:::i;:::-;22467:143;;;;:::o;22616:351::-;22686:6;22735:2;22723:9;22714:7;22710:23;22706:32;22703:119;;;22741:79;;:::i;:::-;22703:119;22861:1;22886:64;22942:7;22933:6;22922:9;22918:22;22886:64;:::i;:::-;22876:74;;22832:128;22616:351;;;;:::o;22973:179::-;23113:31;23109:1;23101:6;23097:14;23090:55;22973:179;:::o;23158:366::-;23300:3;23321:67;23385:2;23380:3;23321:67;:::i;:::-;23314:74;;23397:93;23486:3;23397:93;:::i;:::-;23515:2;23510:3;23506:12;23499:19;;23158:366;;;:::o;23530:419::-;23696:4;23734:2;23723:9;23719:18;23711:26;;23783:9;23777:4;23773:20;23769:1;23758:9;23754:17;23747:47;23811:131;23937:4;23811:131;:::i;:::-;23803:139;;23530:419;;;:::o;23955:332::-;24076:4;24114:2;24103:9;24099:18;24091:26;;24127:71;24195:1;24184:9;24180:17;24171:6;24127:71;:::i;:::-;24208:72;24276:2;24265:9;24261:18;24252:6;24208:72;:::i;:::-;23955:332;;;;;:::o;24293:116::-;24363:21;24378:5;24363:21;:::i;:::-;24356:5;24353:32;24343:60;;24399:1;24396;24389:12;24343:60;24293:116;:::o;24415:137::-;24469:5;24500:6;24494:13;24485:22;;24516:30;24540:5;24516:30;:::i;:::-;24415:137;;;;:::o;24558:345::-;24625:6;24674:2;24662:9;24653:7;24649:23;24645:32;24642:119;;;24680:79;;:::i;:::-;24642:119;24800:1;24825:61;24878:7;24869:6;24858:9;24854:22;24825:61;:::i;:::-;24815:71;;24771:125;24558:345;;;;:::o;24909:225::-;25049:34;25045:1;25037:6;25033:14;25026:58;25118:8;25113:2;25105:6;25101:15;25094:33;24909:225;:::o;25140:366::-;25282:3;25303:67;25367:2;25362:3;25303:67;:::i;:::-;25296:74;;25379:93;25468:3;25379:93;:::i;:::-;25497:2;25492:3;25488:12;25481:19;;25140:366;;;:::o;25512:419::-;25678:4;25716:2;25705:9;25701:18;25693:26;;25765:9;25759:4;25755:20;25751:1;25740:9;25736:17;25729:47;25793:131;25919:4;25793:131;:::i;:::-;25785:139;;25512:419;;;:::o;25937:179::-;26077:31;26073:1;26065:6;26061:14;26054:55;25937:179;:::o;26122:366::-;26264:3;26285:67;26349:2;26344:3;26285:67;:::i;:::-;26278:74;;26361:93;26450:3;26361:93;:::i;:::-;26479:2;26474:3;26470:12;26463:19;;26122:366;;;:::o;26494:419::-;26660:4;26698:2;26687:9;26683:18;26675:26;;26747:9;26741:4;26737:20;26733:1;26722:9;26718:17;26711:47;26775:131;26901:4;26775:131;:::i;:::-;26767:139;;26494:419;;;:::o;26919:224::-;27059:34;27055:1;27047:6;27043:14;27036:58;27128:7;27123:2;27115:6;27111:15;27104:32;26919:224;:::o;27149:366::-;27291:3;27312:67;27376:2;27371:3;27312:67;:::i;:::-;27305:74;;27388:93;27477:3;27388:93;:::i;:::-;27506:2;27501:3;27497:12;27490:19;;27149:366;;;:::o;27521:419::-;27687:4;27725:2;27714:9;27710:18;27702:26;;27774:9;27768:4;27764:20;27760:1;27749:9;27745:17;27738:47;27802:131;27928:4;27802:131;:::i;:::-;27794:139;;27521:419;;;:::o;27946:180::-;28086:32;28082:1;28074:6;28070:14;28063:56;27946:180;:::o;28132:366::-;28274:3;28295:67;28359:2;28354:3;28295:67;:::i;:::-;28288:74;;28371:93;28460:3;28371:93;:::i;:::-;28489:2;28484:3;28480:12;28473:19;;28132:366;;;:::o;28504:419::-;28670:4;28708:2;28697:9;28693:18;28685:26;;28757:9;28751:4;28747:20;28743:1;28732:9;28728:17;28721:47;28785:131;28911:4;28785:131;:::i;:::-;28777:139;;28504:419;;;:::o;28929:191::-;28969:3;28988:20;29006:1;28988:20;:::i;:::-;28983:25;;29022:20;29040:1;29022:20;:::i;:::-;29017:25;;29065:1;29062;29058:9;29051:16;;29086:3;29083:1;29080:10;29077:36;;;29093:18;;:::i;:::-;29077:36;28929:191;;;;:::o;29126:178::-;29266:30;29262:1;29254:6;29250:14;29243:54;29126:178;:::o;29310:366::-;29452:3;29473:67;29537:2;29532:3;29473:67;:::i;:::-;29466:74;;29549:93;29638:3;29549:93;:::i;:::-;29667:2;29662:3;29658:12;29651:19;;29310:366;;;:::o;29682:419::-;29848:4;29886:2;29875:9;29871:18;29863:26;;29935:9;29929:4;29925:20;29921:1;29910:9;29906:17;29899:47;29963:131;30089:4;29963:131;:::i;:::-;29955:139;;29682:419;;;:::o;30107:178::-;30247:30;30243:1;30235:6;30231:14;30224:54;30107:178;:::o;30291:366::-;30433:3;30454:67;30518:2;30513:3;30454:67;:::i;:::-;30447:74;;30530:93;30619:3;30530:93;:::i;:::-;30648:2;30643:3;30639:12;30632:19;;30291:366;;;:::o;30663:419::-;30829:4;30867:2;30856:9;30852:18;30844:26;;30916:9;30910:4;30906:20;30902:1;30891:9;30887:17;30880:47;30944:131;31070:4;30944:131;:::i;:::-;30936:139;;30663:419;;;:::o;31088:176::-;31228:28;31224:1;31216:6;31212:14;31205:52;31088:176;:::o;31270:366::-;31412:3;31433:67;31497:2;31492:3;31433:67;:::i;:::-;31426:74;;31509:93;31598:3;31509:93;:::i;:::-;31627:2;31622:3;31618:12;31611:19;;31270:366;;;:::o;31642:419::-;31808:4;31846:2;31835:9;31831:18;31823:26;;31895:9;31889:4;31885:20;31881:1;31870:9;31866:17;31859:47;31923:131;32049:4;31923:131;:::i;:::-;31915:139;;31642:419;;;:::o;32067:225::-;32207:34;32203:1;32195:6;32191:14;32184:58;32276:8;32271:2;32263:6;32259:15;32252:33;32067:225;:::o;32298:366::-;32440:3;32461:67;32525:2;32520:3;32461:67;:::i;:::-;32454:74;;32537:93;32626:3;32537:93;:::i;:::-;32655:2;32650:3;32646:12;32639:19;;32298:366;;;:::o;32670:419::-;32836:4;32874:2;32863:9;32859:18;32851:26;;32923:9;32917:4;32913:20;32909:1;32898:9;32894:17;32887:47;32951:131;33077:4;32951:131;:::i;:::-;32943:139;;32670:419;;;:::o;33095:182::-;33235:34;33231:1;33223:6;33219:14;33212:58;33095:182;:::o;33283:366::-;33425:3;33446:67;33510:2;33505:3;33446:67;:::i;:::-;33439:74;;33522:93;33611:3;33522:93;:::i;:::-;33640:2;33635:3;33631:12;33624:19;;33283:366;;;:::o;33655:419::-;33821:4;33859:2;33848:9;33844:18;33836:26;;33908:9;33902:4;33898:20;33894:1;33883:9;33879:17;33872:47;33936:131;34062:4;33936:131;:::i;:::-;33928:139;;33655:419;;;:::o;34080:181::-;34220:33;34216:1;34208:6;34204:14;34197:57;34080:181;:::o;34267:366::-;34409:3;34430:67;34494:2;34489:3;34430:67;:::i;:::-;34423:74;;34506:93;34595:3;34506:93;:::i;:::-;34624:2;34619:3;34615:12;34608:19;;34267:366;;;:::o;34639:419::-;34805:4;34843:2;34832:9;34828:18;34820:26;;34892:9;34886:4;34882:20;34878:1;34867:9;34863:17;34856:47;34920:131;35046:4;34920:131;:::i;:::-;34912:139;;34639:419;;;:::o;35064:166::-;35204:18;35200:1;35192:6;35188:14;35181:42;35064:166;:::o;35236:366::-;35378:3;35399:67;35463:2;35458:3;35399:67;:::i;:::-;35392:74;;35475:93;35564:3;35475:93;:::i;:::-;35593:2;35588:3;35584:12;35577:19;;35236:366;;;:::o;35608:419::-;35774:4;35812:2;35801:9;35797:18;35789:26;;35861:9;35855:4;35851:20;35847:1;35836:9;35832:17;35825:47;35889:131;36015:4;35889:131;:::i;:::-;35881:139;;35608:419;;;:::o;36033:180::-;36081:77;36078:1;36071:88;36178:4;36175:1;36168:15;36202:4;36199:1;36192:15
Swarm Source
ipfs://b2ebf05e09360a0ff4d65b0f4fb6c82de78b65281b7396056f4314b8d6f16f3b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.