More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 999 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Simple Withdraw | 13631813 | 1018 days ago | IN | 0 ETH | 0.02924983 | ||||
Withdraw Acumula... | 12959900 | 1122 days ago | IN | 0 ETH | 0.00350092 | ||||
Set Fees Destina... | 12959897 | 1122 days ago | IN | 0 ETH | 0.00497026 | ||||
Simple Withdraw | 12840782 | 1141 days ago | IN | 0 ETH | 0.00579334 | ||||
Simple Withdraw | 12778181 | 1151 days ago | IN | 0 ETH | 0.00985276 | ||||
Simple Withdraw | 12718922 | 1160 days ago | IN | 0 ETH | 0.00500334 | ||||
Simple Withdraw | 12652701 | 1170 days ago | IN | 0 ETH | 0.00378071 | ||||
Simple Withdraw | 12639345 | 1172 days ago | IN | 0 ETH | 0.00320787 | ||||
Simple Withdraw | 12577072 | 1182 days ago | IN | 0 ETH | 0.00433371 | ||||
Simple Withdraw | 12552784 | 1186 days ago | IN | 0 ETH | 0.00443221 | ||||
Simple Withdraw | 12536682 | 1188 days ago | IN | 0 ETH | 0.00435354 | ||||
Simple Withdraw | 12529283 | 1189 days ago | IN | 0 ETH | 0.00418597 | ||||
Simple Withdraw | 12509338 | 1193 days ago | IN | 0 ETH | 0.00787948 | ||||
Simple Withdraw | 12502674 | 1194 days ago | IN | 0 ETH | 0.00869002 | ||||
Simple Withdraw | 12488699 | 1196 days ago | IN | 0 ETH | 0.00773174 | ||||
Simple Withdraw | 12457370 | 1201 days ago | IN | 0 ETH | 0.01403533 | ||||
Simple Withdraw | 12442828 | 1203 days ago | IN | 0 ETH | 0.01361055 | ||||
Simple Withdraw | 12440630 | 1203 days ago | IN | 0 ETH | 0.01713922 | ||||
Simple Withdraw | 12439077 | 1203 days ago | IN | 0 ETH | 0.01581024 | ||||
Simple Withdraw | 12439047 | 1203 days ago | IN | 0 ETH | 0.01723638 | ||||
Simple Withdraw | 12438934 | 1203 days ago | IN | 0 ETH | 0.01699014 | ||||
Simple Withdraw | 12435260 | 1204 days ago | IN | 0 ETH | 0.02635041 | ||||
Simple Withdraw | 12431684 | 1205 days ago | IN | 0 ETH | 0.02176773 | ||||
Simple Withdraw | 12403964 | 1209 days ago | IN | 0 ETH | 0.02681488 | ||||
Simple Withdraw | 12401411 | 1209 days ago | IN | 0 ETH | 0.02268426 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
AlohaStaking
Compiler Version
v0.6.5+commit.f956cc89
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-03-01 */ // File: @openzeppelin/contracts/GSN/Context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.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. */ 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/math/SafeMath.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool); /** * @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); } // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.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]. */ 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 () internal { _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 make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: contracts/IAlohaNFT.sol pragma solidity ^0.6.0; interface IAlohaNFT { function awardItem( address wallet, uint256 tokenImage, uint256 tokenRarity, uint256 tokenBackground ) external returns (uint256); } // File: contracts/AlohaStaking.sol pragma solidity 0.6.5; pragma experimental ABIEncoderV2; contract AlohaStaking is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeMath for uint8; /* Events */ event SettedPool( uint256 indexed alohaAmount, uint256 indexed erc20Amount, uint256 duration, uint256 rarity, uint256 date ); event Staked( address indexed wallet, address indexed erc20Address, uint256 rarity, uint256 endDate, uint256 tokenImage, uint256 tokenBackground, uint256 alohaAmount, uint256 erc20Amount, uint256 date ); event Withdrawal( address indexed wallet, address indexed erc20Address, uint256 rarity, uint256 originalAlohaAmount, uint256 originalErc20Amount, uint256 receivedAlohaAmount, uint256 receivedErc20Amount, uint256 erc721Id, uint256 date ); event Transfered( address indexed wallet, address indexed erc20Address, uint256 amount, uint256 date ); /* Vars */ uint256 public fee; address public alohaERC20; address public alohaERC721; uint256 public backgrounds; address[] public feesDestinators; uint256[] public feesPercentages; struct Pool { uint256 alohaAmount; uint256 erc20Amount; // 0 when is not a PairPool uint256 duration; uint256 rarity; } struct Stake { uint256 endDate; uint256 tokenImage; uint256 tokenBackground; uint256 alohaAmount; uint256 erc20Amount; // 0 when is not a PairPool } // image => rarity mapping (uint256 => uint256) public rewardsMap; // rarity => [image] mapping (uint256 => uint256[]) public rarityByImages; // rarity => totalImages mapping (uint256 => uint256) public rarityByImagesTotal; // erc20Address => rarity => Pool mapping (address => mapping(uint256 => Pool)) public poolsMap; // userAddress => erc20Address => rarity => Stake mapping (address => mapping(address => mapping(uint256 => Stake))) public stakingsMap; // erc20Address => totalStaked mapping (address => uint256) public totalStaked; /* Modifiers */ modifier imageNotExists(uint256 _image) { require( !_existsReward(_image), "AlohaStaking: Image for reward already exists" ); _; } modifier validRarity(uint256 _rarity) { require( _rarity >= 1 && _rarity <= 3, "AlohaStaking: Rarity must be 1, 2 or 3" ); _; } modifier poolExists(address _erc20, uint256 _rarity) { require( _existsPool(_erc20, _rarity), "AlohaStaking: Pool for ERC20 Token and rarity not exists" ); _; } modifier rarityAvailable(uint256 _rarity) { require( !(rarityByImagesTotal[_rarity] == 0), "AlohaStaking: Rarity not available" ); _; } modifier addressNotInStake(address _userAddress, address _erc20, uint256 _rarity) { require( (stakingsMap[msg.sender][_erc20][_rarity].endDate == 0), "AlohaStaking: Address already stakes in this pool" ); _; } modifier addressInStake(address _userAddress, address _erc20, uint256 _rarity) { require( !(stakingsMap[msg.sender][_erc20][_rarity].endDate == 0), "AlohaStaking: Address not stakes in this pool" ); _; } modifier stakeEnded(address _userAddress, address _erc20, uint256 _rarity) { require( (_getTime() > stakingsMap[msg.sender][_erc20][_rarity].endDate), "AlohaStaking: Stake duration has not ended yet" ); _; } /* Public Functions */ constructor( address _alohaERC20, address _alohaERC721, uint256 _backgrounds, uint256 _fee ) public { require(address(_alohaERC20) != address(0)); require(address(_alohaERC721) != address(0)); alohaERC20 = _alohaERC20; alohaERC721 = _alohaERC721; backgrounds = _backgrounds; fee = _fee; } /** * @dev Stake ALOHA to get a random token of the selected rarity */ function simpleStake( uint256 _tokenRarity ) public { pairStake(alohaERC20, _tokenRarity); } /** * @dev Stake ALOHA/TOKEN to get a random token of the selected rarity */ function pairStake( address _erc20Token, uint256 _tokenRarity ) public rarityAvailable(_tokenRarity) poolExists(_erc20Token, _tokenRarity) addressNotInStake(msg.sender, _erc20Token, _tokenRarity) { uint256 randomImage = rarityByImages[_tokenRarity][_randomA(rarityByImagesTotal[_tokenRarity]) - 1]; uint256 _endDate = _getTime() + poolsMap[_erc20Token][_tokenRarity].duration; uint256 randomBackground = _randomB(backgrounds); uint256 alohaAmount = poolsMap[_erc20Token][_tokenRarity].alohaAmount; uint256 erc20Amount = poolsMap[_erc20Token][_tokenRarity].erc20Amount; _transferStake(msg.sender, alohaERC20, alohaAmount); totalStaked[alohaERC20] += alohaAmount; if (_erc20Token != alohaERC20) { _transferStake(msg.sender, _erc20Token, erc20Amount); totalStaked[_erc20Token] += erc20Amount; } stakingsMap[msg.sender][_erc20Token][_tokenRarity] = Stake({ endDate: _endDate, tokenImage: randomImage, tokenBackground: randomBackground, alohaAmount: alohaAmount, erc20Amount: erc20Amount }); emit Staked( msg.sender, _erc20Token, _tokenRarity, _endDate, randomImage, randomBackground, alohaAmount, erc20Amount, _getTime() ); } /** * @dev Withdraw ALOHA and claim your random NFT for the selected rarity */ function simpleWithdraw( uint256 _tokenRarity ) public { pairWithdraw(alohaERC20, _tokenRarity); } /** * @dev Withdraw ALOHA/TOKEN and claim your random NFT for the selected rarity */ function pairWithdraw( address _erc20Token, uint256 _tokenRarity ) public nonReentrant() addressInStake(msg.sender, _erc20Token, _tokenRarity) stakeEnded(msg.sender, _erc20Token, _tokenRarity) { _withdraw(_erc20Token, _tokenRarity, true); } /** * @dev Withdra ALOHA without generating your NFT. This can be done before release time is reached. */ function forceSimpleWithdraw( uint256 _tokenRarity ) public { forcePairWithdraw(alohaERC20, _tokenRarity); } /** * @dev Withdraw ALOHA/TOKEN without generating your NFT. This can be done before release time is reached. */ function forcePairWithdraw( address _erc20Token, uint256 _tokenRarity ) public nonReentrant() addressInStake(msg.sender, _erc20Token, _tokenRarity) { _withdraw(_erc20Token, _tokenRarity, false); } /** * @dev Returns how many fees we collected from withdraws of one token. */ function getAcumulatedFees(address _erc20Token) public returns (uint256) { uint256 balance = IERC20(_erc20Token).balanceOf(address(this)); if (balance > 0) { return balance.sub(totalStaked[_erc20Token]); } return 0; } /** * @dev Send all the acumulated fees for one token to the fee destinators. */ function withdrawAcumulatedFees(address _erc20Token) public { uint256 total = getAcumulatedFees(_erc20Token); for (uint8 i = 0; i < feesDestinators.length; i++) { IERC20(_erc20Token).transfer( feesDestinators[i], total.mul(feesPercentages[i]).div(100) ); } } /* Governance Functions */ /** * @dev Sets the fee for every withdraw. */ function setFee(uint256 _fee) public onlyOwner() { fee = _fee; } /** * @dev Adds a new NFT to the pools, so users can stake for it. */ function createReward( uint256 _tokenImage, uint256 _tokenRarity ) public onlyOwner() imageNotExists(_tokenImage) validRarity(_tokenRarity) { rewardsMap[_tokenImage] = _tokenRarity; rarityByImages[_tokenRarity].push(_tokenImage); rarityByImagesTotal[_tokenRarity] += 1; } /** * @dev Configure staking time and amount in ALOHA pool for one rarity. */ function setSimplePool( uint256 _alohaAmount, uint256 _duration, uint256 _tokenRarity ) public onlyOwner() rarityAvailable(_tokenRarity) { poolsMap[alohaERC20][_tokenRarity] = Pool({ alohaAmount: _alohaAmount, erc20Amount: 0, duration: _duration, rarity: _tokenRarity }); emit SettedPool( _alohaAmount, 0, _duration, _tokenRarity, _getTime() ); } /** * @dev Configure staking time and amount in ALOHA/TOKEN pool for one rarity. */ function setPairPool( uint256 _alohaAmount, address _erc20Address, uint256 _erc20Amount, uint256 _duration, uint256 _tokenRarity ) public onlyOwner() rarityAvailable(_tokenRarity) { require(address(_erc20Address) != address(0)); poolsMap[_erc20Address][_tokenRarity] = Pool({ alohaAmount: _alohaAmount, erc20Amount: _erc20Amount, duration: _duration, rarity: _tokenRarity }); emit SettedPool( _alohaAmount, _erc20Amount, _duration, _tokenRarity, _getTime() ); } /** * @dev Creates a new background for NFTs. New stakers could get this background. */ function addBackground(uint8 increase) public onlyOwner() { backgrounds += increase; } /** * @dev Configure how to distribute the fees for user's withdraws. */ function setFeesDestinatorsWithPercentages( address[] memory _destinators, uint256[] memory _percentages ) public onlyOwner() { require(_destinators.length <= 3, "AlohaStaking: Destinators lenght more then 3"); require(_percentages.length <= 3, "AlohaStaking: Percentages lenght more then 3"); require(_destinators.length == _percentages.length, "AlohaStaking: Destinators and percentageslenght are not equals"); uint256 total = 0; for (uint8 i = 0; i < _percentages.length; i++) { total += _percentages[i]; } require(total == 100, "AlohaStaking: Percentages sum must be 100"); feesDestinators = _destinators; feesPercentages = _percentages; } /* Internal functions */ function _existsReward(uint256 _tokenImage) internal view returns (bool) { return rewardsMap[_tokenImage] != 0; } function _existsPool(address _erc20Token, uint256 _rarity) internal view returns (bool) { return poolsMap[_erc20Token][_rarity].duration != 0; } function _getTime() internal view returns (uint256) { return block.timestamp; } /** * @dev Apply withdraw fees to the amounts. */ function _applyStakeFees( address _erc20Token, uint256 _tokenRarity ) internal view returns ( uint256 _alohaAmountAfterFees, uint256 _erc20AmountAfterFees ) { uint256 alohaAmount = poolsMap[_erc20Token][_tokenRarity].alohaAmount; uint256 alohaAmountAfterFees = alohaAmount.sub(alohaAmount.mul(fee).div(10000)); uint256 erc20AmountAfterFees = 0; if (_erc20Token != alohaERC20) { uint256 erc20Amount = poolsMap[_erc20Token][_tokenRarity].erc20Amount; erc20AmountAfterFees = erc20Amount.sub(erc20Amount.mul(fee).div(10000)); } return (alohaAmountAfterFees, erc20AmountAfterFees); } /** * @dev Transfers erc20 tokens to this contract. */ function _transferStake( address _wallet, address _erc20, uint256 _amount ) internal { require(IERC20(_erc20).transferFrom(_wallet, address(this), _amount), "Must approve the ERC20 first"); emit Transfered(_wallet, _erc20, _amount, _getTime()); } /** * @dev Transfers erc20 tokens from this contract to the wallet. */ function _transferWithdrawRewards( address _wallet, address _erc20, uint256 _amount ) internal { require(IERC20(_erc20).transfer(_wallet, _amount), "Must approve the ERC20 first"); emit Transfered(_wallet, _erc20, _amount, _getTime()); } /** * @dev Clear the stake state for a wallet and a rarity. */ function _clearStake(address wallet, address _erc20Token, uint256 _tokenRarity) internal { stakingsMap[wallet][_erc20Token][_tokenRarity].endDate = 0; stakingsMap[wallet][_erc20Token][_tokenRarity].tokenImage = 0; stakingsMap[wallet][_erc20Token][_tokenRarity].tokenBackground = 0; stakingsMap[wallet][_erc20Token][_tokenRarity].alohaAmount = 0; stakingsMap[wallet][_erc20Token][_tokenRarity].erc20Amount = 0; } /** * @dev Withdraw tokens and mints the NFT if claimed. */ function _withdraw(address _erc20Token, uint256 _tokenRarity, bool claimReward) internal { uint256 alohaAmount = poolsMap[_erc20Token][_tokenRarity].alohaAmount; uint256 erc20Amount = poolsMap[_erc20Token][_tokenRarity].erc20Amount; uint256 alohaAmountAfterFees; uint256 erc20AmountAfterFees; if (!claimReward) { alohaAmountAfterFees = alohaAmount; erc20AmountAfterFees = erc20Amount; } else { (alohaAmountAfterFees, erc20AmountAfterFees) = _applyStakeFees(_erc20Token, _tokenRarity); } _transferWithdrawRewards(msg.sender, alohaERC20, alohaAmountAfterFees); totalStaked[alohaERC20] -= alohaAmount; if (_erc20Token != alohaERC20) { _transferWithdrawRewards(msg.sender, _erc20Token, erc20AmountAfterFees); totalStaked[_erc20Token] -= erc20Amount; } uint256 tokenId = 0; if (claimReward) { uint256 image = stakingsMap[msg.sender][_erc20Token][_tokenRarity].tokenImage; uint256 brackground = stakingsMap[msg.sender][_erc20Token][_tokenRarity].tokenBackground; tokenId = IAlohaNFT(alohaERC721).awardItem(msg.sender, image, _tokenRarity, brackground); } emit Withdrawal( msg.sender, _erc20Token, _tokenRarity, alohaAmount, erc20Amount, alohaAmountAfterFees, erc20AmountAfterFees, tokenId, _getTime() ); _clearStake(msg.sender, _erc20Token, _tokenRarity); } /** * @dev Generates a "random" number using the numbers of backgrounds that we have. */ function _randomA(uint256 _limit) internal view returns (uint8) { uint256 _gasleft = gasleft(); bytes32 _blockhash = blockhash(block.number-1); bytes32 _structHash = keccak256( abi.encode( _blockhash, backgrounds, _gasleft, _limit ) ); uint256 _randomNumber = uint256(_structHash); assembly {_randomNumber := add(mod(_randomNumber, _limit),1)} return uint8(_randomNumber); } /** * @dev Generates a "random" number using the current block timestamp. */ function _randomB(uint256 _limit) internal view returns (uint256) { uint256 _gasleft = gasleft(); bytes32 _blockhash = blockhash(block.number-1); bytes32 _structHash = keccak256( abi.encode( _blockhash, _getTime(), _gasleft, _limit ) ); uint256 _randomNumber = uint256(_structHash); assembly {_randomNumber := add(mod(_randomNumber, _limit),1)} return uint8(_randomNumber); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_alohaERC20","type":"address"},{"internalType":"address","name":"_alohaERC721","type":"address"},{"internalType":"uint256","name":"_backgrounds","type":"uint256"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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":true,"internalType":"uint256","name":"alohaAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"erc20Amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rarity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"date","type":"uint256"}],"name":"SettedPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":true,"internalType":"address","name":"erc20Address","type":"address"},{"indexed":false,"internalType":"uint256","name":"rarity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenImage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenBackground","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"alohaAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"erc20Amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"date","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":true,"internalType":"address","name":"erc20Address","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"date","type":"uint256"}],"name":"Transfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":true,"internalType":"address","name":"erc20Address","type":"address"},{"indexed":false,"internalType":"uint256","name":"rarity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"originalAlohaAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"originalErc20Amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAlohaAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedErc20Amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"erc721Id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"date","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"uint8","name":"increase","type":"uint8"}],"name":"addBackground","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"alohaERC20","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alohaERC721","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"backgrounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenImage","type":"uint256"},{"internalType":"uint256","name":"_tokenRarity","type":"uint256"}],"name":"createReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feesDestinators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feesPercentages","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20Token","type":"address"},{"internalType":"uint256","name":"_tokenRarity","type":"uint256"}],"name":"forcePairWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenRarity","type":"uint256"}],"name":"forceSimpleWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20Token","type":"address"}],"name":"getAcumulatedFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20Token","type":"address"},{"internalType":"uint256","name":"_tokenRarity","type":"uint256"}],"name":"pairStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20Token","type":"address"},{"internalType":"uint256","name":"_tokenRarity","type":"uint256"}],"name":"pairWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolsMap","outputs":[{"internalType":"uint256","name":"alohaAmount","type":"uint256"},{"internalType":"uint256","name":"erc20Amount","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"rarity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rarityByImages","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rarityByImagesTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardsMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_destinators","type":"address[]"},{"internalType":"uint256[]","name":"_percentages","type":"uint256[]"}],"name":"setFeesDestinatorsWithPercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_alohaAmount","type":"uint256"},{"internalType":"address","name":"_erc20Address","type":"address"},{"internalType":"uint256","name":"_erc20Amount","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_tokenRarity","type":"uint256"}],"name":"setPairPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_alohaAmount","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_tokenRarity","type":"uint256"}],"name":"setSimplePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenRarity","type":"uint256"}],"name":"simpleStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenRarity","type":"uint256"}],"name":"simpleWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakingsMap","outputs":[{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"uint256","name":"tokenImage","type":"uint256"},{"internalType":"uint256","name":"tokenBackground","type":"uint256"},{"internalType":"uint256","name":"alohaAmount","type":"uint256"},{"internalType":"uint256","name":"erc20Amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalStaked","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":"address","name":"_erc20Token","type":"address"}],"name":"withdrawAcumulatedFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620023ef380380620023ef833981016040819052620000349162000120565b6000620000496001600160e01b03620000fe16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180556001600160a01b038416620000ab57600080fd5b6001600160a01b038316620000bf57600080fd5b600380546001600160a01b039586166001600160a01b031991821617909155600480549490951693169290921790925560059190915560025562000169565b3390565b80516001600160a01b03811681146200011a57600080fd5b92915050565b6000806000806080858703121562000136578384fd5b62000142868662000102565b935062000153866020870162000102565b6040860151606090960151949790965092505050565b61227680620001796000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806374c83ab811610104578063af57b4e4116100a2578063e0ab764911610071578063e0ab7649146103b3578063e4a0edb0146103c6578063ed4c1e3e146103d9578063f2fde38b146103ec576101cf565b8063af57b4e41461037d578063cc66473314610390578063dcc85630146103a3578063ddca3f43146103ab576101cf565b80638ead17df116100de5780638ead17df146103315780639586befc146103445780639bfd8d61146103575780639f00f3551461036a576101cf565b806374c83ab8146103035780637dbedad5146103165780638da5cb5b14610329576101cf565b80634a0805b01161017157806356793bc71161014b57806356793bc7146102a157806369fe0e2d146102c4578063715018a6146102d7578063729ae5f7146102df576101cf565b80634a0805b0146102685780634bbec1ce1461027b5780634c5879df1461028e576101cf565b806323505c4a116101ad57806323505c4a146102255780632af7c5c51461023a5780632bfc4eaa1461024d5780633f54acef14610260576101cf565b8063013e00c5146101d45780631230e161146101e95780631a8812bd146101fc575b600080fd5b6101e76101e2366004611bad565b6103ff565b005b6101e76101f7366004611bd8565b61050e565b61020f61020a366004611b16565b610554565b60405161021c9190612164565b60405180910390f35b61022d610566565b60405161021c9190611bf9565b61020f610248366004611b16565b610575565b61022d61025b366004611b16565b610587565b61022d6105ae565b6101e7610276366004611b16565b6105bd565b61020f610289366004611b16565b6105d6565b6101e761029c366004611a0a565b6105f4565b6102b46102af366004611a0a565b61092d565b60405161021c9493929190611c70565b6101e76102d2366004611b16565b61095f565b6101e7610999565b6102f26102ed3660046119ca565b610a18565b60405161021c959493929190612191565b61020f6103113660046119af565b610a58565b6101e7610324366004611b8c565b610b1c565b61022d610bec565b6101e761033f366004611a0a565b610bfc565b6101e7610352366004611b16565b610c87565b61020f6103653660046119af565b610c9d565b6101e76103783660046119af565b610caf565b6101e761038b366004611b46565b610dc4565b61020f61039e366004611b8c565b610edf565b61020f610f0d565b61020f610f13565b6101e76103c1366004611a0a565b610f19565b6101e76103d4366004611b16565b610ffc565b6101e76103e7366004611a34565b611012565b6101e76103fa3660046119af565b611132565b6104076111e8565b6000546001600160a01b0390811691161461043d5760405162461bcd60e51b815260040161043490611f78565b60405180910390fd5b6000818152600a6020526040902054819061046a5760405162461bcd60e51b81526004016104349061208e565b604080516080810182528581526000602080830182815283850188815260608501888152600380546001600160a01b03168652600b85528786208a8752909452958420945185559051600185015551600284015592519190920155847fed11b82c749170a371e37a9faea7ec5c4ef5b37083d20a458a8557262dce8e5085856104f16111ec565b6040516105009392919061217b565b60405180910390a350505050565b6105166111e8565b6000546001600160a01b039081169116146105435760405162461bcd60e51b815260040161043490611f78565b6005805460ff909216919091019055565b60086020526000908152604090205481565b6003546001600160a01b031681565b600a6020526000908152604090205481565b6006818154811061059457fe5b6000918252602090912001546001600160a01b0316905081565b6004546001600160a01b031681565b6003546105d3906001600160a01b031682610f19565b50565b600781815481106105e357fe5b600091825260209091200154905081565b6000818152600a602052604090205481906106215760405162461bcd60e51b81526004016104349061208e565b828261062d82826111f0565b6106495760405162461bcd60e51b815260040161043490611e89565b336000818152600c602090815260408083206001600160a01b038a168452825280832088845290915290205486908690156106965760405162461bcd60e51b815260040161043490611ee6565b6000878152600960209081526040808320600a9092528220546001906106bb90611220565b0360ff16815481106106c957fe5b60009182526020808320909101546001600160a01b038c168352600b825260408084208c8552909252908220600201549092506107046111ec565b0190506000610714600554611272565b90506000600b60008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c81526020019081526020016000206000015490506000600b60008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d81526020019081526020016000206001015490506107b233600360009054906101000a90046001600160a01b0316846112ca565b600380546001600160a01b039081166000908152600d6020526040902080548501905590548e821691161461080b576107ec338e836112ca565b6001600160a01b038d166000908152600d602052604090208054820190555b6040518060a0016040528085815260200186815260200184815260200183815260200182815250600c6000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f6001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508c6001600160a01b0316336001600160a01b03167ff2760ce282eaf68c77ca7d18f9560ed8c991e4c3cec3a7b8a912ad4ffe6456998e87898888886109036111ec565b60405161091697969594939291906121b4565b60405180910390a350505050505050505050505050565b600b60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b6109676111e8565b6000546001600160a01b039081169116146109945760405162461bcd60e51b815260040161043490611f78565b600255565b6109a16111e8565b6000546001600160a01b039081169116146109ce5760405162461bcd60e51b815260040161043490611f78565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600c602090815260009384526040808520825292845282842090528252902080546001820154600283015460038401546004909401549293919290919085565b600080826001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610a879190611bf9565b60206040518083038186803b158015610a9f57600080fd5b505afa158015610ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad79190611b2e565b90508015610b11576001600160a01b0383166000908152600d6020526040902054610b0990829063ffffffff6113c116565b915050610b17565b60009150505b919050565b610b246111e8565b6000546001600160a01b03908116911614610b515760405162461bcd60e51b815260040161043490611f78565b81610b5b8161140a565b15610b785760405162461bcd60e51b815260040161043490611fad565b8160018110158015610b8b575060038111155b610ba75760405162461bcd60e51b815260040161043490612048565b50506000828152600860209081526040808320849055838352600982528083208054600181810183559185528385200195909555928252600a90522080549091019055565b6000546001600160a01b03165b90565b60026001541415610c1f5760405162461bcd60e51b81526004016104349061212d565b6002600155336000818152600c602090815260408083206001600160a01b0387168452825280832085845290915290205483908390610c705760405162461bcd60e51b815260040161043490611cde565b610c7c8585600061141e565b505060018055505050565b6003546105d3906001600160a01b031682610bfc565b600d6020526000908152604090205481565b6000610cba82610a58565b905060005b60065460ff82161015610dbf57826001600160a01b031663a9059cbb60068360ff1681548110610ceb57fe5b9060005260206000200160009054906101000a90046001600160a01b0316610d476064610d3b60078760ff1681548110610d2157fe5b90600052602060002001548861161090919063ffffffff16565b9063ffffffff61164a16565b6040518363ffffffff1660e01b8152600401610d64929190611c57565b602060405180830381600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db69190611af6565b50600101610cbf565b505050565b610dcc6111e8565b6000546001600160a01b03908116911614610df95760405162461bcd60e51b815260040161043490611f78565b6000818152600a60205260409020548190610e265760405162461bcd60e51b81526004016104349061208e565b6001600160a01b038516610e3957600080fd5b604080516080810182528781526020808201878152828401878152606084018781526001600160a01b038b166000908152600b85528681208982529094529490922092518355516001830155516002820155905160039091015583867fed11b82c749170a371e37a9faea7ec5c4ef5b37083d20a458a8557262dce8e508585610ec06111ec565b604051610ecf9392919061217b565b60405180910390a3505050505050565b60096020528160005260406000208181548110610ef857fe5b90600052602060002001600091509150505481565b60055481565b60025481565b60026001541415610f3c5760405162461bcd60e51b81526004016104349061212d565b6002600155336000818152600c602090815260408083206001600160a01b0387168452825280832085845290915290205483908390610f8d5760405162461bcd60e51b815260040161043490611cde565b336000818152600c602090815260408083206001600160a01b038a168452825280832088845290915290205486908690610fc56111ec565b11610fe25760405162461bcd60e51b815260040161043490611ffa565b610fee8888600161141e565b505060018055505050505050565b6003546105d3906001600160a01b0316826105f4565b61101a6111e8565b6000546001600160a01b039081169116146110475760405162461bcd60e51b815260040161043490611f78565b6003825111156110695760405162461bcd60e51b815260040161043490611df4565b60038151111561108b5760405162461bcd60e51b815260040161043490611da8565b80518251146110ac5760405162461bcd60e51b8152600401610434906120d0565b6000805b82518160ff1610156110e457828160ff16815181106110cb57fe5b60200260200101518201915080806001019150506110b0565b50806064146111055760405162461bcd60e51b815260040161043490611e40565b8251611118906006906020860190611840565b50815161112c9060079060208501906118a5565b50505050565b61113a6111e8565b6000546001600160a01b039081169116146111675760405162461bcd60e51b815260040161043490611f78565b6001600160a01b03811661118d5760405162461bcd60e51b815260040161043490611d62565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b4290565b6001600160a01b0382166000908152600b6020908152604080832084845290915290206002015415155b92915050565b6000805a9050600060014303409050600081600554848760405160200161124a9493929190611c70565b60408051601f1981840301815291905280516020909101208590066001019350505050919050565b6000805a90506000194301406000816112896111ec565b848760405160200161129e9493929190611c70565b60408051601f19818403018152919052805160209091012060ff90869006600101169350505050919050565b6040516323b872dd60e01b81526001600160a01b038316906323b872dd906112fa90869030908690600401611c33565b602060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134c9190611af6565b6113685760405162461bcd60e51b815260040161043490611d2b565b816001600160a01b0316836001600160a01b03167f39dda5b8a8c7e010975f59f0be906b1f9ea4d755c65431f73d3e593342f3dc87836113a66111ec565b6040516113b492919061216d565b60405180910390a3505050565b600061140383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061168c565b9392505050565b600090815260086020526040902054151590565b6001600160a01b0383166000908152600b60209081526040808320858452909152812080546001909101549091808461145b57508290508161146b565b61146587876116b8565b90925090505b6003546114839033906001600160a01b03168461178d565b600380546001600160a01b039081166000908152600d602052604090208054879003905590548882169116146114de576114be33888361178d565b6001600160a01b0387166000908152600d60205260409020805484900390555b600085156115a657336000818152600c602090815260408083206001600160a01b038d811685529083528184208c855290925291829020600181015460029091015460048054945163e3d8394d60e01b8152929591949093169263e3d8394d9261154f929187918f91889101611c0d565b602060405180830381600087803b15801561156957600080fd5b505af115801561157d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a19190611b2e565b925050505b6001600160a01b038816337f9e2f80d97288876e5089a642e6b44b8e8d38f42267878aa611ecbfea68ea8fed8988888888886115e06111ec565b6040516115f397969594939291906121b4565b60405180910390a36116063389896117bb565b5050505050505050565b60008261161f5750600061121a565b8282028284828161162c57fe5b04146114035760405162461bcd60e51b815260040161043490611f37565b600061140383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611809565b600081848411156116b05760405162461bcd60e51b81526004016104349190611c8b565b505050900390565b6001600160a01b0382166000908152600b60209081526040808320848452909152812054600254829190829061170e906117019061271090610d3b90869063ffffffff61161016565b839063ffffffff6113c116565b6003549091506000906001600160a01b03888116911614611781576001600160a01b0387166000908152600b6020908152604080832089845290915290206001015460025461177d906117709061271090610d3b90859063ffffffff61161016565b829063ffffffff6113c116565b9150505b90969095509350505050565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906112fa9086908590600401611c57565b6001600160a01b039283166000908152600c60209081526040808320949095168252928352838120918152915290812081815560018101829055600281018290556003810182905560040155565b6000818361182a5760405162461bcd60e51b81526004016104349190611c8b565b50600083858161183657fe5b0495945050505050565b828054828255906000526020600020908101928215611895579160200282015b8281111561189557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611860565b506118a19291506118ec565b5090565b8280548282559060005260206000209081019282156118e0579160200282015b828111156118e05782518255916020019190600101906118c5565b506118a1929150611910565b610bf991905b808211156118a15780546001600160a01b03191681556001016118f2565b610bf991905b808211156118a15760008155600101611916565b80356001600160a01b038116811461121a57600080fd5b600082601f830112611951578081fd5b813561196461195f8261220b565b6121e4565b81815291506020808301908481018184028601820187101561198557600080fd5b60005b848110156119a457813584529282019290820190600101611988565b505050505092915050565b6000602082840312156119c0578081fd5b611403838361192a565b6000806000606084860312156119de578182fd5b83356119e98161222b565b925060208401356119f98161222b565b929592945050506040919091013590565b60008060408385031215611a1c578182fd5b611a26848461192a565b946020939093013593505050565b60008060408385031215611a46578182fd5b823567ffffffffffffffff80821115611a5d578384fd5b81850186601f820112611a6e578485fd5b80359250611a7e61195f8461220b565b80848252602080830192508084018a828389028701011115611a9e578889fd5b8894505b86851015611ac857611ab48b8261192a565b845260019490940193928101928101611aa2565b509096508701359350505080821115611adf578283fd5b50611aec85828601611941565b9150509250929050565b600060208284031215611b07578081fd5b81518015158114611403578182fd5b600060208284031215611b27578081fd5b5035919050565b600060208284031215611b3f578081fd5b5051919050565b600080600080600060a08688031215611b5d578081fd5b85359450611b6e876020880161192a565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215611b9e578182fd5b50508035926020909101359150565b600080600060608486031215611bc1578283fd5b505081359360208301359350604090920135919050565b600060208284031215611be9578081fd5b813560ff81168114611403578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b93845260208401929092526040830152606082015260800190565b6000602080835283518082850152825b81811015611cb757858101830151858201604001528201611c9b565b81811115611cc85783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602d908201527f416c6f68615374616b696e673a2041646472657373206e6f74207374616b657360408201526c081a5b881d1a1a5cc81c1bdbdb609a1b606082015260800190565b6020808252601c908201527f4d75737420617070726f76652074686520455243323020666972737400000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252602c908201527f416c6f68615374616b696e673a2050657263656e7461676573206c656e67687460408201526b206d6f7265207468656e203360a01b606082015260800190565b6020808252602c908201527f416c6f68615374616b696e673a2044657374696e61746f7273206c656e67687460408201526b206d6f7265207468656e203360a01b606082015260800190565b60208082526029908201527f416c6f68615374616b696e673a2050657263656e74616765732073756d206d7560408201526807374206265203130360bc1b606082015260800190565b60208082526038908201527f416c6f68615374616b696e673a20506f6f6c20666f7220455243323020546f6b60408201527f656e20616e6420726172697479206e6f74206578697374730000000000000000606082015260800190565b60208082526031908201527f416c6f68615374616b696e673a204164647265737320616c7265616479207374604082015270185ad95cc81a5b881d1a1a5cc81c1bdbdb607a1b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602d908201527f416c6f68615374616b696e673a20496d61676520666f7220726577617264206160408201526c6c72656164792065786973747360981b606082015260800190565b6020808252602e908201527f416c6f68615374616b696e673a205374616b65206475726174696f6e2068617360408201526d081b9bdd08195b991959081e595d60921b606082015260800190565b60208082526026908201527f416c6f68615374616b696e673a20526172697479206d75737420626520312c2060408201526532206f72203360d01b606082015260800190565b60208082526022908201527f416c6f68615374616b696e673a20526172697479206e6f7420617661696c61626040820152616c6560f01b606082015260800190565b6020808252603e908201527f416c6f68615374616b696e673a2044657374696e61746f727320616e6420706560408201527f7263656e74616765736c656e67687420617265206e6f7420657175616c730000606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b60405181810167ffffffffffffffff8111828210171561220357600080fd5b604052919050565b600067ffffffffffffffff821115612221578081fd5b5060209081020190565b6001600160a01b03811681146105d357600080fdfea26469706673582212203ea24b339020b92d324fd83aae624855fcf48b340f379f98753381b6067500e264736f6c63430006050033000000000000000000000000455f7ef6d8bcfc35f9337e85aee1b0600a59fabe0000000000000000000000009ad18b012bf83e3b0ccabcfa3d74a9bfb6889c770000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000012c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806374c83ab811610104578063af57b4e4116100a2578063e0ab764911610071578063e0ab7649146103b3578063e4a0edb0146103c6578063ed4c1e3e146103d9578063f2fde38b146103ec576101cf565b8063af57b4e41461037d578063cc66473314610390578063dcc85630146103a3578063ddca3f43146103ab576101cf565b80638ead17df116100de5780638ead17df146103315780639586befc146103445780639bfd8d61146103575780639f00f3551461036a576101cf565b806374c83ab8146103035780637dbedad5146103165780638da5cb5b14610329576101cf565b80634a0805b01161017157806356793bc71161014b57806356793bc7146102a157806369fe0e2d146102c4578063715018a6146102d7578063729ae5f7146102df576101cf565b80634a0805b0146102685780634bbec1ce1461027b5780634c5879df1461028e576101cf565b806323505c4a116101ad57806323505c4a146102255780632af7c5c51461023a5780632bfc4eaa1461024d5780633f54acef14610260576101cf565b8063013e00c5146101d45780631230e161146101e95780631a8812bd146101fc575b600080fd5b6101e76101e2366004611bad565b6103ff565b005b6101e76101f7366004611bd8565b61050e565b61020f61020a366004611b16565b610554565b60405161021c9190612164565b60405180910390f35b61022d610566565b60405161021c9190611bf9565b61020f610248366004611b16565b610575565b61022d61025b366004611b16565b610587565b61022d6105ae565b6101e7610276366004611b16565b6105bd565b61020f610289366004611b16565b6105d6565b6101e761029c366004611a0a565b6105f4565b6102b46102af366004611a0a565b61092d565b60405161021c9493929190611c70565b6101e76102d2366004611b16565b61095f565b6101e7610999565b6102f26102ed3660046119ca565b610a18565b60405161021c959493929190612191565b61020f6103113660046119af565b610a58565b6101e7610324366004611b8c565b610b1c565b61022d610bec565b6101e761033f366004611a0a565b610bfc565b6101e7610352366004611b16565b610c87565b61020f6103653660046119af565b610c9d565b6101e76103783660046119af565b610caf565b6101e761038b366004611b46565b610dc4565b61020f61039e366004611b8c565b610edf565b61020f610f0d565b61020f610f13565b6101e76103c1366004611a0a565b610f19565b6101e76103d4366004611b16565b610ffc565b6101e76103e7366004611a34565b611012565b6101e76103fa3660046119af565b611132565b6104076111e8565b6000546001600160a01b0390811691161461043d5760405162461bcd60e51b815260040161043490611f78565b60405180910390fd5b6000818152600a6020526040902054819061046a5760405162461bcd60e51b81526004016104349061208e565b604080516080810182528581526000602080830182815283850188815260608501888152600380546001600160a01b03168652600b85528786208a8752909452958420945185559051600185015551600284015592519190920155847fed11b82c749170a371e37a9faea7ec5c4ef5b37083d20a458a8557262dce8e5085856104f16111ec565b6040516105009392919061217b565b60405180910390a350505050565b6105166111e8565b6000546001600160a01b039081169116146105435760405162461bcd60e51b815260040161043490611f78565b6005805460ff909216919091019055565b60086020526000908152604090205481565b6003546001600160a01b031681565b600a6020526000908152604090205481565b6006818154811061059457fe5b6000918252602090912001546001600160a01b0316905081565b6004546001600160a01b031681565b6003546105d3906001600160a01b031682610f19565b50565b600781815481106105e357fe5b600091825260209091200154905081565b6000818152600a602052604090205481906106215760405162461bcd60e51b81526004016104349061208e565b828261062d82826111f0565b6106495760405162461bcd60e51b815260040161043490611e89565b336000818152600c602090815260408083206001600160a01b038a168452825280832088845290915290205486908690156106965760405162461bcd60e51b815260040161043490611ee6565b6000878152600960209081526040808320600a9092528220546001906106bb90611220565b0360ff16815481106106c957fe5b60009182526020808320909101546001600160a01b038c168352600b825260408084208c8552909252908220600201549092506107046111ec565b0190506000610714600554611272565b90506000600b60008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c81526020019081526020016000206000015490506000600b60008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d81526020019081526020016000206001015490506107b233600360009054906101000a90046001600160a01b0316846112ca565b600380546001600160a01b039081166000908152600d6020526040902080548501905590548e821691161461080b576107ec338e836112ca565b6001600160a01b038d166000908152600d602052604090208054820190555b6040518060a0016040528085815260200186815260200184815260200183815260200182815250600c6000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f6001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508c6001600160a01b0316336001600160a01b03167ff2760ce282eaf68c77ca7d18f9560ed8c991e4c3cec3a7b8a912ad4ffe6456998e87898888886109036111ec565b60405161091697969594939291906121b4565b60405180910390a350505050505050505050505050565b600b60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b6109676111e8565b6000546001600160a01b039081169116146109945760405162461bcd60e51b815260040161043490611f78565b600255565b6109a16111e8565b6000546001600160a01b039081169116146109ce5760405162461bcd60e51b815260040161043490611f78565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600c602090815260009384526040808520825292845282842090528252902080546001820154600283015460038401546004909401549293919290919085565b600080826001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610a879190611bf9565b60206040518083038186803b158015610a9f57600080fd5b505afa158015610ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad79190611b2e565b90508015610b11576001600160a01b0383166000908152600d6020526040902054610b0990829063ffffffff6113c116565b915050610b17565b60009150505b919050565b610b246111e8565b6000546001600160a01b03908116911614610b515760405162461bcd60e51b815260040161043490611f78565b81610b5b8161140a565b15610b785760405162461bcd60e51b815260040161043490611fad565b8160018110158015610b8b575060038111155b610ba75760405162461bcd60e51b815260040161043490612048565b50506000828152600860209081526040808320849055838352600982528083208054600181810183559185528385200195909555928252600a90522080549091019055565b6000546001600160a01b03165b90565b60026001541415610c1f5760405162461bcd60e51b81526004016104349061212d565b6002600155336000818152600c602090815260408083206001600160a01b0387168452825280832085845290915290205483908390610c705760405162461bcd60e51b815260040161043490611cde565b610c7c8585600061141e565b505060018055505050565b6003546105d3906001600160a01b031682610bfc565b600d6020526000908152604090205481565b6000610cba82610a58565b905060005b60065460ff82161015610dbf57826001600160a01b031663a9059cbb60068360ff1681548110610ceb57fe5b9060005260206000200160009054906101000a90046001600160a01b0316610d476064610d3b60078760ff1681548110610d2157fe5b90600052602060002001548861161090919063ffffffff16565b9063ffffffff61164a16565b6040518363ffffffff1660e01b8152600401610d64929190611c57565b602060405180830381600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db69190611af6565b50600101610cbf565b505050565b610dcc6111e8565b6000546001600160a01b03908116911614610df95760405162461bcd60e51b815260040161043490611f78565b6000818152600a60205260409020548190610e265760405162461bcd60e51b81526004016104349061208e565b6001600160a01b038516610e3957600080fd5b604080516080810182528781526020808201878152828401878152606084018781526001600160a01b038b166000908152600b85528681208982529094529490922092518355516001830155516002820155905160039091015583867fed11b82c749170a371e37a9faea7ec5c4ef5b37083d20a458a8557262dce8e508585610ec06111ec565b604051610ecf9392919061217b565b60405180910390a3505050505050565b60096020528160005260406000208181548110610ef857fe5b90600052602060002001600091509150505481565b60055481565b60025481565b60026001541415610f3c5760405162461bcd60e51b81526004016104349061212d565b6002600155336000818152600c602090815260408083206001600160a01b0387168452825280832085845290915290205483908390610f8d5760405162461bcd60e51b815260040161043490611cde565b336000818152600c602090815260408083206001600160a01b038a168452825280832088845290915290205486908690610fc56111ec565b11610fe25760405162461bcd60e51b815260040161043490611ffa565b610fee8888600161141e565b505060018055505050505050565b6003546105d3906001600160a01b0316826105f4565b61101a6111e8565b6000546001600160a01b039081169116146110475760405162461bcd60e51b815260040161043490611f78565b6003825111156110695760405162461bcd60e51b815260040161043490611df4565b60038151111561108b5760405162461bcd60e51b815260040161043490611da8565b80518251146110ac5760405162461bcd60e51b8152600401610434906120d0565b6000805b82518160ff1610156110e457828160ff16815181106110cb57fe5b60200260200101518201915080806001019150506110b0565b50806064146111055760405162461bcd60e51b815260040161043490611e40565b8251611118906006906020860190611840565b50815161112c9060079060208501906118a5565b50505050565b61113a6111e8565b6000546001600160a01b039081169116146111675760405162461bcd60e51b815260040161043490611f78565b6001600160a01b03811661118d5760405162461bcd60e51b815260040161043490611d62565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b4290565b6001600160a01b0382166000908152600b6020908152604080832084845290915290206002015415155b92915050565b6000805a9050600060014303409050600081600554848760405160200161124a9493929190611c70565b60408051601f1981840301815291905280516020909101208590066001019350505050919050565b6000805a90506000194301406000816112896111ec565b848760405160200161129e9493929190611c70565b60408051601f19818403018152919052805160209091012060ff90869006600101169350505050919050565b6040516323b872dd60e01b81526001600160a01b038316906323b872dd906112fa90869030908690600401611c33565b602060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134c9190611af6565b6113685760405162461bcd60e51b815260040161043490611d2b565b816001600160a01b0316836001600160a01b03167f39dda5b8a8c7e010975f59f0be906b1f9ea4d755c65431f73d3e593342f3dc87836113a66111ec565b6040516113b492919061216d565b60405180910390a3505050565b600061140383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061168c565b9392505050565b600090815260086020526040902054151590565b6001600160a01b0383166000908152600b60209081526040808320858452909152812080546001909101549091808461145b57508290508161146b565b61146587876116b8565b90925090505b6003546114839033906001600160a01b03168461178d565b600380546001600160a01b039081166000908152600d602052604090208054879003905590548882169116146114de576114be33888361178d565b6001600160a01b0387166000908152600d60205260409020805484900390555b600085156115a657336000818152600c602090815260408083206001600160a01b038d811685529083528184208c855290925291829020600181015460029091015460048054945163e3d8394d60e01b8152929591949093169263e3d8394d9261154f929187918f91889101611c0d565b602060405180830381600087803b15801561156957600080fd5b505af115801561157d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a19190611b2e565b925050505b6001600160a01b038816337f9e2f80d97288876e5089a642e6b44b8e8d38f42267878aa611ecbfea68ea8fed8988888888886115e06111ec565b6040516115f397969594939291906121b4565b60405180910390a36116063389896117bb565b5050505050505050565b60008261161f5750600061121a565b8282028284828161162c57fe5b04146114035760405162461bcd60e51b815260040161043490611f37565b600061140383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611809565b600081848411156116b05760405162461bcd60e51b81526004016104349190611c8b565b505050900390565b6001600160a01b0382166000908152600b60209081526040808320848452909152812054600254829190829061170e906117019061271090610d3b90869063ffffffff61161016565b839063ffffffff6113c116565b6003549091506000906001600160a01b03888116911614611781576001600160a01b0387166000908152600b6020908152604080832089845290915290206001015460025461177d906117709061271090610d3b90859063ffffffff61161016565b829063ffffffff6113c116565b9150505b90969095509350505050565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906112fa9086908590600401611c57565b6001600160a01b039283166000908152600c60209081526040808320949095168252928352838120918152915290812081815560018101829055600281018290556003810182905560040155565b6000818361182a5760405162461bcd60e51b81526004016104349190611c8b565b50600083858161183657fe5b0495945050505050565b828054828255906000526020600020908101928215611895579160200282015b8281111561189557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611860565b506118a19291506118ec565b5090565b8280548282559060005260206000209081019282156118e0579160200282015b828111156118e05782518255916020019190600101906118c5565b506118a1929150611910565b610bf991905b808211156118a15780546001600160a01b03191681556001016118f2565b610bf991905b808211156118a15760008155600101611916565b80356001600160a01b038116811461121a57600080fd5b600082601f830112611951578081fd5b813561196461195f8261220b565b6121e4565b81815291506020808301908481018184028601820187101561198557600080fd5b60005b848110156119a457813584529282019290820190600101611988565b505050505092915050565b6000602082840312156119c0578081fd5b611403838361192a565b6000806000606084860312156119de578182fd5b83356119e98161222b565b925060208401356119f98161222b565b929592945050506040919091013590565b60008060408385031215611a1c578182fd5b611a26848461192a565b946020939093013593505050565b60008060408385031215611a46578182fd5b823567ffffffffffffffff80821115611a5d578384fd5b81850186601f820112611a6e578485fd5b80359250611a7e61195f8461220b565b80848252602080830192508084018a828389028701011115611a9e578889fd5b8894505b86851015611ac857611ab48b8261192a565b845260019490940193928101928101611aa2565b509096508701359350505080821115611adf578283fd5b50611aec85828601611941565b9150509250929050565b600060208284031215611b07578081fd5b81518015158114611403578182fd5b600060208284031215611b27578081fd5b5035919050565b600060208284031215611b3f578081fd5b5051919050565b600080600080600060a08688031215611b5d578081fd5b85359450611b6e876020880161192a565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215611b9e578182fd5b50508035926020909101359150565b600080600060608486031215611bc1578283fd5b505081359360208301359350604090920135919050565b600060208284031215611be9578081fd5b813560ff81168114611403578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b93845260208401929092526040830152606082015260800190565b6000602080835283518082850152825b81811015611cb757858101830151858201604001528201611c9b565b81811115611cc85783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602d908201527f416c6f68615374616b696e673a2041646472657373206e6f74207374616b657360408201526c081a5b881d1a1a5cc81c1bdbdb609a1b606082015260800190565b6020808252601c908201527f4d75737420617070726f76652074686520455243323020666972737400000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252602c908201527f416c6f68615374616b696e673a2050657263656e7461676573206c656e67687460408201526b206d6f7265207468656e203360a01b606082015260800190565b6020808252602c908201527f416c6f68615374616b696e673a2044657374696e61746f7273206c656e67687460408201526b206d6f7265207468656e203360a01b606082015260800190565b60208082526029908201527f416c6f68615374616b696e673a2050657263656e74616765732073756d206d7560408201526807374206265203130360bc1b606082015260800190565b60208082526038908201527f416c6f68615374616b696e673a20506f6f6c20666f7220455243323020546f6b60408201527f656e20616e6420726172697479206e6f74206578697374730000000000000000606082015260800190565b60208082526031908201527f416c6f68615374616b696e673a204164647265737320616c7265616479207374604082015270185ad95cc81a5b881d1a1a5cc81c1bdbdb607a1b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602d908201527f416c6f68615374616b696e673a20496d61676520666f7220726577617264206160408201526c6c72656164792065786973747360981b606082015260800190565b6020808252602e908201527f416c6f68615374616b696e673a205374616b65206475726174696f6e2068617360408201526d081b9bdd08195b991959081e595d60921b606082015260800190565b60208082526026908201527f416c6f68615374616b696e673a20526172697479206d75737420626520312c2060408201526532206f72203360d01b606082015260800190565b60208082526022908201527f416c6f68615374616b696e673a20526172697479206e6f7420617661696c61626040820152616c6560f01b606082015260800190565b6020808252603e908201527f416c6f68615374616b696e673a2044657374696e61746f727320616e6420706560408201527f7263656e74616765736c656e67687420617265206e6f7420657175616c730000606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b60405181810167ffffffffffffffff8111828210171561220357600080fd5b604052919050565b600067ffffffffffffffff821115612221578081fd5b5060209081020190565b6001600160a01b03811681146105d357600080fdfea26469706673582212203ea24b339020b92d324fd83aae624855fcf48b340f379f98753381b6067500e264736f6c63430006050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000455f7ef6d8bcfc35f9337e85aee1b0600a59fabe0000000000000000000000009ad18b012bf83e3b0ccabcfa3d74a9bfb6889c770000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000012c
-----Decoded View---------------
Arg [0] : _alohaERC20 (address): 0x455F7Ef6D8BCfc35f9337e85aEe1B0600a59FabE
Arg [1] : _alohaERC721 (address): 0x9aD18b012bf83E3b0ccAbcFa3d74A9BfB6889c77
Arg [2] : _backgrounds (uint256): 3
Arg [3] : _fee (uint256): 300
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000455f7ef6d8bcfc35f9337e85aee1b0600a59fabe
Arg [1] : 0000000000000000000000009ad18b012bf83e3b0ccabcfa3d74a9bfb6889c77
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [3] : 000000000000000000000000000000000000000000000000000000000000012c
Deployed Bytecode Sourcemap
14681:17217:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14681:17217:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;23828:570:0;;;;;;;;;:::i;:::-;;25330:123;;;;;;;;;:::i;16395:46::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15820:25;;;:::i;:::-;;;;;;;;16563:55;;;;;;;;;:::i;15918:32::-;;;;;;;;;:::i;15852:26::-;;;:::i;20997:140::-;;;;;;;;;:::i;15957:32::-;;;;;;;;;:::i;19362:1533::-;;;;;;;;;:::i;16664:61::-;;;;;;;;;:::i;:::-;;;;;;;;;;;23189:78;;;;;;;;;:::i;2778:148::-;;;:::i;16788:85::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;22344:276;;;;;;;;;:::i;23360:367::-;;;;;;;;;:::i;2136:79::-;;;:::i;21978:265::-;;;;;;;;;:::i;21692:150::-;;;;;;;;;:::i;16917:47::-;;;;;;;;;:::i;22725:360::-;;;;;;;;;:::i;24505:714::-;;;;;;;;;:::i;16474:52::-;;;;;;;;;:::i;15885:26::-;;;:::i;15795:18::-;;;:::i;21245:318::-;;;;;;;;;:::i;19128:134::-;;;;;;;;;:::i;25549:792::-;;;;;;;;;:::i;3081:244::-;;;;;;;;;:::i;23828:570::-;2358:12;:10;:12::i;:::-;2348:6;;-1:-1:-1;;;;;2348:6:0;;;:22;;;2340:67;;;;-1:-1:-1;;;2340:67:0;;;;;;;;;;;;;;;;;17680:28:::1;::::0;;;:19:::1;:28;::::0;;;;;24010:12;;17656:120:::1;;;;-1:-1:-1::0;;;17656:120:0::1;;;;;;;;;24077:155:::2;::::0;;::::2;::::0;::::2;::::0;;;;;-1:-1:-1;24077:155:0::2;::::0;;::::2;::::0;;;;;;;;;;;;;;;24049:10:::2;::::0;;-1:-1:-1;;;;;24049:10:0::2;24040:20:::0;;:8:::2;:20:::0;;;;;:34;;;;;;;;;:192;;;;;;24049:10;24040:192;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;::::0;24110:12;24250:140:::2;24176:9:::0;24208:12;24369:10:::2;:8;:10::i;:::-;24250:140;;;;;;;;;;;;;;;;;2418:1:::1;23828:570:::0;;;:::o;25330:123::-;2358:12;:10;:12::i;:::-;2348:6;;-1:-1:-1;;;;;2348:6:0;;;:22;;;2340:67;;;;-1:-1:-1;;;2340:67:0;;;;;;;;;25422:11:::1;:23:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;25330:123::o;16395:46::-;;;;;;;;;;;;;:::o;15820:25::-;;;-1:-1:-1;;;;;15820:25:0;;:::o;16563:55::-;;;;;;;;;;;;;:::o;15918:32::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15918:32:0;;-1:-1:-1;15918:32:0;:::o;15852:26::-;;;-1:-1:-1;;;;;15852:26:0;;:::o;20997:140::-;21104:10;;21091:38;;-1:-1:-1;;;;;21104:10:0;21116:12;21091;:38::i;:::-;20997:140;:::o;15957:32::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15957:32:0;:::o;19362:1533::-;17680:28;;;;:19;:28;;;;;;19490:12;;17656:120;;;;-1:-1:-1;;;17656:120:0;;;;;;;;;19524:11:::1;19537:12;17465:28;17477:6;17485:7;17465:11;:28::i;:::-;17443:134;;;;-1:-1:-1::0;;;17443:134:0::1;;;;;;;;;19578:10:::2;17918:23;::::0;;;:11:::2;:23;::::0;;;;;;;-1:-1:-1;;;;;17918:31:0;::::2;::::0;;;;;;;:40;;;;;;;;:48;19590:11;;19603:12;;17918:53;17895:154:::2;;;;-1:-1:-1::0;;;17895:154:0::2;;;;;;;;;19633:19:::3;19655:28:::0;;;:14:::3;:28;::::0;;;;;;;19693:19:::3;:33:::0;;;;;;19730:1:::3;::::0;19684:43:::3;::::0;:8:::3;:43::i;:::-;:47;19655:77;;;;;;;;;;;::::0;;;::::3;::::0;;;;;::::3;::::0;-1:-1:-1;;;;;19775:21:0;::::3;::::0;;:8:::3;:21:::0;;;;;;:35;;;;;;;;;:44:::3;;::::0;19655:77;;-1:-1:-1;19762:10:0::3;:8;:10::i;:::-;:57;19743:76;;19830:24;19857:21;19866:11;;19857:8;:21::i;:::-;19830:48;;19891:19;19913:8;:21;19922:11;-1:-1:-1::0;;;;;19913:21:0::3;-1:-1:-1::0;;;;;19913:21:0::3;;;;;;;;;;;;:35;19935:12;19913:35;;;;;;;;;;;:47;;;19891:69;;19971:19;19993:8;:21;20002:11;-1:-1:-1::0;;;;;19993:21:0::3;-1:-1:-1::0;;;;;19993:21:0::3;;;;;;;;;;;;:35;20015:12;19993:35;;;;;;;;;;;:47;;;19971:69;;20053:51;20068:10;20080;;;;;;;;;-1:-1:-1::0;;;;;20080:10:0::3;20092:11;20053:14;:51::i;:::-;20127:10;::::0;;-1:-1:-1;;;;;20127:10:0;;::::3;20115:23;::::0;;;:11:::3;:23;::::0;;;;:38;;;::::3;::::0;;20193:10;;20178:25;;::::3;20193:10:::0;::::3;20178:25;20174:164;;20220:52;20235:10;20247:11;20260;20220:14;:52::i;:::-;-1:-1:-1::0;;;;;20287:24:0;::::3;;::::0;;;:11:::3;:24;::::0;;;;:39;;;::::3;::::0;;20174:164:::3;20403:214;;;;;;;;20433:8;20403:214;;;;20468:11;20403:214;;;;20511:16;20403:214;;;;20555:11;20403:214;;;;20594:11;20403:214;;::::0;20350:11:::3;:23;20362:10;-1:-1:-1::0;;;;;20350:23:0::3;-1:-1:-1::0;;;;;20350:23:0::3;;;;;;;;;;;;:36;20374:11;-1:-1:-1::0;;;;;20350:36:0::3;-1:-1:-1::0;;;;;20350:36:0::3;;;;;;;;;;;;:50;20387:12;20350:50;;;;;;;;;;;:267;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20681:11;-1:-1:-1::0;;;;;20635:252:0::3;20656:10;-1:-1:-1::0;;;;;20635:252:0::3;;20707:12;20734:8;20757:11;20783:16;20814:11;20840;20866:10;:8;:10::i;:::-;20635:252;;;;;;;;;;;;;;;;;;;;;18060:1;;;;;17588::::2;;;17787::::1;;19362:1533:::0;;;:::o;16664:61::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23189:78::-;2358:12;:10;:12::i;:::-;2348:6;;-1:-1:-1;;;;;2348:6:0;;;:22;;;2340:67;;;;-1:-1:-1;;;2340:67:0;;;;;;;;;23249:3:::1;:10:::0;23189:78::o;2778:148::-;2358:12;:10;:12::i;:::-;2348:6;;-1:-1:-1;;;;;2348:6:0;;;:22;;;2340:67;;;;-1:-1:-1;;;2340:67:0;;;;;;;;;2885:1:::1;2869:6:::0;;2848:40:::1;::::0;-1:-1:-1;;;;;2869:6:0;;::::1;::::0;2848:40:::1;::::0;2885:1;;2848:40:::1;2916:1;2899:19:::0;;-1:-1:-1;;;;;;2899:19:0::1;::::0;;2778:148::o;16788:85::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22344:276::-;22408:7;22428:15;22453:11;-1:-1:-1;;;;;22446:29:0;;22484:4;22446:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22446:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22446:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;22446:44:0;;;;;;;;;22428:62;-1:-1:-1;22507:11:0;;22503:88;;-1:-1:-1;;;;;22554:24:0;;;;;;:11;:24;;;;;;22542:37;;:7;;:37;:11;:37;:::i;:::-;22535:44;;;;;22503:88;22610:1;22603:8;;;22344:276;;;;:::o;23360:367::-;2358:12;:10;:12::i;:::-;2348:6;;-1:-1:-1;;;;;2348:6:0;;;:22;;;2340:67;;;;-1:-1:-1;;;2340:67:0;;;;;;;;;23511:11:::1;17068:21;17082:6;17068:13;:21::i;:::-;17067:22;17045:117;;;;-1:-1:-1::0;;;17045:117:0::1;;;;;;;;;23545:12:::2;17270:1;17259:7;:12;;:28;;;;;17286:1;17275:7;:12;;17259:28;17237:116;;;;-1:-1:-1::0;;;17237:116:0::2;;;;;;;;;-1:-1:-1::0;;23575:23:0::3;::::0;;;:10:::3;:23;::::0;;;;;;;:38;;;23624:28;;;:14:::3;:28:::0;;;;;27:10:-1;;39:1:::3;23:18:::0;;::::3;45:23:::0;;23624:46:0;;;;;;::::3;::::0;;;;23681:33;;;:19:::3;:33:::0;;;:38;;;;::::3;::::0;;23360:367::o;2136:79::-;2174:7;2201:6;-1:-1:-1;;;;;2201:6:0;2136:79;;:::o;21978:265::-;13348:1;13954:7;;:19;;13946:63;;;;-1:-1:-1;;;13946:63:0;;;;;;;;;13348:1;14087:7;:18;22137:10:::1;18189:23;::::0;;;:11:::1;:23;::::0;;;;;;;-1:-1:-1;;;;;18189:31:0;::::1;::::0;;;;;;;:40;;;;;;;;:48;22149:11;;22162:12;;18165:151:::1;;;;-1:-1:-1::0;;;18165:151:0::1;;;;;;;;;22192:43:::2;22202:11;22215:12;22229:5;22192:9;:43::i;:::-;-1:-1:-1::0;;13304:1:0;14266:22;;-1:-1:-1;;;21978:265:0:o;21692:150::-;21809:10;;21791:43;;-1:-1:-1;;;;;21809:10:0;21821:12;21791:17;:43::i;16917:47::-;;;;;;;;;;;;;:::o;22725:360::-;22796:13;22812:30;22830:11;22812:17;:30::i;:::-;22796:46;-1:-1:-1;22868:7:0;22863:215;22885:15;:22;22881:26;;;;22863:215;;;22936:11;-1:-1:-1;;;;;22929:28:0;;22976:15;22992:1;22976:18;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22976:18:0;23013:38;23047:3;23013:29;23023:15;23039:1;23023:18;;;;;;;;;;;;;;;;;;23013:5;:9;;:29;;;;:::i;:::-;:33;:38;:33;:38;:::i;:::-;22929:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22929:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22929:137:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;22929:137:0;;;;;;;;;-1:-1:-1;22909:3:0;;22863:215;;;;22725:360;;:::o;24505:714::-;2358:12;:10;:12::i;:::-;2348:6;;-1:-1:-1;;;;;2348:6:0;;;:22;;;2340:67;;;;-1:-1:-1;;;2340:67:0;;;;;;;;;17680:28:::1;::::0;;;:19:::1;:28;::::0;;;;;24748:12;;17656:120:::1;;;;-1:-1:-1::0;;;17656:120:0::1;;;;;;;;;-1:-1:-1::0;;;;;24786:36:0;::::2;24778:45;;12:1:-1;9::::0;2:12:::2;24778:45:0;24876:166;::::0;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24836:23:0;::::2;-1:-1:-1::0;24836:23:0;;;:8:::2;:23:::0;;;;;:37;;;;;;;;;;:206;;;;;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;::::0;;::::2;::::0;24949:12;24909;25060:151:::2;24986:9:::0;25018:12;25190:10:::2;:8;:10::i;:::-;25060:151;;;;;;;;;;;;;;;;;2418:1:::1;24505:714:::0;;;;;:::o;16474:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15885:26::-;;;;:::o;15795:18::-;;;;:::o;21245:318::-;13348:1;13954:7;;:19;;13946:63;;;;-1:-1:-1;;;13946:63:0;;;;;;;;;13348:1;14087:7;:18;21399:10:::1;18189:23;::::0;;;:11:::1;:23;::::0;;;;;;;-1:-1:-1;;;;;18189:31:0;::::1;::::0;;;;;;;:40;;;;;;;;:48;21411:11;;21424:12;;18165:151:::1;;;;-1:-1:-1::0;;;18165:151:0::1;;;;;;;;;21458:10:::2;18464:23;::::0;;;:11:::2;:23;::::0;;;;;;;-1:-1:-1;;;;;18464:31:0;::::2;::::0;;;;;;;:40;;;;;;;;:48;21470:11;;21483:12;;18451:10:::2;:8;:10::i;:::-;:61;18428:159;;;;-1:-1:-1::0;;;18428:159:0::2;;;;;;;;;21513:42:::3;21523:11;21536:12;21550:4;21513:9;:42::i;:::-;-1:-1:-1::0;;13304:1:0;14266:22;;-1:-1:-1;;;;;;21245:318:0:o;19128:134::-;19229:10;;19219:35;;-1:-1:-1;;;;;19229:10:0;19241:12;19219:9;:35::i;25549:792::-;2358:12;:10;:12::i;:::-;2348:6;;-1:-1:-1;;;;;2348:6:0;;;:22;;;2340:67;;;;-1:-1:-1;;;2340:67:0;;;;;;;;;25763:1:::1;25740:12;:19;:24;;25732:81;;;;-1:-1:-1::0;;;25732:81:0::1;;;;;;;;;25855:1;25832:12;:19;:24;;25824:81;;;;-1:-1:-1::0;;;25824:81:0::1;;;;;;;;;25947:12;:19;25924:12;:19;:42;25916:117;;;;-1:-1:-1::0;;;25916:117:0::1;;;;;;;;;26046:13;::::0;26074:99:::1;26096:12;:19;26092:1;:23;;;26074:99;;;26146:12;26159:1;26146:15;;;;;;;;;;;;;;;;26137:24;;;;26117:3;;;;;;;26074:99;;;;26191:5;26200:3;26191:12;26183:66;;;;-1:-1:-1::0;;;26183:66:0::1;;;;;;;;;26262:30:::0;;::::1;::::0;:15:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;26303:30:0;;::::1;::::0;:15:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;:::-;;2418:1;25549:792:::0;;:::o;3081:244::-;2358:12;:10;:12::i;:::-;2348:6;;-1:-1:-1;;;;;2348:6:0;;;:22;;;2340:67;;;;-1:-1:-1;;;2340:67:0;;;;;;;;;-1:-1:-1;;;;;3170:22:0;::::1;3162:73;;;;-1:-1:-1::0;;;3162:73:0::1;;;;;;;;;3272:6;::::0;;3251:38:::1;::::0;-1:-1:-1;;;;;3251:38:0;;::::1;::::0;3272:6;::::1;::::0;3251:38:::1;::::0;::::1;3300:6;:17:::0;;-1:-1:-1;;;;;;3300:17:0::1;-1:-1:-1::0;;;;;3300:17:0;;;::::1;::::0;;;::::1;::::0;;3081:244::o;657:106::-;745:10;657:106;:::o;26680:93::-;26750:15;26680:93;:::o;26514:158::-;-1:-1:-1;;;;;26620:21:0;;26596:4;26620:21;;;:8;:21;;;;;;;;:30;;;;;;;;:39;;;:44;;26514:158;;;;;:::o;30718:537::-;30775:5;30793:16;30812:9;30793:28;;30832:18;30876:1;30863:12;:14;30853:25;30832:46;;30889:19;30964:10;30993:11;;31023:8;31050:6;30935:136;;;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;30935:136:0;;;30911:171;;49:4:-1;30911:171:0;;;;31180:26;;;31207:1;31176:33;;-1:-1:-1;;;;30718:537:0;;;:::o;31355:538::-;31412:7;31432:16;31451:9;31432:28;-1:-1:-1;;;31502:12:0;:14;31492:25;31471:18;31492:25;31632:10;:8;:10::i;:::-;31661:8;31688:6;31574:135;;;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;31574:135:0;;;31550:170;;49:4:-1;31550:170:0;;;;31858:27;31818:26;;;;31845:1;31814:33;31858:27;;-1:-1:-1;;;;31355:538:0;;;:::o;27637:303::-;27773:60;;-1:-1:-1;;;27773:60:0;;-1:-1:-1;;;;;27773:27:0;;;;;:60;;27801:7;;27818:4;;27825:7;;27773:60;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27773:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27773:60:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27773:60:0;;;;;;;;;27765:101;;;;-1:-1:-1;;;27765:101:0;;;;;;;;;27904:6;-1:-1:-1;;;;;27884:48:0;27895:7;-1:-1:-1;;;;;27884:48:0;;27912:7;27921:10;:8;:10::i;:::-;27884:48;;;;;;;;;;;;;;;;27637:303;;;:::o;4752:136::-;4810:7;4837:43;4841:1;4844;4837:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4830:50;4752:136;-1:-1:-1;;;4752:136:0:o;26379:127::-;26446:4;26470:23;;;:10;:23;;;;;;:28;;;26379:127::o;28958:1648::-;-1:-1:-1;;;;;29080:21:0;;29058:19;29080:21;;;:8;:21;;;;;;;;:35;;;;;;;;:47;;29160;;;;;29080;;29058:19;29307:11;29302:250;;-1:-1:-1;29358:11:0;;-1:-1:-1;29407:11:0;29302:250;;;29498:42;29514:11;29527:12;29498:15;:42::i;:::-;29451:89;;-1:-1:-1;29451:89:0;-1:-1:-1;29302:250:0;29601:10;;29564:70;;29589:10;;-1:-1:-1;;;;;29601:10:0;29613:20;29564:24;:70::i;:::-;29657:10;;;-1:-1:-1;;;;;29657:10:0;;;29645:23;;;;:11;:23;;;;;:38;;;;;;;29715:10;;29700:25;;;29715:10;;29700:25;29696:183;;29742:71;29767:10;29779:11;29792:20;29742:24;:71::i;:::-;-1:-1:-1;;;;;29828:24:0;;;;;;:11;:24;;;;;:39;;;;;;;29696:183;29891:15;29921:329;;;;29981:10;29953:13;29969:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;29969:36:0;;;;;;;;;;;:50;;;;;;;;;;:61;;;;30067:66;;;;;30170:11;;;30160:78;;-1:-1:-1;;;30160:78:0;;29969:61;;30067:66;;30170:11;;;;30160:32;;:78;;29981:10;29969:61;;:50;;30067:66;;30160:78;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30160:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30160:78:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30160:78:0;;;;;;;;;30150:88;;29921:329;;;-1:-1:-1;;;;;30267:268:0;;30292:10;30267:268;30343:12;30370:11;30396;30422:20;30457;30492:7;30514:10;:8;:10::i;:::-;30267:268;;;;;;;;;;;;;;;;;;;;;30548:50;30560:10;30572:11;30585:12;30548:11;:50::i;:::-;28958:1648;;;;;;;;:::o;5642:471::-;5700:7;5945:6;5941:47;;-1:-1:-1;5975:1:0;5968:8;;5941:47;6012:5;;;6016:1;6012;:5;:1;6036:5;;;;;:10;6028:56;;;;-1:-1:-1;;;6028:56:0;;;;;;;;6589:132;6647:7;6674:39;6678:1;6681;6674:39;;;;;;;;;;;;;;;;;:3;:39::i;5191:192::-;5277:7;5313:12;5305:6;;;;5297:29;;;;-1:-1:-1;;;5297:29:0;;;;;;;;;;-1:-1:-1;;;5349:5:0;;;5191:192::o;26846:713::-;-1:-1:-1;;;;;27082:21:0;;26972:29;27082:21;;;:8;:21;;;;;;;;:35;;;;;;;;:47;27203:3;;26972:29;;27082:47;26972:29;;27171:48;;27187:31;;27212:5;;27187:20;;27082:47;;27187:20;:15;:20;:::i;:31::-;27171:11;;:48;:15;:48;:::i;:::-;27294:10;;27140:79;;-1:-1:-1;27230:28:0;;-1:-1:-1;;;;;27279:25:0;;;27294:10;;27279:25;27275:213;;-1:-1:-1;;;;;27343:21:0;;27321:19;27343:21;;;:8;:21;;;;;;;;:35;;;;;;;;:47;;;27460:3;;27428:48;;27444:31;;27469:5;;27444:20;;27343:47;;27444:20;:15;:20;:::i;:31::-;27428:11;;:48;:15;:48;:::i;:::-;27405:71;;27275:213;;27508:20;;;;-1:-1:-1;26846:713:0;-1:-1:-1;;;;26846:713:0:o;28034:294::-;28180:41;;-1:-1:-1;;;28180:41:0;;-1:-1:-1;;;;;28180:23:0;;;;;:41;;28204:7;;28213;;28180:41;;;;28414:461;-1:-1:-1;;;;;28514:19:0;;;28571:1;28514:19;;;:11;:19;;;;;;;;:32;;;;;;;;;;;;:46;;;;;;;;:58;;;28583:57;;;:61;;;28655:62;;;:66;;;28732:58;;;:62;;;28805:58;;:62;28414:461::o;7217:278::-;7303:7;7338:12;7331:5;7323:28;;;;-1:-1:-1;;;7323:28:0;;;;;;;;;;;7362:9;7378:1;7374;:5;;;;;;;7217:278;-1:-1:-1;;;;;7217:278:0:o;14681:17217::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14681:17217:0;-1:-1:-1;;;;;14681:17217:0;;;;;;;;;;;-1:-1:-1;14681:17217:0;;;;;;;-1:-1:-1;14681:17217:0;;;-1:-1:-1;14681:17217:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14681:17217:0;;;-1:-1:-1;14681:17217:0;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;14681:17217:0;;;;;;;;;;;;;;;;;;;;;;;;;5:130:-1;72:20;;-1:-1;;;;;27188:54;;28241:35;;28231:2;;28290:1;;28280:12;893:707;;1010:3;1003:4;995:6;991:17;987:27;977:2;;-1:-1;;1018:12;977:2;1065:6;1052:20;1087:80;1102:64;1159:6;1102:64;;;1087:80;;;1195:21;;;1078:89;-1:-1;1239:4;1252:14;;;;1227:17;;;1341;;;1332:27;;;;1329:36;-1:-1;1326:2;;;1378:1;;1368:12;1326:2;1403:1;1388:206;1413:6;1410:1;1407:13;1388:206;;;1810:20;;1481:50;;1545:14;;;;1573;;;;1435:1;1428:9;1388:206;;;1392:14;;;;;970:630;;;;;2154:241;;2258:2;2246:9;2237:7;2233:23;2229:32;2226:2;;;-1:-1;;2264:12;2226:2;2326:53;2371:7;2347:22;2326:53;;2402:491;;;;2540:2;2528:9;2519:7;2515:23;2511:32;2508:2;;;-1:-1;;2546:12;2508:2;85:6;72:20;97:33;124:5;97:33;;;2598:63;-1:-1;2698:2;2737:22;;72:20;97:33;72:20;97:33;;;2502:391;;2706:63;;-1:-1;;;2806:2;2845:22;;;;1810:20;;2502:391;2900:366;;;3021:2;3009:9;3000:7;2996:23;2992:32;2989:2;;;-1:-1;;3027:12;2989:2;3089:53;3134:7;3110:22;3089:53;;;3079:63;3179:2;3218:22;;;;1810:20;;-1:-1;;;2983:283;3273:638;;;3444:2;3432:9;3423:7;3419:23;3415:32;3412:2;;;-1:-1;;3450:12;3412:2;3508:17;3495:31;3546:18;;3538:6;3535:30;3532:2;;;-1:-1;;3568:12;3532:2;3659:6;3648:9;3644:22;277:3;270:4;262:6;258:17;254:27;244:2;;-1:-1;;285:12;244:2;332:6;319:20;305:34;;354:80;369:64;426:6;369:64;;354:80;440:16;476:6;469:5;462:21;506:4;;523:3;519:14;512:21;;506:4;498:6;494:17;628:3;506:4;;612:6;608:17;498:6;599:27;;596:36;593:2;;;-1:-1;;635:12;593:2;-1:-1;661:10;;655:206;680:6;677:1;674:13;655:206;;;760:37;793:3;781:10;760:37;;;748:50;;702:1;695:9;;;;;812:14;;;;840;;655:206;;;-1:-1;3588:88;;-1:-1;3726:18;;3713:32;;-1:-1;;;3754:30;;;3751:2;;;-1:-1;;3787:12;3751:2;;3817:78;3887:7;3878:6;3867:9;3863:22;3817:78;;;3807:88;;;3406:505;;;;;;3918:257;;4030:2;4018:9;4009:7;4005:23;4001:32;3998:2;;;-1:-1;;4036:12;3998:2;1689:6;1683:13;28387:5;27021:13;27014:21;28365:5;28362:32;28352:2;;-1:-1;;28398:12;4182:241;;4286:2;4274:9;4265:7;4261:23;4257:32;4254:2;;;-1:-1;;4292:12;4254:2;-1:-1;1810:20;;4248:175;-1:-1;4248:175;4430:263;;4545:2;4533:9;4524:7;4520:23;4516:32;4513:2;;;-1:-1;;4551:12;4513:2;-1:-1;1958:13;;4507:186;-1:-1;4507:186;4700:743;;;;;;4872:3;4860:9;4851:7;4847:23;4843:33;4840:2;;;-1:-1;;4879:12;4840:2;1823:6;1810:20;4931:63;;5049:53;5094:7;5031:2;5074:9;5070:22;5049:53;;;4834:609;;5039:63;;-1:-1;;;;5139:2;5178:22;;1810:20;;5247:2;5286:22;;1810:20;;5355:3;5395:22;;;1810:20;;-1:-1;4834:609;5450:366;;;5571:2;5559:9;5550:7;5546:23;5542:32;5539:2;;;-1:-1;;5577:12;5539:2;-1:-1;;1810:20;;;5729:2;5768:22;;;1810:20;;-1:-1;5533:283;5823:491;;;;5961:2;5949:9;5940:7;5936:23;5932:32;5929:2;;;-1:-1;;5967:12;5929:2;-1:-1;;1810:20;;;6119:2;6158:22;;1810:20;;-1:-1;6227:2;6266:22;;;1810:20;;5923:391;-1:-1;5923:391;6321:237;;6423:2;6411:9;6402:7;6398:23;6394:32;6391:2;;;-1:-1;;6429:12;6391:2;2099:6;2086:20;27404:4;28631:5;27393:16;28608:5;28605:33;28595:2;;-1:-1;;28642:12;13519:213;-1:-1;;;;;27188:54;;;;6785:37;;13637:2;13622:18;;13608:124;13739:563;-1:-1;;;;;27188:54;;;;6644:58;;14122:2;14107:18;;6905:37;;;;14205:2;14190:18;;6905:37;14288:2;14273:18;;6905:37;13949:3;13934:19;;13920:382;14309:435;-1:-1;;;;;27188:54;;;6785:37;;27188:54;;;;14647:2;14632:18;;6785:37;14730:2;14715:18;;6905:37;;;;14483:2;14468:18;;14454:290;14751:324;-1:-1;;;;;27188:54;;;;6785:37;;15061:2;15046:18;;6905:37;14897:2;14882:18;;14868:207;15082:547;6905:37;;;15449:2;15434:18;;6905:37;;;;15532:2;15517:18;;6905:37;15615:2;15600:18;;6905:37;15284:3;15269:19;;15255:374;15636:301;;15774:2;;15795:17;15788:47;7099:5;26644:12;26801:6;15774:2;15763:9;15759:18;26789:19;-1:-1;27873:101;27887:6;27884:1;27881:13;27873:101;;;27954:11;;;;;27948:18;27935:11;;;26829:14;27935:11;27928:39;27902:10;;27873:101;;;27989:6;27986:1;27983:13;27980:2;;;-1:-1;26829:14;28045:6;15763:9;28036:16;;28029:27;27980:2;-1:-1;28161:7;28145:14;-1:-1;;28141:28;7257:39;;;;26829:14;7257:39;;15745:192;-1:-1;;;15745:192;15944:407;16135:2;16149:47;;;7533:2;16120:18;;;26789:19;7569:34;26829:14;;;7549:55;-1:-1;;;7624:12;;;7617:37;7673:12;;;16106:245;16358:407;16549:2;16563:47;;;7924:2;16534:18;;;26789:19;7960:30;26829:14;;;7940:51;8010:12;;;16520:245;16772:407;16963:2;16977:47;;;8261:2;16948:18;;;26789:19;8297:34;26829:14;;;8277:55;-1:-1;;;8352:12;;;8345:30;8394:12;;;16934:245;17186:407;17377:2;17391:47;;;8645:2;17362:18;;;26789:19;8681:34;26829:14;;;8661:55;-1:-1;;;8736:12;;;8729:36;8784:12;;;17348:245;17600:407;17791:2;17805:47;;;9035:2;17776:18;;;26789:19;9071:34;26829:14;;;9051:55;-1:-1;;;9126:12;;;9119:36;9174:12;;;17762:245;18014:407;18205:2;18219:47;;;9425:2;18190:18;;;26789:19;9461:34;26829:14;;;9441:55;-1:-1;;;9516:12;;;9509:33;9561:12;;;18176:245;18428:407;18619:2;18633:47;;;9812:2;18604:18;;;26789:19;9848:34;26829:14;;;9828:55;9917:26;9903:12;;;9896:48;9963:12;;;18590:245;18842:407;19033:2;19047:47;;;10214:2;19018:18;;;26789:19;10250:34;26829:14;;;10230:55;-1:-1;;;10305:12;;;10298:41;10358:12;;;19004:245;19256:407;19447:2;19461:47;;;10609:2;19432:18;;;26789:19;10645:34;26829:14;;;10625:55;-1:-1;;;10700:12;;;10693:25;10737:12;;;19418:245;19670:407;19861:2;19875:47;;;19846:18;;;26789:19;11024:34;26829:14;;;11004:55;11078:12;;;19832:245;20084:407;20275:2;20289:47;;;11329:2;20260:18;;;26789:19;11365:34;26829:14;;;11345:55;-1:-1;;;11420:12;;;11413:37;11469:12;;;20246:245;20498:407;20689:2;20703:47;;;11720:2;20674:18;;;26789:19;11756:34;26829:14;;;11736:55;-1:-1;;;11811:12;;;11804:38;11861:12;;;20660:245;20912:407;21103:2;21117:47;;;12112:2;21088:18;;;26789:19;12148:34;26829:14;;;12128:55;-1:-1;;;12203:12;;;12196:30;12245:12;;;21074:245;21326:407;21517:2;21531:47;;;12496:2;21502:18;;;26789:19;12532:34;26829:14;;;12512:55;-1:-1;;;12587:12;;;12580:26;12625:12;;;21488:245;21740:407;21931:2;21945:47;;;12876:2;21916:18;;;26789:19;12912:34;26829:14;;;12892:55;12981:32;12967:12;;;12960:54;13033:12;;;21902:245;22154:407;22345:2;22359:47;;;13284:2;22330:18;;;26789:19;13320:33;26829:14;;;13300:54;13373:12;;;22316:245;22568:213;6905:37;;;22686:2;22671:18;;22657:124;22788:324;6905:37;;;23098:2;23083:18;;6905:37;22934:2;22919:18;;22905:207;23119:435;6905:37;;;23457:2;23442:18;;6905:37;;;;23540:2;23525:18;;6905:37;23293:2;23278:18;;23264:290;24115:659;6905:37;;;24510:2;24495:18;;6905:37;;;;24593:2;24578:18;;6905:37;;;;24676:2;24661:18;;6905:37;24759:3;24744:19;;6905:37;24345:3;24330:19;;24316:458;24781:883;6905:37;;;25232:2;25217:18;;6905:37;;;;25315:2;25300:18;;6905:37;;;;25398:2;25383:18;;6905:37;;;;25481:3;25466:19;;6905:37;25565:3;25550:19;;6905:37;25649:3;25634:19;;6905:37;25067:3;25052:19;;25038:626;25671:256;25733:2;25727:9;25759:17;;;25834:18;25819:34;;25855:22;;;25816:62;25813:2;;;25891:1;;25881:12;25813:2;25733;25900:22;25711:216;;-1:-1;25711:216;25934:304;;26093:18;26085:6;26082:30;26079:2;;;-1:-1;;26115:12;26079:2;-1:-1;26160:4;26148:17;;;26213:15;;26016:222;28182:117;-1:-1;;;;;27188:54;;28241:35;;28231:2;;28290:1;;28280:12
Swarm Source
ipfs://3ea24b339020b92d324fd83aae624855fcf48b340f379f98753381b6067500e2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.