ERC-20
Overview
Max Total Supply
1,000,000,000 SC
Holders
134
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
10,000,000.000000000010347065 SCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SHIBCHAIN
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-16 */ /** SHIBCHAIN Token. The Dogechain Killer!! SHIBCHAIN superpowers SHIBA INU to bring crypto applications like #NFTs and #DeFi to the #SHIB community! * TG: https://t.me/shibchainArmy * Twitter: https://twitter.com/shibchainArmy * 1B total supply * Ownership renounced * Tax 5% when SELL * Max transaction swap 2% // SPDX-License-Identifier: Unlicensed */ pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract SHIBCHAIN is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address private marketingWallet; address private devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("SHIBCHAIN", "SC") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 0; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 5; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 0; uint256 totalSupply = 1 * 1e9 * 1e18; // 1B maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxWallet = totalSupply * 20 / 1000; // 2% swapTokensAtAmount = totalSupply * 5 / 10000; // 0.1% buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(owner()); // set as marketing wallet devWallet = address(owner()); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateBuyFees( uint256 _devFee, uint256 _liquidityFee, uint256 _marketingFee ) external onlyOwner { buyDevFee = _devFee; buyLiquidityFee = _liquidityFee; buyMarketingFee = _marketingFee; buyTotalFees = buyDevFee + buyLiquidityFee + buyMarketingFee; require(buyTotalFees <= 10, "Must keep fees at 10% or less"); } function updateSellFees( uint256 _devFee, uint256 _liquidityFee, uint256 _marketingFee ) external onlyOwner { sellDevFee = _devFee; sellLiquidityFee = _liquidityFee; sellMarketingFee = _marketingFee; sellTotalFees = sellDevFee + sellLiquidityFee + sellMarketingFee; require(sellTotalFees <= 10, "Must keep fees at 10% or less"); } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } // withdraw stucked ETH in smart contract function withdrawStuckETH() external onlyOwner { bool success; (success, ) = address(owner()).call{value: address(this).balance}(""); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600981526020017f53484942434841494e00000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f534300000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000bab565b5080600490805190602001906200011b92919062000bab565b5050506000620001306200067760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200067f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027657600080fd5b505afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000cc5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031457600080fd5b505afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000cc5565b6040518363ffffffff1660e01b81526004016200036e92919062000d08565b602060405180830381600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000cc5565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200040c60a05160016200067f60201b60201c565b6200042160a05160016200077c60201b60201c565b6000806000806005905060008060006b033b2e3c9fd0803ce800000090506103e860148262000451919062000d6e565b6200045d919062000dfe565b6008819055506103e860148262000475919062000d6e565b62000481919062000dfe565b600a8190555061271060058262000499919062000d6e565b620004a5919062000dfe565b600981905550866010819055508560118190555084601281905550601254601154601054620004d5919062000e36565b620004e1919062000e36565b600f8190555083601481905550826015819055508160168190555060165460155460145462000511919062000e36565b6200051d919062000e36565b601381905550620005336200081d60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005836200081d60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005e5620005d76200081d60201b60201c565b60016200084760201b60201c565b620005f83060016200084760201b60201c565b6200060d61dead60016200084760201b60201c565b6200062f620006216200081d60201b60201c565b60016200067f60201b60201c565b620006423060016200067f60201b60201c565b6200065761dead60016200067f60201b60201c565b6200066933826200099460201b60201c565b5050505050505050620010c7565b600033905090565b6200068f6200067760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007189062000ef4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008576200067760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e09062000ef4565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000988919062000f33565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009fe9062000fa0565b60405180910390fd5b62000a1b6000838362000b4360201b60201c565b62000a378160025462000b4860201b620025bc1790919060201c565b60028190555062000a95816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b4860201b620025bc1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b37919062000fd3565b60405180910390a35050565b505050565b600080828462000b59919062000e36565b90508381101562000ba1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b989062001040565b60405180910390fd5b8091505092915050565b82805462000bb99062001091565b90600052602060002090601f01602090048101928262000bdd576000855562000c29565b82601f1062000bf857805160ff191683800117855562000c29565b8280016001018555821562000c29579182015b8281111562000c2857825182559160200191906001019062000c0b565b5b50905062000c38919062000c3c565b5090565b5b8082111562000c5757600081600090555060010162000c3d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c8d8262000c60565b9050919050565b62000c9f8162000c80565b811462000cab57600080fd5b50565b60008151905062000cbf8162000c94565b92915050565b60006020828403121562000cde5762000cdd62000c5b565b5b600062000cee8482850162000cae565b91505092915050565b62000d028162000c80565b82525050565b600060408201905062000d1f600083018562000cf7565b62000d2e602083018462000cf7565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d7b8262000d35565b915062000d888362000d35565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dc45762000dc362000d3f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e0b8262000d35565b915062000e188362000d35565b92508262000e2b5762000e2a62000dcf565b5b828204905092915050565b600062000e438262000d35565b915062000e508362000d35565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e885762000e8762000d3f565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000edc60208362000e93565b915062000ee98262000ea4565b602082019050919050565b6000602082019050818103600083015262000f0f8162000ecd565b9050919050565b60008115159050919050565b62000f2d8162000f16565b82525050565b600060208201905062000f4a600083018462000f22565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f88601f8362000e93565b915062000f958262000f50565b602082019050919050565b6000602082019050818103600083015262000fbb8162000f79565b9050919050565b62000fcd8162000d35565b82525050565b600060208201905062000fea600083018462000fc2565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001028601b8362000e93565b9150620010358262000ff0565b602082019050919050565b600060208201905081810360008301526200105b8162001019565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010aa57607f821691505b60208210811415620010c157620010c062001062565b5b50919050565b60805160a0516154506200112560003960008181611161015281816119570152612ba5015260008181610d1101528181612b4d01528181613cbb01528181613dab01528181613dd201528181613e6e0152613e9501526154506000f3fe6080604052600436106103035760003560e01c8063924de9b711610190578063c18bc195116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610ba9578063f5648a4f14610bd2578063f637434214610be9578063f8b45b0514610c145761030a565b8063e2f4560514610b28578063e884f26014610b53578063f11a24d314610b7e5761030a565b8063c18bc19514610a04578063c876d0b914610a2d578063c8c8ebe414610a58578063d257b34f14610a83578063d85ba06314610ac0578063dd62ed3e14610aeb5761030a565b8063a457c2d711610149578063b62496f511610123578063b62496f51461094a578063bbc0c74214610987578063c0246668146109b2578063c17b5b8c146109db5761030a565b8063a457c2d7146108a7578063a9059cbb146108e4578063aacebbe3146109215761030a565b8063924de9b7146107a957806395d89b41146107d25780639a7a23d6146107fd5780639c3b4fdc146108265780639fccce3214610851578063a0d82dc51461087c5761030a565b80634a62bb651161024f578063751039fc116102085780638095d564116101e25780638095d564146107135780638a8c523c1461073c5780638da5cb5b14610753578063921369131461077e5761030a565b8063751039fc146106945780637571336a146106bf5780637bce5a04146106e85761030a565b80634a62bb65146105825780634fbee193146105ad5780636a486a8e146105ea5780636ddd17131461061557806370a0823114610640578063715018a61461067d5761030a565b80631a8145bb116102bc57806323b872dd1161029657806323b872dd146104b2578063313ce567146104ef578063395093511461051a57806349bd5a5e146105575761030a565b80631a8145bb146104335780631f3fed8f1461045e578063203e727e146104895761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df5780631816467f1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c3f565b604051610331919061404d565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190614108565b610cd1565b60405161036e9190614163565b60405180910390f35b34801561038357600080fd5b5061039e6004803603810190610399919061417e565b610cef565b6040516103ab9190614163565b60405180910390f35b3480156103c057600080fd5b506103c9610d0f565b6040516103d6919061420a565b60405180910390f35b3480156103eb57600080fd5b506103f4610d33565b6040516104019190614234565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c919061417e565b610d3d565b005b34801561043f57600080fd5b50610448610e94565b6040516104559190614234565b60405180910390f35b34801561046a57600080fd5b50610473610e9a565b6040516104809190614234565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab919061424f565b610ea0565b005b3480156104be57600080fd5b506104d960048036038101906104d4919061427c565b610fca565b6040516104e69190614163565b60405180910390f35b3480156104fb57600080fd5b506105046110a3565b60405161051191906142eb565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190614108565b6110ac565b60405161054e9190614163565b60405180910390f35b34801561056357600080fd5b5061056c61115f565b6040516105799190614315565b60405180910390f35b34801561058e57600080fd5b50610597611183565b6040516105a49190614163565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061417e565b611196565b6040516105e19190614163565b60405180910390f35b3480156105f657600080fd5b506105ff6111ec565b60405161060c9190614234565b60405180910390f35b34801561062157600080fd5b5061062a6111f2565b6040516106379190614163565b60405180910390f35b34801561064c57600080fd5b506106676004803603810190610662919061417e565b611205565b6040516106749190614234565b60405180910390f35b34801561068957600080fd5b5061069261124d565b005b3480156106a057600080fd5b506106a96113a5565b6040516106b69190614163565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e1919061435c565b611460565b005b3480156106f457600080fd5b506106fd611552565b60405161070a9190614234565b60405180910390f35b34801561071f57600080fd5b5061073a6004803603810190610735919061439c565b611558565b005b34801561074857600080fd5b50610751611672565b005b34801561075f57600080fd5b50610768611748565b6040516107759190614315565b60405180910390f35b34801561078a57600080fd5b50610793611772565b6040516107a09190614234565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb91906143ef565b611778565b005b3480156107de57600080fd5b506107e761182c565b6040516107f4919061404d565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f919061435c565b6118be565b005b34801561083257600080fd5b5061083b6119f2565b6040516108489190614234565b60405180910390f35b34801561085d57600080fd5b506108666119f8565b6040516108739190614234565b60405180910390f35b34801561088857600080fd5b506108916119fe565b60405161089e9190614234565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c99190614108565b611a04565b6040516108db9190614163565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190614108565b611ad1565b6040516109189190614163565b60405180910390f35b34801561092d57600080fd5b506109486004803603810190610943919061417e565b611aef565b005b34801561095657600080fd5b50610971600480360381019061096c919061417e565b611c46565b60405161097e9190614163565b60405180910390f35b34801561099357600080fd5b5061099c611c66565b6040516109a99190614163565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d4919061435c565b611c79565b005b3480156109e757600080fd5b50610a0260048036038101906109fd919061439c565b611db9565b005b348015610a1057600080fd5b50610a2b6004803603810190610a26919061424f565b611ed3565b005b348015610a3957600080fd5b50610a42611ffd565b604051610a4f9190614163565b60405180910390f35b348015610a6457600080fd5b50610a6d612010565b604051610a7a9190614234565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa5919061424f565b612016565b604051610ab79190614163565b60405180910390f35b348015610acc57600080fd5b50610ad5612186565b604051610ae29190614234565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d919061441c565b61218c565b604051610b1f9190614234565b60405180910390f35b348015610b3457600080fd5b50610b3d612213565b604051610b4a9190614234565b60405180910390f35b348015610b5f57600080fd5b50610b68612219565b604051610b759190614163565b60405180910390f35b348015610b8a57600080fd5b50610b936122d4565b604051610ba09190614234565b60405180910390f35b348015610bb557600080fd5b50610bd06004803603810190610bcb919061417e565b6122da565b005b348015610bde57600080fd5b50610be76124a1565b005b348015610bf557600080fd5b50610bfe6125b0565b604051610c0b9190614234565b60405180910390f35b348015610c2057600080fd5b50610c296125b6565b604051610c369190614234565b60405180910390f35b606060038054610c4e9061448b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7a9061448b565b8015610cc75780601f10610c9c57610100808354040283529160200191610cc7565b820191906000526020600020905b815481529060010190602001808311610caa57829003601f168201915b5050505050905090565b6000610ce5610cde61261a565b8484612622565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610d4561261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb90614509565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610ea861261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90614509565b60405180910390fd5b670de0b6b3a76400006103e86001610f4d610d33565b610f579190614558565b610f6191906145e1565b610f6b91906145e1565b811015610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490614684565b60405180910390fd5b670de0b6b3a764000081610fc19190614558565b60088190555050565b6000610fd78484846127ed565b61109884610fe361261a565b611093856040518060600160405280602881526020016153ce60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061104961261a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134879092919063ffffffff16565b612622565b600190509392505050565b60006012905090565b60006111556110b961261a565b8461115085600160006110ca61261a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125bc90919063ffffffff16565b612622565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61125561261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90614509565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006113af61261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143590614509565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61146861261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90614509565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b61156061261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e690614509565b60405180910390fd5b82601281905550816011819055508060108190555060105460115460125461161791906146a4565b61162191906146a4565b600f81905550600a600f54111561166d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166490614746565b60405180910390fd5b505050565b61167a61261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614509565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b61178061261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690614509565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461183b9061448b565b80601f01602080910402602001604051908101604052809291908181526020018280546118679061448b565b80156118b45780601f10611889576101008083540402835291602001916118b4565b820191906000526020600020905b81548152906001019060200180831161189757829003601f168201915b5050505050905090565b6118c661261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90614509565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db906147d8565b60405180910390fd5b6119ee82826134eb565b5050565b60125481565b60195481565b60165481565b6000611ac7611a1161261a565b84611ac2856040518060600160405280602581526020016153f66025913960016000611a3b61261a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134879092919063ffffffff16565b612622565b6001905092915050565b6000611ae5611ade61261a565b84846127ed565b6001905092915050565b611af761261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d90614509565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611c8161261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0790614509565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611dad9190614163565b60405180910390a25050565b611dc161261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4790614509565b60405180910390fd5b826016819055508160158190555080601481905550601454601554601654611e7891906146a4565b611e8291906146a4565b601381905550600a6013541115611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590614746565b60405180910390fd5b505050565b611edb61261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190614509565b60405180910390fd5b670de0b6b3a76400006103e86005611f80610d33565b611f8a9190614558565b611f9491906145e1565b611f9e91906145e1565b811015611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd79061486a565b60405180910390fd5b670de0b6b3a764000081611ff49190614558565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b600061202061261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690614509565b60405180910390fd5b620186a060016120bd610d33565b6120c79190614558565b6120d191906145e1565b821015612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a906148fc565b60405180910390fd5b6103e86005612120610d33565b61212a9190614558565b61213491906145e1565b821115612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d9061498e565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061222361261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a990614509565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6122e261261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236890614509565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890614a20565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124a961261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f90614509565b60405180910390fd5b6000612542611748565b73ffffffffffffffffffffffffffffffffffffffff164760405161256590614a71565b60006040518083038185875af1925050503d80600081146125a2576040519150601f19603f3d011682016040523d82523d6000602084013e6125a7565b606091505b50508091505050565b60155481565b600a5481565b60008082846125cb91906146a4565b905083811015612610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260790614ad2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268990614b64565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f990614bf6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127e09190614234565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285490614c88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c490614d1a565b60405180910390fd5b60008114156128e7576128e28383600061358c565b613482565b600b60009054906101000a900460ff1615612faa57612904611748565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129725750612942611748565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129ab5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129e5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129fe5750600560149054906101000a900460ff16155b15612fa957600b60019054906101000a900460ff16612af857601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ab85750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aee90614d86565b60405180910390fd5b5b600e60009054906101000a900460ff1615612cc057612b15611748565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b9c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bf457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612cbf5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7190614e3e565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d635750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e0a57600854811115612dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da490614ed0565b60405180910390fd5b600a54612db983611205565b82612dc491906146a4565b1115612e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfc90614f3c565b60405180910390fd5b612fa8565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ead5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612efc57600854811115612ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eee90614fce565b60405180910390fd5b612fa7565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fa657600a54612f5983611205565b82612f6491906146a4565b1115612fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9c90614f3c565b60405180910390fd5b5b5b5b5b5b6000612fb530611205565b905060006009548210159050808015612fda5750600b60029054906101000a900460ff165b8015612ff35750600560149054906101000a900460ff16155b80156130495750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561309f5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130f55750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613139576001600560146101000a81548160ff02191690831515021790555061311d613821565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131ef5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131f957600090505b6000811561347257601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561325c57506000601354115b1561332957613289606461327b60135488613b0890919063ffffffff16565b613b8390919063ffffffff16565b90506013546015548261329c9190614558565b6132a691906145e1565b601860008282546132b791906146a4565b92505081905550601354601654826132cf9190614558565b6132d991906145e1565b601960008282546132ea91906146a4565b92505081905550601354601454826133029190614558565b61330c91906145e1565b6017600082825461331d91906146a4565b9250508190555061344e565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561338457506000600f54115b1561344d576133b160646133a3600f5488613b0890919063ffffffff16565b613b8390919063ffffffff16565b9050600f54601154826133c49190614558565b6133ce91906145e1565b601860008282546133df91906146a4565b92505081905550600f54601254826133f79190614558565b61340191906145e1565b6019600082825461341291906146a4565b92505081905550600f546010548261342a9190614558565b61343491906145e1565b6017600082825461344591906146a4565b925050819055505b5b60008111156134635761346287308361358c565b5b808561346f9190614fee565b94505b61347d87878761358c565b505050505b505050565b60008383111582906134cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c6919061404d565b60405180910390fd5b50600083856134de9190614fee565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f390614c88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561366c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366390614d1a565b60405180910390fd5b613677838383613bcd565b6136e2816040518060600160405280602681526020016153a8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134879092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613775816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125bc90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138149190614234565b60405180910390a3505050565b600061382c30611205565b9050600060195460175460185461384391906146a4565b61384d91906146a4565b905060008083148061385f5750600082145b1561386c57505050613b06565b601460095461387b9190614558565b8311156138945760146009546138919190614558565b92505b6000600283601854866138a79190614558565b6138b191906145e1565b6138bb91906145e1565b905060006138d28286613bd290919063ffffffff16565b905060004790506138e282613c1c565b60006138f78247613bd290919063ffffffff16565b905060006139228761391460175485613b0890919063ffffffff16565b613b8390919063ffffffff16565b9050600061394d8861393f60195486613b0890919063ffffffff16565b613b8390919063ffffffff16565b9050600081838561395e9190614fee565b6139689190614fee565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139c890614a71565b60006040518083038185875af1925050503d8060008114613a05576040519150601f19603f3d011682016040523d82523d6000602084013e613a0a565b606091505b505080985050600087118015613a205750600081115b15613a6d57613a2f8782613e68565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613a6493929190615022565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ab390614a71565b60006040518083038185875af1925050503d8060008114613af0576040519150601f19603f3d011682016040523d82523d6000602084013e613af5565b606091505b505080985050505050505050505050505b565b600080831415613b1b5760009050613b7d565b60008284613b299190614558565b9050828482613b3891906145e1565b14613b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6f906150cb565b60405180910390fd5b809150505b92915050565b6000613bc583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f51565b905092915050565b505050565b6000613c1483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613487565b905092915050565b6000600267ffffffffffffffff811115613c3957613c386150eb565b5b604051908082528060200260200182016040528015613c675781602001602082028036833780820191505090505b5090503081600081518110613c7f57613c7e61511a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d1f57600080fd5b505afa158015613d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d57919061515e565b81600181518110613d6b57613d6a61511a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613dd0307f000000000000000000000000000000000000000000000000000000000000000084612622565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e32959493929190615284565b600060405180830381600087803b158015613e4c57600080fd5b505af1158015613e60573d6000803e3d6000fd5b505050505050565b613e93307f000000000000000000000000000000000000000000000000000000000000000084612622565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613ef8969594939291906152de565b6060604051808303818588803b158015613f1157600080fd5b505af1158015613f25573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f4a9190615354565b5050505050565b60008083118290613f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8f919061404d565b60405180910390fd5b5060008385613fa791906145e1565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fee578082015181840152602081019050613fd3565b83811115613ffd576000848401525b50505050565b6000601f19601f8301169050919050565b600061401f82613fb4565b6140298185613fbf565b9350614039818560208601613fd0565b61404281614003565b840191505092915050565b600060208201905081810360008301526140678184614014565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061409f82614074565b9050919050565b6140af81614094565b81146140ba57600080fd5b50565b6000813590506140cc816140a6565b92915050565b6000819050919050565b6140e5816140d2565b81146140f057600080fd5b50565b600081359050614102816140dc565b92915050565b6000806040838503121561411f5761411e61406f565b5b600061412d858286016140bd565b925050602061413e858286016140f3565b9150509250929050565b60008115159050919050565b61415d81614148565b82525050565b60006020820190506141786000830184614154565b92915050565b6000602082840312156141945761419361406f565b5b60006141a2848285016140bd565b91505092915050565b6000819050919050565b60006141d06141cb6141c684614074565b6141ab565b614074565b9050919050565b60006141e2826141b5565b9050919050565b60006141f4826141d7565b9050919050565b614204816141e9565b82525050565b600060208201905061421f60008301846141fb565b92915050565b61422e816140d2565b82525050565b60006020820190506142496000830184614225565b92915050565b6000602082840312156142655761426461406f565b5b6000614273848285016140f3565b91505092915050565b6000806000606084860312156142955761429461406f565b5b60006142a3868287016140bd565b93505060206142b4868287016140bd565b92505060406142c5868287016140f3565b9150509250925092565b600060ff82169050919050565b6142e5816142cf565b82525050565b600060208201905061430060008301846142dc565b92915050565b61430f81614094565b82525050565b600060208201905061432a6000830184614306565b92915050565b61433981614148565b811461434457600080fd5b50565b60008135905061435681614330565b92915050565b600080604083850312156143735761437261406f565b5b6000614381858286016140bd565b925050602061439285828601614347565b9150509250929050565b6000806000606084860312156143b5576143b461406f565b5b60006143c3868287016140f3565b93505060206143d4868287016140f3565b92505060406143e5868287016140f3565b9150509250925092565b6000602082840312156144055761440461406f565b5b600061441384828501614347565b91505092915050565b600080604083850312156144335761443261406f565b5b6000614441858286016140bd565b9250506020614452858286016140bd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144a357607f821691505b602082108114156144b7576144b661445c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144f3602083613fbf565b91506144fe826144bd565b602082019050919050565b60006020820190508181036000830152614522816144e6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614563826140d2565b915061456e836140d2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145a7576145a6614529565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145ec826140d2565b91506145f7836140d2565b925082614607576146066145b2565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061466e602f83613fbf565b915061467982614612565b604082019050919050565b6000602082019050818103600083015261469d81614661565b9050919050565b60006146af826140d2565b91506146ba836140d2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146ef576146ee614529565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000614730601d83613fbf565b915061473b826146fa565b602082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147c2603983613fbf565b91506147cd82614766565b604082019050919050565b600060208201905081810360008301526147f1816147b5565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614854602483613fbf565b915061485f826147f8565b604082019050919050565b6000602082019050818103600083015261488381614847565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148e6603583613fbf565b91506148f18261488a565b604082019050919050565b60006020820190508181036000830152614915816148d9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614978603483613fbf565b91506149838261491c565b604082019050919050565b600060208201905081810360008301526149a78161496b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a0a602683613fbf565b9150614a15826149ae565b604082019050919050565b60006020820190508181036000830152614a39816149fd565b9050919050565b600081905092915050565b50565b6000614a5b600083614a40565b9150614a6682614a4b565b600082019050919050565b6000614a7c82614a4e565b9150819050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614abc601b83613fbf565b9150614ac782614a86565b602082019050919050565b60006020820190508181036000830152614aeb81614aaf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b4e602483613fbf565b9150614b5982614af2565b604082019050919050565b60006020820190508181036000830152614b7d81614b41565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614be0602283613fbf565b9150614beb82614b84565b604082019050919050565b60006020820190508181036000830152614c0f81614bd3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c72602583613fbf565b9150614c7d82614c16565b604082019050919050565b60006020820190508181036000830152614ca181614c65565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d04602383613fbf565b9150614d0f82614ca8565b604082019050919050565b60006020820190508181036000830152614d3381614cf7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d70601683613fbf565b9150614d7b82614d3a565b602082019050919050565b60006020820190508181036000830152614d9f81614d63565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e28604983613fbf565b9150614e3382614da6565b606082019050919050565b60006020820190508181036000830152614e5781614e1b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614eba603583613fbf565b9150614ec582614e5e565b604082019050919050565b60006020820190508181036000830152614ee981614ead565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f26601383613fbf565b9150614f3182614ef0565b602082019050919050565b60006020820190508181036000830152614f5581614f19565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614fb8603683613fbf565b9150614fc382614f5c565b604082019050919050565b60006020820190508181036000830152614fe781614fab565b9050919050565b6000614ff9826140d2565b9150615004836140d2565b92508282101561501757615016614529565b5b828203905092915050565b60006060820190506150376000830186614225565b6150446020830185614225565b6150516040830184614225565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150b5602183613fbf565b91506150c082615059565b604082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615158816140a6565b92915050565b6000602082840312156151745761517361406f565b5b600061518284828501615149565b91505092915050565b6000819050919050565b60006151b06151ab6151a68461518b565b6141ab565b6140d2565b9050919050565b6151c081615195565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151fb81614094565b82525050565b600061520d83836151f2565b60208301905092915050565b6000602082019050919050565b6000615231826151c6565b61523b81856151d1565b9350615246836151e2565b8060005b8381101561527757815161525e8882615201565b975061526983615219565b92505060018101905061524a565b5085935050505092915050565b600060a0820190506152996000830188614225565b6152a660208301876151b7565b81810360408301526152b88186615226565b90506152c76060830185614306565b6152d46080830184614225565b9695505050505050565b600060c0820190506152f36000830189614306565b6153006020830188614225565b61530d60408301876151b7565b61531a60608301866151b7565b6153276080830185614306565b61533460a0830184614225565b979650505050505050565b60008151905061534e816140dc565b92915050565b60008060006060848603121561536d5761536c61406f565b5b600061537b8682870161533f565b935050602061538c8682870161533f565b925050604061539d8682870161533f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220652d6181eeaa7dfdbcb90b7d9bba2edd52b6fb5a48ee9a0d7021b792a4ce8ff664736f6c63430008090033
Deployed Bytecode
0x6080604052600436106103035760003560e01c8063924de9b711610190578063c18bc195116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610ba9578063f5648a4f14610bd2578063f637434214610be9578063f8b45b0514610c145761030a565b8063e2f4560514610b28578063e884f26014610b53578063f11a24d314610b7e5761030a565b8063c18bc19514610a04578063c876d0b914610a2d578063c8c8ebe414610a58578063d257b34f14610a83578063d85ba06314610ac0578063dd62ed3e14610aeb5761030a565b8063a457c2d711610149578063b62496f511610123578063b62496f51461094a578063bbc0c74214610987578063c0246668146109b2578063c17b5b8c146109db5761030a565b8063a457c2d7146108a7578063a9059cbb146108e4578063aacebbe3146109215761030a565b8063924de9b7146107a957806395d89b41146107d25780639a7a23d6146107fd5780639c3b4fdc146108265780639fccce3214610851578063a0d82dc51461087c5761030a565b80634a62bb651161024f578063751039fc116102085780638095d564116101e25780638095d564146107135780638a8c523c1461073c5780638da5cb5b14610753578063921369131461077e5761030a565b8063751039fc146106945780637571336a146106bf5780637bce5a04146106e85761030a565b80634a62bb65146105825780634fbee193146105ad5780636a486a8e146105ea5780636ddd17131461061557806370a0823114610640578063715018a61461067d5761030a565b80631a8145bb116102bc57806323b872dd1161029657806323b872dd146104b2578063313ce567146104ef578063395093511461051a57806349bd5a5e146105575761030a565b80631a8145bb146104335780631f3fed8f1461045e578063203e727e146104895761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df5780631816467f1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c3f565b604051610331919061404d565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190614108565b610cd1565b60405161036e9190614163565b60405180910390f35b34801561038357600080fd5b5061039e6004803603810190610399919061417e565b610cef565b6040516103ab9190614163565b60405180910390f35b3480156103c057600080fd5b506103c9610d0f565b6040516103d6919061420a565b60405180910390f35b3480156103eb57600080fd5b506103f4610d33565b6040516104019190614234565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c919061417e565b610d3d565b005b34801561043f57600080fd5b50610448610e94565b6040516104559190614234565b60405180910390f35b34801561046a57600080fd5b50610473610e9a565b6040516104809190614234565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab919061424f565b610ea0565b005b3480156104be57600080fd5b506104d960048036038101906104d4919061427c565b610fca565b6040516104e69190614163565b60405180910390f35b3480156104fb57600080fd5b506105046110a3565b60405161051191906142eb565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190614108565b6110ac565b60405161054e9190614163565b60405180910390f35b34801561056357600080fd5b5061056c61115f565b6040516105799190614315565b60405180910390f35b34801561058e57600080fd5b50610597611183565b6040516105a49190614163565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061417e565b611196565b6040516105e19190614163565b60405180910390f35b3480156105f657600080fd5b506105ff6111ec565b60405161060c9190614234565b60405180910390f35b34801561062157600080fd5b5061062a6111f2565b6040516106379190614163565b60405180910390f35b34801561064c57600080fd5b506106676004803603810190610662919061417e565b611205565b6040516106749190614234565b60405180910390f35b34801561068957600080fd5b5061069261124d565b005b3480156106a057600080fd5b506106a96113a5565b6040516106b69190614163565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e1919061435c565b611460565b005b3480156106f457600080fd5b506106fd611552565b60405161070a9190614234565b60405180910390f35b34801561071f57600080fd5b5061073a6004803603810190610735919061439c565b611558565b005b34801561074857600080fd5b50610751611672565b005b34801561075f57600080fd5b50610768611748565b6040516107759190614315565b60405180910390f35b34801561078a57600080fd5b50610793611772565b6040516107a09190614234565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb91906143ef565b611778565b005b3480156107de57600080fd5b506107e761182c565b6040516107f4919061404d565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f919061435c565b6118be565b005b34801561083257600080fd5b5061083b6119f2565b6040516108489190614234565b60405180910390f35b34801561085d57600080fd5b506108666119f8565b6040516108739190614234565b60405180910390f35b34801561088857600080fd5b506108916119fe565b60405161089e9190614234565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c99190614108565b611a04565b6040516108db9190614163565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190614108565b611ad1565b6040516109189190614163565b60405180910390f35b34801561092d57600080fd5b506109486004803603810190610943919061417e565b611aef565b005b34801561095657600080fd5b50610971600480360381019061096c919061417e565b611c46565b60405161097e9190614163565b60405180910390f35b34801561099357600080fd5b5061099c611c66565b6040516109a99190614163565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d4919061435c565b611c79565b005b3480156109e757600080fd5b50610a0260048036038101906109fd919061439c565b611db9565b005b348015610a1057600080fd5b50610a2b6004803603810190610a26919061424f565b611ed3565b005b348015610a3957600080fd5b50610a42611ffd565b604051610a4f9190614163565b60405180910390f35b348015610a6457600080fd5b50610a6d612010565b604051610a7a9190614234565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa5919061424f565b612016565b604051610ab79190614163565b60405180910390f35b348015610acc57600080fd5b50610ad5612186565b604051610ae29190614234565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d919061441c565b61218c565b604051610b1f9190614234565b60405180910390f35b348015610b3457600080fd5b50610b3d612213565b604051610b4a9190614234565b60405180910390f35b348015610b5f57600080fd5b50610b68612219565b604051610b759190614163565b60405180910390f35b348015610b8a57600080fd5b50610b936122d4565b604051610ba09190614234565b60405180910390f35b348015610bb557600080fd5b50610bd06004803603810190610bcb919061417e565b6122da565b005b348015610bde57600080fd5b50610be76124a1565b005b348015610bf557600080fd5b50610bfe6125b0565b604051610c0b9190614234565b60405180910390f35b348015610c2057600080fd5b50610c296125b6565b604051610c369190614234565b60405180910390f35b606060038054610c4e9061448b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7a9061448b565b8015610cc75780601f10610c9c57610100808354040283529160200191610cc7565b820191906000526020600020905b815481529060010190602001808311610caa57829003601f168201915b5050505050905090565b6000610ce5610cde61261a565b8484612622565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610d4561261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb90614509565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610ea861261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90614509565b60405180910390fd5b670de0b6b3a76400006103e86001610f4d610d33565b610f579190614558565b610f6191906145e1565b610f6b91906145e1565b811015610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490614684565b60405180910390fd5b670de0b6b3a764000081610fc19190614558565b60088190555050565b6000610fd78484846127ed565b61109884610fe361261a565b611093856040518060600160405280602881526020016153ce60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061104961261a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134879092919063ffffffff16565b612622565b600190509392505050565b60006012905090565b60006111556110b961261a565b8461115085600160006110ca61261a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125bc90919063ffffffff16565b612622565b6001905092915050565b7f000000000000000000000000eb093c39fc8ded8c4d043c367d4bd75321e8a7c681565b600b60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61125561261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90614509565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006113af61261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143590614509565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61146861261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90614509565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b61156061261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e690614509565b60405180910390fd5b82601281905550816011819055508060108190555060105460115460125461161791906146a4565b61162191906146a4565b600f81905550600a600f54111561166d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166490614746565b60405180910390fd5b505050565b61167a61261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614509565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b61178061261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690614509565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461183b9061448b565b80601f01602080910402602001604051908101604052809291908181526020018280546118679061448b565b80156118b45780601f10611889576101008083540402835291602001916118b4565b820191906000526020600020905b81548152906001019060200180831161189757829003601f168201915b5050505050905090565b6118c661261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90614509565b60405180910390fd5b7f000000000000000000000000eb093c39fc8ded8c4d043c367d4bd75321e8a7c673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db906147d8565b60405180910390fd5b6119ee82826134eb565b5050565b60125481565b60195481565b60165481565b6000611ac7611a1161261a565b84611ac2856040518060600160405280602581526020016153f66025913960016000611a3b61261a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134879092919063ffffffff16565b612622565b6001905092915050565b6000611ae5611ade61261a565b84846127ed565b6001905092915050565b611af761261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d90614509565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611c8161261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0790614509565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611dad9190614163565b60405180910390a25050565b611dc161261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4790614509565b60405180910390fd5b826016819055508160158190555080601481905550601454601554601654611e7891906146a4565b611e8291906146a4565b601381905550600a6013541115611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590614746565b60405180910390fd5b505050565b611edb61261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190614509565b60405180910390fd5b670de0b6b3a76400006103e86005611f80610d33565b611f8a9190614558565b611f9491906145e1565b611f9e91906145e1565b811015611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd79061486a565b60405180910390fd5b670de0b6b3a764000081611ff49190614558565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b600061202061261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690614509565b60405180910390fd5b620186a060016120bd610d33565b6120c79190614558565b6120d191906145e1565b821015612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a906148fc565b60405180910390fd5b6103e86005612120610d33565b61212a9190614558565b61213491906145e1565b821115612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d9061498e565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061222361261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a990614509565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6122e261261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236890614509565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890614a20565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124a961261a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f90614509565b60405180910390fd5b6000612542611748565b73ffffffffffffffffffffffffffffffffffffffff164760405161256590614a71565b60006040518083038185875af1925050503d80600081146125a2576040519150601f19603f3d011682016040523d82523d6000602084013e6125a7565b606091505b50508091505050565b60155481565b600a5481565b60008082846125cb91906146a4565b905083811015612610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260790614ad2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268990614b64565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f990614bf6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127e09190614234565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285490614c88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c490614d1a565b60405180910390fd5b60008114156128e7576128e28383600061358c565b613482565b600b60009054906101000a900460ff1615612faa57612904611748565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129725750612942611748565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129ab5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129e5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129fe5750600560149054906101000a900460ff16155b15612fa957600b60019054906101000a900460ff16612af857601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ab85750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aee90614d86565b60405180910390fd5b5b600e60009054906101000a900460ff1615612cc057612b15611748565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b9c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bf457507f000000000000000000000000eb093c39fc8ded8c4d043c367d4bd75321e8a7c673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612cbf5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7190614e3e565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d635750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e0a57600854811115612dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da490614ed0565b60405180910390fd5b600a54612db983611205565b82612dc491906146a4565b1115612e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfc90614f3c565b60405180910390fd5b612fa8565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ead5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612efc57600854811115612ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eee90614fce565b60405180910390fd5b612fa7565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fa657600a54612f5983611205565b82612f6491906146a4565b1115612fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9c90614f3c565b60405180910390fd5b5b5b5b5b5b6000612fb530611205565b905060006009548210159050808015612fda5750600b60029054906101000a900460ff165b8015612ff35750600560149054906101000a900460ff16155b80156130495750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561309f5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130f55750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613139576001600560146101000a81548160ff02191690831515021790555061311d613821565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131ef5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131f957600090505b6000811561347257601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561325c57506000601354115b1561332957613289606461327b60135488613b0890919063ffffffff16565b613b8390919063ffffffff16565b90506013546015548261329c9190614558565b6132a691906145e1565b601860008282546132b791906146a4565b92505081905550601354601654826132cf9190614558565b6132d991906145e1565b601960008282546132ea91906146a4565b92505081905550601354601454826133029190614558565b61330c91906145e1565b6017600082825461331d91906146a4565b9250508190555061344e565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561338457506000600f54115b1561344d576133b160646133a3600f5488613b0890919063ffffffff16565b613b8390919063ffffffff16565b9050600f54601154826133c49190614558565b6133ce91906145e1565b601860008282546133df91906146a4565b92505081905550600f54601254826133f79190614558565b61340191906145e1565b6019600082825461341291906146a4565b92505081905550600f546010548261342a9190614558565b61343491906145e1565b6017600082825461344591906146a4565b925050819055505b5b60008111156134635761346287308361358c565b5b808561346f9190614fee565b94505b61347d87878761358c565b505050505b505050565b60008383111582906134cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c6919061404d565b60405180910390fd5b50600083856134de9190614fee565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f390614c88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561366c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366390614d1a565b60405180910390fd5b613677838383613bcd565b6136e2816040518060600160405280602681526020016153a8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134879092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613775816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125bc90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138149190614234565b60405180910390a3505050565b600061382c30611205565b9050600060195460175460185461384391906146a4565b61384d91906146a4565b905060008083148061385f5750600082145b1561386c57505050613b06565b601460095461387b9190614558565b8311156138945760146009546138919190614558565b92505b6000600283601854866138a79190614558565b6138b191906145e1565b6138bb91906145e1565b905060006138d28286613bd290919063ffffffff16565b905060004790506138e282613c1c565b60006138f78247613bd290919063ffffffff16565b905060006139228761391460175485613b0890919063ffffffff16565b613b8390919063ffffffff16565b9050600061394d8861393f60195486613b0890919063ffffffff16565b613b8390919063ffffffff16565b9050600081838561395e9190614fee565b6139689190614fee565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139c890614a71565b60006040518083038185875af1925050503d8060008114613a05576040519150601f19603f3d011682016040523d82523d6000602084013e613a0a565b606091505b505080985050600087118015613a205750600081115b15613a6d57613a2f8782613e68565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613a6493929190615022565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ab390614a71565b60006040518083038185875af1925050503d8060008114613af0576040519150601f19603f3d011682016040523d82523d6000602084013e613af5565b606091505b505080985050505050505050505050505b565b600080831415613b1b5760009050613b7d565b60008284613b299190614558565b9050828482613b3891906145e1565b14613b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6f906150cb565b60405180910390fd5b809150505b92915050565b6000613bc583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f51565b905092915050565b505050565b6000613c1483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613487565b905092915050565b6000600267ffffffffffffffff811115613c3957613c386150eb565b5b604051908082528060200260200182016040528015613c675781602001602082028036833780820191505090505b5090503081600081518110613c7f57613c7e61511a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d1f57600080fd5b505afa158015613d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d57919061515e565b81600181518110613d6b57613d6a61511a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613dd0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612622565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e32959493929190615284565b600060405180830381600087803b158015613e4c57600080fd5b505af1158015613e60573d6000803e3d6000fd5b505050505050565b613e93307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612622565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613ef8969594939291906152de565b6060604051808303818588803b158015613f1157600080fd5b505af1158015613f25573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f4a9190615354565b5050505050565b60008083118290613f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8f919061404d565b60405180910390fd5b5060008385613fa791906145e1565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fee578082015181840152602081019050613fd3565b83811115613ffd576000848401525b50505050565b6000601f19601f8301169050919050565b600061401f82613fb4565b6140298185613fbf565b9350614039818560208601613fd0565b61404281614003565b840191505092915050565b600060208201905081810360008301526140678184614014565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061409f82614074565b9050919050565b6140af81614094565b81146140ba57600080fd5b50565b6000813590506140cc816140a6565b92915050565b6000819050919050565b6140e5816140d2565b81146140f057600080fd5b50565b600081359050614102816140dc565b92915050565b6000806040838503121561411f5761411e61406f565b5b600061412d858286016140bd565b925050602061413e858286016140f3565b9150509250929050565b60008115159050919050565b61415d81614148565b82525050565b60006020820190506141786000830184614154565b92915050565b6000602082840312156141945761419361406f565b5b60006141a2848285016140bd565b91505092915050565b6000819050919050565b60006141d06141cb6141c684614074565b6141ab565b614074565b9050919050565b60006141e2826141b5565b9050919050565b60006141f4826141d7565b9050919050565b614204816141e9565b82525050565b600060208201905061421f60008301846141fb565b92915050565b61422e816140d2565b82525050565b60006020820190506142496000830184614225565b92915050565b6000602082840312156142655761426461406f565b5b6000614273848285016140f3565b91505092915050565b6000806000606084860312156142955761429461406f565b5b60006142a3868287016140bd565b93505060206142b4868287016140bd565b92505060406142c5868287016140f3565b9150509250925092565b600060ff82169050919050565b6142e5816142cf565b82525050565b600060208201905061430060008301846142dc565b92915050565b61430f81614094565b82525050565b600060208201905061432a6000830184614306565b92915050565b61433981614148565b811461434457600080fd5b50565b60008135905061435681614330565b92915050565b600080604083850312156143735761437261406f565b5b6000614381858286016140bd565b925050602061439285828601614347565b9150509250929050565b6000806000606084860312156143b5576143b461406f565b5b60006143c3868287016140f3565b93505060206143d4868287016140f3565b92505060406143e5868287016140f3565b9150509250925092565b6000602082840312156144055761440461406f565b5b600061441384828501614347565b91505092915050565b600080604083850312156144335761443261406f565b5b6000614441858286016140bd565b9250506020614452858286016140bd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144a357607f821691505b602082108114156144b7576144b661445c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144f3602083613fbf565b91506144fe826144bd565b602082019050919050565b60006020820190508181036000830152614522816144e6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614563826140d2565b915061456e836140d2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145a7576145a6614529565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145ec826140d2565b91506145f7836140d2565b925082614607576146066145b2565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061466e602f83613fbf565b915061467982614612565b604082019050919050565b6000602082019050818103600083015261469d81614661565b9050919050565b60006146af826140d2565b91506146ba836140d2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146ef576146ee614529565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000614730601d83613fbf565b915061473b826146fa565b602082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147c2603983613fbf565b91506147cd82614766565b604082019050919050565b600060208201905081810360008301526147f1816147b5565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614854602483613fbf565b915061485f826147f8565b604082019050919050565b6000602082019050818103600083015261488381614847565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148e6603583613fbf565b91506148f18261488a565b604082019050919050565b60006020820190508181036000830152614915816148d9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614978603483613fbf565b91506149838261491c565b604082019050919050565b600060208201905081810360008301526149a78161496b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a0a602683613fbf565b9150614a15826149ae565b604082019050919050565b60006020820190508181036000830152614a39816149fd565b9050919050565b600081905092915050565b50565b6000614a5b600083614a40565b9150614a6682614a4b565b600082019050919050565b6000614a7c82614a4e565b9150819050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614abc601b83613fbf565b9150614ac782614a86565b602082019050919050565b60006020820190508181036000830152614aeb81614aaf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b4e602483613fbf565b9150614b5982614af2565b604082019050919050565b60006020820190508181036000830152614b7d81614b41565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614be0602283613fbf565b9150614beb82614b84565b604082019050919050565b60006020820190508181036000830152614c0f81614bd3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c72602583613fbf565b9150614c7d82614c16565b604082019050919050565b60006020820190508181036000830152614ca181614c65565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d04602383613fbf565b9150614d0f82614ca8565b604082019050919050565b60006020820190508181036000830152614d3381614cf7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d70601683613fbf565b9150614d7b82614d3a565b602082019050919050565b60006020820190508181036000830152614d9f81614d63565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e28604983613fbf565b9150614e3382614da6565b606082019050919050565b60006020820190508181036000830152614e5781614e1b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614eba603583613fbf565b9150614ec582614e5e565b604082019050919050565b60006020820190508181036000830152614ee981614ead565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f26601383613fbf565b9150614f3182614ef0565b602082019050919050565b60006020820190508181036000830152614f5581614f19565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614fb8603683613fbf565b9150614fc382614f5c565b604082019050919050565b60006020820190508181036000830152614fe781614fab565b9050919050565b6000614ff9826140d2565b9150615004836140d2565b92508282101561501757615016614529565b5b828203905092915050565b60006060820190506150376000830186614225565b6150446020830185614225565b6150516040830184614225565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150b5602183613fbf565b91506150c082615059565b604082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615158816140a6565b92915050565b6000602082840312156151745761517361406f565b5b600061518284828501615149565b91505092915050565b6000819050919050565b60006151b06151ab6151a68461518b565b6141ab565b6140d2565b9050919050565b6151c081615195565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151fb81614094565b82525050565b600061520d83836151f2565b60208301905092915050565b6000602082019050919050565b6000615231826151c6565b61523b81856151d1565b9350615246836151e2565b8060005b8381101561527757815161525e8882615201565b975061526983615219565b92505060018101905061524a565b5085935050505092915050565b600060a0820190506152996000830188614225565b6152a660208301876151b7565b81810360408301526152b88186615226565b90506152c76060830185614306565b6152d46080830184614225565b9695505050505050565b600060c0820190506152f36000830189614306565b6153006020830188614225565b61530d60408301876151b7565b61531a60608301866151b7565b6153276080830185614306565b61533460a0830184614225565b979650505050505050565b60008151905061534e816140dc565b92915050565b60008060006060848603121561536d5761536c61406f565b5b600061537b8682870161533f565b935050602061538c8682870161533f565b925050604061539d8682870161533f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220652d6181eeaa7dfdbcb90b7d9bba2edd52b6fb5a48ee9a0d7021b792a4ce8ff664736f6c63430008090033
Deployed Bytecode Sourcemap
29637:15333:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7744:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9918:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31070:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29717:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8867:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37917:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30813:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30773;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35193:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10570:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8708:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11335:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29775:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30043:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38083:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30627:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30123:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9039:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22246:148;;;;;;;;;;;;;:::i;:::-;;34410:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35660:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30519:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35812:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34209:148;;;;;;;;;;;;;:::i;:::-;;21602:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30662:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36732:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7964:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37248:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30593:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30853:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30738:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12057:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9380:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37700:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31293:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30083:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37057:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36223:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35436:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30436:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29927:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34798:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30485:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9619:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29969:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34592:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30556:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22550:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36888:158;;;;;;;;;;;;;:::i;:::-;;30700:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30009:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7744:100;7798:13;7831:5;7824:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7744:100;:::o;9918:169::-;10001:4;10018:39;10027:12;:10;:12::i;:::-;10041:7;10050:6;10018:8;:39::i;:::-;10075:4;10068:11;;9918:169;;;;:::o;31070:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29717:51::-;;;:::o;8867:108::-;8928:7;8955:12;;8948:19;;8867:108;:::o;37917:157::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38024:9:::1;;;;;;;;;;;37996:38;;38013:9;37996:38;;;;;;;;;;;;38057:9;38045;;:21;;;;;;;;;;;;;;;;;;37917:157:::0;:::o;30813:33::-;;;;:::o;30773:::-;;;;:::o;35193:234::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35312:4:::1;35306;35302:1;35286:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35285:31;;;;:::i;:::-;35275:6;:41;;35267:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35412:6;35402;:17;;;;:::i;:::-;35379:20;:40;;;;35193:234:::0;:::o;10570:355::-;10710:4;10727:36;10737:6;10745:9;10756:6;10727:9;:36::i;:::-;10774:121;10783:6;10791:12;:10;:12::i;:::-;10805:89;10843:6;10805:89;;;;;;;;;;;;;;;;;:11;:19;10817:6;10805:19;;;;;;;;;;;;;;;:33;10825:12;:10;:12::i;:::-;10805:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10774:8;:121::i;:::-;10913:4;10906:11;;10570:355;;;;;:::o;8708:93::-;8766:5;8791:2;8784:9;;8708:93;:::o;11335:218::-;11423:4;11440:83;11449:12;:10;:12::i;:::-;11463:7;11472:50;11511:10;11472:11;:25;11484:12;:10;:12::i;:::-;11472:25;;;;;;;;;;;;;;;:34;11498:7;11472:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11440:8;:83::i;:::-;11541:4;11534:11;;11335:218;;;;:::o;29775:38::-;;;:::o;30043:33::-;;;;;;;;;;;;;:::o;38083:125::-;38148:4;38172:19;:28;38192:7;38172:28;;;;;;;;;;;;;;;;;;;;;;;;;38165:35;;38083:125;;;:::o;30627:28::-;;;;:::o;30123:31::-;;;;;;;;;;;;;:::o;9039:127::-;9113:7;9140:9;:18;9150:7;9140:18;;;;;;;;;;;;;;;;9133:25;;9039:127;;;:::o;22246:148::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22353:1:::1;22316:40;;22337:6;;;;;;;;;;;22316:40;;;;;;;;;;;;22384:1;22367:6;;:19;;;;;;;;;;;;;;;;;;22246:148::o:0;34410:120::-;34462:4;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34495:5:::1;34478:14;;:22;;;;;;;;;;;;;;;;;;34518:4;34511:11;;34410:120:::0;:::o;35660:144::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35792:4:::1;35750:31;:39;35782:6;35750:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35660:144:::0;;:::o;30519:30::-;;;;:::o;35812:403::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35974:7:::1;35962:9;:19;;;;36010:13;35992:15;:31;;;;36052:13;36034:15;:31;;;;36121:15;;36103;;36091:9;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;36076:12;:60;;;;36171:2;36155:12;;:18;;36147:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35812:403:::0;;;:::o;34209:148::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34280:4:::1;34264:13;;:20;;;;;;;;;;;;;;;;;;34309:4;34295:11;;:18;;;;;;;;;;;;;;;;;;34337:12;34324:10;:25;;;;34209:148::o:0;21602:79::-;21640:7;21667:6;;;;;;;;;;;21660:13;;21602:79;:::o;30662:31::-;;;;:::o;36732:101::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36818:7:::1;36804:11;;:21;;;;;;;;;;;;;;;;;;36732:101:::0;:::o;7964:104::-;8020:13;8053:7;8046:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7964:104;:::o;37248:245::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37355:13:::1;37347:21;;:4;:21;;;;37339:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37444:41;37473:4;37479:5;37444:28;:41::i;:::-;37248:245:::0;;:::o;30593:24::-;;;;:::o;30853:27::-;;;;:::o;30738:25::-;;;;:::o;12057:269::-;12150:4;12167:129;12176:12;:10;:12::i;:::-;12190:7;12199:96;12238:15;12199:96;;;;;;;;;;;;;;;;;:11;:25;12211:12;:10;:12::i;:::-;12199:25;;;;;;;;;;;;;;;:34;12225:7;12199:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12167:8;:129::i;:::-;12314:4;12307:11;;12057:269;;;;:::o;9380:175::-;9466:4;9483:42;9493:12;:10;:12::i;:::-;9507:9;9518:6;9483:9;:42::i;:::-;9543:4;9536:11;;9380:175;;;;:::o;37700:208::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37837:15:::1;;;;;;;;;;;37794:59;;37817:18;37794:59;;;;;;;;;;;;37882:18;37864:15;;:36;;;;;;;;;;;;;;;;;;37700:208:::0;:::o;31293:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30083:33::-;;;;;;;;;;;;;:::o;37057:182::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37173:8:::1;37142:19;:28;37162:7;37142:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37213:7;37197:34;;;37222:8;37197:34;;;;;;:::i;:::-;;;;;;;;37057:182:::0;;:::o;36223:412::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36387:7:::1;36374:10;:20;;;;36424:13;36405:16;:32;;;;36467:13;36448:16;:32;;;;36539:16;;36520;;36507:10;;:29;;;;:::i;:::-;:48;;;;:::i;:::-;36491:13;:64;;;;36591:2;36574:13;;:19;;36566:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36223:412:::0;;;:::o;35436:215::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35558:4:::1;35552;35548:1;35532:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35531:31;;;;:::i;:::-;35521:6;:41;;35513:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35636:6;35626;:17;;;;:::i;:::-;35614:9;:29;;;;35436:215:::0;:::o;30436:39::-;;;;;;;;;;;;;:::o;29927:35::-;;;;:::o;34798:386::-;34879:4;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34936:6:::1;34932:1;34916:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34903:9;:39;;34895:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35052:4;35048:1;35032:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35019:9;:37;;35011:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35145:9;35124:18;:30;;;;35172:4;35165:11;;34798:386:::0;;;:::o;30485:27::-;;;;:::o;9619:151::-;9708:7;9735:11;:18;9747:5;9735:18;;;;;;;;;;;;;;;:27;9754:7;9735:27;;;;;;;;;;;;;;;;9728:34;;9619:151;;;;:::o;29969:33::-;;;;:::o;34592:134::-;34652:4;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34691:5:::1;34668:20;;:28;;;;;;;;;;;;;;;;;;34714:4;34707:11;;34592:134:::0;:::o;30556:30::-;;;;:::o;22550:244::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22659:1:::1;22639:22;;:8;:22;;;;22631:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22749:8;22720:38;;22741:6;;;;;;;;;;;22720:38;;;;;;;;;;;;22778:8;22769:6;;:17;;;;;;;;;;;;;;;;;;22550:244:::0;:::o;36888:158::-;21825:12;:10;:12::i;:::-;21815:22;;:6;;;;;;;;;;;:22;;;21807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36946:12:::1;36991:7;:5;:7::i;:::-;36983:21;;37012;36983:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36969:69;;;;;36935:111;36888:158::o:0;30700:31::-;;;;:::o;30009:24::-;;;;:::o;16634:182::-;16692:7;16712:9;16728:1;16724;:5;;;;:::i;:::-;16712:17;;16753:1;16748;:6;;16740:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16807:1;16800:8;;;16634:182;;;;:::o;438:98::-;491:7;518:10;511:17;;438:98;:::o;15253:381::-;15406:1;15389:19;;:5;:19;;;;15381:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15487:1;15468:21;;:7;:21;;;;15460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15572:6;15542:11;:18;15554:5;15542:18;;;;;;;;;;;;;;;:27;15561:7;15542:27;;;;;;;;;;;;;;;:36;;;;15610:7;15594:32;;15603:5;15594:32;;;15619:6;15594:32;;;;;;:::i;:::-;;;;;;;;15253:381;;;:::o;38217:4036::-;38365:1;38349:18;;:4;:18;;;;38341:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38442:1;38428:16;;:2;:16;;;;38420:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38509:1;38499:6;:11;38496:92;;;38527:28;38543:4;38549:2;38553:1;38527:15;:28::i;:::-;38570:7;;38496:92;38604:14;;;;;;;;;;;38601:1811;;;38664:7;:5;:7::i;:::-;38656:15;;:4;:15;;;;:49;;;;;38698:7;:5;:7::i;:::-;38692:13;;:2;:13;;;;38656:49;:86;;;;;38740:1;38726:16;;:2;:16;;;;38656:86;:128;;;;;38777:6;38763:21;;:2;:21;;;;38656:128;:158;;;;;38806:8;;;;;;;;;;;38805:9;38656:158;38634:1767;;;38852:13;;;;;;;;;;;38848:148;;38897:19;:25;38917:4;38897:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38926:19;:23;38946:2;38926:23;;;;;;;;;;;;;;;;;;;;;;;;;38897:52;38889:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38848:148;39155:20;;;;;;;;;;;39151:423;;;39209:7;:5;:7::i;:::-;39203:13;;:2;:13;;;;:47;;;;;39234:15;39220:30;;:2;:30;;;;39203:47;:79;;;;;39268:13;39254:28;;:2;:28;;;;39203:79;39199:356;;;39360:12;39318:28;:39;39347:9;39318:39;;;;;;;;;;;;;;;;:54;39310:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39519:12;39477:28;:39;39506:9;39477:39;;;;;;;;;;;;;;;:54;;;;39199:356;39151:423;39627:25;:31;39653:4;39627:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39663:31;:35;39695:2;39663:35;;;;;;;;;;;;;;;;;;;;;;;;;39662:36;39627:71;39623:763;;;39745:20;;39735:6;:30;;39727:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39884:9;;39867:13;39877:2;39867:9;:13::i;:::-;39858:6;:22;;;;:::i;:::-;:35;;39850:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39623:763;;;39996:25;:29;40022:2;39996:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40030:31;:37;40062:4;40030:37;;;;;;;;;;;;;;;;;;;;;;;;;40029:38;39996:71;39992:394;;;40114:20;;40104:6;:30;;40096:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39992:394;;;40240:31;:35;40272:2;40240:35;;;;;;;;;;;;;;;;;;;;;;;;;40236:150;;40333:9;;40316:13;40326:2;40316:9;:13::i;:::-;40307:6;:22;;;;:::i;:::-;:35;;40299:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40236:150;39992:394;39623:763;38634:1767;38601:1811;40425:28;40456:24;40474:4;40456:9;:24::i;:::-;40425:55;;40494:12;40533:18;;40509:20;:42;;40494:57;;40583:7;:35;;;;;40607:11;;;;;;;;;;;40583:35;:61;;;;;40636:8;;;;;;;;;;;40635:9;40583:61;:110;;;;;40662:25;:31;40688:4;40662:31;;;;;;;;;;;;;;;;;;;;;;;;;40661:32;40583:110;:153;;;;;40711:19;:25;40731:4;40711:25;;;;;;;;;;;;;;;;;;;;;;;;;40710:26;40583:153;:194;;;;;40754:19;:23;40774:2;40754:23;;;;;;;;;;;;;;;;;;;;;;;;;40753:24;40583:194;40565:328;;;40815:4;40804:8;;:15;;;;;;;;;;;;;;;;;;40837:10;:8;:10::i;:::-;40876:5;40865:8;;:16;;;;;;;;;;;;;;;;;;40565:328;40906:12;40922:8;;;;;;;;;;;40921:9;40906:24;;41032:19;:25;41052:4;41032:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41061:19;:23;41081:2;41061:23;;;;;;;;;;;;;;;;;;;;;;;;;41032:52;41029:99;;;41111:5;41101:15;;41029:99;41141:12;41245:7;41242:957;;;41296:25;:29;41322:2;41296:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41345:1;41329:13;;:17;41296:50;41292:754;;;41373:34;41403:3;41373:25;41384:13;;41373:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41366:41;;41474:13;;41455:16;;41448:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41426:18;;:61;;;;;;;:::i;:::-;;;;;;;;41542:13;;41529:10;;41522:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;41506:12;;:49;;;;;;;:::i;:::-;;;;;;;;41622:13;;41603:16;;41596:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41574:18;;:61;;;;;;;:::i;:::-;;;;;;;;41292:754;;;41696:25;:31;41722:4;41696:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41746:1;41731:12;;:16;41696:51;41693:353;;;41775:33;41804:3;41775:24;41786:12;;41775:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41768:40;;41874:12;;41856:15;;41849:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41827:18;;:59;;;;;;;:::i;:::-;;;;;;;;41940:12;;41928:9;;41921:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;41905:12;;:47;;;;;;;:::i;:::-;;;;;;;;42018:12;;42000:15;;41993:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41971:18;;:59;;;;;;;:::i;:::-;;;;;;;;41693:353;41292:754;42073:1;42066:4;:8;42063:93;;;42098:42;42114:4;42128;42135;42098:15;:42::i;:::-;42063:93;42183:4;42173:14;;;;;:::i;:::-;;;41242:957;42212:33;42228:4;42234:2;42238:6;42212:15;:33::i;:::-;38330:3923;;;;38217:4036;;;;:::o;17540:193::-;17626:7;17659:1;17654;:6;;17662:12;17646:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17686:9;17702:1;17698;:5;;;;:::i;:::-;17686:17;;17724:1;17717:8;;;17540:193;;;;;:::o;37502:189::-;37619:5;37585:25;:31;37611:4;37585:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37677:5;37643:40;;37671:4;37643:40;;;;;;;;;;;;37502:189;;:::o;12817:575::-;12975:1;12957:20;;:6;:20;;;;12949:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13059:1;13038:23;;:9;:23;;;;13030:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13115:47;13136:6;13144:9;13155:6;13115:20;:47::i;:::-;13196:71;13218:6;13196:71;;;;;;;;;;;;;;;;;:9;:17;13206:6;13196:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13176:9;:17;13186:6;13176:17;;;;;;;;;;;;;;;:91;;;;13301:32;13326:6;13301:9;:20;13311:9;13301:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13278:9;:20;13288:9;13278:20;;;;;;;;;;;;;;;:55;;;;13366:9;13349:35;;13358:6;13349:35;;;13377:6;13349:35;;;;;;:::i;:::-;;;;;;;;12817:575;;;:::o;43397:1568::-;43436:23;43462:24;43480:4;43462:9;:24::i;:::-;43436:50;;43497:25;43567:12;;43546:18;;43525;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;43497:82;;43590:12;43638:1;43619:15;:20;:46;;;;43664:1;43643:17;:22;43619:46;43616:60;;;43668:7;;;;;43616:60;43731:2;43710:18;;:23;;;;:::i;:::-;43692:15;:41;43689:111;;;43786:2;43765:18;;:23;;;;:::i;:::-;43747:41;;43689:111;43862:23;43947:1;43927:17;43906:18;;43888:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43862:86;;43959:26;43988:36;44008:15;43988;:19;;:36;;;;:::i;:::-;43959:65;;44038:25;44066:21;44038:49;;44101:36;44118:18;44101:16;:36::i;:::-;44152:18;44173:44;44199:17;44173:21;:25;;:44;;;;:::i;:::-;44152:65;;44231:23;44257:57;44296:17;44257:34;44272:18;;44257:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44231:83;;44325:17;44345:51;44378:17;44345:28;44360:12;;44345:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44325:71;;44407:23;44464:9;44446:15;44433:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44407:66;;44511:1;44490:18;:22;;;;44544:1;44523:18;:22;;;;44571:1;44556:12;:16;;;;44607:9;;;;;;;;;;;44599:23;;44630:9;44599:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44586:58;;;;;44679:1;44661:15;:19;:42;;;;;44702:1;44684:15;:19;44661:42;44658:210;;;44719:46;44732:15;44749;44719:12;:46::i;:::-;44785:71;44800:18;44820:15;44837:18;;44785:71;;;;;;;;:::i;:::-;;;;;;;;44658:210;44902:15;;;;;;;;;;;44894:29;;44931:21;44894:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44881:76;;;;;43425:1540;;;;;;;;;;43397:1568;:::o;17993:473::-;18051:7;18301:1;18296;:6;18292:47;;;18326:1;18319:8;;;;18292:47;18352:9;18368:1;18364;:5;;;;:::i;:::-;18352:17;;18397:1;18392;18388;:5;;;;:::i;:::-;:10;18380:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18457:1;18450:8;;;17993:473;;;;;:::o;18943:132::-;19001:7;19028:39;19032:1;19035;19028:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19021:46;;18943:132;;;;:::o;16238:125::-;;;;:::o;17100:136::-;17158:7;17185:43;17189:1;17192;17185:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17178:50;;17100:136;;;;:::o;42262:597::-;42391:21;42429:1;42415:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42391:40;;42460:4;42442;42447:1;42442:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42486:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42476:4;42481:1;42476:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42522:62;42539:4;42554:15;42572:11;42522:8;:62::i;:::-;42624:15;:66;;;42705:11;42731:1;42775:4;42802;42822:15;42624:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42317:542;42262:597;:::o;42868:520::-;43016:62;43033:4;43048:15;43066:11;43016:8;:62::i;:::-;43122:15;:31;;;43161:9;43194:4;43214:11;43240:1;43283;43334:4;43354:15;43122:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42868:520;;:::o;19572:279::-;19658:7;19690:1;19686;:5;19693:12;19678:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19717:9;19733:1;19729;:5;;;;:::i;:::-;19717:17;;19842:1;19835:8;;;19572:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:305::-;12561:3;12580:20;12598:1;12580:20;:::i;:::-;12575:25;;12614:20;12632:1;12614:20;:::i;:::-;12609:25;;12768:1;12700:66;12696:74;12693:1;12690:81;12687:107;;;12774:18;;:::i;:::-;12687:107;12818:1;12815;12811:9;12804:16;;12521:305;;;;:::o;12832:179::-;12972:31;12968:1;12960:6;12956:14;12949:55;12832:179;:::o;13017:366::-;13159:3;13180:67;13244:2;13239:3;13180:67;:::i;:::-;13173:74;;13256:93;13345:3;13256:93;:::i;:::-;13374:2;13369:3;13365:12;13358:19;;13017:366;;;:::o;13389:419::-;13555:4;13593:2;13582:9;13578:18;13570:26;;13642:9;13636:4;13632:20;13628:1;13617:9;13613:17;13606:47;13670:131;13796:4;13670:131;:::i;:::-;13662:139;;13389:419;;;:::o;13814:244::-;13954:34;13950:1;13942:6;13938:14;13931:58;14023:27;14018:2;14010:6;14006:15;13999:52;13814:244;:::o;14064:366::-;14206:3;14227:67;14291:2;14286:3;14227:67;:::i;:::-;14220:74;;14303:93;14392:3;14303:93;:::i;:::-;14421:2;14416:3;14412:12;14405:19;;14064:366;;;:::o;14436:419::-;14602:4;14640:2;14629:9;14625:18;14617:26;;14689:9;14683:4;14679:20;14675:1;14664:9;14660:17;14653:47;14717:131;14843:4;14717:131;:::i;:::-;14709:139;;14436:419;;;:::o;14861:223::-;15001:34;14997:1;14989:6;14985:14;14978:58;15070:6;15065:2;15057:6;15053:15;15046:31;14861:223;:::o;15090:366::-;15232:3;15253:67;15317:2;15312:3;15253:67;:::i;:::-;15246:74;;15329:93;15418:3;15329:93;:::i;:::-;15447:2;15442:3;15438:12;15431:19;;15090:366;;;:::o;15462:419::-;15628:4;15666:2;15655:9;15651:18;15643:26;;15715:9;15709:4;15705:20;15701:1;15690:9;15686:17;15679:47;15743:131;15869:4;15743:131;:::i;:::-;15735:139;;15462:419;;;:::o;15887:240::-;16027:34;16023:1;16015:6;16011:14;16004:58;16096:23;16091:2;16083:6;16079:15;16072:48;15887:240;:::o;16133:366::-;16275:3;16296:67;16360:2;16355:3;16296:67;:::i;:::-;16289:74;;16372:93;16461:3;16372:93;:::i;:::-;16490:2;16485:3;16481:12;16474:19;;16133:366;;;:::o;16505:419::-;16671:4;16709:2;16698:9;16694:18;16686:26;;16758:9;16752:4;16748:20;16744:1;16733:9;16729:17;16722:47;16786:131;16912:4;16786:131;:::i;:::-;16778:139;;16505:419;;;:::o;16930:239::-;17070:34;17066:1;17058:6;17054:14;17047:58;17139:22;17134:2;17126:6;17122:15;17115:47;16930:239;:::o;17175:366::-;17317:3;17338:67;17402:2;17397:3;17338:67;:::i;:::-;17331:74;;17414:93;17503:3;17414:93;:::i;:::-;17532:2;17527:3;17523:12;17516:19;;17175:366;;;:::o;17547:419::-;17713:4;17751:2;17740:9;17736:18;17728:26;;17800:9;17794:4;17790:20;17786:1;17775:9;17771:17;17764:47;17828:131;17954:4;17828:131;:::i;:::-;17820:139;;17547:419;;;:::o;17972:225::-;18112:34;18108:1;18100:6;18096:14;18089:58;18181:8;18176:2;18168:6;18164:15;18157:33;17972:225;:::o;18203:366::-;18345:3;18366:67;18430:2;18425:3;18366:67;:::i;:::-;18359:74;;18442:93;18531:3;18442:93;:::i;:::-;18560:2;18555:3;18551:12;18544:19;;18203:366;;;:::o;18575:419::-;18741:4;18779:2;18768:9;18764:18;18756:26;;18828:9;18822:4;18818:20;18814:1;18803:9;18799:17;18792:47;18856:131;18982:4;18856:131;:::i;:::-;18848:139;;18575:419;;;:::o;19000:147::-;19101:11;19138:3;19123:18;;19000:147;;;;:::o;19153:114::-;;:::o;19273:398::-;19432:3;19453:83;19534:1;19529:3;19453:83;:::i;:::-;19446:90;;19545:93;19634:3;19545:93;:::i;:::-;19663:1;19658:3;19654:11;19647:18;;19273:398;;;:::o;19677:379::-;19861:3;19883:147;20026:3;19883:147;:::i;:::-;19876:154;;20047:3;20040:10;;19677:379;;;:::o;20062:177::-;20202:29;20198:1;20190:6;20186:14;20179:53;20062:177;:::o;20245:366::-;20387:3;20408:67;20472:2;20467:3;20408:67;:::i;:::-;20401:74;;20484:93;20573:3;20484:93;:::i;:::-;20602:2;20597:3;20593:12;20586:19;;20245:366;;;:::o;20617:419::-;20783:4;20821:2;20810:9;20806:18;20798:26;;20870:9;20864:4;20860:20;20856:1;20845:9;20841:17;20834:47;20898:131;21024:4;20898:131;:::i;:::-;20890:139;;20617:419;;;:::o;21042:223::-;21182:34;21178:1;21170:6;21166:14;21159:58;21251:6;21246:2;21238:6;21234:15;21227:31;21042:223;:::o;21271:366::-;21413:3;21434:67;21498:2;21493:3;21434:67;:::i;:::-;21427:74;;21510:93;21599:3;21510:93;:::i;:::-;21628:2;21623:3;21619:12;21612:19;;21271:366;;;:::o;21643:419::-;21809:4;21847:2;21836:9;21832:18;21824:26;;21896:9;21890:4;21886:20;21882:1;21871:9;21867:17;21860:47;21924:131;22050:4;21924:131;:::i;:::-;21916:139;;21643:419;;;:::o;22068:221::-;22208:34;22204:1;22196:6;22192:14;22185:58;22277:4;22272:2;22264:6;22260:15;22253:29;22068:221;:::o;22295:366::-;22437:3;22458:67;22522:2;22517:3;22458:67;:::i;:::-;22451:74;;22534:93;22623:3;22534:93;:::i;:::-;22652:2;22647:3;22643:12;22636:19;;22295:366;;;:::o;22667:419::-;22833:4;22871:2;22860:9;22856:18;22848:26;;22920:9;22914:4;22910:20;22906:1;22895:9;22891:17;22884:47;22948:131;23074:4;22948:131;:::i;:::-;22940:139;;22667:419;;;:::o;23092:224::-;23232:34;23228:1;23220:6;23216:14;23209:58;23301:7;23296:2;23288:6;23284:15;23277:32;23092:224;:::o;23322:366::-;23464:3;23485:67;23549:2;23544:3;23485:67;:::i;:::-;23478:74;;23561:93;23650:3;23561:93;:::i;:::-;23679:2;23674:3;23670:12;23663:19;;23322:366;;;:::o;23694:419::-;23860:4;23898:2;23887:9;23883:18;23875:26;;23947:9;23941:4;23937:20;23933:1;23922:9;23918:17;23911:47;23975:131;24101:4;23975:131;:::i;:::-;23967:139;;23694:419;;;:::o;24119:222::-;24259:34;24255:1;24247:6;24243:14;24236:58;24328:5;24323:2;24315:6;24311:15;24304:30;24119:222;:::o;24347:366::-;24489:3;24510:67;24574:2;24569:3;24510:67;:::i;:::-;24503:74;;24586:93;24675:3;24586:93;:::i;:::-;24704:2;24699:3;24695:12;24688:19;;24347:366;;;:::o;24719:419::-;24885:4;24923:2;24912:9;24908:18;24900:26;;24972:9;24966:4;24962:20;24958:1;24947:9;24943:17;24936:47;25000:131;25126:4;25000:131;:::i;:::-;24992:139;;24719:419;;;:::o;25144:172::-;25284:24;25280:1;25272:6;25268:14;25261:48;25144:172;:::o;25322:366::-;25464:3;25485:67;25549:2;25544:3;25485:67;:::i;:::-;25478:74;;25561:93;25650:3;25561:93;:::i;:::-;25679:2;25674:3;25670:12;25663:19;;25322:366;;;:::o;25694:419::-;25860:4;25898:2;25887:9;25883:18;25875:26;;25947:9;25941:4;25937:20;25933:1;25922:9;25918:17;25911:47;25975:131;26101:4;25975:131;:::i;:::-;25967:139;;25694:419;;;:::o;26119:297::-;26259:34;26255:1;26247:6;26243:14;26236:58;26328:34;26323:2;26315:6;26311:15;26304:59;26397:11;26392:2;26384:6;26380:15;26373:36;26119:297;:::o;26422:366::-;26564:3;26585:67;26649:2;26644:3;26585:67;:::i;:::-;26578:74;;26661:93;26750:3;26661:93;:::i;:::-;26779:2;26774:3;26770:12;26763:19;;26422:366;;;:::o;26794:419::-;26960:4;26998:2;26987:9;26983:18;26975:26;;27047:9;27041:4;27037:20;27033:1;27022:9;27018:17;27011:47;27075:131;27201:4;27075:131;:::i;:::-;27067:139;;26794:419;;;:::o;27219:240::-;27359:34;27355:1;27347:6;27343:14;27336:58;27428:23;27423:2;27415:6;27411:15;27404:48;27219:240;:::o;27465:366::-;27607:3;27628:67;27692:2;27687:3;27628:67;:::i;:::-;27621:74;;27704:93;27793:3;27704:93;:::i;:::-;27822:2;27817:3;27813:12;27806:19;;27465:366;;;:::o;27837:419::-;28003:4;28041:2;28030:9;28026:18;28018:26;;28090:9;28084:4;28080:20;28076:1;28065:9;28061:17;28054:47;28118:131;28244:4;28118:131;:::i;:::-;28110:139;;27837:419;;;:::o;28262:169::-;28402:21;28398:1;28390:6;28386:14;28379:45;28262:169;:::o;28437:366::-;28579:3;28600:67;28664:2;28659:3;28600:67;:::i;:::-;28593:74;;28676:93;28765:3;28676:93;:::i;:::-;28794:2;28789:3;28785:12;28778:19;;28437:366;;;:::o;28809:419::-;28975:4;29013:2;29002:9;28998:18;28990:26;;29062:9;29056:4;29052:20;29048:1;29037:9;29033:17;29026:47;29090:131;29216:4;29090:131;:::i;:::-;29082:139;;28809:419;;;:::o;29234:241::-;29374:34;29370:1;29362:6;29358:14;29351:58;29443:24;29438:2;29430:6;29426:15;29419:49;29234:241;:::o;29481:366::-;29623:3;29644:67;29708:2;29703:3;29644:67;:::i;:::-;29637:74;;29720:93;29809:3;29720:93;:::i;:::-;29838:2;29833:3;29829:12;29822:19;;29481:366;;;:::o;29853:419::-;30019:4;30057:2;30046:9;30042:18;30034:26;;30106:9;30100:4;30096:20;30092:1;30081:9;30077:17;30070:47;30134:131;30260:4;30134:131;:::i;:::-;30126:139;;29853:419;;;:::o;30278:191::-;30318:4;30338:20;30356:1;30338:20;:::i;:::-;30333:25;;30372:20;30390:1;30372:20;:::i;:::-;30367:25;;30411:1;30408;30405:8;30402:34;;;30416:18;;:::i;:::-;30402:34;30461:1;30458;30454:9;30446:17;;30278:191;;;;:::o;30475:442::-;30624:4;30662:2;30651:9;30647:18;30639:26;;30675:71;30743:1;30732:9;30728:17;30719:6;30675:71;:::i;:::-;30756:72;30824:2;30813:9;30809:18;30800:6;30756:72;:::i;:::-;30838;30906:2;30895:9;30891:18;30882:6;30838:72;:::i;:::-;30475:442;;;;;;:::o;30923:220::-;31063:34;31059:1;31051:6;31047:14;31040:58;31132:3;31127:2;31119:6;31115:15;31108:28;30923:220;:::o;31149:366::-;31291:3;31312:67;31376:2;31371:3;31312:67;:::i;:::-;31305:74;;31388:93;31477:3;31388:93;:::i;:::-;31506:2;31501:3;31497:12;31490:19;;31149:366;;;:::o;31521:419::-;31687:4;31725:2;31714:9;31710:18;31702:26;;31774:9;31768:4;31764:20;31760:1;31749:9;31745:17;31738:47;31802:131;31928:4;31802:131;:::i;:::-;31794:139;;31521:419;;;:::o;31946:180::-;31994:77;31991:1;31984:88;32091:4;32088:1;32081:15;32115:4;32112:1;32105:15;32132:180;32180:77;32177:1;32170:88;32277:4;32274:1;32267:15;32301:4;32298:1;32291:15;32318:143;32375:5;32406:6;32400:13;32391:22;;32422:33;32449:5;32422:33;:::i;:::-;32318:143;;;;:::o;32467:351::-;32537:6;32586:2;32574:9;32565:7;32561:23;32557:32;32554:119;;;32592:79;;:::i;:::-;32554:119;32712:1;32737:64;32793:7;32784:6;32773:9;32769:22;32737:64;:::i;:::-;32727:74;;32683:128;32467:351;;;;:::o;32824:85::-;32869:7;32898:5;32887:16;;32824:85;;;:::o;32915:158::-;32973:9;33006:61;33024:42;33033:32;33059:5;33033:32;:::i;:::-;33024:42;:::i;:::-;33006:61;:::i;:::-;32993:74;;32915:158;;;:::o;33079:147::-;33174:45;33213:5;33174:45;:::i;:::-;33169:3;33162:58;33079:147;;:::o;33232:114::-;33299:6;33333:5;33327:12;33317:22;;33232:114;;;:::o;33352:184::-;33451:11;33485:6;33480:3;33473:19;33525:4;33520:3;33516:14;33501:29;;33352:184;;;;:::o;33542:132::-;33609:4;33632:3;33624:11;;33662:4;33657:3;33653:14;33645:22;;33542:132;;;:::o;33680:108::-;33757:24;33775:5;33757:24;:::i;:::-;33752:3;33745:37;33680:108;;:::o;33794:179::-;33863:10;33884:46;33926:3;33918:6;33884:46;:::i;:::-;33962:4;33957:3;33953:14;33939:28;;33794:179;;;;:::o;33979:113::-;34049:4;34081;34076:3;34072:14;34064:22;;33979:113;;;:::o;34128:732::-;34247:3;34276:54;34324:5;34276:54;:::i;:::-;34346:86;34425:6;34420:3;34346:86;:::i;:::-;34339:93;;34456:56;34506:5;34456:56;:::i;:::-;34535:7;34566:1;34551:284;34576:6;34573:1;34570:13;34551:284;;;34652:6;34646:13;34679:63;34738:3;34723:13;34679:63;:::i;:::-;34672:70;;34765:60;34818:6;34765:60;:::i;:::-;34755:70;;34611:224;34598:1;34595;34591:9;34586:14;;34551:284;;;34555:14;34851:3;34844:10;;34252:608;;;34128:732;;;;:::o;34866:831::-;35129:4;35167:3;35156:9;35152:19;35144:27;;35181:71;35249:1;35238:9;35234:17;35225:6;35181:71;:::i;:::-;35262:80;35338:2;35327:9;35323:18;35314:6;35262:80;:::i;:::-;35389:9;35383:4;35379:20;35374:2;35363:9;35359:18;35352:48;35417:108;35520:4;35511:6;35417:108;:::i;:::-;35409:116;;35535:72;35603:2;35592:9;35588:18;35579:6;35535:72;:::i;:::-;35617:73;35685:3;35674:9;35670:19;35661:6;35617:73;:::i;:::-;34866:831;;;;;;;;:::o;35703:807::-;35952:4;35990:3;35979:9;35975:19;35967:27;;36004:71;36072:1;36061:9;36057:17;36048:6;36004:71;:::i;:::-;36085:72;36153:2;36142:9;36138:18;36129:6;36085:72;:::i;:::-;36167:80;36243:2;36232:9;36228:18;36219:6;36167:80;:::i;:::-;36257;36333:2;36322:9;36318:18;36309:6;36257:80;:::i;:::-;36347:73;36415:3;36404:9;36400:19;36391:6;36347:73;:::i;:::-;36430;36498:3;36487:9;36483:19;36474:6;36430:73;:::i;:::-;35703:807;;;;;;;;;:::o;36516:143::-;36573:5;36604:6;36598:13;36589:22;;36620:33;36647:5;36620:33;:::i;:::-;36516:143;;;;:::o;36665:663::-;36753:6;36761;36769;36818:2;36806:9;36797:7;36793:23;36789:32;36786:119;;;36824:79;;:::i;:::-;36786:119;36944:1;36969:64;37025:7;37016:6;37005:9;37001:22;36969:64;:::i;:::-;36959:74;;36915:128;37082:2;37108:64;37164:7;37155:6;37144:9;37140:22;37108:64;:::i;:::-;37098:74;;37053:129;37221:2;37247:64;37303:7;37294:6;37283:9;37279:22;37247:64;:::i;:::-;37237:74;;37192:129;36665:663;;;;;:::o
Swarm Source
ipfs://652d6181eeaa7dfdbcb90b7d9bba2edd52b6fb5a48ee9a0d7021b792a4ce8ff6
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.