Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 CHAD
Holders
105
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
CHAD
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-15 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns(address) { return msg.sender; } function _msgData() internal view virtual returns(bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns(string memory); function symbol() external pure returns(string memory); function decimals() external pure returns(uint8); function totalSupply() external view returns(uint); function balanceOf(address owner) external view returns(uint); function allowance(address owner, address spender) external view returns(uint); function approve(address spender, uint value) external returns(bool); function transfer(address to, uint value) external returns(bool); function transferFrom(address from, address to, uint value) external returns(bool); function DOMAIN_SEPARATOR() external view returns(bytes32); function PERMIT_TYPEHASH() external pure returns(bytes32); function nonces(address owner) external view returns(uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; function MINIMUM_LIQUIDITY() external pure returns(uint); function factory() external view returns(address); function token0() external view returns(address); function token1() external view returns(address); function getReserves() external view returns(uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns(uint); function price1CumulativeLast() external view returns(uint); function kLast() external view returns(uint); function mint(address to) external returns(uint liquidity); function burn(address to) external returns(uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns(address); function feeToSetter() external view returns(address); function getPair(address tokenA, address tokenB) external view returns(address pair); function allPairs(uint) external view returns(address pair); function allPairsLength() external view returns(uint); function createPair(address tokenA, address tokenB) external returns(address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns(uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns(uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns(bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns(uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns(bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns(bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns(string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns(string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns(uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns(string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns(string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns(uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns(uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns(uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns(bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns(uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns(bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns(bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual { } } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns(uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns(uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns(uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns(uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns(address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns(int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns(int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns(int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns(int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns(int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns(uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns(int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns(address); function WETH() external pure returns(address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns(uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns(uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns(uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns(uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns(uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns(uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns(uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns(uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns(uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns(uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns(uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns(uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns(uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns(uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns(uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns(uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract CHAD is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; // addresses address private marketingWallet; // limits uint256 private maxTransactionBuyAmount; uint256 private maxTransactionSellAmount; uint256 private maxWallet; uint256 private swapTokensAtAmount; // status flags bool private tradingActive = false; bool public swapEnabled = false; bool public swapping; // Blacklist Map mapping(address => bool) private _blacklist; struct Fees { uint256 buyTotalFees; uint256 buyMarketingFee; uint256 buyLiquidityFee; uint256 sellTotalFees; uint256 sellMarketingFee; uint256 sellLiquidityFee; } Fees public _fees = Fees({ buyTotalFees: 0, buyMarketingFee: 0, buyLiquidityFee: 0, sellTotalFees: 0, sellMarketingFee: 0, sellLiquidityFee: 0 }); uint256 public tokensForMarketing; uint256 public tokensForLiquidity; // exclude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public _isExcludedMaxWalletAmount; // 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 SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("CHAD", "CHAD") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); automatedMarketMakerPairs[address(uniswapV2Pair)] = true; approve(address(_uniswapV2Router), type(uint256).max); uint256 totalSupply = 1000000000* 1e18; maxTransactionBuyAmount = totalSupply / 100; // 1% maxTransactionAmountTxn maxTransactionSellAmount = totalSupply / 100; // 1% maxTransactionAmountTxn maxWallet = totalSupply * 3 / 100; // 3% maxWallet swapTokensAtAmount = totalSupply * 1 / 10000; // 0.01% swap wallet _fees.buyMarketingFee = 4; _fees.buyLiquidityFee = 1; _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee; _fees.sellMarketingFee = 4; _fees.sellLiquidityFee = 1; _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee; marketingWallet = address(0x82C9E4E8DC4a8fAd35319350C83ed116E8cF93Ee); // set as marketing wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromWalletLimit(owner(), true); excludeFromWalletLimit(address(this), true); excludeFromWalletLimit(address(uniswapV2Pair), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns(bool){ swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newMaxBuyAmount, uint256 newMaxSellAmount) external onlyOwner { require(((totalSupply() * newMaxBuyAmount) / 1000) >= (totalSupply() / 5000), "Cannot set maxTransactionAmounts lower than 0.5%"); require(((totalSupply() * newMaxSellAmount) / 1000) >= (totalSupply() / 5000), "Cannot set maxTransactionAmounts lower than 0.5%"); maxTransactionBuyAmount = (totalSupply() * newMaxBuyAmount) / 1000; maxTransactionSellAmount = (totalSupply() * newMaxSellAmount) / 1000; } function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner { require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 5000), "Cannot set maxWallet lower than 0.5%"); maxWallet = (totalSupply() * newPercentage) / 1000; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { _fees.buyMarketingFee = _marketingFee; _fees.buyLiquidityFee = _liquidityFee; _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee; require(_fees.buyTotalFees <= 9, "Must keep fees at 9% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner { _fees.sellMarketingFee = _marketingFee; _fees.sellLiquidityFee = _liquidityFee; _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee; require(_fees.sellTotalFees <= 9, "Must keep fees at 9% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; } function excludeFromWalletLimit(address account, bool excluded) public onlyOwner { _isExcludedMaxWalletAmount[account] = excluded; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); automatedMarketMakerPairs[pair] = value; } function updateWallets(address newMarketingWallet) external onlyOwner{ marketingWallet = newMarketingWallet; } 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(from != address(0xdEaD), "ERC20: transfer from the dEaD address"); require(to != address(0xdEaD), "ERC20: transfer to the dEaD address"); require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens"); if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && !swapping ) { if (!tradingActive) { require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionBuyAmount, "Buy transfer amount exceeds the maxTransactionAmount."); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionSellAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } if (!_isExcludedMaxWalletAmount[to]) { require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && _fees.sellTotalFees > 0) { fees = amount.mul(_fees.sellTotalFees).div(100); tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees; tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && _fees.buyTotalFees > 0) { fees = amount.mul(_fees.buyTotalFees).div(100); tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees; tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{ value: ethAmount } ( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing ; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing; tokensForLiquidity = 0; tokensForMarketing = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{ value: address(this).balance } (""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"},{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506040518060c0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815250600d600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015181600501555050348015620000ba57600080fd5b506040518060400160405280600481526020017f43484144000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f434841440000000000000000000000000000000000000000000000000000000081525081600390805190602001906200013f92919062000e2a565b5080600490805190602001906200015892919062000e2a565b50505060006200016d620006e960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000238816001620006f160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b357600080fd5b505afa158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee919062000f44565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035157600080fd5b505afa15801562000366573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038c919062000f44565b6040518363ffffffff1660e01b8152600401620003ab92919062000f87565b602060405180830381600087803b158015620003c657600080fd5b505af1158015620003db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000401919062000f44565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200044960a0516001620006f160201b60201c565b60016018600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004d5817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620007ee60201b60201c565b5060006b033b2e3c9fd0803ce80000009050606481620004f691906200101c565b6007819055506064816200050b91906200101c565b600881905550606460038262000522919062001054565b6200052e91906200101c565b60098190555061271060018262000546919062001054565b6200055291906200101c565b600a819055506004600d600101819055506001600d60020181905550600d60020154600d60010154620005869190620010b5565b600d600001819055506004600d600401819055506001600d60050181905550600d60050154600d60040154620005bd9190620010b5565b600d600301819055507382c9e4e8dc4a8fad35319350c83ed116e8cf93ee600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063d6200062f6200081c60201b60201c565b60016200084660201b60201c565b620006503060016200084660201b60201c565b62000672620006646200081c60201b60201c565b6001620006f160201b60201c565b62000685306001620006f160201b60201c565b620006a7620006996200081c60201b60201c565b60016200094360201b60201c565b620006ba3060016200094360201b60201c565b620006cf60a05160016200094360201b60201c565b620006e1338262000a4060201b60201c565b50506200143c565b600033905090565b62000701620006e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000793576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078a9062001173565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006200081262000804620006e960201b60201c565b848462000bef60201b60201c565b6001905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000856620006e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008df9062001173565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000953620006e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009dc9062001173565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000ab3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aaa90620011e5565b60405180910390fd5b62000ac76000838362000dc260201b60201c565b62000ae38160025462000dc760201b62001ed31790919060201c565b60028190555062000b41816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000dc760201b62001ed31790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000be3919062001218565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000c62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c5990620012ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ccc9062001343565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000db5919062001218565b60405180910390a3505050565b505050565b600080828462000dd89190620010b5565b90508381101562000e20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e1790620013b5565b60405180910390fd5b8091505092915050565b82805462000e389062001406565b90600052602060002090601f01602090048101928262000e5c576000855562000ea8565b82601f1062000e7757805160ff191683800117855562000ea8565b8280016001018555821562000ea8579182015b8281111562000ea757825182559160200191906001019062000e8a565b5b50905062000eb7919062000ebb565b5090565b5b8082111562000ed657600081600090555060010162000ebc565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f0c8262000edf565b9050919050565b62000f1e8162000eff565b811462000f2a57600080fd5b50565b60008151905062000f3e8162000f13565b92915050565b60006020828403121562000f5d5762000f5c62000eda565b5b600062000f6d8482850162000f2d565b91505092915050565b62000f818162000eff565b82525050565b600060408201905062000f9e600083018562000f76565b62000fad602083018462000f76565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010298262000fb4565b9150620010368362000fb4565b92508262001049576200104862000fbe565b5b828204905092915050565b6000620010618262000fb4565b91506200106e8362000fb4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620010aa57620010a962000fed565b5b828202905092915050565b6000620010c28262000fb4565b9150620010cf8362000fb4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001107576200110662000fed565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200115b60208362001112565b9150620011688262001123565b602082019050919050565b600060208201905081810360008301526200118e816200114c565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011cd601f8362001112565b9150620011da8262001195565b602082019050919050565b600060208201905081810360008301526200120081620011be565b9050919050565b620012128162000fb4565b82525050565b60006020820190506200122f600083018462001207565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200129360248362001112565b9150620012a08262001235565b604082019050919050565b60006020820190508181036000830152620012c68162001284565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200132b60228362001112565b91506200133882620012cd565b604082019050919050565b600060208201905081810360008301526200135e816200131c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200139d601b8362001112565b9150620013aa8262001365565b602082019050919050565b60006020820190508181036000830152620013d0816200138e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200141f57607f821691505b60208210811415620014365762001435620013d7565b5b50919050565b60805160a051614ae86200148c60003960008181610f7901526116a5015260008181610cbc0152818161332b0152818161341b01528181613442015281816134de01526135050152614ae86000f3fe60806040526004361061021e5760003560e01c806370a0823111610123578063a457c2d7116100ab578063d212a69a1161006f578063d212a69a14610804578063d257b34f14610834578063dd62ed3e14610871578063e16830a8146108ae578063f2fde38b146108d757610225565b8063a457c2d7146106fb578063a9059cbb14610738578063b62496f514610775578063c0246668146107b2578063c18bc195146107db57610225565b80638da5cb5b116100f25780638da5cb5b14610616578063924de9b71461064157806395d89b411461066a57806396880b17146106955780639a7a23d6146106d257610225565b806370a0823114610582578063715018a6146105bf5780637571336a146105d65780638a8c523c146105ff57610225565b80631f3fed8f116101a65780633950935111610175578063395093511461048957806349bd5a5e146104c65780634fbee193146104f157806366ca9b831461052e5780636ddd17131461055757610225565b80631f3fed8f146103cd57806323b872dd146103f85780632851a5cf14610435578063313ce5671461045e57610225565b806311a582c3116101ed57806311a582c3146102f85780631694505e146103215780631732cded1461034c57806318160ddd146103775780631a8145bb146103a257610225565b806302dbd8f81461022a57806306fdde0314610253578063095ea7b31461027e57806310d5de53146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c919061365f565b610900565b005b34801561025f57600080fd5b50610268610a17565b6040516102759190613738565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a091906137b8565b610aa9565b6040516102b29190613813565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd919061382e565b610ac7565b6040516102ef9190613813565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a919061365f565b610ae7565b005b34801561032d57600080fd5b50610336610cba565b60405161034391906138ba565b60405180910390f35b34801561035857600080fd5b50610361610cde565b60405161036e9190613813565b60405180910390f35b34801561038357600080fd5b5061038c610cf1565b60405161039991906138e4565b60405180910390f35b3480156103ae57600080fd5b506103b7610cfb565b6040516103c491906138e4565b60405180910390f35b3480156103d957600080fd5b506103e2610d01565b6040516103ef91906138e4565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a91906138ff565b610d07565b60405161042c9190613813565b60405180910390f35b34801561044157600080fd5b5061045c6004803603810190610457919061382e565b610de0565b005b34801561046a57600080fd5b50610473610ebb565b604051610480919061396e565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab91906137b8565b610ec4565b6040516104bd9190613813565b60405180910390f35b3480156104d257600080fd5b506104db610f77565b6040516104e89190613998565b60405180910390f35b3480156104fd57600080fd5b506105186004803603810190610513919061382e565b610f9b565b6040516105259190613813565b60405180910390f35b34801561053a57600080fd5b506105556004803603810190610550919061365f565b610ff1565b005b34801561056357600080fd5b5061056c611108565b6040516105799190613813565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061382e565b61111b565b6040516105b691906138e4565b60405180910390f35b3480156105cb57600080fd5b506105d4611163565b005b3480156105e257600080fd5b506105fd60048036038101906105f891906139df565b6112bb565b005b34801561060b57600080fd5b506106146113ad565b005b34801561062257600080fd5b5061062b61147c565b6040516106389190613998565b60405180910390f35b34801561064d57600080fd5b5061066860048036038101906106639190613a1f565b6114a6565b005b34801561067657600080fd5b5061067f61155a565b60405161068c9190613738565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b7919061382e565b6115ec565b6040516106c99190613813565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906139df565b61160c565b005b34801561070757600080fd5b50610722600480360381019061071d91906137b8565b61178d565b60405161072f9190613813565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a91906137b8565b61185a565b60405161076c9190613813565b60405180910390f35b34801561078157600080fd5b5061079c6004803603810190610797919061382e565b611878565b6040516107a99190613813565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d491906139df565b611898565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613a4c565b61198a565b005b34801561081057600080fd5b50610819611ac0565b60405161082b96959493929190613a79565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613a4c565b611aea565b6040516108689190613813565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190613ada565b611b93565b6040516108a591906138e4565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d091906139df565b611c1a565b005b3480156108e357600080fd5b506108fe60048036038101906108f9919061382e565b611d0c565b005b610908611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e90613b66565b60405180910390fd5b81600d6004018190555080600d60050181905550600d60050154600d600401546109c19190613bb5565b600d600301819055506009600d600301541115610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a90613c57565b60405180910390fd5b5050565b606060038054610a2690613ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5290613ca6565b8015610a9f5780601f10610a7457610100808354040283529160200191610a9f565b820191906000526020600020905b815481529060010190602001808311610a8257829003601f168201915b5050505050905090565b6000610abd610ab6611f31565b8484611f39565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b610aef611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590613b66565b60405180910390fd5b611388610b89610cf1565b610b939190613d07565b6103e883610b9f610cf1565b610ba99190613d38565b610bb39190613d07565b1015610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90613e04565b60405180910390fd5b611388610bff610cf1565b610c099190613d07565b6103e882610c15610cf1565b610c1f9190613d38565b610c299190613d07565b1015610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190613e04565b60405180910390fd5b6103e882610c76610cf1565b610c809190613d38565b610c8a9190613d07565b6007819055506103e881610c9c610cf1565b610ca69190613d38565b610cb09190613d07565b6008819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60029054906101000a900460ff1681565b6000600254905090565b60145481565b60135481565b6000610d14848484612104565b610dd584610d20611f31565b610dd085604051806060016040528060288152602001614a6660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d86611f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611f39565b600190509392505050565b610de8611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90613b66565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b6000610f6d610ed1611f31565b84610f688560016000610ee2611f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed390919063ffffffff16565b611f39565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ff9611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90613b66565b60405180910390fd5b81600d6001018190555080600d60020181905550600d60020154600d600101546110b29190613bb5565b600d600001819055506009600d600001541115611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90613c57565b60405180910390fd5b5050565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61116b611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190613b66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112c3611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134990613b66565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113b5611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90613b66565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114ae611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153490613b66565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606004805461156990613ca6565b80601f016020809104026020016040519081016040528092919081815260200182805461159590613ca6565b80156115e25780601f106115b7576101008083540402835291602001916115e2565b820191906000526020600020905b8154815290600101906020018083116115c557829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b611614611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613b66565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613e96565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061185061179a611f31565b8461184b85604051806060016040528060258152602001614a8e60259139600160006117c4611f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611f39565b6001905092915050565b600061186e611867611f31565b8484612104565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6118a0611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690613b66565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611992611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890613b66565b60405180910390fd5b611388611a2c610cf1565b611a369190613d07565b6103e882611a42610cf1565b611a4c9190613d38565b611a569190613d07565b1015611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e90613f28565b60405180910390fd5b6103e881611aa3610cf1565b611aad9190613d38565b611ab79190613d07565b60098190555050565b600d8060000154908060010154908060020154908060030154908060040154908060050154905086565b6000611af4611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90613b66565b60405180910390fd5b81600a8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c22611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890613b66565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d14611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90613b66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90613fba565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611ee29190613bb5565b905083811015611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614026565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa0906140b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120109061414a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120f791906138e4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b906141dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db9061426e565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c90614300565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90614392565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561236a5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090614424565b60405180910390fd5b60008114156123c3576123be83836000612cd6565b612c6d565b6123cb61147c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612439575061240961147c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124525750600b60029054906101000a900460ff16155b156127d857600b60009054906101000a900460ff1661254c57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061250c5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290614490565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125ef5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561263e57600754811115612639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090614522565b60405180910390fd5b61272d565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126e15750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561272c5760085481111561272b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612722906145b4565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127d75760095461278a8361111b565b826127959190613bb5565b11156127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd90614620565b60405180910390fd5b5b5b60006127e33061111b565b90506000600a5482101590508080156128085750600b60019054906101000a900460ff165b80156128215750600b60029054906101000a900460ff16155b80156128765750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156128cc5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129225750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612966576001600b60026101000a81548160ff02191690831515021790555061294a612f6b565b6000600b60026101000a81548160ff0219169083151502179055505b6000600b60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a1c5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a2657600090505b60008115612c5d57601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8c57506000600d60030154115b15612b3557612abc6064612aae600d600301548861317890919063ffffffff16565b6131f390919063ffffffff16565b9050600d60030154600d6005015482612ad59190613d38565b612adf9190613d07565b60146000828254612af09190613bb5565b92505081905550600d60030154600d6004015482612b0e9190613d38565b612b189190613d07565b60136000828254612b299190613bb5565b92505081905550612c39565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b9357506000600d60000154115b15612c3857612bc36064612bb5600d600001548861317890919063ffffffff16565b6131f390919063ffffffff16565b9050600d60000154600d6002015482612bdc9190613d38565b612be69190613d07565b60146000828254612bf79190613bb5565b92505081905550600d60000154600d6001015482612c159190613d38565b612c1f9190613d07565b60136000828254612c309190613bb5565b925050819055505b5b6000811115612c4e57612c4d873083612cd6565b5b8085612c5a9190614640565b94505b612c68878787612cd6565b505050505b505050565b6000838311158290612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb19190613738565b60405180910390fd5b5060008385612cc99190614640565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3d906141dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dad9061426e565b60405180910390fd5b612dc183838361323d565b612e2c81604051806060016040528060268152602001614a40602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ebf816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f5e91906138e4565b60405180910390a3505050565b6000612f763061111b565b90506000601354601454612f8a9190613bb5565b9050600080831480612f9c5750600082145b15612fa957505050613176565b6014600a54612fb89190613d38565b831115612fd1576014600a54612fce9190613d38565b92505b600060028360145486612fe49190613d38565b612fee9190613d07565b612ff89190613d07565b9050600061300f828661324290919063ffffffff16565b9050600047905061301f8261328c565b6000613034824761324290919063ffffffff16565b9050600061305f876130516013548561317890919063ffffffff16565b6131f390919063ffffffff16565b90506000818361306f9190614640565b9050600060148190555060006013819055506000861180156130915750600081115b156130de576130a086826134d8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826014546040516130d593929190614674565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613124906146dc565b60006040518083038185875af1925050503d8060008114613161576040519150601f19603f3d011682016040523d82523d6000602084013e613166565b606091505b5050809750505050505050505050505b565b60008083141561318b57600090506131ed565b600082846131999190613d38565b90508284826131a89190613d07565b146131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df90614763565b60405180910390fd5b809150505b92915050565b600061323583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135c1565b905092915050565b505050565b600061328483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c72565b905092915050565b6000600267ffffffffffffffff8111156132a9576132a8614783565b5b6040519080825280602002602001820160405280156132d75781602001602082028036833780820191505090505b50905030816000815181106132ef576132ee6147b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561338f57600080fd5b505afa1580156133a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c791906147f6565b816001815181106133db576133da6147b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613440307f000000000000000000000000000000000000000000000000000000000000000084611f39565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134a295949392919061491c565b600060405180830381600087803b1580156134bc57600080fd5b505af11580156134d0573d6000803e3d6000fd5b505050505050565b613503307f000000000000000000000000000000000000000000000000000000000000000084611f39565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161356896959493929190614976565b6060604051808303818588803b15801561358157600080fd5b505af1158015613595573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135ba91906149ec565b5050505050565b60008083118290613608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ff9190613738565b60405180910390fd5b50600083856136179190613d07565b9050809150509392505050565b600080fd5b6000819050919050565b61363c81613629565b811461364757600080fd5b50565b60008135905061365981613633565b92915050565b6000806040838503121561367657613675613624565b5b60006136848582860161364a565b92505060206136958582860161364a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136d95780820151818401526020810190506136be565b838111156136e8576000848401525b50505050565b6000601f19601f8301169050919050565b600061370a8261369f565b61371481856136aa565b93506137248185602086016136bb565b61372d816136ee565b840191505092915050565b6000602082019050818103600083015261375281846136ff565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137858261375a565b9050919050565b6137958161377a565b81146137a057600080fd5b50565b6000813590506137b28161378c565b92915050565b600080604083850312156137cf576137ce613624565b5b60006137dd858286016137a3565b92505060206137ee8582860161364a565b9150509250929050565b60008115159050919050565b61380d816137f8565b82525050565b60006020820190506138286000830184613804565b92915050565b60006020828403121561384457613843613624565b5b6000613852848285016137a3565b91505092915050565b6000819050919050565b600061388061387b6138768461375a565b61385b565b61375a565b9050919050565b600061389282613865565b9050919050565b60006138a482613887565b9050919050565b6138b481613899565b82525050565b60006020820190506138cf60008301846138ab565b92915050565b6138de81613629565b82525050565b60006020820190506138f960008301846138d5565b92915050565b60008060006060848603121561391857613917613624565b5b6000613926868287016137a3565b9350506020613937868287016137a3565b92505060406139488682870161364a565b9150509250925092565b600060ff82169050919050565b61396881613952565b82525050565b6000602082019050613983600083018461395f565b92915050565b6139928161377a565b82525050565b60006020820190506139ad6000830184613989565b92915050565b6139bc816137f8565b81146139c757600080fd5b50565b6000813590506139d9816139b3565b92915050565b600080604083850312156139f6576139f5613624565b5b6000613a04858286016137a3565b9250506020613a15858286016139ca565b9150509250929050565b600060208284031215613a3557613a34613624565b5b6000613a43848285016139ca565b91505092915050565b600060208284031215613a6257613a61613624565b5b6000613a708482850161364a565b91505092915050565b600060c082019050613a8e60008301896138d5565b613a9b60208301886138d5565b613aa860408301876138d5565b613ab560608301866138d5565b613ac260808301856138d5565b613acf60a08301846138d5565b979650505050505050565b60008060408385031215613af157613af0613624565b5b6000613aff858286016137a3565b9250506020613b10858286016137a3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b506020836136aa565b9150613b5b82613b1a565b602082019050919050565b60006020820190508181036000830152613b7f81613b43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bc082613629565b9150613bcb83613629565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0057613bff613b86565b5b828201905092915050565b7f4d757374206b6565702066656573206174203925206f72206c65737300000000600082015250565b6000613c41601c836136aa565b9150613c4c82613c0b565b602082019050919050565b60006020820190508181036000830152613c7081613c34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cbe57607f821691505b60208210811415613cd257613cd1613c77565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d1282613629565b9150613d1d83613629565b925082613d2d57613d2c613cd8565b5b828204905092915050565b6000613d4382613629565b9150613d4e83613629565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8757613d86613b86565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e20302e352500000000000000000000000000000000602082015250565b6000613dee6030836136aa565b9150613df982613d92565b604082019050919050565b60006020820190508181036000830152613e1d81613de1565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613e806039836136aa565b9150613e8b82613e24565b604082019050919050565b60006020820190508181036000830152613eaf81613e73565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613f126024836136aa565b9150613f1d82613eb6565b604082019050919050565b60006020820190508181036000830152613f4181613f05565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fa46026836136aa565b9150613faf82613f48565b604082019050919050565b60006020820190508181036000830152613fd381613f97565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614010601b836136aa565b915061401b82613fda565b602082019050919050565b6000602082019050818103600083015261403f81614003565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140a26024836136aa565b91506140ad82614046565b604082019050919050565b600060208201905081810360008301526140d181614095565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006141346022836136aa565b915061413f826140d8565b604082019050919050565b6000602082019050818103600083015261416381614127565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141c66025836136aa565b91506141d18261416a565b604082019050919050565b600060208201905081810360008301526141f5816141b9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142586023836136aa565b9150614263826141fc565b604082019050919050565b600060208201905081810360008301526142878161424b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865206445614420616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142ea6025836136aa565b91506142f58261428e565b604082019050919050565b60006020820190508181036000830152614319816142dd565b9050919050565b7f45524332303a207472616e7366657220746f207468652064456144206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061437c6023836136aa565b915061438782614320565b604082019050919050565b600060208201905081810360008301526143ab8161436f565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061440e6031836136aa565b9150614419826143b2565b604082019050919050565b6000602082019050818103600083015261443d81614401565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061447a6016836136aa565b915061448582614444565b602082019050919050565b600060208201905081810360008301526144a98161446d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061450c6035836136aa565b9150614517826144b0565b604082019050919050565b6000602082019050818103600083015261453b816144ff565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061459e6036836136aa565b91506145a982614542565b604082019050919050565b600060208201905081810360008301526145cd81614591565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061460a6013836136aa565b9150614615826145d4565b602082019050919050565b60006020820190508181036000830152614639816145fd565b9050919050565b600061464b82613629565b915061465683613629565b92508282101561466957614668613b86565b5b828203905092915050565b600060608201905061468960008301866138d5565b61469660208301856138d5565b6146a360408301846138d5565b949350505050565b600081905092915050565b50565b60006146c66000836146ab565b91506146d1826146b6565b600082019050919050565b60006146e7826146b9565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061474d6021836136aa565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147f08161378c565b92915050565b60006020828403121561480c5761480b613624565b5b600061481a848285016147e1565b91505092915050565b6000819050919050565b600061484861484361483e84614823565b61385b565b613629565b9050919050565b6148588161482d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148938161377a565b82525050565b60006148a5838361488a565b60208301905092915050565b6000602082019050919050565b60006148c98261485e565b6148d38185614869565b93506148de8361487a565b8060005b8381101561490f5781516148f68882614899565b9750614901836148b1565b9250506001810190506148e2565b5085935050505092915050565b600060a08201905061493160008301886138d5565b61493e602083018761484f565b818103604083015261495081866148be565b905061495f6060830185613989565b61496c60808301846138d5565b9695505050505050565b600060c08201905061498b6000830189613989565b61499860208301886138d5565b6149a5604083018761484f565b6149b2606083018661484f565b6149bf6080830185613989565b6149cc60a08301846138d5565b979650505050505050565b6000815190506149e681613633565b92915050565b600080600060608486031215614a0557614a04613624565b5b6000614a13868287016149d7565b9350506020614a24868287016149d7565b9250506040614a35868287016149d7565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204bfa42cf345825df90d387c163ecaef281118e01fb5381572784f0c935fe94f564736f6c63430008090033
Deployed Bytecode
0x60806040526004361061021e5760003560e01c806370a0823111610123578063a457c2d7116100ab578063d212a69a1161006f578063d212a69a14610804578063d257b34f14610834578063dd62ed3e14610871578063e16830a8146108ae578063f2fde38b146108d757610225565b8063a457c2d7146106fb578063a9059cbb14610738578063b62496f514610775578063c0246668146107b2578063c18bc195146107db57610225565b80638da5cb5b116100f25780638da5cb5b14610616578063924de9b71461064157806395d89b411461066a57806396880b17146106955780639a7a23d6146106d257610225565b806370a0823114610582578063715018a6146105bf5780637571336a146105d65780638a8c523c146105ff57610225565b80631f3fed8f116101a65780633950935111610175578063395093511461048957806349bd5a5e146104c65780634fbee193146104f157806366ca9b831461052e5780636ddd17131461055757610225565b80631f3fed8f146103cd57806323b872dd146103f85780632851a5cf14610435578063313ce5671461045e57610225565b806311a582c3116101ed57806311a582c3146102f85780631694505e146103215780631732cded1461034c57806318160ddd146103775780631a8145bb146103a257610225565b806302dbd8f81461022a57806306fdde0314610253578063095ea7b31461027e57806310d5de53146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c919061365f565b610900565b005b34801561025f57600080fd5b50610268610a17565b6040516102759190613738565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a091906137b8565b610aa9565b6040516102b29190613813565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd919061382e565b610ac7565b6040516102ef9190613813565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a919061365f565b610ae7565b005b34801561032d57600080fd5b50610336610cba565b60405161034391906138ba565b60405180910390f35b34801561035857600080fd5b50610361610cde565b60405161036e9190613813565b60405180910390f35b34801561038357600080fd5b5061038c610cf1565b60405161039991906138e4565b60405180910390f35b3480156103ae57600080fd5b506103b7610cfb565b6040516103c491906138e4565b60405180910390f35b3480156103d957600080fd5b506103e2610d01565b6040516103ef91906138e4565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a91906138ff565b610d07565b60405161042c9190613813565b60405180910390f35b34801561044157600080fd5b5061045c6004803603810190610457919061382e565b610de0565b005b34801561046a57600080fd5b50610473610ebb565b604051610480919061396e565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab91906137b8565b610ec4565b6040516104bd9190613813565b60405180910390f35b3480156104d257600080fd5b506104db610f77565b6040516104e89190613998565b60405180910390f35b3480156104fd57600080fd5b506105186004803603810190610513919061382e565b610f9b565b6040516105259190613813565b60405180910390f35b34801561053a57600080fd5b506105556004803603810190610550919061365f565b610ff1565b005b34801561056357600080fd5b5061056c611108565b6040516105799190613813565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061382e565b61111b565b6040516105b691906138e4565b60405180910390f35b3480156105cb57600080fd5b506105d4611163565b005b3480156105e257600080fd5b506105fd60048036038101906105f891906139df565b6112bb565b005b34801561060b57600080fd5b506106146113ad565b005b34801561062257600080fd5b5061062b61147c565b6040516106389190613998565b60405180910390f35b34801561064d57600080fd5b5061066860048036038101906106639190613a1f565b6114a6565b005b34801561067657600080fd5b5061067f61155a565b60405161068c9190613738565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b7919061382e565b6115ec565b6040516106c99190613813565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906139df565b61160c565b005b34801561070757600080fd5b50610722600480360381019061071d91906137b8565b61178d565b60405161072f9190613813565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a91906137b8565b61185a565b60405161076c9190613813565b60405180910390f35b34801561078157600080fd5b5061079c6004803603810190610797919061382e565b611878565b6040516107a99190613813565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d491906139df565b611898565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613a4c565b61198a565b005b34801561081057600080fd5b50610819611ac0565b60405161082b96959493929190613a79565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613a4c565b611aea565b6040516108689190613813565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190613ada565b611b93565b6040516108a591906138e4565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d091906139df565b611c1a565b005b3480156108e357600080fd5b506108fe60048036038101906108f9919061382e565b611d0c565b005b610908611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e90613b66565b60405180910390fd5b81600d6004018190555080600d60050181905550600d60050154600d600401546109c19190613bb5565b600d600301819055506009600d600301541115610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a90613c57565b60405180910390fd5b5050565b606060038054610a2690613ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5290613ca6565b8015610a9f5780601f10610a7457610100808354040283529160200191610a9f565b820191906000526020600020905b815481529060010190602001808311610a8257829003601f168201915b5050505050905090565b6000610abd610ab6611f31565b8484611f39565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b610aef611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590613b66565b60405180910390fd5b611388610b89610cf1565b610b939190613d07565b6103e883610b9f610cf1565b610ba99190613d38565b610bb39190613d07565b1015610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90613e04565b60405180910390fd5b611388610bff610cf1565b610c099190613d07565b6103e882610c15610cf1565b610c1f9190613d38565b610c299190613d07565b1015610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190613e04565b60405180910390fd5b6103e882610c76610cf1565b610c809190613d38565b610c8a9190613d07565b6007819055506103e881610c9c610cf1565b610ca69190613d38565b610cb09190613d07565b6008819055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600b60029054906101000a900460ff1681565b6000600254905090565b60145481565b60135481565b6000610d14848484612104565b610dd584610d20611f31565b610dd085604051806060016040528060288152602001614a6660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d86611f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611f39565b600190509392505050565b610de8611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90613b66565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b6000610f6d610ed1611f31565b84610f688560016000610ee2611f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed390919063ffffffff16565b611f39565b6001905092915050565b7f000000000000000000000000533c53df6a498f1a5a37000ad04e51df9819f6a081565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ff9611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90613b66565b60405180910390fd5b81600d6001018190555080600d60020181905550600d60020154600d600101546110b29190613bb5565b600d600001819055506009600d600001541115611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90613c57565b60405180910390fd5b5050565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61116b611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190613b66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112c3611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134990613b66565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113b5611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90613b66565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114ae611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153490613b66565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606004805461156990613ca6565b80601f016020809104026020016040519081016040528092919081815260200182805461159590613ca6565b80156115e25780601f106115b7576101008083540402835291602001916115e2565b820191906000526020600020905b8154815290600101906020018083116115c557829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b611614611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613b66565b60405180910390fd5b7f000000000000000000000000533c53df6a498f1a5a37000ad04e51df9819f6a073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613e96565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061185061179a611f31565b8461184b85604051806060016040528060258152602001614a8e60259139600160006117c4611f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611f39565b6001905092915050565b600061186e611867611f31565b8484612104565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6118a0611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690613b66565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611992611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890613b66565b60405180910390fd5b611388611a2c610cf1565b611a369190613d07565b6103e882611a42610cf1565b611a4c9190613d38565b611a569190613d07565b1015611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e90613f28565b60405180910390fd5b6103e881611aa3610cf1565b611aad9190613d38565b611ab79190613d07565b60098190555050565b600d8060000154908060010154908060020154908060030154908060040154908060050154905086565b6000611af4611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90613b66565b60405180910390fd5b81600a8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c22611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890613b66565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d14611f31565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90613b66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90613fba565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611ee29190613bb5565b905083811015611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614026565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa0906140b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120109061414a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120f791906138e4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b906141dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db9061426e565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c90614300565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90614392565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561236a5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090614424565b60405180910390fd5b60008114156123c3576123be83836000612cd6565b612c6d565b6123cb61147c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612439575061240961147c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124525750600b60029054906101000a900460ff16155b156127d857600b60009054906101000a900460ff1661254c57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061250c5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290614490565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125ef5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561263e57600754811115612639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090614522565b60405180910390fd5b61272d565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126e15750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561272c5760085481111561272b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612722906145b4565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127d75760095461278a8361111b565b826127959190613bb5565b11156127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd90614620565b60405180910390fd5b5b5b60006127e33061111b565b90506000600a5482101590508080156128085750600b60019054906101000a900460ff165b80156128215750600b60029054906101000a900460ff16155b80156128765750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156128cc5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129225750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612966576001600b60026101000a81548160ff02191690831515021790555061294a612f6b565b6000600b60026101000a81548160ff0219169083151502179055505b6000600b60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a1c5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a2657600090505b60008115612c5d57601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8c57506000600d60030154115b15612b3557612abc6064612aae600d600301548861317890919063ffffffff16565b6131f390919063ffffffff16565b9050600d60030154600d6005015482612ad59190613d38565b612adf9190613d07565b60146000828254612af09190613bb5565b92505081905550600d60030154600d6004015482612b0e9190613d38565b612b189190613d07565b60136000828254612b299190613bb5565b92505081905550612c39565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b9357506000600d60000154115b15612c3857612bc36064612bb5600d600001548861317890919063ffffffff16565b6131f390919063ffffffff16565b9050600d60000154600d6002015482612bdc9190613d38565b612be69190613d07565b60146000828254612bf79190613bb5565b92505081905550600d60000154600d6001015482612c159190613d38565b612c1f9190613d07565b60136000828254612c309190613bb5565b925050819055505b5b6000811115612c4e57612c4d873083612cd6565b5b8085612c5a9190614640565b94505b612c68878787612cd6565b505050505b505050565b6000838311158290612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb19190613738565b60405180910390fd5b5060008385612cc99190614640565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3d906141dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dad9061426e565b60405180910390fd5b612dc183838361323d565b612e2c81604051806060016040528060268152602001614a40602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ebf816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f5e91906138e4565b60405180910390a3505050565b6000612f763061111b565b90506000601354601454612f8a9190613bb5565b9050600080831480612f9c5750600082145b15612fa957505050613176565b6014600a54612fb89190613d38565b831115612fd1576014600a54612fce9190613d38565b92505b600060028360145486612fe49190613d38565b612fee9190613d07565b612ff89190613d07565b9050600061300f828661324290919063ffffffff16565b9050600047905061301f8261328c565b6000613034824761324290919063ffffffff16565b9050600061305f876130516013548561317890919063ffffffff16565b6131f390919063ffffffff16565b90506000818361306f9190614640565b9050600060148190555060006013819055506000861180156130915750600081115b156130de576130a086826134d8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826014546040516130d593929190614674565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613124906146dc565b60006040518083038185875af1925050503d8060008114613161576040519150601f19603f3d011682016040523d82523d6000602084013e613166565b606091505b5050809750505050505050505050505b565b60008083141561318b57600090506131ed565b600082846131999190613d38565b90508284826131a89190613d07565b146131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df90614763565b60405180910390fd5b809150505b92915050565b600061323583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135c1565b905092915050565b505050565b600061328483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c72565b905092915050565b6000600267ffffffffffffffff8111156132a9576132a8614783565b5b6040519080825280602002602001820160405280156132d75781602001602082028036833780820191505090505b50905030816000815181106132ef576132ee6147b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561338f57600080fd5b505afa1580156133a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c791906147f6565b816001815181106133db576133da6147b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613440307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f39565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134a295949392919061491c565b600060405180830381600087803b1580156134bc57600080fd5b505af11580156134d0573d6000803e3d6000fd5b505050505050565b613503307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f39565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161356896959493929190614976565b6060604051808303818588803b15801561358157600080fd5b505af1158015613595573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135ba91906149ec565b5050505050565b60008083118290613608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ff9190613738565b60405180910390fd5b50600083856136179190613d07565b9050809150509392505050565b600080fd5b6000819050919050565b61363c81613629565b811461364757600080fd5b50565b60008135905061365981613633565b92915050565b6000806040838503121561367657613675613624565b5b60006136848582860161364a565b92505060206136958582860161364a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136d95780820151818401526020810190506136be565b838111156136e8576000848401525b50505050565b6000601f19601f8301169050919050565b600061370a8261369f565b61371481856136aa565b93506137248185602086016136bb565b61372d816136ee565b840191505092915050565b6000602082019050818103600083015261375281846136ff565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137858261375a565b9050919050565b6137958161377a565b81146137a057600080fd5b50565b6000813590506137b28161378c565b92915050565b600080604083850312156137cf576137ce613624565b5b60006137dd858286016137a3565b92505060206137ee8582860161364a565b9150509250929050565b60008115159050919050565b61380d816137f8565b82525050565b60006020820190506138286000830184613804565b92915050565b60006020828403121561384457613843613624565b5b6000613852848285016137a3565b91505092915050565b6000819050919050565b600061388061387b6138768461375a565b61385b565b61375a565b9050919050565b600061389282613865565b9050919050565b60006138a482613887565b9050919050565b6138b481613899565b82525050565b60006020820190506138cf60008301846138ab565b92915050565b6138de81613629565b82525050565b60006020820190506138f960008301846138d5565b92915050565b60008060006060848603121561391857613917613624565b5b6000613926868287016137a3565b9350506020613937868287016137a3565b92505060406139488682870161364a565b9150509250925092565b600060ff82169050919050565b61396881613952565b82525050565b6000602082019050613983600083018461395f565b92915050565b6139928161377a565b82525050565b60006020820190506139ad6000830184613989565b92915050565b6139bc816137f8565b81146139c757600080fd5b50565b6000813590506139d9816139b3565b92915050565b600080604083850312156139f6576139f5613624565b5b6000613a04858286016137a3565b9250506020613a15858286016139ca565b9150509250929050565b600060208284031215613a3557613a34613624565b5b6000613a43848285016139ca565b91505092915050565b600060208284031215613a6257613a61613624565b5b6000613a708482850161364a565b91505092915050565b600060c082019050613a8e60008301896138d5565b613a9b60208301886138d5565b613aa860408301876138d5565b613ab560608301866138d5565b613ac260808301856138d5565b613acf60a08301846138d5565b979650505050505050565b60008060408385031215613af157613af0613624565b5b6000613aff858286016137a3565b9250506020613b10858286016137a3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b506020836136aa565b9150613b5b82613b1a565b602082019050919050565b60006020820190508181036000830152613b7f81613b43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bc082613629565b9150613bcb83613629565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0057613bff613b86565b5b828201905092915050565b7f4d757374206b6565702066656573206174203925206f72206c65737300000000600082015250565b6000613c41601c836136aa565b9150613c4c82613c0b565b602082019050919050565b60006020820190508181036000830152613c7081613c34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cbe57607f821691505b60208210811415613cd257613cd1613c77565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d1282613629565b9150613d1d83613629565b925082613d2d57613d2c613cd8565b5b828204905092915050565b6000613d4382613629565b9150613d4e83613629565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8757613d86613b86565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e20302e352500000000000000000000000000000000602082015250565b6000613dee6030836136aa565b9150613df982613d92565b604082019050919050565b60006020820190508181036000830152613e1d81613de1565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613e806039836136aa565b9150613e8b82613e24565b604082019050919050565b60006020820190508181036000830152613eaf81613e73565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613f126024836136aa565b9150613f1d82613eb6565b604082019050919050565b60006020820190508181036000830152613f4181613f05565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fa46026836136aa565b9150613faf82613f48565b604082019050919050565b60006020820190508181036000830152613fd381613f97565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614010601b836136aa565b915061401b82613fda565b602082019050919050565b6000602082019050818103600083015261403f81614003565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140a26024836136aa565b91506140ad82614046565b604082019050919050565b600060208201905081810360008301526140d181614095565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006141346022836136aa565b915061413f826140d8565b604082019050919050565b6000602082019050818103600083015261416381614127565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141c66025836136aa565b91506141d18261416a565b604082019050919050565b600060208201905081810360008301526141f5816141b9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142586023836136aa565b9150614263826141fc565b604082019050919050565b600060208201905081810360008301526142878161424b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865206445614420616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142ea6025836136aa565b91506142f58261428e565b604082019050919050565b60006020820190508181036000830152614319816142dd565b9050919050565b7f45524332303a207472616e7366657220746f207468652064456144206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061437c6023836136aa565b915061438782614320565b604082019050919050565b600060208201905081810360008301526143ab8161436f565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061440e6031836136aa565b9150614419826143b2565b604082019050919050565b6000602082019050818103600083015261443d81614401565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061447a6016836136aa565b915061448582614444565b602082019050919050565b600060208201905081810360008301526144a98161446d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061450c6035836136aa565b9150614517826144b0565b604082019050919050565b6000602082019050818103600083015261453b816144ff565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061459e6036836136aa565b91506145a982614542565b604082019050919050565b600060208201905081810360008301526145cd81614591565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061460a6013836136aa565b9150614615826145d4565b602082019050919050565b60006020820190508181036000830152614639816145fd565b9050919050565b600061464b82613629565b915061465683613629565b92508282101561466957614668613b86565b5b828203905092915050565b600060608201905061468960008301866138d5565b61469660208301856138d5565b6146a360408301846138d5565b949350505050565b600081905092915050565b50565b60006146c66000836146ab565b91506146d1826146b6565b600082019050919050565b60006146e7826146b9565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061474d6021836136aa565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147f08161378c565b92915050565b60006020828403121561480c5761480b613624565b5b600061481a848285016147e1565b91505092915050565b6000819050919050565b600061484861484361483e84614823565b61385b565b613629565b9050919050565b6148588161482d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148938161377a565b82525050565b60006148a5838361488a565b60208301905092915050565b6000602082019050919050565b60006148c98261485e565b6148d38185614869565b93506148de8361487a565b8060005b8381101561490f5781516148f68882614899565b9750614901836148b1565b9250506001810190506148e2565b5085935050505092915050565b600060a08201905061493160008301886138d5565b61493e602083018761484f565b818103604083015261495081866148be565b905061495f6060830185613989565b61496c60808301846138d5565b9695505050505050565b600060c08201905061498b6000830189613989565b61499860208301886138d5565b6149a5604083018761484f565b6149b2606083018661484f565b6149bf6080830185613989565b6149cc60a08301846138d5565b979650505050505050565b6000815190506149e681613633565b92915050565b600080600060608486031215614a0557614a04613624565b5b6000614a13868287016149d7565b9350506020614a24868287016149d7565b9250506040614a35868287016149d7565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204bfa42cf345825df90d387c163ecaef281118e01fb5381572784f0c935fe94f564736f6c63430008090033
Deployed Bytecode Sourcemap
28114:12853:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33733:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6693:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8853:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29406:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32355:543;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28188:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28643:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7810:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29250:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29210;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9503:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34792:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7653:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10266:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28246:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34924:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33381:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28605:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7980:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21138:148;;;;;;;;;;;;;:::i;:::-;;34388:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32003:112;;;;;;;;;;;;;:::i;:::-;;20497:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33272:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6911:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29476:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34542:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10986:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8319:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29692:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34098:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32908:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28983:206;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;32189:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8556:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34236:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21441:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33733:351;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33858:13:::1;33833:5;:22;;:38;;;;33907:13;33882:5;:22;;:38;;;;33978:5;:22;;;33953:5;:22;;;:47;;;;:::i;:::-;33931:5;:19;;:69;;;;34042:1;34019:5;:19;;;:24;;34011:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33733:351:::0;;:::o;6693:99::-;6746:13;6779:5;6772:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6693:99;:::o;8853:168::-;8935:4;8952:39;8961:12;:10;:12::i;:::-;8975:7;8984:6;8952:8;:39::i;:::-;9009:4;9002:11;;8853:168;;;;:::o;29406:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32355:543::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32535:4:::1;32519:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32509:4;32490:15;32474:13;:11;:13::i;:::-;:31;;;;:::i;:::-;32473:40;;;;:::i;:::-;32472:68;;32464:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;32676:4;32660:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32650:4;32630:16;32614:13;:11;:13::i;:::-;:32;;;;:::i;:::-;32613:41;;;;:::i;:::-;32612:69;;32604:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;32807:4;32788:15;32772:13;:11;:13::i;:::-;:31;;;;:::i;:::-;32771:40;;;;:::i;:::-;32745:23;:66;;;;32886:4;32866:16;32850:13;:11;:13::i;:::-;:32;;;;:::i;:::-;32849:41;;;;:::i;:::-;32822:24;:68;;;;32355:543:::0;;:::o;28188:51::-;;;:::o;28643:20::-;;;;;;;;;;;;;:::o;7810:107::-;7870:7;7897:12;;7890:19;;7810:107;:::o;29250:33::-;;;;:::o;29210:::-;;;;:::o;9503:354::-;9642:4;9659:36;9669:6;9677:9;9688:6;9659:9;:36::i;:::-;9706:121;9715:6;9723:12;:10;:12::i;:::-;9737:89;9775:6;9737:89;;;;;;;;;;;;;;;;;:11;:19;9749:6;9737:19;;;;;;;;;;;;;;;:33;9757:12;:10;:12::i;:::-;9737:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;9706:8;:121::i;:::-;9845:4;9838:11;;9503:354;;;;;:::o;34792:124::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34890:18:::1;34872:15;;:36;;;;;;;;;;;;;;;;;;34792:124:::0;:::o;7653:92::-;7710:5;7735:2;7728:9;;7653:92;:::o;10266:217::-;10353:4;10370:83;10379:12;:10;:12::i;:::-;10393:7;10402:50;10441:10;10402:11;:25;10414:12;:10;:12::i;:::-;10402:25;;;;;;;;;;;;;;;:34;10428:7;10402:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10370:8;:83::i;:::-;10471:4;10464:11;;10266:217;;;;:::o;28246:38::-;;;:::o;34924:125::-;34989:4;35013:19;:28;35033:7;35013:28;;;;;;;;;;;;;;;;;;;;;;;;;35006:35;;34924:125;;;:::o;33381:344::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33504:13:::1;33480:5;:21;;:37;;;;33552:13;33528:5;:21;;:37;;;;33621:5;:21;;;33597:5;:21;;;:45;;;;:::i;:::-;33576:5;:18;;:66;;;;33683:1;33661:5;:18;;;:23;;33653:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33381:344:::0;;:::o;28605:31::-;;;;;;;;;;;;;:::o;7980:126::-;8053:7;8080:9;:18;8090:7;8080:18;;;;;;;;;;;;;;;;8073:25;;7980:126;;;:::o;21138:148::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21245:1:::1;21208:40;;21229:6;;;;;;;;;;;21208:40;;;;;;;;;;;;21276:1;21259:6;;:19;;;;;;;;;;;;;;;;;;21138:148::o:0;34388:144::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34520:4:::1;34478:31;:39;34510:6;34478:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34388:144:::0;;:::o;32003:112::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32074:4:::1;32058:13;;:20;;;;;;;;;;;;;;;;;;32103:4;32089:11;;:18;;;;;;;;;;;;;;;;;;32003:112::o:0;20497:78::-;20534:7;20561:6;;;;;;;;;;;20554:13;;20497:78;:::o;33272:101::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33358:7:::1;33344:11;;:21;;;;;;;;;;;;;;;;;;33272:101:::0;:::o;6911:103::-;6966:13;6999:7;6992:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6911:103;:::o;29476:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;34542:240::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34649:13:::1;34641:21;;:4;:21;;;;34633:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;34769:5;34735:25;:31;34761:4;34735:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34542:240:::0;;:::o;10986:268::-;11078:4;11095:129;11104:12;:10;:12::i;:::-;11118:7;11127:96;11166:15;11127:96;;;;;;;;;;;;;;;;;:11;:25;11139:12;:10;:12::i;:::-;11127:25;;;;;;;;;;;;;;;:34;11153:7;11127:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11095:8;:129::i;:::-;11242:4;11235:11;;10986:268;;;;:::o;8319:174::-;8404:4;8421:42;8431:12;:10;:12::i;:::-;8445:9;8456:6;8421:9;:42::i;:::-;8481:4;8474:11;;8319:174;;;;:::o;29692:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34098:132::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34214:8:::1;34183:19;:28;34203:7;34183:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34098:132:::0;;:::o;32908:268::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33061:4:::1;33045:13;:11;:13::i;:::-;:20;;;;:::i;:::-;33035:4;33018:13;33002;:11;:13::i;:::-;:29;;;;:::i;:::-;33001:38;;;;:::i;:::-;33000:66;;32992:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;33164:4;33147:13;33131;:11;:13::i;:::-;:29;;;;:::i;:::-;33130:38;;;;:::i;:::-;33118:9;:50;;;;32908:268:::0;:::o;28983:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32189:156::-;32269:4;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32306:9:::1;32285:18;:30;;;;32333:4;32326:11;;32189:156:::0;;;:::o;8556:150::-;8644:7;8671:11;:18;8683:5;8671:18;;;;;;;;;;;;;;;:27;8690:7;8671:27;;;;;;;;;;;;;;;;8664:34;;8556:150;;;;:::o;34236:146::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34366:8:::1;34328:26;:35;34355:7;34328:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34236:146:::0;;:::o;21441:244::-;20718:12;:10;:12::i;:::-;20708:22;;:6;;;;;;;;;;;:22;;;20700:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21550:1:::1;21530:22;;:8;:22;;;;21522:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21640:8;21611:38;;21632:6;;;;;;;;;;;21611:38;;;;;;;;;;;;21669:8;21660:6;;:17;;;;;;;;;;;;;;;;;;21441:244:::0;:::o;15551:180::-;15608:7;15628:9;15644:1;15640;:5;;;;:::i;:::-;15628:17;;15669:1;15664;:6;;15656:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;15722:1;15715:8;;;15551:180;;;;:::o;95:97::-;147:7;174:10;167:17;;95:97;:::o;14171:380::-;14324:1;14307:19;;:5;:19;;;;14299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14405:1;14386:21;;:7;:21;;;;14378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14489:6;14459:11;:18;14471:5;14459:18;;;;;;;;;;;;;;;:27;14478:7;14459:27;;;;;;;;;;;;;;;:36;;;;14527:7;14511:32;;14520:5;14511:32;;;14536:6;14511:32;;;;;;:::i;:::-;;;;;;;;14171:380;;;:::o;35057:3399::-;35205:1;35189:18;;:4;:18;;;;35181:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35282:1;35268:16;;:2;:16;;;;35260:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35359:6;35343:23;;:4;:23;;;;35335:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35441:6;35427:21;;:2;:21;;;;35419:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35508:10;:14;35519:2;35508:14;;;;;;;;;;;;;;;;;;;;;;;;;35507:15;:36;;;;;35527:10;:16;35538:4;35527:16;;;;;;;;;;;;;;;;;;;;;;;;;35526:17;35507:36;35499:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35632:1;35622:6;:11;35618:93;;;35650:28;35666:4;35672:2;35676:1;35650:15;:28::i;:::-;35693:7;;35618:93;35749:7;:5;:7::i;:::-;35741:15;;:4;:15;;;;:45;;;;;35779:7;:5;:7::i;:::-;35773:13;;:2;:13;;;;35741:45;:71;;;;;35804:8;;;;;;;;;;;35803:9;35741:71;35723:932;;;35844:13;;;;;;;;;;;35839:142;;35886:19;:25;35906:4;35886:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35915:19;:23;35935:2;35915:23;;;;;;;;;;;;;;;;;;;;;;;;;35886:52;35878:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35839:142;36025:25;:31;36051:4;36025:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36061:31;:35;36093:2;36061:35;;;;;;;;;;;;;;;;;;;;;;;;;36060:36;36025:71;36021:470;;;36135:23;;36125:6;:33;;36117:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;36021:470;;;36282:25;:29;36308:2;36282:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36316:31;:37;36348:4;36316:37;;;;;;;;;;;;;;;;;;;;;;;;;36315:38;36282:71;36278:213;;;36392:24;;36382:6;:34;;36374:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36278:213;36021:470;36510:26;:30;36537:2;36510:30;;;;;;;;;;;;;;;;;;;;;;;;;36505:139;;36595:9;;36578:13;36588:2;36578:9;:13::i;:::-;36569:6;:22;;;;:::i;:::-;:35;;36561:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36505:139;35723:932;36681:28;36712:24;36730:4;36712:9;:24::i;:::-;36681:55;;36750:12;36789:18;;36765:20;:42;;36750:57;;36838:7;:35;;;;;36862:11;;;;;;;;;;;36838:35;:61;;;;;36891:8;;;;;;;;;;;36890:9;36838:61;:107;;;;;36916:25;:29;36942:2;36916:29;;;;;;;;;;;;;;;;;;;;;;;;;36838:107;:150;;;;;36963:19;:25;36983:4;36963:25;;;;;;;;;;;;;;;;;;;;;;;;;36962:26;36838:150;:191;;;;;37006:19;:23;37026:2;37006:23;;;;;;;;;;;;;;;;;;;;;;;;;37005:24;36838:191;36820:323;;;37067:4;37056:8;;:15;;;;;;;;;;;;;;;;;;37088:10;:8;:10::i;:::-;37126:5;37115:8;;:16;;;;;;;;;;;;;;;;;;36820:323;37156:12;37172:8;;;;;;;;;;;37171:9;37156:24;;37282:19;:25;37302:4;37282:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37311:19;:23;37331:2;37311:23;;;;;;;;;;;;;;;;;;;;;;;;;37282:52;37278:100;;;37361:5;37351:15;;37278:100;37391:12;37496:7;37492:911;;;37562:25;:29;37588:2;37562:29;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;37617:1;37595:5;:19;;;:23;37562:56;37558:694;;;37646:40;37682:3;37646:31;37657:5;:19;;;37646:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;37639:47;;37759:5;:19;;;37734:5;:22;;;37727:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;37705:18;;:73;;;;;;;:::i;:::-;;;;;;;;37851:5;:19;;;37826:5;:22;;;37819:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;37797:18;;:73;;;;;;;:::i;:::-;;;;;;;;37558:694;;;37932:25;:31;37958:4;37932:31;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;;37988:1;37967:5;:18;;;:22;37932:57;37928:324;;;38017:39;38052:3;38017:30;38028:5;:18;;;38017:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;38010:46;;38128:5;:18;;;38104:5;:21;;;38097:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;38075:18;;:71;;;;;;;:::i;:::-;;;;;;;;38218:5;:18;;;38194:5;:21;;;38187:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;38165:18;;:71;;;;;;;:::i;:::-;;;;;;;;37928:324;37558:694;38279:1;38272:4;:8;38268:91;;;38301:42;38317:4;38331;38338;38301:15;:42::i;:::-;38268:91;38385:4;38375:14;;;;;:::i;:::-;;;37492:911;38415:33;38431:4;38437:2;38441:6;38415:15;:33::i;:::-;35170:3286;;;;35057:3399;;;;:::o;16452:191::-;16537:7;16570:1;16565;:6;;16573:12;16557:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16597:9;16613:1;16609;:5;;;;:::i;:::-;16597:17;;16634:1;16627:8;;;16452:191;;;;;:::o;11744:573::-;11902:1;11884:20;;:6;:20;;;;11876:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11986:1;11965:23;;:9;:23;;;;11957:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12041:47;12062:6;12070:9;12081:6;12041:20;:47::i;:::-;12121:71;12143:6;12121:71;;;;;;;;;;;;;;;;;:9;:17;12131:6;12121:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12101:9;:17;12111:6;12101:17;;;;;;;;;;;;;;;:91;;;;12226:32;12251:6;12226:9;:20;12236:9;12226:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12203:9;:20;12213:9;12203:20;;;;;;;;;;;;;;;:55;;;;12291:9;12274:35;;12283:6;12274:35;;;12302:6;12274:35;;;;;;:::i;:::-;;;;;;;;11744:573;;;:::o;39595:1367::-;39634:23;39660:24;39678:4;39660:9;:24::i;:::-;39634:50;;39695:25;39744:18;;39723;;:39;;;;:::i;:::-;39695:67;;39774:12;39822:1;39803:15;:20;:46;;;;39848:1;39827:17;:22;39803:46;39799:63;;;39853:7;;;;;39799:63;39917:2;39896:18;;:23;;;;:::i;:::-;39878:15;:41;39874:115;;;39975:2;39954:18;;:23;;;;:::i;:::-;39936:41;;39874:115;40050:23;40135:1;40115:17;40094:18;;40076:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;40050:86;;40147:26;40176:36;40196:15;40176;:19;;:36;;;;:::i;:::-;40147:65;;40226:25;40254:21;40226:49;;40288:36;40305:18;40288:16;:36::i;:::-;40339:18;40360:44;40386:17;40360:21;:25;;:44;;;;:::i;:::-;40339:65;;40418:23;40444:57;40483:17;40444:34;40459:18;;40444:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;40418:83;;40512:23;40551:15;40538:10;:28;;;;:::i;:::-;40512:54;;40602:1;40581:18;:22;;;;40635:1;40614:18;:22;;;;40673:1;40655:15;:19;:42;;;;;40696:1;40678:15;:19;40655:42;40651:212;;;40714:46;40727:15;40744;40714:12;:46::i;:::-;40780:71;40795:18;40815:15;40832:18;;40780:71;;;;;;;;:::i;:::-;;;;;;;;40651:212;40896:15;;;;;;;;;;;40888:29;;40926:21;40888:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40875:79;;;;;39623:1339;;;;;;;;;39595:1367;:::o;16902:471::-;16959:7;17209:1;17204;:6;17200:47;;;17234:1;17227:8;;;;17200:47;17260:9;17276:1;17272;:5;;;;:::i;:::-;17260:17;;17305:1;17300;17296;:5;;;;:::i;:::-;:10;17288:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17364:1;17357:8;;;16902:471;;;;;:::o;17849:131::-;17906:7;17933:39;17937:1;17940;17933:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;17926:46;;17849:131;;;;:::o;15154:126::-;;;;:::o;16014:135::-;16071:7;16098:43;16102:1;16105;16098:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16091:50;;16014:135;;;;:::o;38464:593::-;38592:21;38630:1;38616:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38592:40;;38661:4;38643;38648:1;38643:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;38687:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38677:4;38682:1;38677:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;38722:62;38739:4;38754:15;38772:11;38722:8;:62::i;:::-;38823:15;:66;;;38904:11;38930:1;38974:4;39001;39021:15;38823:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38519:538;38464:593;:::o;39065:522::-;39213:62;39230:4;39245:15;39263:11;39213:8;:62::i;:::-;39318:15;:31;;;39358:9;39393:4;39413:11;39439:1;39482;39533:4;39553:15;39318:261;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39065:522;;:::o;18476:277::-;18561:7;18593:1;18589;:5;18596:12;18581:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18620:9;18636:1;18632;:5;;;;:::i;:::-;18620:17;;18744:1;18737:8;;;18476:277;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:86::-;6299:7;6339:4;6332:5;6328:16;6317:27;;6264:86;;;:::o;6356:112::-;6439:22;6455:5;6439:22;:::i;:::-;6434:3;6427:35;6356:112;;:::o;6474:214::-;6563:4;6601:2;6590:9;6586:18;6578:26;;6614:67;6678:1;6667:9;6663:17;6654:6;6614:67;:::i;:::-;6474:214;;;;:::o;6694:118::-;6781:24;6799:5;6781:24;:::i;:::-;6776:3;6769:37;6694:118;;:::o;6818:222::-;6911:4;6949:2;6938:9;6934:18;6926:26;;6962:71;7030:1;7019:9;7015:17;7006:6;6962:71;:::i;:::-;6818:222;;;;:::o;7046:116::-;7116:21;7131:5;7116:21;:::i;:::-;7109:5;7106:32;7096:60;;7152:1;7149;7142:12;7096:60;7046:116;:::o;7168:133::-;7211:5;7249:6;7236:20;7227:29;;7265:30;7289:5;7265:30;:::i;:::-;7168:133;;;;:::o;7307:468::-;7372:6;7380;7429:2;7417:9;7408:7;7404:23;7400:32;7397:119;;;7435:79;;:::i;:::-;7397:119;7555:1;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7526:117;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7307:468;;;;;:::o;7781:323::-;7837:6;7886:2;7874:9;7865:7;7861:23;7857:32;7854:119;;;7892:79;;:::i;:::-;7854:119;8012:1;8037:50;8079:7;8070:6;8059:9;8055:22;8037:50;:::i;:::-;8027:60;;7983:114;7781:323;;;;:::o;8110:329::-;8169:6;8218:2;8206:9;8197:7;8193:23;8189:32;8186:119;;;8224:79;;:::i;:::-;8186:119;8344:1;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8315:117;8110:329;;;;:::o;8445:775::-;8678:4;8716:3;8705:9;8701:19;8693:27;;8730:71;8798:1;8787:9;8783:17;8774:6;8730:71;:::i;:::-;8811:72;8879:2;8868:9;8864:18;8855:6;8811:72;:::i;:::-;8893;8961:2;8950:9;8946:18;8937:6;8893:72;:::i;:::-;8975;9043:2;9032:9;9028:18;9019:6;8975:72;:::i;:::-;9057:73;9125:3;9114:9;9110:19;9101:6;9057:73;:::i;:::-;9140;9208:3;9197:9;9193:19;9184:6;9140:73;:::i;:::-;8445:775;;;;;;;;;:::o;9226:474::-;9294:6;9302;9351:2;9339:9;9330:7;9326:23;9322:32;9319:119;;;9357:79;;:::i;:::-;9319:119;9477:1;9502:53;9547:7;9538:6;9527:9;9523:22;9502:53;:::i;:::-;9492:63;;9448:117;9604:2;9630:53;9675:7;9666:6;9655:9;9651:22;9630:53;:::i;:::-;9620:63;;9575:118;9226:474;;;;;:::o;9706:182::-;9846:34;9842:1;9834:6;9830:14;9823:58;9706:182;:::o;9894:366::-;10036:3;10057:67;10121:2;10116:3;10057:67;:::i;:::-;10050:74;;10133:93;10222:3;10133:93;:::i;:::-;10251:2;10246:3;10242:12;10235:19;;9894:366;;;:::o;10266:419::-;10432:4;10470:2;10459:9;10455:18;10447:26;;10519:9;10513:4;10509:20;10505:1;10494:9;10490:17;10483:47;10547:131;10673:4;10547:131;:::i;:::-;10539:139;;10266:419;;;:::o;10691:180::-;10739:77;10736:1;10729:88;10836:4;10833:1;10826:15;10860:4;10857:1;10850:15;10877:305;10917:3;10936:20;10954:1;10936:20;:::i;:::-;10931:25;;10970:20;10988:1;10970:20;:::i;:::-;10965:25;;11124:1;11056:66;11052:74;11049:1;11046:81;11043:107;;;11130:18;;:::i;:::-;11043:107;11174:1;11171;11167:9;11160:16;;10877:305;;;;:::o;11188:178::-;11328:30;11324:1;11316:6;11312:14;11305:54;11188:178;:::o;11372:366::-;11514:3;11535:67;11599:2;11594:3;11535:67;:::i;:::-;11528:74;;11611:93;11700:3;11611:93;:::i;:::-;11729:2;11724:3;11720:12;11713:19;;11372:366;;;:::o;11744:419::-;11910:4;11948:2;11937:9;11933:18;11925:26;;11997:9;11991:4;11987:20;11983:1;11972:9;11968:17;11961:47;12025:131;12151:4;12025:131;:::i;:::-;12017:139;;11744:419;;;:::o;12169:180::-;12217:77;12214:1;12207:88;12314:4;12311:1;12304:15;12338:4;12335:1;12328:15;12355:320;12399:6;12436:1;12430:4;12426:12;12416:22;;12483:1;12477:4;12473:12;12504:18;12494:81;;12560:4;12552:6;12548:17;12538:27;;12494:81;12622:2;12614:6;12611:14;12591:18;12588:38;12585:84;;;12641:18;;:::i;:::-;12585:84;12406:269;12355:320;;;:::o;12681:180::-;12729:77;12726:1;12719:88;12826:4;12823:1;12816:15;12850:4;12847:1;12840:15;12867:185;12907:1;12924:20;12942:1;12924:20;:::i;:::-;12919:25;;12958:20;12976:1;12958:20;:::i;:::-;12953:25;;12997:1;12987:35;;13002:18;;:::i;:::-;12987:35;13044:1;13041;13037:9;13032:14;;12867:185;;;;:::o;13058:348::-;13098:7;13121:20;13139:1;13121:20;:::i;:::-;13116:25;;13155:20;13173:1;13155:20;:::i;:::-;13150:25;;13343:1;13275:66;13271:74;13268:1;13265:81;13260:1;13253:9;13246:17;13242:105;13239:131;;;13350:18;;:::i;:::-;13239:131;13398:1;13395;13391:9;13380:20;;13058:348;;;;:::o;13412:235::-;13552:34;13548:1;13540:6;13536:14;13529:58;13621:18;13616:2;13608:6;13604:15;13597:43;13412:235;:::o;13653:366::-;13795:3;13816:67;13880:2;13875:3;13816:67;:::i;:::-;13809:74;;13892:93;13981:3;13892:93;:::i;:::-;14010:2;14005:3;14001:12;13994:19;;13653:366;;;:::o;14025:419::-;14191:4;14229:2;14218:9;14214:18;14206:26;;14278:9;14272:4;14268:20;14264:1;14253:9;14249:17;14242:47;14306:131;14432:4;14306:131;:::i;:::-;14298:139;;14025:419;;;:::o;14450:244::-;14590:34;14586:1;14578:6;14574:14;14567:58;14659:27;14654:2;14646:6;14642:15;14635:52;14450:244;:::o;14700:366::-;14842:3;14863:67;14927:2;14922:3;14863:67;:::i;:::-;14856:74;;14939:93;15028:3;14939:93;:::i;:::-;15057:2;15052:3;15048:12;15041:19;;14700:366;;;:::o;15072:419::-;15238:4;15276:2;15265:9;15261:18;15253:26;;15325:9;15319:4;15315:20;15311:1;15300:9;15296:17;15289:47;15353:131;15479:4;15353:131;:::i;:::-;15345:139;;15072:419;;;:::o;15497:223::-;15637:34;15633:1;15625:6;15621:14;15614:58;15706:6;15701:2;15693:6;15689:15;15682:31;15497:223;:::o;15726:366::-;15868:3;15889:67;15953:2;15948:3;15889:67;:::i;:::-;15882:74;;15965:93;16054:3;15965:93;:::i;:::-;16083:2;16078:3;16074:12;16067:19;;15726:366;;;:::o;16098:419::-;16264:4;16302:2;16291:9;16287:18;16279:26;;16351:9;16345:4;16341:20;16337:1;16326:9;16322:17;16315:47;16379:131;16505:4;16379:131;:::i;:::-;16371:139;;16098:419;;;:::o;16523:225::-;16663:34;16659:1;16651:6;16647:14;16640:58;16732:8;16727:2;16719:6;16715:15;16708:33;16523:225;:::o;16754:366::-;16896:3;16917:67;16981:2;16976:3;16917:67;:::i;:::-;16910:74;;16993:93;17082:3;16993:93;:::i;:::-;17111:2;17106:3;17102:12;17095:19;;16754:366;;;:::o;17126:419::-;17292:4;17330:2;17319:9;17315:18;17307:26;;17379:9;17373:4;17369:20;17365:1;17354:9;17350:17;17343:47;17407:131;17533:4;17407:131;:::i;:::-;17399:139;;17126:419;;;:::o;17551:177::-;17691:29;17687:1;17679:6;17675:14;17668:53;17551:177;:::o;17734:366::-;17876:3;17897:67;17961:2;17956:3;17897:67;:::i;:::-;17890:74;;17973:93;18062:3;17973:93;:::i;:::-;18091:2;18086:3;18082:12;18075:19;;17734:366;;;:::o;18106:419::-;18272:4;18310:2;18299:9;18295:18;18287:26;;18359:9;18353:4;18349:20;18345:1;18334:9;18330:17;18323:47;18387:131;18513:4;18387:131;:::i;:::-;18379:139;;18106:419;;;:::o;18531:223::-;18671:34;18667:1;18659:6;18655:14;18648:58;18740:6;18735:2;18727:6;18723:15;18716:31;18531:223;:::o;18760:366::-;18902:3;18923:67;18987:2;18982:3;18923:67;:::i;:::-;18916:74;;18999:93;19088:3;18999:93;:::i;:::-;19117:2;19112:3;19108:12;19101:19;;18760:366;;;:::o;19132:419::-;19298:4;19336:2;19325:9;19321:18;19313:26;;19385:9;19379:4;19375:20;19371:1;19360:9;19356:17;19349:47;19413:131;19539:4;19413:131;:::i;:::-;19405:139;;19132:419;;;:::o;19557:221::-;19697:34;19693:1;19685:6;19681:14;19674:58;19766:4;19761:2;19753:6;19749:15;19742:29;19557:221;:::o;19784:366::-;19926:3;19947:67;20011:2;20006:3;19947:67;:::i;:::-;19940:74;;20023:93;20112:3;20023:93;:::i;:::-;20141:2;20136:3;20132:12;20125:19;;19784:366;;;:::o;20156:419::-;20322:4;20360:2;20349:9;20345:18;20337:26;;20409:9;20403:4;20399:20;20395:1;20384:9;20380:17;20373:47;20437:131;20563:4;20437:131;:::i;:::-;20429:139;;20156:419;;;:::o;20581:224::-;20721:34;20717:1;20709:6;20705:14;20698:58;20790:7;20785:2;20777:6;20773:15;20766:32;20581:224;:::o;20811:366::-;20953:3;20974:67;21038:2;21033:3;20974:67;:::i;:::-;20967:74;;21050:93;21139:3;21050:93;:::i;:::-;21168:2;21163:3;21159:12;21152:19;;20811:366;;;:::o;21183:419::-;21349:4;21387:2;21376:9;21372:18;21364:26;;21436:9;21430:4;21426:20;21422:1;21411:9;21407:17;21400:47;21464:131;21590:4;21464:131;:::i;:::-;21456:139;;21183:419;;;:::o;21608:222::-;21748:34;21744:1;21736:6;21732:14;21725:58;21817:5;21812:2;21804:6;21800:15;21793:30;21608:222;:::o;21836:366::-;21978:3;21999:67;22063:2;22058:3;21999:67;:::i;:::-;21992:74;;22075:93;22164:3;22075:93;:::i;:::-;22193:2;22188:3;22184:12;22177:19;;21836:366;;;:::o;22208:419::-;22374:4;22412:2;22401:9;22397:18;22389:26;;22461:9;22455:4;22451:20;22447:1;22436:9;22432:17;22425:47;22489:131;22615:4;22489:131;:::i;:::-;22481:139;;22208:419;;;:::o;22633:224::-;22773:34;22769:1;22761:6;22757:14;22750:58;22842:7;22837:2;22829:6;22825:15;22818:32;22633:224;:::o;22863:366::-;23005:3;23026:67;23090:2;23085:3;23026:67;:::i;:::-;23019:74;;23102:93;23191:3;23102:93;:::i;:::-;23220:2;23215:3;23211:12;23204:19;;22863:366;;;:::o;23235:419::-;23401:4;23439:2;23428:9;23424:18;23416:26;;23488:9;23482:4;23478:20;23474:1;23463:9;23459:17;23452:47;23516:131;23642:4;23516:131;:::i;:::-;23508:139;;23235:419;;;:::o;23660:222::-;23800:34;23796:1;23788:6;23784:14;23777:58;23869:5;23864:2;23856:6;23852:15;23845:30;23660:222;:::o;23888:366::-;24030:3;24051:67;24115:2;24110:3;24051:67;:::i;:::-;24044:74;;24127:93;24216:3;24127:93;:::i;:::-;24245:2;24240:3;24236:12;24229:19;;23888:366;;;:::o;24260:419::-;24426:4;24464:2;24453:9;24449:18;24441:26;;24513:9;24507:4;24503:20;24499:1;24488:9;24484:17;24477:47;24541:131;24667:4;24541:131;:::i;:::-;24533:139;;24260:419;;;:::o;24685:236::-;24825:34;24821:1;24813:6;24809:14;24802:58;24894:19;24889:2;24881:6;24877:15;24870:44;24685:236;:::o;24927:366::-;25069:3;25090:67;25154:2;25149:3;25090:67;:::i;:::-;25083:74;;25166:93;25255:3;25166:93;:::i;:::-;25284:2;25279:3;25275:12;25268:19;;24927:366;;;:::o;25299:419::-;25465:4;25503:2;25492:9;25488:18;25480:26;;25552:9;25546:4;25542:20;25538:1;25527:9;25523:17;25516:47;25580:131;25706:4;25580:131;:::i;:::-;25572:139;;25299:419;;;:::o;25724:172::-;25864:24;25860:1;25852:6;25848:14;25841:48;25724:172;:::o;25902:366::-;26044:3;26065:67;26129:2;26124:3;26065:67;:::i;:::-;26058:74;;26141:93;26230:3;26141:93;:::i;:::-;26259:2;26254:3;26250:12;26243:19;;25902:366;;;:::o;26274:419::-;26440:4;26478:2;26467:9;26463:18;26455:26;;26527:9;26521:4;26517:20;26513:1;26502:9;26498:17;26491:47;26555:131;26681:4;26555:131;:::i;:::-;26547:139;;26274:419;;;:::o;26699:240::-;26839:34;26835:1;26827:6;26823:14;26816:58;26908:23;26903:2;26895:6;26891:15;26884:48;26699:240;:::o;26945:366::-;27087:3;27108:67;27172:2;27167:3;27108:67;:::i;:::-;27101:74;;27184:93;27273:3;27184:93;:::i;:::-;27302:2;27297:3;27293:12;27286:19;;26945:366;;;:::o;27317:419::-;27483:4;27521:2;27510:9;27506:18;27498:26;;27570:9;27564:4;27560:20;27556:1;27545:9;27541:17;27534:47;27598:131;27724:4;27598:131;:::i;:::-;27590:139;;27317:419;;;:::o;27742:241::-;27882:34;27878:1;27870:6;27866:14;27859:58;27951:24;27946:2;27938:6;27934:15;27927:49;27742:241;:::o;27989:366::-;28131:3;28152:67;28216:2;28211:3;28152:67;:::i;:::-;28145:74;;28228:93;28317:3;28228:93;:::i;:::-;28346:2;28341:3;28337:12;28330:19;;27989:366;;;:::o;28361:419::-;28527:4;28565:2;28554:9;28550:18;28542:26;;28614:9;28608:4;28604:20;28600:1;28589:9;28585:17;28578:47;28642:131;28768:4;28642:131;:::i;:::-;28634:139;;28361:419;;;:::o;28786:169::-;28926:21;28922:1;28914:6;28910:14;28903:45;28786:169;:::o;28961:366::-;29103:3;29124:67;29188:2;29183:3;29124:67;:::i;:::-;29117:74;;29200:93;29289:3;29200:93;:::i;:::-;29318:2;29313:3;29309:12;29302:19;;28961:366;;;:::o;29333:419::-;29499:4;29537:2;29526:9;29522:18;29514:26;;29586:9;29580:4;29576:20;29572:1;29561:9;29557:17;29550:47;29614:131;29740:4;29614:131;:::i;:::-;29606:139;;29333:419;;;:::o;29758:191::-;29798:4;29818:20;29836:1;29818:20;:::i;:::-;29813:25;;29852:20;29870:1;29852:20;:::i;:::-;29847:25;;29891:1;29888;29885:8;29882:34;;;29896:18;;:::i;:::-;29882:34;29941:1;29938;29934:9;29926:17;;29758:191;;;;:::o;29955:442::-;30104:4;30142:2;30131:9;30127:18;30119:26;;30155:71;30223:1;30212:9;30208:17;30199:6;30155:71;:::i;:::-;30236:72;30304:2;30293:9;30289:18;30280:6;30236:72;:::i;:::-;30318;30386:2;30375:9;30371:18;30362:6;30318:72;:::i;:::-;29955:442;;;;;;:::o;30403:147::-;30504:11;30541:3;30526:18;;30403:147;;;;:::o;30556:114::-;;:::o;30676:398::-;30835:3;30856:83;30937:1;30932:3;30856:83;:::i;:::-;30849:90;;30948:93;31037:3;30948:93;:::i;:::-;31066:1;31061:3;31057:11;31050:18;;30676:398;;;:::o;31080:379::-;31264:3;31286:147;31429:3;31286:147;:::i;:::-;31279:154;;31450:3;31443:10;;31080:379;;;:::o;31465:220::-;31605:34;31601:1;31593:6;31589:14;31582:58;31674:3;31669:2;31661:6;31657:15;31650:28;31465:220;:::o;31691:366::-;31833:3;31854:67;31918:2;31913:3;31854:67;:::i;:::-;31847:74;;31930:93;32019:3;31930:93;:::i;:::-;32048:2;32043:3;32039:12;32032:19;;31691:366;;;:::o;32063:419::-;32229:4;32267:2;32256:9;32252:18;32244:26;;32316:9;32310:4;32306:20;32302:1;32291:9;32287:17;32280:47;32344:131;32470:4;32344:131;:::i;:::-;32336:139;;32063:419;;;:::o;32488:180::-;32536:77;32533:1;32526:88;32633:4;32630:1;32623:15;32657:4;32654:1;32647:15;32674:180;32722:77;32719:1;32712:88;32819:4;32816:1;32809:15;32843:4;32840:1;32833:15;32860:143;32917:5;32948:6;32942:13;32933:22;;32964:33;32991:5;32964:33;:::i;:::-;32860:143;;;;:::o;33009:351::-;33079:6;33128:2;33116:9;33107:7;33103:23;33099:32;33096:119;;;33134:79;;:::i;:::-;33096:119;33254:1;33279:64;33335:7;33326:6;33315:9;33311:22;33279:64;:::i;:::-;33269:74;;33225:128;33009:351;;;;:::o;33366:85::-;33411:7;33440:5;33429:16;;33366:85;;;:::o;33457:158::-;33515:9;33548:61;33566:42;33575:32;33601:5;33575:32;:::i;:::-;33566:42;:::i;:::-;33548:61;:::i;:::-;33535:74;;33457:158;;;:::o;33621:147::-;33716:45;33755:5;33716:45;:::i;:::-;33711:3;33704:58;33621:147;;:::o;33774:114::-;33841:6;33875:5;33869:12;33859:22;;33774:114;;;:::o;33894:184::-;33993:11;34027:6;34022:3;34015:19;34067:4;34062:3;34058:14;34043:29;;33894:184;;;;:::o;34084:132::-;34151:4;34174:3;34166:11;;34204:4;34199:3;34195:14;34187:22;;34084:132;;;:::o;34222:108::-;34299:24;34317:5;34299:24;:::i;:::-;34294:3;34287:37;34222:108;;:::o;34336:179::-;34405:10;34426:46;34468:3;34460:6;34426:46;:::i;:::-;34504:4;34499:3;34495:14;34481:28;;34336:179;;;;:::o;34521:113::-;34591:4;34623;34618:3;34614:14;34606:22;;34521:113;;;:::o;34670:732::-;34789:3;34818:54;34866:5;34818:54;:::i;:::-;34888:86;34967:6;34962:3;34888:86;:::i;:::-;34881:93;;34998:56;35048:5;34998:56;:::i;:::-;35077:7;35108:1;35093:284;35118:6;35115:1;35112:13;35093:284;;;35194:6;35188:13;35221:63;35280:3;35265:13;35221:63;:::i;:::-;35214:70;;35307:60;35360:6;35307:60;:::i;:::-;35297:70;;35153:224;35140:1;35137;35133:9;35128:14;;35093:284;;;35097:14;35393:3;35386:10;;34794:608;;;34670:732;;;;:::o;35408:831::-;35671:4;35709:3;35698:9;35694:19;35686:27;;35723:71;35791:1;35780:9;35776:17;35767:6;35723:71;:::i;:::-;35804:80;35880:2;35869:9;35865:18;35856:6;35804:80;:::i;:::-;35931:9;35925:4;35921:20;35916:2;35905:9;35901:18;35894:48;35959:108;36062:4;36053:6;35959:108;:::i;:::-;35951:116;;36077:72;36145:2;36134:9;36130:18;36121:6;36077:72;:::i;:::-;36159:73;36227:3;36216:9;36212:19;36203:6;36159:73;:::i;:::-;35408:831;;;;;;;;:::o;36245:807::-;36494:4;36532:3;36521:9;36517:19;36509:27;;36546:71;36614:1;36603:9;36599:17;36590:6;36546:71;:::i;:::-;36627:72;36695:2;36684:9;36680:18;36671:6;36627:72;:::i;:::-;36709:80;36785:2;36774:9;36770:18;36761:6;36709:80;:::i;:::-;36799;36875:2;36864:9;36860:18;36851:6;36799:80;:::i;:::-;36889:73;36957:3;36946:9;36942:19;36933:6;36889:73;:::i;:::-;36972;37040:3;37029:9;37025:19;37016:6;36972:73;:::i;:::-;36245:807;;;;;;;;;:::o;37058:143::-;37115:5;37146:6;37140:13;37131:22;;37162:33;37189:5;37162:33;:::i;:::-;37058:143;;;;:::o;37207:663::-;37295:6;37303;37311;37360:2;37348:9;37339:7;37335:23;37331:32;37328:119;;;37366:79;;:::i;:::-;37328:119;37486:1;37511:64;37567:7;37558:6;37547:9;37543:22;37511:64;:::i;:::-;37501:74;;37457:128;37624:2;37650:64;37706:7;37697:6;37686:9;37682:22;37650:64;:::i;:::-;37640:74;;37595:129;37763:2;37789:64;37845:7;37836:6;37825:9;37821:22;37789:64;:::i;:::-;37779:74;;37734:129;37207:663;;;;;:::o
Swarm Source
ipfs://4bfa42cf345825df90d387c163ecaef281118e01fb5381572784f0c935fe94f5
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.