ERC-20
Overview
Max Total Supply
1,000,000 BANANA/11
Holders
45
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000519811 BANANA/11Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BANANA11
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-11 */ // SPDX-License-Identifier: MIT // https://t.me/BANANA11token 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 BANANA11 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 public marketingWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch mapping(address => bool) public bots; bool public transferDelayEnabled = true; bool public botBlockRenounced = false; uint256 public buyTotalFees; uint256 public buyLiquidityFee; uint256 public buyMarketingFee; uint256 public sellTotalFees; uint256 public sellLiquidityFee; uint256 public sellMarketingFee; uint256 public tokensForLiquidity; uint256 public tokensForMarketing; uint256 public earlyBuyFee; uint256 public earlySellFee; bool public earlyFees = true; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // 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 IncludeInFees(address indexed account); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("Banana/11", "BANANA/11") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); // 100 = 1% uint256 _buyLiquidityFee = 200; uint256 _buyMarketingFee = 200; uint256 _sellLiquidityFee = 200; uint256 _sellMarketingFee = 200; uint256 totalSupply = 1 * 1e6 * 1e18; maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxTransactionAmountTxn maxWallet = totalSupply * 20 / 1000; // 2% maxWallet swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet buyLiquidityFee = _buyLiquidityFee; buyMarketingFee = _buyMarketingFee; buyTotalFees = buyLiquidityFee + buyMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellMarketingFee = _sellMarketingFee; sellTotalFees = sellLiquidityFee + sellMarketingFee; marketingWallet = address(owner()); // set as marketingWallet wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(marketingWallet), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxTransaction(address(marketingWallet), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading(uint256 _earlyBuyFee, uint256 _earlySellFee) external onlyOwner { tradingActive = true; swapEnabled = true; earlyBuyFee = _earlyBuyFee; earlySellFee = _earlySellFee; } function endExtraFees() external onlyOwner { earlyFees = false; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees( uint256 _liquidityFee, uint256 _marketingFee) external onlyOwner { buyLiquidityFee = _liquidityFee; buyMarketingFee = _marketingFee; buyTotalFees = buyLiquidityFee + buyMarketingFee; require(buyTotalFees <= 600, "Must keep fees at 6% or less"); } function updateSellFees(uint256 _liquidityFee, uint256 _marketingFee) external onlyOwner { sellLiquidityFee = _liquidityFee; sellMarketingFee = _marketingFee; sellTotalFees = sellLiquidityFee + sellMarketingFee; require(sellTotalFees <= 600, "Must keep fees at 6% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function includeInFees(address account) public onlyOwner { require(_isExcludedFromFees[account], "Account is already included in fees"); _isExcludedFromFees[account] = false; emit IncludeInFees(account); } function setAutomatedMarketMakerPair(address pair, bool value) public 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 newWallet) external onlyOwner { emit marketingWalletUpdated(newWallet, marketingWallet); marketingWallet = newWallet; } function withdrawEth(uint256 amount, address payable to) external onlyOwner { require(amount <= address(this).balance, "Insufficient balance"); to.transfer(amount); } function withdrawErc20(address tokenAddress, uint256 amount, address to) external onlyOwner { IERC20 token = IERC20(tokenAddress); require(amount <= token.balanceOf(address(this)), "Insufficient balance"); token.transfer(to, amount); } function renounceBotBlock() public onlyOwner { botBlockRenounced = true; } function botBlock(address account) public onlyOwner { require(!botBlockRenounced, "Blocking bot rights renounced"); require(account != address(uniswapV2Pair)); require(account != address(uniswapV2Router)); bots[account] = true; } function botBlockMultiples(address[] calldata accounts) public onlyOwner { require(!botBlockRenounced, "Blocking bot rights renounced"); for(uint256 i = 0; i < accounts.length; i++) { require(accounts[i] != address(uniswapV2Pair)); require(accounts[i] != address(uniswapV2Router)); bots[accounts[i]] = true; } } function botUnblock(address account) public onlyOwner { bots[account] = false; } function isExcludedFromFees(address account) public 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"); require(amount > 0, "Transfer amount must be greater than zero"); require(!bots[from] && !bots[to], "Your account is blockListed!"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; 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){ uint256 extraFee = 0; // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ if(earlyFees) { extraFee = earlySellFee;} fees = amount.mul(sellTotalFees + extraFee).div(10000); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; amount -= fees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { if(earlyFees) { extraFee = earlyBuyFee;} fees = amount.mul(buyTotalFees + extraFee).div(10000); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; amount -= fees; } if(fees > 0){ super._transfer(from, address(this), 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 uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable marketingWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; 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":true,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[{"internalType":"address","name":"account","type":"address"}],"name":"botBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"botBlockMultiples","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"botBlockRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"botUnblock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_earlyBuyFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellFee","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endExtraFees","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceBotBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600a805462ffffff19166001908117909155600d805461ffff1916821790556018805460ff191690911790553480156200003d57600080fd5b506040518060400160405280600981526020016842616e616e612f313160b81b8152506040518060400160405280600981526020016842414e414e412f313160b81b81525081600390805190602001906200009a92919062000739565b508051620000b090600490602084019062000739565b5050506000620000c56200045760201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d620001358160016200045b565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200017b57600080fd5b505afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b69190620007df565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ff57600080fd5b505afa15801562000214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023a9190620007df565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200028357600080fd5b505af115801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be9190620007df565b6001600160a01b031660a0819052620002d99060016200045b565b60a051620002e9906001620004d5565b60c880808069d3c21bcecceda10000006103e86200030982601462000820565b62000315919062000842565b6007556103e86200032882601462000820565b62000334919062000842565b6009556127106200034782600562000820565b62000353919062000842565b600855600f85905560108490556200036c848662000865565b600e556012839055601382905562000385828462000865565b601155600554600680546001600160a01b0319166001600160a01b039092169182179055620003b690600162000529565b620003c330600162000529565b620003d261dead600162000529565b600654620003eb906001600160a01b0316600162000529565b6200040a620004026005546001600160a01b031690565b60016200045b565b620004173060016200045b565b6200042661dead60016200045b565b6006546200043f906001600160a01b031660016200045b565b6200044b3382620005d3565b505050505050620008bd565b3390565b6005546001600160a01b03163314620004aa5760405162461bcd60e51b815260206004820181905260248201526000805160206200434983398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005745760405162461bcd60e51b81526020600482018190526024820152600080516020620043498339815191526044820152606401620004a1565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200062b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004a1565b6200064781600254620006cf60201b6200207e1790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200067a9183906200207e620006cf821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080620006de838562000865565b905083811015620007325760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004a1565b9392505050565b828054620007479062000880565b90600052602060002090601f0160209004810192826200076b5760008555620007b6565b82601f106200078657805160ff1916838001178555620007b6565b82800160010185558215620007b6579182015b82811115620007b657825182559160200191906001019062000799565b50620007c4929150620007c8565b5090565b5b80821115620007c45760008155600101620007c9565b600060208284031215620007f257600080fd5b81516001600160a01b03811681146200073257600080fd5b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200083d576200083d6200080a565b500290565b6000826200086057634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200087b576200087b6200080a565b500190565b600181811c908216806200089557607f821691505b60208210811415620008b757634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051613a12620009376000396000818161063901528181610e9b0152818161115a0152818161163201526125c501526000818161049b01528181610eda015281816111bf01528181612587015281816131e1015281816132a9015281816132fe0152818161337801526133f90152613a126000f3fe6080604052600436106103b15760003560e01c80638fc85959116101e7578063bbc0c7421161010d578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610b14578063f2fde38b14610b2a578063f637434214610b4a578063f8b45b0514610b6057600080fd5b8063d85ba06314610a8d578063dd62ed3e14610aa3578063e2f4560514610ae9578063e884f26014610aff57600080fd5b8063c876d0b9116100dc578063c876d0b914610a1d578063c8c8ebe414610a37578063d257b34f14610a4d578063d7726e8a14610a6d57600080fd5b8063bbc0c7421461098e578063bfd79284146109ad578063c0246668146109dd578063c18bc195146109fd57600080fd5b8063a457c2d711610185578063aacebbe311610154578063aacebbe314610908578063ae0a687514610928578063afb5cb671461093e578063b62496f51461095e57600080fd5b8063a457c2d714610892578063a46e2ee8146108b2578063a7bd8976146108c8578063a9059cbb146108e857600080fd5b806395d89b41116101c157806395d89b41146108285780639a7a23d61461083d578063a158657c1461085d578063a302e4e61461087d57600080fd5b80638fc85959146107d857806392136913146107f2578063924de9b71461080857600080fd5b8063313ce567116102d75780636ddd17131161026a5780637571336a116102395780637571336a1461076457806375f0a874146107845780637bce5a04146107a45780638da5cb5b146107ba57600080fd5b80636ddd1713146106e457806370a0823114610704578063715018a61461073a578063751039fc1461074f57600080fd5b80634a62bb65116102a65780634a62bb651461065b5780634fbee1931461067557806366ca9b83146106ae5780636a486a8e146106ce57600080fd5b8063313ce567146105d657806339509351146105f257806342405d131461061257806349bd5a5e1461062757600080fd5b806318160ddd1161034f578063203e727e1161031e578063203e727e1461056057806323b872dd1461058057806327c8f835146105a05780632cd21ebb146105b657600080fd5b806318160ddd146104f55780631a8145bb146105145780631bb9d7771461052a5780631f3fed8f1461054a57600080fd5b80631027ff871161038b5780631027ff871461043a57806310d5de53146104595780631694505e1461048957806316a2f82a146104d557600080fd5b806302dbd8f8146103bd57806306fdde03146103df578063095ea7b31461040a57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103dd6103d83660046134a7565b610b76565b005b3480156103eb57600080fd5b506103f4610c31565b60405161040191906134c9565b60405180910390f35b34801561041657600080fd5b5061042a610425366004613554565b610cc3565b6040519015158152602001610401565b34801561044657600080fd5b50600d5461042a90610100900460ff1681565b34801561046557600080fd5b5061042a610474366004613580565b601a6020526000908152604090205460ff1681565b34801561049557600080fd5b506104bd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610401565b3480156104e157600080fd5b506103dd6104f0366004613580565b610cda565b34801561050157600080fd5b506002545b604051908152602001610401565b34801561052057600080fd5b5061050660145481565b34801561053657600080fd5b506103dd610545366004613580565b610df9565b34801561055657600080fd5b5061050660155481565b34801561056c57600080fd5b506103dd61057b36600461359d565b610f3b565b34801561058c57600080fd5b5061042a61059b3660046135b6565b611044565b3480156105ac57600080fd5b506104bd61dead81565b3480156105c257600080fd5b506103dd6105d13660046135f7565b6110ad565b3480156105e257600080fd5b5060405160128152602001610401565b3480156105fe57600080fd5b5061042a61060d366004613554565b61128e565b34801561061e57600080fd5b506103dd6112c4565b34801561063357600080fd5b506104bd7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066757600080fd5b50600a5461042a9060ff1681565b34801561068157600080fd5b5061042a610690366004613580565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156106ba57600080fd5b506103dd6106c93660046134a7565b61133a565b3480156106da57600080fd5b5061050660115481565b3480156106f057600080fd5b50600a5461042a9062010000900460ff1681565b34801561071057600080fd5b5061050661071f366004613580565b6001600160a01b031660009081526020819052604090205490565b34801561074657600080fd5b506103dd6113ec565b34801561075b57600080fd5b5061042a61148b565b34801561077057600080fd5b506103dd61077f36600461367a565b6114e6565b34801561079057600080fd5b506006546104bd906001600160a01b031681565b3480156107b057600080fd5b5061050660105481565b3480156107c657600080fd5b506005546001600160a01b03166104bd565b3480156107e457600080fd5b5060185461042a9060ff1681565b3480156107fe57600080fd5b5061050660135481565b34801561081457600080fd5b506103dd6108233660046136b3565b611559565b34801561083457600080fd5b506103f46115d9565b34801561084957600080fd5b506103dd61085836600461367a565b6115e8565b34801561086957600080fd5b506103dd6108783660046136d0565b6116e2565b34801561088957600080fd5b506103dd6117b0565b34801561089e57600080fd5b5061042a6108ad366004613554565b611804565b3480156108be57600080fd5b5061050660165481565b3480156108d457600080fd5b506103dd6108e3366004613580565b611853565b3480156108f457600080fd5b5061042a610903366004613554565b6118bc565b34801561091457600080fd5b506103dd610923366004613580565b6118c9565b34801561093457600080fd5b5061050660175481565b34801561094a57600080fd5b506103dd6109593660046136f5565b61197b565b34801561096a57600080fd5b5061042a610979366004613580565b601b6020526000908152604090205460ff1681565b34801561099a57600080fd5b50600a5461042a90610100900460ff1681565b3480156109b957600080fd5b5061042a6109c8366004613580565b600c6020526000908152604090205460ff1681565b3480156109e957600080fd5b506103dd6109f836600461367a565b611b46565b348015610a0957600080fd5b506103dd610a1836600461359d565b611bed565b348015610a2957600080fd5b50600d5461042a9060ff1681565b348015610a4357600080fd5b5061050660075481565b348015610a5957600080fd5b5061042a610a6836600461359d565b611cf5565b348015610a7957600080fd5b506103dd610a883660046134a7565b611e76565b348015610a9957600080fd5b50610506600e5481565b348015610aaf57600080fd5b50610506610abe366004613737565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610af557600080fd5b5061050660085481565b348015610b0b57600080fd5b5061042a611ef6565b348015610b2057600080fd5b50610506600f5481565b348015610b3657600080fd5b506103dd610b45366004613580565b611f51565b348015610b5657600080fd5b5061050660125481565b348015610b6c57600080fd5b5061050660095481565b6005546001600160a01b03163314610bc35760405162461bcd60e51b8152602060048201819052602482015260008051602061399883398151915260448201526064015b60405180910390fd5b60128290556013819055610bd7818361377b565b60118190556102581015610c2d5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203625206f72206c657373000000006044820152606401610bba565b5050565b606060038054610c4090613793565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6c90613793565b8015610cb95780601f10610c8e57610100808354040283529160200191610cb9565b820191906000526020600020905b815481529060010190602001808311610c9c57829003601f168201915b5050505050905090565b6000610cd03384846120e4565b5060015b92915050565b6005546001600160a01b03163314610d225760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b03811660009081526019602052604090205460ff16610db05760405162461bcd60e51b815260206004820152602360248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e206660448201527f65657300000000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b038116600081815260196020526040808220805460ff19169055517f346f6c42af1ce4b7d7951f3fa40a2fb1e78c80ab0f3d76fb4f9fec269d568f0d9190a250565b6005546001600160a01b03163314610e415760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600d54610100900460ff1615610e995760405162461bcd60e51b815260206004820152601d60248201527f426c6f636b696e6720626f74207269676874732072656e6f756e6365640000006044820152606401610bba565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161415610ed857600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161415610f1757600080fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6005546001600160a01b03163314610f835760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b670de0b6b3a76400006103e8610f9860025490565b610fa39060016137ce565b610fad91906137ed565b610fb791906137ed565b81101561102c5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201527f6c6f776572207468616e20302e312500000000000000000000000000000000006064820152608401610bba565b61103e81670de0b6b3a76400006137ce565b60075550565b600061105184848461223d565b6110a3843361109e85604051806060016040528060288152602001613970602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612c7f565b6120e4565b5060019392505050565b6005546001600160a01b031633146110f55760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600d54610100900460ff161561114d5760405162461bcd60e51b815260206004820152601d60248201527f426c6f636b696e6720626f74207269676874732072656e6f756e6365640000006044820152606401610bba565b60005b81811015611289577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168383838181106111945761119461380f565b90506020020160208101906111a99190613580565b6001600160a01b031614156111bd57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168383838181106111f9576111f961380f565b905060200201602081019061120e9190613580565b6001600160a01b0316141561122257600080fd5b6001600c600085858581811061123a5761123a61380f565b905060200201602081019061124f9190613580565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061128181613825565b915050611150565b505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cd091859061109e908661207e565b6005546001600160a01b0316331461130c5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6005546001600160a01b031633146113825760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600f8290556010819055611396818361377b565b600e8190556102581015610c2d5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203625206f72206c657373000000006044820152606401610bba565b6005546001600160a01b031633146114345760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805473ffffffffffffffffffffffffffffffffffffffff19169055565b6005546000906001600160a01b031633146114d65760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b50600a805460ff19169055600190565b6005546001600160a01b0316331461152e5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115a15760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600a805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b606060048054610c4090613793565b6005546001600160a01b031633146116305760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156116d85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bba565b610c2d8282612cb9565b6005546001600160a01b0316331461172a5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b4782111561177a5760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610bba565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611289573d6000803e3d6000fd5b6005546001600160a01b031633146117f85760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6018805460ff19169055565b6000610cd0338461109e856040518060600160405280602581526020016139b8602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612c7f565b6005546001600160a01b0316331461189b5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000610cd033848461223d565b6005546001600160a01b031633146119115760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a36006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546001600160a01b031633146119c35760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015283906001600160a01b038216906370a082319060240160206040518083038186803b158015611a1d57600080fd5b505afa158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a559190613840565b831115611aa45760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610bba565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820185905282169063a9059cbb90604401602060405180830381600087803b158015611b0757600080fd5b505af1158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3f9190613859565b5050505050565b6005546001600160a01b03163314611b8e5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611c355760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b670de0b6b3a76400006103e8611c4a60025490565b611c559060056137ce565b611c5f91906137ed565b611c6991906137ed565b811015611cdd5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060448201527f302e3525000000000000000000000000000000000000000000000000000000006064820152608401610bba565b611cef81670de0b6b3a76400006137ce565b60095550565b6005546000906001600160a01b03163314611d405760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b620186a0611d4d60025490565b611d589060016137ce565b611d6291906137ed565b821015611dd75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610bba565b6103e8611de360025490565b611dee9060056137ce565b611df891906137ed565b821115611e6d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006064820152608401610bba565b50600855600190565b6005546001600160a01b03163314611ebe5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff1662010100179055601691909155601755565b6005546000906001600160a01b03163314611f415760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b50600d805460ff19169055600190565b6005546001600160a01b03163314611f995760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b0381166120155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610bba565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60008061208b838561377b565b9050838110156120dd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bba565b9392505050565b6001600160a01b03831661215f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0382166121db5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0382166123355760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610bba565b600081116123ab5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0383166000908152600c602052604090205460ff161580156123ed57506001600160a01b0382166000908152600c602052604090205460ff16155b6124395760405162461bcd60e51b815260206004820152601c60248201527f596f7572206163636f756e7420697320626c6f636b4c697374656421000000006044820152606401610bba565b8061244a5761128983836000612d0d565b600a5460ff1615612945576005546001600160a01b0384811691161480159061248157506005546001600160a01b03838116911614155b801561249557506001600160a01b03821615155b80156124ac57506001600160a01b03821661dead14155b80156124c25750600554600160a01b900460ff16155b1561294557600a54610100900460ff16612561576001600160a01b03831660009081526019602052604090205460ff168061251557506001600160a01b03821660009081526019602052604090205460ff165b6125615760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610bba565b600d5460ff16156126bc576005546001600160a01b038381169116148015906125bc57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156125fa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156126bc57326000908152600b602052604090205443116126a95760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60648201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000608482015260a401610bba565b326000908152600b602052604090204390555b6001600160a01b0383166000908152601b602052604090205460ff1680156126fd57506001600160a01b0382166000908152601a602052604090205460ff16155b156127f35760075481111561277a5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006064820152608401610bba565b6009546001600160a01b0383166000908152602081905260409020546127a0908361377b565b11156127ee5760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c6574206578636565646564000000000000000000000000006044820152606401610bba565b612945565b6001600160a01b0382166000908152601b602052604090205460ff16801561283457506001600160a01b0383166000908152601a602052604090205460ff16155b156128b1576007548111156127ee5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006064820152608401610bba565b6001600160a01b0382166000908152601a602052604090205460ff16612945576009546001600160a01b0383166000908152602081905260409020546128f7908361377b565b11156129455760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c6574206578636565646564000000000000000000000000006044820152606401610bba565b30600090815260208190526040902054600854811080159081906129715750600a5462010000900460ff165b80156129875750600554600160a01b900460ff16155b80156129ac57506001600160a01b0385166000908152601b602052604090205460ff16155b80156129d157506001600160a01b03851660009081526019602052604090205460ff16155b80156129f657506001600160a01b03841660009081526019602052604090205460ff16155b15612a5a57600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055612a31612ec2565b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555b6005546001600160a01b03861660009081526019602052604090205460ff600160a01b909204821615911680612aa857506001600160a01b03851660009081526019602052604090205460ff165b15612ab1575060005b60008115612c6b576001600160a01b0386166000908152601b602052604081205460ff168015612ae357506000601154115b15612b915760185460ff1615612af857506017545b612b1c612710612b1683601154612b0f919061377b565b899061306b565b90613106565b915060115460125483612b2f91906137ce565b612b3991906137ed565b60146000828254612b4a919061377b565b9091555050601154601354612b5f90846137ce565b612b6991906137ed565b60156000828254612b7a919061377b565b90915550612b8a90508287613876565b9550612c58565b6001600160a01b0388166000908152601b602052604090205460ff168015612bbb57506000600e54115b15612c585760185460ff1615612bd057506016545b612be7612710612b1683600e54612b0f919061377b565b9150600e54600f5483612bfa91906137ce565b612c0491906137ed565b60146000828254612c15919061377b565b9091555050600e54601054612c2a90846137ce565b612c3491906137ed565b60156000828254612c45919061377b565b90915550612c5590508287613876565b95505b8115612c6957612c69883084612d0d565b505b612c76878787612d0d565b50505050505050565b60008184841115612ca35760405162461bcd60e51b8152600401610bba91906134c9565b506000612cb08486613876565b95945050505050565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612d895760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b038216612e055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610bba565b612e428160405180606001604052806026815260200161394a602691396001600160a01b0386166000908152602081905260409020549190612c7f565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612e71908261207e565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612230565b3060009081526020819052604081205490506000601554601454612ee6919061377b565b90506000821580612ef5575081155b15612eff57505050565b600854612f0d9060146137ce565b831115612f2557600854612f229060146137ce565b92505b600060028360145486612f3891906137ce565b612f4291906137ed565b612f4c91906137ed565b90506000612f5a8583613148565b905047612f668261318a565b6000612f724783613148565b90506000612f8f87612b166015548561306b90919063ffffffff16565b90506000612f9d8284613876565b6000601481905560155590508515801590612fb85750600081115b1561300b57612fc78682613372565b601454604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613058576040519150601f19603f3d011682016040523d82523d6000602084013e61305d565b606091505b505050505050505050505050565b60008261307a57506000610cd4565b600061308683856137ce565b90508261309385836137ed565b146120dd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610bba565b60006120dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613479565b60006120dd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c7f565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131bf576131bf61380f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561323857600080fd5b505afa15801561324c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613270919061388d565b816001815181106132835761328361380f565b60200260200101906001600160a01b031690816001600160a01b0316815250506132ce307f0000000000000000000000000000000000000000000000000000000000000000846120e4565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061333c9085906000908690309042906004016138aa565b600060405180830381600087803b15801561335657600080fd5b505af115801561336a573d6000803e3d6000fd5b505050505050565b61339d307f0000000000000000000000000000000000000000000000000000000000000000846120e4565b6006546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b15801561344057600080fd5b505af1158015613454573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b3f919061391b565b6000818361349a5760405162461bcd60e51b8152600401610bba91906134c9565b506000612cb084866137ed565b600080604083850312156134ba57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156134f6578581018301518582016040015282016134da565b81811115613508576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6001600160a01b038116811461355157600080fd5b50565b6000806040838503121561356757600080fd5b82356135728161353c565b946020939093013593505050565b60006020828403121561359257600080fd5b81356120dd8161353c565b6000602082840312156135af57600080fd5b5035919050565b6000806000606084860312156135cb57600080fd5b83356135d68161353c565b925060208401356135e68161353c565b929592945050506040919091013590565b6000806020838503121561360a57600080fd5b823567ffffffffffffffff8082111561362257600080fd5b818501915085601f83011261363657600080fd5b81358181111561364557600080fd5b8660208260051b850101111561365a57600080fd5b60209290920196919550909350505050565b801515811461355157600080fd5b6000806040838503121561368d57600080fd5b82356136988161353c565b915060208301356136a88161366c565b809150509250929050565b6000602082840312156136c557600080fd5b81356120dd8161366c565b600080604083850312156136e357600080fd5b8235915060208301356136a88161353c565b60008060006060848603121561370a57600080fd5b83356137158161353c565b925060208401359150604084013561372c8161353c565b809150509250925092565b6000806040838503121561374a57600080fd5b82356137558161353c565b915060208301356136a88161353c565b634e487b7160e01b600052601160045260246000fd5b6000821982111561378e5761378e613765565b500190565b600181811c908216806137a757607f821691505b602082108114156137c857634e487b7160e01b600052602260045260246000fd5b50919050565b60008160001904831182151516156137e8576137e8613765565b500290565b60008261380a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060001982141561383957613839613765565b5060010190565b60006020828403121561385257600080fd5b5051919050565b60006020828403121561386b57600080fd5b81516120dd8161366c565b60008282101561388857613888613765565b500390565b60006020828403121561389f57600080fd5b81516120dd8161353c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138fa5784516001600160a01b0316835293830193918301916001016138d5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561393057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b56b8603d8531d552e7f0f957b0ba1bccb8a27bd9e237852ded69000aee94abb64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103b15760003560e01c80638fc85959116101e7578063bbc0c7421161010d578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610b14578063f2fde38b14610b2a578063f637434214610b4a578063f8b45b0514610b6057600080fd5b8063d85ba06314610a8d578063dd62ed3e14610aa3578063e2f4560514610ae9578063e884f26014610aff57600080fd5b8063c876d0b9116100dc578063c876d0b914610a1d578063c8c8ebe414610a37578063d257b34f14610a4d578063d7726e8a14610a6d57600080fd5b8063bbc0c7421461098e578063bfd79284146109ad578063c0246668146109dd578063c18bc195146109fd57600080fd5b8063a457c2d711610185578063aacebbe311610154578063aacebbe314610908578063ae0a687514610928578063afb5cb671461093e578063b62496f51461095e57600080fd5b8063a457c2d714610892578063a46e2ee8146108b2578063a7bd8976146108c8578063a9059cbb146108e857600080fd5b806395d89b41116101c157806395d89b41146108285780639a7a23d61461083d578063a158657c1461085d578063a302e4e61461087d57600080fd5b80638fc85959146107d857806392136913146107f2578063924de9b71461080857600080fd5b8063313ce567116102d75780636ddd17131161026a5780637571336a116102395780637571336a1461076457806375f0a874146107845780637bce5a04146107a45780638da5cb5b146107ba57600080fd5b80636ddd1713146106e457806370a0823114610704578063715018a61461073a578063751039fc1461074f57600080fd5b80634a62bb65116102a65780634a62bb651461065b5780634fbee1931461067557806366ca9b83146106ae5780636a486a8e146106ce57600080fd5b8063313ce567146105d657806339509351146105f257806342405d131461061257806349bd5a5e1461062757600080fd5b806318160ddd1161034f578063203e727e1161031e578063203e727e1461056057806323b872dd1461058057806327c8f835146105a05780632cd21ebb146105b657600080fd5b806318160ddd146104f55780631a8145bb146105145780631bb9d7771461052a5780631f3fed8f1461054a57600080fd5b80631027ff871161038b5780631027ff871461043a57806310d5de53146104595780631694505e1461048957806316a2f82a146104d557600080fd5b806302dbd8f8146103bd57806306fdde03146103df578063095ea7b31461040a57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103dd6103d83660046134a7565b610b76565b005b3480156103eb57600080fd5b506103f4610c31565b60405161040191906134c9565b60405180910390f35b34801561041657600080fd5b5061042a610425366004613554565b610cc3565b6040519015158152602001610401565b34801561044657600080fd5b50600d5461042a90610100900460ff1681565b34801561046557600080fd5b5061042a610474366004613580565b601a6020526000908152604090205460ff1681565b34801561049557600080fd5b506104bd7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610401565b3480156104e157600080fd5b506103dd6104f0366004613580565b610cda565b34801561050157600080fd5b506002545b604051908152602001610401565b34801561052057600080fd5b5061050660145481565b34801561053657600080fd5b506103dd610545366004613580565b610df9565b34801561055657600080fd5b5061050660155481565b34801561056c57600080fd5b506103dd61057b36600461359d565b610f3b565b34801561058c57600080fd5b5061042a61059b3660046135b6565b611044565b3480156105ac57600080fd5b506104bd61dead81565b3480156105c257600080fd5b506103dd6105d13660046135f7565b6110ad565b3480156105e257600080fd5b5060405160128152602001610401565b3480156105fe57600080fd5b5061042a61060d366004613554565b61128e565b34801561061e57600080fd5b506103dd6112c4565b34801561063357600080fd5b506104bd7f000000000000000000000000db2df81894da268795b44fede9d707f940e4529a81565b34801561066757600080fd5b50600a5461042a9060ff1681565b34801561068157600080fd5b5061042a610690366004613580565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156106ba57600080fd5b506103dd6106c93660046134a7565b61133a565b3480156106da57600080fd5b5061050660115481565b3480156106f057600080fd5b50600a5461042a9062010000900460ff1681565b34801561071057600080fd5b5061050661071f366004613580565b6001600160a01b031660009081526020819052604090205490565b34801561074657600080fd5b506103dd6113ec565b34801561075b57600080fd5b5061042a61148b565b34801561077057600080fd5b506103dd61077f36600461367a565b6114e6565b34801561079057600080fd5b506006546104bd906001600160a01b031681565b3480156107b057600080fd5b5061050660105481565b3480156107c657600080fd5b506005546001600160a01b03166104bd565b3480156107e457600080fd5b5060185461042a9060ff1681565b3480156107fe57600080fd5b5061050660135481565b34801561081457600080fd5b506103dd6108233660046136b3565b611559565b34801561083457600080fd5b506103f46115d9565b34801561084957600080fd5b506103dd61085836600461367a565b6115e8565b34801561086957600080fd5b506103dd6108783660046136d0565b6116e2565b34801561088957600080fd5b506103dd6117b0565b34801561089e57600080fd5b5061042a6108ad366004613554565b611804565b3480156108be57600080fd5b5061050660165481565b3480156108d457600080fd5b506103dd6108e3366004613580565b611853565b3480156108f457600080fd5b5061042a610903366004613554565b6118bc565b34801561091457600080fd5b506103dd610923366004613580565b6118c9565b34801561093457600080fd5b5061050660175481565b34801561094a57600080fd5b506103dd6109593660046136f5565b61197b565b34801561096a57600080fd5b5061042a610979366004613580565b601b6020526000908152604090205460ff1681565b34801561099a57600080fd5b50600a5461042a90610100900460ff1681565b3480156109b957600080fd5b5061042a6109c8366004613580565b600c6020526000908152604090205460ff1681565b3480156109e957600080fd5b506103dd6109f836600461367a565b611b46565b348015610a0957600080fd5b506103dd610a1836600461359d565b611bed565b348015610a2957600080fd5b50600d5461042a9060ff1681565b348015610a4357600080fd5b5061050660075481565b348015610a5957600080fd5b5061042a610a6836600461359d565b611cf5565b348015610a7957600080fd5b506103dd610a883660046134a7565b611e76565b348015610a9957600080fd5b50610506600e5481565b348015610aaf57600080fd5b50610506610abe366004613737565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610af557600080fd5b5061050660085481565b348015610b0b57600080fd5b5061042a611ef6565b348015610b2057600080fd5b50610506600f5481565b348015610b3657600080fd5b506103dd610b45366004613580565b611f51565b348015610b5657600080fd5b5061050660125481565b348015610b6c57600080fd5b5061050660095481565b6005546001600160a01b03163314610bc35760405162461bcd60e51b8152602060048201819052602482015260008051602061399883398151915260448201526064015b60405180910390fd5b60128290556013819055610bd7818361377b565b60118190556102581015610c2d5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203625206f72206c657373000000006044820152606401610bba565b5050565b606060038054610c4090613793565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6c90613793565b8015610cb95780601f10610c8e57610100808354040283529160200191610cb9565b820191906000526020600020905b815481529060010190602001808311610c9c57829003601f168201915b5050505050905090565b6000610cd03384846120e4565b5060015b92915050565b6005546001600160a01b03163314610d225760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b03811660009081526019602052604090205460ff16610db05760405162461bcd60e51b815260206004820152602360248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e206660448201527f65657300000000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b038116600081815260196020526040808220805460ff19169055517f346f6c42af1ce4b7d7951f3fa40a2fb1e78c80ab0f3d76fb4f9fec269d568f0d9190a250565b6005546001600160a01b03163314610e415760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600d54610100900460ff1615610e995760405162461bcd60e51b815260206004820152601d60248201527f426c6f636b696e6720626f74207269676874732072656e6f756e6365640000006044820152606401610bba565b7f000000000000000000000000db2df81894da268795b44fede9d707f940e4529a6001600160a01b0316816001600160a01b03161415610ed857600080fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316816001600160a01b03161415610f1757600080fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6005546001600160a01b03163314610f835760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b670de0b6b3a76400006103e8610f9860025490565b610fa39060016137ce565b610fad91906137ed565b610fb791906137ed565b81101561102c5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201527f6c6f776572207468616e20302e312500000000000000000000000000000000006064820152608401610bba565b61103e81670de0b6b3a76400006137ce565b60075550565b600061105184848461223d565b6110a3843361109e85604051806060016040528060288152602001613970602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612c7f565b6120e4565b5060019392505050565b6005546001600160a01b031633146110f55760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600d54610100900460ff161561114d5760405162461bcd60e51b815260206004820152601d60248201527f426c6f636b696e6720626f74207269676874732072656e6f756e6365640000006044820152606401610bba565b60005b81811015611289577f000000000000000000000000db2df81894da268795b44fede9d707f940e4529a6001600160a01b03168383838181106111945761119461380f565b90506020020160208101906111a99190613580565b6001600160a01b031614156111bd57600080fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03168383838181106111f9576111f961380f565b905060200201602081019061120e9190613580565b6001600160a01b0316141561122257600080fd5b6001600c600085858581811061123a5761123a61380f565b905060200201602081019061124f9190613580565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061128181613825565b915050611150565b505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cd091859061109e908661207e565b6005546001600160a01b0316331461130c5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6005546001600160a01b031633146113825760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600f8290556010819055611396818361377b565b600e8190556102581015610c2d5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203625206f72206c657373000000006044820152606401610bba565b6005546001600160a01b031633146114345760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805473ffffffffffffffffffffffffffffffffffffffff19169055565b6005546000906001600160a01b031633146114d65760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b50600a805460ff19169055600190565b6005546001600160a01b0316331461152e5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115a15760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600a805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b606060048054610c4090613793565b6005546001600160a01b031633146116305760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b7f000000000000000000000000db2df81894da268795b44fede9d707f940e4529a6001600160a01b0316826001600160a01b031614156116d85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bba565b610c2d8282612cb9565b6005546001600160a01b0316331461172a5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b4782111561177a5760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610bba565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611289573d6000803e3d6000fd5b6005546001600160a01b031633146117f85760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6018805460ff19169055565b6000610cd0338461109e856040518060600160405280602581526020016139b8602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612c7f565b6005546001600160a01b0316331461189b5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000610cd033848461223d565b6005546001600160a01b031633146119115760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a36006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546001600160a01b031633146119c35760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015283906001600160a01b038216906370a082319060240160206040518083038186803b158015611a1d57600080fd5b505afa158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a559190613840565b831115611aa45760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610bba565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820185905282169063a9059cbb90604401602060405180830381600087803b158015611b0757600080fd5b505af1158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3f9190613859565b5050505050565b6005546001600160a01b03163314611b8e5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611c355760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b670de0b6b3a76400006103e8611c4a60025490565b611c559060056137ce565b611c5f91906137ed565b611c6991906137ed565b811015611cdd5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060448201527f302e3525000000000000000000000000000000000000000000000000000000006064820152608401610bba565b611cef81670de0b6b3a76400006137ce565b60095550565b6005546000906001600160a01b03163314611d405760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b620186a0611d4d60025490565b611d589060016137ce565b611d6291906137ed565b821015611dd75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610bba565b6103e8611de360025490565b611dee9060056137ce565b611df891906137ed565b821115611e6d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006064820152608401610bba565b50600855600190565b6005546001600160a01b03163314611ebe5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff1662010100179055601691909155601755565b6005546000906001600160a01b03163314611f415760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b50600d805460ff19169055600190565b6005546001600160a01b03163314611f995760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b0381166120155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610bba565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60008061208b838561377b565b9050838110156120dd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bba565b9392505050565b6001600160a01b03831661215f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0382166121db5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0382166123355760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610bba565b600081116123ab5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0383166000908152600c602052604090205460ff161580156123ed57506001600160a01b0382166000908152600c602052604090205460ff16155b6124395760405162461bcd60e51b815260206004820152601c60248201527f596f7572206163636f756e7420697320626c6f636b4c697374656421000000006044820152606401610bba565b8061244a5761128983836000612d0d565b600a5460ff1615612945576005546001600160a01b0384811691161480159061248157506005546001600160a01b03838116911614155b801561249557506001600160a01b03821615155b80156124ac57506001600160a01b03821661dead14155b80156124c25750600554600160a01b900460ff16155b1561294557600a54610100900460ff16612561576001600160a01b03831660009081526019602052604090205460ff168061251557506001600160a01b03821660009081526019602052604090205460ff165b6125615760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610bba565b600d5460ff16156126bc576005546001600160a01b038381169116148015906125bc57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156125fa57507f000000000000000000000000db2df81894da268795b44fede9d707f940e4529a6001600160a01b0316826001600160a01b031614155b156126bc57326000908152600b602052604090205443116126a95760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60648201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000608482015260a401610bba565b326000908152600b602052604090204390555b6001600160a01b0383166000908152601b602052604090205460ff1680156126fd57506001600160a01b0382166000908152601a602052604090205460ff16155b156127f35760075481111561277a5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006064820152608401610bba565b6009546001600160a01b0383166000908152602081905260409020546127a0908361377b565b11156127ee5760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c6574206578636565646564000000000000000000000000006044820152606401610bba565b612945565b6001600160a01b0382166000908152601b602052604090205460ff16801561283457506001600160a01b0383166000908152601a602052604090205460ff16155b156128b1576007548111156127ee5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006064820152608401610bba565b6001600160a01b0382166000908152601a602052604090205460ff16612945576009546001600160a01b0383166000908152602081905260409020546128f7908361377b565b11156129455760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c6574206578636565646564000000000000000000000000006044820152606401610bba565b30600090815260208190526040902054600854811080159081906129715750600a5462010000900460ff165b80156129875750600554600160a01b900460ff16155b80156129ac57506001600160a01b0385166000908152601b602052604090205460ff16155b80156129d157506001600160a01b03851660009081526019602052604090205460ff16155b80156129f657506001600160a01b03841660009081526019602052604090205460ff16155b15612a5a57600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055612a31612ec2565b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555b6005546001600160a01b03861660009081526019602052604090205460ff600160a01b909204821615911680612aa857506001600160a01b03851660009081526019602052604090205460ff165b15612ab1575060005b60008115612c6b576001600160a01b0386166000908152601b602052604081205460ff168015612ae357506000601154115b15612b915760185460ff1615612af857506017545b612b1c612710612b1683601154612b0f919061377b565b899061306b565b90613106565b915060115460125483612b2f91906137ce565b612b3991906137ed565b60146000828254612b4a919061377b565b9091555050601154601354612b5f90846137ce565b612b6991906137ed565b60156000828254612b7a919061377b565b90915550612b8a90508287613876565b9550612c58565b6001600160a01b0388166000908152601b602052604090205460ff168015612bbb57506000600e54115b15612c585760185460ff1615612bd057506016545b612be7612710612b1683600e54612b0f919061377b565b9150600e54600f5483612bfa91906137ce565b612c0491906137ed565b60146000828254612c15919061377b565b9091555050600e54601054612c2a90846137ce565b612c3491906137ed565b60156000828254612c45919061377b565b90915550612c5590508287613876565b95505b8115612c6957612c69883084612d0d565b505b612c76878787612d0d565b50505050505050565b60008184841115612ca35760405162461bcd60e51b8152600401610bba91906134c9565b506000612cb08486613876565b95945050505050565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612d895760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b038216612e055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610bba565b612e428160405180606001604052806026815260200161394a602691396001600160a01b0386166000908152602081905260409020549190612c7f565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612e71908261207e565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612230565b3060009081526020819052604081205490506000601554601454612ee6919061377b565b90506000821580612ef5575081155b15612eff57505050565b600854612f0d9060146137ce565b831115612f2557600854612f229060146137ce565b92505b600060028360145486612f3891906137ce565b612f4291906137ed565b612f4c91906137ed565b90506000612f5a8583613148565b905047612f668261318a565b6000612f724783613148565b90506000612f8f87612b166015548561306b90919063ffffffff16565b90506000612f9d8284613876565b6000601481905560155590508515801590612fb85750600081115b1561300b57612fc78682613372565b601454604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613058576040519150601f19603f3d011682016040523d82523d6000602084013e61305d565b606091505b505050505050505050505050565b60008261307a57506000610cd4565b600061308683856137ce565b90508261309385836137ed565b146120dd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610bba565b60006120dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613479565b60006120dd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c7f565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131bf576131bf61380f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561323857600080fd5b505afa15801561324c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613270919061388d565b816001815181106132835761328361380f565b60200260200101906001600160a01b031690816001600160a01b0316815250506132ce307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120e4565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061333c9085906000908690309042906004016138aa565b600060405180830381600087803b15801561335657600080fd5b505af115801561336a573d6000803e3d6000fd5b505050505050565b61339d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120e4565b6006546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c4016060604051808303818588803b15801561344057600080fd5b505af1158015613454573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b3f919061391b565b6000818361349a5760405162461bcd60e51b8152600401610bba91906134c9565b506000612cb084866137ed565b600080604083850312156134ba57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156134f6578581018301518582016040015282016134da565b81811115613508576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6001600160a01b038116811461355157600080fd5b50565b6000806040838503121561356757600080fd5b82356135728161353c565b946020939093013593505050565b60006020828403121561359257600080fd5b81356120dd8161353c565b6000602082840312156135af57600080fd5b5035919050565b6000806000606084860312156135cb57600080fd5b83356135d68161353c565b925060208401356135e68161353c565b929592945050506040919091013590565b6000806020838503121561360a57600080fd5b823567ffffffffffffffff8082111561362257600080fd5b818501915085601f83011261363657600080fd5b81358181111561364557600080fd5b8660208260051b850101111561365a57600080fd5b60209290920196919550909350505050565b801515811461355157600080fd5b6000806040838503121561368d57600080fd5b82356136988161353c565b915060208301356136a88161366c565b809150509250929050565b6000602082840312156136c557600080fd5b81356120dd8161366c565b600080604083850312156136e357600080fd5b8235915060208301356136a88161353c565b60008060006060848603121561370a57600080fd5b83356137158161353c565b925060208401359150604084013561372c8161353c565b809150509250925092565b6000806040838503121561374a57600080fd5b82356137558161353c565b915060208301356136a88161353c565b634e487b7160e01b600052601160045260246000fd5b6000821982111561378e5761378e613765565b500190565b600181811c908216806137a757607f821691505b602082108114156137c857634e487b7160e01b600052602260045260246000fd5b50919050565b60008160001904831182151516156137e8576137e8613765565b500290565b60008261380a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060001982141561383957613839613765565b5060010190565b60006020828403121561385257600080fd5b5051919050565b60006020828403121561386b57600080fd5b81516120dd8161366c565b60008282101561388857613888613765565b500390565b60006020828403121561389f57600080fd5b81516120dd8161353c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138fa5784516001600160a01b0316835293830193918301916001016138d5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561393057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b56b8603d8531d552e7f0f957b0ba1bccb8a27bd9e237852ded69000aee94abb64736f6c63430008090033
Deployed Bytecode Sourcemap
29464:16712:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36287:317;;;;;;;;;;-1:-1:-1;36287:317:0;;;;;:::i;:::-;;:::i;:::-;;7620:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9787:169;;;;;;;;;;-1:-1:-1;9787:169:0;;;;;:::i;:::-;;:::i;:::-;;;1572:14:1;;1565:22;1547:41;;1535:2;1520:18;9787:169:0;1407:187:1;30287:37:0;;;;;;;;;;-1:-1:-1;30287:37:0;;;;;;;;;;;30891:64;;;;;;;;;;-1:-1:-1;30891:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29542:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2042:55:1;;;2024:74;;2012:2;1997:18;29542:51:0;1851:253:1;36802:237:0;;;;;;;;;;-1:-1:-1;36802:237:0;;;;;:::i;:::-;;:::i;8740:108::-;;;;;;;;;;-1:-1:-1;8828:12:0;;8740:108;;;2255:25:1;;;2243:2;2228:18;8740:108:0;2109:177:1;30564:33:0;;;;;;;;;;;;;;;;38260:270;;;;;;;;;;-1:-1:-1;38260:270:0;;;;;:::i;:::-;;:::i;30604:33::-;;;;;;;;;;;;;;;;35138:234;;;;;;;;;;-1:-1:-1;35138:234:0;;;;;:::i;:::-;;:::i;10438:355::-;;;;;;;;;;-1:-1:-1;10438:355:0;;;;;:::i;:::-;;:::i;29645:53::-;;;;;;;;;;;;29691:6;29645:53;;38538:382;;;;;;;;;;-1:-1:-1;38538:382:0;;;;;:::i;:::-;;:::i;8582:93::-;;;;;;;;;;-1:-1:-1;8582:93:0;;8665:2;3930:36:1;;3918:2;3903:18;8582:93:0;3788:184:1;11202:218:0;;;;;;;;;;-1:-1:-1;11202:218:0;;;;;:::i;:::-;;:::i;38164:88::-;;;;;;;;;;;;;:::i;29600:38::-;;;;;;;;;;;;;;;29895:33;;;;;;;;;;-1:-1:-1;29895:33:0;;;;;;;;39030:125;;;;;;;;;;-1:-1:-1;39030:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;39119:28:0;39095:4;39119:28;;;:19;:28;;;;;;;;;39030:125;35964:311;;;;;;;;;;-1:-1:-1;35964:311:0;;;;;:::i;:::-;;:::i;30447:28::-;;;;;;;;;;;;;;;;29975:31;;;;;;;;;;-1:-1:-1;29975:31:0;;;;;;;;;;;8911:127;;;;;;;;;;-1:-1:-1;8911:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9012:18:0;8985:7;9012:18;;;;;;;;;;;;8911:127;22085:148;;;;;;;;;;;;;:::i;34346:120::-;;;;;;;;;;;;;:::i;35607:144::-;;;;;;;;;;-1:-1:-1;35607:144:0;;;;;:::i;:::-;;:::i;29737:30::-;;;;;;;;;;-1:-1:-1;29737:30:0;;;;-1:-1:-1;;;;;29737:30:0;;;30404;;;;;;;;;;;;;;;;21443:79;;;;;;;;;;-1:-1:-1;21508:6:0;;-1:-1:-1;;;;;21508:6:0;21443:79;;30715:28;;;;;;;;;;-1:-1:-1;30715:28:0;;;;;;;;30520:31;;;;;;;;;;;;;;;;35851:101;;;;;;;;;;-1:-1:-1;35851:101:0;;;;;:::i;:::-;;:::i;7839:104::-;;;;;;;;;;;;;:::i;37047:244::-;;;;;;;;;;-1:-1:-1;37047:244:0;;;;;:::i;:::-;;:::i;37692:189::-;;;;;;;;;;-1:-1:-1;37692:189:0;;;;;:::i;:::-;;:::i;34211:79::-;;;;;;;;;;;;;:::i;11923:269::-;;;;;;;;;;-1:-1:-1;11923:269:0;;;;;:::i;:::-;;:::i;30646:26::-;;;;;;;;;;;;;;;;38928:94;;;;;;;;;;-1:-1:-1;38928:94:0;;;;;:::i;:::-;;:::i;9251:175::-;;;;;;;;;;-1:-1:-1;9251:175:0;;;;;:::i;:::-;;:::i;37499:181::-;;;;;;;;;;-1:-1:-1;37499:181:0;;;;;:::i;:::-;;:::i;30679:27::-;;;;;;;;;;;;;;;;37889:267;;;;;;;;;;-1:-1:-1;37889:267:0;;;;;:::i;:::-;;:::i;31113:58::-;;;;;;;;;;-1:-1:-1;31113:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29935:33;;;;;;;;;;-1:-1:-1;29935:33:0;;;;;;;;;;;30198:36;;;;;;;;;;-1:-1:-1;30198:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36612:182;;;;;;;;;;-1:-1:-1;36612:182:0;;;;;:::i;:::-;;:::i;35380:215::-;;;;;;;;;;-1:-1:-1;35380:215:0;;;;;:::i;:::-;;:::i;30241:39::-;;;;;;;;;;-1:-1:-1;30241:39:0;;;;;;;;29780:35;;;;;;;;;;;;;;;;34740:386;;;;;;;;;;-1:-1:-1;34740:386:0;;;;;:::i;:::-;;:::i;33972:231::-;;;;;;;;;;-1:-1:-1;33972:231:0;;;;;:::i;:::-;;:::i;30333:27::-;;;;;;;;;;;;;;;;9489:151;;;;;;;;;;-1:-1:-1;9489:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9605:18:0;;;9578:7;9605:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9489:151;29822:33;;;;;;;;;;;;;;;;34531:134;;;;;;;;;;;;;:::i;30367:30::-;;;;;;;;;;;;;;;;22388:244;;;;;;;;;;-1:-1:-1;22388:244:0;;;;;:::i;:::-;;:::i;30482:31::-;;;;;;;;;;;;;;;;29862:24;;;;;;;;;;;;;;;;36287:317;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;;;;;;;;;36387:16:::1;:32:::0;;;36430:16:::1;:32:::0;;;36489:35:::1;36449:13:::0;36406;36489:35:::1;:::i;:::-;36473:13;:51:::0;;;36560:3:::1;-1:-1:-1::0;36543:20:0::1;36535:61;;;::::0;-1:-1:-1;;;36535:61:0;;6800:2:1;36535:61:0::1;::::0;::::1;6782:21:1::0;6839:2;6819:18;;;6812:30;6878;6858:18;;;6851:58;6926:18;;36535:61:0::1;6598:352:1::0;36535:61:0::1;36287:317:::0;;:::o;7620:100::-;7674:13;7707:5;7700:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7620:100;:::o;9787:169::-;9870:4;9887:39;336:10;9910:7;9919:6;9887:8;:39::i;:::-;-1:-1:-1;9944:4:0;9787:169;;;;;:::o;36802:237::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;;;;;36878:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;36870:76;;;::::0;-1:-1:-1;;;36870:76:0;;7599:2:1;36870:76:0::1;::::0;::::1;7581:21:1::0;7638:2;7618:18;;;7611:30;7677:34;7657:18;;;7650:62;7748:5;7728:18;;;7721:33;7771:19;;36870:76:0::1;7397:399:1::0;36870:76:0::1;-1:-1:-1::0;;;;;36957:28:0;::::1;36988:5;36957:28:::0;;;:19:::1;:28;::::0;;;;;:36;;-1:-1:-1;;36957:36:0::1;::::0;;37009:22;::::1;::::0;36988:5;37009:22:::1;36802:237:::0;:::o;38260:270::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;38332:17:::1;::::0;::::1;::::0;::::1;;;38331:18;38323:60;;;::::0;-1:-1:-1;;;38323:60:0;;8003:2:1;38323:60:0::1;::::0;::::1;7985:21:1::0;8042:2;8022:18;;;8015:30;8081:31;8061:18;;;8054:59;8130:18;;38323:60:0::1;7801:353:1::0;38323:60:0::1;38421:13;-1:-1:-1::0;;;;;38402:33:0::1;:7;-1:-1:-1::0;;;;;38402:33:0::1;;;38394:42;;;::::0;::::1;;38474:15;-1:-1:-1::0;;;;;38455:35:0::1;:7;-1:-1:-1::0;;;;;38455:35:0::1;;;38447:44;;;::::0;::::1;;-1:-1:-1::0;;;;;38502:13:0::1;;::::0;;;:4:::1;:13;::::0;;;;:20;;-1:-1:-1;;38502:20:0::1;38518:4;38502:20;::::0;;38260:270::o;35138:234::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;35257:4:::1;35251;35231:13;8828:12:::0;;;8740:108;35231:13:::1;:17;::::0;35247:1:::1;35231:17;:::i;:::-;:24;;;;:::i;:::-;35230:31;;;;:::i;:::-;35220:6;:41;;35212:101;;;::::0;-1:-1:-1;;;35212:101:0;;8873:2:1;35212:101:0::1;::::0;::::1;8855:21:1::0;8912:2;8892:18;;;8885:30;8951:34;8931:18;;;8924:62;9022:17;9002:18;;;8995:45;9057:19;;35212:101:0::1;8671:411:1::0;35212:101:0::1;35347:17;:6:::0;35357::::1;35347:17;:::i;:::-;35324:20;:40:::0;-1:-1:-1;35138:234:0:o;10438:355::-;10578:4;10595:36;10605:6;10613:9;10624:6;10595:9;:36::i;:::-;10642:121;10651:6;336:10;10673:89;10711:6;10673:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10673:19:0;;;;;;:11;:19;;;;;;;;336:10;10673:33;;;;;;;;;;:37;:89::i;:::-;10642:8;:121::i;:::-;-1:-1:-1;10781:4:0;10438:355;;;;;:::o;38538:382::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;38631:17:::1;::::0;::::1;::::0;::::1;;;38630:18;38622:60;;;::::0;-1:-1:-1;;;38622:60:0;;8003:2:1;38622:60:0::1;::::0;::::1;7985:21:1::0;8042:2;8022:18;;;8015:30;8081:31;8061:18;;;8054:59;8130:18;;38622:60:0::1;7801:353:1::0;38622:60:0::1;38697:9;38693:220;38712:19:::0;;::::1;38693:220;;;38784:13;-1:-1:-1::0;;;;;38761:37:0::1;:8;;38770:1;38761:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38761:37:0::1;;;38753:46;;;::::0;::::1;;38845:15;-1:-1:-1::0;;;;;38822:39:0::1;:8;;38831:1;38822:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38822:39:0::1;;;38814:48;;;::::0;::::1;;38897:4;38877;:17;38882:8;;38891:1;38882:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38877:17:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;38877:17:0;:24;;-1:-1:-1;;38877:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38733:3;::::1;::::0;::::1;:::i;:::-;;;;38693:220;;;;38538:382:::0;;:::o;11202:218::-;336:10;11290:4;11339:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11339:34:0;;;;;;;;;;11290:4;;11307:83;;11330:7;;11339:50;;11378:10;11339:38;:50::i;38164:88::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;38220:17:::1;:24:::0;;;::::1;;;::::0;;38164:88::o;35964:311::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;36064:15:::1;:31:::0;;;36106:15:::1;:31:::0;;;36163:33:::1;36124:13:::0;36082;36163:33:::1;:::i;:::-;36148:12;:48:::0;;;36231:3:::1;-1:-1:-1::0;36215:19:0::1;36207:60;;;::::0;-1:-1:-1;;;36207:60:0;;6800:2:1;36207:60:0::1;::::0;::::1;6782:21:1::0;6839:2;6819:18;;;6812:30;6878;6858:18;;;6851:58;6926:18;;36207:60:0::1;6598:352:1::0;22085:148:0;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;22176:6:::1;::::0;22155:40:::1;::::0;22192:1:::1;::::0;-1:-1:-1;;;;;22176:6:0::1;::::0;22155:40:::1;::::0;22192:1;;22155:40:::1;22206:6;:19:::0;;-1:-1:-1;;22206:19:0::1;::::0;;22085:148::o;34346:120::-;21655:6;;34398:4;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;34414:14:0::1;:22:::0;;-1:-1:-1;;34414:22:0::1;::::0;;;34346:120;:::o;35607:144::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;;;;;35697:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;35697:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35607:144::o;35851:101::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;35923:11:::1;:21:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;35851:101::o;7839:104::-;7895:13;7928:7;7921:14;;;;;:::i;37047:244::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;37154:13:::1;-1:-1:-1::0;;;;;37146:21:0::1;:4;-1:-1:-1::0;;;;;37146:21:0::1;;;37138:91;;;::::0;-1:-1:-1;;;37138:91:0;;9678:2:1;37138:91:0::1;::::0;::::1;9660:21:1::0;9717:2;9697:18;;;9690:30;9756:34;9736:18;;;9729:62;9827:27;9807:18;;;9800:55;9872:19;;37138:91:0::1;9476:421:1::0;37138:91:0::1;37242:41;37271:4;37277:5;37242:28;:41::i;37692:189::-:0;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;37797:21:::1;37787:6;:31;;37779:64;;;::::0;-1:-1:-1;;;37779:64:0;;10104:2:1;37779:64:0::1;::::0;::::1;10086:21:1::0;10143:2;10123:18;;;10116:30;10182:22;10162:18;;;10155:50;10222:18;;37779:64:0::1;9902:344:1::0;37779:64:0::1;37854:19;::::0;-1:-1:-1;;;;;37854:11:0;::::1;::::0;:19;::::1;;;::::0;37866:6;;37854:19:::1;::::0;;;37866:6;37854:11;:19;::::1;;;;;;;;;;;;;::::0;::::1;;;;34211:79:::0;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;34265:9:::1;:17:::0;;-1:-1:-1;;34265:17:0::1;::::0;;34211:79::o;11923:269::-;12016:4;12033:129;336:10;12056:7;12065:96;12104:15;12065:96;;;;;;;;;;;;;;;;;336:10;12065:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12065:34:0;;;;;;;;;;;;:38;:96::i;38928:94::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;;;;;38993:13:0::1;39009:5;38993:13:::0;;;:4:::1;:13;::::0;;;;:21;;-1:-1:-1;;38993:21:0::1;::::0;;38928:94::o;9251:175::-;9337:4;9354:42;336:10;9378:9;9389:6;9354:9;:42::i;37499:181::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;37618:15:::1;::::0;37584:50:::1;::::0;-1:-1:-1;;;;;37618:15:0;;::::1;::::0;37584:50;::::1;::::0;::::1;::::0;37618:15:::1;::::0;37584:50:::1;37645:15;:27:::0;;-1:-1:-1;;37645:27:0::1;-1:-1:-1::0;;;;;37645:27:0;;;::::1;::::0;;;::::1;::::0;;37499:181::o;37889:267::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;38056:30:::1;::::0;;;;38080:4:::1;38056:30;::::0;::::1;2024:74:1::0;38014:12:0;;-1:-1:-1;;;;;38056:15:0;::::1;::::0;::::1;::::0;1997:18:1;;38056:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38046:6;:40;;38038:73;;;::::0;-1:-1:-1;;;38038:73:0;;10104:2:1;38038:73:0::1;::::0;::::1;10086:21:1::0;10143:2;10123:18;;;10116:30;10182:22;10162:18;;;10155:50;10222:18;;38038:73:0::1;9902:344:1::0;38038:73:0::1;38122:26;::::0;;;;-1:-1:-1;;;;;10632:55:1;;;38122:26:0::1;::::0;::::1;10614:74:1::0;10704:18;;;10697:34;;;38122:14:0;::::1;::::0;::::1;::::0;10587:18:1;;38122:26:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37981:175;37889:267:::0;;;:::o;36612:182::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;;;;;36697:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;36697:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36752:34;;1547:41:1;;;36752:34:0::1;::::0;1520:18:1;36752:34:0::1;;;;;;;36612:182:::0;;:::o;35380:215::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;35502:4:::1;35496;35476:13;8828:12:::0;;;8740:108;35476:13:::1;:17;::::0;35492:1:::1;35476:17;:::i;:::-;:24;;;;:::i;:::-;35475:31;;;;:::i;:::-;35465:6;:41;;35457:90;;;::::0;-1:-1:-1;;;35457:90:0;;11194:2:1;35457:90:0::1;::::0;::::1;11176:21:1::0;11233:2;11213:18;;;11206:30;11272:34;11252:18;;;11245:62;11343:6;11323:18;;;11316:34;11367:19;;35457:90:0::1;10992:400:1::0;35457:90:0::1;35570:17;:6:::0;35580::::1;35570:17;:::i;:::-;35558:9;:29:::0;-1:-1:-1;35380:215:0:o;34740:386::-;21655:6;;34821:4;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;34878:6:::1;34858:13;8828:12:::0;;;8740:108;34858:13:::1;:17;::::0;34874:1:::1;34858:17;:::i;:::-;:26;;;;:::i;:::-;34845:9;:39;;34837:105;;;::::0;-1:-1:-1;;;34837:105:0;;11599:2:1;34837:105:0::1;::::0;::::1;11581:21:1::0;11638:2;11618:18;;;11611:30;11677:34;11657:18;;;11650:62;11748:23;11728:18;;;11721:51;11789:19;;34837:105:0::1;11397:417:1::0;34837:105:0::1;34994:4;34974:13;8828:12:::0;;;8740:108;34974:13:::1;:17;::::0;34990:1:::1;34974:17;:::i;:::-;:24;;;;:::i;:::-;34961:9;:37;;34953:102;;;::::0;-1:-1:-1;;;34953:102:0;;12021:2:1;34953:102:0::1;::::0;::::1;12003:21:1::0;12060:2;12040:18;;;12033:30;12099:34;12079:18;;;12072:62;12170:22;12150:18;;;12143:50;12210:19;;34953:102:0::1;11819:416:1::0;34953:102:0::1;-1:-1:-1::0;35066:18:0::1;:30:::0;35114:4:::1;::::0;34740:386::o;33972:231::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;34070:13:::1;:20:::0;;34101:18;;;;;;34130:11:::1;:26:::0;;;;34167:12:::1;:28:::0;33972:231::o;34531:134::-;21655:6;;34591:4;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;34607:20:0::1;:28:::0;;-1:-1:-1;;34607:28:0::1;::::0;;;34531:134;:::o;22388:244::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;;;;;22477:22:0;::::1;22469:73;;;::::0;-1:-1:-1;;;22469:73:0;;12442:2:1;22469:73:0::1;::::0;::::1;12424:21:1::0;12481:2;12461:18;;;12454:30;12520:34;12500:18;;;12493:62;12591:8;12571:18;;;12564:36;12617:19;;22469:73:0::1;12240:402:1::0;22469:73:0::1;22579:6;::::0;22558:38:::1;::::0;-1:-1:-1;;;;;22558:38:0;;::::1;::::0;22579:6:::1;::::0;22558:38:::1;::::0;22579:6:::1;::::0;22558:38:::1;22607:6;:17:::0;;-1:-1:-1;;22607:17:0::1;-1:-1:-1::0;;;;;22607:17:0;;;::::1;::::0;;;::::1;::::0;;22388:244::o;16487:181::-;16545:7;;16577:5;16581:1;16577;:5;:::i;:::-;16565:17;;16606:1;16601;:6;;16593:46;;;;-1:-1:-1;;;16593:46:0;;12849:2:1;16593:46:0;;;12831:21:1;12888:2;12868:18;;;12861:30;12927:29;12907:18;;;12900:57;12974:18;;16593:46:0;12647:351:1;16593:46:0;16659:1;16487:181;-1:-1:-1;;;16487:181:0:o;15109:380::-;-1:-1:-1;;;;;15245:19:0;;15237:68;;;;-1:-1:-1;;;15237:68:0;;13205:2:1;15237:68:0;;;13187:21:1;13244:2;13224:18;;;13217:30;13283:34;13263:18;;;13256:62;13354:6;13334:18;;;13327:34;13378:19;;15237:68:0;13003:400:1;15237:68:0;-1:-1:-1;;;;;15324:21:0;;15316:68;;;;-1:-1:-1;;;15316:68:0;;13610:2:1;15316:68:0;;;13592:21:1;13649:2;13629:18;;;13622:30;13688:34;13668:18;;;13661:62;13759:4;13739:18;;;13732:32;13781:19;;15316:68:0;13408:398:1;15316:68:0;-1:-1:-1;;;;;15397:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15449:32;;2255:25:1;;;15449:32:0;;2228:18:1;15449:32:0;;;;;;;;15109:380;;;:::o;39167:4391::-;-1:-1:-1;;;;;39299:18:0;;39291:68;;;;-1:-1:-1;;;39291:68:0;;14013:2:1;39291:68:0;;;13995:21:1;14052:2;14032:18;;;14025:30;14091:34;14071:18;;;14064:62;14162:7;14142:18;;;14135:35;14187:19;;39291:68:0;13811:401:1;39291:68:0;-1:-1:-1;;;;;39378:16:0;;39370:64;;;;-1:-1:-1;;;39370:64:0;;14419:2:1;39370:64:0;;;14401:21:1;14458:2;14438:18;;;14431:30;14497:34;14477:18;;;14470:62;14568:5;14548:18;;;14541:33;14591:19;;39370:64:0;14217:399:1;39370:64:0;39462:1;39453:6;:10;39445:64;;;;-1:-1:-1;;;39445:64:0;;14823:2:1;39445:64:0;;;14805:21:1;14862:2;14842:18;;;14835:30;14901:34;14881:18;;;14874:62;14972:11;14952:18;;;14945:39;15001:19;;39445:64:0;14621:405:1;39445:64:0;-1:-1:-1;;;;;39529:10:0;;;;;;:4;:10;;;;;;;;39528:11;:24;;;;-1:-1:-1;;;;;;39544:8:0;;;;;;:4;:8;;;;;;;;39543:9;39528:24;39520:65;;;;-1:-1:-1;;;39520:65:0;;15233:2:1;39520:65:0;;;15215:21:1;15272:2;15252:18;;;15245:30;15311;15291:18;;;15284:58;15359:18;;39520:65:0;15031:352:1;39520:65:0;39610:11;39607:92;;39638:28;39654:4;39660:2;39664:1;39638:15;:28::i;39607:92::-;39722:14;;;;39719:1836;;;21508:6;;-1:-1:-1;;;;;39774:15:0;;;21508:6;;39774:15;;;;:49;;-1:-1:-1;21508:6:0;;-1:-1:-1;;;;;39810:13:0;;;21508:6;;39810:13;;39774:49;:86;;;;-1:-1:-1;;;;;;39844:16:0;;;;39774:86;:128;;;;-1:-1:-1;;;;;;39881:21:0;;39895:6;39881:21;;39774:128;:158;;;;-1:-1:-1;39924:8:0;;-1:-1:-1;;;39924:8:0;;;;39923:9;39774:158;39752:1792;;;39970:13;;;;;;;39966:148;;-1:-1:-1;;;;;40015:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;40044:23:0;;;;;;:19;:23;;;;;;;;40015:52;40007:87;;;;-1:-1:-1;;;40007:87:0;;15590:2:1;40007:87:0;;;15572:21:1;15629:2;15609:18;;;15602:30;15668:24;15648:18;;;15641:52;15710:18;;40007:87:0;15388:346:1;40007:87:0;40272:20;;;;40268:423;;;21508:6;;-1:-1:-1;;;;;40320:13:0;;;21508:6;;40320:13;;;;:47;;;40351:15;-1:-1:-1;;;;;40337:30:0;:2;-1:-1:-1;;;;;40337:30:0;;;40320:47;:79;;;;;40385:13;-1:-1:-1;;;;;40371:28:0;:2;-1:-1:-1;;;;;40371:28:0;;;40320:79;40316:356;;;40464:9;40435:39;;;;:28;:39;;;;;;40477:12;-1:-1:-1;40427:140:0;;;;-1:-1:-1;;;40427:140:0;;15941:2:1;40427:140:0;;;15923:21:1;15980:2;15960:18;;;15953:30;16019:34;15999:18;;;15992:62;16090:34;16070:18;;;16063:62;16162:11;16141:19;;;16134:40;16191:19;;40427:140:0;15739:477:1;40427:140:0;40623:9;40594:39;;;;:28;:39;;;;;40636:12;40594:54;;40316:356;-1:-1:-1;;;;;40760:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;40796:35:0;;;;;;:31;:35;;;;;;;;40795:36;40760:71;40756:773;;;40874:20;;40864:6;:30;;40856:96;;;;-1:-1:-1;;;40856:96:0;;16423:2:1;40856:96:0;;;16405:21:1;16462:2;16442:18;;;16435:30;16501:34;16481:18;;;16474:62;16572:23;16552:18;;;16545:51;16613:19;;40856:96:0;16221:417:1;40856:96:0;41009:9;;-1:-1:-1;;;;;9012:18:0;;8985:7;9012:18;;;;;;;;;;;40983:22;;:6;:22;:::i;:::-;:35;;40975:67;;;;-1:-1:-1;;;40975:67:0;;16845:2:1;40975:67:0;;;16827:21:1;16884:2;16864:18;;;16857:30;16923:21;16903:18;;;16896:49;16962:18;;40975:67:0;16643:343:1;40975:67:0;40756:773;;;-1:-1:-1;;;;;41139:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;41173:37:0;;;;;;:31;:37;;;;;;;;41172:38;41139:71;41135:394;;;41257:20;;41247:6;:30;;41239:97;;;;-1:-1:-1;;;41239:97:0;;17193:2:1;41239:97:0;;;17175:21:1;17232:2;17212:18;;;17205:30;17271:34;17251:18;;;17244:62;17342:24;17322:18;;;17315:52;17384:19;;41239:97:0;16991:418:1;41135:394:0;-1:-1:-1;;;;;41383:35:0;;;;;;:31;:35;;;;;;;;41379:150;;41476:9;;-1:-1:-1;;;;;9012:18:0;;8985:7;9012:18;;;;;;;;;;;41450:22;;:6;:22;:::i;:::-;:35;;41442:67;;;;-1:-1:-1;;;41442:67:0;;16845:2:1;41442:67:0;;;16827:21:1;16884:2;16864:18;;;16857:30;16923:21;16903:18;;;16896:49;16962:18;;41442:67:0;16643:343:1;41442:67:0;41644:4;41595:28;9012:18;;;;;;;;;;;41710;;41686:42;;;;;;;41759:35;;-1:-1:-1;41783:11:0;;;;;;;41759:35;:61;;;;-1:-1:-1;41812:8:0;;-1:-1:-1;;;41812:8:0;;;;41811:9;41759:61;:110;;;;-1:-1:-1;;;;;;41838:31:0;;;;;;:25;:31;;;;;;;;41837:32;41759:110;:153;;;;-1:-1:-1;;;;;;41887:25:0;;;;;;:19;:25;;;;;;;;41886:26;41759:153;:194;;;;-1:-1:-1;;;;;;41930:23:0;;;;;;:19;:23;;;;;;;;41929:24;41759:194;41741:338;;;41980:8;:15;;;;-1:-1:-1;;;41980:15:0;;;42024:10;:8;:10::i;:::-;42051:8;:16;;;;;;41741:338;42115:8;;-1:-1:-1;;;;;42224:25:0;;42099:12;42224:25;;;:19;:25;;;;;;42115:8;-1:-1:-1;;;42115:8:0;;;;;42114:9;;42224:25;;:52;;-1:-1:-1;;;;;;42253:23:0;;;;;;:19;:23;;;;;;;;42224:52;42221:99;;;-1:-1:-1;42303:5:0;42221:99;42340:12;42444:7;42441:1064;;;-1:-1:-1;;;;;42530:29:0;;42467:16;42530:29;;;:25;:29;;;;;;;;:50;;;;;42579:1;42563:13;;:17;42530:50;42526:833;;;42603:9;;;;42600:41;;;-1:-1:-1;42627:12:0;;42600:41;42666:47;42707:5;42666:36;42693:8;42677:13;;:24;;;;:::i;:::-;42666:6;;:10;:36::i;:::-;:40;;:47::i;:::-;42659:54;;42780:13;;42761:16;;42754:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42732:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;42860:13:0;;42841:16;;42834:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;42812:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;42894:14:0;;-1:-1:-1;42904:4:0;42894:14;;:::i;:::-;;;42526:833;;;-1:-1:-1;;;;;42969:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;43019:1;43004:12;;:16;42969:51;42966:393;;;43044:9;;;;43041:40;;;-1:-1:-1;43068:11:0;;43041:40;43106:46;43146:5;43106:35;43132:8;43117:12;;:23;;;;:::i;43106:46::-;43099:53;;43218:12;;43200:15;;43193:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43171:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;43296:12:0;;43278:15;;43271:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;43249:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;43329:14:0;;-1:-1:-1;43339:4:0;43329:14;;:::i;:::-;;;42966:393;43390:8;;43387:93;;43422:42;43438:4;43452;43459;43422:15;:42::i;:::-;42452:1053;42441:1064;43517:33;43533:4;43539:2;43543:6;43517:15;:33::i;:::-;39280:4278;;;;39167:4391;;;:::o;17390:192::-;17476:7;17512:12;17504:6;;;;17496:29;;;;-1:-1:-1;;;17496:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17536:9:0;17548:5;17552:1;17548;:5;:::i;:::-;17536:17;17390:192;-1:-1:-1;;;;;17390:192:0:o;37299:188::-;-1:-1:-1;;;;;37382:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;37382:39:0;;;;;;;;;;37439:40;;37382:39;;:31;37439:40;;;37299:188;;:::o;12682:573::-;-1:-1:-1;;;;;12822:20:0;;12814:70;;;;-1:-1:-1;;;12814:70:0;;14013:2:1;12814:70:0;;;13995:21:1;14052:2;14032:18;;;14025:30;14091:34;14071:18;;;14064:62;14162:7;14142:18;;;14135:35;14187:19;;12814:70:0;13811:401:1;12814:70:0;-1:-1:-1;;;;;12903:23:0;;12895:71;;;;-1:-1:-1;;;12895:71:0;;14419:2:1;12895:71:0;;;14401:21:1;14458:2;14438:18;;;14431:30;14497:34;14477:18;;;14470:62;14568:5;14548:18;;;14541:33;14591:19;;12895:71:0;14217:399:1;12895:71:0;13059;13081:6;13059:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13059:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13039:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13164:20;;;;;;;:32;;13189:6;13164:24;:32::i;:::-;-1:-1:-1;;;;;13141:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13212:35;2255:25:1;;;13141:20:0;;13212:35;;;;;;2228:18:1;13212:35:0;2109:177:1;44708:1459:0;44791:4;44747:23;9012:18;;;;;;;;;;;44747:50;;44808:25;44857:18;;44836;;:39;;;;:::i;:::-;44808:67;-1:-1:-1;44886:12:0;44922:20;;;:46;;-1:-1:-1;44946:22:0;;44922:46;44919:60;;;44971:7;;;44708:1459::o;44919:60::-;45012:18;;:23;;45033:2;45012:23;:::i;:::-;44994:15;:41;44991:111;;;45067:18;;:23;;45088:2;45067:23;:::i;:::-;45049:41;;44991:111;45171:23;45256:1;45236:17;45215:18;;45197:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45171:86;-1:-1:-1;45268:26:0;45297:36;:15;45171:86;45297:19;:36::i;:::-;45268:65;-1:-1:-1;45382:21:0;45416:36;45268:65;45416:16;:36::i;:::-;45474:18;45495:44;:21;45521:17;45495:25;:44::i;:::-;45474:65;;45560:23;45586:57;45625:17;45586:34;45601:18;;45586:10;:14;;:34;;;;:::i;:57::-;45560:83;-1:-1:-1;45674:23:0;45700:28;45560:83;45700:10;:28;:::i;:::-;45780:1;45759:18;:22;;;45792:18;:22;45674:54;-1:-1:-1;45846:19:0;;;;;:42;;;45887:1;45869:15;:19;45846:42;45843:210;;;45904:46;45917:15;45934;45904:12;:46::i;:::-;46022:18;;45970:71;;;17746:25:1;;;17802:2;17787:18;;17780:34;;;17830:18;;;17823:34;;;;45970:71:0;;;;;;17734:2:1;45970:71:0;;;45843:210;46104:15;;46096:63;;-1:-1:-1;;;;;46104:15:0;;;;46133:21;;46096:63;;;;46133:21;46104:15;46096:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;44708:1459:0:o;17841:471::-;17899:7;18144:6;18140:47;;-1:-1:-1;18174:1:0;18167:8;;18140:47;18199:9;18211:5;18215:1;18211;:5;:::i;:::-;18199:17;-1:-1:-1;18244:1:0;18235:5;18239:1;18199:17;18235:5;:::i;:::-;:10;18227:56;;;;-1:-1:-1;;;18227:56:0;;18280:2:1;18227:56:0;;;18262:21:1;18319:2;18299:18;;;18292:30;18358:34;18338:18;;;18331:62;18429:3;18409:18;;;18402:31;18450:19;;18227:56:0;18078:397:1;18788:132:0;18846:7;18873:39;18877:1;18880;18873:39;;;;;;;;;;;;;;;;;:3;:39::i;16951:136::-;17009:7;17036:43;17040:1;17043;17036:43;;;;;;;;;;;;;;;;;:3;:43::i;43566:601::-;43718:16;;;43732:1;43718:16;;;;;;;;43694:21;;43718:16;;;;;;;;;;-1:-1:-1;43718:16:0;43694:40;;43763:4;43745;43750:1;43745:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;43745:23:0;;;-1:-1:-1;;;;;43745:23:0;;;;;43789:15;-1:-1:-1;;;;;43789:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43779:4;43784:1;43779:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;43779:32:0;;;-1:-1:-1;;;;;43779:32:0;;;;;43824:62;43841:4;43856:15;43874:11;43824:8;:62::i;:::-;43925:224;;;;;-1:-1:-1;;;;;43925:15:0;:66;;;;:224;;44006:11;;44032:1;;44076:4;;44103;;44123:15;;43925:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43621:546;43566:601;:::o;44179:521::-;44327:62;44344:4;44359:15;44377:11;44327:8;:62::i;:::-;44636:15;;44432:260;;;;;44504:4;44432:260;;;20320:34:1;20370:18;;;20363:34;;;44550:1:0;20413:18:1;;;20406:34;;;20456:18;;;20449:34;-1:-1:-1;;;;;44636:15:0;;;20499:19:1;;;20492:44;44666:15:0;20552:19:1;;;20545:35;44432:15:0;:31;;;;;;44471:9;;20231:19:1;;44432:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19416:278::-;19502:7;19537:12;19530:5;19522:28;;;;-1:-1:-1;;;19522:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19561:9:0;19573:5;19577:1;19573;:5;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:656::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;705:6;702:1;699:13;696:91;;;775:1;770:2;761:6;750:9;746:22;742:31;735:42;696:91;-1:-1:-1;839:2:1;827:15;844:66;823:88;808:104;;;;914:2;804:113;;267:656;-1:-1:-1;;;267:656:1:o;928:154::-;-1:-1:-1;;;;;1007:5:1;1003:54;996:5;993:65;983:93;;1072:1;1069;1062:12;983:93;928:154;:::o;1087:315::-;1155:6;1163;1216:2;1204:9;1195:7;1191:23;1187:32;1184:52;;;1232:1;1229;1222:12;1184:52;1271:9;1258:23;1290:31;1315:5;1290:31;:::i;:::-;1340:5;1392:2;1377:18;;;;1364:32;;-1:-1:-1;;;1087:315:1:o;1599:247::-;1658:6;1711:2;1699:9;1690:7;1686:23;1682:32;1679:52;;;1727:1;1724;1717:12;1679:52;1766:9;1753:23;1785:31;1810:5;1785:31;:::i;2291:180::-;2350:6;2403:2;2391:9;2382:7;2378:23;2374:32;2371:52;;;2419:1;2416;2409:12;2371:52;-1:-1:-1;2442:23:1;;2291:180;-1:-1:-1;2291:180:1:o;2476:456::-;2553:6;2561;2569;2622:2;2610:9;2601:7;2597:23;2593:32;2590:52;;;2638:1;2635;2628:12;2590:52;2677:9;2664:23;2696:31;2721:5;2696:31;:::i;:::-;2746:5;-1:-1:-1;2803:2:1;2788:18;;2775:32;2816:33;2775:32;2816:33;:::i;:::-;2476:456;;2868:7;;-1:-1:-1;;;2922:2:1;2907:18;;;;2894:32;;2476:456::o;3168:615::-;3254:6;3262;3315:2;3303:9;3294:7;3290:23;3286:32;3283:52;;;3331:1;3328;3321:12;3283:52;3371:9;3358:23;3400:18;3441:2;3433:6;3430:14;3427:34;;;3457:1;3454;3447:12;3427:34;3495:6;3484:9;3480:22;3470:32;;3540:7;3533:4;3529:2;3525:13;3521:27;3511:55;;3562:1;3559;3552:12;3511:55;3602:2;3589:16;3628:2;3620:6;3617:14;3614:34;;;3644:1;3641;3634:12;3614:34;3697:7;3692:2;3682:6;3679:1;3675:14;3671:2;3667:23;3663:32;3660:45;3657:65;;;3718:1;3715;3708:12;3657:65;3749:2;3741:11;;;;;3771:6;;-1:-1:-1;3168:615:1;;-1:-1:-1;;;;3168:615:1:o;3977:118::-;4063:5;4056:13;4049:21;4042:5;4039:32;4029:60;;4085:1;4082;4075:12;4100:382;4165:6;4173;4226:2;4214:9;4205:7;4201:23;4197:32;4194:52;;;4242:1;4239;4232:12;4194:52;4281:9;4268:23;4300:31;4325:5;4300:31;:::i;:::-;4350:5;-1:-1:-1;4407:2:1;4392:18;;4379:32;4420:30;4379:32;4420:30;:::i;:::-;4469:7;4459:17;;;4100:382;;;;;:::o;4487:241::-;4543:6;4596:2;4584:9;4575:7;4571:23;4567:32;4564:52;;;4612:1;4609;4602:12;4564:52;4651:9;4638:23;4670:28;4692:5;4670:28;:::i;4733:323::-;4809:6;4817;4870:2;4858:9;4849:7;4845:23;4841:32;4838:52;;;4886:1;4883;4876:12;4838:52;4922:9;4909:23;4899:33;;4982:2;4971:9;4967:18;4954:32;4995:31;5020:5;4995:31;:::i;5061:456::-;5138:6;5146;5154;5207:2;5195:9;5186:7;5182:23;5178:32;5175:52;;;5223:1;5220;5213:12;5175:52;5262:9;5249:23;5281:31;5306:5;5281:31;:::i;:::-;5331:5;-1:-1:-1;5383:2:1;5368:18;;5355:32;;-1:-1:-1;5439:2:1;5424:18;;5411:32;5452:33;5411:32;5452:33;:::i;:::-;5504:7;5494:17;;;5061:456;;;;;:::o;5522:388::-;5590:6;5598;5651:2;5639:9;5630:7;5626:23;5622:32;5619:52;;;5667:1;5664;5657:12;5619:52;5706:9;5693:23;5725:31;5750:5;5725:31;:::i;:::-;5775:5;-1:-1:-1;5832:2:1;5817:18;;5804:32;5845:33;5804:32;5845:33;:::i;6276:184::-;-1:-1:-1;;;6325:1:1;6318:88;6425:4;6422:1;6415:15;6449:4;6446:1;6439:15;6465:128;6505:3;6536:1;6532:6;6529:1;6526:13;6523:39;;;6542:18;;:::i;:::-;-1:-1:-1;6578:9:1;;6465:128::o;6955:437::-;7034:1;7030:12;;;;7077;;;7098:61;;7152:4;7144:6;7140:17;7130:27;;7098:61;7205:2;7197:6;7194:14;7174:18;7171:38;7168:218;;;-1:-1:-1;;;7239:1:1;7232:88;7343:4;7340:1;7333:15;7371:4;7368:1;7361:15;7168:218;;6955:437;;;:::o;8159:228::-;8199:7;8325:1;-1:-1:-1;;8253:74:1;8250:1;8247:81;8242:1;8235:9;8228:17;8224:105;8221:131;;;8332:18;;:::i;:::-;-1:-1:-1;8372:9:1;;8159:228::o;8392:274::-;8432:1;8458;8448:189;;-1:-1:-1;;;8490:1:1;8483:88;8594:4;8591:1;8584:15;8622:4;8619:1;8612:15;8448:189;-1:-1:-1;8651:9:1;;8392:274::o;9087:184::-;-1:-1:-1;;;9136:1:1;9129:88;9236:4;9233:1;9226:15;9260:4;9257:1;9250:15;9276:195;9315:3;-1:-1:-1;;9339:5:1;9336:77;9333:103;;;9416:18;;:::i;:::-;-1:-1:-1;9463:1:1;9452:13;;9276:195::o;10251:184::-;10321:6;10374:2;10362:9;10353:7;10349:23;10345:32;10342:52;;;10390:1;10387;10380:12;10342:52;-1:-1:-1;10413:16:1;;10251:184;-1:-1:-1;10251:184:1:o;10742:245::-;10809:6;10862:2;10850:9;10841:7;10837:23;10833:32;10830:52;;;10878:1;10875;10868:12;10830:52;10910:9;10904:16;10929:28;10951:5;10929:28;:::i;17414:125::-;17454:4;17482:1;17479;17476:8;17473:34;;;17487:18;;:::i;:::-;-1:-1:-1;17524:9:1;;17414:125::o;18669:251::-;18739:6;18792:2;18780:9;18771:7;18767:23;18763:32;18760:52;;;18808:1;18805;18798:12;18760:52;18840:9;18834:16;18859:31;18884:5;18859:31;:::i;18925:1026::-;19187:4;19235:3;19224:9;19220:19;19266:6;19255:9;19248:25;19292:2;19330:6;19325:2;19314:9;19310:18;19303:34;19373:3;19368:2;19357:9;19353:18;19346:31;19397:6;19432;19426:13;19463:6;19455;19448:22;19501:3;19490:9;19486:19;19479:26;;19540:2;19532:6;19528:15;19514:29;;19561:1;19571:218;19585:6;19582:1;19579:13;19571:218;;;19650:13;;-1:-1:-1;;;;;19646:62:1;19634:75;;19764:15;;;;19729:12;;;;19607:1;19600:9;19571:218;;;-1:-1:-1;;;;;;;19845:55:1;;;;19840:2;19825:18;;19818:83;-1:-1:-1;;;19932:3:1;19917:19;19910:35;19806:3;18925:1026;-1:-1:-1;;;18925:1026:1:o;20591:306::-;20679:6;20687;20695;20748:2;20736:9;20727:7;20723:23;20719:32;20716:52;;;20764:1;20761;20754:12;20716:52;20793:9;20787:16;20777:26;;20843:2;20832:9;20828:18;20822:25;20812:35;;20887:2;20876:9;20872:18;20866:25;20856:35;;20591:306;;;;;:::o
Swarm Source
ipfs://b56b8603d8531d552e7f0f957b0ba1bccb8a27bd9e237852ded69000aee94abb
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.