Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,578 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 12858148 | 1286 days ago | IN | 0 ETH | 0.00129438 | ||||
Create | 12481333 | 1345 days ago | IN | 0 ETH | 0.00106948 | ||||
In Case Tokenget... | 10981065 | 1576 days ago | IN | 0 ETH | 0.00125443 | ||||
Easy Zap In | 10591729 | 1636 days ago | IN | 0 ETH | 0.00163973 | ||||
Toggle Contract ... | 10574121 | 1638 days ago | IN | 0 ETH | 0.00168216 | ||||
Easy Zap In | 10570468 | 1639 days ago | IN | 40 ETH | 0.00630368 | ||||
Easy Zap In | 10570118 | 1639 days ago | IN | 0 ETH | 0.0062402 | ||||
Easy Zap In | 10570116 | 1639 days ago | IN | 0 ETH | 0.00558079 | ||||
Easy Zap In | 10566116 | 1640 days ago | IN | 0 ETH | 0.0126477 | ||||
Easy Zap In | 10565862 | 1640 days ago | IN | 0.07 ETH | 0.0164992 | ||||
Easy Zap In | 10565771 | 1640 days ago | IN | 0 ETH | 0.01233064 | ||||
Easy Zap In | 10565735 | 1640 days ago | IN | 0 ETH | 0.01179238 | ||||
Easy Zap In | 10565662 | 1640 days ago | IN | 5 ETH | 0.01749488 | ||||
Easy Zap In | 10565651 | 1640 days ago | IN | 0.79 ETH | 0.0106462 | ||||
Easy Zap In | 10565581 | 1640 days ago | IN | 13.7642 ETH | 0.01532596 | ||||
Easy Zap In | 10565462 | 1640 days ago | IN | 0 ETH | 0.00947078 | ||||
Easy Zap In | 10565446 | 1640 days ago | IN | 0 ETH | 0.01035731 | ||||
Easy Zap In | 10565433 | 1640 days ago | IN | 0 ETH | 0.00953467 | ||||
Easy Zap In | 10565384 | 1640 days ago | IN | 0 ETH | 0.01065939 | ||||
Easy Zap In | 10565378 | 1640 days ago | IN | 0 ETH | 0.00873158 | ||||
Easy Zap In | 10565331 | 1640 days ago | IN | 0 ETH | 0.00961658 | ||||
Easy Zap In | 10565282 | 1640 days ago | IN | 9 ETH | 0.01485363 | ||||
Easy Zap In | 10565172 | 1640 days ago | IN | 3 ETH | 0.01485363 | ||||
Easy Zap In | 10565171 | 1640 days ago | IN | 5 ETH | 0.01390863 | ||||
Easy Zap In | 10565136 | 1640 days ago | IN | 0 ETH | 0.01035738 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
10570468 | 1639 days ago | 40 ETH | ||||
10565862 | 1640 days ago | 0.07 ETH | ||||
10565662 | 1640 days ago | 5 ETH | ||||
10565651 | 1640 days ago | 0.79 ETH | ||||
10565581 | 1640 days ago | 13.7642 ETH | ||||
10565345 | 1640 days ago | 4.06222026 ETH | ||||
10565345 | 1640 days ago | 4.06222026 ETH | ||||
10565282 | 1640 days ago | 9 ETH | ||||
10565274 | 1640 days ago | 84.32376384 ETH | ||||
10565274 | 1640 days ago | 84.32376384 ETH | ||||
10565218 | 1640 days ago | 65.06726797 ETH | ||||
10565218 | 1640 days ago | 65.06726797 ETH | ||||
10565172 | 1640 days ago | 3 ETH | ||||
10565171 | 1640 days ago | 5 ETH | ||||
10565009 | 1640 days ago | 1.7 ETH | ||||
10564927 | 1640 days ago | 2.5 ETH | ||||
10564907 | 1640 days ago | 25 ETH | ||||
10564815 | 1640 days ago | 1 ETH | ||||
10564815 | 1640 days ago | 1 ETH | ||||
10564446 | 1640 days ago | 95.9799291 ETH | ||||
10564446 | 1640 days ago | 95.9799291 ETH | ||||
10564446 | 1640 days ago | 95.9799291 ETH | ||||
10564446 | 1640 days ago | 95.9799291 ETH | ||||
10564136 | 1640 days ago | 12 ETH | ||||
10563801 | 1640 days ago | 0.5 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Balancer_ZapIn_General_V2
Compiler Version
v0.5.12+commit.7709ece9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-07-10 */ // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.5.5; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ 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/GSN/Context.sol pragma solidity ^0.5.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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view 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/ownership/Ownable.sol pragma solidity ^0.5.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. * * 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(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _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 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 onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol pragma solidity ^0.5.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]. * * _Since v2.5.0:_ this module is now much more gas efficient, given net gas * metering changes introduced in the Istanbul hardfork. */ contract ReentrancyGuard { bool private _notEntered; constructor () internal { // Storing an initial 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 percetange 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. _notEntered = true; } /** * @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(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.5.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. * * _Available since v2.4.0._ */ 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. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 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. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // Copyright (C) 2020 zapper, dipeshsukhani, nodarjanashia, suhailg, sebaudet, sumitrajput, apoorvlathey // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // ///@author Zapper ///@notice this contract adds liquidity to Balancer liquidity pools in one transaction pragma solidity 0.5.12; interface IBFactory_Balancer_ZapIn_General_V1 { function isBPool(address b) external view returns (bool); } interface IBPool_Balancer_ZapIn_General_V1 { function joinswapExternAmountIn( address tokenIn, uint256 tokenAmountIn, uint256 minPoolAmountOut ) external payable returns (uint256 poolAmountOut); function isBound(address t) external view returns (bool); function getFinalTokens() external view returns (address[] memory tokens); function totalSupply() external view returns (uint256); function getDenormalizedWeight(address token) external view returns (uint256); function getTotalDenormalizedWeight() external view returns (uint256); function getSwapFee() external view returns (uint256); function calcPoolOutGivenSingleIn( uint256 tokenBalanceIn, uint256 tokenWeightIn, uint256 poolSupply, uint256 totalWeight, uint256 tokenAmountIn, uint256 swapFee ) external pure returns (uint256 poolAmountOut); function getBalance(address token) external view returns (uint256); } interface IuniswapFactory_Balancer_ZapIn_General_V1 { function getExchange(address token) external view returns (address exchange); } interface Iuniswap_Balancer_ZapIn_General_V1 { function ethToTokenSwapInput(uint256 min_tokens, uint256 deadline) external payable returns (uint256 tokens_bought); // converting ERC20 to ERC20 and transfer function tokenToTokenSwapInput( uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address token_addr ) external returns (uint256 tokens_bought); function getTokenToEthInputPrice(uint256 tokens_sold) external view returns (uint256 eth_bought); function getEthToTokenInputPrice(uint256 eth_sold) external view returns (uint256 tokens_bought); function balanceOf(address _owner) external view returns (uint256); function transfer(address _to, uint256 _value) external returns (bool); function transferFrom(address from, address to, uint256 tokens) external returns (bool success); } interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } contract Balancer_ZapIn_General_V2 is ReentrancyGuard, Ownable { using SafeMath for uint256; using Address for address; bool private stopped = false; uint16 public goodwill; address public dzgoodwillAddress; IuniswapFactory_Balancer_ZapIn_General_V1 public UniSwapFactoryAddress = IuniswapFactory_Balancer_ZapIn_General_V1( 0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95 ); IBFactory_Balancer_ZapIn_General_V1 BalancerFactory = IBFactory_Balancer_ZapIn_General_V1( 0x9424B1412450D0f8Fc2255FAf6046b98213B76Bd ); address wethTokenAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; event Zapin( address _toWhomToIssue, address _toBalancerPoolAddress, uint256 _OutgoingBPT ); constructor( uint16 _goodwill, address _dzgoodwillAddress ) public { goodwill = _goodwill; dzgoodwillAddress = _dzgoodwillAddress; } // circuit breaker modifiers modifier stopInEmergency { if (stopped) { revert("Temporarily Paused"); } else { _; } } /** @notice This function is used to invest in given balancer pool through ETH/ERC20 Tokens @param _FromTokenContractAddress The token used for investment (address(0x00) if ether) @param _ToBalancerPoolAddress The address of balancer pool to zapin @param _amount The amount of ERC to invest @param _minPoolTokens for slippage @return success or failure */ function EasyZapIn( address _FromTokenContractAddress, address _ToBalancerPoolAddress, uint256 _amount, uint256 _minPoolTokens ) public payable nonReentrant stopInEmergency returns (uint256 tokensBought) { require( BalancerFactory.isBPool(_ToBalancerPoolAddress), "Invalid Balancer Pool" ); if (_FromTokenContractAddress == address(0)) { require(msg.value > 0, "ERR: No ETH sent"); address _ToTokenContractAddress = _getBestDeal( _ToBalancerPoolAddress, msg.value, _FromTokenContractAddress ); tokensBought = _performZapIn( msg.sender, _FromTokenContractAddress, _ToBalancerPoolAddress, msg.value, _ToTokenContractAddress, _minPoolTokens ); return tokensBought; } require(_amount > 0, "ERR: No ERC sent"); require(msg.value == 0, "ERR: ETH sent with tokens"); //transfer tokens to contract require( IERC20(_FromTokenContractAddress).transferFrom( msg.sender, address(this), _amount ), "Error in transferring ERC: 1" ); address _ToTokenContractAddress = _getBestDeal( _ToBalancerPoolAddress, _amount, _FromTokenContractAddress ); tokensBought = _performZapIn( msg.sender, _FromTokenContractAddress, _ToBalancerPoolAddress, _amount, _ToTokenContractAddress, _minPoolTokens ); } /** @notice This function is used to invest in given balancer pool through ETH/ERC20 Tokens with interface @param _toWhomToIssue The user address who want to invest @param _FromTokenContractAddress The token used for investment (address(0x00) if ether) @param _ToBalancerPoolAddress The address of balancer pool to zapin @param _amount The amount of ERC to invest @param _IntermediateToken The token for intermediate conversion before zapin @param _minPoolTokens for slippage @return The quantity of Balancer Pool tokens returned */ function ZapIn( address payable _toWhomToIssue, address _FromTokenContractAddress, address _ToBalancerPoolAddress, uint256 _amount, address _IntermediateToken, uint256 _minPoolTokens ) public payable nonReentrant stopInEmergency returns (uint256 tokensBought) { if (_FromTokenContractAddress == address(0)) { require(msg.value > 0, "ERR: No ETH sent"); tokensBought = _performZapIn( _toWhomToIssue, _FromTokenContractAddress, _ToBalancerPoolAddress, msg.value, _IntermediateToken, _minPoolTokens ); return tokensBought; } require(_amount > 0, "ERR: No ERC sent"); require(msg.value == 0, "ERR: ETH sent with tokens"); //transfer tokens to contract require( IERC20(_FromTokenContractAddress).transferFrom( msg.sender, address(this), _amount ), "Error in transferring ERC: 2" ); tokensBought = _performZapIn( _toWhomToIssue, _FromTokenContractAddress, _ToBalancerPoolAddress, _amount, _IntermediateToken, _minPoolTokens ); } /** @notice This function internally called by ZapIn() and EasyZapIn() @param _toWhomToIssue The user address who want to invest @param _FromTokenContractAddress The token used for investment (address(0x00) if ether) @param _ToBalancerPoolAddress The address of balancer pool to zapin @param _amount The amount of ETH/ERC to invest @param _IntermediateToken The token for intermediate conversion before zapin @param _minPoolTokens for slippage @return The quantity of Balancer Pool tokens returned */ function _performZapIn( address _toWhomToIssue, address _FromTokenContractAddress, address _ToBalancerPoolAddress, uint256 _amount, address _IntermediateToken, uint256 _minPoolTokens ) internal returns (uint256 tokensBought) { // check if isBound() bool isBound = IBPool_Balancer_ZapIn_General_V1(_ToBalancerPoolAddress) .isBound(_FromTokenContractAddress); uint256 balancerTokens; if (isBound) { balancerTokens = _enter2Balancer( _ToBalancerPoolAddress, _FromTokenContractAddress, _amount, _minPoolTokens ); } else { // swap tokens or eth uint256 tokenBought; if (_FromTokenContractAddress == address(0)) { tokenBought = _eth2Token(_IntermediateToken); } else { tokenBought = _token2Token( _FromTokenContractAddress, _IntermediateToken, _amount ); } //get BPT balancerTokens = _enter2Balancer( _ToBalancerPoolAddress, _IntermediateToken, tokenBought, _minPoolTokens ); } //transfer goodwill uint256 goodwillPortion = _transferGoodwill( _ToBalancerPoolAddress, balancerTokens ); emit Zapin( _toWhomToIssue, _ToBalancerPoolAddress, SafeMath.sub(balancerTokens, goodwillPortion) ); //transfer tokens to user IERC20(_ToBalancerPoolAddress).transfer( _toWhomToIssue, SafeMath.sub(balancerTokens, goodwillPortion) ); return SafeMath.sub(balancerTokens, goodwillPortion); } /** @notice This function is used to calculate and transfer goodwill @param _tokenContractAddress Token in which goodwill is deducted @param tokens2Trade The total amount of tokens to be zapped in @return The quantity of goodwill deducted */ function _transferGoodwill( address _tokenContractAddress, uint256 tokens2Trade ) internal returns (uint256 goodwillPortion) { goodwillPortion = SafeMath.div( SafeMath.mul(tokens2Trade, goodwill), 10000 ); if (goodwillPortion == 0) { return 0; } require( IERC20(_tokenContractAddress).transfer( dzgoodwillAddress, goodwillPortion ), "Error in transferring BPT:1" ); } /** @notice This function is used to zapin to balancer pool @param _ToBalancerPoolAddress The address of balancer pool to zap in @param _FromTokenContractAddress The token used to zap in @param tokens2Trade The amount of tokens to invest @return The quantity of Balancer Pool tokens returned */ function _enter2Balancer( address _ToBalancerPoolAddress, address _FromTokenContractAddress, uint256 tokens2Trade, uint256 _minPoolTokens ) internal returns (uint256 poolTokensOut) { require( IBPool_Balancer_ZapIn_General_V1(_ToBalancerPoolAddress).isBound( _FromTokenContractAddress ), "Token not bound" ); uint256 allowance = IERC20(_FromTokenContractAddress).allowance( address(this), _ToBalancerPoolAddress ); if (allowance < tokens2Trade) { IERC20(_FromTokenContractAddress).approve( _ToBalancerPoolAddress, uint256(-1) ); } poolTokensOut = IBPool_Balancer_ZapIn_General_V1(_ToBalancerPoolAddress) .joinswapExternAmountIn(_FromTokenContractAddress, tokens2Trade, _minPoolTokens); require(poolTokensOut > 0, "Error in entering balancer pool"); } /** @notice This function finds best token from the final tokens of balancer pool @param _ToBalancerPoolAddress The address of balancer pool to zap in @param _amount amount of eth/erc to invest @param _FromTokenContractAddress the token address which is used to invest @return The token address having max liquidity */ function _getBestDeal( address _ToBalancerPoolAddress, uint256 _amount, address _FromTokenContractAddress ) internal view returns (address _token) { //get token list address[] memory tokens = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).getFinalTokens(); uint256 amount = _amount; if (_FromTokenContractAddress != address(0)) { // check if isBound() bool isBound = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).isBound(_FromTokenContractAddress); if (isBound) return _FromTokenContractAddress; //get eth value for given token Iuniswap_Balancer_ZapIn_General_V1 FromUniSwapExchangeContractAddress = Iuniswap_Balancer_ZapIn_General_V1( UniSwapFactoryAddress.getExchange(_FromTokenContractAddress) ); //get qty of eth expected amount = Iuniswap_Balancer_ZapIn_General_V1( FromUniSwapExchangeContractAddress ).getTokenToEthInputPrice(_amount); } else { bool isBound = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).isBound(wethTokenAddress); if (isBound) return wethTokenAddress; } uint256 maxBPT; for (uint256 index = 0; index < tokens.length; index++) { Iuniswap_Balancer_ZapIn_General_V1 FromUniSwapExchangeContractAddress = Iuniswap_Balancer_ZapIn_General_V1( UniSwapFactoryAddress.getExchange(tokens[index]) ); if (address(FromUniSwapExchangeContractAddress) == address(0)) { continue; } //get qty of tokens uint256 expectedTokens = Iuniswap_Balancer_ZapIn_General_V1( FromUniSwapExchangeContractAddress ).getEthToTokenInputPrice(amount); //get bpt for given tokens uint256 expectedBPT = getToken2BPT( _ToBalancerPoolAddress, expectedTokens, tokens[index] ); //get token giving max BPT if (maxBPT < expectedBPT) { maxBPT = expectedBPT; _token = tokens[index]; } } } /** @notice Function gives the expected amount of pool tokens on investing @param _ToBalancerPoolAddress Address of balancer pool to zapin @param _IncomingERC The amount of ERC to invest @param _FromToken Address of token to zap in with @return Amount of BPT token */ function getToken2BPT( address _ToBalancerPoolAddress, uint256 _IncomingERC, address _FromToken ) internal view returns (uint256 tokensReturned) { uint256 totalSupply = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).totalSupply(); uint256 swapFee = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).getSwapFee(); uint256 totalWeight = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).getTotalDenormalizedWeight(); uint256 balance = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).getBalance(_FromToken); uint256 denorm = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).getDenormalizedWeight(_FromToken); tokensReturned = IBPool_Balancer_ZapIn_General_V1( _ToBalancerPoolAddress ).calcPoolOutGivenSingleIn( balance, denorm, totalSupply, totalWeight, _IncomingERC, swapFee ); } /** @notice This function is used to buy tokens from eth @param _tokenContractAddress Token address which we want to buy @return The quantity of token bought */ function _eth2Token(address _tokenContractAddress) internal returns (uint256 tokenBought) { if(_tokenContractAddress == wethTokenAddress) { IWETH(wethTokenAddress).deposit.value(msg.value)(); return msg.value; } Iuniswap_Balancer_ZapIn_General_V1 FromUniSwapExchangeContractAddress = Iuniswap_Balancer_ZapIn_General_V1( UniSwapFactoryAddress.getExchange(_tokenContractAddress) ); uint256 minTokenBought = FromUniSwapExchangeContractAddress .getEthToTokenInputPrice(msg.value); minTokenBought = SafeMath.div(SafeMath.mul(minTokenBought, 98), 100); tokenBought = FromUniSwapExchangeContractAddress .ethToTokenSwapInput .value(msg.value)(minTokenBought, SafeMath.add(now, 1800)); } /** @notice This function is used to swap tokens @param _FromTokenContractAddress The token address to swap from @param _ToTokenContractAddress The token address to swap to @param tokens2Trade The amount of tokens to swap @return The quantity of tokens bought */ function _token2Token( address _FromTokenContractAddress, address _ToTokenContractAddress, uint256 tokens2Trade ) internal returns (uint256 tokenBought) { Iuniswap_Balancer_ZapIn_General_V1 FromUniSwapExchangeContractAddress = Iuniswap_Balancer_ZapIn_General_V1( UniSwapFactoryAddress.getExchange(_FromTokenContractAddress) ); IERC20(_FromTokenContractAddress).approve( address(FromUniSwapExchangeContractAddress), tokens2Trade ); tokenBought = FromUniSwapExchangeContractAddress.tokenToTokenSwapInput( tokens2Trade, 1, 1, SafeMath.add(now, 1800), _ToTokenContractAddress ); require(tokenBought > 0, "Error in swapping ERC: 1"); } function set_new_goodwill(uint16 _new_goodwill) public onlyOwner { require( _new_goodwill >= 0 && _new_goodwill < 10000, "GoodWill Value not allowed" ); goodwill = _new_goodwill; } function set_new_dzgoodwillAddress(address _new_dzgoodwillAddress) public onlyOwner { dzgoodwillAddress = _new_dzgoodwillAddress; } function inCaseTokengetsStuck(IERC20 _TokenAddress) public onlyOwner { uint256 qty = _TokenAddress.balanceOf(address(this)); _TokenAddress.transfer(owner(), qty); } // - to Pause the contract function toggleContractActive() public onlyOwner { stopped = !stopped; } // - to withdraw any ETH balance sitting in the contract function withdraw() public onlyOwner { uint256 contractBalance = address(this).balance; address payable _to = owner().toPayable(); _to.transfer(contractBalance); } // - to kill the contract function destruct() public onlyOwner { address payable _to = owner().toPayable(); selfdestruct(_to); } function() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint16","name":"_goodwill","type":"uint16"},{"internalType":"address","name":"_dzgoodwillAddress","type":"address"}],"payable":false,"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":false,"internalType":"address","name":"_toWhomToIssue","type":"address"},{"indexed":false,"internalType":"address","name":"_toBalancerPoolAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_OutgoingBPT","type":"uint256"}],"name":"Zapin","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address","name":"_FromTokenContractAddress","type":"address"},{"internalType":"address","name":"_ToBalancerPoolAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minPoolTokens","type":"uint256"}],"name":"EasyZapIn","outputs":[{"internalType":"uint256","name":"tokensBought","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"UniSwapFactoryAddress","outputs":[{"internalType":"contract IuniswapFactory_Balancer_ZapIn_General_V1","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_toWhomToIssue","type":"address"},{"internalType":"address","name":"_FromTokenContractAddress","type":"address"},{"internalType":"address","name":"_ToBalancerPoolAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_IntermediateToken","type":"address"},{"internalType":"uint256","name":"_minPoolTokens","type":"uint256"}],"name":"ZapIn","outputs":[{"internalType":"uint256","name":"tokensBought","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"destruct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dzgoodwillAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goodwill","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_TokenAddress","type":"address"}],"name":"inCaseTokengetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_dzgoodwillAddress","type":"address"}],"name":"set_new_dzgoodwillAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"_new_goodwill","type":"uint16"}],"name":"set_new_goodwill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"toggleContractActive","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000805460ff60a81b19169055600280546001600160a01b031990811673c0a47dfe034b400b47bdad5fecda2621de6c4d9517909155600380548216739424b1412450d0f8fc2255faf6046b98213b76bd1790556004805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905534801561008357600080fd5b5060405161258c38038061258c833981810160405260408110156100a657600080fd5b5080516020909101516000805460ff191660011781556100cd6001600160e01b0361017916565b60008054610100600160a81b0319166101006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805461ffff9093167601000000000000000000000000000000000000000000000261ffff60b01b1990931692909217909155600180546001600160a01b039092166001600160a01b031990921691909117905561017d565b3390565b6124008061018c6000396000f3fe6080604052600436106100e85760003560e01c8063715018a61161008a5780638f32d59b116100595780638f32d59b146102ae578063b10e1dbc146102d7578063c3a8fcb014610305578063f2fde38b1461031a576100e8565b8063715018a614610207578063807065301461021c578063849e25f4146102665780638da5cb5b14610299576100e8565b806344da4abd116100c657806344da4abd14610129578063525d509e14610177578063551196d5146101a85780635de0398e146101db576100e8565b80631385d24c146100ea5780632b68b9c6146100ff5780633ccfd60b14610114575b005b3480156100f657600080fd5b506100e861034d565b34801561010b57600080fd5b506100e86103b5565b34801561012057600080fd5b506100e8610425565b6101656004803603608081101561013f57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356104b9565b60408051918252519081900360200190f35b34801561018357600080fd5b5061018c61084b565b604080516001600160a01b039092168252519081900360200190f35b3480156101b457600080fd5b506100e8600480360360208110156101cb57600080fd5b50356001600160a01b031661085a565b3480156101e757600080fd5b506101f06109b0565b6040805161ffff9092168252519081900360200190f35b34801561021357600080fd5b506100e86109c1565b610165600480360360c081101561023257600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135916080820135169060a00135610a57565b34801561027257600080fd5b506100e86004803603602081101561028957600080fd5b50356001600160a01b0316610d08565b3480156102a557600080fd5b5061018c610d71565b3480156102ba57600080fd5b506102c3610d85565b604080519115158252519081900360200190f35b3480156102e357600080fd5b506100e8600480360360208110156102fa57600080fd5b503561ffff16610dae565b34801561031157600080fd5b5061018c610e71565b34801561032657600080fd5b506100e86004803603602081101561033d57600080fd5b50356001600160a01b0316610e80565b610355610d85565b610394576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6103bd610d85565b6103fc576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b6000610417610409610d71565b6001600160a01b0316610ed3565b9050806001600160a01b0316ff5b61042d610d85565b61046c576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b3031600061047b610409610d71565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f193505050501580156104b4573d6000803e3d6000fd5b505050565b6000805460ff16610511576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff161561056e576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6003546040805163615db6e160e11b81526001600160a01b0387811660048301529151919092169163c2bb6dc2916024808301926020929190829003018186803b1580156105bb57600080fd5b505afa1580156105cf573d6000803e3d6000fd5b505050506040513d60208110156105e557600080fd5b5051610630576040805162461bcd60e51b8152602060048201526015602482015274125b9d985b1a590810985b185b98d95c88141bdbdb605a1b604482015290519081900360640190fd5b6001600160a01b0385166106ac5760003411610686576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b6000610693853488610eda565b90506106a33387873485886113c1565b91506108369050565b600083116106f4576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610743576040805162461bcd60e51b81526020600482015260196024820152784552523a204554482073656e74207769746820746f6b656e7360381b604482015290519081900360640190fd5b604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b038716916323b872dd9160648083019260209291908290030181600087803b15801561079857600080fd5b505af11580156107ac573d6000803e3d6000fd5b505050506040513d60208110156107c257600080fd5b5051610815576040805162461bcd60e51b815260206004820152601c60248201527f4572726f7220696e207472616e7366657272696e67204552433a203100000000604482015290519081900360640190fd5b6000610822858588610eda565b90506108323387878785886113c1565b9150505b6000805460ff19166001179055949350505050565b6002546001600160a01b031681565b610862610d85565b6108a1576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156108eb57600080fd5b505afa1580156108ff573d6000803e3d6000fd5b505050506040513d602081101561091557600080fd5b505190506001600160a01b03821663a9059cbb610930610d71565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561098057600080fd5b505af1158015610994573d6000803e3d6000fd5b505050506040513d60208110156109aa57600080fd5b50505050565b600054600160b01b900461ffff1681565b6109c9610d85565b610a08576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b6000805460ff16610aaf576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610b0c576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6001600160a01b038616610b775760003411610b62576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b610b708787873487876113c1565b9050610cf1565b60008411610bbf576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610c0e576040805162461bcd60e51b81526020600482015260196024820152784552523a204554482073656e74207769746820746f6b656e7360381b604482015290519081900360640190fd5b604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b038816916323b872dd9160648083019260209291908290030181600087803b158015610c6357600080fd5b505af1158015610c77573d6000803e3d6000fd5b505050506040513d6020811015610c8d57600080fd5b5051610ce0576040805162461bcd60e51b815260206004820152601c60248201527f4572726f7220696e207472616e7366657272696e67204552433a203200000000604482015290519081900360640190fd5b610cee8787878787876113c1565b90505b6000805460ff191660011790559695505050505050565b610d10610d85565b610d4f576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610d9f6115b3565b6001600160a01b031614905090565b610db6610d85565b610df5576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b6127108161ffff1610610e4f576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6000805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b6001546001600160a01b031681565b610e88610d85565b610ec7576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b610ed0816115b7565b50565b805b919050565b60006060846001600160a01b031663be3bbd2e6040518163ffffffff1660e01b815260040160006040518083038186803b158015610f1757600080fd5b505afa158015610f2b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610f5457600080fd5b8101908080516040519392919084640100000000821115610f7457600080fd5b908301906020820185811115610f8957600080fd5b8251866020820283011164010000000082111715610fa657600080fd5b82525081516020918201928201910280838360005b83811015610fd3578181015183820152602001610fbb565b50505050919091016040525092935086925050506001600160a01b0384161561118b576000866001600160a01b0316632f37b624866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561104e57600080fd5b505afa158015611062573d6000803e3d6000fd5b505050506040513d602081101561107857600080fd5b50519050801561108d578493505050506113ba565b600254604080516303795fb160e11b81526001600160a01b038881166004830152915160009392909216916306f2bf6291602480820192602092909190829003018186803b1580156110de57600080fd5b505afa1580156110f2573d6000803e3d6000fd5b505050506040513d602081101561110857600080fd5b5051604080516395b68fe760e01b8152600481018a905290519192506001600160a01b038316916395b68fe791602480820192602092909190829003018186803b15801561115557600080fd5b505afa158015611169573d6000803e3d6000fd5b505050506040513d602081101561117f57600080fd5b50519250611229915050565b6004805460408051630bcded8960e21b81526001600160a01b03928316938101939093525160009291891691632f37b624916024808301926020929190829003018186803b1580156111dc57600080fd5b505afa1580156111f0573d6000803e3d6000fd5b505050506040513d602081101561120657600080fd5b5051905080156112275750506004546001600160a01b031691506113ba9050565b505b6000805b83518110156113b55760025484516000916001600160a01b0316906306f2bf629087908590811061125a57fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156112a857600080fd5b505afa1580156112bc573d6000803e3d6000fd5b505050506040513d60208110156112d257600080fd5b505190506001600160a01b0381166112ea57506113ad565b6000816001600160a01b031663cd7724c3866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561133057600080fd5b505afa158015611344573d6000803e3d6000fd5b505050506040513d602081101561135a57600080fd5b50518651909150600090611385908c9084908a908890811061137857fe5b6020026020010151611662565b9050808510156113a95780945086848151811061139e57fe5b602002602001015197505b5050505b60010161122d565b505050505b9392505050565b600080856001600160a01b0316632f37b624886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561141a57600080fd5b505afa15801561142e573d6000803e3d6000fd5b505050506040513d602081101561144457600080fd5b50519050600081156114635761145c8789888761194d565b90506114a1565b60006001600160a01b0389166114835761147c86611bff565b9050611491565b61148e898789611e1a565b90505b61149d8887838861194d565b9150505b60006114ad8883612023565b90507f7c58760c09b45377b9759b1584bfa97aaad8a040feb4ec965b2b76e20b4af07f8a896114dc8585612131565b604080516001600160a01b0394851681529290931660208301528183015290519081900360600190a1876001600160a01b031663a9059cbb8b61151f8585612131565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561156e57600080fd5b505af1158015611582573d6000803e3d6000fd5b505050506040513d602081101561159857600080fd5b506115a590508282612131565b9a9950505050505050505050565b3390565b6001600160a01b0381166115fc5760405162461bcd60e51b81526004018080602001828103825260268152602001806123656026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b15801561171057600080fd5b505afa158015611724573d6000803e3d6000fd5b505050506040513d602081101561173a57600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0389169163936c3477916004808301926020929190829003018186803b15801561178257600080fd5b505afa158015611796573d6000803e3d6000fd5b505050506040513d60208110156117ac57600080fd5b50516040805163f8b2cb4f60e01b81526001600160a01b0388811660048301529151929350600092918a169163f8b2cb4f91602480820192602092909190829003018186803b1580156117fe57600080fd5b505afa158015611812573d6000803e3d6000fd5b505050506040513d602081101561182857600080fd5b505160408051634a46c67360e11b81526001600160a01b0389811660048301529151929350600092918b169163948d8ce691602480820192602092909190829003018186803b15801561187a57600080fd5b505afa15801561188e573d6000803e3d6000fd5b505050506040513d60208110156118a457600080fd5b505160408051638656b65360e01b815260048101859052602481018390526044810188905260648101869052608481018b905260a4810187905290519192506001600160a01b038b1691638656b6539160c480820192602092909190829003018186803b15801561191457600080fd5b505afa158015611928573d6000803e3d6000fd5b505050506040513d602081101561193e57600080fd5b50519998505050505050505050565b6000846001600160a01b0316632f37b624856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156119a557600080fd5b505afa1580156119b9573d6000803e3d6000fd5b505050506040513d60208110156119cf57600080fd5b5051611a14576040805162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08189bdd5b99608a1b604482015290519081900360640190fd5b60408051636eb1769f60e11b81523060048201526001600160a01b038781166024830152915160009287169163dd62ed3e916044808301926020929190829003018186803b158015611a6557600080fd5b505afa158015611a79573d6000803e3d6000fd5b505050506040513d6020811015611a8f57600080fd5b5051905083811015611b1c576040805163095ea7b360e01b81526001600160a01b038881166004830152600019602483015291519187169163095ea7b3916044808201926020929091908290030181600087803b158015611aef57600080fd5b505af1158015611b03573d6000803e3d6000fd5b505050506040513d6020811015611b1957600080fd5b50505b60408051635db3427760e01b81526001600160a01b0387811660048301526024820187905260448201869052915191881691635db34277916064808201926020929091908290030181600087803b158015611b7657600080fd5b505af1158015611b8a573d6000803e3d6000fd5b505050506040513d6020811015611ba057600080fd5b5051915081611bf6576040805162461bcd60e51b815260206004820152601f60248201527f4572726f7220696e20656e746572696e672062616c616e63657220706f6f6c00604482015290519081900360640190fd5b50949350505050565b6004546000906001600160a01b0383811691161415611c7e576004805460408051630d0e30db60e41b815290516001600160a01b039092169263d0e30db0923492808301926000929182900301818588803b158015611c5d57600080fd5b505af1158015611c71573d6000803e3d6000fd5b5050505050349050610ed5565b600254604080516303795fb160e11b81526001600160a01b038581166004830152915160009392909216916306f2bf6291602480820192602092909190829003018186803b158015611ccf57600080fd5b505afa158015611ce3573d6000803e3d6000fd5b505050506040513d6020811015611cf957600080fd5b50516040805163cd7724c360e01b815234600482015290519192506000916001600160a01b0384169163cd7724c3916024808301926020929190829003018186803b158015611d4757600080fd5b505afa158015611d5b573d6000803e3d6000fd5b505050506040513d6020811015611d7157600080fd5b50519050611d8a611d83826062612173565b60646121cc565b9050816001600160a01b031663f39b5b9b3483611da94261070861220e565b6040518463ffffffff1660e01b815260040180838152602001828152602001925050506020604051808303818588803b158015611de557600080fd5b505af1158015611df9573d6000803e3d6000fd5b50505050506040513d6020811015611e1057600080fd5b5051949350505050565b600254604080516303795fb160e11b81526001600160a01b0386811660048301529151600093849316916306f2bf62916024808301926020929190829003018186803b158015611e6957600080fd5b505afa158015611e7d573d6000803e3d6000fd5b505050506040513d6020811015611e9357600080fd5b50516040805163095ea7b360e01b81526001600160a01b0380841660048301526024820187905291519293509087169163095ea7b3916044808201926020929091908290030181600087803b158015611eeb57600080fd5b505af1158015611eff573d6000803e3d6000fd5b505050506040513d6020811015611f1557600080fd5b50506001600160a01b03811663ddf7e1a784600180611f364261070861220e565b896040518663ffffffff1660e01b815260040180868152602001858152602001848152602001838152602001826001600160a01b03166001600160a01b0316815260200195505050505050602060405180830381600087803b158015611f9b57600080fd5b505af1158015611faf573d6000803e3d6000fd5b505050506040513d6020811015611fc557600080fd5b505191508161201b576040805162461bcd60e51b815260206004820152601860248201527f4572726f7220696e207377617070696e67204552433a20310000000000000000604482015290519081900360640190fd5b509392505050565b6000805461204990612041908490600160b01b900461ffff16612173565b6127106121cc565b9050806120585750600061212b565b6001546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519185169163a9059cbb916044808201926020929091908290030181600087803b1580156120ae57600080fd5b505af11580156120c2573d6000803e3d6000fd5b505050506040513d60208110156120d857600080fd5b505161212b576040805162461bcd60e51b815260206004820152601b60248201527f4572726f7220696e207472616e7366657272696e67204250543a310000000000604482015290519081900360640190fd5b92915050565b60006113ba83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612268565b6000826121825750600061212b565b8282028284828161218f57fe5b04146113ba5760405162461bcd60e51b815260040180806020018281038252602181526020018061238b6021913960400191505060405180910390fd5b60006113ba83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122ff565b6000828201838110156113ba576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081848411156122f75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122bc5781810151838201526020016122a4565b50505050905090810190601f1680156122e95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361234e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156122bc5781810151838201526020016122a4565b50600083858161235a57fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a72315820840645eaecb0834f421f9ebdcc43a3d687edaca15d3ce089deafbd9e8e6d554864736f6c634300050c00320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e737b6afec2320f616297e59445b60a11e3ef75f
Deployed Bytecode
0x6080604052600436106100e85760003560e01c8063715018a61161008a5780638f32d59b116100595780638f32d59b146102ae578063b10e1dbc146102d7578063c3a8fcb014610305578063f2fde38b1461031a576100e8565b8063715018a614610207578063807065301461021c578063849e25f4146102665780638da5cb5b14610299576100e8565b806344da4abd116100c657806344da4abd14610129578063525d509e14610177578063551196d5146101a85780635de0398e146101db576100e8565b80631385d24c146100ea5780632b68b9c6146100ff5780633ccfd60b14610114575b005b3480156100f657600080fd5b506100e861034d565b34801561010b57600080fd5b506100e86103b5565b34801561012057600080fd5b506100e8610425565b6101656004803603608081101561013f57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356104b9565b60408051918252519081900360200190f35b34801561018357600080fd5b5061018c61084b565b604080516001600160a01b039092168252519081900360200190f35b3480156101b457600080fd5b506100e8600480360360208110156101cb57600080fd5b50356001600160a01b031661085a565b3480156101e757600080fd5b506101f06109b0565b6040805161ffff9092168252519081900360200190f35b34801561021357600080fd5b506100e86109c1565b610165600480360360c081101561023257600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135916080820135169060a00135610a57565b34801561027257600080fd5b506100e86004803603602081101561028957600080fd5b50356001600160a01b0316610d08565b3480156102a557600080fd5b5061018c610d71565b3480156102ba57600080fd5b506102c3610d85565b604080519115158252519081900360200190f35b3480156102e357600080fd5b506100e8600480360360208110156102fa57600080fd5b503561ffff16610dae565b34801561031157600080fd5b5061018c610e71565b34801561032657600080fd5b506100e86004803603602081101561033d57600080fd5b50356001600160a01b0316610e80565b610355610d85565b610394576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6103bd610d85565b6103fc576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b6000610417610409610d71565b6001600160a01b0316610ed3565b9050806001600160a01b0316ff5b61042d610d85565b61046c576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b3031600061047b610409610d71565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f193505050501580156104b4573d6000803e3d6000fd5b505050565b6000805460ff16610511576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff161561056e576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6003546040805163615db6e160e11b81526001600160a01b0387811660048301529151919092169163c2bb6dc2916024808301926020929190829003018186803b1580156105bb57600080fd5b505afa1580156105cf573d6000803e3d6000fd5b505050506040513d60208110156105e557600080fd5b5051610630576040805162461bcd60e51b8152602060048201526015602482015274125b9d985b1a590810985b185b98d95c88141bdbdb605a1b604482015290519081900360640190fd5b6001600160a01b0385166106ac5760003411610686576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b6000610693853488610eda565b90506106a33387873485886113c1565b91506108369050565b600083116106f4576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610743576040805162461bcd60e51b81526020600482015260196024820152784552523a204554482073656e74207769746820746f6b656e7360381b604482015290519081900360640190fd5b604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b038716916323b872dd9160648083019260209291908290030181600087803b15801561079857600080fd5b505af11580156107ac573d6000803e3d6000fd5b505050506040513d60208110156107c257600080fd5b5051610815576040805162461bcd60e51b815260206004820152601c60248201527f4572726f7220696e207472616e7366657272696e67204552433a203100000000604482015290519081900360640190fd5b6000610822858588610eda565b90506108323387878785886113c1565b9150505b6000805460ff19166001179055949350505050565b6002546001600160a01b031681565b610862610d85565b6108a1576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156108eb57600080fd5b505afa1580156108ff573d6000803e3d6000fd5b505050506040513d602081101561091557600080fd5b505190506001600160a01b03821663a9059cbb610930610d71565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561098057600080fd5b505af1158015610994573d6000803e3d6000fd5b505050506040513d60208110156109aa57600080fd5b50505050565b600054600160b01b900461ffff1681565b6109c9610d85565b610a08576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b6000805460ff16610aaf576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610b0c576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6001600160a01b038616610b775760003411610b62576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b610b708787873487876113c1565b9050610cf1565b60008411610bbf576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610c0e576040805162461bcd60e51b81526020600482015260196024820152784552523a204554482073656e74207769746820746f6b656e7360381b604482015290519081900360640190fd5b604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b038816916323b872dd9160648083019260209291908290030181600087803b158015610c6357600080fd5b505af1158015610c77573d6000803e3d6000fd5b505050506040513d6020811015610c8d57600080fd5b5051610ce0576040805162461bcd60e51b815260206004820152601c60248201527f4572726f7220696e207472616e7366657272696e67204552433a203200000000604482015290519081900360640190fd5b610cee8787878787876113c1565b90505b6000805460ff191660011790559695505050505050565b610d10610d85565b610d4f576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610d9f6115b3565b6001600160a01b031614905090565b610db6610d85565b610df5576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b6127108161ffff1610610e4f576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6000805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b6001546001600160a01b031681565b610e88610d85565b610ec7576040805162461bcd60e51b815260206004820181905260248201526000805160206123ac833981519152604482015290519081900360640190fd5b610ed0816115b7565b50565b805b919050565b60006060846001600160a01b031663be3bbd2e6040518163ffffffff1660e01b815260040160006040518083038186803b158015610f1757600080fd5b505afa158015610f2b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610f5457600080fd5b8101908080516040519392919084640100000000821115610f7457600080fd5b908301906020820185811115610f8957600080fd5b8251866020820283011164010000000082111715610fa657600080fd5b82525081516020918201928201910280838360005b83811015610fd3578181015183820152602001610fbb565b50505050919091016040525092935086925050506001600160a01b0384161561118b576000866001600160a01b0316632f37b624866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561104e57600080fd5b505afa158015611062573d6000803e3d6000fd5b505050506040513d602081101561107857600080fd5b50519050801561108d578493505050506113ba565b600254604080516303795fb160e11b81526001600160a01b038881166004830152915160009392909216916306f2bf6291602480820192602092909190829003018186803b1580156110de57600080fd5b505afa1580156110f2573d6000803e3d6000fd5b505050506040513d602081101561110857600080fd5b5051604080516395b68fe760e01b8152600481018a905290519192506001600160a01b038316916395b68fe791602480820192602092909190829003018186803b15801561115557600080fd5b505afa158015611169573d6000803e3d6000fd5b505050506040513d602081101561117f57600080fd5b50519250611229915050565b6004805460408051630bcded8960e21b81526001600160a01b03928316938101939093525160009291891691632f37b624916024808301926020929190829003018186803b1580156111dc57600080fd5b505afa1580156111f0573d6000803e3d6000fd5b505050506040513d602081101561120657600080fd5b5051905080156112275750506004546001600160a01b031691506113ba9050565b505b6000805b83518110156113b55760025484516000916001600160a01b0316906306f2bf629087908590811061125a57fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156112a857600080fd5b505afa1580156112bc573d6000803e3d6000fd5b505050506040513d60208110156112d257600080fd5b505190506001600160a01b0381166112ea57506113ad565b6000816001600160a01b031663cd7724c3866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561133057600080fd5b505afa158015611344573d6000803e3d6000fd5b505050506040513d602081101561135a57600080fd5b50518651909150600090611385908c9084908a908890811061137857fe5b6020026020010151611662565b9050808510156113a95780945086848151811061139e57fe5b602002602001015197505b5050505b60010161122d565b505050505b9392505050565b600080856001600160a01b0316632f37b624886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561141a57600080fd5b505afa15801561142e573d6000803e3d6000fd5b505050506040513d602081101561144457600080fd5b50519050600081156114635761145c8789888761194d565b90506114a1565b60006001600160a01b0389166114835761147c86611bff565b9050611491565b61148e898789611e1a565b90505b61149d8887838861194d565b9150505b60006114ad8883612023565b90507f7c58760c09b45377b9759b1584bfa97aaad8a040feb4ec965b2b76e20b4af07f8a896114dc8585612131565b604080516001600160a01b0394851681529290931660208301528183015290519081900360600190a1876001600160a01b031663a9059cbb8b61151f8585612131565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561156e57600080fd5b505af1158015611582573d6000803e3d6000fd5b505050506040513d602081101561159857600080fd5b506115a590508282612131565b9a9950505050505050505050565b3390565b6001600160a01b0381166115fc5760405162461bcd60e51b81526004018080602001828103825260268152602001806123656026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b15801561171057600080fd5b505afa158015611724573d6000803e3d6000fd5b505050506040513d602081101561173a57600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0389169163936c3477916004808301926020929190829003018186803b15801561178257600080fd5b505afa158015611796573d6000803e3d6000fd5b505050506040513d60208110156117ac57600080fd5b50516040805163f8b2cb4f60e01b81526001600160a01b0388811660048301529151929350600092918a169163f8b2cb4f91602480820192602092909190829003018186803b1580156117fe57600080fd5b505afa158015611812573d6000803e3d6000fd5b505050506040513d602081101561182857600080fd5b505160408051634a46c67360e11b81526001600160a01b0389811660048301529151929350600092918b169163948d8ce691602480820192602092909190829003018186803b15801561187a57600080fd5b505afa15801561188e573d6000803e3d6000fd5b505050506040513d60208110156118a457600080fd5b505160408051638656b65360e01b815260048101859052602481018390526044810188905260648101869052608481018b905260a4810187905290519192506001600160a01b038b1691638656b6539160c480820192602092909190829003018186803b15801561191457600080fd5b505afa158015611928573d6000803e3d6000fd5b505050506040513d602081101561193e57600080fd5b50519998505050505050505050565b6000846001600160a01b0316632f37b624856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156119a557600080fd5b505afa1580156119b9573d6000803e3d6000fd5b505050506040513d60208110156119cf57600080fd5b5051611a14576040805162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08189bdd5b99608a1b604482015290519081900360640190fd5b60408051636eb1769f60e11b81523060048201526001600160a01b038781166024830152915160009287169163dd62ed3e916044808301926020929190829003018186803b158015611a6557600080fd5b505afa158015611a79573d6000803e3d6000fd5b505050506040513d6020811015611a8f57600080fd5b5051905083811015611b1c576040805163095ea7b360e01b81526001600160a01b038881166004830152600019602483015291519187169163095ea7b3916044808201926020929091908290030181600087803b158015611aef57600080fd5b505af1158015611b03573d6000803e3d6000fd5b505050506040513d6020811015611b1957600080fd5b50505b60408051635db3427760e01b81526001600160a01b0387811660048301526024820187905260448201869052915191881691635db34277916064808201926020929091908290030181600087803b158015611b7657600080fd5b505af1158015611b8a573d6000803e3d6000fd5b505050506040513d6020811015611ba057600080fd5b5051915081611bf6576040805162461bcd60e51b815260206004820152601f60248201527f4572726f7220696e20656e746572696e672062616c616e63657220706f6f6c00604482015290519081900360640190fd5b50949350505050565b6004546000906001600160a01b0383811691161415611c7e576004805460408051630d0e30db60e41b815290516001600160a01b039092169263d0e30db0923492808301926000929182900301818588803b158015611c5d57600080fd5b505af1158015611c71573d6000803e3d6000fd5b5050505050349050610ed5565b600254604080516303795fb160e11b81526001600160a01b038581166004830152915160009392909216916306f2bf6291602480820192602092909190829003018186803b158015611ccf57600080fd5b505afa158015611ce3573d6000803e3d6000fd5b505050506040513d6020811015611cf957600080fd5b50516040805163cd7724c360e01b815234600482015290519192506000916001600160a01b0384169163cd7724c3916024808301926020929190829003018186803b158015611d4757600080fd5b505afa158015611d5b573d6000803e3d6000fd5b505050506040513d6020811015611d7157600080fd5b50519050611d8a611d83826062612173565b60646121cc565b9050816001600160a01b031663f39b5b9b3483611da94261070861220e565b6040518463ffffffff1660e01b815260040180838152602001828152602001925050506020604051808303818588803b158015611de557600080fd5b505af1158015611df9573d6000803e3d6000fd5b50505050506040513d6020811015611e1057600080fd5b5051949350505050565b600254604080516303795fb160e11b81526001600160a01b0386811660048301529151600093849316916306f2bf62916024808301926020929190829003018186803b158015611e6957600080fd5b505afa158015611e7d573d6000803e3d6000fd5b505050506040513d6020811015611e9357600080fd5b50516040805163095ea7b360e01b81526001600160a01b0380841660048301526024820187905291519293509087169163095ea7b3916044808201926020929091908290030181600087803b158015611eeb57600080fd5b505af1158015611eff573d6000803e3d6000fd5b505050506040513d6020811015611f1557600080fd5b50506001600160a01b03811663ddf7e1a784600180611f364261070861220e565b896040518663ffffffff1660e01b815260040180868152602001858152602001848152602001838152602001826001600160a01b03166001600160a01b0316815260200195505050505050602060405180830381600087803b158015611f9b57600080fd5b505af1158015611faf573d6000803e3d6000fd5b505050506040513d6020811015611fc557600080fd5b505191508161201b576040805162461bcd60e51b815260206004820152601860248201527f4572726f7220696e207377617070696e67204552433a20310000000000000000604482015290519081900360640190fd5b509392505050565b6000805461204990612041908490600160b01b900461ffff16612173565b6127106121cc565b9050806120585750600061212b565b6001546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519185169163a9059cbb916044808201926020929091908290030181600087803b1580156120ae57600080fd5b505af11580156120c2573d6000803e3d6000fd5b505050506040513d60208110156120d857600080fd5b505161212b576040805162461bcd60e51b815260206004820152601b60248201527f4572726f7220696e207472616e7366657272696e67204250543a310000000000604482015290519081900360640190fd5b92915050565b60006113ba83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612268565b6000826121825750600061212b565b8282028284828161218f57fe5b04146113ba5760405162461bcd60e51b815260040180806020018281038252602181526020018061238b6021913960400191505060405180910390fd5b60006113ba83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122ff565b6000828201838110156113ba576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081848411156122f75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122bc5781810151838201526020016122a4565b50505050905090810190601f1680156122e95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361234e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156122bc5781810151838201526020016122a4565b50600083858161235a57fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a72315820840645eaecb0834f421f9ebdcc43a3d687edaca15d3ce089deafbd9e8e6d554864736f6c634300050c0032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e737b6afec2320f616297e59445b60a11e3ef75f
-----Decoded View---------------
Arg [0] : _goodwill (uint16): 0
Arg [1] : _dzgoodwillAddress (address): 0xE737b6AfEC2320f616297e59445b60a11e3eF75F
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 000000000000000000000000e737b6afec2320f616297e59445b60a11e3ef75f
Deployed Bytecode Sourcemap
20903:17804:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38151:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38151:86:0;;;:::i;38541:125::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38541:125:0;;;:::i;38307:195::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38307:195:0;;;:::i;22462:1818::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;22462:1818:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;21143:174;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21143:174:0;;;:::i;:::-;;;;-1:-1:-1;;;;;21143:174:0;;;;;;;;;;;;;;37924:187;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37924:187:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37924:187:0;-1:-1:-1;;;;;37924:187:0;;:::i;21073:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21073:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8924:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8924:140:0;;;:::i;24872:1401::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;24872:1401:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37748:168::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37748:168:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37748:168:0;-1:-1:-1;;;;;37748:168:0;;:::i;8113:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8113:79:0;;;:::i;8479:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8479:94:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;37502:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37502:238:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37502:238:0;;;;:::i;21102:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21102:32:0;;;:::i;9219:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9219:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9219:109:0;-1:-1:-1;;;;;9219:109:0;;:::i;38151:86::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;38222:7;;;-1:-1:-1;;;;38211:18:0;;-1:-1:-1;;;38222:7:0;;;;;;38221:8;38211:18;;;;;;38151:86::o;38541:125::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;38589:19;38611;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38611:17:0;;:19::i;:::-;38589:41;;38654:3;-1:-1:-1;;;;;38641:17:0;;38307:195;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;38389:4;38381:21;38355:23;38435:19;:7;:5;:7::i;:19::-;38465:29;;38413:41;;-1:-1:-1;;;;;;38465:12:0;;;:29;;;;;38478:15;;38465:29;;;;38478:15;38465:12;:29;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38465:29:0;8382:1;;38307:195::o;22462:1818::-;22685:20;11709:11;;;;11701:55;;;;;-1:-1:-1;;;11701:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11848:5;11834:19;;-1:-1:-1;;11834:19:0;;;;;-1:-1:-1;;;21952:7:0;;11834:19;21952:7;21948:102;;;21976:28;;;-1:-1:-1;;;21976:28:0;;;;;;;;;;;;-1:-1:-1;;;21976:28:0;;;;;;;;;;;;;;21948:102;22740:15;;:47;;;-1:-1:-1;;;22740:47:0;;-1:-1:-1;;;;;22740:47:0;;;;;;;;;:15;;;;;:23;;:47;;;;;;;;;;;;;;:15;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;22740:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22740:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22740:47:0;22718:118;;;;;-1:-1:-1;;;22718:118:0;;;;;;;;;;;;-1:-1:-1;;;22718:118:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22853:39:0;;22849:618;;22929:1;22917:9;:13;22909:42;;;;;-1:-1:-1;;;22909:42:0;;;;;;;;;;;;-1:-1:-1;;;22909:42:0;;;;;;;;;;;;;;;22968:31;23002:140;23033:22;23074:9;23102:25;23002:12;:140::i;:::-;22968:174;;23174:245;23206:10;23235:25;23279:22;23320:9;23348:23;23390:14;23174:13;:245::i;:::-;23159:260;-1:-1:-1;23436:19:0;;-1:-1:-1;23436:19:0;22849:618;23497:1;23487:7;:11;23479:40;;;;;-1:-1:-1;;;23479:40:0;;;;;;;;;;;;-1:-1:-1;;;23479:40:0;;;;;;;;;;;;;;;23538:9;:14;23530:52;;;;;-1:-1:-1;;;23530:52:0;;;;;;;;;;;;-1:-1:-1;;;23530:52:0;;;;;;;;;;;;;;;23656:148;;;-1:-1:-1;;;23656:148:0;;23721:10;23656:148;;;;23758:4;23656:148;;;;;;;;;;;;-1:-1:-1;;;;;23656:46:0;;;;;:148;;;;;;;;;;;;;;-1:-1:-1;23656:46:0;:148;;;5:2:-1;;;;30:1;27;20:12;5:2;23656:148:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23656:148:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23656:148:0;23634:226;;;;;-1:-1:-1;;;23634:226:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23873:31;23907:122;23934:22;23971:7;23993:25;23907:12;:122::i;:::-;23873:156;;24057:215;24085:10;24110:25;24150:22;24187:7;24209:23;24247:14;24057:13;:215::i;:::-;24042:230;;22037:1;;12014:11;:18;;-1:-1:-1;;12014:18:0;12028:4;12014:18;;;22462:1818;;-1:-1:-1;;;;22462:1818:0:o;21143:174::-;;;-1:-1:-1;;;;;21143:174:0;;:::o;37924:187::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;38018:38;;;-1:-1:-1;;;38018:38:0;;38050:4;38018:38;;;;;;38004:11;;-1:-1:-1;;;;;38018:23:0;;;;;:38;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;38018:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38018:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38018:38:0;;-1:-1:-1;;;;;;38067:22:0;;;38090:7;:5;:7::i;:::-;38099:3;38067:36;;;;;;;;;;;;;-1:-1:-1;;;;;38067:36:0;-1:-1:-1;;;;;38067:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38067:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38067:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;37924:187:0:o;21073:22::-;;;-1:-1:-1;;;21073:22:0;;;;;:::o;8924:140::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;9023:1;9007:6;;8986:40;;9007:6;;;;-1:-1:-1;;;;;9007:6:0;;8986:40;;9023:1;;8986:40;9054:1;9037:19;;-1:-1:-1;;;;;;9037:19:0;;;8924:140::o;24872:1401::-;25169:20;11709:11;;;;11701:55;;;;;-1:-1:-1;;;11701:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11848:5;11834:19;;-1:-1:-1;;11834:19:0;;;;;-1:-1:-1;;;21952:7:0;;11834:19;21952:7;21948:102;;;21976:28;;;-1:-1:-1;;;21976:28:0;;;;;;;;;;;;-1:-1:-1;;;21976:28:0;;;;;;;;;;;;;;21948:102;-1:-1:-1;;;;;25208:39:0;;25204:426;;25284:1;25272:9;:13;25264:42;;;;;-1:-1:-1;;;25264:42:0;;;;;;;;;;;;-1:-1:-1;;;25264:42:0;;;;;;;;;;;;;;;25338:244;25370:14;25403:25;25447:22;25488:9;25516:18;25553:14;25338:13;:244::i;:::-;25323:259;-1:-1:-1;25599:19:0;;25204:426;25660:1;25650:7;:11;25642:40;;;;;-1:-1:-1;;;25642:40:0;;;;;;;;;;;;-1:-1:-1;;;25642:40:0;;;;;;;;;;;;;;;25701:9;:14;25693:52;;;;;-1:-1:-1;;;25693:52:0;;;;;;;;;;;;-1:-1:-1;;;25693:52:0;;;;;;;;;;;;;;;25819:148;;;-1:-1:-1;;;25819:148:0;;25884:10;25819:148;;;;25921:4;25819:148;;;;;;;;;;;;-1:-1:-1;;;;;25819:46:0;;;;;:148;;;;;;;;;;;;;;-1:-1:-1;25819:46:0;:148;;;5:2:-1;;;;30:1;27;20:12;5:2;25819:148:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25819:148:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25819:148:0;25797:226;;;;;-1:-1:-1;;;25797:226:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26051:214;26079:14;26108:25;26148:22;26185:7;26207:18;26240:14;26051:13;:214::i;:::-;26036:229;;22037:1;12014:11;:18;;-1:-1:-1;;12014:18:0;12028:4;12014:18;;;24872:1401;;-1:-1:-1;;;;;;24872:1401:0:o;37748:168::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;37866:17;:42;;-1:-1:-1;;;;;;37866:42:0;-1:-1:-1;;;;;37866:42:0;;;;;;;;;;37748:168::o;8113:79::-;8151:7;8178:6;;;;-1:-1:-1;;;;;8178:6:0;;8113:79::o;8479:94::-;8519:4;8559:6;;;;;-1:-1:-1;;;;;8559:6:0;8543:12;:10;:12::i;:::-;-1:-1:-1;;;;;8543:22:0;;8536:29;;8479:94;:::o;37502:238::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;37638:5;37622:13;:21;;;37578:119;;;;;-1:-1:-1;;;37578:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37708:8;:24;;;;;;-1:-1:-1;;;37708:24:0;-1:-1:-1;;;;37708:24:0;;;;;;;;;37502:238::o;21102:32::-;;;-1:-1:-1;;;;;21102:32:0;;:::o;9219:109::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;9292:28;9311:8;9292:18;:28::i;:::-;9219:109;:::o;1599:127::-;1709:7;1599:127;;;;:::o;31373:2452::-;31536:14;31589:23;31662:22;-1:-1:-1;;;;;31615:95:0;;:97;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31615:97:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31615:97:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;31615:97:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;31615:97:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;31615:97:0;;421:4:-1;412:14;;;;31615:97:0;;;;;412:14:-1;31615:97:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;31615:97:0;;;;;;-1:-1:-1;31589:123:0;;-1:-1:-1;31742:7:0;;-1:-1:-1;;;;;;;;31774:39:0;;;31770:1002;;31865:12;31931:22;-1:-1:-1;;;;;31880:96:0;;31977:25;31880:123;;;;;;;;;;;;;-1:-1:-1;;;;;31880:123:0;-1:-1:-1;;;;;31880:123:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31880:123:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31880:123:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31880:123:0;;-1:-1:-1;32020:45:0;;;;32040:25;32033:32;;;;;;;32020:45;32267:21;;:60;;;-1:-1:-1;;;32267:60:0;;-1:-1:-1;;;;;32267:60:0;;;;;;;;;32129:69;;32267:21;;;;;:33;;:60;;;;;;;;;;;;;;;:21;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;32267:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32267:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32267:60:0;32407:135;;;-1:-1:-1;;;32407:135:0;;;;;;;;;;32267:60;;-1:-1:-1;;;;;;32407:126:0;;;;;:135;;;;;32267:60;;32407:135;;;;;;;;:126;:135;;;5:2:-1;;;;30:1;27;20:12;5:2;32407:135:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32407:135:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32407:135:0;;-1:-1:-1;31770:1002:0;;-1:-1:-1;;31770:1002:0;;32687:16;;;32590:114;;;-1:-1:-1;;;32590:114:0;;-1:-1:-1;;;;;32687:16:0;;;32590:114;;;;;;;;32575:12;;32590:96;;;;;;:114;;;;;;;;;;;;;;:96;:114;;;5:2:-1;;;;30:1;27;20:12;5:2;32590:114:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32590:114:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32590:114:0;;-1:-1:-1;32721:36:0;;;;-1:-1:-1;;32741:16:0;;-1:-1:-1;;;;;32741:16:0;;-1:-1:-1;32734:23:0;;-1:-1:-1;32734:23:0;32721:36;31770:1002;;32784:14;;32811:1007;32843:6;:13;32835:5;:21;32811:1007;;;33022:21;;33056:13;;32884:69;;-1:-1:-1;;;;;33022:21:0;;:33;;33056:6;;33063:5;;33056:13;;;;;;;;;;;;33022:48;;;;;;;;;;;;;-1:-1:-1;;;;;33022:48:0;-1:-1:-1;;;;;33022:48:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33022:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33022:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33022:48:0;;-1:-1:-1;;;;;;33106:57:0;;33102:106;;33184:8;;;33102:106;33257:22;33335:34;-1:-1:-1;;;;;33282:126:0;;33409:6;33282:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33282:134:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33282:134:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33282:134:0;33600:13;;33282:134;;-1:-1:-1;33473:19:0;;33495:133;;33526:22;;33282:134;;33600:6;;33607:5;;33600:13;;;;;;;;;;;;33495:12;:133::i;:::-;33473:155;;33698:11;33689:6;:20;33685:122;;;33739:11;33730:20;;33778:6;33785:5;33778:13;;;;;;;;;;;;;;33769:22;;33685:122;32811:1007;;;;32858:7;;32811:1007;;;;31373:2452;;;;;;;;;:::o;26833:1962::-;27095:20;27159:12;27207:22;-1:-1:-1;;;;;27174:78:0;;27253:25;27174:105;;;;;;;;;;;;;-1:-1:-1;;;;;27174:105:0;-1:-1:-1;;;;;27174:105:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27174:105:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27174:105:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27174:105:0;;-1:-1:-1;27292:22:0;27327:889;;;;27372:174;27406:22;27447:25;27491:7;27517:14;27372:15;:174::i;:::-;27355:191;;27327:889;;;27614:19;-1:-1:-1;;;;;27652:39:0;;27648:329;;27726:30;27737:18;27726:10;:30::i;:::-;27712:44;;27648:329;;;27811:150;27846:25;27894:18;27935:7;27811:12;:150::i;:::-;27797:164;;27648:329;28033:171;28067:22;28108:18;28145:11;28175:14;28033:15;:171::i;:::-;28016:188;;27327:889;;28257:23;28283:94;28315:22;28352:14;28283:17;:94::i;:::-;28257:120;;28395:142;28415:14;28444:22;28481:45;28494:14;28510:15;28481:12;:45::i;:::-;28395:142;;;-1:-1:-1;;;;;28395:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;28592:22;-1:-1:-1;;;;;28585:39:0;;28639:14;28668:45;28681:14;28697:15;28668:12;:45::i;:::-;28585:139;;;;;;;;;;;;;-1:-1:-1;;;;;28585:139:0;-1:-1:-1;;;;;28585:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28585:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28585:139:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28742:45:0;;-1:-1:-1;28755:14:0;28771:15;28742:12;:45::i;:::-;28735:52;26833:1962;-1:-1:-1;;;;;;;;;;26833:1962:0:o;6819:98::-;6899:10;6819:98;:::o;9434:229::-;-1:-1:-1;;;;;9508:22:0;;9500:73;;;;-1:-1:-1;;;9500:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9610:6;;;9589:38;;-1:-1:-1;;;;;9589:38:0;;;;9610:6;;;;;;9589:38;;;9638:6;:17;;-1:-1:-1;;;;;9638:17:0;;;;;-1:-1:-1;;;;;;9638:17:0;;;;;;;;;9434:229::o;34137:1140::-;34290:22;34325:19;34394:22;-1:-1:-1;;;;;34347:92:0;;:94;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34347:94:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34347:94:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34347:94:0;34470:93;;;-1:-1:-1;;;34470:93:0;;;;34347:94;;-1:-1:-1;34452:15:0;;-1:-1:-1;;;;;34470:91:0;;;;;:93;;;;;34347:94;;34470:93;;;;;;;:91;:93;;;5:2:-1;;;;30:1;27;20:12;5:2;34470:93:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34470:93:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34470:93:0;34596:109;;;-1:-1:-1;;;34596:109:0;;;;34470:93;;-1:-1:-1;34574:19:0;;-1:-1:-1;;;;;34596:107:0;;;;;:109;;;;;34470:93;;34596:109;;;;;;;:107;:109;;;5:2:-1;;;;30:1;27;20:12;5:2;34596:109:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34596:109:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34596:109:0;34734:103;;;-1:-1:-1;;;34734:103:0;;-1:-1:-1;;;;;34734:103:0;;;;;;;;;34596:109;;-1:-1:-1;34716:15:0;;34734:91;;;;;;:103;;;;;34596:109;;34734:103;;;;;;;;:91;:103;;;5:2:-1;;;;30:1;27;20:12;5:2;34734:103:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34734:103:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34734:103:0;34865:114;;;-1:-1:-1;;;34865:114:0;;-1:-1:-1;;;;;34865:114:0;;;;;;;;;34734:103;;-1:-1:-1;34848:14:0;;34865:102;;;;;;:114;;;;;34734:103;;34865:114;;;;;;;;:102;:114;;;5:2:-1;;;;30:1;27;20:12;5:2;34865:114:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34865:114:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34865:114:0;35009:260;;;-1:-1:-1;;;35009:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34865:114;;-1:-1:-1;;;;;;35009:105:0;;;;;:260;;;;;34865:114;;35009:260;;;;;;;;:105;:260;;;5:2:-1;;;;30:1;27;20:12;5:2;35009:260:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35009:260:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35009:260:0;;34137:1140;-1:-1:-1;;;;;;;;;34137:1140:0:o;29980:1030::-;30179:21;30268:22;-1:-1:-1;;;;;30235:64:0;;30318:25;30235:123;;;;;;;;;;;;;-1:-1:-1;;;;;30235:123:0;-1:-1:-1;;;;;30235:123:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30235:123:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30235:123:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30235:123:0;30213:188;;;;;-1:-1:-1;;;30213:188:0;;;;;;;;;;;;-1:-1:-1;;;30213:188:0;;;;;;;;;;;;;;;30434:119;;;-1:-1:-1;;;30434:119:0;;30500:4;30434:119;;;;-1:-1:-1;;;;;30434:119:0;;;;;;;;;30414:17;;30434:43;;;;;:119;;;;;;;;;;;;;;:43;:119;;;5:2:-1;;;;30:1;27;20:12;5:2;30434:119:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30434:119:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30434:119:0;;-1:-1:-1;30570:24:0;;;30566:184;;;30611:127;;;-1:-1:-1;;;30611:127:0;;-1:-1:-1;;;;;30611:127:0;;;;;;;-1:-1:-1;;30611:127:0;;;;;;:41;;;;;;:127;;;;;;;;;;;;;;;-1:-1:-1;30611:41:0;:127;;;5:2:-1;;;;30:1;27;20:12;5:2;30611:127:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30611:127:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;30566:184:0;30778:150;;;-1:-1:-1;;;30778:150:0;;-1:-1:-1;;;;;30778:150:0;;;;;;;;;;;;;;;;;;;;;:93;;;;;;:150;;;;;;;;;;;;;;;-1:-1:-1;30778:93:0;:150;;;5:2:-1;;;;30:1;27;20:12;5:2;30778:150:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30778:150:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30778:150:0;;-1:-1:-1;30949:17:0;30941:61;;;;;-1:-1:-1;;;30941:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29980:1030;;;;;;;:::o;35472:862::-;35624:16;;35559:19;;-1:-1:-1;;;;;35599:41:0;;;35624:16;;35599:41;35596:154;;;35663:16;;;35657:50;;;-1:-1:-1;;;35657:50:0;;;;-1:-1:-1;;;;;35663:16:0;;;;35657:31;;35695:9;;35657:50;;;;35663:16;;35657:50;;;;;;35695:9;35663:16;35657:50;;;5:2:-1;;;;30:1;27;20:12;5:2;35657:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35657:50:0;;;;;35729:9;35722:16;;;;35596:154;35892:21;;:56;;;-1:-1:-1;;;35892:56:0;;-1:-1:-1;;;;;35892:56:0;;;;;;;;;35762:69;;35892:21;;;;;:33;;:56;;;;;;;;;;;;;;;:21;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;35892:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35892:56:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35892:56:0;35997:83;;;-1:-1:-1;;;35997:83:0;;36070:9;35997:83;;;;;;35892:56;;-1:-1:-1;35972:22:0;;-1:-1:-1;;;;;35997:72:0;;;;;:83;;;;;35892:56;;35997:83;;;;;;;:72;:83;;;5:2:-1;;;;30:1;27;20:12;5:2;35997:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35997:83:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35997:83:0;;-1:-1:-1;36108:51:0;36121:32;35997:83;36150:2;36121:12;:32::i;:::-;36155:3;36108:12;:51::i;:::-;36091:68;;36186:34;-1:-1:-1;;;;;36186:68:0;;36275:9;36286:14;36302:23;36315:3;36320:4;36302:12;:23::i;:::-;36186:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36186:140:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36186:140:0;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36186:140:0;;35472:862;-1:-1:-1;;;;35472:862:0:o;36641:851::-;36969:21;;:60;;;-1:-1:-1;;;36969:60:0;;-1:-1:-1;;;;;36969:60:0;;;;;;;;;36805:19;;;;36969:21;;:33;;:60;;;;;;;;;;;;;;:21;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;36969:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36969:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36969:60:0;37055:137;;;-1:-1:-1;;;37055:137:0;;-1:-1:-1;;;;;37055:137:0;;;;;;;;;;;;;;;36969:60;;-1:-1:-1;37055:41:0;;;;;;:137;;;;;36969:60;;37055:137;;;;;;;;-1:-1:-1;37055:41:0;:137;;;5:2:-1;;;;30:1;27;20:12;5:2;37055:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37055:137:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;;37219:56:0;;;37290:12;37317:1;;37349:23;37362:3;37367:4;37349:12;:23::i;:::-;37387;37219:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37219:202:0;-1:-1:-1;;;;;37219:202:0;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37219:202:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37219:202:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37219:202:0;;-1:-1:-1;37440:15:0;37432:52;;;;;-1:-1:-1;;;37432:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36641:851;;;;;;:::o;29076:565::-;29199:23;29307:8;;29253:94;;29280:36;;29293:12;;-1:-1:-1;;;29307:8:0;;;;29280:12;:36::i;:::-;29331:5;29253:12;:94::i;:::-;29235:112;-1:-1:-1;29364:20:0;29360:61;;-1:-1:-1;29408:1:0;29401:8;;29360:61;29512:17;;29455:123;;;-1:-1:-1;;;29455:123:0;;-1:-1:-1;;;;;29512:17:0;;;29455:123;;;;;;;;;;;;:38;;;;;;:123;;;;;;;;;;;;;;;29512:17;29455:38;:123;;;5:2:-1;;;;30:1;27;20:12;5:2;29455:123:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29455:123:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29455:123:0;29433:200;;;;;-1:-1:-1;;;29433:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29076:565;;;;:::o;13416:136::-;13474:7;13501:43;13505:1;13508;13501:43;;;;;;;;;;;;;;;;;:3;:43::i;14332:471::-;14390:7;14635:6;14631:47;;-1:-1:-1;14665:1:0;14658:8;;14631:47;14702:5;;;14706:1;14702;:5;:1;14726:5;;;;;:10;14718:56;;;;-1:-1:-1;;;14718:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15271:132;15329:7;15356:39;15360:1;15363;15356:39;;;;;;;;;;;;;;;;;:3;:39::i;12960:181::-;13018:7;13050:5;;;13074:6;;;;13066:46;;;;;-1:-1:-1;;;13066:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13889:192;13975:7;14011:12;14003:6;;;;13995:29;;;;-1:-1:-1;;;13995:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13995:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14047:5:0;;;13889:192::o;15933:345::-;16019:7;16121:12;16114:5;16106:28;;;;-1:-1:-1;;;16106:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;16106:28:0;;16145:9;16161:1;16157;:5;;;;;;;15933:345;-1:-1:-1;;;;;15933:345:0:o
Swarm Source
bzzr://840645eaecb0834f421f9ebdcc43a3d687edaca15d3ce089deafbd9e8e6d5548
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.