Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 18080516 | 428 days ago | IN | 0 ETH | 0.00060956 | ||||
Approve | 18065007 | 430 days ago | IN | 0 ETH | 0.00054705 | ||||
Transfer | 18040134 | 434 days ago | IN | 0 ETH | 0.0006592 | ||||
Transfer | 18039797 | 434 days ago | IN | 0 ETH | 0.0011267 | ||||
Approve | 18038881 | 434 days ago | IN | 0 ETH | 0.00066451 | ||||
0x60c06040 | 18038871 | 434 days ago | IN | 0 ETH | 0.06259416 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
LAYER4
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-01 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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 Mint(address indexed sender, uint amount0, uint amount1); 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 mint(address to) external returns (uint liquidity); 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; } 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; } 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); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { 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; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override 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 this function is * overridden; * * 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 override returns (uint8) { return 18; } /** * @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: * * - `account` 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 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 {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract LAYER4 is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address private marketingWallet; uint8 private _decimals; bool public tradingActive = false; bool public swapEnabled = false; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public transferTotalFees; uint256 public transferMarketingFee; uint256 public transferLiquidityFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event RewardTriggered(uint256 amount); event OwnerForcedSwapBack(uint256 timestamp); constructor() ERC20("Layer4 Network", "LAYER4") { address _owner = msg.sender; _decimals = 18; uint256 totalSupply = 100000000 * (10**_decimals); buyMarketingFee = 0; buyLiquidityFee = 0; buyTotalFees = buyMarketingFee + buyLiquidityFee; sellMarketingFee = 5; sellLiquidityFee = 0; sellTotalFees = sellMarketingFee + sellLiquidityFee; transferMarketingFee = 0; transferLiquidityFee = 0; transferTotalFees = transferMarketingFee + transferLiquidityFee; marketingWallet = address(0x88200d33aFd9D71Fa0c9b7C7BE34B57Ac7b9012D); // set as marketing wallet address currentRouter; //Adding Variables for all the routers for easier deployment for our customers. if (block.chainid == 56) { currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // PCS Router } else if (block.chainid == 97) { currentRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // PCS Testnet } else if (block.chainid == 43114) { currentRouter = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; //Avax Mainnet } else if (block.chainid == 137) { currentRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; //Polygon Ropsten } else if (block.chainid == 250) { currentRouter = 0xF491e7B69E4244ad4002BC14e878a34207E38c29; //SpookySwap FTM } else if (block.chainid == 3) { currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Ropsten } else if (block.chainid == 1 || block.chainid == 4) { currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Mainnet } else { currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Mainnet // revert(); } //End of Router Variables. IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); // exclude from paying fees or having max transaction amount excludeFromFees(_owner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(_owner, totalSupply); transferOwnership(_owner); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } function airdropToWallets(address[] memory airdropWallets, uint256[] memory amounts) external onlyOwner returns (bool){ require(!tradingActive, "Trading is already active, cannot airdrop after launch."); require(airdropWallets.length == amounts.length, "arrays must be the same length"); require(airdropWallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input. for(uint256 i = 0; i < airdropWallets.length; i++){ address wallet = airdropWallets[i]; uint256 amount = amounts[i]; _transfer(msg.sender, wallet, amount); } return true; } function decimals() public view override returns (uint8) { return _decimals; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyMarketingFee + buyLiquidityFee; require(buyTotalFees <= 10, "Must keep fees at 10% or less"); } function updateSFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellTotalFees = sellMarketingFee + sellLiquidityFee; require(sellTotalFees <= 10, "Must keep fees at 10% or less"); } function updateTFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { transferMarketingFee = _marketingFee; transferLiquidityFee = _liquidityFee; transferTotalFees = transferMarketingFee + transferLiquidityFee ; require(transferTotalFees <= 10, "Must keep fees at 10% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function isExcludedFromFees(address account) external view returns(bool) { return _isExcludedFromFees[account]; } 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"); if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } if(amount == 0) { super._transfer(from, to, 0); return; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance > 0; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ if (automatedMarketMakerPairs[to]){ if (sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } } // on buy else if(automatedMarketMakerPairs[from]) { if (buyTotalFees > 0){ fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } } else { if (transferTotalFees > 0){ fees = amount.mul(transferTotalFees).div(100); tokensForLiquidity += fees * transferLiquidityFee / transferTotalFees; tokensForMarketing += fees * transferMarketingFee / transferTotalFees; } } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } 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 try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ) {} catch {} } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity try uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ) {} catch {} } function resetTaxAmount() public onlyOwner { tokensForLiquidity = 0; tokensForMarketing = 0; } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; if (amountToSwapForETH == 0) {return;} swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing; tokensForLiquidity = 0; tokensForMarketing = 0; if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropToWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","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":[{"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":[],"name":"transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateTFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526006805461ffff60a81b191690553480156200001f57600080fd5b50604080518082018252600e81526d4c6179657234204e6574776f726b60901b60208083019182528351808501909452600684526513105651548d60d21b908401528151919291620000749160039162000824565b5080516200008a90600490602084019062000824565b50505060006200009f620004b960201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062002ef7833981519152908290a3506006805460ff60a01b1916600960a11b179081905533906000906200010e9060ff600160a01b90910416600a620009dd565b6200011e906305f5e100620009f5565b60006008819055600981905590915062000139908062000a17565b6007556005600b8190556000600c819055620001559162000a17565b600a556000600e819055600f81905562000170908062000a17565b600d55600680546001600160a01b0319167388200d33afd9d71fa0c9b7c7be34b57ac7b9012d17905560006038461415620001c157507310ed43c718714eb63d5aa57b78b54704e256024e620002c9565b4660611415620001e7575073d99d1c33f9fc3444f8101754abc46c52416550d1620002c9565b4661a86a14156200020e57507360ae616a2155ee3d9a68541ba4544862310933d4620002c9565b466089141562000234575073a5e0829caced8ffdd4de3c43696c57f7d7a678ff620002c9565b4660fa14156200025a575073f491e7b69e4244ad4002bc14e878a34207e38c29620002c9565b4660031415620002805750737a250d5630b4cf539739df2c5dacb4c659f2488d620002c9565b4660011480620002905750466004145b15620002b25750737a250d5630b4cf539739df2c5dacb4c659f2488d620002c9565b50737a250d5630b4cf539739df2c5dacb4c659f2488d5b6001600160a01b03811660808190526040805163c45a015560e01b8152905183929163c45a0155916004808301926020929190829003018186803b1580156200031157600080fd5b505afa15801562000326573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034c919062000a32565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039557600080fd5b505afa158015620003aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d0919062000a32565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200041957600080fd5b505af11580156200042e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000454919062000a32565b6001600160a01b031660a08190526200046f906001620004bd565b6200047c84600162000511565b6200048930600162000511565b6200049861dead600162000511565b620004a48484620005bf565b620004af84620006bb565b5050505062000a9a565b3390565b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005605760405162461bcd60e51b8152602060048201819052602482015260008051602062002ed783398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006175760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000557565b6200063381600254620007b860201b620010911790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200066691839062001091620007b8821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620007065760405162461bcd60e51b8152602060048201819052602482015260008051602062002ed7833981519152604482015260640162000557565b6001600160a01b0381166200076d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000557565b6005546040516001600160a01b0380841692169060008051602062002ef783398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080620007c7838562000a17565b9050838110156200081b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000557565b90505b92915050565b828054620008329062000a5d565b90600052602060002090601f016020900481019282620008565760008555620008a1565b82601f106200087157805160ff1916838001178555620008a1565b82800160010185558215620008a1579182015b82811115620008a157825182559160200191906001019062000884565b50620008af929150620008b3565b5090565b5b80821115620008af5760008155600101620008b4565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000921578160001904821115620009055762000905620008ca565b808516156200091357918102915b93841c9390800290620008e5565b509250929050565b6000826200093a575060016200081e565b8162000949575060006200081e565b81600181146200096257600281146200096d576200098d565b60019150506200081e565b60ff841115620009815762000981620008ca565b50506001821b6200081e565b5060208310610133831016604e8410600b8410161715620009b2575081810a6200081e565b620009be8383620008e0565b8060001904821115620009d557620009d5620008ca565b029392505050565b6000620009ee60ff84168362000929565b9392505050565b600081600019048311821515161562000a125762000a12620008ca565b500290565b6000821982111562000a2d5762000a2d620008ca565b500190565b60006020828403121562000a4557600080fd5b81516001600160a01b03811681146200081b57600080fd5b600181811c9082168062000a7257607f821691505b6020821081141562000a9457634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516123ed62000aea600039600081816104070152610cc40152600081816102ce01528181611ac001528181611b8801528181611bc401528181611c3b0152611c9801526123ed6000f3fe6080604052600436106102555760003560e01c80638a8c523c11610139578063b62496f5116100b6578063dd62ed3e1161007a578063dd62ed3e14610702578063de5bf0e814610748578063e3c4818d14610768578063f11a24d31461077e578063f2fde38b14610794578063f6374342146107b457600080fd5b8063b62496f51461065b578063bbc0c7421461068b578063c0246668146106ac578063d691ce7f146106cc578063d85ba063146106ec57600080fd5b80639a7a23d6116100fd5780639a7a23d6146105c55780639bb19a32146105e5578063a457c2d7146105fb578063a9059cbb1461061b578063aacebbe31461063b57600080fd5b80638a8c523c146105475780638da5cb5b1461055c578063921369131461057a578063924de9b71461059057806395d89b41146105b057600080fd5b806339509351116101d25780636e3b9ac2116101965780636e3b9ac21461049957806370a08231146104bb578063715018a6146104f15780637bce5a04146105065780637dd72e8d1461051c57806385c5b3191461053157600080fd5b806339509351146103d557806349bd5a5e146103f55780634fbee193146104295780636a486a8e146104625780636ddd17131461047857600080fd5b80631f3fed8f116102195780631f3fed8f1461033d5780632307b4411461035357806323b872dd1461037357806327c8f83514610393578063313ce567146103a957600080fd5b806306fdde0314610261578063095ea7b31461028c5780631694505e146102bc57806318160ddd146103085780631a8145bb1461032757600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b506102766107ca565b6040516102839190611d53565b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004611dc0565b61085c565b6040519015158152602001610283565b3480156102c857600080fd5b506102f07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610283565b34801561031457600080fd5b506002545b604051908152602001610283565b34801561033357600080fd5b5061031960115481565b34801561034957600080fd5b5061031960105481565b34801561035f57600080fd5b506102ac61036e366004611ec2565b610873565b34801561037f57600080fd5b506102ac61038e366004611f84565b610a5c565b34801561039f57600080fd5b506102f061dead81565b3480156103b557600080fd5b50600654600160a01b900460ff1660405160ff9091168152602001610283565b3480156103e157600080fd5b506102ac6103f0366004611dc0565b610abb565b34801561040157600080fd5b506102f07f000000000000000000000000000000000000000000000000000000000000000081565b34801561043557600080fd5b506102ac610444366004611fc5565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561046e57600080fd5b50610319600a5481565b34801561048457600080fd5b506006546102ac90600160b01b900460ff1681565b3480156104a557600080fd5b506104b96104b4366004611fe2565b610af1565b005b3480156104c757600080fd5b506103196104d6366004611fc5565b6001600160a01b031660009081526020819052604090205490565b3480156104fd57600080fd5b506104b9610b56565b34801561051257600080fd5b5061031960085481565b34801561052857600080fd5b506104b9610bca565b34801561053d57600080fd5b50610319600e5481565b34801561055357600080fd5b506104b9610c00565b34801561056857600080fd5b506005546001600160a01b03166102f0565b34801561058657600080fd5b50610319600b5481565b34801561059c57600080fd5b506104b96105ab366004612019565b610c41565b3480156105bc57600080fd5b50610276610c89565b3480156105d157600080fd5b506104b96105e0366004612034565b610c98565b3480156105f157600080fd5b50610319600f5481565b34801561060757600080fd5b506102ac610616366004611dc0565b610d74565b34801561062757600080fd5b506102ac610636366004611dc0565b610dc3565b34801561064757600080fd5b506104b9610656366004611fc5565b610dd0565b34801561066757600080fd5b506102ac610676366004611fc5565b60136020526000908152604090205460ff1681565b34801561069757600080fd5b506006546102ac90600160a81b900460ff1681565b3480156106b857600080fd5b506104b96106c7366004612034565b610e57565b3480156106d857600080fd5b506104b96106e7366004611fe2565b610ee0565b3480156106f857600080fd5b5061031960075481565b34801561070e57600080fd5b5061031961071d366004612069565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561075457600080fd5b506104b9610763366004611fe2565b610f43565b34801561077457600080fd5b50610319600d5481565b34801561078a57600080fd5b5061031960095481565b3480156107a057600080fd5b506104b96107af366004611fc5565b610fa6565b3480156107c057600080fd5b50610319600c5481565b6060600380546107d9906120a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610805906120a2565b80156108525780601f1061082757610100808354040283529160200191610852565b820191906000526020600020905b81548152906001019060200180831161083557829003601f168201915b5050505050905090565b60006108693384846110f7565b5060015b92915050565b6005546000906001600160a01b031633146108a95760405162461bcd60e51b81526004016108a0906120dd565b60405180910390fd5b600654600160a81b900460ff16156109295760405162461bcd60e51b815260206004820152603760248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201527f742061697264726f70206166746572206c61756e63682e00000000000000000060648201526084016108a0565b815183511461097a5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e677468000060448201526064016108a0565b60c88351106109ea5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b60648201526084016108a0565b60005b8351811015610a52576000848281518110610a0a57610a0a612112565b602002602001015190506000848381518110610a2857610a28612112565b60200260200101519050610a3d33838361121c565b50508080610a4a9061213e565b9150506109ed565b5060019392505050565b6000610a6984848461121c565b610a528433610ab68560405180606001604052806028815260200161236b602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061163f565b6110f7565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610869918590610ab69086611091565b6005546001600160a01b03163314610b1b5760405162461bcd60e51b81526004016108a0906120dd565b600b829055600c819055610b2f8183612159565b600a8181551015610b525760405162461bcd60e51b81526004016108a090612171565b5050565b6005546001600160a01b03163314610b805760405162461bcd60e51b81526004016108a0906120dd565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bf45760405162461bcd60e51b81526004016108a0906120dd565b60006011819055601055565b6005546001600160a01b03163314610c2a5760405162461bcd60e51b81526004016108a0906120dd565b6006805461ffff60a81b191661010160a81b179055565b6005546001600160a01b03163314610c6b5760405162461bcd60e51b81526004016108a0906120dd565b60068054911515600160b01b0260ff60b01b19909216919091179055565b6060600480546107d9906120a2565b6005546001600160a01b03163314610cc25760405162461bcd60e51b81526004016108a0906120dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610d6a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016108a0565b610b528282611679565b60006108693384610ab685604051806060016040528060258152602001612393602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061163f565b600061086933848461121c565b6005546001600160a01b03163314610dfa5760405162461bcd60e51b81526004016108a0906120dd565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e815760405162461bcd60e51b81526004016108a0906120dd565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610f0a5760405162461bcd60e51b81526004016108a0906120dd565b60088290556009819055610f1e8183612159565b6007819055600a1015610b525760405162461bcd60e51b81526004016108a090612171565b6005546001600160a01b03163314610f6d5760405162461bcd60e51b81526004016108a0906120dd565b600e829055600f819055610f818183612159565b600d819055600a1015610b525760405162461bcd60e51b81526004016108a090612171565b6005546001600160a01b03163314610fd05760405162461bcd60e51b81526004016108a0906120dd565b6001600160a01b0381166110355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061109e8385612159565b9050838110156110f05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108a0565b9392505050565b6001600160a01b0383166111595760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108a0565b6001600160a01b0382166111ba5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108a0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112425760405162461bcd60e51b81526004016108a0906121a8565b6001600160a01b0382166112685760405162461bcd60e51b81526004016108a0906121ed565b600654600160a81b900460ff166112fd576001600160a01b03831660009081526012602052604090205460ff16806112b857506001600160a01b03821660009081526012602052604090205460ff165b6112fd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108a0565b806113135761130e838360006116cd565b505050565b306000908152602081905260409020548015801590819061133d5750600654600160b01b900460ff165b80156113535750600554600160a01b900460ff16155b801561137857506001600160a01b03851660009081526013602052604090205460ff16155b801561139d57506001600160a01b03851660009081526012602052604090205460ff16155b80156113c257506001600160a01b03841660009081526012602052604090205460ff16155b156113f0576005805460ff60a01b1916600160a01b1790556113e26117d6565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526012602052604090205460ff600160a01b90920482161591168061143e57506001600160a01b03851660009081526012602052604090205460ff165b15611447575060005b6000811561162b576001600160a01b03861660009081526013602052604090205460ff161561150157600a54156114fc576114986064611492600a548861196690919063ffffffff16565b906119e5565b9050600a54600c54826114ab9190612230565b6114b5919061224f565b601160008282546114c69190612159565b9091555050600a54600b546114db9083612230565b6114e5919061224f565b601060008282546114f69190612159565b90915550505b61160d565b6001600160a01b03871660009081526013602052604090205460ff161561158757600754156114fc5761154460646114926007548861196690919063ffffffff16565b9050600754600954826115579190612230565b611561919061224f565b601160008282546115729190612159565b90915550506007546008546114db9083612230565b600d541561160d576115a96064611492600d548861196690919063ffffffff16565b9050600d54600f54826115bc9190612230565b6115c6919061224f565b601160008282546115d79190612159565b9091555050600d54600e546115ec9083612230565b6115f6919061224f565b601060008282546116079190612159565b90915550505b801561161e5761161e8730836116cd565b6116288186612271565b94505b6116368787876116cd565b50505050505050565b600081848411156116635760405162461bcd60e51b81526004016108a09190611d53565b5060006116708486612271565b95945050505050565b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166116f35760405162461bcd60e51b81526004016108a0906121a8565b6001600160a01b0382166117195760405162461bcd60e51b81526004016108a0906121ed565b61175681604051806060016040528060268152602001612345602691396001600160a01b038616600090815260208190526040902054919061163f565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546117859082611091565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161120f565b30600090815260208190526040812054905060006010546011546117fa9190612159565b90506000821580611809575081155b1561181357505050565b6000600283601154866118269190612230565b611830919061224f565b61183a919061224f565b905060006118488583611a27565b9050478161185857505050505050565b61186182611a69565b600061186d4783611a27565b9050600061188a876114926010548561196690919063ffffffff16565b905060006118988284612271565b60006011819055601055905085158015906118b35750600081115b15611906576118c28682611c35565b601154604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611953576040519150601f19603f3d011682016040523d82523d6000602084013e611958565b606091505b505050505050505050505050565b6000826119755750600061086d565b60006119818385612230565b90508261198e858361224f565b146110f05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108a0565b60006110f083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d25565b60006110f083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061163f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a9e57611a9e612112565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b1757600080fd5b505afa158015611b2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4f9190612288565b81600181518110611b6257611b62612112565b60200260200101906001600160a01b031690816001600160a01b031681525050611bad307f0000000000000000000000000000000000000000000000000000000000000000846110f7565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611c029085906000908690309042906004016122a5565b600060405180830381600087803b158015611c1c57600080fd5b505af1925050508015611c2d575060015b610b52575050565b611c60307f0000000000000000000000000000000000000000000000000000000000000000846110f7565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015611ce557600080fd5b505af193505050508015611d16575060408051601f3d908101601f19168201909252611d1391810190612316565b60015b611d1e575050565b5050505050565b60008183611d465760405162461bcd60e51b81526004016108a09190611d53565b506000611670848661224f565b600060208083528351808285015260005b81811015611d8057858101830151858201604001528201611d64565b81811115611d92576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611dbd57600080fd5b50565b60008060408385031215611dd357600080fd5b8235611dde81611da8565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e2b57611e2b611dec565b604052919050565b600067ffffffffffffffff821115611e4d57611e4d611dec565b5060051b60200190565b600082601f830112611e6857600080fd5b81356020611e7d611e7883611e33565b611e02565b82815260059290921b84018101918181019086841115611e9c57600080fd5b8286015b84811015611eb75780358352918301918301611ea0565b509695505050505050565b60008060408385031215611ed557600080fd5b823567ffffffffffffffff80821115611eed57600080fd5b818501915085601f830112611f0157600080fd5b81356020611f11611e7883611e33565b82815260059290921b84018101918181019089841115611f3057600080fd5b948201945b83861015611f57578535611f4881611da8565b82529482019490820190611f35565b96505086013592505080821115611f6d57600080fd5b50611f7a85828601611e57565b9150509250929050565b600080600060608486031215611f9957600080fd5b8335611fa481611da8565b92506020840135611fb481611da8565b929592945050506040919091013590565b600060208284031215611fd757600080fd5b81356110f081611da8565b60008060408385031215611ff557600080fd5b50508035926020909101359150565b8035801515811461201457600080fd5b919050565b60006020828403121561202b57600080fd5b6110f082612004565b6000806040838503121561204757600080fd5b823561205281611da8565b915061206060208401612004565b90509250929050565b6000806040838503121561207c57600080fd5b823561208781611da8565b9150602083013561209781611da8565b809150509250929050565b600181811c908216806120b657607f821691505b602082108114156120d757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561215257612152612128565b5060010190565b6000821982111561216c5761216c612128565b500190565b6020808252601d908201527f4d757374206b656570206665657320617420313025206f72206c657373000000604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600081600019048311821515161561224a5761224a612128565b500290565b60008261226c57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561228357612283612128565b500390565b60006020828403121561229a57600080fd5b81516110f081611da8565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122f55784516001600160a01b0316835293830193918301916001016122d0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561232b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200d351f4198357755a056bdc499607ce9061d3a5ff5b2ad47a6138075a65edb4b64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
Deployed Bytecode
0x6080604052600436106102555760003560e01c80638a8c523c11610139578063b62496f5116100b6578063dd62ed3e1161007a578063dd62ed3e14610702578063de5bf0e814610748578063e3c4818d14610768578063f11a24d31461077e578063f2fde38b14610794578063f6374342146107b457600080fd5b8063b62496f51461065b578063bbc0c7421461068b578063c0246668146106ac578063d691ce7f146106cc578063d85ba063146106ec57600080fd5b80639a7a23d6116100fd5780639a7a23d6146105c55780639bb19a32146105e5578063a457c2d7146105fb578063a9059cbb1461061b578063aacebbe31461063b57600080fd5b80638a8c523c146105475780638da5cb5b1461055c578063921369131461057a578063924de9b71461059057806395d89b41146105b057600080fd5b806339509351116101d25780636e3b9ac2116101965780636e3b9ac21461049957806370a08231146104bb578063715018a6146104f15780637bce5a04146105065780637dd72e8d1461051c57806385c5b3191461053157600080fd5b806339509351146103d557806349bd5a5e146103f55780634fbee193146104295780636a486a8e146104625780636ddd17131461047857600080fd5b80631f3fed8f116102195780631f3fed8f1461033d5780632307b4411461035357806323b872dd1461037357806327c8f83514610393578063313ce567146103a957600080fd5b806306fdde0314610261578063095ea7b31461028c5780631694505e146102bc57806318160ddd146103085780631a8145bb1461032757600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b506102766107ca565b6040516102839190611d53565b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004611dc0565b61085c565b6040519015158152602001610283565b3480156102c857600080fd5b506102f07f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610283565b34801561031457600080fd5b506002545b604051908152602001610283565b34801561033357600080fd5b5061031960115481565b34801561034957600080fd5b5061031960105481565b34801561035f57600080fd5b506102ac61036e366004611ec2565b610873565b34801561037f57600080fd5b506102ac61038e366004611f84565b610a5c565b34801561039f57600080fd5b506102f061dead81565b3480156103b557600080fd5b50600654600160a01b900460ff1660405160ff9091168152602001610283565b3480156103e157600080fd5b506102ac6103f0366004611dc0565b610abb565b34801561040157600080fd5b506102f07f000000000000000000000000b60f8e44abf33be58662c831857f1a012c9306eb81565b34801561043557600080fd5b506102ac610444366004611fc5565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561046e57600080fd5b50610319600a5481565b34801561048457600080fd5b506006546102ac90600160b01b900460ff1681565b3480156104a557600080fd5b506104b96104b4366004611fe2565b610af1565b005b3480156104c757600080fd5b506103196104d6366004611fc5565b6001600160a01b031660009081526020819052604090205490565b3480156104fd57600080fd5b506104b9610b56565b34801561051257600080fd5b5061031960085481565b34801561052857600080fd5b506104b9610bca565b34801561053d57600080fd5b50610319600e5481565b34801561055357600080fd5b506104b9610c00565b34801561056857600080fd5b506005546001600160a01b03166102f0565b34801561058657600080fd5b50610319600b5481565b34801561059c57600080fd5b506104b96105ab366004612019565b610c41565b3480156105bc57600080fd5b50610276610c89565b3480156105d157600080fd5b506104b96105e0366004612034565b610c98565b3480156105f157600080fd5b50610319600f5481565b34801561060757600080fd5b506102ac610616366004611dc0565b610d74565b34801561062757600080fd5b506102ac610636366004611dc0565b610dc3565b34801561064757600080fd5b506104b9610656366004611fc5565b610dd0565b34801561066757600080fd5b506102ac610676366004611fc5565b60136020526000908152604090205460ff1681565b34801561069757600080fd5b506006546102ac90600160a81b900460ff1681565b3480156106b857600080fd5b506104b96106c7366004612034565b610e57565b3480156106d857600080fd5b506104b96106e7366004611fe2565b610ee0565b3480156106f857600080fd5b5061031960075481565b34801561070e57600080fd5b5061031961071d366004612069565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561075457600080fd5b506104b9610763366004611fe2565b610f43565b34801561077457600080fd5b50610319600d5481565b34801561078a57600080fd5b5061031960095481565b3480156107a057600080fd5b506104b96107af366004611fc5565b610fa6565b3480156107c057600080fd5b50610319600c5481565b6060600380546107d9906120a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610805906120a2565b80156108525780601f1061082757610100808354040283529160200191610852565b820191906000526020600020905b81548152906001019060200180831161083557829003601f168201915b5050505050905090565b60006108693384846110f7565b5060015b92915050565b6005546000906001600160a01b031633146108a95760405162461bcd60e51b81526004016108a0906120dd565b60405180910390fd5b600654600160a81b900460ff16156109295760405162461bcd60e51b815260206004820152603760248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201527f742061697264726f70206166746572206c61756e63682e00000000000000000060648201526084016108a0565b815183511461097a5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e677468000060448201526064016108a0565b60c88351106109ea5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b60648201526084016108a0565b60005b8351811015610a52576000848281518110610a0a57610a0a612112565b602002602001015190506000848381518110610a2857610a28612112565b60200260200101519050610a3d33838361121c565b50508080610a4a9061213e565b9150506109ed565b5060019392505050565b6000610a6984848461121c565b610a528433610ab68560405180606001604052806028815260200161236b602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061163f565b6110f7565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610869918590610ab69086611091565b6005546001600160a01b03163314610b1b5760405162461bcd60e51b81526004016108a0906120dd565b600b829055600c819055610b2f8183612159565b600a8181551015610b525760405162461bcd60e51b81526004016108a090612171565b5050565b6005546001600160a01b03163314610b805760405162461bcd60e51b81526004016108a0906120dd565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bf45760405162461bcd60e51b81526004016108a0906120dd565b60006011819055601055565b6005546001600160a01b03163314610c2a5760405162461bcd60e51b81526004016108a0906120dd565b6006805461ffff60a81b191661010160a81b179055565b6005546001600160a01b03163314610c6b5760405162461bcd60e51b81526004016108a0906120dd565b60068054911515600160b01b0260ff60b01b19909216919091179055565b6060600480546107d9906120a2565b6005546001600160a01b03163314610cc25760405162461bcd60e51b81526004016108a0906120dd565b7f000000000000000000000000b60f8e44abf33be58662c831857f1a012c9306eb6001600160a01b0316826001600160a01b03161415610d6a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016108a0565b610b528282611679565b60006108693384610ab685604051806060016040528060258152602001612393602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061163f565b600061086933848461121c565b6005546001600160a01b03163314610dfa5760405162461bcd60e51b81526004016108a0906120dd565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e815760405162461bcd60e51b81526004016108a0906120dd565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610f0a5760405162461bcd60e51b81526004016108a0906120dd565b60088290556009819055610f1e8183612159565b6007819055600a1015610b525760405162461bcd60e51b81526004016108a090612171565b6005546001600160a01b03163314610f6d5760405162461bcd60e51b81526004016108a0906120dd565b600e829055600f819055610f818183612159565b600d819055600a1015610b525760405162461bcd60e51b81526004016108a090612171565b6005546001600160a01b03163314610fd05760405162461bcd60e51b81526004016108a0906120dd565b6001600160a01b0381166110355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061109e8385612159565b9050838110156110f05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108a0565b9392505050565b6001600160a01b0383166111595760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108a0565b6001600160a01b0382166111ba5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108a0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112425760405162461bcd60e51b81526004016108a0906121a8565b6001600160a01b0382166112685760405162461bcd60e51b81526004016108a0906121ed565b600654600160a81b900460ff166112fd576001600160a01b03831660009081526012602052604090205460ff16806112b857506001600160a01b03821660009081526012602052604090205460ff165b6112fd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108a0565b806113135761130e838360006116cd565b505050565b306000908152602081905260409020548015801590819061133d5750600654600160b01b900460ff165b80156113535750600554600160a01b900460ff16155b801561137857506001600160a01b03851660009081526013602052604090205460ff16155b801561139d57506001600160a01b03851660009081526012602052604090205460ff16155b80156113c257506001600160a01b03841660009081526012602052604090205460ff16155b156113f0576005805460ff60a01b1916600160a01b1790556113e26117d6565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526012602052604090205460ff600160a01b90920482161591168061143e57506001600160a01b03851660009081526012602052604090205460ff165b15611447575060005b6000811561162b576001600160a01b03861660009081526013602052604090205460ff161561150157600a54156114fc576114986064611492600a548861196690919063ffffffff16565b906119e5565b9050600a54600c54826114ab9190612230565b6114b5919061224f565b601160008282546114c69190612159565b9091555050600a54600b546114db9083612230565b6114e5919061224f565b601060008282546114f69190612159565b90915550505b61160d565b6001600160a01b03871660009081526013602052604090205460ff161561158757600754156114fc5761154460646114926007548861196690919063ffffffff16565b9050600754600954826115579190612230565b611561919061224f565b601160008282546115729190612159565b90915550506007546008546114db9083612230565b600d541561160d576115a96064611492600d548861196690919063ffffffff16565b9050600d54600f54826115bc9190612230565b6115c6919061224f565b601160008282546115d79190612159565b9091555050600d54600e546115ec9083612230565b6115f6919061224f565b601060008282546116079190612159565b90915550505b801561161e5761161e8730836116cd565b6116288186612271565b94505b6116368787876116cd565b50505050505050565b600081848411156116635760405162461bcd60e51b81526004016108a09190611d53565b5060006116708486612271565b95945050505050565b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166116f35760405162461bcd60e51b81526004016108a0906121a8565b6001600160a01b0382166117195760405162461bcd60e51b81526004016108a0906121ed565b61175681604051806060016040528060268152602001612345602691396001600160a01b038616600090815260208190526040902054919061163f565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546117859082611091565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161120f565b30600090815260208190526040812054905060006010546011546117fa9190612159565b90506000821580611809575081155b1561181357505050565b6000600283601154866118269190612230565b611830919061224f565b61183a919061224f565b905060006118488583611a27565b9050478161185857505050505050565b61186182611a69565b600061186d4783611a27565b9050600061188a876114926010548561196690919063ffffffff16565b905060006118988284612271565b60006011819055601055905085158015906118b35750600081115b15611906576118c28682611c35565b601154604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611953576040519150601f19603f3d011682016040523d82523d6000602084013e611958565b606091505b505050505050505050505050565b6000826119755750600061086d565b60006119818385612230565b90508261198e858361224f565b146110f05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108a0565b60006110f083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d25565b60006110f083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061163f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a9e57611a9e612112565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b1757600080fd5b505afa158015611b2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4f9190612288565b81600181518110611b6257611b62612112565b60200260200101906001600160a01b031690816001600160a01b031681525050611bad307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846110f7565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611c029085906000908690309042906004016122a5565b600060405180830381600087803b158015611c1c57600080fd5b505af1925050508015611c2d575060015b610b52575050565b611c60307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846110f7565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015611ce557600080fd5b505af193505050508015611d16575060408051601f3d908101601f19168201909252611d1391810190612316565b60015b611d1e575050565b5050505050565b60008183611d465760405162461bcd60e51b81526004016108a09190611d53565b506000611670848661224f565b600060208083528351808285015260005b81811015611d8057858101830151858201604001528201611d64565b81811115611d92576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611dbd57600080fd5b50565b60008060408385031215611dd357600080fd5b8235611dde81611da8565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e2b57611e2b611dec565b604052919050565b600067ffffffffffffffff821115611e4d57611e4d611dec565b5060051b60200190565b600082601f830112611e6857600080fd5b81356020611e7d611e7883611e33565b611e02565b82815260059290921b84018101918181019086841115611e9c57600080fd5b8286015b84811015611eb75780358352918301918301611ea0565b509695505050505050565b60008060408385031215611ed557600080fd5b823567ffffffffffffffff80821115611eed57600080fd5b818501915085601f830112611f0157600080fd5b81356020611f11611e7883611e33565b82815260059290921b84018101918181019089841115611f3057600080fd5b948201945b83861015611f57578535611f4881611da8565b82529482019490820190611f35565b96505086013592505080821115611f6d57600080fd5b50611f7a85828601611e57565b9150509250929050565b600080600060608486031215611f9957600080fd5b8335611fa481611da8565b92506020840135611fb481611da8565b929592945050506040919091013590565b600060208284031215611fd757600080fd5b81356110f081611da8565b60008060408385031215611ff557600080fd5b50508035926020909101359150565b8035801515811461201457600080fd5b919050565b60006020828403121561202b57600080fd5b6110f082612004565b6000806040838503121561204757600080fd5b823561205281611da8565b915061206060208401612004565b90509250929050565b6000806040838503121561207c57600080fd5b823561208781611da8565b9150602083013561209781611da8565b809150509250929050565b600181811c908216806120b657607f821691505b602082108114156120d757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561215257612152612128565b5060010190565b6000821982111561216c5761216c612128565b500190565b6020808252601d908201527f4d757374206b656570206665657320617420313025206f72206c657373000000604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600081600019048311821515161561224a5761224a612128565b500290565b60008261226c57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561228357612283612128565b500390565b60006020828403121561229a57600080fd5b81516110f081611da8565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122f55784516001600160a01b0316835293830193918301916001016122d0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561232b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200d351f4198357755a056bdc499607ce9061d3a5ff5b2ad47a6138075a65edb4b64736f6c63430008090033
Deployed Bytecode Sourcemap
29434:13199:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7590:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9757:169;;;;;;;;;;-1:-1:-1;9757:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;9757:169:0;1072:187:1;29510:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1455:32:1;;;1437:51;;1425:2;1410:18;29510:51:0;1264:230:1;8710:108:0;;;;;;;;;;-1:-1:-1;8798:12:0;;8710:108;;;1645:25:1;;;1633:2;1618:18;8710:108:0;1499:177:1;30269:33:0;;;;;;;;;;;;;;;;30229;;;;;;;;;;;;;;;;34207:752;;;;;;;;;;-1:-1:-1;34207:752:0;;;;;:::i;:::-;;:::i;10408:355::-;;;;;;;;;;-1:-1:-1;10408:355:0;;;;;:::i;:::-;;:::i;29613:53::-;;;;;;;;;;;;29659:6;29613:53;;34971:92;;;;;;;;;;-1:-1:-1;35046:9:0;;-1:-1:-1;;;35046:9:0;;;;34971:92;;5009:4:1;4997:17;;;4979:36;;4967:2;4952:18;34971:92:0;4837:184:1;11172:218:0;;;;;;;;;;-1:-1:-1;11172:218:0;;;;;:::i;:::-;;:::i;29568:38::-;;;;;;;;;;;;;;;37129:127;;;;;;;;;;-1:-1:-1;37129:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;37220:28:0;37196:4;37220:28;;;:19;:28;;;;;;;;;37129:127;29987:28;;;;;;;;;;;;;;;;29821:31;;;;;;;;;;-1:-1:-1;29821:31:0;;;;-1:-1:-1;;;29821:31:0;;;;;;35596:314;;;;;;;;;;-1:-1:-1;35596:314:0;;;;;:::i;:::-;;:::i;:::-;;8881:127;;;;;;;;;;-1:-1:-1;8881:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8982:18:0;8955:7;8982:18;;;;;;;;;;;;8881:127;22055:148;;;;;;;;;;;;;:::i;29907:30::-;;;;;;;;;;;;;;;;41131:117;;;;;;;;;;;;;:::i;30139:35::-;;;;;;;;;;;;;;;;34083:112;;;;;;;;;;;;;:::i;21413:79::-;;;;;;;;;;-1:-1:-1;21478:6:0;;-1:-1:-1;;;;;21478:6:0;21413:79;;30022:31;;;;;;;;;;;;;;;;35163:101;;;;;;;;;;-1:-1:-1;35163:101:0;;;;;:::i;:::-;;:::i;7809:104::-;;;;;;;;;;;;;:::i;36455:246::-;;;;;;;;;;-1:-1:-1;36455:246:0;;;;;:::i;:::-;;:::i;30181:35::-;;;;;;;;;;;;;;;;11893:269;;;;;;;;;;-1:-1:-1;11893:269:0;;;;;:::i;:::-;;:::i;9221:175::-;;;;;;;;;;-1:-1:-1;9221:175:0;;;;;:::i;:::-;;:::i;36909:208::-;;;;;;;;;;-1:-1:-1;36909:208:0;;;;;:::i;:::-;;:::i;30607:58::-;;;;;;;;;;-1:-1:-1;30607:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29781:33;;;;;;;;;;-1:-1:-1;29781:33:0;;;;-1:-1:-1;;;29781:33:0;;;;;;36265:182;;;;;;;;;;-1:-1:-1;36265:182:0;;;;;:::i;:::-;;:::i;35276:308::-;;;;;;;;;;-1:-1:-1;35276:308:0;;;;;:::i;:::-;;:::i;29873:27::-;;;;;;;;;;;;;;;;9459:151;;;;;;;;;;-1:-1:-1;9459:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9575:18:0;;;9548:7;9575:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9459:151;35918:339;;;;;;;;;;-1:-1:-1;35918:339:0;;;;;:::i;:::-;;:::i;30100:32::-;;;;;;;;;;;;;;;;29944:30;;;;;;;;;;;;;;;;22358:244;;;;;;;;;;-1:-1:-1;22358:244:0;;;;;:::i;:::-;;:::i;30060:31::-;;;;;;;;;;;;;;;;7590:100;7644:13;7677:5;7670:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7590:100;:::o;9757:169::-;9840:4;9857:39;306:10;9880:7;9889:6;9857:8;:39::i;:::-;-1:-1:-1;9914:4:0;9757:169;;;;;:::o;34207:752::-;21625:6;;34320:4;;-1:-1:-1;;;;;21625:6:0;306:10;21625:22;21617:67;;;;-1:-1:-1;;;21617:67:0;;;;;;;:::i;:::-;;;;;;;;;34345:13:::1;::::0;-1:-1:-1;;;34345:13:0;::::1;;;34344:14;34336:82;;;::::0;-1:-1:-1;;;34336:82:0;;7542:2:1;34336:82:0::1;::::0;::::1;7524:21:1::0;7581:2;7561:18;;;7554:30;7620:34;7600:18;;;7593:62;7691:25;7671:18;;;7664:53;7734:19;;34336:82:0::1;7340:419:1::0;34336:82:0::1;34462:7;:14;34437;:21;:39;34429:82;;;::::0;-1:-1:-1;;;34429:82:0;;7966:2:1;34429:82:0::1;::::0;::::1;7948:21:1::0;8005:2;7985:18;;;7978:30;8044:32;8024:18;;;8017:60;8094:18;;34429:82:0::1;7764:354:1::0;34429:82:0::1;34554:3;34530:14;:21;:27;34522:94;;;::::0;-1:-1:-1;;;34522:94:0;;8325:2:1;34522:94:0::1;::::0;::::1;8307:21:1::0;8364:2;8344:18;;;8337:30;8403:34;8383:18;;;8376:62;-1:-1:-1;;;8454:18:1;;;8447:52;8516:19;;34522:94:0::1;8123:418:1::0;34522:94:0::1;34729:9;34725:205;34748:14;:21;34744:1;:25;34725:205;;;34790:14;34807;34822:1;34807:17;;;;;;;;:::i;:::-;;;;;;;34790:34;;34839:14;34856:7;34864:1;34856:10;;;;;;;;:::i;:::-;;;;;;;34839:27;;34881:37;34891:10;34903:6;34911;34881:9;:37::i;:::-;34775:155;;34771:3;;;;;:::i;:::-;;;;34725:205;;;-1:-1:-1::0;34947:4:0::1;::::0;34207:752;-1:-1:-1;;;34207:752:0:o;10408:355::-;10548:4;10565:36;10575:6;10583:9;10594:6;10565:9;:36::i;:::-;10612:121;10621:6;306:10;10643:89;10681:6;10643:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10643:19:0;;;;;;:11;:19;;;;;;;;306:10;10643:33;;;;;;;;;;:37;:89::i;:::-;10612:8;:121::i;11172:218::-;306:10;11260:4;11309:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11309:34:0;;;;;;;;;;11260:4;;11277:83;;11300:7;;11309:50;;11348:10;11309:38;:50::i;35596:314::-;21625:6;;-1:-1:-1;;;;;21625:6:0;306:10;21625:22;21617:67;;;;-1:-1:-1;;;21617:67:0;;;;;;;:::i;:::-;35693:16:::1;:32:::0;;;35736:16:::1;:32:::0;;;35795:35:::1;35755:13:::0;35712;35795:35:::1;:::i;:::-;35779:13;:51:::0;;;-1:-1:-1;35849:19:0::1;35841:61;;;;-1:-1:-1::0;;;35841:61:0::1;;;;;;;:::i;:::-;35596:314:::0;;:::o;22055:148::-;21625:6;;-1:-1:-1;;;;;21625:6:0;306:10;21625:22;21617:67;;;;-1:-1:-1;;;21617:67:0;;;;;;;:::i;:::-;22146:6:::1;::::0;22125:40:::1;::::0;22162:1:::1;::::0;-1:-1:-1;;;;;22146:6:0::1;::::0;22125:40:::1;::::0;22162:1;;22125:40:::1;22176:6;:19:::0;;-1:-1:-1;;;;;;22176:19:0::1;::::0;;22055:148::o;41131:117::-;21625:6;;-1:-1:-1;;;;;21625:6:0;306:10;21625:22;21617:67;;;;-1:-1:-1;;;21617:67:0;;;;;;;:::i;:::-;41206:1:::1;41185:18;:22:::0;;;41218:18:::1;:22:::0;41131:117::o;34083:112::-;21625:6;;-1:-1:-1;;;;;21625:6:0;306:10;21625:22;21617:67;;;;-1:-1:-1;;;21617:67:0;;;;;;;:::i;:::-;34138:13:::1;:20:::0;;-1:-1:-1;;;;34169:18:0;-1:-1:-1;;;34169:18:0;;;34083:112::o;35163:101::-;21625:6;;-1:-1:-1;;;;;21625:6:0;306:10;21625:22;21617:67;;;;-1:-1:-1;;;21617:67:0;;;;;;;:::i;:::-;35235:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;35235:21:0::1;-1:-1:-1::0;;;;35235:21:0;;::::1;::::0;;;::::1;::::0;;35163:101::o;7809:104::-;7865:13;7898:7;7891:14;;;;;:::i;36455:246::-;21625:6;;-1:-1:-1;;;;;21625:6:0;306:10;21625:22;21617:67;;;;-1:-1:-1;;;21617:67:0;;;;;;;:::i;:::-;36564:13:::1;-1:-1:-1::0;;;;;36556:21:0::1;:4;-1:-1:-1::0;;;;;36556:21:0::1;;;36548:91;;;::::0;-1:-1:-1;;;36548:91:0;;9643:2:1;36548:91:0::1;::::0;::::1;9625:21:1::0;9682:2;9662:18;;;9655:30;9721:34;9701:18;;;9694:62;9792:27;9772:18;;;9765:55;9837:19;;36548:91:0::1;9441:421:1::0;36548:91:0::1;36652:41;36681:4;36687:5;36652:28;:41::i;11893:269::-:0;11986:4;12003:129;306:10;12026:7;12035:96;12074:15;12035:96;;;;;;;;;;;;;;;;;306:10;12035:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12035:34:0;;;;;;;;;;;;:38;:96::i;9221:175::-;9307:4;9324:42;306:10;9348:9;9359:6;9324:9;:42::i;36909:208::-;21625:6;;-1:-1:-1;;;;;21625:6:0;306:10;21625:22;21617:67;;;;-1:-1:-1;;;21617:67:0;;;;;;;:::i;:::-;37046:15:::1;::::0;37003:59:::1;::::0;-1:-1:-1;;;;;37046:15:0;;::::1;::::0;37003:59;::::1;::::0;::::1;::::0;37046:15:::1;::::0;37003:59:::1;37073:15;:36:::0;;-1:-1:-1;;;;;;37073:36:0::1;-1:-1:-1::0;;;;;37073:36:0;;;::::1;::::0;;;::::1;::::0;;36909:208::o;36265:182::-;21625:6;;-1:-1:-1;;;;;21625:6:0;306:10;21625:22;21617:67;;;;-1:-1:-1;;;21617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36350:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;36350:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36405:34;;1212:41:1;;;36405:34:0::1;::::0;1185:18:1;36405:34:0::1;;;;;;;36265:182:::0;;:::o;35276:308::-;21625:6;;-1:-1:-1;;;;;21625:6:0;306:10;21625:22;21617:67;;;;-1:-1:-1;;;21617:67:0;;;;;;;:::i;:::-;35373:15:::1;:31:::0;;;35415:15:::1;:31:::0;;;35472:33:::1;35433:13:::0;35391;35472:33:::1;:::i;:::-;35457:12;:48:::0;;;35540:2:::1;-1:-1:-1::0;35524:18:0::1;35516:60;;;;-1:-1:-1::0;;;35516:60:0::1;;;;;;;:::i;35918:339::-:0;21625:6;;-1:-1:-1;;;;;21625:6:0;306:10;21625:22;21617:67;;;;-1:-1:-1;;;21617:67:0;;;;;;;:::i;:::-;36015:20:::1;:36:::0;;;36062:20:::1;:36:::0;;;36129:43:::1;36085:13:::0;36038;36129:43:::1;:::i;:::-;36109:17;:63:::0;;;36213:2:::1;-1:-1:-1::0;36192:23:0::1;36184:65;;;;-1:-1:-1::0;;;36184:65:0::1;;;;;;;:::i;22358:244::-:0;21625:6;;-1:-1:-1;;;;;21625:6:0;306:10;21625:22;21617:67;;;;-1:-1:-1;;;21617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22447:22:0;::::1;22439:73;;;::::0;-1:-1:-1;;;22439:73:0;;10069:2:1;22439:73:0::1;::::0;::::1;10051:21:1::0;10108:2;10088:18;;;10081:30;10147:34;10127:18;;;10120:62;-1:-1:-1;;;10198:18:1;;;10191:36;10244:19;;22439:73:0::1;9867:402:1::0;22439:73:0::1;22549:6;::::0;22528:38:::1;::::0;-1:-1:-1;;;;;22528:38:0;;::::1;::::0;22549:6:::1;::::0;22528:38:::1;::::0;22549:6:::1;::::0;22528:38:::1;22577:6;:17:::0;;-1:-1:-1;;;;;;22577:17:0::1;-1:-1:-1::0;;;;;22577:17:0;;;::::1;::::0;;;::::1;::::0;;22358:244::o;16457:181::-;16515:7;;16547:5;16551:1;16547;:5;:::i;:::-;16535:17;;16576:1;16571;:6;;16563:46;;;;-1:-1:-1;;;16563:46:0;;10476:2:1;16563:46:0;;;10458:21:1;10515:2;10495:18;;;10488:30;10554:29;10534:18;;;10527:57;10601:18;;16563:46:0;10274:351:1;16563:46:0;16629:1;16457:181;-1:-1:-1;;;16457:181:0:o;15079:380::-;-1:-1:-1;;;;;15215:19:0;;15207:68;;;;-1:-1:-1;;;15207:68:0;;10832:2:1;15207:68:0;;;10814:21:1;10871:2;10851:18;;;10844:30;10910:34;10890:18;;;10883:62;-1:-1:-1;;;10961:18:1;;;10954:34;11005:19;;15207:68:0;10630:400:1;15207:68:0;-1:-1:-1;;;;;15294:21:0;;15286:68;;;;-1:-1:-1;;;15286:68:0;;11237:2:1;15286:68:0;;;11219:21:1;11276:2;11256:18;;;11249:30;11315:34;11295:18;;;11288:62;-1:-1:-1;;;11366:18:1;;;11359:32;11408:19;;15286:68:0;11035:398:1;15286:68:0;-1:-1:-1;;;;;15367:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15419:32;;1645:25:1;;;15419:32:0;;1618:18:1;15419:32:0;;;;;;;;15079:380;;;:::o;37268:2687::-;-1:-1:-1;;;;;37400:18:0;;37392:68;;;;-1:-1:-1;;;37392:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37479:16:0;;37471:64;;;;-1:-1:-1;;;37471:64:0;;;;;;;:::i;:::-;37550:13;;-1:-1:-1;;;37550:13:0;;;;37546:132;;-1:-1:-1;;;;;37587:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;37616:23:0;;;;;;:19;:23;;;;;;;;37587:52;37579:87;;;;-1:-1:-1;;;37579:87:0;;12450:2:1;37579:87:0;;;12432:21:1;12489:2;12469:18;;;12462:30;-1:-1:-1;;;12508:18:1;;;12501:52;12570:18;;37579:87:0;12248:346:1;37579:87:0;37692:11;37689:92;;37720:28;37736:4;37742:2;37746:1;37720:15;:28::i;:::-;37268:2687;;;:::o;37689:92::-;37852:4;37803:28;8982:18;;;;;;;;;;;37894:24;;;;;;;37949:35;;-1:-1:-1;37973:11:0;;-1:-1:-1;;;37973:11:0;;;;37949:35;:61;;;;-1:-1:-1;38002:8:0;;-1:-1:-1;;;38002:8:0;;;;38001:9;37949:61;:110;;;;-1:-1:-1;;;;;;38028:31:0;;;;;;:25;:31;;;;;;;;38027:32;37949:110;:153;;;;-1:-1:-1;;;;;;38077:25:0;;;;;;:19;:25;;;;;;;;38076:26;37949:153;:194;;;;-1:-1:-1;;;;;;38120:23:0;;;;;;:19;:23;;;;;;;;38119:24;37949:194;37931:338;;;38170:8;:15;;-1:-1:-1;;;;38170:15:0;-1:-1:-1;;;38170:15:0;;;38214:10;:8;:10::i;:::-;38241:8;:16;;-1:-1:-1;;;;38241:16:0;;;37931:338;38305:8;;-1:-1:-1;;;;;38414:25:0;;38289:12;38414:25;;;:19;:25;;;;;;38305:8;-1:-1:-1;;;38305:8:0;;;;;38304:9;;38414:25;;:52;;-1:-1:-1;;;;;;38443:23:0;;;;;;:19;:23;;;;;;;;38414:52;38411:99;;;-1:-1:-1;38493:5:0;38411:99;38530:12;38634:7;38631:1271;;;-1:-1:-1;;;;;38675:29:0;;;;;;:25;:29;;;;;;;;38671:1062;;;38728:13;;:17;38724:274;;38776:34;38806:3;38776:25;38787:13;;38776:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;38769:41;;38881:13;;38862:16;;38855:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;38833:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;38965:13:0;;38946:16;;38939:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;38917:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;38724:274:0;38671:1062;;;-1:-1:-1;;;;;39058:31:0;;;;;;:25;:31;;;;;;;;39055:678;;;39114:12;;:16;39110:268;;39161:33;39190:3;39161:24;39172:12;;39161:6;:10;;:24;;;;:::i;:33::-;39154:40;;39264:12;;39246:15;;39239:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;39217:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;39346:12:0;;39328:15;;39321:22;;:4;:22;:::i;39055:678::-;39424:17;;:21;39420:298;;39476:38;39510:3;39476:29;39487:17;;39476:6;:10;;:29;;;;:::i;:38::-;39469:45;;39589:17;;39566:20;;39559:4;:27;;;;:::i;:::-;:47;;;;:::i;:::-;39537:18;;:69;;;;;;;:::i;:::-;;;;-1:-1:-1;;39681:17:0;;39658:20;;39651:27;;:4;:27;:::i;:::-;:47;;;;:::i;:::-;39629:18;;:69;;;;;;;:::i;:::-;;;;-1:-1:-1;;39420:298:0;39764:8;;39761:93;;39796:42;39812:4;39826;39833;39796:15;:42::i;:::-;39876:14;39886:4;39876:14;;:::i;:::-;;;38631:1271;39914:33;39930:4;39936:2;39940:6;39914:15;:33::i;:::-;37381:2574;;;;37268:2687;;;:::o;17360:192::-;17446:7;17482:12;17474:6;;;;17466:29;;;;-1:-1:-1;;;17466:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17506:9:0;17518:5;17522:1;17518;:5;:::i;:::-;17506:17;17360:192;-1:-1:-1;;;;;17360:192:0:o;36713:188::-;-1:-1:-1;;;;;36796:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;36796:39:0;;;;;;;;;;36853:40;;36796:39;;:31;36853:40;;;36713:188;;:::o;12652:573::-;-1:-1:-1;;;;;12792:20:0;;12784:70;;;;-1:-1:-1;;;12784:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12873:23:0;;12865:71;;;;-1:-1:-1;;;12865:71:0;;;;;;;:::i;:::-;13029;13051:6;13029:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13029:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13009:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13134:20;;;;;;;:32;;13159:6;13134:24;:32::i;:::-;-1:-1:-1;;;;;13111:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13182:35;1645:25:1;;;13111:20:0;;13182:35;;;;;;1618:18:1;13182:35:0;1499:177:1;41256:1374:0;41339:4;41295:23;8982:18;;;;;;;;;;;41295:50;;41358:25;41407:18;;41386;;:39;;;;:::i;:::-;41358:67;-1:-1:-1;41436:12:0;41472:20;;;:46;;-1:-1:-1;41496:22:0;;41472:46;41469:60;;;41521:7;;;41256:1374::o;41469:60::-;41598:23;41683:1;41663:17;41642:18;;41624:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;41598:86;-1:-1:-1;41695:26:0;41724:36;:15;41598:86;41724:19;:36::i;:::-;41695:65;-1:-1:-1;41809:21:0;41855:23;41851:38;;41881:7;;;;;;41256:1374::o;41851:38::-;41899:36;41916:18;41899:16;:36::i;:::-;41957:18;41978:44;:21;42004:17;41978:25;:44::i;:::-;41957:65;;42043:23;42069:57;42108:17;42069:34;42084:18;;42069:10;:14;;:34;;;;:::i;:57::-;42043:83;-1:-1:-1;42147:23:0;42173:28;42043:83;42173:10;:28;:::i;:::-;42243:1;42222:18;:22;;;42255:18;:22;42147:54;-1:-1:-1;42309:19:0;;;;;:42;;;42350:1;42332:15;:19;42309:42;42306:210;;;42367:46;42380:15;42397;42367:12;:46::i;:::-;42485:18;;42433:71;;;13326:25:1;;;13382:2;13367:18;;13360:34;;;13410:18;;;13403:34;;;;42433:71:0;;;;;;13314:2:1;42433:71:0;;;42306:210;42557:15;;42549:63;;-1:-1:-1;;;;;42557:15:0;;;;42586:21;;42549:63;;;;42586:21;42557:15;42549:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;41256:1374:0:o;17811:471::-;17869:7;18114:6;18110:47;;-1:-1:-1;18144:1:0;18137:8;;18110:47;18169:9;18181:5;18185:1;18181;:5;:::i;:::-;18169:17;-1:-1:-1;18214:1:0;18205:5;18209:1;18169:17;18205:5;:::i;:::-;:10;18197:56;;;;-1:-1:-1;;;18197:56:0;;13860:2:1;18197:56:0;;;13842:21:1;13899:2;13879:18;;;13872:30;13938:34;13918:18;;;13911:62;-1:-1:-1;;;13989:18:1;;;13982:31;14030:19;;18197:56:0;13658:397:1;18758:132:0;18816:7;18843:39;18847:1;18850;18843:39;;;;;;;;;;;;;;;;;:3;:39::i;16921:136::-;16979:7;17006:43;17010:1;17013;17006:43;;;;;;;;;;;;;;;;;:3;:43::i;39963:616::-;40115:16;;;40129:1;40115:16;;;;;;;;40091:21;;40115:16;;;;;;;;;;-1:-1:-1;40115:16:0;40091:40;;40160:4;40142;40147:1;40142:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;40142:23:0;;;-1:-1:-1;;;;;40142:23:0;;;;;40186:15;-1:-1:-1;;;;;40186:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40176:4;40181:1;40176:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;40176:32:0;;;-1:-1:-1;;;;;40176:32:0;;;;;40221:62;40238:4;40253:15;40271:11;40221:8;:62::i;:::-;40326:224;;-1:-1:-1;;;40326:224:0;;-1:-1:-1;;;;;40326:15:0;:66;;;;:224;;40407:11;;40433:1;;40477:4;;40504;;40524:15;;40326:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40322:240;;35596:314;;:::o;40591:532::-;40739:62;40756:4;40771:15;40789:11;40739:8;:62::i;:::-;40848:256;;-1:-1:-1;;;40848:256:0;;40920:4;40848:256;;;15642:34:1;15692:18;;;15685:34;;;40966:1:0;15735:18:1;;;15728:34;;;15778:18;;;15771:34;29659:6:0;15821:19:1;;;15814:44;41078:15:0;15874:19:1;;;15867:35;40848:15:0;-1:-1:-1;;;;;40848:31:0;;;;40887:9;;15576:19:1;;40848:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40848:256:0;;;;;;;;-1:-1:-1;;40848:256:0;;;;;;;;;;;;:::i;:::-;;;40844:272;;35596:314;;:::o;40844:272::-;;;;40591:532;;:::o;19386:278::-;19472:7;19507:12;19500:5;19492:28;;;;-1:-1:-1;;;19492:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19531:9:0;19543:5;19547:1;19543;:5;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1681:127::-;1742:10;1737:3;1733:20;1730:1;1723:31;1773:4;1770:1;1763:15;1797:4;1794:1;1787:15;1813:275;1884:2;1878:9;1949:2;1930:13;;-1:-1:-1;;1926:27:1;1914:40;;1984:18;1969:34;;2005:22;;;1966:62;1963:88;;;2031:18;;:::i;:::-;2067:2;2060:22;1813:275;;-1:-1:-1;1813:275:1:o;2093:183::-;2153:4;2186:18;2178:6;2175:30;2172:56;;;2208:18;;:::i;:::-;-1:-1:-1;2253:1:1;2249:14;2265:4;2245:25;;2093:183::o;2281:662::-;2335:5;2388:3;2381:4;2373:6;2369:17;2365:27;2355:55;;2406:1;2403;2396:12;2355:55;2442:6;2429:20;2468:4;2492:60;2508:43;2548:2;2508:43;:::i;:::-;2492:60;:::i;:::-;2586:15;;;2672:1;2668:10;;;;2656:23;;2652:32;;;2617:12;;;;2696:15;;;2693:35;;;2724:1;2721;2714:12;2693:35;2760:2;2752:6;2748:15;2772:142;2788:6;2783:3;2780:15;2772:142;;;2854:17;;2842:30;;2892:12;;;;2805;;2772:142;;;-1:-1:-1;2932:5:1;2281:662;-1:-1:-1;;;;;;2281:662:1:o;2948:1215::-;3066:6;3074;3127:2;3115:9;3106:7;3102:23;3098:32;3095:52;;;3143:1;3140;3133:12;3095:52;3183:9;3170:23;3212:18;3253:2;3245:6;3242:14;3239:34;;;3269:1;3266;3259:12;3239:34;3307:6;3296:9;3292:22;3282:32;;3352:7;3345:4;3341:2;3337:13;3333:27;3323:55;;3374:1;3371;3364:12;3323:55;3410:2;3397:16;3432:4;3456:60;3472:43;3512:2;3472:43;:::i;3456:60::-;3550:15;;;3632:1;3628:10;;;;3620:19;;3616:28;;;3581:12;;;;3656:19;;;3653:39;;;3688:1;3685;3678:12;3653:39;3712:11;;;;3732:217;3748:6;3743:3;3740:15;3732:217;;;3828:3;3815:17;3845:31;3870:5;3845:31;:::i;:::-;3889:18;;3765:12;;;;3927;;;;3732:217;;;3968:5;-1:-1:-1;;4011:18:1;;3998:32;;-1:-1:-1;;4042:16:1;;;4039:36;;;4071:1;4068;4061:12;4039:36;;4094:63;4149:7;4138:8;4127:9;4123:24;4094:63;:::i;:::-;4084:73;;;2948:1215;;;;;:::o;4168:456::-;4245:6;4253;4261;4314:2;4302:9;4293:7;4289:23;4285:32;4282:52;;;4330:1;4327;4320:12;4282:52;4369:9;4356:23;4388:31;4413:5;4388:31;:::i;:::-;4438:5;-1:-1:-1;4495:2:1;4480:18;;4467:32;4508:33;4467:32;4508:33;:::i;:::-;4168:456;;4560:7;;-1:-1:-1;;;4614:2:1;4599:18;;;;4586:32;;4168:456::o;5026:247::-;5085:6;5138:2;5126:9;5117:7;5113:23;5109:32;5106:52;;;5154:1;5151;5144:12;5106:52;5193:9;5180:23;5212:31;5237:5;5212:31;:::i;5278:248::-;5346:6;5354;5407:2;5395:9;5386:7;5382:23;5378:32;5375:52;;;5423:1;5420;5413:12;5375:52;-1:-1:-1;;5446:23:1;;;5516:2;5501:18;;;5488:32;;-1:-1:-1;5278:248:1:o;5531:160::-;5596:20;;5652:13;;5645:21;5635:32;;5625:60;;5681:1;5678;5671:12;5625:60;5531:160;;;:::o;5696:180::-;5752:6;5805:2;5793:9;5784:7;5780:23;5776:32;5773:52;;;5821:1;5818;5811:12;5773:52;5844:26;5860:9;5844:26;:::i;5881:315::-;5946:6;5954;6007:2;5995:9;5986:7;5982:23;5978:32;5975:52;;;6023:1;6020;6013:12;5975:52;6062:9;6049:23;6081:31;6106:5;6081:31;:::i;:::-;6131:5;-1:-1:-1;6155:35:1;6186:2;6171:18;;6155:35;:::i;:::-;6145:45;;5881:315;;;;;:::o;6201:388::-;6269:6;6277;6330:2;6318:9;6309:7;6305:23;6301:32;6298:52;;;6346:1;6343;6336:12;6298:52;6385:9;6372:23;6404:31;6429:5;6404:31;:::i;:::-;6454:5;-1:-1:-1;6511:2:1;6496:18;;6483:32;6524:33;6483:32;6524:33;:::i;:::-;6576:7;6566:17;;;6201:388;;;;;:::o;6594:380::-;6673:1;6669:12;;;;6716;;;6737:61;;6791:4;6783:6;6779:17;6769:27;;6737:61;6844:2;6836:6;6833:14;6813:18;6810:38;6807:161;;;6890:10;6885:3;6881:20;6878:1;6871:31;6925:4;6922:1;6915:15;6953:4;6950:1;6943:15;6807:161;;6594:380;;;:::o;6979:356::-;7181:2;7163:21;;;7200:18;;;7193:30;7259:34;7254:2;7239:18;;7232:62;7326:2;7311:18;;6979:356::o;8546:127::-;8607:10;8602:3;8598:20;8595:1;8588:31;8638:4;8635:1;8628:15;8662:4;8659:1;8652:15;8678:127;8739:10;8734:3;8730:20;8727:1;8720:31;8770:4;8767:1;8760:15;8794:4;8791:1;8784:15;8810:135;8849:3;-1:-1:-1;;8870:17:1;;8867:43;;;8890:18;;:::i;:::-;-1:-1:-1;8937:1:1;8926:13;;8810:135::o;8950:128::-;8990:3;9021:1;9017:6;9014:1;9011:13;9008:39;;;9027:18;;:::i;:::-;-1:-1:-1;9063:9:1;;8950:128::o;9083:353::-;9285:2;9267:21;;;9324:2;9304:18;;;9297:30;9363:31;9358:2;9343:18;;9336:59;9427:2;9412:18;;9083:353::o;11438:401::-;11640:2;11622:21;;;11679:2;11659:18;;;11652:30;11718:34;11713:2;11698:18;;11691:62;-1:-1:-1;;;11784:2:1;11769:18;;11762:35;11829:3;11814:19;;11438:401::o;11844:399::-;12046:2;12028:21;;;12085:2;12065:18;;;12058:30;12124:34;12119:2;12104:18;;12097:62;-1:-1:-1;;;12190:2:1;12175:18;;12168:33;12233:3;12218:19;;11844:399::o;12599:168::-;12639:7;12705:1;12701;12697:6;12693:14;12690:1;12687:21;12682:1;12675:9;12668:17;12664:45;12661:71;;;12712:18;;:::i;:::-;-1:-1:-1;12752:9:1;;12599:168::o;12772:217::-;12812:1;12838;12828:132;;12882:10;12877:3;12873:20;12870:1;12863:31;12917:4;12914:1;12907:15;12945:4;12942:1;12935:15;12828:132;-1:-1:-1;12974:9:1;;12772:217::o;12994:125::-;13034:4;13062:1;13059;13056:8;13053:34;;;13067:18;;:::i;:::-;-1:-1:-1;13104:9:1;;12994:125::o;14060:251::-;14130:6;14183:2;14171:9;14162:7;14158:23;14154:32;14151:52;;;14199:1;14196;14189:12;14151:52;14231:9;14225:16;14250:31;14275:5;14250:31;:::i;14316:980::-;14578:4;14626:3;14615:9;14611:19;14657:6;14646:9;14639:25;14683:2;14721:6;14716:2;14705:9;14701:18;14694:34;14764:3;14759:2;14748:9;14744:18;14737:31;14788:6;14823;14817:13;14854:6;14846;14839:22;14892:3;14881:9;14877:19;14870:26;;14931:2;14923:6;14919:15;14905:29;;14952:1;14962:195;14976:6;14973:1;14970:13;14962:195;;;15041:13;;-1:-1:-1;;;;;15037:39:1;15025:52;;15132:15;;;;15097:12;;;;15073:1;14991:9;14962:195;;;-1:-1:-1;;;;;;;15213:32:1;;;;15208:2;15193:18;;15186:60;-1:-1:-1;;;15277:3:1;15262:19;15255:35;15174:3;14316:980;-1:-1:-1;;;14316:980:1:o;15913:306::-;16001:6;16009;16017;16070:2;16058:9;16049:7;16045:23;16041:32;16038:52;;;16086:1;16083;16076:12;16038:52;16115:9;16109:16;16099:26;;16165:2;16154:9;16150:18;16144:25;16134:35;;16209:2;16198:9;16194:18;16188:25;16178:35;;15913:306;;;;;:::o
Swarm Source
ipfs://0d351f4198357755a056bdc499607ce9061d3a5ff5b2ad47a6138075a65edb4b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.