ERC-20
MEME
Overview
Max Total Supply
1,000,000,000,000 SHAKI
Holders
463 (0.00%)
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SHIBNAKI
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-24 */ //import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.4.0-solc-0.7/contracts/token/ERC20/ERC20.sol"; // SPDX-License-Identifier: MIT // 84 71 32 64 84 104 101 71 104 111 115 116 68 101 118 // ASCII pragma solidity ^0.8.4; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return payable(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; } } /** * @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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @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) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * 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); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ 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; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ 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; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { 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"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ 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); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ 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); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ 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); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } contract Ownable { address public _owner; event onOwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _owner = msg.sender; } modifier onlyOwner() { require(msg.sender == _owner); _; } function owner() public view virtual returns (address) { return _owner; } function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != address(0)); emit onOwnershipTransferred(_owner, _newOwner); _owner = _newOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; 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); } // pragma solidity >=0.6.2; 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; } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. Calling a `nonReentrant` function from another `nonReentrant` function is not supported. It is possible to prevent this from happeningby making the `nonReentrant` function external, and make it call a`private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } contract SHIBNAKI is ERC20, Ownable, ReentrancyGuard { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; uint256 public feeDevelopment = 40; uint256 public feeSustainability = 40; uint256 public feeLiquidity = 20; mapping (address => bool) public isExcludedFromFees; mapping (address => bool) public isExcludedFromMax; mapping (address => bool) public isInBlacklist; mapping (address => bool) public isInWhitelist; mapping (address => bool) public isrouterother; uint256 private _totalSupply = 1000000000000 * (10**18); uint256 private maxBuyLimit = 1000000000 * (10**18); string private _name = "SHIBNAKI"; string private _symbol = "SHAKI"; uint256 public maxWallet = _totalSupply.div(10000).mul(75); uint256 public _tokenThresholdToSwap = _totalSupply / 10000; bool inSwapAndLiquify; bool swapping; bool public swapAndSendFeesEnabled = true; bool public CEX = false; bool public addliq = true; bool public trading = false; bool public limitsEnabled = true; address public walletSustainability; address public walletDevelopment; address public walletLiquidity; address public DAOcontrol; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor (address _walletSustainability, address _walletDevelopment, address _DAOcontrol, address _walletLiquidity) ERC20(_name, _symbol) { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; walletSustainability = _walletSustainability; walletDevelopment = _walletDevelopment; walletLiquidity = _walletLiquidity; DAOcontrol = _DAOcontrol; // exclude from paying fees excludeFromFee(owner()); excludeFromFee(address(this)); excludeFromMax(owner()); excludeFromMax(address(this)); _mint(owner(), _totalSupply); } receive() external payable {} function updateWalletSustainability(address _walletSustainability) external { require(_msgSender() == DAOcontrol); walletSustainability = _walletSustainability; } function updateWalletDevelopment(address _walletDevelopment) external { require(_msgSender() == DAOcontrol); walletDevelopment = _walletDevelopment; } function updateWalletLiquidity(address _walletLiquidity) external { require(_msgSender() == DAOcontrol); walletLiquidity = _walletLiquidity; } function updateDAOcontrol(address _DAOcontrol) external { require(_msgSender() == DAOcontrol); DAOcontrol = _DAOcontrol; } function excludeFromFee(address account) public { require(_msgSender() == DAOcontrol); isExcludedFromFees[account] = true; } function excludeFromMax(address account) public { require(_msgSender() == DAOcontrol); isExcludedFromMax[account] = true; } function includeInMax(address account) public { require(_msgSender() == DAOcontrol); isExcludedFromMax[account] = false; } function includeInFee(address account) public { require(_msgSender() == DAOcontrol); isExcludedFromFees[account] = false; } function setSwapAndSendFeesEnabled(bool _enabled) public { require(_msgSender() == DAOcontrol); swapAndSendFeesEnabled = _enabled; } function setLimitsEnabled(bool _enabled) public{ require(_msgSender() == DAOcontrol); limitsEnabled = _enabled; } function setTradingEnabled(bool _enabled) public { require(_msgSender() == DAOcontrol); trading = _enabled; } function setTransferDelay(bool _enabled) public { require(_msgSender() == DAOcontrol); transferDelayEnabled = _enabled; } function setThresoldToSwap(uint256 amount) public { require(_msgSender() == DAOcontrol); _tokenThresholdToSwap = amount; } function setMaxBuyLimit(uint256 percentage) public { require(_msgSender() == DAOcontrol); maxBuyLimit = _totalSupply.div(10**4).mul(percentage); } function setMaxWallet(uint256 percentage) public { require(_msgSender() == DAOcontrol); require(percentage >= 75); maxWallet = _totalSupply.div(10000).mul(percentage); } function setFeesPercent(uint256 devFee, uint256 sustainabilityFee, uint256 liquidityFee) public { require(_msgSender() == DAOcontrol); feeDevelopment = devFee; feeSustainability = sustainabilityFee; feeLiquidity = liquidityFee; require(devFee + sustainabilityFee + liquidityFee <= 990, "Check fee limit"); } function setBlacklistWallet(address account, bool blacklisted) external { require(!CEX); require(!isInWhitelist[account]); require(_msgSender() == DAOcontrol); isInBlacklist[account] = blacklisted; } function setCEXWhitelistWallet(address account) external { require(_msgSender() == DAOcontrol); isInWhitelist[account] = true; isExcludedFromMax[account] = true; } function setRouterOther(address account, bool enabled) external { require(_msgSender() == DAOcontrol); isrouterother[account] = enabled; } function AddToCEX (bool enabled) external { require(_msgSender() == DAOcontrol); CEX = enabled; } function Addliq (bool enabled) external { require(_msgSender() == DAOcontrol); addliq = enabled; } function manualswap() external lockTheSwap { require(_msgSender() == DAOcontrol); uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualswapcustom(uint256 percentage) external lockTheSwap { require(_msgSender() == DAOcontrol); uint256 contractBalance = balanceOf(address(this)); uint256 swapbalance = contractBalance.div(10**5).mul(percentage); swapTokensForEth(swapbalance); } function manualsend() external { require(_msgSender() == DAOcontrol); uint256 amount = address(this).balance; uint256 ethDevelopment = amount.mul(feeDevelopment).div(feeDevelopment.add(feeSustainability).add(feeLiquidity)); uint256 ethSustainability = amount.mul(feeSustainability).div(feeDevelopment.add(feeSustainability).add(feeLiquidity)); uint256 ethLiquidity = amount.sub(ethDevelopment).sub(ethSustainability); //Send out fees if(ethDevelopment > 0) payable(walletDevelopment).transfer(ethDevelopment); if(ethSustainability > 0) payable(walletSustainability).transfer(ethSustainability); if(ethLiquidity > 0) payable(walletLiquidity).transfer(ethLiquidity); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(isInBlacklist[from] == false, "You're in blacklist"); if(limitsEnabled){ if(!isExcludedFromMax[to] && !isExcludedFromFees[to] && from != owner() && to != owner() && to != uniswapV2Pair && !isrouterother[to]){ require(amount <= maxBuyLimit,"Over the Max buy"); require(amount.add(balanceOf(to)) <= maxWallet); } if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !inSwapAndLiquify ){ if(!trading){ require(isExcludedFromFees[from] || isExcludedFromFees[to], "Trading is not active."); } if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } } } bool overMinTokenBalance = balanceOf(address(this)) >= _tokenThresholdToSwap; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndSendFeesEnabled ) { swapAndSendFees(); } bool takeFee = true; if(isExcludedFromFees[from] || isExcludedFromFees[to] || (from != uniswapV2Pair && to != uniswapV2Pair && !isrouterother[from] && !isrouterother[to])) { takeFee = false; } uint256 finalTransferAmount = amount; if(takeFee) { uint256 totalFeesPercent = feeDevelopment.add(feeSustainability).add(feeLiquidity); uint256 fees = amount.mul(totalFeesPercent).div(1000); finalTransferAmount = amount.sub(fees); super._transfer(from, address(this), fees); } super._transfer(from, to, finalTransferAmount); } function swapAndSendFees() private lockTheSwap { swapTokensForEth(balanceOf(address(this))); uint256 amount = address(this).balance; uint256 ethDevelopment = amount.mul(feeDevelopment).div(feeDevelopment.add(feeSustainability).add(feeLiquidity)); uint256 ethSustainability = amount.mul(feeSustainability).div(feeDevelopment.add(feeSustainability).add(feeLiquidity)); uint256 ethLiquidity = amount.sub(ethDevelopment).sub(ethSustainability); //Send out fees if(ethDevelopment > 0) payable(walletDevelopment).transfer(ethDevelopment); if(ethSustainability > 0) payable(walletSustainability).transfer(ethSustainability); if(ethLiquidity > 0) payable(walletLiquidity).transfer(ethLiquidity); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_walletSustainability","type":"address"},{"internalType":"address","name":"_walletDevelopment","type":"address"},{"internalType":"address","name":"_DAOcontrol","type":"address"},{"internalType":"address","name":"_walletLiquidity","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"onOwnershipTransferred","type":"event"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"AddToCEX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"Addliq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"CEX","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAOcontrol","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenThresholdToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addliq","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSustainability","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMax","outputs":[],"stateMutability":"nonpayable","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":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isInBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isInWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isrouterother","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"manualswapcustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"setBlacklistWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setCEXWhitelistWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"sustainabilityFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setFeesPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setMaxBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setRouterOther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setThresoldToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndSendFeesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"trading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_DAOcontrol","type":"address"}],"name":"updateDAOcontrol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletDevelopment","type":"address"}],"name":"updateWalletDevelopment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletLiquidity","type":"address"}],"name":"updateWalletLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletSustainability","type":"address"}],"name":"updateWalletSustainability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletDevelopment","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletLiquidity","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletSustainability","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60286009819055600a556014600b556c0c9f2c9cd04674edea400000006011556b033b2e3c9fd0803ce800000060125560c06040526008608081905267534849424e414b4960c01b60a09081526200005b916013919062000819565b50604080518082019091526005808252645348414b4960d81b60209092019182526200008a9160149162000819565b50620000c3604b620000af6127106011546200053d60201b620016411790919060201c565b620005a960201b620016a31790919060201c565b601555612710601154620000d8919062000970565b6016556017805466ffffffffff000019166601000100010000179055601c805460ff191660011790553480156200010e57600080fd5b5060405162003190380380620031908339810160408190526200013191620008f9565b601380546200014090620009b3565b80601f01602080910402602001604051908101604052809291908181526020018280546200016e90620009b3565b8015620001bf5780601f106200019357610100808354040283529160200191620001bf565b820191906000526020600020905b815481529060010190602001808311620001a157829003601f168201915b505050505060148054620001d390620009b3565b80601f01602080910402602001604051908101604052809291908181526020018280546200020190620009b3565b8015620002525780601f10620002265761010080835404028352916020019162000252565b820191906000526020600020905b8154815290600101906020018083116200023457829003601f168201915b505084516200026c93506003925060208601915062000819565b5080516200028290600490602084019062000819565b50506005805433610100026001600160a81b03199091161760121790555060016006556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a0155916004808301926020929190829003018186803b158015620002f657600080fd5b505afa1580156200030b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003319190620008dc565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037a57600080fd5b505afa1580156200038f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b59190620008dc565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003fe57600080fd5b505af115801562000413573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004399190620008dc565b600780546001600160a01b03199081166001600160a01b038681169190911790925560088054821684841617905560178054600160381b600160d81b0319166701000000000000008b851602179055601880548216898416179055601980548216878416179055601a80549091169187169190911790559050620004d4620004ce60055461010090046001600160a01b031690565b62000630565b620004df3062000630565b62000501620004fb60055461010090046001600160a01b031690565b62000675565b6200050c3062000675565b620005316200052860055461010090046001600160a01b031690565b601154620006ba565b50505050505062000a06565b6000808211620005945760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f00000000000060448201526064015b60405180910390fd5b620005a0828462000970565b90505b92915050565b600082620005ba57506000620005a3565b6000620005c8838562000991565b905082620005d7858362000970565b14620005a05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016200058b565b601a546001600160a01b0316336001600160a01b0316146200065157600080fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b601a546001600160a01b0316336001600160a01b0316146200069657600080fd5b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6001600160a01b038216620007125760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200058b565b6200072e81600254620007b660201b620017221790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200076191839062001722620007b6821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080620007c5838562000955565b905083811015620005a05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200058b565b8280546200082790620009b3565b90600052602060002090601f0160209004810192826200084b576000855562000896565b82601f106200086657805160ff191683800117855562000896565b8280016001018555821562000896579182015b828111156200089657825182559160200191906001019062000879565b50620008a4929150620008a8565b5090565b5b80821115620008a45760008155600101620008a9565b80516001600160a01b0381168114620008d757600080fd5b919050565b600060208284031215620008ee578081fd5b620005a082620008bf565b600080600080608085870312156200090f578283fd5b6200091a85620008bf565b93506200092a60208601620008bf565b92506200093a60408601620008bf565b91506200094a60608601620008bf565b905092959194509250565b600082198211156200096b576200096b620009f0565b500190565b6000826200098c57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615620009ae57620009ae620009f0565b500290565b600181811c90821680620009c857607f821691505b60208210811415620009ea57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b61277a8062000a166000396000f3fe60806040526004361061039b5760003560e01c8063876c4cc5116101dc578063c9b385f311610102578063ec44acf2116100a0578063f8b45b051161006f578063f8b45b0514610b30578063fd45bc9914610b46578063ff3914a314610b66578063ff768b2014610b8657600080fd5b8063ec44acf214610a9d578063ecca3b1614610ac0578063f2fde38b14610af0578063f4b8c14d14610b1057600080fd5b8063da78876f116100dc578063da78876f146109e7578063dd62ed3e14610a17578063e4a0f9f514610a5d578063ea2f0b3714610a7d57600080fd5b8063c9b385f314610987578063cf093a0e146109a7578063da532679146109c757600080fd5b8063a9059cbb1161017a578063b41c9eda11610149578063b41c9eda14610918578063c2e5ec0414610938578063c3c8cd8014610958578063c876d0b91461096d57600080fd5b8063a9059cbb1461089c578063b2bcf6b3146108bc578063b2bdfa7b146108d2578063b3d5eee1146108f757600080fd5b806395d89b41116101b657806395d89b41146108175780639caf9b001461082c578063a114f9241461085c578063a457c2d71461087c57600080fd5b8063876c4cc5146107be57806389e7b81b146107d45780638da5cb5b146107f457600080fd5b8063400291f8116102c15780634ce9f13c1161025f5780636fc3eaec1161022e5780636fc3eaec1461073357806370a0823114610748578063757765f81461077e57806377c325d61461079e57600080fd5b80634ce9f13c146106a35780634fbee193146106c35780635d0044ca146106f357806362b9bbb61461071357600080fd5b8063437823ec1161029b578063437823ec1461062d57806345d17ce31461064d57806349bd5a5e1461066d5780634b8fb3141461068d57600080fd5b8063400291f8146105d057806341aea9de146105f757806341fdc5811461061757600080fd5b806318160ddd116103395780633582ad23116103085780633582ad231461054f57806339509351146105705780633af87bcd146105905780633f8d45fc146105b057600080fd5b806318160ddd146104cc57806319f5c873146104eb57806323b872dd1461050d578063313ce5671461052d57600080fd5b806309fd82121161037557806309fd82121461042457806313096a1a14610454578063148d2161146104745780631694505e1461049457600080fd5b806306fdde03146103a7578063091646a9146103d2578063095ea7b3146103f457600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610ba6565b6040516103c991906124af565b60405180910390f35b3480156103de57600080fd5b506103f26103ed366004612452565b610c38565b005b34801561040057600080fd5b5061041461040f366004612427565b610c76565b60405190151581526020016103c9565b34801561043057600080fd5b5061041461043f366004612343565b600f6020526000908152604090205460ff1681565b34801561046057600080fd5b506103f261046f36600461246c565b610c8d565b34801561048057600080fd5b506017546104149062010000900460ff1681565b3480156104a057600080fd5b506007546104b4906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b3480156104d857600080fd5b506002545b6040519081526020016103c9565b3480156104f757600080fd5b5060175461041490640100000000900460ff1681565b34801561051957600080fd5b506104146105283660046123b3565b610cb2565b34801561053957600080fd5b5060055460405160ff90911681526020016103c9565b34801561055b57600080fd5b5060175461041490600160301b900460ff1681565b34801561057c57600080fd5b5061041461058b366004612427565b610d1b565b34801561059c57600080fd5b506103f26105ab3660046123f3565b610d51565b3480156105bc57600080fd5b506103f26105cb366004612343565b610d9c565b3480156105dc57600080fd5b506017546104b490600160381b90046001600160a01b031681565b34801561060357600080fd5b506103f2610612366004612452565b610dec565b34801561062357600080fd5b506104dd60165481565b34801561063957600080fd5b506103f2610648366004612343565b610e2d565b34801561065957600080fd5b506103f2610668366004612452565b610e71565b34801561067957600080fd5b506008546104b4906001600160a01b031681565b34801561069957600080fd5b506104dd60095481565b3480156106af57600080fd5b506103f26106be366004612343565b610eb1565b3480156106cf57600080fd5b506104146106de366004612343565b600c6020526000908152604090205460ff1681565b3480156106ff57600080fd5b506103f261070e36600461246c565b610ef3565b34801561071f57600080fd5b506018546104b4906001600160a01b031681565b34801561073f57600080fd5b506103f2610f48565b34801561075457600080fd5b506104dd610763366004612343565b6001600160a01b031660009081526020819052604090205490565b34801561078a57600080fd5b506103f261079936600461246c565b6110c7565b3480156107aa57600080fd5b506103f26107b9366004612452565b611108565b3480156107ca57600080fd5b506104dd600a5481565b3480156107e057600080fd5b506103f26107ef36600461246c565b61113b565b34801561080057600080fd5b5060055461010090046001600160a01b03166104b4565b34801561082357600080fd5b506103bc6111aa565b34801561083857600080fd5b50610414610847366004612343565b600e6020526000908152604090205460ff1681565b34801561086857600080fd5b506103f2610877366004612343565b6111b9565b34801561088857600080fd5b50610414610897366004612427565b6111fa565b3480156108a857600080fd5b506104146108b7366004612427565b611249565b3480156108c857600080fd5b506104dd600b5481565b3480156108de57600080fd5b506005546104b49061010090046001600160a01b031681565b34801561090357600080fd5b50601754610414906301000000900460ff1681565b34801561092457600080fd5b506103f26109333660046123f3565b611256565b34801561094457600080fd5b506103f2610953366004612452565b6112de565b34801561096457600080fd5b506103f2611320565b34801561097957600080fd5b50601c546104149060ff1681565b34801561099357600080fd5b506019546104b4906001600160a01b031681565b3480156109b357600080fd5b506103f26109c2366004612343565b611379565b3480156109d357600080fd5b506103f26109e2366004612343565b6113bb565b3480156109f357600080fd5b50610414610a02366004612343565b600d6020526000908152604090205460ff1681565b348015610a2357600080fd5b506104dd610a3236600461237b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a6957600080fd5b506103f2610a78366004612343565b6113fd565b348015610a8957600080fd5b506103f2610a98366004612343565b611459565b348015610aa957600080fd5b506017546104149065010000000000900460ff1681565b348015610acc57600080fd5b50610414610adb366004612343565b60106020526000908152604090205460ff1681565b348015610afc57600080fd5b506103f2610b0b366004612343565b61149a565b348015610b1c57600080fd5b506103f2610b2b366004612343565b611530565b348015610b3c57600080fd5b506104dd60155481565b348015610b5257600080fd5b50601a546104b4906001600160a01b031681565b348015610b7257600080fd5b506103f2610b81366004612452565b611574565b348015610b9257600080fd5b506103f2610ba1366004612484565b6115b0565b606060038054610bb590612668565b80601f0160208091040260200160405190810160405280929190818152602001828054610be190612668565b8015610c2e5780601f10610c0357610100808354040283529160200191610c2e565b820191906000526020600020905b815481529060010190602001808311610c1157829003601f168201915b5050505050905090565b601a546001600160a01b0316336001600160a01b031614610c5857600080fd5b6017805491151563010000000263ff00000019909216919091179055565b6000610c83338484611781565b5060015b92915050565b601a546001600160a01b0316336001600160a01b031614610cad57600080fd5b601655565b6000610cbf8484846118a6565b610d118433610d0c856040518060600160405280602881526020016126f8602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611ea6565b611781565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c83918590610d0c9086611722565b601a546001600160a01b0316336001600160a01b031614610d7157600080fd5b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b601a546001600160a01b0316336001600160a01b031614610dbc57600080fd5b601780546001600160a01b03909216600160381b02670100000000000000600160d81b0319909216919091179055565b601a546001600160a01b0316336001600160a01b031614610e0c57600080fd5b60178054911515600160301b0266ff00000000000019909216919091179055565b601a546001600160a01b0316336001600160a01b031614610e4d57600080fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b601a546001600160a01b0316336001600160a01b031614610e9157600080fd5b601780549115156401000000000264ff0000000019909216919091179055565b601a546001600160a01b0316336001600160a01b031614610ed157600080fd5b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b0316336001600160a01b031614610f1357600080fd5b604b811015610f2157600080fd5b610f4281610f3c61271060115461164190919063ffffffff16565b906116a3565b60155550565b601a546001600160a01b0316336001600160a01b031614610f6857600080fd5b60004790506000610fa9610f95600b54610f8f600a5460095461172290919063ffffffff16565b90611722565b600954610fa39085906116a3565b90611641565b90506000610fdb610fcd600b54610f8f600a5460095461172290919063ffffffff16565b600a54610fa39086906116a3565b90506000610ff382610fed8686611edd565b90611edd565b90508215611037576018546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015611035573d6000803e3d6000fd5b505b811561107f57601754604051600160381b9091046001600160a01b0316906108fc8415029084906000818181858888f1935050505015801561107d573d6000803e3d6000fd5b505b80156110c1576019546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156110bf573d6000803e3d6000fd5b505b50505050565b601a546001600160a01b0316336001600160a01b0316146110e757600080fd5b61110281610f3c61271060115461164190919063ffffffff16565b60125550565b601a546001600160a01b0316336001600160a01b03161461112857600080fd5b601c805460ff1916911515919091179055565b6017805460ff19166001179055601a546001600160a01b031661115b3390565b6001600160a01b03161461116e57600080fd5b306000908152602081905260408120549061119083610f3c84620186a0611641565b905061119b81611f39565b50506017805460ff1916905550565b606060048054610bb590612668565b601a546001600160a01b0316336001600160a01b0316146111d957600080fd5b6001600160a01b03166000908152600d60205260409020805460ff19169055565b6000610c833384610d0c85604051806060016040528060258152602001612720602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611ea6565b6000610c833384846118a6565b6017546301000000900460ff161561126d57600080fd5b6001600160a01b0382166000908152600f602052604090205460ff161561129357600080fd5b601a546001600160a01b0316336001600160a01b0316146112b357600080fd5b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b601a546001600160a01b0316336001600160a01b0316146112fe57600080fd5b60178054911515650100000000000265ff000000000019909216919091179055565b6017805460ff19166001179055601a546001600160a01b03166113403390565b6001600160a01b03161461135357600080fd5b3060009081526020819052604090205461136c81611f39565b506017805460ff19169055565b601a546001600160a01b0316336001600160a01b03161461139957600080fd5b601980546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b0316336001600160a01b0316146113db57600080fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b0316336001600160a01b03161461141d57600080fd5b6001600160a01b03166000908152600f602090815260408083208054600160ff199182168117909255600d909352922080549091169091179055565b601a546001600160a01b0316336001600160a01b03161461147957600080fd5b6001600160a01b03166000908152600c60205260409020805460ff19169055565b60055461010090046001600160a01b031633146114b657600080fd5b6001600160a01b0381166114c957600080fd5b6005546040516001600160a01b0380841692610100900416907f2e3feca4334579203cd183fe1ced9524940047e5586fe13e8cc5dd1babaf6e8290600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b601a546001600160a01b0316336001600160a01b03161461155057600080fd5b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b601a546001600160a01b0316336001600160a01b03161461159457600080fd5b60178054911515620100000262ff000019909216919091179055565b601a546001600160a01b0316336001600160a01b0316146115d057600080fd5b6009839055600a829055600b8190556103de816115ed84866125fa565b6115f791906125fa565b111561163c5760405162461bcd60e51b815260206004820152600f60248201526e10da1958dac8199959481b1a5b5a5d608a1b60448201526064015b60405180910390fd5b505050565b60008082116116925760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401611633565b61169c8284612612565b9392505050565b6000826116b257506000610c87565b60006116be8385612632565b9050826116cb8583612612565b1461169c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401611633565b60008061172f83856125fa565b90508381101561169c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401611633565b6001600160a01b0383166117e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611633565b6001600160a01b0382166118445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611633565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118cc5760405162461bcd60e51b815260040161163390612545565b6001600160a01b0382166118f25760405162461bcd60e51b815260040161163390612502565b600081116119545760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401611633565b6001600160a01b0383166000908152600e602052604090205460ff16156119b35760405162461bcd60e51b8152602060048201526013602482015272165bdd49dc99481a5b88189b1858dadb1a5cdd606a1b6044820152606401611633565b601754600160301b900460ff1615611d15576001600160a01b0382166000908152600d602052604090205460ff16158015611a0757506001600160a01b0382166000908152600c602052604090205460ff16155b8015611a2657506005546001600160a01b038481166101009092041614155b8015611a4557506005546001600160a01b038381166101009092041614155b8015611a5f57506008546001600160a01b03838116911614155b8015611a8457506001600160a01b03821660009081526010602052604090205460ff16155b15611b0557601254811115611ace5760405162461bcd60e51b815260206004820152601060248201526f4f76657220746865204d61782062757960801b6044820152606401611633565b601554611afa611af3846001600160a01b031660009081526020819052604090205490565b8390611722565b1115611b0557600080fd5b6005546001600160a01b038481166101009092041614801590611b3b57506005546001600160a01b038381166101009092041614155b8015611b4f57506001600160a01b03821615155b8015611b6657506001600160a01b03821661dead14155b8015611b75575060175460ff16155b15611d155760175465010000000000900460ff16611c11576001600160a01b0383166000908152600c602052604090205460ff1680611bcc57506001600160a01b0382166000908152600c602052604090205460ff165b611c115760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401611633565b601c5460ff1615611d15576005546001600160a01b038381166101009092041614801590611c4d57506007546001600160a01b03838116911614155b8015611c6757506008546001600160a01b03838116911614155b15611d1557326000908152601b60205260409020544311611d025760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401611633565b326000908152601b602052604090204390555b60165430600090815260208190526040902054108015908190611d3b575060175460ff16155b8015611d5557506008546001600160a01b03858116911614155b8015611d69575060175462010000900460ff165b15611d7657611d766120b6565b6001600160a01b0384166000908152600c602052604090205460019060ff1680611db857506001600160a01b0384166000908152600c602052604090205460ff165b80611e3457506008546001600160a01b03868116911614801590611dea57506008546001600160a01b03858116911614155b8015611e0f57506001600160a01b03851660009081526010602052604090205460ff16155b8015611e3457506001600160a01b03841660009081526010602052604090205460ff16155b15611e3d575060005b828115611e93576000611e63600b54610f8f600a5460095461172290919063ffffffff16565b90506000611e776103e8610fa388856116a3565b9050611e838682611edd565b9250611e90883083612225565b50505b611e9e868683612225565b505050505050565b60008184841115611eca5760405162461bcd60e51b815260040161163391906124af565b50611ed58385612651565b949350505050565b600082821115611f2f5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401611633565b61169c8284612651565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f7c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611fd057600080fd5b505afa158015611fe4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612008919061235f565b8160018151811061202957634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260075461204f9130911684611781565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac9479061208890859060009086903090429060040161258a565b600060405180830381600087803b1580156120a257600080fd5b505af1158015611e9e573d6000803e3d6000fd5b6017805460ff191660011790556120ea6120e5306001600160a01b031660009081526020819052604090205490565b611f39565b60004790506000612111610f95600b54610f8f600a5460095461172290919063ffffffff16565b90506000612135610fcd600b54610f8f600a5460095461172290919063ffffffff16565b9050600061214782610fed8686611edd565b9050821561218b576018546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015612189573d6000803e3d6000fd5b505b81156121d357601754604051600160381b9091046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156121d1573d6000803e3d6000fd5b505b8015612215576019546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612213573d6000803e3d6000fd5b505b50506017805460ff191690555050565b6001600160a01b03831661224b5760405162461bcd60e51b815260040161163390612545565b6001600160a01b0382166122715760405162461bcd60e51b815260040161163390612502565b6122ae816040518060600160405280602681526020016126d2602691396001600160a01b0386166000908152602081905260409020549190611ea6565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546122dd9082611722565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611899565b8035801515811461233e57600080fd5b919050565b600060208284031215612354578081fd5b813561169c816126b9565b600060208284031215612370578081fd5b815161169c816126b9565b6000806040838503121561238d578081fd5b8235612398816126b9565b915060208301356123a8816126b9565b809150509250929050565b6000806000606084860312156123c7578081fd5b83356123d2816126b9565b925060208401356123e2816126b9565b929592945050506040919091013590565b60008060408385031215612405578182fd5b8235612410816126b9565b915061241e6020840161232e565b90509250929050565b60008060408385031215612439578182fd5b8235612444816126b9565b946020939093013593505050565b600060208284031215612463578081fd5b61169c8261232e565b60006020828403121561247d578081fd5b5035919050565b600080600060608486031215612498578283fd5b505081359360208301359350604090920135919050565b6000602080835283518082850152825b818110156124db578581018301518582016040015282016124bf565b818111156124ec5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156125d95784516001600160a01b0316835293830193918301916001016125b4565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561260d5761260d6126a3565b500190565b60008261262d57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561264c5761264c6126a3565b500290565b600082821015612663576126636126a3565b500390565b600181811c9082168061267c57607f821691505b6020821081141561269d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146126ce57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201c8d8e796f725227c006d717c1c0766e7f1a9ff11e94c4cf71c1db1cb78a445264736f6c63430008040033000000000000000000000000cc5374698342b9eb498e3c9faa93bb2121d203250000000000000000000000002a0b0e46754366088f7bc268aae9fbe735279de700000000000000000000000094e3fb981f169967d7bd3c2837829a154d254c2d00000000000000000000000028df8a186956786ec06a5770e2b6c4f1abd2a432
Deployed Bytecode
0x60806040526004361061039b5760003560e01c8063876c4cc5116101dc578063c9b385f311610102578063ec44acf2116100a0578063f8b45b051161006f578063f8b45b0514610b30578063fd45bc9914610b46578063ff3914a314610b66578063ff768b2014610b8657600080fd5b8063ec44acf214610a9d578063ecca3b1614610ac0578063f2fde38b14610af0578063f4b8c14d14610b1057600080fd5b8063da78876f116100dc578063da78876f146109e7578063dd62ed3e14610a17578063e4a0f9f514610a5d578063ea2f0b3714610a7d57600080fd5b8063c9b385f314610987578063cf093a0e146109a7578063da532679146109c757600080fd5b8063a9059cbb1161017a578063b41c9eda11610149578063b41c9eda14610918578063c2e5ec0414610938578063c3c8cd8014610958578063c876d0b91461096d57600080fd5b8063a9059cbb1461089c578063b2bcf6b3146108bc578063b2bdfa7b146108d2578063b3d5eee1146108f757600080fd5b806395d89b41116101b657806395d89b41146108175780639caf9b001461082c578063a114f9241461085c578063a457c2d71461087c57600080fd5b8063876c4cc5146107be57806389e7b81b146107d45780638da5cb5b146107f457600080fd5b8063400291f8116102c15780634ce9f13c1161025f5780636fc3eaec1161022e5780636fc3eaec1461073357806370a0823114610748578063757765f81461077e57806377c325d61461079e57600080fd5b80634ce9f13c146106a35780634fbee193146106c35780635d0044ca146106f357806362b9bbb61461071357600080fd5b8063437823ec1161029b578063437823ec1461062d57806345d17ce31461064d57806349bd5a5e1461066d5780634b8fb3141461068d57600080fd5b8063400291f8146105d057806341aea9de146105f757806341fdc5811461061757600080fd5b806318160ddd116103395780633582ad23116103085780633582ad231461054f57806339509351146105705780633af87bcd146105905780633f8d45fc146105b057600080fd5b806318160ddd146104cc57806319f5c873146104eb57806323b872dd1461050d578063313ce5671461052d57600080fd5b806309fd82121161037557806309fd82121461042457806313096a1a14610454578063148d2161146104745780631694505e1461049457600080fd5b806306fdde03146103a7578063091646a9146103d2578063095ea7b3146103f457600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610ba6565b6040516103c991906124af565b60405180910390f35b3480156103de57600080fd5b506103f26103ed366004612452565b610c38565b005b34801561040057600080fd5b5061041461040f366004612427565b610c76565b60405190151581526020016103c9565b34801561043057600080fd5b5061041461043f366004612343565b600f6020526000908152604090205460ff1681565b34801561046057600080fd5b506103f261046f36600461246c565b610c8d565b34801561048057600080fd5b506017546104149062010000900460ff1681565b3480156104a057600080fd5b506007546104b4906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b3480156104d857600080fd5b506002545b6040519081526020016103c9565b3480156104f757600080fd5b5060175461041490640100000000900460ff1681565b34801561051957600080fd5b506104146105283660046123b3565b610cb2565b34801561053957600080fd5b5060055460405160ff90911681526020016103c9565b34801561055b57600080fd5b5060175461041490600160301b900460ff1681565b34801561057c57600080fd5b5061041461058b366004612427565b610d1b565b34801561059c57600080fd5b506103f26105ab3660046123f3565b610d51565b3480156105bc57600080fd5b506103f26105cb366004612343565b610d9c565b3480156105dc57600080fd5b506017546104b490600160381b90046001600160a01b031681565b34801561060357600080fd5b506103f2610612366004612452565b610dec565b34801561062357600080fd5b506104dd60165481565b34801561063957600080fd5b506103f2610648366004612343565b610e2d565b34801561065957600080fd5b506103f2610668366004612452565b610e71565b34801561067957600080fd5b506008546104b4906001600160a01b031681565b34801561069957600080fd5b506104dd60095481565b3480156106af57600080fd5b506103f26106be366004612343565b610eb1565b3480156106cf57600080fd5b506104146106de366004612343565b600c6020526000908152604090205460ff1681565b3480156106ff57600080fd5b506103f261070e36600461246c565b610ef3565b34801561071f57600080fd5b506018546104b4906001600160a01b031681565b34801561073f57600080fd5b506103f2610f48565b34801561075457600080fd5b506104dd610763366004612343565b6001600160a01b031660009081526020819052604090205490565b34801561078a57600080fd5b506103f261079936600461246c565b6110c7565b3480156107aa57600080fd5b506103f26107b9366004612452565b611108565b3480156107ca57600080fd5b506104dd600a5481565b3480156107e057600080fd5b506103f26107ef36600461246c565b61113b565b34801561080057600080fd5b5060055461010090046001600160a01b03166104b4565b34801561082357600080fd5b506103bc6111aa565b34801561083857600080fd5b50610414610847366004612343565b600e6020526000908152604090205460ff1681565b34801561086857600080fd5b506103f2610877366004612343565b6111b9565b34801561088857600080fd5b50610414610897366004612427565b6111fa565b3480156108a857600080fd5b506104146108b7366004612427565b611249565b3480156108c857600080fd5b506104dd600b5481565b3480156108de57600080fd5b506005546104b49061010090046001600160a01b031681565b34801561090357600080fd5b50601754610414906301000000900460ff1681565b34801561092457600080fd5b506103f26109333660046123f3565b611256565b34801561094457600080fd5b506103f2610953366004612452565b6112de565b34801561096457600080fd5b506103f2611320565b34801561097957600080fd5b50601c546104149060ff1681565b34801561099357600080fd5b506019546104b4906001600160a01b031681565b3480156109b357600080fd5b506103f26109c2366004612343565b611379565b3480156109d357600080fd5b506103f26109e2366004612343565b6113bb565b3480156109f357600080fd5b50610414610a02366004612343565b600d6020526000908152604090205460ff1681565b348015610a2357600080fd5b506104dd610a3236600461237b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a6957600080fd5b506103f2610a78366004612343565b6113fd565b348015610a8957600080fd5b506103f2610a98366004612343565b611459565b348015610aa957600080fd5b506017546104149065010000000000900460ff1681565b348015610acc57600080fd5b50610414610adb366004612343565b60106020526000908152604090205460ff1681565b348015610afc57600080fd5b506103f2610b0b366004612343565b61149a565b348015610b1c57600080fd5b506103f2610b2b366004612343565b611530565b348015610b3c57600080fd5b506104dd60155481565b348015610b5257600080fd5b50601a546104b4906001600160a01b031681565b348015610b7257600080fd5b506103f2610b81366004612452565b611574565b348015610b9257600080fd5b506103f2610ba1366004612484565b6115b0565b606060038054610bb590612668565b80601f0160208091040260200160405190810160405280929190818152602001828054610be190612668565b8015610c2e5780601f10610c0357610100808354040283529160200191610c2e565b820191906000526020600020905b815481529060010190602001808311610c1157829003601f168201915b5050505050905090565b601a546001600160a01b0316336001600160a01b031614610c5857600080fd5b6017805491151563010000000263ff00000019909216919091179055565b6000610c83338484611781565b5060015b92915050565b601a546001600160a01b0316336001600160a01b031614610cad57600080fd5b601655565b6000610cbf8484846118a6565b610d118433610d0c856040518060600160405280602881526020016126f8602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611ea6565b611781565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c83918590610d0c9086611722565b601a546001600160a01b0316336001600160a01b031614610d7157600080fd5b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b601a546001600160a01b0316336001600160a01b031614610dbc57600080fd5b601780546001600160a01b03909216600160381b02670100000000000000600160d81b0319909216919091179055565b601a546001600160a01b0316336001600160a01b031614610e0c57600080fd5b60178054911515600160301b0266ff00000000000019909216919091179055565b601a546001600160a01b0316336001600160a01b031614610e4d57600080fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b601a546001600160a01b0316336001600160a01b031614610e9157600080fd5b601780549115156401000000000264ff0000000019909216919091179055565b601a546001600160a01b0316336001600160a01b031614610ed157600080fd5b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b0316336001600160a01b031614610f1357600080fd5b604b811015610f2157600080fd5b610f4281610f3c61271060115461164190919063ffffffff16565b906116a3565b60155550565b601a546001600160a01b0316336001600160a01b031614610f6857600080fd5b60004790506000610fa9610f95600b54610f8f600a5460095461172290919063ffffffff16565b90611722565b600954610fa39085906116a3565b90611641565b90506000610fdb610fcd600b54610f8f600a5460095461172290919063ffffffff16565b600a54610fa39086906116a3565b90506000610ff382610fed8686611edd565b90611edd565b90508215611037576018546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015611035573d6000803e3d6000fd5b505b811561107f57601754604051600160381b9091046001600160a01b0316906108fc8415029084906000818181858888f1935050505015801561107d573d6000803e3d6000fd5b505b80156110c1576019546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156110bf573d6000803e3d6000fd5b505b50505050565b601a546001600160a01b0316336001600160a01b0316146110e757600080fd5b61110281610f3c61271060115461164190919063ffffffff16565b60125550565b601a546001600160a01b0316336001600160a01b03161461112857600080fd5b601c805460ff1916911515919091179055565b6017805460ff19166001179055601a546001600160a01b031661115b3390565b6001600160a01b03161461116e57600080fd5b306000908152602081905260408120549061119083610f3c84620186a0611641565b905061119b81611f39565b50506017805460ff1916905550565b606060048054610bb590612668565b601a546001600160a01b0316336001600160a01b0316146111d957600080fd5b6001600160a01b03166000908152600d60205260409020805460ff19169055565b6000610c833384610d0c85604051806060016040528060258152602001612720602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611ea6565b6000610c833384846118a6565b6017546301000000900460ff161561126d57600080fd5b6001600160a01b0382166000908152600f602052604090205460ff161561129357600080fd5b601a546001600160a01b0316336001600160a01b0316146112b357600080fd5b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b601a546001600160a01b0316336001600160a01b0316146112fe57600080fd5b60178054911515650100000000000265ff000000000019909216919091179055565b6017805460ff19166001179055601a546001600160a01b03166113403390565b6001600160a01b03161461135357600080fd5b3060009081526020819052604090205461136c81611f39565b506017805460ff19169055565b601a546001600160a01b0316336001600160a01b03161461139957600080fd5b601980546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b0316336001600160a01b0316146113db57600080fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b0316336001600160a01b03161461141d57600080fd5b6001600160a01b03166000908152600f602090815260408083208054600160ff199182168117909255600d909352922080549091169091179055565b601a546001600160a01b0316336001600160a01b03161461147957600080fd5b6001600160a01b03166000908152600c60205260409020805460ff19169055565b60055461010090046001600160a01b031633146114b657600080fd5b6001600160a01b0381166114c957600080fd5b6005546040516001600160a01b0380841692610100900416907f2e3feca4334579203cd183fe1ced9524940047e5586fe13e8cc5dd1babaf6e8290600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b601a546001600160a01b0316336001600160a01b03161461155057600080fd5b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b601a546001600160a01b0316336001600160a01b03161461159457600080fd5b60178054911515620100000262ff000019909216919091179055565b601a546001600160a01b0316336001600160a01b0316146115d057600080fd5b6009839055600a829055600b8190556103de816115ed84866125fa565b6115f791906125fa565b111561163c5760405162461bcd60e51b815260206004820152600f60248201526e10da1958dac8199959481b1a5b5a5d608a1b60448201526064015b60405180910390fd5b505050565b60008082116116925760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401611633565b61169c8284612612565b9392505050565b6000826116b257506000610c87565b60006116be8385612632565b9050826116cb8583612612565b1461169c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401611633565b60008061172f83856125fa565b90508381101561169c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401611633565b6001600160a01b0383166117e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611633565b6001600160a01b0382166118445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611633565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118cc5760405162461bcd60e51b815260040161163390612545565b6001600160a01b0382166118f25760405162461bcd60e51b815260040161163390612502565b600081116119545760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401611633565b6001600160a01b0383166000908152600e602052604090205460ff16156119b35760405162461bcd60e51b8152602060048201526013602482015272165bdd49dc99481a5b88189b1858dadb1a5cdd606a1b6044820152606401611633565b601754600160301b900460ff1615611d15576001600160a01b0382166000908152600d602052604090205460ff16158015611a0757506001600160a01b0382166000908152600c602052604090205460ff16155b8015611a2657506005546001600160a01b038481166101009092041614155b8015611a4557506005546001600160a01b038381166101009092041614155b8015611a5f57506008546001600160a01b03838116911614155b8015611a8457506001600160a01b03821660009081526010602052604090205460ff16155b15611b0557601254811115611ace5760405162461bcd60e51b815260206004820152601060248201526f4f76657220746865204d61782062757960801b6044820152606401611633565b601554611afa611af3846001600160a01b031660009081526020819052604090205490565b8390611722565b1115611b0557600080fd5b6005546001600160a01b038481166101009092041614801590611b3b57506005546001600160a01b038381166101009092041614155b8015611b4f57506001600160a01b03821615155b8015611b6657506001600160a01b03821661dead14155b8015611b75575060175460ff16155b15611d155760175465010000000000900460ff16611c11576001600160a01b0383166000908152600c602052604090205460ff1680611bcc57506001600160a01b0382166000908152600c602052604090205460ff165b611c115760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401611633565b601c5460ff1615611d15576005546001600160a01b038381166101009092041614801590611c4d57506007546001600160a01b03838116911614155b8015611c6757506008546001600160a01b03838116911614155b15611d1557326000908152601b60205260409020544311611d025760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401611633565b326000908152601b602052604090204390555b60165430600090815260208190526040902054108015908190611d3b575060175460ff16155b8015611d5557506008546001600160a01b03858116911614155b8015611d69575060175462010000900460ff165b15611d7657611d766120b6565b6001600160a01b0384166000908152600c602052604090205460019060ff1680611db857506001600160a01b0384166000908152600c602052604090205460ff165b80611e3457506008546001600160a01b03868116911614801590611dea57506008546001600160a01b03858116911614155b8015611e0f57506001600160a01b03851660009081526010602052604090205460ff16155b8015611e3457506001600160a01b03841660009081526010602052604090205460ff16155b15611e3d575060005b828115611e93576000611e63600b54610f8f600a5460095461172290919063ffffffff16565b90506000611e776103e8610fa388856116a3565b9050611e838682611edd565b9250611e90883083612225565b50505b611e9e868683612225565b505050505050565b60008184841115611eca5760405162461bcd60e51b815260040161163391906124af565b50611ed58385612651565b949350505050565b600082821115611f2f5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401611633565b61169c8284612651565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f7c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611fd057600080fd5b505afa158015611fe4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612008919061235f565b8160018151811061202957634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260075461204f9130911684611781565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac9479061208890859060009086903090429060040161258a565b600060405180830381600087803b1580156120a257600080fd5b505af1158015611e9e573d6000803e3d6000fd5b6017805460ff191660011790556120ea6120e5306001600160a01b031660009081526020819052604090205490565b611f39565b60004790506000612111610f95600b54610f8f600a5460095461172290919063ffffffff16565b90506000612135610fcd600b54610f8f600a5460095461172290919063ffffffff16565b9050600061214782610fed8686611edd565b9050821561218b576018546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015612189573d6000803e3d6000fd5b505b81156121d357601754604051600160381b9091046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156121d1573d6000803e3d6000fd5b505b8015612215576019546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612213573d6000803e3d6000fd5b505b50506017805460ff191690555050565b6001600160a01b03831661224b5760405162461bcd60e51b815260040161163390612545565b6001600160a01b0382166122715760405162461bcd60e51b815260040161163390612502565b6122ae816040518060600160405280602681526020016126d2602691396001600160a01b0386166000908152602081905260409020549190611ea6565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546122dd9082611722565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611899565b8035801515811461233e57600080fd5b919050565b600060208284031215612354578081fd5b813561169c816126b9565b600060208284031215612370578081fd5b815161169c816126b9565b6000806040838503121561238d578081fd5b8235612398816126b9565b915060208301356123a8816126b9565b809150509250929050565b6000806000606084860312156123c7578081fd5b83356123d2816126b9565b925060208401356123e2816126b9565b929592945050506040919091013590565b60008060408385031215612405578182fd5b8235612410816126b9565b915061241e6020840161232e565b90509250929050565b60008060408385031215612439578182fd5b8235612444816126b9565b946020939093013593505050565b600060208284031215612463578081fd5b61169c8261232e565b60006020828403121561247d578081fd5b5035919050565b600080600060608486031215612498578283fd5b505081359360208301359350604090920135919050565b6000602080835283518082850152825b818110156124db578581018301518582016040015282016124bf565b818111156124ec5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156125d95784516001600160a01b0316835293830193918301916001016125b4565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561260d5761260d6126a3565b500190565b60008261262d57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561264c5761264c6126a3565b500290565b600082821015612663576126636126a3565b500390565b600181811c9082168061267c57607f821691505b6020821081141561269d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146126ce57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201c8d8e796f725227c006d717c1c0766e7f1a9ff11e94c4cf71c1db1cb78a445264736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cc5374698342b9eb498e3c9faa93bb2121d203250000000000000000000000002a0b0e46754366088f7bc268aae9fbe735279de700000000000000000000000094e3fb981f169967d7bd3c2837829a154d254c2d00000000000000000000000028df8a186956786ec06a5770e2b6c4f1abd2a432
-----Decoded View---------------
Arg [0] : _walletSustainability (address): 0xcc5374698342b9Eb498E3c9FAA93BB2121d20325
Arg [1] : _walletDevelopment (address): 0x2A0B0e46754366088F7bc268aAE9FBE735279dE7
Arg [2] : _DAOcontrol (address): 0x94e3Fb981F169967D7Bd3c2837829a154D254C2D
Arg [3] : _walletLiquidity (address): 0x28df8A186956786Ec06a5770e2b6C4f1aBd2A432
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000cc5374698342b9eb498e3c9faa93bb2121d20325
Arg [1] : 0000000000000000000000002a0b0e46754366088f7bc268aae9fbe735279de7
Arg [2] : 00000000000000000000000094e3fb981f169967d7bd3c2837829a154d254c2d
Arg [3] : 00000000000000000000000028df8a186956786ec06a5770e2b6c4f1abd2a432
Deployed Bytecode Sourcemap
33260:12047:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13295:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39235:120;;;;;;;;;;-1:-1:-1;39235:120:0;;;;;:::i;:::-;;:::i;:::-;;15441:169;;;;;;;;;;-1:-1:-1;15441:169:0;;;;;:::i;:::-;;:::i;:::-;;;3335:14:1;;3328:22;3310:41;;3298:2;3283:18;15441:169:0;3265:92:1;33734:46:0;;;;;;;;;;-1:-1:-1;33734:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37716:145;;;;;;;;;;-1:-1:-1;37716:145:0;;;;;:::i;:::-;;:::i;34222:41::-;;;;;;;;;;-1:-1:-1;34222:41:0;;;;;;;;;;;33355;;;;;;;;;;-1:-1:-1;33355:41:0;;;;-1:-1:-1;;;;;33355:41:0;;;;;;-1:-1:-1;;;;;3126:32:1;;;3108:51;;3096:2;3081:18;33355:41:0;3063:102:1;14394:108:0;;;;;;;;;;-1:-1:-1;14482:12:0;;14394:108;;;9721:25:1;;;9709:2;9694:18;14394:108:0;9676:76:1;34300:25:0;;;;;;;;;;-1:-1:-1;34300:25:0;;;;;;;;;;;16092:321;;;;;;;;;;-1:-1:-1;16092:321:0;;;;;:::i;:::-;;:::i;14238:91::-;;;;;;;;;;-1:-1:-1;14312:9:0;;14238:91;;14312:9;;;;10887:36:1;;10875:2;10860:18;14238:91:0;10842:87:1;34366:32:0;;;;;;;;;;-1:-1:-1;34366:32:0;;;;-1:-1:-1;;;34366:32:0;;;;;;16822:218;;;;;;;;;;-1:-1:-1;16822:218:0;;;;;:::i;:::-;;:::i;39066:161::-;;;;;;;;;;-1:-1:-1;39066:161:0;;;;;:::i;:::-;;:::i;35801:185::-;;;;;;;;;;-1:-1:-1;35801:185:0;;;;;:::i;:::-;;:::i;34407:35::-;;;;;;;;;;-1:-1:-1;34407:35:0;;;;-1:-1:-1;;;34407:35:0;;-1:-1:-1;;;;;34407:35:0;;;37282:136;;;;;;;;;;-1:-1:-1;37282:136:0;;;;;:::i;:::-;;:::i;34108:59::-;;;;;;;;;;;;;;;;36499:147;;;;;;;;;;-1:-1:-1;36499:147:0;;;;;:::i;:::-;;:::i;39365:121::-;;;;;;;;;;-1:-1:-1;39365:121:0;;;;;:::i;:::-;;:::i;33403:28::-;;;;;;;;;;-1:-1:-1;33403:28:0;;;;-1:-1:-1;;;;;33403:28:0;;;33440:34;;;;;;;;;;;;;;;;36346:145;;;;;;;;;;-1:-1:-1;36346:145:0;;;;;:::i;:::-;;:::i;33566:51::-;;;;;;;;;;-1:-1:-1;33566:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38042:201;;;;;;;;;;-1:-1:-1;38042:201:0;;;;;:::i;:::-;;:::i;34449:32::-;;;;;;;;;;-1:-1:-1;34449:32:0;;;;-1:-1:-1;;;;;34449:32:0;;;40010:795;;;;;;;;;;;;;:::i;14565:127::-;;;;;;;;;;-1:-1:-1;14565:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;14666:18:0;14639:7;14666:18;;;;;;;;;;;;14565:127;37867:169;;;;;;;;;;-1:-1:-1;37867:169:0;;;;;:::i;:::-;;:::i;37566:144::-;;;;;;;;;;-1:-1:-1;37566:144:0;;;;;:::i;:::-;;:::i;33481:37::-;;;;;;;;;;;;;;;;39705:297;;;;;;;;;;-1:-1:-1;39705:297:0;;;;;:::i;:::-;;:::i;22461:87::-;;;;;;;;;;-1:-1:-1;22534:6:0;;;;;-1:-1:-1;;;;;22534:6:0;22461:87;;13505:95;;;;;;;;;;;;;:::i;33681:46::-;;;;;;;;;;-1:-1:-1;33681:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36808:145;;;;;;;;;;-1:-1:-1;36808:145:0;;;;;:::i;:::-;;:::i;17543:269::-;;;;;;;;;;-1:-1:-1;17543:269:0;;;;;:::i;:::-;;:::i;14905:175::-;;;;;;;;;;-1:-1:-1;14905:175:0;;;;;:::i;:::-;;:::i;33525:32::-;;;;;;;;;;;;;;;;22194:21;;;;;;;;;;-1:-1:-1;22194:21:0;;;;;;;-1:-1:-1;;;;;22194:21:0;;;34270:23;;;;;;;;;;-1:-1:-1;34270:23:0;;;;;;;;;;;38615:240;;;;;;;;;;-1:-1:-1;38615:240:0;;;;;:::i;:::-;;:::i;37426:132::-;;;;;;;;;;-1:-1:-1;37426:132:0;;;;;:::i;:::-;;:::i;39495:202::-;;;;;;;;;;;;;:::i;34682:39::-;;;;;;;;;;-1:-1:-1;34682:39:0;;;;;;;;34488:30;;;;;;;;;;-1:-1:-1;34488:30:0;;;;-1:-1:-1;;;;;34488:30:0;;;36175:165;;;;;;;;;;-1:-1:-1;36175:165:0;;;;;:::i;:::-;;:::i;35994:173::-;;;;;;;;;;-1:-1:-1;35994:173:0;;;;;:::i;:::-;;:::i;33624:50::-;;;;;;;;;;-1:-1:-1;33624:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15143:151;;;;;;;;;;-1:-1:-1;15143:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;15259:18:0;;;15232:7;15259:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15143:151;38863:195;;;;;;;;;;-1:-1:-1;38863:195:0;;;;;:::i;:::-;;:::i;36965:146::-;;;;;;;;;;-1:-1:-1;36965:146:0;;;;;:::i;:::-;;:::i;34332:27::-;;;;;;;;;;-1:-1:-1;34332:27:0;;;;;;;;;;;33787:46;;;;;;;;;;-1:-1:-1;33787:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22556:200;;;;;;;;;;-1:-1:-1;22556:200:0;;;;;:::i;:::-;;:::i;36654:146::-;;;;;;;;;;-1:-1:-1;36654:146:0;;;;;:::i;:::-;;:::i;34041:58::-;;;;;;;;;;;;;;;;34525:25;;;;;;;;;;-1:-1:-1;34525:25:0;;;;-1:-1:-1;;;;;34525:25:0;;;37119:155;;;;;;;;;;-1:-1:-1;37119:155:0;;;;;:::i;:::-;;:::i;38249:358::-;;;;;;;;;;-1:-1:-1;38249:358:0;;;;;:::i;:::-;;:::i;13295:91::-;13340:13;13373:5;13366:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13295:91;:::o;39235:120::-;39312:10;;-1:-1:-1;;;;;39312:10:0;882;-1:-1:-1;;;;;39296:26:0;;39288:35;;;;;;39334:3;:13;;;;;;;-1:-1:-1;;39334:13:0;;;;;;;;;39235:120::o;15441:169::-;15524:4;15541:39;882:10;15564:7;15573:6;15541:8;:39::i;:::-;-1:-1:-1;15598:4:0;15441:169;;;;;:::o;37716:145::-;37801:10;;-1:-1:-1;;;;;37801:10:0;882;-1:-1:-1;;;;;37785:26:0;;37777:35;;;;;;37823:21;:30;37716:145::o;16092:321::-;16198:4;16215:36;16225:6;16233:9;16244:6;16215:9;:36::i;:::-;16262:121;16271:6;882:10;16293:89;16331:6;16293:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16293:19:0;;;;;;:11;:19;;;;;;;;882:10;16293:33;;;;;;;;;;:37;:89::i;:::-;16262:8;:121::i;:::-;-1:-1:-1;16401:4:0;16092:321;;;;;:::o;16822:218::-;882:10;16910:4;16959:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16959:34:0;;;;;;;;;;16910:4;;16927:83;;16950:7;;16959:50;;16998:10;16959:38;:50::i;39066:161::-;39165:10;;-1:-1:-1;;;;;39165:10:0;882;-1:-1:-1;;;;;39149:26:0;;39141:35;;;;;;-1:-1:-1;;;;;39187:22:0;;;;;;;;:13;:22;;;;;:32;;-1:-1:-1;;39187:32:0;;;;;;;;;;39066:161::o;35801:185::-;35912:10;;-1:-1:-1;;;;;35912:10:0;882;-1:-1:-1;;;;;35896:26:0;;35888:35;;;;;;35934:20;:44;;-1:-1:-1;;;;;35934:44:0;;;-1:-1:-1;;;35934:44:0;-1:-1:-1;;;;;;35934:44:0;;;;;;;;;35801:185::o;37282:136::-;37364:10;;-1:-1:-1;;;;;37364:10:0;882;-1:-1:-1;;;;;37348:26:0;;37340:35;;;;;;37386:13;:24;;;;;-1:-1:-1;;;37386:24:0;-1:-1:-1;;37386:24:0;;;;;;;;;37282:136::o;36499:147::-;36582:10;;-1:-1:-1;;;;;36582:10:0;882;-1:-1:-1;;;;;36566:26:0;;36558:35;;;;;;-1:-1:-1;;;;;36604:27:0;;;;;:18;:27;;;;;:34;;-1:-1:-1;;36604:34:0;36634:4;36604:34;;;36499:147::o;39365:121::-;39440:10;;-1:-1:-1;;;;;39440:10:0;882;-1:-1:-1;;;;;39424:26:0;;39416:35;;;;;;39462:6;:16;;;;;;;-1:-1:-1;;39462:16:0;;;;;;;;;39365:121::o;36346:145::-;36437:10;;-1:-1:-1;;;;;36437:10:0;882;-1:-1:-1;;;;;36421:26:0;;36413:35;;;;;;36459:10;:24;;-1:-1:-1;;;;;;36459:24:0;-1:-1:-1;;;;;36459:24:0;;;;;;;;;;36346:145::o;38042:201::-;38126:10;;-1:-1:-1;;;;;38126:10:0;882;-1:-1:-1;;;;;38110:26:0;;38102:35;;;;;;38170:2;38156:10;:16;;38148:25;;;;;;38196:39;38224:10;38196:23;38213:5;38196:12;;:16;;:23;;;;:::i;:::-;:27;;:39::i;:::-;38184:9;:51;-1:-1:-1;38042:201:0:o;40010:795::-;40076:10;;-1:-1:-1;;;;;40076:10:0;882;-1:-1:-1;;;;;40060:26:0;;40052:35;;;;;;40098:14;40115:21;40098:38;;40149:22;40174:87;40205:55;40247:12;;40205:37;40224:17;;40205:14;;:18;;:37;;;;:::i;:::-;:41;;:55::i;:::-;40185:14;;40174:26;;:6;;:10;:26::i;:::-;:30;;:87::i;:::-;40149:112;;40272:25;40300:90;40334:55;40376:12;;40334:37;40353:17;;40334:14;;:18;;:37;;;;:::i;:55::-;40311:17;;40300:29;;:6;;:10;:29::i;:90::-;40272:118;-1:-1:-1;40401:20:0;40424:49;40272:118;40424:26;:6;40435:14;40424:10;:26::i;:::-;:30;;:49::i;:::-;40401:72;-1:-1:-1;40514:18:0;;40511:87;;40555:17;;40547:51;;-1:-1:-1;;;;;40555:17:0;;;;40547:51;;;;;40583:14;;40555:17;40547:51;40555:17;40547:51;40583:14;40555:17;40547:51;;;;;;;;;;;;;;;;;;;;;40511:87;40612:21;;40609:96;;40656:20;;40648:57;;-1:-1:-1;;;40656:20:0;;;-1:-1:-1;;;;;40656:20:0;;40648:57;;;;;;;;;;;;40656:20;40648:57;;;;;;;;;;;;;;;;;;;;;40609:96;40719:16;;40716:81;;40758:15;;40750:47;;-1:-1:-1;;;;;40758:15:0;;;;40750:47;;;;;40784:12;;40758:15;40750:47;40758:15;40750:47;40784:12;40758:15;40750:47;;;;;;;;;;;;;;;;;;;;;40716:81;40010:795;;;;:::o;37867:169::-;37953:10;;-1:-1:-1;;;;;37953:10:0;882;-1:-1:-1;;;;;37937:26:0;;37929:35;;;;;;37989:39;38017:10;37989:23;38006:5;37989:12;;:16;;:23;;;;:::i;:39::-;37975:11;:53;-1:-1:-1;37867:169:0:o;37566:144::-;37649:10;;-1:-1:-1;;;;;37649:10:0;882;-1:-1:-1;;;;;37633:26:0;;37625:35;;;;;;37671:20;:31;;-1:-1:-1;;37671:31:0;;;;;;;;;;37566:144::o;39705:297::-;34762:16;:23;;-1:-1:-1;;34762:23:0;34781:4;34762:23;;;39807:10:::1;::::0;-1:-1:-1;;;;;39807:10:0::1;39791:12;882:10:::0;;794:107;39791:12:::1;-1:-1:-1::0;;;;;39791:26:0::1;;39783:35;;;::::0;::::1;;39873:4;39829:23;14666:18:::0;;;;;;;;;;;;39912:42:::1;39943:10:::0;39912:26:::1;14666:18:::0;39932:5:::1;39912:19;:26::i;:42::-;39890:64;;39965:29;39982:11;39965:16;:29::i;:::-;-1:-1:-1::0;;34808:16:0;:24;;-1:-1:-1;;34808:24:0;;;-1:-1:-1;39705:297:0:o;13505:95::-;13552:13;13585:7;13578:14;;;;;:::i;36808:145::-;36889:10;;-1:-1:-1;;;;;36889:10:0;882;-1:-1:-1;;;;;36873:26:0;;36865:35;;;;;;-1:-1:-1;;;;;36911:26:0;36940:5;36911:26;;;:17;:26;;;;;:34;;-1:-1:-1;;36911:34:0;;;36808:145::o;17543:269::-;17636:4;17653:129;882:10;17676:7;17685:96;17724:15;17685:96;;;;;;;;;;;;;;;;;882:10;17685:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17685:34:0;;;;;;;;;;;;:38;:96::i;14905:175::-;14991:4;15008:42;882:10;15032:9;15043:6;15008:9;:42::i;38615:240::-;38707:3;;;;;;;38706:4;38698:13;;;;;;-1:-1:-1;;;;;38731:22:0;;;;;;:13;:22;;;;;;;;38730:23;38722:32;;;;;;38789:10;;-1:-1:-1;;;;;38789:10:0;882;-1:-1:-1;;;;;38773:26:0;;38765:35;;;;;;-1:-1:-1;;;;;38811:22:0;;;;;;;;:13;:22;;;;;:36;;-1:-1:-1;;38811:36:0;;;;;;;;;;38615:240::o;37426:132::-;37510:10;;-1:-1:-1;;;;;37510:10:0;882;-1:-1:-1;;;;;37494:26:0;;37486:35;;;;;;37532:7;:18;;;;;;;-1:-1:-1;;37532:18:0;;;;;;;;;37426:132::o;39495:202::-;34762:16;:23;;-1:-1:-1;;34762:23:0;34781:4;34762:23;;;39573:10:::1;::::0;-1:-1:-1;;;;;39573:10:0::1;39557:12;882:10:::0;;794:107;39557:12:::1;-1:-1:-1::0;;;;;39557:26:0::1;;39549:35;;;::::0;::::1;;39639:4;39595:23;14666:18:::0;;;;;;;;;;;39656:33:::1;14666:18:::0;39656:16:::1;:33::i;:::-;-1:-1:-1::0;34808:16:0;:24;;-1:-1:-1;;34808:24:0;;;39495:202::o;36175:165::-;36276:10;;-1:-1:-1;;;;;36276:10:0;882;-1:-1:-1;;;;;36260:26:0;;36252:35;;;;;;36298:15;:34;;-1:-1:-1;;;;;;36298:34:0;-1:-1:-1;;;;;36298:34:0;;;;;;;;;;36175:165::o;35994:173::-;36099:10;;-1:-1:-1;;;;;36099:10:0;882;-1:-1:-1;;;;;36083:26:0;;36075:35;;;;;;36121:17;:38;;-1:-1:-1;;;;;;36121:38:0;-1:-1:-1;;;;;36121:38:0;;;;;;;;;;35994:173::o;38863:195::-;38955:10;;-1:-1:-1;;;;;38955:10:0;882;-1:-1:-1;;;;;38939:26:0;;38931:35;;;;;;-1:-1:-1;;;;;38977:22:0;;;;;:13;:22;;;;;;;;:29;;39002:4;-1:-1:-1;;38977:29:0;;;;;;;;39017:17;:26;;;;;:33;;;;;;;;;;38863:195::o;36965:146::-;37046:10;;-1:-1:-1;;;;;37046:10:0;882;-1:-1:-1;;;;;37030:26:0;;37022:35;;;;;;-1:-1:-1;;;;;37068:27:0;37098:5;37068:27;;;:18;:27;;;;;:35;;-1:-1:-1;;37068:35:0;;;36965:146::o;22556:200::-;22426:6;;;;;-1:-1:-1;;;;;22426:6:0;22412:10;:20;22404:29;;;;;;-1:-1:-1;;;;;22638:23:0;::::1;22630:32;;;::::0;::::1;;22701:6;::::0;22678:41:::1;::::0;-1:-1:-1;;;;;22678:41:0;;::::1;::::0;22701:6:::1;::::0;::::1;;::::0;22678:41:::1;::::0;;;::::1;22730:6;:18:::0;;-1:-1:-1;;;;;22730:18:0;;::::1;;;-1:-1:-1::0;;;;;;22730:18:0;;::::1;::::0;;;::::1;::::0;;22556:200::o;36654:146::-;36737:10;;-1:-1:-1;;;;;36737:10:0;882;-1:-1:-1;;;;;36721:26:0;;36713:35;;;;;;-1:-1:-1;;;;;36759:26:0;;;;;:17;:26;;;;;:33;;-1:-1:-1;;36759:33:0;36788:4;36759:33;;;36654:146::o;37119:155::-;37211:10;;-1:-1:-1;;;;;37211:10:0;882;-1:-1:-1;;;;;37195:26:0;;37187:35;;;;;;37233:22;:33;;;;;;;-1:-1:-1;;37233:33:0;;;;;;;;;37119:155::o;38249:358::-;38380:10;;-1:-1:-1;;;;;38380:10:0;882;-1:-1:-1;;;;;38364:26:0;;38356:35;;;;;;38402:14;:23;;;38436:17;:38;;;38485:12;:27;;;38576:3;38500:12;38531:26;38457:17;38419:6;38531:26;:::i;:::-;:41;;;;:::i;:::-;:48;;38523:76;;;;-1:-1:-1;;;38523:76:0;;9433:2:1;38523:76:0;;;9415:21:1;9472:2;9452:18;;;9445:30;-1:-1:-1;;;9491:18:1;;;9484:45;9546:18;;38523:76:0;;;;;;;;;38249:358;;;:::o;5430:153::-;5488:7;5520:1;5516;:5;5508:44;;;;-1:-1:-1;;;5508:44:0;;6628:2:1;5508:44:0;;;6610:21:1;6667:2;6647:18;;;6640:30;6706:28;6686:18;;;6679:56;6752:18;;5508:44:0;6600:176:1;5508:44:0;5570:5;5574:1;5570;:5;:::i;:::-;5563:12;5430:153;-1:-1:-1;;;5430:153:0:o;4732:220::-;4790:7;4814:6;4810:20;;-1:-1:-1;4829:1:0;4822:8;;4810:20;4841:9;4853:5;4857:1;4853;:5;:::i;:::-;4841:17;-1:-1:-1;4886:1:0;4877:5;4881:1;4841:17;4877:5;:::i;:::-;:10;4869:56;;;;-1:-1:-1;;;4869:56:0;;7465:2:1;4869:56:0;;;7447:21:1;7504:2;7484:18;;;7477:30;7543:34;7523:18;;;7516:62;-1:-1:-1;;;7594:18:1;;;7587:31;7635:19;;4869:56:0;7437:223:1;3853:179:0;3911:7;;3943:5;3947:1;3943;:5;:::i;:::-;3931:17;;3972:1;3967;:6;;3959:46;;;;-1:-1:-1;;;3959:46:0;;5565:2:1;3959:46:0;;;5547:21:1;5604:2;5584:18;;;5577:30;5643:29;5623:18;;;5616:57;5690:18;;3959:46:0;5537:177:1;20690:346:0;-1:-1:-1;;;;;20792:19:0;;20784:68;;;;-1:-1:-1;;;20784:68:0;;8683:2:1;20784:68:0;;;8665:21:1;8722:2;8702:18;;;8695:30;8761:34;8741:18;;;8734:62;-1:-1:-1;;;8812:18:1;;;8805:34;8856:19;;20784:68:0;8655:226:1;20784:68:0;-1:-1:-1;;;;;20871:21:0;;20863:68;;;;-1:-1:-1;;;20863:68:0;;5162:2:1;20863:68:0;;;5144:21:1;5201:2;5181:18;;;5174:30;5240:34;5220:18;;;5213:62;-1:-1:-1;;;5291:18:1;;;5284:32;5333:19;;20863:68:0;5134:224:1;20863:68:0;-1:-1:-1;;;;;20944:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20996:32;;9721:25:1;;;20996:32:0;;9694:18:1;20996:32:0;;;;;;;;20690:346;;;:::o;40817:2541::-;-1:-1:-1;;;;;40949:18:0;;40941:68;;;;-1:-1:-1;;;40941:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41028:16:0;;41020:64;;;;-1:-1:-1;;;41020:64:0;;;;;;;:::i;:::-;41112:1;41103:6;:10;41095:64;;;;-1:-1:-1;;;41095:64:0;;7867:2:1;41095:64:0;;;7849:21:1;7906:2;7886:18;;;7879:30;7945:34;7925:18;;;7918:62;-1:-1:-1;;;7996:18:1;;;7989:39;8045:19;;41095:64:0;7839:231:1;41095:64:0;-1:-1:-1;;;;;41178:19:0;;;;;;:13;:19;;;;;;;;:28;41170:60;;;;-1:-1:-1;;;41170:60:0;;5921:2:1;41170:60:0;;;5903:21:1;5960:2;5940:18;;;5933:30;-1:-1:-1;;;5979:18:1;;;5972:49;6038:18;;41170:60:0;5893:169:1;41170:60:0;41254:13;;-1:-1:-1;;;41254:13:0;;;;41251:1149;;;-1:-1:-1;;;;;41283:21:0;;;;;;:17;:21;;;;;;;;41282:22;:49;;;;-1:-1:-1;;;;;;41309:22:0;;;;;;:18;:22;;;;;;;;41308:23;41282:49;:68;;;;-1:-1:-1;22534:6:0;;-1:-1:-1;;;;;41335:15:0;;;22534:6;;;;;41335:15;;41282:68;:85;;;;-1:-1:-1;22534:6:0;;-1:-1:-1;;;;;41354:13:0;;;22534:6;;;;;41354:13;;41282:85;:108;;;;-1:-1:-1;41377:13:0;;-1:-1:-1;;;;;41371:19:0;;;41377:13;;41371:19;;41282:108;:130;;;;-1:-1:-1;;;;;;41395:17:0;;;;;;:13;:17;;;;;;;;41394:18;41282:130;41279:264;;;41442:11;;41432:6;:21;;41424:49;;;;-1:-1:-1;;;41424:49:0;;9088:2:1;41424:49:0;;;9070:21:1;9127:2;9107:18;;;9100:30;-1:-1:-1;;;9146:18:1;;;9139:46;9202:18;;41424:49:0;9060:166:1;41424:49:0;41521:9;;41492:25;41503:13;41513:2;-1:-1:-1;;;;;14666:18:0;14639:7;14666:18;;;;;;;;;;;;14565:127;41503:13;41492:6;;:10;:25::i;:::-;:38;;41484:47;;;;;;22534:6;;-1:-1:-1;;;;;41575:15:0;;;22534:6;;;;;41575:15;;;;:49;;-1:-1:-1;22534:6:0;;-1:-1:-1;;;;;41611:13:0;;;22534:6;;;;;41611:13;;41575:49;:86;;;;-1:-1:-1;;;;;;41645:16:0;;;;41575:86;:128;;;;-1:-1:-1;;;;;;41682:21:0;;41696:6;41682:21;;41575:128;:166;;;;-1:-1:-1;41725:16:0;;;;41724:17;41575:166;41553:836;;;41781:7;;;;;;;41777:140;;-1:-1:-1;;;;;41820:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;41848:22:0;;;;;;:18;:22;;;;;;;;41820:50;41812:85;;;;-1:-1:-1;;;41812:85:0;;4811:2:1;41812:85:0;;;4793:21:1;4850:2;4830:18;;;4823:30;-1:-1:-1;;;4869:18:1;;;4862:52;4931:18;;41812:85:0;4783:172:1;41812:85:0;41955:20;;;;41951:423;;;22534:6;;-1:-1:-1;;;;;42003:13:0;;;22534:6;;;;;42003:13;;;;:47;;-1:-1:-1;42034:15:0;;-1:-1:-1;;;;;42020:30:0;;;42034:15;;42020:30;;42003:47;:79;;;;-1:-1:-1;42068:13:0;;-1:-1:-1;;;;;42054:28:0;;;42068:13;;42054:28;;42003:79;41999:356;;;42147:9;42118:39;;;;:28;:39;;;;;;42160:12;-1:-1:-1;42110:140:0;;;;-1:-1:-1;;;42110:140:0;;6983:2:1;42110:140:0;;;6965:21:1;7022:2;7002:18;;;6995:30;7061:34;7041:18;;;7034:62;7132:34;7112:18;;;7105:62;-1:-1:-1;;;7183:19:1;;;7176:40;7233:19;;42110:140:0;6955:303:1;42110:140:0;42306:9;42277:39;;;;:28;:39;;;;;42319:12;42277:54;;41999:356;42465:21;;42455:4;42410:24;14666:18;;;;;;;;;;;-1:-1:-1;42437:49:0;;;;;42515:53;;-1:-1:-1;42552:16:0;;;;42551:17;42515:53;:91;;;;-1:-1:-1;42593:13:0;;-1:-1:-1;;;;;42585:21:0;;;42593:13;;42585:21;;42515:91;:130;;;;-1:-1:-1;42623:22:0;;;;;;;42515:130;42497:204;;;42672:17;:15;:17::i;:::-;-1:-1:-1;;;;;42750:24:0;;42717:12;42750:24;;;:18;:24;;;;;;42732:4;;42750:24;;;:50;;-1:-1:-1;;;;;;42778:22:0;;;;;;:18;:22;;;;;;;;42750:50;:146;;;-1:-1:-1;42813:13:0;;-1:-1:-1;;;;;42805:21:0;;;42813:13;;42805:21;;;;:44;;-1:-1:-1;42836:13:0;;-1:-1:-1;;;;;42830:19:0;;;42836:13;;42830:19;;42805:44;:68;;;;-1:-1:-1;;;;;;42854:19:0;;;;;;:13;:19;;;;;;;;42853:20;42805:68;:90;;;;-1:-1:-1;;;;;;42878:17:0;;;;;;:13;:17;;;;;;;;42877:18;42805:90;42747:193;;;-1:-1:-1;42923:5:0;42747:193;42982:6;42999:293;;;;43026:24;43053:55;43095:12;;43053:37;43072:17;;43053:14;;:18;;:37;;;;:::i;:55::-;43026:82;-1:-1:-1;43120:12:0;43135:38;43168:4;43135:28;:6;43026:82;43135:10;:28::i;:38::-;43120:53;-1:-1:-1;43207:16:0;:6;43120:53;43207:10;:16::i;:::-;43185:38;;43238:42;43254:4;43268;43275;43238:15;:42::i;:::-;42999:293;;;43304:46;43320:4;43326:2;43330:19;43304:15;:46::i;:::-;40817:2541;;;;;;:::o;6680:166::-;6766:7;6802:12;6794:6;;;;6786:29;;;;-1:-1:-1;;;6786:29:0;;;;;;;;:::i;:::-;-1:-1:-1;6833:5:0;6837:1;6833;:5;:::i;:::-;6826:12;6680:166;-1:-1:-1;;;;6680:166:0:o;4315:158::-;4373:7;4406:1;4401;:6;;4393:49;;;;-1:-1:-1;;;4393:49:0;;6269:2:1;4393:49:0;;;6251:21:1;6308:2;6288:18;;;6281:30;6347:32;6327:18;;;6320:60;6397:18;;4393:49:0;6241:180:1;4393:49:0;4460:5;4464:1;4460;:5;:::i;44194:589::-;44344:16;;;44358:1;44344:16;;;;;;;;44320:21;;44344:16;;;;;;;;;;-1:-1:-1;44344:16:0;44320:40;;44389:4;44371;44376:1;44371:7;;;;;;-1:-1:-1;;;44371:7:0;;;;;;;;;-1:-1:-1;;;;;44371:23:0;;;:7;;;;;;;;;;:23;;;;44415:15;;:22;;;-1:-1:-1;;;44415:22:0;;;;:15;;;;;:20;;:22;;;;;44371:7;;44415:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44405:4;44410:1;44405:7;;;;;;-1:-1:-1;;;44405:7:0;;;;;;;;;-1:-1:-1;;;;;44405:32:0;;;:7;;;;;;;;;:32;44482:15;;44450:62;;44467:4;;44482:15;44500:11;44450:8;:62::i;:::-;44551:15;;:224;;-1:-1:-1;;;44551:224:0;;-1:-1:-1;;;;;44551:15:0;;;;:66;;:224;;44632:11;;44551:15;;44702:4;;44729;;44749:15;;44551:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43366:820;34762:16;:23;;-1:-1:-1;;34762:23:0;34781:4;34762:23;;;43426:42:::1;43443:24;43461:4;-1:-1:-1::0;;;;;14666:18:0;14639:7;14666:18;;;;;;;;;;;;14565:127;43443:24:::1;43426:16;:42::i;:::-;43479:14;43496:21;43479:38;;43530:22;43555:87;43586:55;43628:12;;43586:37;43605:17;;43586:14;;:18;;:37;;;;:::i;43555:87::-;43530:112;;43653:25;43681:90;43715:55;43757:12;;43715:37;43734:17;;43715:14;;:18;;:37;;;;:::i;43681:90::-;43653:118:::0;-1:-1:-1;43782:20:0::1;43805:49;43653:118:::0;43805:26:::1;:6:::0;43816:14;43805:10:::1;:26::i;:49::-;43782:72:::0;-1:-1:-1;43895:18:0;;43892:87:::1;;43936:17;::::0;43928:51:::1;::::0;-1:-1:-1;;;;;43936:17:0;;::::1;::::0;43928:51;::::1;;;::::0;43964:14;;43936:17:::1;43928:51:::0;43936:17;43928:51;43964:14;43936:17;43928:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;43892:87;43993:21:::0;;43990:96:::1;;44037:20;::::0;44029:57:::1;::::0;-1:-1:-1;;;44037:20:0;;::::1;-1:-1:-1::0;;;;;44037:20:0::1;::::0;44029:57:::1;::::0;::::1;;::::0;;;::::1;::::0;;;;44037:20;44029:57;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;43990:96;44100:16:::0;;44097:81:::1;;44139:15;::::0;44131:47:::1;::::0;-1:-1:-1;;;;;44139:15:0;;::::1;::::0;44131:47;::::1;;;::::0;44165:12;;44139:15:::1;44131:47:::0;44139:15;44131:47;44165:12;44139:15;44131:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;44097:81;-1:-1:-1::0;;34808:16:0;:24;;-1:-1:-1;;34808:24:0;;;-1:-1:-1;;43366:820:0:o;18302:539::-;-1:-1:-1;;;;;18408:20:0;;18400:70;;;;-1:-1:-1;;;18400:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18489:23:0;;18481:71;;;;-1:-1:-1;;;18481:71:0;;;;;;;:::i;:::-;18645;18667:6;18645:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18645:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;18625:17:0;;;:9;:17;;;;;;;;;;;:91;;;;18750:20;;;;;;;:32;;18775:6;18750:24;:32::i;:::-;-1:-1:-1;;;;;18727:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;18798:35;9721:25:1;;;18727:20:0;;18798:35;;;;;;9694:18:1;18798:35:0;9676:76:1;14:160;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:257::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;775:6;783;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;1187:6;1195;1203;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;1646:6;1654;1707:2;1695:9;1686:7;1682:23;1678:32;1675:2;;;1728:6;1720;1713:22;1675:2;1772:9;1759:23;1791:31;1816:5;1791:31;:::i;:::-;1841:5;-1:-1:-1;1865:35:1;1896:2;1881:18;;1865:35;:::i;:::-;1855:45;;1665:241;;;;;:::o;1911:325::-;1979:6;1987;2040:2;2028:9;2019:7;2015:23;2011:32;2008:2;;;2061:6;2053;2046:22;2008:2;2105:9;2092:23;2124:31;2149:5;2124:31;:::i;:::-;2174:5;2226:2;2211:18;;;;2198:32;;-1:-1:-1;;;1998:238:1:o;2241:190::-;2297:6;2350:2;2338:9;2329:7;2325:23;2321:32;2318:2;;;2371:6;2363;2356:22;2318:2;2399:26;2415:9;2399:26;:::i;2436:190::-;2495:6;2548:2;2536:9;2527:7;2523:23;2519:32;2516:2;;;2569:6;2561;2554:22;2516:2;-1:-1:-1;2597:23:1;;2506:120;-1:-1:-1;2506:120:1:o;2631:326::-;2708:6;2716;2724;2777:2;2765:9;2756:7;2752:23;2748:32;2745:2;;;2798:6;2790;2783:22;2745:2;-1:-1:-1;;2826:23:1;;;2896:2;2881:18;;2868:32;;-1:-1:-1;2947:2:1;2932:18;;;2919:32;;2735:222;-1:-1:-1;2735:222:1:o;3597:603::-;3709:4;3738:2;3767;3756:9;3749:21;3799:6;3793:13;3842:6;3837:2;3826:9;3822:18;3815:34;3867:4;3880:140;3894:6;3891:1;3888:13;3880:140;;;3989:14;;;3985:23;;3979:30;3955:17;;;3974:2;3951:26;3944:66;3909:10;;3880:140;;;4038:6;4035:1;4032:13;4029:2;;;4108:4;4103:2;4094:6;4083:9;4079:22;4075:31;4068:45;4029:2;-1:-1:-1;4184:2:1;4163:15;-1:-1:-1;;4159:29:1;4144:45;;;;4191:2;4140:54;;3718:482;-1:-1:-1;;;3718:482:1:o;4205:399::-;4407:2;4389:21;;;4446:2;4426:18;;;4419:30;4485:34;4480:2;4465:18;;4458:62;-1:-1:-1;;;4551:2:1;4536:18;;4529:33;4594:3;4579:19;;4379:225::o;8075:401::-;8277:2;8259:21;;;8316:2;8296:18;;;8289:30;8355:34;8350:2;8335:18;;8328:62;-1:-1:-1;;;8421:2:1;8406:18;;8399:35;8466:3;8451:19;;8249:227::o;9757:983::-;10019:4;10067:3;10056:9;10052:19;10098:6;10087:9;10080:25;10124:2;10162:6;10157:2;10146:9;10142:18;10135:34;10205:3;10200:2;10189:9;10185:18;10178:31;10229:6;10264;10258:13;10295:6;10287;10280:22;10333:3;10322:9;10318:19;10311:26;;10372:2;10364:6;10360:15;10346:29;;10393:4;10406:195;10420:6;10417:1;10414:13;10406:195;;;10485:13;;-1:-1:-1;;;;;10481:39:1;10469:52;;10576:15;;;;10541:12;;;;10517:1;10435:9;10406:195;;;-1:-1:-1;;;;;;;10657:32:1;;;;10652:2;10637:18;;10630:60;-1:-1:-1;;;10721:3:1;10706:19;10699:35;10618:3;10028:712;-1:-1:-1;;;10028:712:1:o;10934:128::-;10974:3;11005:1;11001:6;10998:1;10995:13;10992:2;;;11011:18;;:::i;:::-;-1:-1:-1;11047:9:1;;10982:80::o;11067:217::-;11107:1;11133;11123:2;;-1:-1:-1;;;11158:31:1;;11212:4;11209:1;11202:15;11240:4;11165:1;11230:15;11123:2;-1:-1:-1;11269:9:1;;11113:171::o;11289:168::-;11329:7;11395:1;11391;11387:6;11383:14;11380:1;11377:21;11372:1;11365:9;11358:17;11354:45;11351:2;;;11402:18;;:::i;:::-;-1:-1:-1;11442:9:1;;11341:116::o;11462:125::-;11502:4;11530:1;11527;11524:8;11521:2;;;11535:18;;:::i;:::-;-1:-1:-1;11572:9:1;;11511:76::o;11592:380::-;11671:1;11667:12;;;;11714;;;11735:2;;11789:4;11781:6;11777:17;11767:27;;11735:2;11842;11834:6;11831:14;11811:18;11808:38;11805:2;;;11888:10;11883:3;11879:20;11876:1;11869:31;11923:4;11920:1;11913:15;11951:4;11948:1;11941:15;11805:2;;11647:325;;;:::o;11977:127::-;12038:10;12033:3;12029:20;12026:1;12019:31;12069:4;12066:1;12059:15;12093:4;12090:1;12083:15;12109:131;-1:-1:-1;;;;;12184:31:1;;12174:42;;12164:2;;12230:1;12227;12220:12;12164:2;12154:86;:::o
Swarm Source
ipfs://1c8d8e796f725227c006d717c1c0766e7f1a9ff11e94c4cf71c1db1cb78a4452
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.