Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ETHPAD
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-01 */ // File: @openzeppelin/contracts-ethereum-package/contracts/utils/SafeCast.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's uintXX casting operators with added overflow * checks. * * Downcasting from uint256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such 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. * * Can be combined with {SafeMath} to extend it to smaller types, by performing * all math on `uint256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { require(value < 2**128, "SafeCast: value doesn\'t fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { require(value < 2**64, "SafeCast: value doesn\'t fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { require(value < 2**32, "SafeCast: value doesn\'t fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { require(value < 2**16, "SafeCast: value doesn\'t fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits. */ function toUint8(uint256 value) internal pure returns (uint8) { require(value < 2**8, "SafeCast: value doesn\'t fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { require(value < 2**255, "SafeCast: value doesn't fit in an int256"); return int256(value); } } // File: @openzeppelin/contracts-ethereum-package/contracts/Initializable.sol pragma solidity >=0.4.24 <0.7.0; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract ContextUpgradeSafe is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // 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. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @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 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]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } } // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract LGEWhitelisted is ContextUpgradeSafe { using SafeMath for uint256; struct WhitelistRound { uint256 duration; uint256 amountMax; mapping(address => bool) addresses; mapping(address => uint256) purchased; } WhitelistRound[] public _lgeWhitelistRounds; uint256 public _lgeTimestamp; address public _lgePairAddress; address public _whitelister; event WhitelisterTransferred(address indexed previousWhitelister, address indexed newWhitelister); function __LGEWhitelisted_init() internal initializer { __Context_init_unchained(); __LGEWhitelisted_init_unchained(); } function __LGEWhitelisted_init_unchained() internal initializer { _whitelister = _msgSender(); } modifier onlyWhitelister() { require(_whitelister == _msgSender(), "Caller is not the whitelister"); _; } function renounceWhitelister() external onlyWhitelister { emit WhitelisterTransferred(_whitelister, address(0)); _whitelister = address(0); } function transferWhitelister(address newWhitelister) external onlyWhitelister { _transferWhitelister(newWhitelister); } function _transferWhitelister(address newWhitelister) internal { require(newWhitelister != address(0), "New whitelister is the zero address"); emit WhitelisterTransferred(_whitelister, newWhitelister); _whitelister = newWhitelister; } /* * createLGEWhitelist - Call this after initial Token Generation Event (TGE) * * pairAddress - address generated from createPair() event on DEX * durations - array of durations (seconds) for each whitelist rounds * amountsMax - array of max amounts (TOKEN decimals) for each whitelist round * */ function createLGEWhitelist(address pairAddress, uint256[] calldata durations, uint256[] calldata amountsMax) external onlyWhitelister() { require(durations.length == amountsMax.length, "Invalid whitelist(s)"); _lgePairAddress = pairAddress; if(durations.length > 0) { delete _lgeWhitelistRounds; for (uint256 i = 0; i < durations.length; i++) { _lgeWhitelistRounds.push(WhitelistRound(durations[i], amountsMax[i])); } } } /* * modifyLGEWhitelistAddresses - Define what addresses are included/excluded from a whitelist round * * index - 0-based index of round to modify whitelist * duration - period in seconds from LGE event or previous whitelist round * amountMax - max amount (TOKEN decimals) for each whitelist round * */ function modifyLGEWhitelist(uint256 index, uint256 duration, uint256 amountMax, address[] calldata addresses, bool enabled) external onlyWhitelister() { require(index < _lgeWhitelistRounds.length, "Invalid index"); require(amountMax > 0, "Invalid amountMax"); if(duration != _lgeWhitelistRounds[index].duration) _lgeWhitelistRounds[index].duration = duration; if(amountMax != _lgeWhitelistRounds[index].amountMax) _lgeWhitelistRounds[index].amountMax = amountMax; for (uint256 i = 0; i < addresses.length; i++) { _lgeWhitelistRounds[index].addresses[addresses[i]] = enabled; } } /* * getLGEWhitelistRound * * returns: * * 1. whitelist round number ( 0 = no active round now ) * 2. duration, in seconds, current whitelist round is active for * 3. timestamp current whitelist round closes at * 4. maximum amount a whitelister can purchase in this round * 5. is caller whitelisted * 6. how much caller has purchased in current whitelist round * */ function getLGEWhitelistRound() public view returns (uint256, uint256, uint256, uint256, bool, uint256) { if(_lgeTimestamp > 0) { uint256 wlCloseTimestampLast = _lgeTimestamp; for (uint256 i = 0; i < _lgeWhitelistRounds.length; i++) { WhitelistRound storage wlRound = _lgeWhitelistRounds[i]; wlCloseTimestampLast = wlCloseTimestampLast.add(wlRound.duration); if(now <= wlCloseTimestampLast) return (i.add(1), wlRound.duration, wlCloseTimestampLast, wlRound.amountMax, wlRound.addresses[_msgSender()], wlRound.purchased[_msgSender()]); } } return (0, 0, 0, 0, false, 0); } /* * _applyLGEWhitelist - internal function to be called initially before any transfers * */ function _applyLGEWhitelist(address sender, address recipient, uint256 amount) internal { if(_lgePairAddress == address(0) || _lgeWhitelistRounds.length == 0) return; if(_lgeTimestamp == 0 && sender != _lgePairAddress && recipient == _lgePairAddress && amount > 0) _lgeTimestamp = now; if(sender == _lgePairAddress && recipient != _lgePairAddress) { //buying (uint256 wlRoundNumber,,,,,) = getLGEWhitelistRound(); if(wlRoundNumber > 0) { WhitelistRound storage wlRound = _lgeWhitelistRounds[wlRoundNumber.sub(1)]; require(wlRound.addresses[recipient], "LGE - Buyer is not whitelisted"); uint256 amountRemaining = 0; if(wlRound.purchased[recipient] < wlRound.amountMax) amountRemaining = wlRound.amountMax.sub(wlRound.purchased[recipient]); require(amount <= amountRemaining, "LGE - Amount exceeds whitelist maximum"); wlRound.purchased[recipient] = wlRound.purchased[recipient].add(amount); } } } } contract ETHPAD is IERC20, OwnableUpgradeSafe, LGEWhitelisted { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; uint256 private _cap; string private _name; string private _symbol; uint8 private _decimals; mapping(address => bool) public _feeExcluded; uint256 public _feeBurnPct; uint256 public _feeRewardPct; address public _feeRewardAddress; mapping(address => bool) public _pair; address public _router; function initialize(uint256 cap, uint256 feeBurnPct, uint256 feeRewardPct, address feeRewardAddress, address router) public initializer { require(cap > 0, "ERC20Capped: cap is 0"); _name = "ETHPAD.network"; _symbol = "ETHPAD"; _decimals = 18; _cap = cap; __Ownable_init(); __LGEWhitelisted_init(); setFees(feeBurnPct, feeRewardPct, feeRewardAddress); _router = router; setFeeExcluded(_msgSender(), true); setFeeExcluded(address(this), true); } function setRouter(address r) public onlyOwner { _router = r; } function setFees(uint256 feeBurnPct, uint256 feeRewardPct, address feeRewardAddress) public onlyOwner { require(feeBurnPct.add(feeRewardPct) <= 10000, "Fees must not total more than 100%"); require(feeRewardAddress != address(0), "Fee reward address must not be zero address"); _feeBurnPct = feeBurnPct; _feeRewardPct = feeRewardPct; _feeRewardAddress = feeRewardAddress; } function setPair(address a, bool pair) public onlyOwner { _pair[a] = pair; } function setFeeExcluded(address a, bool excluded) public onlyOwner { _feeExcluded[a] = excluded; } function mint(address _to, uint256 _amount) public onlyOwner { _mint(_to, _amount); } function _beforeTokenTransfer(address sender, address recipient, uint256 amount) internal { LGEWhitelisted._applyLGEWhitelist(sender, recipient, amount); if (sender == address(0)) { // When minting tokens require(totalSupply().add(amount) <= _cap, "ERC20Capped: cap exceeded"); } } function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); if(_pair[recipient] && !_feeExcluded[sender]) { uint256 feeBurnAmount = 0; if(_feeBurnPct > 0) { feeBurnAmount = amount.mul(_feeBurnPct).div(10000); _cap = _cap.sub(feeBurnAmount); _totalSupply = _totalSupply.sub(feeBurnAmount); emit Transfer(sender, address(0), feeBurnAmount); } uint256 feeRewardAmount = 0; if(_feeRewardPct > 0 && _feeRewardAddress != address(0)) { feeRewardAmount = amount.mul(_feeRewardPct).div(10000); if(_router != address(0)) { _balances[address(this)] = _balances[address(this)].add(feeRewardAmount); emit Transfer(sender, address(this), feeRewardAmount); IUniswapV2Router02 r = IUniswapV2Router02(_router); address[] memory path = new address[](2); path[0] = address(this); path[1] = r.WETH(); _approve(address(this), _router, feeRewardAmount); r.swapExactTokensForTokensSupportingFeeOnTransferTokens( feeRewardAmount, 0, path, _feeRewardAddress, block.timestamp ); } else { _balances[_feeRewardAddress] = _balances[_feeRewardAddress].add(feeRewardAmount); emit Transfer(sender, _feeRewardAddress, feeRewardAmount); } } amount = amount.sub(feeBurnAmount).sub(feeRewardAmount); } _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function burn(uint256 amount) external { _cap=_cap.sub(amount); _burn(_msgSender(), amount); } function name() public view override returns (string memory) { return _name; } function symbol() public view override returns (string memory) { return _symbol; } function cap() public view returns (uint256) { return _cap; } function decimals() public view override returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousWhitelister","type":"address"},{"indexed":true,"internalType":"address","name":"newWhitelister","type":"address"}],"name":"WhitelisterTransferred","type":"event"},{"inputs":[],"name":"_feeBurnPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeRewardAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeRewardPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lgePairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lgeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_lgeWhitelistRounds","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"amountMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_pair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_whitelister","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"},{"internalType":"uint256[]","name":"durations","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsMax","type":"uint256[]"}],"name":"createLGEWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLGEWhitelistRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cap","type":"uint256"},{"internalType":"uint256","name":"feeBurnPct","type":"uint256"},{"internalType":"uint256","name":"feeRewardPct","type":"uint256"},{"internalType":"address","name":"feeRewardAddress","type":"address"},{"internalType":"address","name":"router","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"amountMax","type":"uint256"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"modifyLGEWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceWhitelister","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setFeeExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeBurnPct","type":"uint256"},{"internalType":"uint256","name":"feeRewardPct","type":"uint256"},{"internalType":"address","name":"feeRewardAddress","type":"address"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"pair","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWhitelister","type":"address"}],"name":"transferWhitelister","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50612c50806100206000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c8063771a0b2811610130578063c0d78655116100b8578063e4d73e591161007c578063e4d73e59146107be578063eba116d8146107f0578063edae876f14610816578063f2fde38b1461081e578063ffc877d81461084457610227565b8063c0d786551461072c578063c9f1f47f14610752578063d5215d1114610780578063da91b76e14610788578063dd62ed3e1461079057610227565b80639ad3a7ba116100ff5780639ad3a7ba14610656578063a457c2d71461065e578063a77cac7a1461068a578063a9059cbb146106c0578063aab954d0146106ec57610227565b8063771a0b281461061057806386a22eff146106185780638da5cb5b1461064657806395d89b411461064e57610227565b806340c10f19116101b3578063532f1fed11610182578063532f1fed146104e2578063688a0942146105b457806370a08231146105bc57806371088c6d146105e2578063715018a61461060857610227565b806340c10f19146103f057806342966c681461041c57806344ade3c51461043957806349448898146104be57610227565b806323b872dd116101fa57806323b872dd146103405780632e15e5c714610376578063313ce5671461039e578063355274ea146103bc57806339509351146103c457610227565b806306fdde031461022c578063095ea7b3146102a957806318160ddd146102e95780631b29b0cd14610303575b600080fd5b61023461084c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026e578181015183820152602001610256565b50505050905090810190601f16801561029b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d5600480360360408110156102bf57600080fd5b506001600160a01b0381351690602001356108e2565b604080519115158252519081900360200190f35b6102f1610900565b60408051918252519081900360200190f35b61030b610906565b6040805196875260208701959095528585019390935260608501919091521515608084015260a0830152519081900360c00190f35b6102d56004803603606081101561035657600080fd5b506001600160a01b03813581169160208101359091169060400135610a14565b61039c6004803603602081101561038c57600080fd5b50356001600160a01b0316610a9b565b005b6103a6610aff565b6040805160ff9092168252519081900360200190f35b6102f1610b08565b6102d5600480360360408110156103da57600080fd5b506001600160a01b038135169060200135610b0e565b61039c6004803603604081101561040657600080fd5b506001600160a01b038135169060200135610b5c565b61039c6004803603602081101561043257600080fd5b5035610bc2565b61039c600480360360a081101561044f57600080fd5b8135916020810135916040820135919081019060808101606082013564010000000081111561047d57600080fd5b82018360208201111561048f57600080fd5b803590602001918460208302840111640100000000831117156104b157600080fd5b9193509150351515610be3565b6104c6610dd2565b604080516001600160a01b039092168252519081900360200190f35b61039c600480360360608110156104f857600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561052357600080fd5b82018360208201111561053557600080fd5b8035906020019184602083028401116401000000008311171561055757600080fd5b91939092909160208101903564010000000081111561057557600080fd5b82018360208201111561058757600080fd5b803590602001918460208302840111640100000000831117156105a957600080fd5b509092509050610de1565b6102f1610f31565b6102f1600480360360208110156105d257600080fd5b50356001600160a01b0316610f37565b6102d5600480360360208110156105f857600080fd5b50356001600160a01b0316610f52565b61039c610f67565b6102f1611009565b61039c6004803603604081101561062e57600080fd5b506001600160a01b038135169060200135151561100f565b6104c6611092565b6102346110a1565b61039c611102565b6102d56004803603604081101561067457600080fd5b506001600160a01b0381351690602001356111a4565b6106a7600480360360208110156106a057600080fd5b503561120c565b6040805192835260208301919091528051918290030190f35b6102d5600480360360408110156106d657600080fd5b506001600160a01b038135169060200135611237565b61039c600480360360a081101561070257600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661124b565b61039c6004803603602081101561074257600080fd5b50356001600160a01b0316611407565b61039c6004803603604081101561076857600080fd5b506001600160a01b0381351690602001351515611481565b6104c6611504565b6102f1611513565b6102f1600480360360408110156107a657600080fd5b506001600160a01b0381358116916020013516611519565b61039c600480360360608110156107d457600080fd5b50803590602081013590604001356001600160a01b0316611544565b6102d56004803603602081101561080657600080fd5b50356001600160a01b0316611655565b6104c661166a565b61039c6004803603602081101561083457600080fd5b50356001600160a01b0316611679565b6104c6611772565b609f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b5050505050905090565b60006108f66108ef611781565b8484611785565b5060015b92915050565b609d5490565b600080600080600080600060985411156109f95760985460005b6097548110156109f65760006097828154811061093957fe5b9060005260206000209060040201905061096081600001548461187190919063ffffffff16565b92508242116109ed57610974826001611871565b81546001830154859060028501600061098b611781565b6001600160a01b03168152602081019190915260400160009081205460ff169060038701906109b8611781565b6001600160a01b03166001600160a01b0316815260200190815260200160002054985098509850985098509850505050610a0c565b50600101610920565b50505b5060009450849350839250829150819050805b909192939495565b6000610a218484846118d2565b610a9184610a2d611781565b610a8c85604051806060016040528060288152602001612ab1602891396001600160a01b038a166000908152609c6020526040812090610a6b611781565b6001600160a01b031681526020810191909152604001600020549190611dea565b611785565b5060019392505050565b610aa3611781565b609a546001600160a01b03908116911614610af3576040805162461bcd60e51b815260206004820152601d6024820152600080516020612a4a833981519152604482015290519081900360640190fd5b610afc81611e81565b50565b60a15460ff1690565b609e5490565b60006108f6610b1b611781565b84610a8c85609c6000610b2c611781565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611871565b610b64611781565b6065546001600160a01b03908116911614610bb4576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b610bbe8282611f22565b5050565b609e54610bcf9082612002565b609e55610afc610bdd611781565b82612044565b610beb611781565b609a546001600160a01b03908116911614610c3b576040805162461bcd60e51b815260206004820152601d6024820152600080516020612a4a833981519152604482015290519081900360640190fd5b6097548610610c81576040805162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015290519081900360640190fd5b60008411610cca576040805162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840c2dadeeadce89ac2f607b1b604482015290519081900360640190fd5b60978681548110610cd757fe5b9060005260206000209060040201600001548514610d0f578460978781548110610cfd57fe5b60009182526020909120600490910201555b60978681548110610d1c57fe5b9060005260206000209060040201600101548414610d58578360978781548110610d4257fe5b9060005260206000209060040201600101819055505b60005b82811015610dc9578160978881548110610d7157fe5b90600052602060002090600402016002016000868685818110610d9057fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101610d5b565b50505050505050565b6099546001600160a01b031681565b610de9611781565b609a546001600160a01b03908116911614610e39576040805162461bcd60e51b815260206004820152601d6024820152600080516020612a4a833981519152604482015290519081900360640190fd5b828114610e84576040805162461bcd60e51b8152602060048201526014602482015273496e76616c69642077686974656c69737428732960601b604482015290519081900360640190fd5b609980546001600160a01b0319166001600160a01b0387161790558215610f2a57610eb16097600061289c565b60005b83811015610f285760976040518060400160405280878785818110610ed557fe5b905060200201358152602001858585818110610eed57fe5b602090810292909201359092528354600181810186556000958652948290208451600490920201908155920151918301919091555001610eb4565b505b5050505050565b60a45481565b6001600160a01b03166000908152609b602052604090205490565b60a26020526000908152604090205460ff1681565b610f6f611781565b6065546001600160a01b03908116911614610fbf576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b60a35481565b611017611781565b6065546001600160a01b03908116911614611067576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b6001600160a01b0391909116600090815260a660205260409020805460ff1916911515919091179055565b6065546001600160a01b031690565b60a08054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108d85780601f106108ad576101008083540402835291602001916108d8565b61110a611781565b609a546001600160a01b0390811691161461115a576040805162461bcd60e51b815260206004820152601d6024820152600080516020612a4a833981519152604482015290519081900360640190fd5b609a546040516000916001600160a01b0316907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b4908390a3609a80546001600160a01b0319169055565b60006108f66111b1611781565b84610a8c85604051806060016040528060258152602001612bf660259139609c60006111db611781565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611dea565b6097818154811061121957fe5b60009182526020909120600490910201805460019091015490915082565b60006108f6611244611781565b84846118d2565b600054610100900460ff1680611264575061126461212e565b80611272575060005460ff16155b6112ad5760405162461bcd60e51b815260040180806020018281038252602e815260200180612af9602e913960400191505060405180910390fd5b600054610100900460ff161580156112d8576000805460ff1961ff0019909116610100171660011790555b60008611611325576040805162461bcd60e51b8152602060048201526015602482015274045524332304361707065643a20636170206973203605c1b604482015290519081900360640190fd5b60408051808201909152600e8082526d4554485041442e6e6574776f726b60901b602090920191825261135a91609f916128bd565b506040805180820190915260068082526511551214105160d21b60209092019182526113889160a0916128bd565b5060a1805460ff19166012179055609e8690556113a3612134565b6113ab6121e5565b6113b6858585611544565b60a780546001600160a01b0319166001600160a01b0384161790556113e36113dc611781565b6001611481565b6113ee306001611481565b8015610f28576000805461ff0019169055505050505050565b61140f611781565b6065546001600160a01b0390811691161461145f576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b60a780546001600160a01b0319166001600160a01b0392909216919091179055565b611489611781565b6065546001600160a01b039081169116146114d9576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b6001600160a01b0391909116600090815260a260205260409020805460ff1916911515919091179055565b609a546001600160a01b031681565b60985481565b6001600160a01b039182166000908152609c6020908152604080832093909416825291909152205490565b61154c611781565b6065546001600160a01b0390811691161461159c576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b6127106115a98484611871565b11156115e65760405162461bcd60e51b8152600401808060200182810382526022815260200180612bd46022913960400191505060405180910390fd5b6001600160a01b03811661162b5760405162461bcd60e51b815260040180806020018281038252602b8152602001806129f9602b913960400191505060405180910390fd5b60a39290925560a45560a580546001600160a01b0319166001600160a01b03909216919091179055565b60a66020526000908152604090205460ff1681565b60a7546001600160a01b031681565b611681611781565b6065546001600160a01b039081169116146116d1576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b6001600160a01b0381166117165760405162461bcd60e51b81526004018080602001828103825260268152602001806129b16026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60a5546001600160a01b031681565b3390565b6001600160a01b0383166117ca5760405162461bcd60e51b8152600401808060200182810382526024815260200180612bb06024913960400191505060405180910390fd5b6001600160a01b03821661180f5760405162461bcd60e51b81526004018080602001828103825260228152602001806129d76022913960400191505060405180910390fd5b6001600160a01b038084166000818152609c6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000828201838110156118cb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0383166119175760405162461bcd60e51b8152600401808060200182810382526025815260200180612b686025913960400191505060405180910390fd5b6001600160a01b03821661195c5760405162461bcd60e51b815260040180806020018281038252602381526020018061296c6023913960400191505060405180910390fd5b611967838383612282565b6119a481604051806060016040528060268152602001612a24602691396001600160a01b0386166000908152609b60205260409020549190611dea565b6001600160a01b038085166000908152609b6020908152604080832094909455918516815260a6909152205460ff1680156119f857506001600160a01b038316600090815260a2602052604090205460ff16155b15611d7d5760a35460009015611a7c57611a29612710611a2360a3548561230890919063ffffffff16565b90612361565b609e54909150611a399082612002565b609e55609d54611a499082612002565b609d556040805182815290516000916001600160a01b03871691600080516020612b278339815191529181900360200190a35b60008060a454118015611a99575060a5546001600160a01b031615155b15611d6457611ab9612710611a2360a4548661230890919063ffffffff16565b60a7549091506001600160a01b031615611cf157306000908152609b6020526040902054611ae79082611871565b306000818152609b6020908152604091829020939093558051848152905191926001600160a01b03891692600080516020612b278339815191529281900390910190a360a754604080516002808252606080830184526001600160a01b0390941693926020830190803683370190505090503081600081518110611b6757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611bc057600080fd5b505afa158015611bd4573d6000803e3d6000fd5b505050506040513d6020811015611bea57600080fd5b5051815182906001908110611bfb57fe5b6001600160a01b03928316602091820292909201015260a754611c219130911685611785565b60a554604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b0393841660648401819052426084850181905260a060448601908152875160a4870152875196891696635c11d795968b968a9594939092909160c40190602080880191028083838b5b83811015611ca9578181015183820152602001611c91565b505050509050019650505050505050600060405180830381600087803b158015611cd257600080fd5b505af1158015611ce6573d6000803e3d6000fd5b505050505050611d64565b60a5546001600160a01b03166000908152609b6020526040902054611d169082611871565b60a580546001600160a01b039081166000908152609b6020908152604091829020949094559154825185815292519082169391891692600080516020612b2783398151915292908290030190a35b611d7881611d728585612002565b90612002565b925050505b6001600160a01b0382166000908152609b6020526040902054611da09082611871565b6001600160a01b038084166000818152609b60209081526040918290209490945580518581529051919392871692600080516020612b2783398151915292918290030190a3505050565b60008184841115611e795760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e3e578181015183820152602001611e26565b50505050905090810190601f168015611e6b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116611ec65760405162461bcd60e51b8152600401808060200182810382526023815260200180612b8d6023913960400191505060405180910390fd5b609a546040516001600160a01b038084169216907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b490600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216611f7d576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611f8960008383612282565b609d54611f969082611871565b609d556001600160a01b0382166000908152609b6020526040902054611fbc9082611871565b6001600160a01b0383166000818152609b60209081526040808320949094558351858152935192939192600080516020612b278339815191529281900390910190a35050565b60006118cb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dea565b6001600160a01b0382166120895760405162461bcd60e51b8152600401808060200182810382526021815260200180612b476021913960400191505060405180910390fd5b61209582600083612282565b6120d28160405180606001604052806022815260200161298f602291396001600160a01b0385166000908152609b60205260409020549190611dea565b6001600160a01b0383166000908152609b6020526040902055609d546120f89082612002565b609d556040805182815290516000916001600160a01b03851691600080516020612b278339815191529181900360200190a35050565b303b1590565b600054610100900460ff168061214d575061214d61212e565b8061215b575060005460ff16155b6121965760405162461bcd60e51b815260040180806020018281038252602e815260200180612af9602e913960400191505060405180910390fd5b600054610100900460ff161580156121c1576000805460ff1961ff0019909116610100171660011790555b6121c96123a3565b6121d1612443565b8015610afc576000805461ff001916905550565b600054610100900460ff16806121fe57506121fe61212e565b8061220c575060005460ff16155b6122475760405162461bcd60e51b815260040180806020018281038252602e815260200180612af9602e913960400191505060405180910390fd5b600054610100900460ff16158015612272576000805460ff1961ff0019909116610100171660011790555b61227a6123a3565b6121d161253c565b61228d838383612605565b6001600160a01b03831661230357609e546122b0826122aa610900565b90611871565b1115612303576040805162461bcd60e51b815260206004820152601960248201527f45524332304361707065643a2063617020657863656564656400000000000000604482015290519081900360640190fd5b505050565b600082612317575060006108fa565b8282028284828161232457fe5b04146118cb5760405162461bcd60e51b8152600401808060200182810382526021815260200180612a906021913960400191505060405180910390fd5b60006118cb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612837565b600054610100900460ff16806123bc57506123bc61212e565b806123ca575060005460ff16155b6124055760405162461bcd60e51b815260040180806020018281038252602e815260200180612af9602e913960400191505060405180910390fd5b600054610100900460ff161580156121d1576000805460ff1961ff0019909116610100171660011790558015610afc576000805461ff001916905550565b600054610100900460ff168061245c575061245c61212e565b8061246a575060005460ff16155b6124a55760405162461bcd60e51b815260040180806020018281038252602e815260200180612af9602e913960400191505060405180910390fd5b600054610100900460ff161580156124d0576000805460ff1961ff0019909116610100171660011790555b60006124da611781565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610afc576000805461ff001916905550565b600054610100900460ff1680612555575061255561212e565b80612563575060005460ff16155b61259e5760405162461bcd60e51b815260040180806020018281038252602e815260200180612af9602e913960400191505060405180910390fd5b600054610100900460ff161580156125c9576000805460ff1961ff0019909116610100171660011790555b6125d1611781565b609a80546001600160a01b0319166001600160a01b03929092169190911790558015610afc576000805461ff001916905550565b6099546001600160a01b0316158061261d5750609754155b1561262757612303565b60985415801561264557506099546001600160a01b03848116911614155b801561265e57506099546001600160a01b038381169116145b801561266a5750600081115b1561267457426098555b6099546001600160a01b03848116911614801561269f57506099546001600160a01b03838116911614155b156123035760006126ae610906565b50505050509050600081111561283157600060976126cd836001612002565b815481106126d757fe5b600091825260208083206001600160a01b03881684526002600490930201918201905260409091205490915060ff16612757576040805162461bcd60e51b815260206004820152601e60248201527f4c4745202d204275796572206973206e6f742077686974656c69737465640000604482015290519081900360640190fd5b60018101546001600160a01b0385166000908152600383016020526040812054909111156127ab576001600160a01b038516600090815260038301602052604090205460018301546127a891612002565b90505b808411156127ea5760405162461bcd60e51b8152600401808060200182810382526026815260200180612a6a6026913960400191505060405180910390fd5b6001600160a01b038516600090815260038301602052604090205461280f9085611871565b6001600160a01b03861660009081526003909301602052604090922091909155505b50505050565b600081836128865760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e3e578181015183820152602001611e26565b50600083858161289257fe5b0495945050505050565b5080546000825560040290600052602060002090810190610afc919061293b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128fe57805160ff191683800117855561292b565b8280016001018555821561292b579182015b8281111561292b578251825591602001919060010190612910565b50612937929150612956565b5090565b5b80821115612937576000808255600182015560040161293c565b5b80821115612937576000815560010161295756fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373466565207265776172642061646472657373206d757374206e6f74206265207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636543616c6c6572206973206e6f74207468652077686974656c69737465720000004c4745202d20416d6f756e7420657863656564732077686974656c697374206d6178696d756d536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734e65772077686974656c697374657220697320746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737346656573206d757374206e6f7420746f74616c206d6f7265207468616e203130302545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220223aded908026bee15aa2726f593d1915445a16963d5b4c1634dbd0de942e9ce64736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102275760003560e01c8063771a0b2811610130578063c0d78655116100b8578063e4d73e591161007c578063e4d73e59146107be578063eba116d8146107f0578063edae876f14610816578063f2fde38b1461081e578063ffc877d81461084457610227565b8063c0d786551461072c578063c9f1f47f14610752578063d5215d1114610780578063da91b76e14610788578063dd62ed3e1461079057610227565b80639ad3a7ba116100ff5780639ad3a7ba14610656578063a457c2d71461065e578063a77cac7a1461068a578063a9059cbb146106c0578063aab954d0146106ec57610227565b8063771a0b281461061057806386a22eff146106185780638da5cb5b1461064657806395d89b411461064e57610227565b806340c10f19116101b3578063532f1fed11610182578063532f1fed146104e2578063688a0942146105b457806370a08231146105bc57806371088c6d146105e2578063715018a61461060857610227565b806340c10f19146103f057806342966c681461041c57806344ade3c51461043957806349448898146104be57610227565b806323b872dd116101fa57806323b872dd146103405780632e15e5c714610376578063313ce5671461039e578063355274ea146103bc57806339509351146103c457610227565b806306fdde031461022c578063095ea7b3146102a957806318160ddd146102e95780631b29b0cd14610303575b600080fd5b61023461084c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026e578181015183820152602001610256565b50505050905090810190601f16801561029b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d5600480360360408110156102bf57600080fd5b506001600160a01b0381351690602001356108e2565b604080519115158252519081900360200190f35b6102f1610900565b60408051918252519081900360200190f35b61030b610906565b6040805196875260208701959095528585019390935260608501919091521515608084015260a0830152519081900360c00190f35b6102d56004803603606081101561035657600080fd5b506001600160a01b03813581169160208101359091169060400135610a14565b61039c6004803603602081101561038c57600080fd5b50356001600160a01b0316610a9b565b005b6103a6610aff565b6040805160ff9092168252519081900360200190f35b6102f1610b08565b6102d5600480360360408110156103da57600080fd5b506001600160a01b038135169060200135610b0e565b61039c6004803603604081101561040657600080fd5b506001600160a01b038135169060200135610b5c565b61039c6004803603602081101561043257600080fd5b5035610bc2565b61039c600480360360a081101561044f57600080fd5b8135916020810135916040820135919081019060808101606082013564010000000081111561047d57600080fd5b82018360208201111561048f57600080fd5b803590602001918460208302840111640100000000831117156104b157600080fd5b9193509150351515610be3565b6104c6610dd2565b604080516001600160a01b039092168252519081900360200190f35b61039c600480360360608110156104f857600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561052357600080fd5b82018360208201111561053557600080fd5b8035906020019184602083028401116401000000008311171561055757600080fd5b91939092909160208101903564010000000081111561057557600080fd5b82018360208201111561058757600080fd5b803590602001918460208302840111640100000000831117156105a957600080fd5b509092509050610de1565b6102f1610f31565b6102f1600480360360208110156105d257600080fd5b50356001600160a01b0316610f37565b6102d5600480360360208110156105f857600080fd5b50356001600160a01b0316610f52565b61039c610f67565b6102f1611009565b61039c6004803603604081101561062e57600080fd5b506001600160a01b038135169060200135151561100f565b6104c6611092565b6102346110a1565b61039c611102565b6102d56004803603604081101561067457600080fd5b506001600160a01b0381351690602001356111a4565b6106a7600480360360208110156106a057600080fd5b503561120c565b6040805192835260208301919091528051918290030190f35b6102d5600480360360408110156106d657600080fd5b506001600160a01b038135169060200135611237565b61039c600480360360a081101561070257600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661124b565b61039c6004803603602081101561074257600080fd5b50356001600160a01b0316611407565b61039c6004803603604081101561076857600080fd5b506001600160a01b0381351690602001351515611481565b6104c6611504565b6102f1611513565b6102f1600480360360408110156107a657600080fd5b506001600160a01b0381358116916020013516611519565b61039c600480360360608110156107d457600080fd5b50803590602081013590604001356001600160a01b0316611544565b6102d56004803603602081101561080657600080fd5b50356001600160a01b0316611655565b6104c661166a565b61039c6004803603602081101561083457600080fd5b50356001600160a01b0316611679565b6104c6611772565b609f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b5050505050905090565b60006108f66108ef611781565b8484611785565b5060015b92915050565b609d5490565b600080600080600080600060985411156109f95760985460005b6097548110156109f65760006097828154811061093957fe5b9060005260206000209060040201905061096081600001548461187190919063ffffffff16565b92508242116109ed57610974826001611871565b81546001830154859060028501600061098b611781565b6001600160a01b03168152602081019190915260400160009081205460ff169060038701906109b8611781565b6001600160a01b03166001600160a01b0316815260200190815260200160002054985098509850985098509850505050610a0c565b50600101610920565b50505b5060009450849350839250829150819050805b909192939495565b6000610a218484846118d2565b610a9184610a2d611781565b610a8c85604051806060016040528060288152602001612ab1602891396001600160a01b038a166000908152609c6020526040812090610a6b611781565b6001600160a01b031681526020810191909152604001600020549190611dea565b611785565b5060019392505050565b610aa3611781565b609a546001600160a01b03908116911614610af3576040805162461bcd60e51b815260206004820152601d6024820152600080516020612a4a833981519152604482015290519081900360640190fd5b610afc81611e81565b50565b60a15460ff1690565b609e5490565b60006108f6610b1b611781565b84610a8c85609c6000610b2c611781565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611871565b610b64611781565b6065546001600160a01b03908116911614610bb4576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b610bbe8282611f22565b5050565b609e54610bcf9082612002565b609e55610afc610bdd611781565b82612044565b610beb611781565b609a546001600160a01b03908116911614610c3b576040805162461bcd60e51b815260206004820152601d6024820152600080516020612a4a833981519152604482015290519081900360640190fd5b6097548610610c81576040805162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015290519081900360640190fd5b60008411610cca576040805162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840c2dadeeadce89ac2f607b1b604482015290519081900360640190fd5b60978681548110610cd757fe5b9060005260206000209060040201600001548514610d0f578460978781548110610cfd57fe5b60009182526020909120600490910201555b60978681548110610d1c57fe5b9060005260206000209060040201600101548414610d58578360978781548110610d4257fe5b9060005260206000209060040201600101819055505b60005b82811015610dc9578160978881548110610d7157fe5b90600052602060002090600402016002016000868685818110610d9057fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101610d5b565b50505050505050565b6099546001600160a01b031681565b610de9611781565b609a546001600160a01b03908116911614610e39576040805162461bcd60e51b815260206004820152601d6024820152600080516020612a4a833981519152604482015290519081900360640190fd5b828114610e84576040805162461bcd60e51b8152602060048201526014602482015273496e76616c69642077686974656c69737428732960601b604482015290519081900360640190fd5b609980546001600160a01b0319166001600160a01b0387161790558215610f2a57610eb16097600061289c565b60005b83811015610f285760976040518060400160405280878785818110610ed557fe5b905060200201358152602001858585818110610eed57fe5b602090810292909201359092528354600181810186556000958652948290208451600490920201908155920151918301919091555001610eb4565b505b5050505050565b60a45481565b6001600160a01b03166000908152609b602052604090205490565b60a26020526000908152604090205460ff1681565b610f6f611781565b6065546001600160a01b03908116911614610fbf576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b60a35481565b611017611781565b6065546001600160a01b03908116911614611067576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b6001600160a01b0391909116600090815260a660205260409020805460ff1916911515919091179055565b6065546001600160a01b031690565b60a08054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108d85780601f106108ad576101008083540402835291602001916108d8565b61110a611781565b609a546001600160a01b0390811691161461115a576040805162461bcd60e51b815260206004820152601d6024820152600080516020612a4a833981519152604482015290519081900360640190fd5b609a546040516000916001600160a01b0316907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b4908390a3609a80546001600160a01b0319169055565b60006108f66111b1611781565b84610a8c85604051806060016040528060258152602001612bf660259139609c60006111db611781565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611dea565b6097818154811061121957fe5b60009182526020909120600490910201805460019091015490915082565b60006108f6611244611781565b84846118d2565b600054610100900460ff1680611264575061126461212e565b80611272575060005460ff16155b6112ad5760405162461bcd60e51b815260040180806020018281038252602e815260200180612af9602e913960400191505060405180910390fd5b600054610100900460ff161580156112d8576000805460ff1961ff0019909116610100171660011790555b60008611611325576040805162461bcd60e51b8152602060048201526015602482015274045524332304361707065643a20636170206973203605c1b604482015290519081900360640190fd5b60408051808201909152600e8082526d4554485041442e6e6574776f726b60901b602090920191825261135a91609f916128bd565b506040805180820190915260068082526511551214105160d21b60209092019182526113889160a0916128bd565b5060a1805460ff19166012179055609e8690556113a3612134565b6113ab6121e5565b6113b6858585611544565b60a780546001600160a01b0319166001600160a01b0384161790556113e36113dc611781565b6001611481565b6113ee306001611481565b8015610f28576000805461ff0019169055505050505050565b61140f611781565b6065546001600160a01b0390811691161461145f576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b60a780546001600160a01b0319166001600160a01b0392909216919091179055565b611489611781565b6065546001600160a01b039081169116146114d9576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b6001600160a01b0391909116600090815260a260205260409020805460ff1916911515919091179055565b609a546001600160a01b031681565b60985481565b6001600160a01b039182166000908152609c6020908152604080832093909416825291909152205490565b61154c611781565b6065546001600160a01b0390811691161461159c576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b6127106115a98484611871565b11156115e65760405162461bcd60e51b8152600401808060200182810382526022815260200180612bd46022913960400191505060405180910390fd5b6001600160a01b03811661162b5760405162461bcd60e51b815260040180806020018281038252602b8152602001806129f9602b913960400191505060405180910390fd5b60a39290925560a45560a580546001600160a01b0319166001600160a01b03909216919091179055565b60a66020526000908152604090205460ff1681565b60a7546001600160a01b031681565b611681611781565b6065546001600160a01b039081169116146116d1576040805162461bcd60e51b81526020600482018190526024820152600080516020612ad9833981519152604482015290519081900360640190fd5b6001600160a01b0381166117165760405162461bcd60e51b81526004018080602001828103825260268152602001806129b16026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60a5546001600160a01b031681565b3390565b6001600160a01b0383166117ca5760405162461bcd60e51b8152600401808060200182810382526024815260200180612bb06024913960400191505060405180910390fd5b6001600160a01b03821661180f5760405162461bcd60e51b81526004018080602001828103825260228152602001806129d76022913960400191505060405180910390fd5b6001600160a01b038084166000818152609c6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000828201838110156118cb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0383166119175760405162461bcd60e51b8152600401808060200182810382526025815260200180612b686025913960400191505060405180910390fd5b6001600160a01b03821661195c5760405162461bcd60e51b815260040180806020018281038252602381526020018061296c6023913960400191505060405180910390fd5b611967838383612282565b6119a481604051806060016040528060268152602001612a24602691396001600160a01b0386166000908152609b60205260409020549190611dea565b6001600160a01b038085166000908152609b6020908152604080832094909455918516815260a6909152205460ff1680156119f857506001600160a01b038316600090815260a2602052604090205460ff16155b15611d7d5760a35460009015611a7c57611a29612710611a2360a3548561230890919063ffffffff16565b90612361565b609e54909150611a399082612002565b609e55609d54611a499082612002565b609d556040805182815290516000916001600160a01b03871691600080516020612b278339815191529181900360200190a35b60008060a454118015611a99575060a5546001600160a01b031615155b15611d6457611ab9612710611a2360a4548661230890919063ffffffff16565b60a7549091506001600160a01b031615611cf157306000908152609b6020526040902054611ae79082611871565b306000818152609b6020908152604091829020939093558051848152905191926001600160a01b03891692600080516020612b278339815191529281900390910190a360a754604080516002808252606080830184526001600160a01b0390941693926020830190803683370190505090503081600081518110611b6757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611bc057600080fd5b505afa158015611bd4573d6000803e3d6000fd5b505050506040513d6020811015611bea57600080fd5b5051815182906001908110611bfb57fe5b6001600160a01b03928316602091820292909201015260a754611c219130911685611785565b60a554604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b0393841660648401819052426084850181905260a060448601908152875160a4870152875196891696635c11d795968b968a9594939092909160c40190602080880191028083838b5b83811015611ca9578181015183820152602001611c91565b505050509050019650505050505050600060405180830381600087803b158015611cd257600080fd5b505af1158015611ce6573d6000803e3d6000fd5b505050505050611d64565b60a5546001600160a01b03166000908152609b6020526040902054611d169082611871565b60a580546001600160a01b039081166000908152609b6020908152604091829020949094559154825185815292519082169391891692600080516020612b2783398151915292908290030190a35b611d7881611d728585612002565b90612002565b925050505b6001600160a01b0382166000908152609b6020526040902054611da09082611871565b6001600160a01b038084166000818152609b60209081526040918290209490945580518581529051919392871692600080516020612b2783398151915292918290030190a3505050565b60008184841115611e795760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e3e578181015183820152602001611e26565b50505050905090810190601f168015611e6b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116611ec65760405162461bcd60e51b8152600401808060200182810382526023815260200180612b8d6023913960400191505060405180910390fd5b609a546040516001600160a01b038084169216907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b490600090a3609a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216611f7d576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611f8960008383612282565b609d54611f969082611871565b609d556001600160a01b0382166000908152609b6020526040902054611fbc9082611871565b6001600160a01b0383166000818152609b60209081526040808320949094558351858152935192939192600080516020612b278339815191529281900390910190a35050565b60006118cb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dea565b6001600160a01b0382166120895760405162461bcd60e51b8152600401808060200182810382526021815260200180612b476021913960400191505060405180910390fd5b61209582600083612282565b6120d28160405180606001604052806022815260200161298f602291396001600160a01b0385166000908152609b60205260409020549190611dea565b6001600160a01b0383166000908152609b6020526040902055609d546120f89082612002565b609d556040805182815290516000916001600160a01b03851691600080516020612b278339815191529181900360200190a35050565b303b1590565b600054610100900460ff168061214d575061214d61212e565b8061215b575060005460ff16155b6121965760405162461bcd60e51b815260040180806020018281038252602e815260200180612af9602e913960400191505060405180910390fd5b600054610100900460ff161580156121c1576000805460ff1961ff0019909116610100171660011790555b6121c96123a3565b6121d1612443565b8015610afc576000805461ff001916905550565b600054610100900460ff16806121fe57506121fe61212e565b8061220c575060005460ff16155b6122475760405162461bcd60e51b815260040180806020018281038252602e815260200180612af9602e913960400191505060405180910390fd5b600054610100900460ff16158015612272576000805460ff1961ff0019909116610100171660011790555b61227a6123a3565b6121d161253c565b61228d838383612605565b6001600160a01b03831661230357609e546122b0826122aa610900565b90611871565b1115612303576040805162461bcd60e51b815260206004820152601960248201527f45524332304361707065643a2063617020657863656564656400000000000000604482015290519081900360640190fd5b505050565b600082612317575060006108fa565b8282028284828161232457fe5b04146118cb5760405162461bcd60e51b8152600401808060200182810382526021815260200180612a906021913960400191505060405180910390fd5b60006118cb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612837565b600054610100900460ff16806123bc57506123bc61212e565b806123ca575060005460ff16155b6124055760405162461bcd60e51b815260040180806020018281038252602e815260200180612af9602e913960400191505060405180910390fd5b600054610100900460ff161580156121d1576000805460ff1961ff0019909116610100171660011790558015610afc576000805461ff001916905550565b600054610100900460ff168061245c575061245c61212e565b8061246a575060005460ff16155b6124a55760405162461bcd60e51b815260040180806020018281038252602e815260200180612af9602e913960400191505060405180910390fd5b600054610100900460ff161580156124d0576000805460ff1961ff0019909116610100171660011790555b60006124da611781565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610afc576000805461ff001916905550565b600054610100900460ff1680612555575061255561212e565b80612563575060005460ff16155b61259e5760405162461bcd60e51b815260040180806020018281038252602e815260200180612af9602e913960400191505060405180910390fd5b600054610100900460ff161580156125c9576000805460ff1961ff0019909116610100171660011790555b6125d1611781565b609a80546001600160a01b0319166001600160a01b03929092169190911790558015610afc576000805461ff001916905550565b6099546001600160a01b0316158061261d5750609754155b1561262757612303565b60985415801561264557506099546001600160a01b03848116911614155b801561265e57506099546001600160a01b038381169116145b801561266a5750600081115b1561267457426098555b6099546001600160a01b03848116911614801561269f57506099546001600160a01b03838116911614155b156123035760006126ae610906565b50505050509050600081111561283157600060976126cd836001612002565b815481106126d757fe5b600091825260208083206001600160a01b03881684526002600490930201918201905260409091205490915060ff16612757576040805162461bcd60e51b815260206004820152601e60248201527f4c4745202d204275796572206973206e6f742077686974656c69737465640000604482015290519081900360640190fd5b60018101546001600160a01b0385166000908152600383016020526040812054909111156127ab576001600160a01b038516600090815260038301602052604090205460018301546127a891612002565b90505b808411156127ea5760405162461bcd60e51b8152600401808060200182810382526026815260200180612a6a6026913960400191505060405180910390fd5b6001600160a01b038516600090815260038301602052604090205461280f9085611871565b6001600160a01b03861660009081526003909301602052604090922091909155505b50505050565b600081836128865760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e3e578181015183820152602001611e26565b50600083858161289257fe5b0495945050505050565b5080546000825560040290600052602060002090810190610afc919061293b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128fe57805160ff191683800117855561292b565b8280016001018555821561292b579182015b8281111561292b578251825591602001919060010190612910565b50612937929150612956565b5090565b5b80821115612937576000808255600182015560040161293c565b5b80821115612937576000815560010161295756fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373466565207265776172642061646472657373206d757374206e6f74206265207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636543616c6c6572206973206e6f74207468652077686974656c69737465720000004c4745202d20416d6f756e7420657863656564732077686974656c697374206d6178696d756d536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734e65772077686974656c697374657220697320746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737346656573206d757374206e6f7420746f74616c206d6f7265207468616e203130302545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220223aded908026bee15aa2726f593d1915445a16963d5b4c1634dbd0de942e9ce64736f6c634300060c0033
Deployed Bytecode Sourcemap
30287:7866:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35016:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35980:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35980:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;35403:100;;;:::i;:::-;;;;;;;;;;;;;;;;28023:804;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36157:321;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36157:321:0;;;;;;;;;;;;;;;;;:::i;25136:133::-;;;;;;;;;;;;;;;;-1:-1:-1;25136:133:0;-1:-1:-1;;;;;25136:133:0;;:::i;:::-;;35303:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35220:75;;;:::i;36486:218::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36486:218:0;;;;;;;;:::i;32266:99::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32266:99:0;;;;;;;;:::i;34891:117::-;;;;;;;;;;;;;;;;-1:-1:-1;34891:117:0;;:::i;26854:700::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26854:700:0;-1:-1:-1;26854:700:0;;;;:::i;24363:30::-;;;:::i;:::-;;;;-1:-1:-1;;;;;24363:30:0;;;;;;;;;;;;;;25911:573;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25911:573:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25911:573:0;;-1:-1:-1;25911:573:0;-1:-1:-1;25911:573:0;:::i;30804:28::-;;;:::i;35511:119::-;;;;;;;;;;;;;;;;-1:-1:-1;35511:119:0;-1:-1:-1;;;;;35511:119:0;;:::i;30724:44::-;;;;;;;;;;;;;;;;-1:-1:-1;30724:44:0;-1:-1:-1;;;;;30724:44:0;;:::i;9455:148::-;;;:::i;30774:26::-;;;:::i;32047:90::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32047:90:0;;;;;;;;;;:::i;8813:79::-;;;:::i;35116:96::-;;;:::i;24960:164::-;;;:::i;36712:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36712:269:0;;;;;;;;:::i;24272:43::-;;;;;;;;;;;;;;;;-1:-1:-1;24272:43:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35638:175;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35638:175:0;;;;;;;;:::i;30956:582::-;;;;;;;;;;;;;;;;-1:-1:-1;30956:582:0;;;;;;;;;;;;;-1:-1:-1;;;;;30956:582:0;;;;;;;;;;;;:::i;31546:77::-;;;;;;;;;;;;;;;;-1:-1:-1;31546:77:0;-1:-1:-1;;;;;31546:77:0;;:::i;32142:112::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32142:112:0;;;;;;;;;;:::i;24406:27::-;;;:::i;24328:28::-;;;:::i;35821:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35821:151:0;;;;;;;;;;:::i;31635:407::-;;;;;;;;;;;;;;;;-1:-1:-1;31635:407:0;;;;;;;;;;;-1:-1:-1;;;;;31635:407:0;;:::i;30877:37::-;;;;;;;;;;;;;;;;-1:-1:-1;30877:37:0;-1:-1:-1;;;;;30877:37:0;;:::i;30921:22::-;;;:::i;9758:244::-;;;;;;;;;;;;;;;;-1:-1:-1;9758:244:0;-1:-1:-1;;;;;9758:244:0;;:::i;30839:32::-;;;:::i;35016:92::-;35095:5;35088:12;;;;;;;;-1:-1:-1;;35088:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35062:13;;35088:12;;35095:5;;35088:12;;35095:5;35088:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35016:92;:::o;35980:169::-;36063:4;36080:39;36089:12;:10;:12::i;:::-;36103:7;36112:6;36080:8;:39::i;:::-;-1:-1:-1;36137:4:0;35980:169;;;;;:::o;35403:100::-;35483:12;;35403:100;:::o;28023:804::-;28076:7;28085;28094;28103;28112:4;28118:7;28167:1;28151:13;;:17;28148:622;;;28230:13;;28199:28;28268:481;28292:19;:26;28288:30;;28268:481;;;28362:30;28395:19;28415:1;28395:22;;;;;;;;;;;;;;;;;;28362:55;;28477:42;28502:7;:16;;;28477:20;:24;;:42;;;;:::i;:::-;28454:65;;28548:20;28541:3;:27;28538:195;;28599:8;:1;28605;28599:5;:8::i;:::-;28609:16;;28649:17;;;;28627:20;;28668:17;;;28609:16;28686:12;:10;:12::i;:::-;-1:-1:-1;;;;;28668:31:0;;;;;;;;;;;;-1:-1:-1;28668:31:0;;;;;;;28701:17;;;;28719:12;:10;:12::i;:::-;-1:-1:-1;;;;;28701:31:0;-1:-1:-1;;;;;28701:31:0;;;;;;;;;;;;;28591:142;;;;;;;;;;;;;;;;;28538:195;-1:-1:-1;28320:3:0;;28268:481;;;;28148:622;;-1:-1:-1;28798:1:0;;-1:-1:-1;28798:1:0;;-1:-1:-1;28798:1:0;;-1:-1:-1;28798:1:0;;-1:-1:-1;28798:1:0;;-1:-1:-1;28798:1:0;28023:804;;;;;;;:::o;36157:321::-;36263:4;36280:36;36290:6;36298:9;36309:6;36280:9;:36::i;:::-;36327:121;36336:6;36344:12;:10;:12::i;:::-;36358:89;36396:6;36358:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36358:19:0;;;;;;:11;:19;;;;;;36378:12;:10;:12::i;:::-;-1:-1:-1;;;;;36358:33:0;;;;;;;;;;;;-1:-1:-1;36358:33:0;;;:89;:37;:89::i;:::-;36327:8;:121::i;:::-;-1:-1:-1;36466:4:0;36157:321;;;;;:::o;25136:133::-;24882:12;:10;:12::i;:::-;24866;;-1:-1:-1;;;;;24866:12:0;;;:28;;;24858:70;;;;;-1:-1:-1;;;24858:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24858:70:0;;;;;;;;;;;;;;;25225:36:::1;25246:14;25225:20;:36::i;:::-;25136:133:::0;:::o;35303:92::-;35378:9;;;;35303:92;:::o;35220:75::-;35283:4;;35220:75;:::o;36486:218::-;36574:4;36591:83;36600:12;:10;:12::i;:::-;36614:7;36623:50;36662:10;36623:11;:25;36635:12;:10;:12::i;:::-;-1:-1:-1;;;;;36623:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;36623:25:0;;;:34;;;;;;;;;;;:38;:50::i;32266:99::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;32338:19:::1;32344:3;32349:7;32338:5;:19::i;:::-;32266:99:::0;;:::o;34891:117::-;34946:4;;:16;;34955:6;34946:8;:16::i;:::-;34941:4;:21;34973:27;34979:12;:10;:12::i;:::-;34993:6;34973:5;:27::i;26854:700::-;24882:12;:10;:12::i;:::-;24866;;-1:-1:-1;;;;;24866:12:0;;;:28;;;24858:70;;;;;-1:-1:-1;;;24858:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24858:70:0;;;;;;;;;;;;;;;27032:19:::1;:26:::0;27024:34;::::1;27016:60;;;::::0;;-1:-1:-1;;;27016:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27016:60:0;;;;;;;;;;;;;::::1;;27107:1;27095:9;:13;27087:43;;;::::0;;-1:-1:-1;;;27087:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27087:43:0;;;;;;;;;;;;;::::1;;27158:19;27178:5;27158:26;;;;;;;;;;;;;;;;;;:35;;;27146:8;:47;27143:111;;27246:8;27208:19;27228:5;27208:26;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:46:::0;27143:111:::1;27291:19;27311:5;27291:26;;;;;;;;;;;;;;;;;;:36;;;27278:9;:49;27275:117;;27383:9;27344:19;27364:5;27344:26;;;;;;;;;;;;;;;;;;:36;;:48;;;;27275:117;27418:9;27413:134;27433:20:::0;;::::1;27413:134;;;27528:7;27475:19;27495:5;27475:26;;;;;;;;;;;;;;;;;;:36;;:50;27512:9;;27522:1;27512:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;27512:12:0::1;27475:50:::0;;-1:-1:-1;27475:50:0;::::1;::::0;;;;;;-1:-1:-1;27475:50:0;:60;;-1:-1:-1;;27475:60:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;27455:3:0::1;27413:134;;;;26854:700:::0;;;;;;:::o;24363:30::-;;;-1:-1:-1;;;;;24363:30:0;;:::o;25911:573::-;24882:12;:10;:12::i;:::-;24866;;-1:-1:-1;;;;;24866:12:0;;;:28;;;24858:70;;;;;-1:-1:-1;;;24858:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24858:70:0;;;;;;;;;;;;;;;26067:37;;::::1;26059:70;;;::::0;;-1:-1:-1;;;26059:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26059:70:0;;;;;;;;;;;;;::::1;;26150:15;:29:::0;;-1:-1:-1;;;;;;26150:29:0::1;-1:-1:-1::0;;;;;26150:29:0;::::1;;::::0;;26203:20;;26200:277:::1;;26254:26;26261:19;;26254:26;:::i;:::-;26310:9;26305:151;26325:20:::0;;::::1;26305:151;;;26371:19;26396:43;;;;;;;;26411:9;;26421:1;26411:12;;;;;;;;;;;;;26396:43;;;;26425:10;;26436:1;26425:13;;;;;;;;::::0;;::::1;::::0;;;::::1;;26396:43:::0;;;26371:69;;::::1;::::0;;::::1;::::0;;-1:-1:-1;26371:69:0;;;;;;;;;::::1;::::0;;::::1;;::::0;;;;::::1;::::0;;;::::1;::::0;;;;-1:-1:-1;26347:3:0::1;26305:151;;;;26200:277;25911:573:::0;;;;;:::o;30804:28::-;;;;:::o;35511:119::-;-1:-1:-1;;;;;35604:18:0;35577:7;35604:18;;;:9;:18;;;;;;;35511:119::o;30724:44::-;;;;;;;;;;;;;;;:::o;9455:148::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;9546:6:::1;::::0;9525:40:::1;::::0;9562:1:::1;::::0;-1:-1:-1;;;;;9546:6:0::1;::::0;9525:40:::1;::::0;9562:1;;9525:40:::1;9576:6;:19:::0;;-1:-1:-1;;;;;;9576:19:0::1;::::0;;9455:148::o;30774:26::-;;;;:::o;32047:90::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32114:8:0;;;::::1;;::::0;;;:5:::1;:8;::::0;;;;:15;;-1:-1:-1;;32114:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32047:90::o;8813:79::-;8878:6;;-1:-1:-1;;;;;8878:6:0;8813:79;:::o;35116:96::-;35197:7;35190:14;;;;;;;;-1:-1:-1;;35190:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35164:13;;35190:14;;35197:7;;35190:14;;35197:7;35190:14;;;;;;;;;;;;;;;;;;;;;;;;24960:164;24882:12;:10;:12::i;:::-;24866;;-1:-1:-1;;;;;24866:12:0;;;:28;;;24858:70;;;;;-1:-1:-1;;;24858:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24858:70:0;;;;;;;;;;;;;;;25055:12:::1;::::0;25032:48:::1;::::0;25077:1:::1;::::0;-1:-1:-1;;;;;25055:12:0::1;::::0;25032:48:::1;::::0;25077:1;;25032:48:::1;25091:12;:25:::0;;-1:-1:-1;;;;;;25091:25:0::1;::::0;;24960:164::o;36712:269::-;36805:4;36822:129;36831:12;:10;:12::i;:::-;36845:7;36854:96;36893:15;36854:96;;;;;;;;;;;;;;;;;:11;:25;36866:12;:10;:12::i;:::-;-1:-1:-1;;;;;36854:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;36854:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;24272:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24272:43:0;:::o;35638:175::-;35724:4;35741:42;35751:12;:10;:12::i;:::-;35765:9;35776:6;35741:9;:42::i;30956:582::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;31140:1:::1;31134:3;:7;31126:41;;;::::0;;-1:-1:-1;;;31126:41:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31126:41:0;;;;;;;;;;;;;::::1;;31188:24;::::0;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;31188:24:0::1;::::0;;::::1;::::0;;;::::1;::::0;:5:::1;::::0;:24:::1;:::i;:::-;-1:-1:-1::0;31223:18:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;31223:18:0::1;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:18:::1;:::i;:::-;-1:-1:-1::0;31252:9:0::1;:14:::0;;-1:-1:-1;;31252:14:0::1;31264:2;31252:14;::::0;;31287:4:::1;:10:::0;;;31318:16:::1;:14;:16::i;:::-;31339:23;:21;:23::i;:::-;31371:51;31379:10;31391:12;31405:16;31371:7;:51::i;:::-;31431:7;:16:::0;;-1:-1:-1;;;;;;31431:16:0::1;-1:-1:-1::0;;;;;31431:16:0;::::1;;::::0;;31456:34:::1;31471:12;:10;:12::i;:::-;31485:4;31456:14;:34::i;:::-;31495:35;31518:4;31525;31495:14;:35::i;:::-;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;30956:582;;;;;;:::o;31546:77::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;31604:7:::1;:11:::0;;-1:-1:-1;;;;;;31604:11:0::1;-1:-1:-1::0;;;;;31604:11:0;;;::::1;::::0;;;::::1;::::0;;31546:77::o;32142:112::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32220:15:0;;;::::1;;::::0;;;:12:::1;:15;::::0;;;;:26;;-1:-1:-1;;32220:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32142:112::o;24406:27::-;;;-1:-1:-1;;;;;24406:27:0;;:::o;24328:28::-;;;;:::o;35821:151::-;-1:-1:-1;;;;;35937:18:0;;;35910:7;35937:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;35821:151::o;31635:407::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;31788:5:::1;31756:28;:10:::0;31771:12;31756:14:::1;:28::i;:::-;:37;;31748:84;;;;-1:-1:-1::0;;;31748:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31845:30:0;::::1;31837:86;;;;-1:-1:-1::0;;;31837:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31932:11;:24:::0;;;;31961:13:::1;:28:::0;31994:17:::1;:36:::0;;-1:-1:-1;;;;;;31994:36:0::1;-1:-1:-1::0;;;;;31994:36:0;;::::1;::::0;;;::::1;::::0;;31635:407::o;30877:37::-;;;;;;;;;;;;;;;:::o;30921:22::-;;;-1:-1:-1;;;;;30921:22:0;;:::o;9758:244::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9847:22:0;::::1;9839:73;;;;-1:-1:-1::0;;;9839:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9949:6;::::0;9928:38:::1;::::0;-1:-1:-1;;;;;9928:38:0;;::::1;::::0;9949:6:::1;::::0;9928:38:::1;::::0;9949:6:::1;::::0;9928:38:::1;9977:6;:17:::0;;-1:-1:-1;;;;;;9977:17:0::1;-1:-1:-1::0;;;;;9977:17:0;;;::::1;::::0;;;::::1;::::0;;9758:244::o;30839:32::-;;;-1:-1:-1;;;;;30839:32:0;;:::o;7089:106::-;7177:10;7089:106;:::o;37801:346::-;-1:-1:-1;;;;;37903:19:0;;37895:68;;;;-1:-1:-1;;;37895:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37982:21:0;;37974:68;;;;-1:-1:-1;;;37974:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38055:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;38107:32;;;;;;;;;;;;;;;;;37801:346;;;:::o;10983:181::-;11041:7;11073:5;;;11097:6;;;;11089:46;;;;;-1:-1:-1;;;11089:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11155:1;10983:181;-1:-1:-1;;;10983:181:0:o;32717:2168::-;-1:-1:-1;;;;;32815:20:0;;32807:70;;;;-1:-1:-1;;;32807:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32896:23:0;;32888:71;;;;-1:-1:-1;;;32888:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32974:47;32995:6;33003:9;33014:6;32974:20;:47::i;:::-;33050:71;33072:6;33050:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33050:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;33030:17:0;;;;;;;:9;:17;;;;;;;;:91;;;;33133:16;;;;;:5;:16;;;;;;;:41;;;;-1:-1:-1;;;;;;33154:20:0;;;;;;:12;:20;;;;;;;;33153:21;33133:41;33130:1629;;;33226:11;;33187:21;;33226:15;33223:246;;33271:34;33299:5;33271:23;33282:11;;33271:6;:10;;:23;;;;:::i;:::-;:27;;:34::i;:::-;33325:4;;33255:50;;-1:-1:-1;33325:23:0;;33255:50;33325:8;:23::i;:::-;33318:4;:30;33370:12;;:31;;33387:13;33370:16;:31::i;:::-;33355:12;:46;33413:43;;;;;;;;33438:1;;-1:-1:-1;;;;;33413:43:0;;;-1:-1:-1;;;;;;;;;;;33413:43:0;;;;;;;;33223:246;33479:23;33536:1;33520:13;;:17;:52;;;;-1:-1:-1;33541:17:0;;-1:-1:-1;;;;;33541:17:0;:31;;33520:52;33517:1166;;;33609:36;33639:5;33609:25;33620:13;;33609:6;:10;;:25;;;;:::i;:36::-;33661:7;;33591:54;;-1:-1:-1;;;;;;33661:7:0;:21;33658:1013;;33750:4;33732:24;;;;:9;:24;;;;;;:45;;33761:15;33732:28;:45::i;:::-;33723:4;33705:24;;;;:9;:24;;;;;;;;;:72;;;;33803:48;;;;;;;33723:4;;-1:-1:-1;;;;;33803:48:0;;;-1:-1:-1;;;;;;;;;;;33803:48:0;;;;;;;;;33914:7;;33967:16;;;33981:1;33967:16;;;33943:21;33967:16;;;;;-1:-1:-1;;;;;33914:7:0;;;;33943:21;33967:16;;;;;;;;;;-1:-1:-1;33967:16:0;33943:40;;34038:4;34020;34025:1;34020:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;34020:23:0;;;-1:-1:-1;;;;;34020:23:0;;;;;34076:1;-1:-1:-1;;;;;34076:6:0;;:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34076:8:0;34066:7;;:4;;34071:1;;34066:7;;;;;;-1:-1:-1;;;;;34066:18:0;;;:7;;;;;;;;;:18;34153:7;;34129:49;;34146:4;;34153:7;34162:15;34129:8;:49::i;:::-;34390:17;;34207:265;;-1:-1:-1;;;34207:265:0;;;;;;;;34331:1;34207:265;;;;;;-1:-1:-1;;;;;34390:17:0;;;34207:265;;;;;;34434:15;34207:265;;;;;;;;;;;;;;;;;;;;;:55;;;;;;34289:15;;34359:4;;34390:17;34434:15;34207:265;;;;;;;;;;;;;;;;34331:1;34207:265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33658:1013;;;;;34556:17;;-1:-1:-1;;;;;34556:17:0;34546:28;;;;:9;:28;;;;;;:49;;34579:15;34546:32;:49::i;:::-;34525:17;;;-1:-1:-1;;;;;34525:17:0;;;34515:28;;;;:9;:28;;;;;;;;;:80;;;;34628:17;;34611:52;;;;;;;34628:17;;;;34611:52;;;;-1:-1:-1;;;;;;;;;;;34611:52:0;;;;;;;;33658:1013;34702:46;34732:15;34702:25;:6;34713:13;34702:10;:25::i;:::-;:29;;:46::i;:::-;34693:55;;33130:1629;;;-1:-1:-1;;;;;34794:20:0;;;;;;:9;:20;;;;;;:32;;34819:6;34794:24;:32::i;:::-;-1:-1:-1;;;;;34771:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;34842:35;;;;;;;34771:20;;34842:35;;;;-1:-1:-1;;;;;;;;;;;34842:35:0;;;;;;;;32717:2168;;;:::o;11870:192::-;11956:7;11992:12;11984:6;;;;11976:29;;;;-1:-1:-1;;;11976:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12028:5:0;;;11870:192::o;25281:266::-;-1:-1:-1;;;;;25363:28:0;;25355:76;;;;-1:-1:-1;;;25355:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25470:12;;25447:52;;-1:-1:-1;;;;;25447:52:0;;;;25470:12;;25447:52;;25470:12;;25447:52;25510:12;:29;;-1:-1:-1;;;;;;25510:29:0;-1:-1:-1;;;;;25510:29:0;;;;;;;;;;25281:266::o;36989:378::-;-1:-1:-1;;;;;37073:21:0;;37065:65;;;;;-1:-1:-1;;;37065:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37143:49;37172:1;37176:7;37185:6;37143:20;:49::i;:::-;37220:12;;:24;;37237:6;37220:16;:24::i;:::-;37205:12;:39;-1:-1:-1;;;;;37276:18:0;;;;;;:9;:18;;;;;;:30;;37299:6;37276:22;:30::i;:::-;-1:-1:-1;;;;;37255:18:0;;;;;;:9;:18;;;;;;;;:51;;;;37322:37;;;;;;;37255:18;;;;-1:-1:-1;;;;;;;;;;;37322:37:0;;;;;;;;;36989:378;;:::o;11439:136::-;11497:7;11524:43;11528:1;11531;11524:43;;;;;;;;;;;;;;;;;:3;:43::i;37375:418::-;-1:-1:-1;;;;;37459:21:0;;37451:67;;;;-1:-1:-1;;;37451:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37531:49;37552:7;37569:1;37573:6;37531:20;:49::i;:::-;37614:68;37637:6;37614:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37614:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;37593:18:0;;;;;;:9;:18;;;;;:89;37708:12;;:24;;37725:6;37708:16;:24::i;:::-;37693:12;:39;37748:37;;;;;;;;37774:1;;-1:-1:-1;;;;;37748:37:0;;;-1:-1:-1;;;;;;;;;;;37748:37:0;;;;;;;;37375:418;;:::o;5459:508::-;5876:4;5922:17;5954:7;5459:508;:::o;8391:129::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;8449:26:::1;:24;:26::i;:::-;8486;:24;:26::i;:::-;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;8391:129;:::o;24553:143::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;24618:26:::1;:24;:26::i;:::-;24655:33;:31;:33::i;32377:334::-:0;32482:60;32516:6;32524:9;32535:6;32482:33;:60::i;:::-;-1:-1:-1;;;;;32561:20:0;;32557:147;;32658:4;;32629:25;32647:6;32629:13;:11;:13::i;:::-;:17;;:25::i;:::-;:33;;32621:71;;;;;-1:-1:-1;;;32621:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32377:334;;;:::o;12313:471::-;12371:7;12616:6;12612:47;;-1:-1:-1;12646:1:0;12639:8;;12612:47;12683:5;;;12687:1;12683;:5;:1;12707:5;;;;;:10;12699:56;;;;-1:-1:-1;;;12699:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13252:132;13310:7;13337:39;13341:1;13344;13337:39;;;;;;;;;;;;;;;;;:3;:39::i;7010:69::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5312:14;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;7010:69;:::o;8528:202::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;8600:17:::1;8620:12;:10;:12::i;:::-;8643:6;:18:::0;;-1:-1:-1;;;;;;8643:18:0::1;-1:-1:-1::0;;;;;8643:18:0;::::1;::::0;;::::1;::::0;;;8677:43:::1;::::0;8643:18;;-1:-1:-1;8643:18:0;-1:-1:-1;;8677:43:0::1;::::0;-1:-1:-1;;8677:43:0::1;5298:1;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;8528:202;:::o;24702:106::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;24786:12:::1;:10;:12::i;:::-;24771;:27:::0;;-1:-1:-1;;;;;;24771:27:0::1;-1:-1:-1::0;;;;;24771:27:0;;;::::1;::::0;;;::::1;::::0;;5308:57;;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;24702:106;:::o;28962:1312::-;29074:15;;-1:-1:-1;;;;;29074:15:0;:29;;:64;;-1:-1:-1;29107:19:0;:26;:31;29074:64;29071:89;;;29153:7;;29071:89;29183:13;;:18;:47;;;;-1:-1:-1;29215:15:0;;-1:-1:-1;;;;;29205:25:0;;;29215:15;;29205:25;;29183:47;:79;;;;-1:-1:-1;29247:15:0;;-1:-1:-1;;;;;29234:28:0;;;29247:15;;29234:28;29183:79;:93;;;;;29275:1;29266:6;:10;29183:93;29180:130;;;29307:3;29291:13;:19;29180:130;29344:15;;-1:-1:-1;;;;;29334:25:0;;;29344:15;;29334:25;:57;;;;-1:-1:-1;29376:15:0;;-1:-1:-1;;;;;29363:28:0;;;29376:15;;29363:28;;29334:57;29331:926;;;29445:21;29475:22;:20;:22::i;:::-;29444:53;;;;;;;29541:1;29525:13;:17;29522:710;;;29581:30;29614:19;29634:20;:13;29652:1;29634:17;:20::i;:::-;29614:41;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29700:28:0;;;;:17;29614:41;;;;;29700:17;;;:28;;;;;;;29614:41;;-1:-1:-1;29700:28:0;;29692:71;;;;;-1:-1:-1;;;29692:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29898:17;;;;-1:-1:-1;;;;;29867:28:0;;29800:23;29867:28;;;:17;;;:28;;;;;;29800:23;;-1:-1:-1;29864:143:0;;;-1:-1:-1;;;;;29978:28:0;;;;;;:17;;;:28;;;;;;29956:17;;;;:51;;:21;:51::i;:::-;29938:69;;29864:143;30050:15;30040:6;:25;;30032:76;;;;-1:-1:-1;;;30032:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30158:28:0;;;;;;:17;;;:28;;;;;;:40;;30191:6;30158:32;:40::i;:::-;-1:-1:-1;;;;;30127:28:0;;;;;;:17;;;;:28;;;;;;:71;;;;-1:-1:-1;29522:710:0;29331:926;28962:1312;;;:::o;13872:345::-;13958:7;14060:12;14053:5;14045:28;;;;-1:-1:-1;;;14045:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14084:9;14100:1;14096;:5;;;;;;;13872:345;-1:-1:-1;;;;;13872:345:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://223aded908026bee15aa2726f593d1915445a16963d5b4c1634dbd0de942e9ce
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.