ERC-20
Overview
Max Total Supply
500,000,000 BW
Holders
54
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2,199,999.120000000042564515 BWValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Brainwash
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-09 */ // SPDX-License-Identifier: MIT // Telegram : https://t.me/brainwasheth pragma solidity 0.8.9; 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 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 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; } 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; } } 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; } } 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; } } 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; } } contract Brainwash is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address private marketingWallet; address private devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; bool public enableEarlySellTax = true; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; // Blacklist Map mapping (address => bool) private _blacklist; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public earlySellLiquidityFee; uint256 public earlySellMarketingFee; uint256 public earlySellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude 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 SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("BrainWash", "BW") { 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); uint256 _buyMarketingFee = 5; uint256 _buyLiquidityFee = 2; uint256 _buyDevFee = 5; uint256 _sellMarketingFee = 5; uint256 _sellLiquidityFee = 2; uint256 _sellDevFee = 5; uint256 _earlySellLiquidityFee = 3; uint256 _earlySellMarketingFee = 8; uint256 _earlySellDevFee = 7; uint256 totalSupply = 5 * 1e8 * 1e18; maxTransactionAmount = totalSupply * 5 / 1000; // 1% maxTransactionAmountTxn maxWallet = totalSupply * 10 / 1000; // 2% maxWallet swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; earlySellDevFee = _earlySellDevFee; marketingWallet = address(owner()); // set as marketing wallet devWallet = address(owner()); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), 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() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // 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; } function setEarlySellTax(bool onoff) external onlyOwner { enableEarlySellTax = onoff; } // 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 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _earlySellDevFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; earlySellDevFee = _earlySellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 20, "Must keep fees at 20% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function blacklistAccount (address account, bool isBlacklisted) public onlyOwner { _blacklist[account] = isBlacklisted; } 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 newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); 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(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens"); 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"); } } } // anti bot logic if (block.number <= (launchedAt + 3) && to != uniswapV2Pair && to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D) ) { _blacklist[to] = true; } // early sell logic bool isBuy = from == uniswapV2Pair; if (!isBuy && enableEarlySellTax) { if (_holderFirstBuyTimestamp[from] != 0 && (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp)) { sellLiquidityFee = earlySellLiquidityFee; sellMarketingFee = earlySellMarketingFee; sellDevFee = earlySellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } else { sellLiquidityFee = 2; sellMarketingFee = 3; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } } else { if (_holderFirstBuyTimestamp[to] == 0) { _holderFirstBuyTimestamp[to] = block.timestamp; } if (!enableEarlySellTax) { sellLiquidityFee = 3; sellMarketingFee = 3; sellDevFee = 1; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } } 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){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap 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 address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; 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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); 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":"sniper","type":"address"}],"name":"BoughtEarly","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":"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":"devWalletUpdated","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"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"earlySellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevFee","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600981526020017f427261696e5761736800000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f425700000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200011d92919062000c07565b5080600490805190602001906200013692919062000c07565b50505060006200014b620006d360201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000216816001620006db60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029157600080fd5b505afa158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc919062000d21565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032f57600080fd5b505afa15801562000344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036a919062000d21565b6040518363ffffffff1660e01b81526004016200038992919062000d64565b602060405180830381600087803b158015620003a457600080fd5b505af1158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000d21565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200042760a0516001620006db60201b60201c565b6200043c60a0516001620007d860201b60201c565b60006005905060006002905060006005905060006005905060006002905060006005905060006003905060006008905060006007905060006b019d971e4fe8401e7400000090506103e860058262000495919062000dca565b620004a1919062000e5a565b6008819055506103e8600a82620004b9919062000dca565b620004c5919062000e5a565b600a81905550612710600a82620004dd919062000dca565b620004e9919062000e5a565b60098190555089601181905550886012819055508760138190555060135460125460115462000519919062000e92565b62000525919062000e92565b60108190555086601581905550856016819055508460178190555060175460165460155462000555919062000e92565b62000561919062000e92565b601481905550836018819055508260198190555081601a819055506200058c6200087960201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005dc6200087960201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063e620006306200087960201b60201c565b6001620008a360201b60201c565b62000651306001620008a360201b60201c565b6200066661dead6001620008a360201b60201c565b620006886200067a6200087960201b60201c565b6001620006db60201b60201c565b6200069b306001620006db60201b60201c565b620006b061dead6001620006db60201b60201c565b620006c23382620009f060201b60201c565b505050505050505050505062001123565b600033905090565b620006eb620006d360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200077d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007749062000f50565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008b3620006d360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000945576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093c9062000f50565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009e4919062000f8f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a5a9062000ffc565b60405180910390fd5b62000a776000838362000b9f60201b60201c565b62000a938160025462000ba460201b620027ec1790919060201c565b60028190555062000af1816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ba460201b620027ec1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b9391906200102f565b60405180910390a35050565b505050565b600080828462000bb5919062000e92565b90508381101562000bfd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bf4906200109c565b60405180910390fd5b8091505092915050565b82805462000c1590620010ed565b90600052602060002090601f01602090048101928262000c39576000855562000c85565b82601f1062000c5457805160ff191683800117855562000c85565b8280016001018555821562000c85579182015b8281111562000c8457825182559160200191906001019062000c67565b5b50905062000c94919062000c98565b5090565b5b8082111562000cb357600081600090555060010162000c99565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ce98262000cbc565b9050919050565b62000cfb8162000cdc565b811462000d0757600080fd5b50565b60008151905062000d1b8162000cf0565b92915050565b60006020828403121562000d3a5762000d3962000cb7565b5b600062000d4a8482850162000d0a565b91505092915050565b62000d5e8162000cdc565b82525050565b600060408201905062000d7b600083018562000d53565b62000d8a602083018462000d53565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dd78262000d91565b915062000de48362000d91565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e205762000e1f62000d9b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e678262000d91565b915062000e748362000d91565b92508262000e875762000e8662000e2b565b5b828204905092915050565b600062000e9f8262000d91565b915062000eac8362000d91565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ee45762000ee362000d9b565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f3860208362000eef565b915062000f458262000f00565b602082019050919050565b6000602082019050818103600083015262000f6b8162000f29565b9050919050565b60008115159050919050565b62000f898162000f72565b82525050565b600060208201905062000fa6600083018462000f7e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fe4601f8362000eef565b915062000ff18262000fac565b602082019050919050565b60006020820190508181036000830152620010178162000fd5565b9050919050565b620010298162000d91565b82525050565b60006020820190506200104660008301846200101e565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001084601b8362000eef565b915062001091826200104c565b602082019050919050565b60006020820190508181036000830152620010b78162001075565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200110657607f821691505b602082108114156200111d576200111c620010be565b5b50919050565b60805160a051615c056200118f600039600081816114e701528181611ce301528181612eb8015281816132d801526133d5015260008181610e6e01528181612e6001528181614351015281816144410152818161446801528181614504015261452b0152615c056000f3fe60806040526004361061037a5760003560e01c80638da5cb5b116101d1578063b62496f511610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610cf3578063f2fde38b14610d1e578063f637434214610d47578063f8b45b0514610d7257610381565b8063d85ba06314610c35578063dd62ed3e14610c60578063e2f4560514610c9d578063e884f26014610cc857610381565b8063c18bc195116100dc578063c18bc19514610b79578063c876d0b914610ba2578063c8c8ebe414610bcd578063d257b34f14610bf857610381565b8063b62496f514610ae8578063bbc0c74214610b25578063c024666814610b5057610381565b8063a0d82dc51161016f578063a4d15b6411610149578063a4d15b6414610a2c578063a7fc9e2114610a57578063a9059cbb14610a82578063aacebbe314610abf57610381565b8063a0d82dc51461099b578063a2657778146109c6578063a457c2d7146109ef57610381565b806395d89b41116101ab57806395d89b41146108f15780639a7a23d61461091c5780639c3b4fdc146109455780639fccce321461097057610381565b80638da5cb5b14610872578063921369131461089d578063924de9b7146108c857610381565b806339509351116102ab57806370a08231116102495780637571336a116102235780637571336a146107de5780637bce5a04146108075780638095d564146108325780638a8c523c1461085b57610381565b806370a082311461075f578063715018a61461079c578063751039fc146107b357610381565b80634fbee193116102855780634fbee193146106a1578063541a43cf146106de5780636a486a8e146107095780636ddd17131461073457610381565b8063395093511461060e57806349bd5a5e1461064b5780634a62bb651461067657610381565b80631f3fed8f1161031857806323b872dd116102f257806323b872dd146105525780632bf3d42d1461058f5780632d5a5d34146105ba578063313ce567146105e357610381565b80631f3fed8f146104d5578063203e727e1461050057806322d3e2aa1461052957610381565b80631694505e116103545780631694505e1461042b57806318160ddd146104565780631816467f146104815780631a8145bb146104aa57610381565b806306fdde0314610386578063095ea7b3146103b157806310d5de53146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d9d565b6040516103a891906146e3565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061479e565b610e2f565b6040516103e591906147f9565b60405180910390f35b3480156103fa57600080fd5b5061041560048036038101906104109190614814565b610e4d565b60405161042291906147f9565b60405180910390f35b34801561043757600080fd5b50610440610e6c565b60405161044d91906148a0565b60405180910390f35b34801561046257600080fd5b5061046b610e90565b60405161047891906148ca565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190614814565b610e9a565b005b3480156104b657600080fd5b506104bf610ff1565b6040516104cc91906148ca565b60405180910390f35b3480156104e157600080fd5b506104ea610ff7565b6040516104f791906148ca565b60405180910390f35b34801561050c57600080fd5b50610527600480360381019061052291906148e5565b610ffd565b005b34801561053557600080fd5b50610550600480360381019061054b9190614912565b611127565b005b34801561055e57600080fd5b506105796004803603810190610574919061499f565b611258565b60405161058691906147f9565b60405180910390f35b34801561059b57600080fd5b506105a4611331565b6040516105b191906148ca565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190614a1e565b611337565b005b3480156105ef57600080fd5b506105f8611429565b6040516106059190614a7a565b60405180910390f35b34801561061a57600080fd5b506106356004803603810190610630919061479e565b611432565b60405161064291906147f9565b60405180910390f35b34801561065757600080fd5b506106606114e5565b60405161066d9190614aa4565b60405180910390f35b34801561068257600080fd5b5061068b611509565b60405161069891906147f9565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c39190614814565b61151c565b6040516106d591906147f9565b60405180910390f35b3480156106ea57600080fd5b506106f3611572565b60405161070091906148ca565b60405180910390f35b34801561071557600080fd5b5061071e611578565b60405161072b91906148ca565b60405180910390f35b34801561074057600080fd5b5061074961157e565b60405161075691906147f9565b60405180910390f35b34801561076b57600080fd5b5061078660048036038101906107819190614814565b611591565b60405161079391906148ca565b60405180910390f35b3480156107a857600080fd5b506107b16115d9565b005b3480156107bf57600080fd5b506107c8611731565b6040516107d591906147f9565b60405180910390f35b3480156107ea57600080fd5b5061080560048036038101906108009190614a1e565b6117ec565b005b34801561081357600080fd5b5061081c6118de565b60405161082991906148ca565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190614abf565b6118e4565b005b34801561086757600080fd5b506108706119fe565b005b34801561087e57600080fd5b50610887611ad4565b6040516108949190614aa4565b60405180910390f35b3480156108a957600080fd5b506108b2611afe565b6040516108bf91906148ca565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea9190614b12565b611b04565b005b3480156108fd57600080fd5b50610906611bb8565b60405161091391906146e3565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e9190614a1e565b611c4a565b005b34801561095157600080fd5b5061095a611d7e565b60405161096791906148ca565b60405180910390f35b34801561097c57600080fd5b50610985611d84565b60405161099291906148ca565b60405180910390f35b3480156109a757600080fd5b506109b0611d8a565b6040516109bd91906148ca565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190614b12565b611d90565b005b3480156109fb57600080fd5b50610a166004803603810190610a11919061479e565b611e44565b604051610a2391906147f9565b60405180910390f35b348015610a3857600080fd5b50610a41611f11565b604051610a4e91906147f9565b60405180910390f35b348015610a6357600080fd5b50610a6c611f24565b604051610a7991906148ca565b60405180910390f35b348015610a8e57600080fd5b50610aa96004803603810190610aa4919061479e565b611f2a565b604051610ab691906147f9565b60405180910390f35b348015610acb57600080fd5b50610ae66004803603810190610ae19190614814565b611f48565b005b348015610af457600080fd5b50610b0f6004803603810190610b0a9190614814565b61209f565b604051610b1c91906147f9565b60405180910390f35b348015610b3157600080fd5b50610b3a6120bf565b604051610b4791906147f9565b60405180910390f35b348015610b5c57600080fd5b50610b776004803603810190610b729190614a1e565b6120d2565b005b348015610b8557600080fd5b50610ba06004803603810190610b9b91906148e5565b612212565b005b348015610bae57600080fd5b50610bb761233c565b604051610bc491906147f9565b60405180910390f35b348015610bd957600080fd5b50610be261234f565b604051610bef91906148ca565b60405180910390f35b348015610c0457600080fd5b50610c1f6004803603810190610c1a91906148e5565b612355565b604051610c2c91906147f9565b60405180910390f35b348015610c4157600080fd5b50610c4a6124c5565b604051610c5791906148ca565b60405180910390f35b348015610c6c57600080fd5b50610c876004803603810190610c829190614b3f565b6124cb565b604051610c9491906148ca565b60405180910390f35b348015610ca957600080fd5b50610cb2612552565b604051610cbf91906148ca565b60405180910390f35b348015610cd457600080fd5b50610cdd612558565b604051610cea91906147f9565b60405180910390f35b348015610cff57600080fd5b50610d08612613565b604051610d1591906148ca565b60405180910390f35b348015610d2a57600080fd5b50610d456004803603810190610d409190614814565b612619565b005b348015610d5357600080fd5b50610d5c6127e0565b604051610d6991906148ca565b60405180910390f35b348015610d7e57600080fd5b50610d876127e6565b604051610d9491906148ca565b60405180910390f35b606060038054610dac90614bae565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd890614bae565b8015610e255780601f10610dfa57610100808354040283529160200191610e25565b820191906000526020600020905b815481529060010190602001808311610e0857829003601f168201915b5050505050905090565b6000610e43610e3c61284a565b8484612852565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610ea261284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890614c2c565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b601b5481565b61100561284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90614c2c565b60405180910390fd5b670de0b6b3a76400006103e860016110aa610e90565b6110b49190614c7b565b6110be9190614d04565b6110c89190614d04565b81101561110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190614da7565b60405180910390fd5b670de0b6b3a76400008161111e9190614c7b565b60088190555050565b61112f61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590614c2c565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a819055506017546016546015546111fb9190614dc7565b6112059190614dc7565b601481905550601480541115611250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124790614e69565b60405180910390fd5b505050505050565b6000611265848484612a1d565b6113268461127161284a565b61132185604051806060016040528060288152602001615b8360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112d761284a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1d9092919063ffffffff16565b612852565b600190509392505050565b60195481565b61133f61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c590614c2c565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006114db61143f61284a565b846114d6856001600061145061284a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127ec90919063ffffffff16565b612852565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e161284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614c2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061173b61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190614c2c565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6117f461284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90614c2c565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b6118ec61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290614c2c565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546119a39190614dc7565b6119ad9190614dc7565b601081905550601460105411156119f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f090614e69565b60405180910390fd5b505050565b611a0661284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c90614c2c565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b611b0c61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290614c2c565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611bc790614bae565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf390614bae565b8015611c405780601f10611c1557610100808354040283529160200191611c40565b820191906000526020600020905b815481529060010190602001808311611c2357829003601f168201915b5050505050905090565b611c5261284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614c2c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790614efb565b60405180910390fd5b611d7a8282613b81565b5050565b60135481565b601d5481565b60175481565b611d9861284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e90614c2c565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000611f07611e5161284a565b84611f0285604051806060016040528060258152602001615bab6025913960016000611e7b61284a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1d9092919063ffffffff16565b612852565b6001905092915050565b600b60039054906101000a900460ff1681565b601a5481565b6000611f3e611f3761284a565b8484612a1d565b6001905092915050565b611f5061284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690614c2c565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6120da61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216090614c2c565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161220691906147f9565b60405180910390a25050565b61221a61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090614c2c565b60405180910390fd5b670de0b6b3a76400006103e860056122bf610e90565b6122c99190614c7b565b6122d39190614d04565b6122dd9190614d04565b81101561231f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231690614f8d565b60405180910390fd5b670de0b6b3a7640000816123339190614c7b565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b600061235f61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590614c2c565b60405180910390fd5b620186a060016123fc610e90565b6124069190614c7b565b6124109190614d04565b821015612452576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124499061501f565b60405180910390fd5b6103e8600561245f610e90565b6124699190614c7b565b6124739190614d04565b8211156124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac906150b1565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061256261284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e890614c2c565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61262161284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790614c2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271790615143565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b60008082846127fb9190614dc7565b905083811015612840576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612837906151af565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990615241565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612932576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612929906152d3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a1091906148ca565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8490615365565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af4906153f7565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ba15750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd790615489565b60405180910390fd5b6000811415612bfa57612bf583836000613c22565b613b18565b600b60009054906101000a900460ff16156132bd57612c17611ad4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c855750612c55611ad4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cbe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cf8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d115750600560149054906101000a900460ff16155b156132bc57600b60019054906101000a900460ff16612e0b57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dcb5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e01906154f5565b60405180910390fd5b5b600f60009054906101000a900460ff1615612fd357612e28611ad4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612eaf57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f0757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fd25743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f84906155ad565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130765750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561311d576008548111156130c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b79061563f565b60405180910390fd5b600a546130cc83611591565b826130d79190614dc7565b1115613118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310f906156ab565b60405180910390fd5b6132bb565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131c05750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561320f5760085481111561320a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132019061573d565b60405180910390fd5b6132ba565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132b957600a5461326c83611591565b826132779190614dc7565b11156132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af906156ab565b60405180910390fd5b5b5b5b5b5b6003601e546132cc9190614dc7565b431115801561332757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133735750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133d1576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490508015801561343e5750600b60039054906101000a900460ff165b15613561576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156134e057504262015180600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134dd9190614dc7565b10155b1561352857601854601681905550601954601581905550601a546017819055506017546016546015546135139190614dc7565b61351d9190614dc7565b60148190555061355c565b6002601681905550600360158190555060175460165460155461354b9190614dc7565b6135559190614dc7565b6014819055505b61363f565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156135ee5742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff1661363e5760036016819055506003601581905550600160178190555060175460165460155461362d9190614dc7565b6136379190614dc7565b6014819055505b5b600061364a30611591565b90506000600954821015905080801561366f5750600b60029054906101000a900460ff165b80156136885750600560149054906101000a900460ff16155b80156136de5750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137345750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561378a5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137ce576001600560146101000a81548160ff0219169083151502179055506137b2613eb7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138845750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561388e57600090505b60008115613b0757602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138f157506000601454115b156139be5761391e60646139106014548961419e90919063ffffffff16565b61421990919063ffffffff16565b9050601454601654826139319190614c7b565b61393b9190614d04565b601c600082825461394c9190614dc7565b92505081905550601454601754826139649190614c7b565b61396e9190614d04565b601d600082825461397f9190614dc7565b92505081905550601454601554826139979190614c7b565b6139a19190614d04565b601b60008282546139b29190614dc7565b92505081905550613ae3565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a1957506000601054115b15613ae257613a466064613a386010548961419e90919063ffffffff16565b61421990919063ffffffff16565b905060105460125482613a599190614c7b565b613a639190614d04565b601c6000828254613a749190614dc7565b9250508190555060105460135482613a8c9190614c7b565b613a969190614d04565b601d6000828254613aa79190614dc7565b9250508190555060105460115482613abf9190614c7b565b613ac99190614d04565b601b6000828254613ada9190614dc7565b925050819055505b5b6000811115613af857613af7883083613c22565b5b8086613b04919061575d565b95505b613b12888888613c22565b50505050505b505050565b6000838311158290613b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5c91906146e3565b60405180910390fd5b5060008385613b74919061575d565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8990615365565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf9906153f7565b60405180910390fd5b613d0d838383614263565b613d7881604051806060016040528060268152602001615b5d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1d9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127ec90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613eaa91906148ca565b60405180910390a3505050565b6000613ec230611591565b90506000601d54601b54601c54613ed99190614dc7565b613ee39190614dc7565b9050600080831480613ef55750600082145b15613f025750505061419c565b6014600954613f119190614c7b565b831115613f2a576014600954613f279190614c7b565b92505b6000600283601c5486613f3d9190614c7b565b613f479190614d04565b613f519190614d04565b90506000613f68828661426890919063ffffffff16565b90506000479050613f78826142b2565b6000613f8d824761426890919063ffffffff16565b90506000613fb887613faa601b548561419e90919063ffffffff16565b61421990919063ffffffff16565b90506000613fe388613fd5601d548661419e90919063ffffffff16565b61421990919063ffffffff16565b90506000818385613ff4919061575d565b613ffe919061575d565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161405e906157c2565b60006040518083038185875af1925050503d806000811461409b576040519150601f19603f3d011682016040523d82523d6000602084013e6140a0565b606091505b5050809850506000871180156140b65750600081115b15614103576140c587826144fe565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c546040516140fa939291906157d7565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614149906157c2565b60006040518083038185875af1925050503d8060008114614186576040519150601f19603f3d011682016040523d82523d6000602084013e61418b565b606091505b505080985050505050505050505050505b565b6000808314156141b15760009050614213565b600082846141bf9190614c7b565b90508284826141ce9190614d04565b1461420e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161420590615880565b60405180910390fd5b809150505b92915050565b600061425b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506145e7565b905092915050565b505050565b60006142aa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b1d565b905092915050565b6000600267ffffffffffffffff8111156142cf576142ce6158a0565b5b6040519080825280602002602001820160405280156142fd5781602001602082028036833780820191505090505b5090503081600081518110614315576143146158cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156143b557600080fd5b505afa1580156143c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143ed9190615913565b81600181518110614401576144006158cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614466307f000000000000000000000000000000000000000000000000000000000000000084612852565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016144c8959493929190615a39565b600060405180830381600087803b1580156144e257600080fd5b505af11580156144f6573d6000803e3d6000fd5b505050505050565b614529307f000000000000000000000000000000000000000000000000000000000000000084612852565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161458e96959493929190615a93565b6060604051808303818588803b1580156145a757600080fd5b505af11580156145bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145e09190615b09565b5050505050565b6000808311829061462e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161462591906146e3565b60405180910390fd5b506000838561463d9190614d04565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614684578082015181840152602081019050614669565b83811115614693576000848401525b50505050565b6000601f19601f8301169050919050565b60006146b58261464a565b6146bf8185614655565b93506146cf818560208601614666565b6146d881614699565b840191505092915050565b600060208201905081810360008301526146fd81846146aa565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147358261470a565b9050919050565b6147458161472a565b811461475057600080fd5b50565b6000813590506147628161473c565b92915050565b6000819050919050565b61477b81614768565b811461478657600080fd5b50565b60008135905061479881614772565b92915050565b600080604083850312156147b5576147b4614705565b5b60006147c385828601614753565b92505060206147d485828601614789565b9150509250929050565b60008115159050919050565b6147f3816147de565b82525050565b600060208201905061480e60008301846147ea565b92915050565b60006020828403121561482a57614829614705565b5b600061483884828501614753565b91505092915050565b6000819050919050565b600061486661486161485c8461470a565b614841565b61470a565b9050919050565b60006148788261484b565b9050919050565b600061488a8261486d565b9050919050565b61489a8161487f565b82525050565b60006020820190506148b56000830184614891565b92915050565b6148c481614768565b82525050565b60006020820190506148df60008301846148bb565b92915050565b6000602082840312156148fb576148fa614705565b5b600061490984828501614789565b91505092915050565b60008060008060008060c0878903121561492f5761492e614705565b5b600061493d89828a01614789565b965050602061494e89828a01614789565b955050604061495f89828a01614789565b945050606061497089828a01614789565b935050608061498189828a01614789565b92505060a061499289828a01614789565b9150509295509295509295565b6000806000606084860312156149b8576149b7614705565b5b60006149c686828701614753565b93505060206149d786828701614753565b92505060406149e886828701614789565b9150509250925092565b6149fb816147de565b8114614a0657600080fd5b50565b600081359050614a18816149f2565b92915050565b60008060408385031215614a3557614a34614705565b5b6000614a4385828601614753565b9250506020614a5485828601614a09565b9150509250929050565b600060ff82169050919050565b614a7481614a5e565b82525050565b6000602082019050614a8f6000830184614a6b565b92915050565b614a9e8161472a565b82525050565b6000602082019050614ab96000830184614a95565b92915050565b600080600060608486031215614ad857614ad7614705565b5b6000614ae686828701614789565b9350506020614af786828701614789565b9250506040614b0886828701614789565b9150509250925092565b600060208284031215614b2857614b27614705565b5b6000614b3684828501614a09565b91505092915050565b60008060408385031215614b5657614b55614705565b5b6000614b6485828601614753565b9250506020614b7585828601614753565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bc657607f821691505b60208210811415614bda57614bd9614b7f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c16602083614655565b9150614c2182614be0565b602082019050919050565b60006020820190508181036000830152614c4581614c09565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c8682614768565b9150614c9183614768565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cca57614cc9614c4c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d0f82614768565b9150614d1a83614768565b925082614d2a57614d29614cd5565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614d91602f83614655565b9150614d9c82614d35565b604082019050919050565b60006020820190508181036000830152614dc081614d84565b9050919050565b6000614dd282614768565b9150614ddd83614768565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e1257614e11614c4c565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614e53601d83614655565b9150614e5e82614e1d565b602082019050919050565b60006020820190508181036000830152614e8281614e46565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614ee5603983614655565b9150614ef082614e89565b604082019050919050565b60006020820190508181036000830152614f1481614ed8565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614f77602483614655565b9150614f8282614f1b565b604082019050919050565b60006020820190508181036000830152614fa681614f6a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615009603583614655565b915061501482614fad565b604082019050919050565b6000602082019050818103600083015261503881614ffc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061509b603483614655565b91506150a68261503f565b604082019050919050565b600060208201905081810360008301526150ca8161508e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061512d602683614655565b9150615138826150d1565b604082019050919050565b6000602082019050818103600083015261515c81615120565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615199601b83614655565b91506151a482615163565b602082019050919050565b600060208201905081810360008301526151c88161518c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061522b602483614655565b9150615236826151cf565b604082019050919050565b6000602082019050818103600083015261525a8161521e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152bd602283614655565b91506152c882615261565b604082019050919050565b600060208201905081810360008301526152ec816152b0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061534f602583614655565b915061535a826152f3565b604082019050919050565b6000602082019050818103600083015261537e81615342565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153e1602383614655565b91506153ec82615385565b604082019050919050565b60006020820190508181036000830152615410816153d4565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000615473603183614655565b915061547e82615417565b604082019050919050565b600060208201905081810360008301526154a281615466565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154df601683614655565b91506154ea826154a9565b602082019050919050565b6000602082019050818103600083015261550e816154d2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615597604983614655565b91506155a282615515565b606082019050919050565b600060208201905081810360008301526155c68161558a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615629603583614655565b9150615634826155cd565b604082019050919050565b600060208201905081810360008301526156588161561c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615695601383614655565b91506156a08261565f565b602082019050919050565b600060208201905081810360008301526156c481615688565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615727603683614655565b9150615732826156cb565b604082019050919050565b600060208201905081810360008301526157568161571a565b9050919050565b600061576882614768565b915061577383614768565b92508282101561578657615785614c4c565b5b828203905092915050565b600081905092915050565b50565b60006157ac600083615791565b91506157b78261579c565b600082019050919050565b60006157cd8261579f565b9150819050919050565b60006060820190506157ec60008301866148bb565b6157f960208301856148bb565b61580660408301846148bb565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061586a602183614655565b91506158758261580e565b604082019050919050565b600060208201905081810360008301526158998161585d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061590d8161473c565b92915050565b60006020828403121561592957615928614705565b5b6000615937848285016158fe565b91505092915050565b6000819050919050565b600061596561596061595b84615940565b614841565b614768565b9050919050565b6159758161594a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6159b08161472a565b82525050565b60006159c283836159a7565b60208301905092915050565b6000602082019050919050565b60006159e68261597b565b6159f08185615986565b93506159fb83615997565b8060005b83811015615a2c578151615a1388826159b6565b9750615a1e836159ce565b9250506001810190506159ff565b5085935050505092915050565b600060a082019050615a4e60008301886148bb565b615a5b602083018761596c565b8181036040830152615a6d81866159db565b9050615a7c6060830185614a95565b615a8960808301846148bb565b9695505050505050565b600060c082019050615aa86000830189614a95565b615ab560208301886148bb565b615ac2604083018761596c565b615acf606083018661596c565b615adc6080830185614a95565b615ae960a08301846148bb565b979650505050505050565b600081519050615b0381614772565b92915050565b600080600060608486031215615b2257615b21614705565b5b6000615b3086828701615af4565b9350506020615b4186828701615af4565b9250506040615b5286828701615af4565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204c8439d846f2c3eb613c12f7d286fc5be5a00ba144ce3ef08bbdcf58da7563cd64736f6c63430008090033
Deployed Bytecode
0x60806040526004361061037a5760003560e01c80638da5cb5b116101d1578063b62496f511610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610cf3578063f2fde38b14610d1e578063f637434214610d47578063f8b45b0514610d7257610381565b8063d85ba06314610c35578063dd62ed3e14610c60578063e2f4560514610c9d578063e884f26014610cc857610381565b8063c18bc195116100dc578063c18bc19514610b79578063c876d0b914610ba2578063c8c8ebe414610bcd578063d257b34f14610bf857610381565b8063b62496f514610ae8578063bbc0c74214610b25578063c024666814610b5057610381565b8063a0d82dc51161016f578063a4d15b6411610149578063a4d15b6414610a2c578063a7fc9e2114610a57578063a9059cbb14610a82578063aacebbe314610abf57610381565b8063a0d82dc51461099b578063a2657778146109c6578063a457c2d7146109ef57610381565b806395d89b41116101ab57806395d89b41146108f15780639a7a23d61461091c5780639c3b4fdc146109455780639fccce321461097057610381565b80638da5cb5b14610872578063921369131461089d578063924de9b7146108c857610381565b806339509351116102ab57806370a08231116102495780637571336a116102235780637571336a146107de5780637bce5a04146108075780638095d564146108325780638a8c523c1461085b57610381565b806370a082311461075f578063715018a61461079c578063751039fc146107b357610381565b80634fbee193116102855780634fbee193146106a1578063541a43cf146106de5780636a486a8e146107095780636ddd17131461073457610381565b8063395093511461060e57806349bd5a5e1461064b5780634a62bb651461067657610381565b80631f3fed8f1161031857806323b872dd116102f257806323b872dd146105525780632bf3d42d1461058f5780632d5a5d34146105ba578063313ce567146105e357610381565b80631f3fed8f146104d5578063203e727e1461050057806322d3e2aa1461052957610381565b80631694505e116103545780631694505e1461042b57806318160ddd146104565780631816467f146104815780631a8145bb146104aa57610381565b806306fdde0314610386578063095ea7b3146103b157806310d5de53146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d9d565b6040516103a891906146e3565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061479e565b610e2f565b6040516103e591906147f9565b60405180910390f35b3480156103fa57600080fd5b5061041560048036038101906104109190614814565b610e4d565b60405161042291906147f9565b60405180910390f35b34801561043757600080fd5b50610440610e6c565b60405161044d91906148a0565b60405180910390f35b34801561046257600080fd5b5061046b610e90565b60405161047891906148ca565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190614814565b610e9a565b005b3480156104b657600080fd5b506104bf610ff1565b6040516104cc91906148ca565b60405180910390f35b3480156104e157600080fd5b506104ea610ff7565b6040516104f791906148ca565b60405180910390f35b34801561050c57600080fd5b50610527600480360381019061052291906148e5565b610ffd565b005b34801561053557600080fd5b50610550600480360381019061054b9190614912565b611127565b005b34801561055e57600080fd5b506105796004803603810190610574919061499f565b611258565b60405161058691906147f9565b60405180910390f35b34801561059b57600080fd5b506105a4611331565b6040516105b191906148ca565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190614a1e565b611337565b005b3480156105ef57600080fd5b506105f8611429565b6040516106059190614a7a565b60405180910390f35b34801561061a57600080fd5b506106356004803603810190610630919061479e565b611432565b60405161064291906147f9565b60405180910390f35b34801561065757600080fd5b506106606114e5565b60405161066d9190614aa4565b60405180910390f35b34801561068257600080fd5b5061068b611509565b60405161069891906147f9565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c39190614814565b61151c565b6040516106d591906147f9565b60405180910390f35b3480156106ea57600080fd5b506106f3611572565b60405161070091906148ca565b60405180910390f35b34801561071557600080fd5b5061071e611578565b60405161072b91906148ca565b60405180910390f35b34801561074057600080fd5b5061074961157e565b60405161075691906147f9565b60405180910390f35b34801561076b57600080fd5b5061078660048036038101906107819190614814565b611591565b60405161079391906148ca565b60405180910390f35b3480156107a857600080fd5b506107b16115d9565b005b3480156107bf57600080fd5b506107c8611731565b6040516107d591906147f9565b60405180910390f35b3480156107ea57600080fd5b5061080560048036038101906108009190614a1e565b6117ec565b005b34801561081357600080fd5b5061081c6118de565b60405161082991906148ca565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190614abf565b6118e4565b005b34801561086757600080fd5b506108706119fe565b005b34801561087e57600080fd5b50610887611ad4565b6040516108949190614aa4565b60405180910390f35b3480156108a957600080fd5b506108b2611afe565b6040516108bf91906148ca565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea9190614b12565b611b04565b005b3480156108fd57600080fd5b50610906611bb8565b60405161091391906146e3565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e9190614a1e565b611c4a565b005b34801561095157600080fd5b5061095a611d7e565b60405161096791906148ca565b60405180910390f35b34801561097c57600080fd5b50610985611d84565b60405161099291906148ca565b60405180910390f35b3480156109a757600080fd5b506109b0611d8a565b6040516109bd91906148ca565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190614b12565b611d90565b005b3480156109fb57600080fd5b50610a166004803603810190610a11919061479e565b611e44565b604051610a2391906147f9565b60405180910390f35b348015610a3857600080fd5b50610a41611f11565b604051610a4e91906147f9565b60405180910390f35b348015610a6357600080fd5b50610a6c611f24565b604051610a7991906148ca565b60405180910390f35b348015610a8e57600080fd5b50610aa96004803603810190610aa4919061479e565b611f2a565b604051610ab691906147f9565b60405180910390f35b348015610acb57600080fd5b50610ae66004803603810190610ae19190614814565b611f48565b005b348015610af457600080fd5b50610b0f6004803603810190610b0a9190614814565b61209f565b604051610b1c91906147f9565b60405180910390f35b348015610b3157600080fd5b50610b3a6120bf565b604051610b4791906147f9565b60405180910390f35b348015610b5c57600080fd5b50610b776004803603810190610b729190614a1e565b6120d2565b005b348015610b8557600080fd5b50610ba06004803603810190610b9b91906148e5565b612212565b005b348015610bae57600080fd5b50610bb761233c565b604051610bc491906147f9565b60405180910390f35b348015610bd957600080fd5b50610be261234f565b604051610bef91906148ca565b60405180910390f35b348015610c0457600080fd5b50610c1f6004803603810190610c1a91906148e5565b612355565b604051610c2c91906147f9565b60405180910390f35b348015610c4157600080fd5b50610c4a6124c5565b604051610c5791906148ca565b60405180910390f35b348015610c6c57600080fd5b50610c876004803603810190610c829190614b3f565b6124cb565b604051610c9491906148ca565b60405180910390f35b348015610ca957600080fd5b50610cb2612552565b604051610cbf91906148ca565b60405180910390f35b348015610cd457600080fd5b50610cdd612558565b604051610cea91906147f9565b60405180910390f35b348015610cff57600080fd5b50610d08612613565b604051610d1591906148ca565b60405180910390f35b348015610d2a57600080fd5b50610d456004803603810190610d409190614814565b612619565b005b348015610d5357600080fd5b50610d5c6127e0565b604051610d6991906148ca565b60405180910390f35b348015610d7e57600080fd5b50610d876127e6565b604051610d9491906148ca565b60405180910390f35b606060038054610dac90614bae565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd890614bae565b8015610e255780601f10610dfa57610100808354040283529160200191610e25565b820191906000526020600020905b815481529060010190602001808311610e0857829003601f168201915b5050505050905090565b6000610e43610e3c61284a565b8484612852565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610ea261284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890614c2c565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b601b5481565b61100561284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90614c2c565b60405180910390fd5b670de0b6b3a76400006103e860016110aa610e90565b6110b49190614c7b565b6110be9190614d04565b6110c89190614d04565b81101561110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190614da7565b60405180910390fd5b670de0b6b3a76400008161111e9190614c7b565b60088190555050565b61112f61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590614c2c565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a819055506017546016546015546111fb9190614dc7565b6112059190614dc7565b601481905550601480541115611250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124790614e69565b60405180910390fd5b505050505050565b6000611265848484612a1d565b6113268461127161284a565b61132185604051806060016040528060288152602001615b8360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112d761284a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1d9092919063ffffffff16565b612852565b600190509392505050565b60195481565b61133f61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c590614c2c565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006114db61143f61284a565b846114d6856001600061145061284a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127ec90919063ffffffff16565b612852565b6001905092915050565b7f00000000000000000000000052ef932cf25274ca8e641dceee413608a47eff1e81565b600b60009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e161284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614c2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061173b61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190614c2c565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6117f461284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90614c2c565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b6118ec61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290614c2c565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546119a39190614dc7565b6119ad9190614dc7565b601081905550601460105411156119f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f090614e69565b60405180910390fd5b505050565b611a0661284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c90614c2c565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b611b0c61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290614c2c565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611bc790614bae565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf390614bae565b8015611c405780601f10611c1557610100808354040283529160200191611c40565b820191906000526020600020905b815481529060010190602001808311611c2357829003601f168201915b5050505050905090565b611c5261284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614c2c565b60405180910390fd5b7f00000000000000000000000052ef932cf25274ca8e641dceee413608a47eff1e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790614efb565b60405180910390fd5b611d7a8282613b81565b5050565b60135481565b601d5481565b60175481565b611d9861284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e90614c2c565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000611f07611e5161284a565b84611f0285604051806060016040528060258152602001615bab6025913960016000611e7b61284a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1d9092919063ffffffff16565b612852565b6001905092915050565b600b60039054906101000a900460ff1681565b601a5481565b6000611f3e611f3761284a565b8484612a1d565b6001905092915050565b611f5061284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690614c2c565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6120da61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216090614c2c565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161220691906147f9565b60405180910390a25050565b61221a61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090614c2c565b60405180910390fd5b670de0b6b3a76400006103e860056122bf610e90565b6122c99190614c7b565b6122d39190614d04565b6122dd9190614d04565b81101561231f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231690614f8d565b60405180910390fd5b670de0b6b3a7640000816123339190614c7b565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b600061235f61284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590614c2c565b60405180910390fd5b620186a060016123fc610e90565b6124069190614c7b565b6124109190614d04565b821015612452576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124499061501f565b60405180910390fd5b6103e8600561245f610e90565b6124699190614c7b565b6124739190614d04565b8211156124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac906150b1565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061256261284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e890614c2c565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61262161284a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790614c2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271790615143565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b60008082846127fb9190614dc7565b905083811015612840576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612837906151af565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990615241565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612932576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612929906152d3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a1091906148ca565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8490615365565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af4906153f7565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ba15750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd790615489565b60405180910390fd5b6000811415612bfa57612bf583836000613c22565b613b18565b600b60009054906101000a900460ff16156132bd57612c17611ad4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c855750612c55611ad4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cbe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cf8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d115750600560149054906101000a900460ff16155b156132bc57600b60019054906101000a900460ff16612e0b57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dcb5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e01906154f5565b60405180910390fd5b5b600f60009054906101000a900460ff1615612fd357612e28611ad4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612eaf57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f0757507f00000000000000000000000052ef932cf25274ca8e641dceee413608a47eff1e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fd25743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f84906155ad565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130765750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561311d576008548111156130c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b79061563f565b60405180910390fd5b600a546130cc83611591565b826130d79190614dc7565b1115613118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310f906156ab565b60405180910390fd5b6132bb565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131c05750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561320f5760085481111561320a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132019061573d565b60405180910390fd5b6132ba565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132b957600a5461326c83611591565b826132779190614dc7565b11156132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af906156ab565b60405180910390fd5b5b5b5b5b5b6003601e546132cc9190614dc7565b431115801561332757507f00000000000000000000000052ef932cf25274ca8e641dceee413608a47eff1e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133735750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133d1576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f00000000000000000000000052ef932cf25274ca8e641dceee413608a47eff1e73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490508015801561343e5750600b60039054906101000a900460ff165b15613561576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156134e057504262015180600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134dd9190614dc7565b10155b1561352857601854601681905550601954601581905550601a546017819055506017546016546015546135139190614dc7565b61351d9190614dc7565b60148190555061355c565b6002601681905550600360158190555060175460165460155461354b9190614dc7565b6135559190614dc7565b6014819055505b61363f565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156135ee5742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff1661363e5760036016819055506003601581905550600160178190555060175460165460155461362d9190614dc7565b6136379190614dc7565b6014819055505b5b600061364a30611591565b90506000600954821015905080801561366f5750600b60029054906101000a900460ff165b80156136885750600560149054906101000a900460ff16155b80156136de5750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137345750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561378a5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137ce576001600560146101000a81548160ff0219169083151502179055506137b2613eb7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138845750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561388e57600090505b60008115613b0757602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138f157506000601454115b156139be5761391e60646139106014548961419e90919063ffffffff16565b61421990919063ffffffff16565b9050601454601654826139319190614c7b565b61393b9190614d04565b601c600082825461394c9190614dc7565b92505081905550601454601754826139649190614c7b565b61396e9190614d04565b601d600082825461397f9190614dc7565b92505081905550601454601554826139979190614c7b565b6139a19190614d04565b601b60008282546139b29190614dc7565b92505081905550613ae3565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a1957506000601054115b15613ae257613a466064613a386010548961419e90919063ffffffff16565b61421990919063ffffffff16565b905060105460125482613a599190614c7b565b613a639190614d04565b601c6000828254613a749190614dc7565b9250508190555060105460135482613a8c9190614c7b565b613a969190614d04565b601d6000828254613aa79190614dc7565b9250508190555060105460115482613abf9190614c7b565b613ac99190614d04565b601b6000828254613ada9190614dc7565b925050819055505b5b6000811115613af857613af7883083613c22565b5b8086613b04919061575d565b95505b613b12888888613c22565b50505050505b505050565b6000838311158290613b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5c91906146e3565b60405180910390fd5b5060008385613b74919061575d565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8990615365565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf9906153f7565b60405180910390fd5b613d0d838383614263565b613d7881604051806060016040528060268152602001615b5d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1d9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127ec90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613eaa91906148ca565b60405180910390a3505050565b6000613ec230611591565b90506000601d54601b54601c54613ed99190614dc7565b613ee39190614dc7565b9050600080831480613ef55750600082145b15613f025750505061419c565b6014600954613f119190614c7b565b831115613f2a576014600954613f279190614c7b565b92505b6000600283601c5486613f3d9190614c7b565b613f479190614d04565b613f519190614d04565b90506000613f68828661426890919063ffffffff16565b90506000479050613f78826142b2565b6000613f8d824761426890919063ffffffff16565b90506000613fb887613faa601b548561419e90919063ffffffff16565b61421990919063ffffffff16565b90506000613fe388613fd5601d548661419e90919063ffffffff16565b61421990919063ffffffff16565b90506000818385613ff4919061575d565b613ffe919061575d565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161405e906157c2565b60006040518083038185875af1925050503d806000811461409b576040519150601f19603f3d011682016040523d82523d6000602084013e6140a0565b606091505b5050809850506000871180156140b65750600081115b15614103576140c587826144fe565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c546040516140fa939291906157d7565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614149906157c2565b60006040518083038185875af1925050503d8060008114614186576040519150601f19603f3d011682016040523d82523d6000602084013e61418b565b606091505b505080985050505050505050505050505b565b6000808314156141b15760009050614213565b600082846141bf9190614c7b565b90508284826141ce9190614d04565b1461420e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161420590615880565b60405180910390fd5b809150505b92915050565b600061425b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506145e7565b905092915050565b505050565b60006142aa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b1d565b905092915050565b6000600267ffffffffffffffff8111156142cf576142ce6158a0565b5b6040519080825280602002602001820160405280156142fd5781602001602082028036833780820191505090505b5090503081600081518110614315576143146158cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156143b557600080fd5b505afa1580156143c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143ed9190615913565b81600181518110614401576144006158cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614466307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612852565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016144c8959493929190615a39565b600060405180830381600087803b1580156144e257600080fd5b505af11580156144f6573d6000803e3d6000fd5b505050505050565b614529307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612852565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161458e96959493929190615a93565b6060604051808303818588803b1580156145a757600080fd5b505af11580156145bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145e09190615b09565b5050505050565b6000808311829061462e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161462591906146e3565b60405180910390fd5b506000838561463d9190614d04565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614684578082015181840152602081019050614669565b83811115614693576000848401525b50505050565b6000601f19601f8301169050919050565b60006146b58261464a565b6146bf8185614655565b93506146cf818560208601614666565b6146d881614699565b840191505092915050565b600060208201905081810360008301526146fd81846146aa565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147358261470a565b9050919050565b6147458161472a565b811461475057600080fd5b50565b6000813590506147628161473c565b92915050565b6000819050919050565b61477b81614768565b811461478657600080fd5b50565b60008135905061479881614772565b92915050565b600080604083850312156147b5576147b4614705565b5b60006147c385828601614753565b92505060206147d485828601614789565b9150509250929050565b60008115159050919050565b6147f3816147de565b82525050565b600060208201905061480e60008301846147ea565b92915050565b60006020828403121561482a57614829614705565b5b600061483884828501614753565b91505092915050565b6000819050919050565b600061486661486161485c8461470a565b614841565b61470a565b9050919050565b60006148788261484b565b9050919050565b600061488a8261486d565b9050919050565b61489a8161487f565b82525050565b60006020820190506148b56000830184614891565b92915050565b6148c481614768565b82525050565b60006020820190506148df60008301846148bb565b92915050565b6000602082840312156148fb576148fa614705565b5b600061490984828501614789565b91505092915050565b60008060008060008060c0878903121561492f5761492e614705565b5b600061493d89828a01614789565b965050602061494e89828a01614789565b955050604061495f89828a01614789565b945050606061497089828a01614789565b935050608061498189828a01614789565b92505060a061499289828a01614789565b9150509295509295509295565b6000806000606084860312156149b8576149b7614705565b5b60006149c686828701614753565b93505060206149d786828701614753565b92505060406149e886828701614789565b9150509250925092565b6149fb816147de565b8114614a0657600080fd5b50565b600081359050614a18816149f2565b92915050565b60008060408385031215614a3557614a34614705565b5b6000614a4385828601614753565b9250506020614a5485828601614a09565b9150509250929050565b600060ff82169050919050565b614a7481614a5e565b82525050565b6000602082019050614a8f6000830184614a6b565b92915050565b614a9e8161472a565b82525050565b6000602082019050614ab96000830184614a95565b92915050565b600080600060608486031215614ad857614ad7614705565b5b6000614ae686828701614789565b9350506020614af786828701614789565b9250506040614b0886828701614789565b9150509250925092565b600060208284031215614b2857614b27614705565b5b6000614b3684828501614a09565b91505092915050565b60008060408385031215614b5657614b55614705565b5b6000614b6485828601614753565b9250506020614b7585828601614753565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bc657607f821691505b60208210811415614bda57614bd9614b7f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c16602083614655565b9150614c2182614be0565b602082019050919050565b60006020820190508181036000830152614c4581614c09565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c8682614768565b9150614c9183614768565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cca57614cc9614c4c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d0f82614768565b9150614d1a83614768565b925082614d2a57614d29614cd5565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614d91602f83614655565b9150614d9c82614d35565b604082019050919050565b60006020820190508181036000830152614dc081614d84565b9050919050565b6000614dd282614768565b9150614ddd83614768565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e1257614e11614c4c565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614e53601d83614655565b9150614e5e82614e1d565b602082019050919050565b60006020820190508181036000830152614e8281614e46565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614ee5603983614655565b9150614ef082614e89565b604082019050919050565b60006020820190508181036000830152614f1481614ed8565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614f77602483614655565b9150614f8282614f1b565b604082019050919050565b60006020820190508181036000830152614fa681614f6a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615009603583614655565b915061501482614fad565b604082019050919050565b6000602082019050818103600083015261503881614ffc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061509b603483614655565b91506150a68261503f565b604082019050919050565b600060208201905081810360008301526150ca8161508e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061512d602683614655565b9150615138826150d1565b604082019050919050565b6000602082019050818103600083015261515c81615120565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615199601b83614655565b91506151a482615163565b602082019050919050565b600060208201905081810360008301526151c88161518c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061522b602483614655565b9150615236826151cf565b604082019050919050565b6000602082019050818103600083015261525a8161521e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152bd602283614655565b91506152c882615261565b604082019050919050565b600060208201905081810360008301526152ec816152b0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061534f602583614655565b915061535a826152f3565b604082019050919050565b6000602082019050818103600083015261537e81615342565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153e1602383614655565b91506153ec82615385565b604082019050919050565b60006020820190508181036000830152615410816153d4565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000615473603183614655565b915061547e82615417565b604082019050919050565b600060208201905081810360008301526154a281615466565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154df601683614655565b91506154ea826154a9565b602082019050919050565b6000602082019050818103600083015261550e816154d2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615597604983614655565b91506155a282615515565b606082019050919050565b600060208201905081810360008301526155c68161558a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615629603583614655565b9150615634826155cd565b604082019050919050565b600060208201905081810360008301526156588161561c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615695601383614655565b91506156a08261565f565b602082019050919050565b600060208201905081810360008301526156c481615688565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615727603683614655565b9150615732826156cb565b604082019050919050565b600060208201905081810360008301526157568161571a565b9050919050565b600061576882614768565b915061577383614768565b92508282101561578657615785614c4c565b5b828203905092915050565b600081905092915050565b50565b60006157ac600083615791565b91506157b78261579c565b600082019050919050565b60006157cd8261579f565b9150819050919050565b60006060820190506157ec60008301866148bb565b6157f960208301856148bb565b61580660408301846148bb565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061586a602183614655565b91506158758261580e565b604082019050919050565b600060208201905081810360008301526158998161585d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061590d8161473c565b92915050565b60006020828403121561592957615928614705565b5b6000615937848285016158fe565b91505092915050565b6000819050919050565b600061596561596061595b84615940565b614841565b614768565b9050919050565b6159758161594a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6159b08161472a565b82525050565b60006159c283836159a7565b60208301905092915050565b6000602082019050919050565b60006159e68261597b565b6159f08185615986565b93506159fb83615997565b8060005b83811015615a2c578151615a1388826159b6565b9750615a1e836159ce565b9250506001810190506159ff565b5085935050505092915050565b600060a082019050615a4e60008301886148bb565b615a5b602083018761596c565b8181036040830152615a6d81866159db565b9050615a7c6060830185614a95565b615a8960808301846148bb565b9695505050505050565b600060c082019050615aa86000830189614a95565b615ab560208301886148bb565b615ac2604083018761596c565b615acf606083018661596c565b615adc6080830185614a95565b615ae960a08301846148bb565b979650505050505050565b600081519050615b0381614772565b92915050565b600080600060608486031215615b2257615b21614705565b5b6000615b3086828701615af4565b9350506020615b4186828701615af4565b9250506040615b5286828701615af4565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204c8439d846f2c3eb613c12f7d286fc5be5a00ba144ce3ef08bbdcf58da7563cd64736f6c63430008090033
Deployed Bytecode Sourcemap
29352:17636:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14010:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16184:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31057:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29432:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15133:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38400:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30771:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30731;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35567:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36763:624;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16836:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30648:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37587:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14974:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17601:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29490:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29758:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38569:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30605:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30459:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29838:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15305:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9522:148;;;;;;;;;;;;;:::i;:::-;;34673:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36034:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30351:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36385:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34472:148;;;;;;;;;;;;;:::i;:::-;;8878:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30494:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36275:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14230:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37731:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30425:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30811:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30570:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34998:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18323:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29876:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30691:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15646:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38183:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31280:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29798:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37396:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35810:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30268:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29642:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35172:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30317:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15885:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29684:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34855:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30388:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9826:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30532:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29724:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14010:100;14064:13;14097:5;14090:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14010:100;:::o;16184:169::-;16267:4;16284:39;16293:12;:10;:12::i;:::-;16307:7;16316:6;16284:8;:39::i;:::-;16341:4;16334:11;;16184:169;;;;:::o;31057:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29432:51::-;;;:::o;15133:108::-;15194:7;15221:12;;15214:19;;15133:108;:::o;38400:157::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38507:9:::1;;;;;;;;;;;38479:38;;38496:9;38479:38;;;;;;;;;;;;38540:9;38528;;:21;;;;;;;;;;;;;;;;;;38400:157:::0;:::o;30771:33::-;;;;:::o;30731:::-;;;;:::o;35567:234::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35686:4:::1;35680;35676:1;35660:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35659:31;;;;:::i;:::-;35649:6;:41;;35641:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35786:6;35776;:17;;;;:::i;:::-;35753:20;:40;;;;35567:234:::0;:::o;36763:624::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36989:13:::1;36970:16;:32;;;;37032:13;37013:16;:32;;;;37069:7;37056:10;:20;;;;37111:22;37087:21;:46;;;;37168:22;37144:21;:46;;;;37216:16;37198:15;:34;;;;37297:10;;37278:16;;37259;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;37243:13;:64;;;;37343:2;37326:13:::0;::::1;:19;;37318:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36763:624:::0;;;;;;:::o;16836:355::-;16976:4;16993:36;17003:6;17011:9;17022:6;16993:9;:36::i;:::-;17040:121;17049:6;17057:12;:10;:12::i;:::-;17071:89;17109:6;17071:89;;;;;;;;;;;;;;;;;:11;:19;17083:6;17071:19;;;;;;;;;;;;;;;:33;17091:12;:10;:12::i;:::-;17071:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;17040:8;:121::i;:::-;17179:4;17172:11;;16836:355;;;;;:::o;30648:36::-;;;;:::o;37587:135::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37701:13:::1;37679:10;:19;37690:7;37679:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37587:135:::0;;:::o;14974:93::-;15032:5;15057:2;15050:9;;14974:93;:::o;17601:218::-;17689:4;17706:83;17715:12;:10;:12::i;:::-;17729:7;17738:50;17777:10;17738:11;:25;17750:12;:10;:12::i;:::-;17738:25;;;;;;;;;;;;;;;:34;17764:7;17738:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;17706:8;:83::i;:::-;17807:4;17800:11;;17601:218;;;;:::o;29490:38::-;;;:::o;29758:33::-;;;;;;;;;;;;;:::o;38569:125::-;38634:4;38658:19;:28;38678:7;38658:28;;;;;;;;;;;;;;;;;;;;;;;;;38651:35;;38569:125;;;:::o;30605:36::-;;;;:::o;30459:28::-;;;;:::o;29838:31::-;;;;;;;;;;;;;:::o;15305:127::-;15379:7;15406:9;:18;15416:7;15406:18;;;;;;;;;;;;;;;;15399:25;;15305:127;;;:::o;9522:148::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9629:1:::1;9592:40;;9613:6;;;;;;;;;;;9592:40;;;;;;;;;;;;9660:1;9643:6;;:19;;;;;;;;;;;;;;;;;;9522:148::o:0;34673:120::-;34725:4;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34758:5:::1;34741:14;;:22;;;;;;;;;;;;;;;;;;34781:4;34774:11;;34673:120:::0;:::o;36034:144::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36166:4:::1;36124:31;:39;36156:6;36124:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36034:144:::0;;:::o;30351:30::-;;;;:::o;36385:369::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36519:13:::1;36501:15;:31;;;;36561:13;36543:15;:31;;;;36597:7;36585:9;:19;;;;36666:9;;36648:15;;36630;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36615:12;:60;;;;36710:2;36694:12;;:18;;36686:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36385:369:::0;;;:::o;34472:148::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34543:4:::1;34527:13;;:20;;;;;;;;;;;;;;;;;;34572:4;34558:11;;:18;;;;;;;;;;;;;;;;;;34600:12;34587:10;:25;;;;34472:148::o:0;8878:79::-;8916:7;8943:6;;;;;;;;;;;8936:13;;8878:79;:::o;30494:31::-;;;;:::o;36275:101::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36361:7:::1;36347:11;;:21;;;;;;;;;;;;;;;;;;36275:101:::0;:::o;14230:104::-;14286:13;14319:7;14312:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14230:104;:::o;37731:245::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37838:13:::1;37830:21;;:4;:21;;;;37822:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37927:41;37956:4;37962:5;37927:28;:41::i;:::-;37731:245:::0;;:::o;30425:24::-;;;;:::o;30811:27::-;;;;:::o;30570:25::-;;;;:::o;34998:102::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35087:5:::1;35066:18;;:26;;;;;;;;;;;;;;;;;;34998:102:::0;:::o;18323:269::-;18416:4;18433:129;18442:12;:10;:12::i;:::-;18456:7;18465:96;18504:15;18465:96;;;;;;;;;;;;;;;;;:11;:25;18477:12;:10;:12::i;:::-;18465:25;;;;;;;;;;;;;;;:34;18491:7;18465:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18433:8;:129::i;:::-;18580:4;18573:11;;18323:269;;;;:::o;29876:37::-;;;;;;;;;;;;;:::o;30691:30::-;;;;:::o;15646:175::-;15732:4;15749:42;15759:12;:10;:12::i;:::-;15773:9;15784:6;15749:9;:42::i;:::-;15809:4;15802:11;;15646:175;;;;:::o;38183:208::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38320:15:::1;;;;;;;;;;;38277:59;;38300:18;38277:59;;;;;;;;;;;;38365:18;38347:15;;:36;;;;;;;;;;;;;;;;;;38183:208:::0;:::o;31280:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29798:33::-;;;;;;;;;;;;;:::o;37396:182::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37512:8:::1;37481:19;:28;37501:7;37481:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37552:7;37536:34;;;37561:8;37536:34;;;;;;:::i;:::-;;;;;;;;37396:182:::0;;:::o;35810:215::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35932:4:::1;35926;35922:1;35906:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35905:31;;;;:::i;:::-;35895:6;:41;;35887:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36010:6;36000;:17;;;;:::i;:::-;35988:9;:29;;;;35810:215:::0;:::o;30268:39::-;;;;;;;;;;;;;:::o;29642:35::-;;;;:::o;35172:386::-;35253:4;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35310:6:::1;35306:1;35290:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35277:9;:39;;35269:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35426:4;35422:1;35406:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35393:9;:37;;35385:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35519:9;35498:18;:30;;;;35546:4;35539:11;;35172:386:::0;;;:::o;30317:27::-;;;;:::o;15885:151::-;15974:7;16001:11;:18;16013:5;16001:18;;;;;;;;;;;;;;;:27;16020:7;16001:27;;;;;;;;;;;;;;;;15994:34;;15885:151;;;;:::o;29684:33::-;;;;:::o;34855:134::-;34915:4;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34954:5:::1;34931:20;;:28;;;;;;;;;;;;;;;;;;34977:4;34970:11;;34855:134:::0;:::o;30388:30::-;;;;:::o;9826:244::-;9101:12;:10;:12::i;:::-;9091:22;;:6;;;;;;;;;;;:22;;;9083:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9935:1:::1;9915:22;;:8;:22;;;;9907:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10025:8;9996:38;;10017:6;;;;;;;;;;;9996:38;;;;;;;;;;;;10054:8;10045:6;;:17;;;;;;;;;;;;;;;;;;9826:244:::0;:::o;30532:31::-;;;;:::o;29724:24::-;;;;:::o;22900:182::-;22958:7;22978:9;22994:1;22990;:5;;;;:::i;:::-;22978:17;;23019:1;23014;:6;;23006:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;23073:1;23066:8;;;22900:182;;;;:::o;8034:98::-;8087:7;8114:10;8107:17;;8034:98;:::o;21519:381::-;21672:1;21655:19;;:5;:19;;;;21647:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21753:1;21734:21;;:7;:21;;;;21726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21838:6;21808:11;:18;21820:5;21808:18;;;;;;;;;;;;;;;:27;21827:7;21808:27;;;;;;;;;;;;;;;:36;;;;21876:7;21860:32;;21869:5;21860:32;;;21885:6;21860:32;;;;;;:::i;:::-;;;;;;;;21519:381;;;:::o;38754:5519::-;38902:1;38886:18;;:4;:18;;;;38878:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38979:1;38965:16;;:2;:16;;;;38957:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39041:10;:14;39052:2;39041:14;;;;;;;;;;;;;;;;;;;;;;;;;39040:15;:36;;;;;39060:10;:16;39071:4;39060:16;;;;;;;;;;;;;;;;;;;;;;;;;39059:17;39040:36;39032:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39155:1;39145:6;:11;39142:92;;;39173:28;39189:4;39195:2;39199:1;39173:15;:28::i;:::-;39216:7;;39142:92;39250:14;;;;;;;;;;;39247:1811;;;39310:7;:5;:7::i;:::-;39302:15;;:4;:15;;;;:49;;;;;39344:7;:5;:7::i;:::-;39338:13;;:2;:13;;;;39302:49;:86;;;;;39386:1;39372:16;;:2;:16;;;;39302:86;:128;;;;;39423:6;39409:21;;:2;:21;;;;39302:128;:158;;;;;39452:8;;;;;;;;;;;39451:9;39302:158;39280:1767;;;39498:13;;;;;;;;;;;39494:148;;39543:19;:25;39563:4;39543:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39572:19;:23;39592:2;39572:23;;;;;;;;;;;;;;;;;;;;;;;;;39543:52;39535:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39494:148;39801:20;;;;;;;;;;;39797:423;;;39855:7;:5;:7::i;:::-;39849:13;;:2;:13;;;;:47;;;;;39880:15;39866:30;;:2;:30;;;;39849:47;:79;;;;;39914:13;39900:28;;:2;:28;;;;39849:79;39845:356;;;40006:12;39964:28;:39;39993:9;39964:39;;;;;;;;;;;;;;;;:54;39956:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40165:12;40123:28;:39;40152:9;40123:39;;;;;;;;;;;;;;;:54;;;;39845:356;39797:423;40273:25;:31;40299:4;40273:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40309:31;:35;40341:2;40309:35;;;;;;;;;;;;;;;;;;;;;;;;;40308:36;40273:71;40269:763;;;40391:20;;40381:6;:30;;40373:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40530:9;;40513:13;40523:2;40513:9;:13::i;:::-;40504:6;:22;;;;:::i;:::-;:35;;40496:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40269:763;;;40642:25;:29;40668:2;40642:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40676:31;:37;40708:4;40676:37;;;;;;;;;;;;;;;;;;;;;;;;;40675:38;40642:71;40638:394;;;40760:20;;40750:6;:30;;40742:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40638:394;;;40886:31;:35;40918:2;40886:35;;;;;;;;;;;;;;;;;;;;;;;;;40882:150;;40979:9;;40962:13;40972:2;40962:9;:13::i;:::-;40953:6;:22;;;;:::i;:::-;:35;;40945:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40882:150;40638:394;40269:763;39280:1767;39247:1811;41132:1;41119:10;;:14;;;;:::i;:::-;41102:12;:32;;:73;;;;;41162:13;41156:19;;:2;:19;;;;41102:73;:152;;;;;41211:42;41197:57;;:2;:57;;;;41102:152;41098:221;;;41303:4;41286:10;:14;41297:2;41286:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41098:221;41361:10;41382:13;41374:21;;:4;:21;;;41361:34;;41411:5;41410:6;:28;;;;;41420:18;;;;;;;;;;;41410:28;41406:1026;;;41493:1;41459:24;:30;41484:4;41459:30;;;;;;;;;;;;;;;;:35;;:120;;;;;41563:15;41550:8;41516:24;:30;41541:4;41516:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;41459:120;41455:568;;;41620:21;;41601:16;:40;;;;41679:21;;41660:16;:40;;;;41726:15;;41713:10;:28;;;;41814:10;;41795:16;;41776;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41760:13;:64;;;;41455:568;;;41884:1;41865:16;:20;;;;41923:1;41904:16;:20;;;;41997:10;;41978:16;;41959;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41943:13;:64;;;;41455:568;41406:1026;;;42091:1;42059:24;:28;42084:2;42059:28;;;;;;;;;;;;;;;;:33;42055:120;;;42144:15;42113:24;:28;42138:2;42113:28;;;;;;;;;;;;;;;:46;;;;42055:120;42197:18;;;;;;;;;;;42192:229;;42255:1;42236:16;:20;;;;42294:1;42275:16;:20;;;;42321:1;42308:10;:14;;;;42395:10;;42376:16;;42357;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;42341:13;:64;;;;42192:229;41406:1026;42445:28;42476:24;42494:4;42476:9;:24::i;:::-;42445:55;;42514:12;42553:18;;42529:20;:42;;42514:57;;42603:7;:35;;;;;42627:11;;;;;;;;;;;42603:35;:61;;;;;42656:8;;;;;;;;;;;42655:9;42603:61;:110;;;;;42682:25;:31;42708:4;42682:31;;;;;;;;;;;;;;;;;;;;;;;;;42681:32;42603:110;:153;;;;;42731:19;:25;42751:4;42731:25;;;;;;;;;;;;;;;;;;;;;;;;;42730:26;42603:153;:194;;;;;42774:19;:23;42794:2;42774:23;;;;;;;;;;;;;;;;;;;;;;;;;42773:24;42603:194;42585:328;;;42835:4;42824:8;;:15;;;;;;;;;;;;;;;;;;42857:10;:8;:10::i;:::-;42896:5;42885:8;;:16;;;;;;;;;;;;;;;;;;42585:328;42926:12;42942:8;;;;;;;;;;;42941:9;42926:24;;43052:19;:25;43072:4;43052:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43081:19;:23;43101:2;43081:23;;;;;;;;;;;;;;;;;;;;;;;;;43052:52;43049:99;;;43131:5;43121:15;;43049:99;43161:12;43265:7;43262:957;;;43316:25;:29;43342:2;43316:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43365:1;43349:13;;:17;43316:50;43312:754;;;43393:34;43423:3;43393:25;43404:13;;43393:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;43386:41;;43494:13;;43475:16;;43468:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43446:18;;:61;;;;;;;:::i;:::-;;;;;;;;43562:13;;43549:10;;43542:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;43526:12;;:49;;;;;;;:::i;:::-;;;;;;;;43642:13;;43623:16;;43616:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43594:18;;:61;;;;;;;:::i;:::-;;;;;;;;43312:754;;;43716:25;:31;43742:4;43716:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43766:1;43751:12;;:16;43716:51;43713:353;;;43795:33;43824:3;43795:24;43806:12;;43795:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43788:40;;43894:12;;43876:15;;43869:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43847:18;;:59;;;;;;;:::i;:::-;;;;;;;;43960:12;;43948:9;;43941:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;43925:12;;:47;;;;;;;:::i;:::-;;;;;;;;44038:12;;44020:15;;44013:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43991:18;;:59;;;;;;;:::i;:::-;;;;;;;;43713:353;43312:754;44093:1;44086:4;:8;44083:93;;;44118:42;44134:4;44148;44155;44118:15;:42::i;:::-;44083:93;44203:4;44193:14;;;;;:::i;:::-;;;43262:957;44232:33;44248:4;44254:2;44258:6;44232:15;:33::i;:::-;38867:5406;;;;;38754:5519;;;;:::o;23806:193::-;23892:7;23925:1;23920;:6;;23928:12;23912:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23952:9;23968:1;23964;:5;;;;:::i;:::-;23952:17;;23990:1;23983:8;;;23806:193;;;;;:::o;37985:189::-;38102:5;38068:25;:31;38094:4;38068:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38160:5;38126:40;;38154:4;38126:40;;;;;;;;;;;;37985:189;;:::o;19083:575::-;19241:1;19223:20;;:6;:20;;;;19215:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;19325:1;19304:23;;:9;:23;;;;19296:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19381:47;19402:6;19410:9;19421:6;19381:20;:47::i;:::-;19462:71;19484:6;19462:71;;;;;;;;;;;;;;;;;:9;:17;19472:6;19462:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;19442:9;:17;19452:6;19442:17;;;;;;;;;;;;;;;:91;;;;19567:32;19592:6;19567:9;:20;19577:9;19567:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;19544:9;:20;19554:9;19544:20;;;;;;;;;;;;;;;:55;;;;19632:9;19615:35;;19624:6;19615:35;;;19643:6;19615:35;;;;;;:::i;:::-;;;;;;;;19083:575;;;:::o;45417:1568::-;45456:23;45482:24;45500:4;45482:9;:24::i;:::-;45456:50;;45517:25;45587:12;;45566:18;;45545;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;45517:82;;45610:12;45658:1;45639:15;:20;:46;;;;45684:1;45663:17;:22;45639:46;45636:60;;;45688:7;;;;;45636:60;45751:2;45730:18;;:23;;;;:::i;:::-;45712:15;:41;45709:111;;;45806:2;45785:18;;:23;;;;:::i;:::-;45767:41;;45709:111;45882:23;45967:1;45947:17;45926:18;;45908:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45882:86;;45979:26;46008:36;46028:15;46008;:19;;:36;;;;:::i;:::-;45979:65;;46058:25;46086:21;46058:49;;46121:36;46138:18;46121:16;:36::i;:::-;46172:18;46193:44;46219:17;46193:21;:25;;:44;;;;:::i;:::-;46172:65;;46251:23;46277:57;46316:17;46277:34;46292:18;;46277:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;46251:83;;46345:17;46365:51;46398:17;46365:28;46380:12;;46365:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;46345:71;;46427:23;46484:9;46466:15;46453:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;46427:66;;46531:1;46510:18;:22;;;;46564:1;46543:18;:22;;;;46591:1;46576:12;:16;;;;46627:9;;;;;;;;;;;46619:23;;46650:9;46619:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46606:58;;;;;46699:1;46681:15;:19;:42;;;;;46722:1;46704:15;:19;46681:42;46678:210;;;46739:46;46752:15;46769;46739:12;:46::i;:::-;46805:71;46820:18;46840:15;46857:18;;46805:71;;;;;;;;:::i;:::-;;;;;;;;46678:210;46922:15;;;;;;;;;;;46914:29;;46951:21;46914:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46901:76;;;;;45445:1540;;;;;;;;;;45417:1568;:::o;24259:473::-;24317:7;24567:1;24562;:6;24558:47;;;24592:1;24585:8;;;;24558:47;24618:9;24634:1;24630;:5;;;;:::i;:::-;24618:17;;24663:1;24658;24654;:5;;;;:::i;:::-;:10;24646:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;24723:1;24716:8;;;24259:473;;;;;:::o;25209:132::-;25267:7;25294:39;25298:1;25301;25294:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;25287:46;;25209:132;;;;:::o;22504:125::-;;;;:::o;23366:136::-;23424:7;23451:43;23455:1;23458;23451:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;23444:50;;23366:136;;;;:::o;44282:597::-;44411:21;44449:1;44435:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44411:40;;44480:4;44462;44467:1;44462:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44506:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44496:4;44501:1;44496:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44542:62;44559:4;44574:15;44592:11;44542:8;:62::i;:::-;44644:15;:66;;;44725:11;44751:1;44795:4;44822;44842:15;44644:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44337:542;44282:597;:::o;44888:520::-;45036:62;45053:4;45068:15;45086:11;45036:8;:62::i;:::-;45142:15;:31;;;45181:9;45214:4;45234:11;45260:1;45303;45354:4;45374:15;45142:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44888:520;;:::o;25838:279::-;25924:7;25956:1;25952;:5;25959:12;25944:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25983:9;25999:1;25995;:5;;;;:::i;:::-;25983:17;;26108:1;26101:8;;;25838:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:152::-;4251:9;4284:37;4315:5;4284:37;:::i;:::-;4271:50;;4175:152;;;:::o;4333:183::-;4446:63;4503:5;4446:63;:::i;:::-;4441:3;4434:76;4333:183;;:::o;4522:274::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:97;4786:1;4775:9;4771:17;4762:6;4692:97;:::i;:::-;4522:274;;;;:::o;4802:118::-;4889:24;4907:5;4889:24;:::i;:::-;4884:3;4877:37;4802:118;;:::o;4926:222::-;5019:4;5057:2;5046:9;5042:18;5034:26;;5070:71;5138:1;5127:9;5123:17;5114:6;5070:71;:::i;:::-;4926:222;;;;:::o;5154:329::-;5213:6;5262:2;5250:9;5241:7;5237:23;5233:32;5230:119;;;5268:79;;:::i;:::-;5230:119;5388:1;5413:53;5458:7;5449:6;5438:9;5434:22;5413:53;:::i;:::-;5403:63;;5359:117;5154:329;;;;:::o;5489:1057::-;5593:6;5601;5609;5617;5625;5633;5682:3;5670:9;5661:7;5657:23;5653:33;5650:120;;;5689:79;;:::i;:::-;5650:120;5809:1;5834:53;5879:7;5870:6;5859:9;5855:22;5834:53;:::i;:::-;5824:63;;5780:117;5936:2;5962:53;6007:7;5998:6;5987:9;5983:22;5962:53;:::i;:::-;5952:63;;5907:118;6064:2;6090:53;6135:7;6126:6;6115:9;6111:22;6090:53;:::i;:::-;6080:63;;6035:118;6192:2;6218:53;6263:7;6254:6;6243:9;6239:22;6218:53;:::i;:::-;6208:63;;6163:118;6320:3;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6291:119;6449:3;6476:53;6521:7;6512:6;6501:9;6497:22;6476:53;:::i;:::-;6466:63;;6420:119;5489:1057;;;;;;;;:::o;6552:619::-;6629:6;6637;6645;6694:2;6682:9;6673:7;6669:23;6665:32;6662:119;;;6700:79;;:::i;:::-;6662:119;6820:1;6845:53;6890:7;6881:6;6870:9;6866:22;6845:53;:::i;:::-;6835:63;;6791:117;6947:2;6973:53;7018:7;7009:6;6998:9;6994:22;6973:53;:::i;:::-;6963:63;;6918:118;7075:2;7101:53;7146:7;7137:6;7126:9;7122:22;7101:53;:::i;:::-;7091:63;;7046:118;6552:619;;;;;:::o;7177:116::-;7247:21;7262:5;7247:21;:::i;:::-;7240:5;7237:32;7227:60;;7283:1;7280;7273:12;7227:60;7177:116;:::o;7299:133::-;7342:5;7380:6;7367:20;7358:29;;7396:30;7420:5;7396:30;:::i;:::-;7299:133;;;;:::o;7438:468::-;7503:6;7511;7560:2;7548:9;7539:7;7535:23;7531:32;7528:119;;;7566:79;;:::i;:::-;7528:119;7686:1;7711:53;7756:7;7747:6;7736:9;7732:22;7711:53;:::i;:::-;7701:63;;7657:117;7813:2;7839:50;7881:7;7872:6;7861:9;7857:22;7839:50;:::i;:::-;7829:60;;7784:115;7438:468;;;;;:::o;7912:86::-;7947:7;7987:4;7980:5;7976:16;7965:27;;7912:86;;;:::o;8004:112::-;8087:22;8103:5;8087:22;:::i;:::-;8082:3;8075:35;8004:112;;:::o;8122:214::-;8211:4;8249:2;8238:9;8234:18;8226:26;;8262:67;8326:1;8315:9;8311:17;8302:6;8262:67;:::i;:::-;8122:214;;;;:::o;8342:118::-;8429:24;8447:5;8429:24;:::i;:::-;8424:3;8417:37;8342:118;;:::o;8466:222::-;8559:4;8597:2;8586:9;8582:18;8574:26;;8610:71;8678:1;8667:9;8663:17;8654:6;8610:71;:::i;:::-;8466:222;;;;:::o;8694:619::-;8771:6;8779;8787;8836:2;8824:9;8815:7;8811:23;8807:32;8804:119;;;8842:79;;:::i;:::-;8804:119;8962:1;8987:53;9032:7;9023:6;9012:9;9008:22;8987:53;:::i;:::-;8977:63;;8933:117;9089:2;9115:53;9160:7;9151:6;9140:9;9136:22;9115:53;:::i;:::-;9105:63;;9060:118;9217:2;9243:53;9288:7;9279:6;9268:9;9264:22;9243:53;:::i;:::-;9233:63;;9188:118;8694:619;;;;;:::o;9319:323::-;9375:6;9424:2;9412:9;9403:7;9399:23;9395:32;9392:119;;;9430:79;;:::i;:::-;9392:119;9550:1;9575:50;9617:7;9608:6;9597:9;9593:22;9575:50;:::i;:::-;9565:60;;9521:114;9319:323;;;;:::o;9648:474::-;9716:6;9724;9773:2;9761:9;9752:7;9748:23;9744:32;9741:119;;;9779:79;;:::i;:::-;9741:119;9899:1;9924:53;9969:7;9960:6;9949:9;9945:22;9924:53;:::i;:::-;9914:63;;9870:117;10026:2;10052:53;10097:7;10088:6;10077:9;10073:22;10052:53;:::i;:::-;10042:63;;9997:118;9648:474;;;;;:::o;10128:180::-;10176:77;10173:1;10166:88;10273:4;10270:1;10263:15;10297:4;10294:1;10287:15;10314:320;10358:6;10395:1;10389:4;10385:12;10375:22;;10442:1;10436:4;10432:12;10463:18;10453:81;;10519:4;10511:6;10507:17;10497:27;;10453:81;10581:2;10573:6;10570:14;10550:18;10547:38;10544:84;;;10600:18;;:::i;:::-;10544:84;10365:269;10314:320;;;:::o;10640:182::-;10780:34;10776:1;10768:6;10764:14;10757:58;10640:182;:::o;10828:366::-;10970:3;10991:67;11055:2;11050:3;10991:67;:::i;:::-;10984:74;;11067:93;11156:3;11067:93;:::i;:::-;11185:2;11180:3;11176:12;11169:19;;10828:366;;;:::o;11200:419::-;11366:4;11404:2;11393:9;11389:18;11381:26;;11453:9;11447:4;11443:20;11439:1;11428:9;11424:17;11417:47;11481:131;11607:4;11481:131;:::i;:::-;11473:139;;11200:419;;;:::o;11625:180::-;11673:77;11670:1;11663:88;11770:4;11767:1;11760:15;11794:4;11791:1;11784:15;11811:348;11851:7;11874:20;11892:1;11874:20;:::i;:::-;11869:25;;11908:20;11926:1;11908:20;:::i;:::-;11903:25;;12096:1;12028:66;12024:74;12021:1;12018:81;12013:1;12006:9;11999:17;11995:105;11992:131;;;12103:18;;:::i;:::-;11992:131;12151:1;12148;12144:9;12133:20;;11811:348;;;;:::o;12165:180::-;12213:77;12210:1;12203:88;12310:4;12307:1;12300:15;12334:4;12331:1;12324:15;12351:185;12391:1;12408:20;12426:1;12408:20;:::i;:::-;12403:25;;12442:20;12460:1;12442:20;:::i;:::-;12437:25;;12481:1;12471:35;;12486:18;;:::i;:::-;12471:35;12528:1;12525;12521:9;12516:14;;12351:185;;;;:::o;12542:234::-;12682:34;12678:1;12670:6;12666:14;12659:58;12751:17;12746:2;12738:6;12734:15;12727:42;12542:234;:::o;12782:366::-;12924:3;12945:67;13009:2;13004:3;12945:67;:::i;:::-;12938:74;;13021:93;13110:3;13021:93;:::i;:::-;13139:2;13134:3;13130:12;13123:19;;12782:366;;;:::o;13154:419::-;13320:4;13358:2;13347:9;13343:18;13335:26;;13407:9;13401:4;13397:20;13393:1;13382:9;13378:17;13371:47;13435:131;13561:4;13435:131;:::i;:::-;13427:139;;13154:419;;;:::o;13579:305::-;13619:3;13638:20;13656:1;13638:20;:::i;:::-;13633:25;;13672:20;13690:1;13672:20;:::i;:::-;13667:25;;13826:1;13758:66;13754:74;13751:1;13748:81;13745:107;;;13832:18;;:::i;:::-;13745:107;13876:1;13873;13869:9;13862:16;;13579:305;;;;:::o;13890:179::-;14030:31;14026:1;14018:6;14014:14;14007:55;13890:179;:::o;14075:366::-;14217:3;14238:67;14302:2;14297:3;14238:67;:::i;:::-;14231:74;;14314:93;14403:3;14314:93;:::i;:::-;14432:2;14427:3;14423:12;14416:19;;14075:366;;;:::o;14447:419::-;14613:4;14651:2;14640:9;14636:18;14628:26;;14700:9;14694:4;14690:20;14686:1;14675:9;14671:17;14664:47;14728:131;14854:4;14728:131;:::i;:::-;14720:139;;14447:419;;;:::o;14872:244::-;15012:34;15008:1;15000:6;14996:14;14989:58;15081:27;15076:2;15068:6;15064:15;15057:52;14872:244;:::o;15122:366::-;15264:3;15285:67;15349:2;15344:3;15285:67;:::i;:::-;15278:74;;15361:93;15450:3;15361:93;:::i;:::-;15479:2;15474:3;15470:12;15463:19;;15122:366;;;:::o;15494:419::-;15660:4;15698:2;15687:9;15683:18;15675:26;;15747:9;15741:4;15737:20;15733:1;15722:9;15718:17;15711:47;15775:131;15901:4;15775:131;:::i;:::-;15767:139;;15494:419;;;:::o;15919:223::-;16059:34;16055:1;16047:6;16043:14;16036:58;16128:6;16123:2;16115:6;16111:15;16104:31;15919:223;:::o;16148:366::-;16290:3;16311:67;16375:2;16370:3;16311:67;:::i;:::-;16304:74;;16387:93;16476:3;16387:93;:::i;:::-;16505:2;16500:3;16496:12;16489:19;;16148:366;;;:::o;16520:419::-;16686:4;16724:2;16713:9;16709:18;16701:26;;16773:9;16767:4;16763:20;16759:1;16748:9;16744:17;16737:47;16801:131;16927:4;16801:131;:::i;:::-;16793:139;;16520:419;;;:::o;16945:240::-;17085:34;17081:1;17073:6;17069:14;17062:58;17154:23;17149:2;17141:6;17137:15;17130:48;16945:240;:::o;17191:366::-;17333:3;17354:67;17418:2;17413:3;17354:67;:::i;:::-;17347:74;;17430:93;17519:3;17430:93;:::i;:::-;17548:2;17543:3;17539:12;17532:19;;17191:366;;;:::o;17563:419::-;17729:4;17767:2;17756:9;17752:18;17744:26;;17816:9;17810:4;17806:20;17802:1;17791:9;17787:17;17780:47;17844:131;17970:4;17844:131;:::i;:::-;17836:139;;17563:419;;;:::o;17988:239::-;18128:34;18124:1;18116:6;18112:14;18105:58;18197:22;18192:2;18184:6;18180:15;18173:47;17988:239;:::o;18233:366::-;18375:3;18396:67;18460:2;18455:3;18396:67;:::i;:::-;18389:74;;18472:93;18561:3;18472:93;:::i;:::-;18590:2;18585:3;18581:12;18574:19;;18233:366;;;:::o;18605:419::-;18771:4;18809:2;18798:9;18794:18;18786:26;;18858:9;18852:4;18848:20;18844:1;18833:9;18829:17;18822:47;18886:131;19012:4;18886:131;:::i;:::-;18878:139;;18605:419;;;:::o;19030:225::-;19170:34;19166:1;19158:6;19154:14;19147:58;19239:8;19234:2;19226:6;19222:15;19215:33;19030:225;:::o;19261:366::-;19403:3;19424:67;19488:2;19483:3;19424:67;:::i;:::-;19417:74;;19500:93;19589:3;19500:93;:::i;:::-;19618:2;19613:3;19609:12;19602:19;;19261:366;;;:::o;19633:419::-;19799:4;19837:2;19826:9;19822:18;19814:26;;19886:9;19880:4;19876:20;19872:1;19861:9;19857:17;19850:47;19914:131;20040:4;19914:131;:::i;:::-;19906:139;;19633:419;;;:::o;20058:177::-;20198:29;20194:1;20186:6;20182:14;20175:53;20058:177;:::o;20241:366::-;20383:3;20404:67;20468:2;20463:3;20404:67;:::i;:::-;20397:74;;20480:93;20569:3;20480:93;:::i;:::-;20598:2;20593:3;20589:12;20582:19;;20241:366;;;:::o;20613:419::-;20779:4;20817:2;20806:9;20802:18;20794:26;;20866:9;20860:4;20856:20;20852:1;20841:9;20837:17;20830:47;20894:131;21020:4;20894:131;:::i;:::-;20886:139;;20613:419;;;:::o;21038:223::-;21178:34;21174:1;21166:6;21162:14;21155:58;21247:6;21242:2;21234:6;21230:15;21223:31;21038:223;:::o;21267:366::-;21409:3;21430:67;21494:2;21489:3;21430:67;:::i;:::-;21423:74;;21506:93;21595:3;21506:93;:::i;:::-;21624:2;21619:3;21615:12;21608:19;;21267:366;;;:::o;21639:419::-;21805:4;21843:2;21832:9;21828:18;21820:26;;21892:9;21886:4;21882:20;21878:1;21867:9;21863:17;21856:47;21920:131;22046:4;21920:131;:::i;:::-;21912:139;;21639:419;;;:::o;22064:221::-;22204:34;22200:1;22192:6;22188:14;22181:58;22273:4;22268:2;22260:6;22256:15;22249:29;22064:221;:::o;22291:366::-;22433:3;22454:67;22518:2;22513:3;22454:67;:::i;:::-;22447:74;;22530:93;22619:3;22530:93;:::i;:::-;22648:2;22643:3;22639:12;22632:19;;22291:366;;;:::o;22663:419::-;22829:4;22867:2;22856:9;22852:18;22844:26;;22916:9;22910:4;22906:20;22902:1;22891:9;22887:17;22880:47;22944:131;23070:4;22944:131;:::i;:::-;22936:139;;22663:419;;;:::o;23088:224::-;23228:34;23224:1;23216:6;23212:14;23205:58;23297:7;23292:2;23284:6;23280:15;23273:32;23088:224;:::o;23318:366::-;23460:3;23481:67;23545:2;23540:3;23481:67;:::i;:::-;23474:74;;23557:93;23646:3;23557:93;:::i;:::-;23675:2;23670:3;23666:12;23659:19;;23318:366;;;:::o;23690:419::-;23856:4;23894:2;23883:9;23879:18;23871:26;;23943:9;23937:4;23933:20;23929:1;23918:9;23914:17;23907:47;23971:131;24097:4;23971:131;:::i;:::-;23963:139;;23690:419;;;:::o;24115:222::-;24255:34;24251:1;24243:6;24239:14;24232:58;24324:5;24319:2;24311:6;24307:15;24300:30;24115:222;:::o;24343:366::-;24485:3;24506:67;24570:2;24565:3;24506:67;:::i;:::-;24499:74;;24582:93;24671:3;24582:93;:::i;:::-;24700:2;24695:3;24691:12;24684:19;;24343:366;;;:::o;24715:419::-;24881:4;24919:2;24908:9;24904:18;24896:26;;24968:9;24962:4;24958:20;24954:1;24943:9;24939:17;24932:47;24996:131;25122:4;24996:131;:::i;:::-;24988:139;;24715:419;;;:::o;25140:236::-;25280:34;25276:1;25268:6;25264:14;25257:58;25349:19;25344:2;25336:6;25332:15;25325:44;25140:236;:::o;25382:366::-;25524:3;25545:67;25609:2;25604:3;25545:67;:::i;:::-;25538:74;;25621:93;25710:3;25621:93;:::i;:::-;25739:2;25734:3;25730:12;25723:19;;25382:366;;;:::o;25754:419::-;25920:4;25958:2;25947:9;25943:18;25935:26;;26007:9;26001:4;25997:20;25993:1;25982:9;25978:17;25971:47;26035:131;26161:4;26035:131;:::i;:::-;26027:139;;25754:419;;;:::o;26179:172::-;26319:24;26315:1;26307:6;26303:14;26296:48;26179:172;:::o;26357:366::-;26499:3;26520:67;26584:2;26579:3;26520:67;:::i;:::-;26513:74;;26596:93;26685:3;26596:93;:::i;:::-;26714:2;26709:3;26705:12;26698:19;;26357:366;;;:::o;26729:419::-;26895:4;26933:2;26922:9;26918:18;26910:26;;26982:9;26976:4;26972:20;26968:1;26957:9;26953:17;26946:47;27010:131;27136:4;27010:131;:::i;:::-;27002:139;;26729:419;;;:::o;27154:297::-;27294:34;27290:1;27282:6;27278:14;27271:58;27363:34;27358:2;27350:6;27346:15;27339:59;27432:11;27427:2;27419:6;27415:15;27408:36;27154:297;:::o;27457:366::-;27599:3;27620:67;27684:2;27679:3;27620:67;:::i;:::-;27613:74;;27696:93;27785:3;27696:93;:::i;:::-;27814:2;27809:3;27805:12;27798:19;;27457:366;;;:::o;27829:419::-;27995:4;28033:2;28022:9;28018:18;28010:26;;28082:9;28076:4;28072:20;28068:1;28057:9;28053:17;28046:47;28110:131;28236:4;28110:131;:::i;:::-;28102:139;;27829:419;;;:::o;28254:240::-;28394:34;28390:1;28382:6;28378:14;28371:58;28463:23;28458:2;28450:6;28446:15;28439:48;28254:240;:::o;28500:366::-;28642:3;28663:67;28727:2;28722:3;28663:67;:::i;:::-;28656:74;;28739:93;28828:3;28739:93;:::i;:::-;28857:2;28852:3;28848:12;28841:19;;28500:366;;;:::o;28872:419::-;29038:4;29076:2;29065:9;29061:18;29053:26;;29125:9;29119:4;29115:20;29111:1;29100:9;29096:17;29089:47;29153:131;29279:4;29153:131;:::i;:::-;29145:139;;28872:419;;;:::o;29297:169::-;29437:21;29433:1;29425:6;29421:14;29414:45;29297:169;:::o;29472:366::-;29614:3;29635:67;29699:2;29694:3;29635:67;:::i;:::-;29628:74;;29711:93;29800:3;29711:93;:::i;:::-;29829:2;29824:3;29820:12;29813:19;;29472:366;;;:::o;29844:419::-;30010:4;30048:2;30037:9;30033:18;30025:26;;30097:9;30091:4;30087:20;30083:1;30072:9;30068:17;30061:47;30125:131;30251:4;30125:131;:::i;:::-;30117:139;;29844:419;;;:::o;30269:241::-;30409:34;30405:1;30397:6;30393:14;30386:58;30478:24;30473:2;30465:6;30461:15;30454:49;30269:241;:::o;30516:366::-;30658:3;30679:67;30743:2;30738:3;30679:67;:::i;:::-;30672:74;;30755:93;30844:3;30755:93;:::i;:::-;30873:2;30868:3;30864:12;30857:19;;30516:366;;;:::o;30888:419::-;31054:4;31092:2;31081:9;31077:18;31069:26;;31141:9;31135:4;31131:20;31127:1;31116:9;31112:17;31105:47;31169:131;31295:4;31169:131;:::i;:::-;31161:139;;30888:419;;;:::o;31313:191::-;31353:4;31373:20;31391:1;31373:20;:::i;:::-;31368:25;;31407:20;31425:1;31407:20;:::i;:::-;31402:25;;31446:1;31443;31440:8;31437:34;;;31451:18;;:::i;:::-;31437:34;31496:1;31493;31489:9;31481:17;;31313:191;;;;:::o;31510:147::-;31611:11;31648:3;31633:18;;31510:147;;;;:::o;31663:114::-;;:::o;31783:398::-;31942:3;31963:83;32044:1;32039:3;31963:83;:::i;:::-;31956:90;;32055:93;32144:3;32055:93;:::i;:::-;32173:1;32168:3;32164:11;32157:18;;31783:398;;;:::o;32187:379::-;32371:3;32393:147;32536:3;32393:147;:::i;:::-;32386:154;;32557:3;32550:10;;32187:379;;;:::o;32572:442::-;32721:4;32759:2;32748:9;32744:18;32736:26;;32772:71;32840:1;32829:9;32825:17;32816:6;32772:71;:::i;:::-;32853:72;32921:2;32910:9;32906:18;32897:6;32853:72;:::i;:::-;32935;33003:2;32992:9;32988:18;32979:6;32935:72;:::i;:::-;32572:442;;;;;;:::o;33020:220::-;33160:34;33156:1;33148:6;33144:14;33137:58;33229:3;33224:2;33216:6;33212:15;33205:28;33020:220;:::o;33246:366::-;33388:3;33409:67;33473:2;33468:3;33409:67;:::i;:::-;33402:74;;33485:93;33574:3;33485:93;:::i;:::-;33603:2;33598:3;33594:12;33587:19;;33246:366;;;:::o;33618:419::-;33784:4;33822:2;33811:9;33807:18;33799:26;;33871:9;33865:4;33861:20;33857:1;33846:9;33842:17;33835:47;33899:131;34025:4;33899:131;:::i;:::-;33891:139;;33618:419;;;:::o;34043:180::-;34091:77;34088:1;34081:88;34188:4;34185:1;34178:15;34212:4;34209:1;34202:15;34229:180;34277:77;34274:1;34267:88;34374:4;34371:1;34364:15;34398:4;34395:1;34388:15;34415:143;34472:5;34503:6;34497:13;34488:22;;34519:33;34546:5;34519:33;:::i;:::-;34415:143;;;;:::o;34564:351::-;34634:6;34683:2;34671:9;34662:7;34658:23;34654:32;34651:119;;;34689:79;;:::i;:::-;34651:119;34809:1;34834:64;34890:7;34881:6;34870:9;34866:22;34834:64;:::i;:::-;34824:74;;34780:128;34564:351;;;;:::o;34921:85::-;34966:7;34995:5;34984:16;;34921:85;;;:::o;35012:158::-;35070:9;35103:61;35121:42;35130:32;35156:5;35130:32;:::i;:::-;35121:42;:::i;:::-;35103:61;:::i;:::-;35090:74;;35012:158;;;:::o;35176:147::-;35271:45;35310:5;35271:45;:::i;:::-;35266:3;35259:58;35176:147;;:::o;35329:114::-;35396:6;35430:5;35424:12;35414:22;;35329:114;;;:::o;35449:184::-;35548:11;35582:6;35577:3;35570:19;35622:4;35617:3;35613:14;35598:29;;35449:184;;;;:::o;35639:132::-;35706:4;35729:3;35721:11;;35759:4;35754:3;35750:14;35742:22;;35639:132;;;:::o;35777:108::-;35854:24;35872:5;35854:24;:::i;:::-;35849:3;35842:37;35777:108;;:::o;35891:179::-;35960:10;35981:46;36023:3;36015:6;35981:46;:::i;:::-;36059:4;36054:3;36050:14;36036:28;;35891:179;;;;:::o;36076:113::-;36146:4;36178;36173:3;36169:14;36161:22;;36076:113;;;:::o;36225:732::-;36344:3;36373:54;36421:5;36373:54;:::i;:::-;36443:86;36522:6;36517:3;36443:86;:::i;:::-;36436:93;;36553:56;36603:5;36553:56;:::i;:::-;36632:7;36663:1;36648:284;36673:6;36670:1;36667:13;36648:284;;;36749:6;36743:13;36776:63;36835:3;36820:13;36776:63;:::i;:::-;36769:70;;36862:60;36915:6;36862:60;:::i;:::-;36852:70;;36708:224;36695:1;36692;36688:9;36683:14;;36648:284;;;36652:14;36948:3;36941:10;;36349:608;;;36225:732;;;;:::o;36963:831::-;37226:4;37264:3;37253:9;37249:19;37241:27;;37278:71;37346:1;37335:9;37331:17;37322:6;37278:71;:::i;:::-;37359:80;37435:2;37424:9;37420:18;37411:6;37359:80;:::i;:::-;37486:9;37480:4;37476:20;37471:2;37460:9;37456:18;37449:48;37514:108;37617:4;37608:6;37514:108;:::i;:::-;37506:116;;37632:72;37700:2;37689:9;37685:18;37676:6;37632:72;:::i;:::-;37714:73;37782:3;37771:9;37767:19;37758:6;37714:73;:::i;:::-;36963:831;;;;;;;;:::o;37800:807::-;38049:4;38087:3;38076:9;38072:19;38064:27;;38101:71;38169:1;38158:9;38154:17;38145:6;38101:71;:::i;:::-;38182:72;38250:2;38239:9;38235:18;38226:6;38182:72;:::i;:::-;38264:80;38340:2;38329:9;38325:18;38316:6;38264:80;:::i;:::-;38354;38430:2;38419:9;38415:18;38406:6;38354:80;:::i;:::-;38444:73;38512:3;38501:9;38497:19;38488:6;38444:73;:::i;:::-;38527;38595:3;38584:9;38580:19;38571:6;38527:73;:::i;:::-;37800:807;;;;;;;;;:::o;38613:143::-;38670:5;38701:6;38695:13;38686:22;;38717:33;38744:5;38717:33;:::i;:::-;38613:143;;;;:::o;38762:663::-;38850:6;38858;38866;38915:2;38903:9;38894:7;38890:23;38886:32;38883:119;;;38921:79;;:::i;:::-;38883:119;39041:1;39066:64;39122:7;39113:6;39102:9;39098:22;39066:64;:::i;:::-;39056:74;;39012:128;39179:2;39205:64;39261:7;39252:6;39241:9;39237:22;39205:64;:::i;:::-;39195:74;;39150:129;39318:2;39344:64;39400:7;39391:6;39380:9;39376:22;39344:64;:::i;:::-;39334:74;;39289:129;38762:663;;;;;:::o
Swarm Source
ipfs://4c8439d846f2c3eb613c12f7d286fc5be5a00ba144ce3ef08bbdcf58da7563cd
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.