Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
99,045,936,254.294547830544140696 INKONGNITO
Holders
157
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
445,491,090 INKONGNITOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
INKONGNITO
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-24 */ /* INKONGNITO Kongs have one thing in common: their desire to collect and consume bananas. https://www.inkongnito.com/ https://twitter.com/inkongnitotoken https://t.me/InkongnitoToken */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract 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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity >=0.6.2; 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); } pragma solidity >=0.6.2; 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; } pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } pragma solidity >=0.5.0; 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; } pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, 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); } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ 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); } // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { 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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); 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) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + 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) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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 += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(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); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(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 Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - 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 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /* */ contract INKONGNITO is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; mapping (address => bool) private _isBlacklisted; bool private _swapping; address private feeWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public totalFees; uint256 private _marketingFee; uint256 private _liquidityFee; uint256 private _devFee; uint256 private _tokensForMarketing; uint256 private _tokensForLiquidity; uint256 private _tokensForDev; uint256 private _burnFee; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) private _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) private automatedMarketMakerPairs; event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event feeWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity); constructor() ERC20("Inkongnito", "INKONGNITO") { 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 marketingFee = 6; uint256 liquidityFee = 1; uint256 devFee = 3; uint256 burnFee = 0; uint256 totalSupply = 1e11 * 1e18; maxTransactionAmount = totalSupply * 5 / 1000; maxWallet = totalSupply * 1 / 100; swapTokensAtAmount = totalSupply * 15 / 10000; _marketingFee = marketingFee; _liquidityFee = liquidityFee; _devFee = devFee; totalFees = _marketingFee + _liquidityFee + _devFee; _burnFee = burnFee; feeWallet = address(0x730F050B8EA8124cF547cd0148A99C1232E5C548); // set as fee 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); } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; } // 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 * 1e18; } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * 1e18; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateFees(uint256 marketingFee, uint256 liquidityFee, uint256 devFee) external onlyOwner { _marketingFee = marketingFee; _liquidityFee = liquidityFee; _devFee = devFee; totalFees = _marketingFee + _liquidityFee + _devFee; require(totalFees <= 15, "Must keep fees at 10% or less"); } 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 updateFeeWallet(address newWallet) external onlyOwner { emit feeWalletUpdated(newWallet, feeWallet); feeWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function setBlacklisted(address[] memory blacklisted_) public onlyOwner { for (uint i = 0; i < blacklisted_.length; i++) { if (blacklisted_[i] != uniswapV2Pair && blacklisted_[i] != address(uniswapV2Router)) { _isBlacklisted[blacklisted_[i]] = true; } } } function delBlacklisted(address[] memory blacklisted_) public onlyOwner { for (uint i = 0; i < blacklisted_.length; i++) { _isBlacklisted[blacklisted_[i]] = false; } } function isSniper(address addr) public view returns (bool) { return _isBlacklisted[addr]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_isBlacklisted[from], "Your address has been marked as a sniper, you are unable to transfer or swap."); if (amount == 0) { super._transfer(from, to, 0); return; } // Burn baby burn! 🔥 if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { uint256 burnAmount = amount.div(100); _burn(from, burnAmount); amount -= burnAmount; } 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 && !_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) { fees = amount.mul(totalFees).div(100); _tokensForLiquidity += fees * _liquidityFee / totalFees; _tokensForDev += fees * _devFee / totalFees; _tokensForMarketing += fees * _marketingFee / totalFees; 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 owner(), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + _tokensForDev; if (contractBalance == 0 || totalTokensToSwap == 0) return; if (contractBalance > swapTokensAtAmount) { contractBalance = swapTokensAtAmount; } // 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; payable(feeWallet).transfer(ethForMarketing.add(ethForDev)); if (liquidityTokens > 0 && ethForLiquidity > 0) { _addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity); } } function forceSwap() external onlyOwner { _swapTokensForEth(address(this).balance); payable(feeWallet).transfer(address(this).balance); } function forceSend() external onlyOwner { payable(feeWallet).transfer(address(this).balance); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","type":"event"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"}],"name":"delBlacklisted","outputs":[],"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":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","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":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSniper","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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","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":"totalFees","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":"to","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":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"updateFees","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":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600a81526020017f496e6b6f6e676e69746f000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f494e4b4f4e474e49544f000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000ae9565b5080600490805190602001906200010092919062000ae9565b5050506200012362000117620005a960201b60201c565b620005b160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200014f8160016200067760201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001d757600080fd5b505afa158015620001ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000212919062000bb0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027557600080fd5b505afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b0919062000bb0565b6040518363ffffffff1660e01b8152600401620002cf92919062000c63565b602060405180830381600087803b158015620002ea57600080fd5b505af1158015620002ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000325919062000bb0565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200039a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200067760201b60201c565b620003cf600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200076160201b60201c565b6000600690506000600190506000600390506000806c01431e0fae6d7217caa000000090506103e860058262000406919062000db4565b62000412919062000d7c565b600a81905550606460018262000429919062000db4565b62000435919062000d7c565b600c81905550612710600f826200044d919062000db4565b62000459919062000d7c565b600b8190555084601181905550836012819055508260138190555060135460125460115462000489919062000d1f565b62000495919062000d1f565b6010819055508160178190555073730f050b8ea8124cf547cd0148a99c1232e5c548600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005196200050b6200080260201b60201c565b60016200082c60201b60201c565b6200052c3060016200082c60201b60201c565b6200054161dead60016200082c60201b60201c565b62000563620005556200080260201b60201c565b60016200067760201b60201c565b620005763060016200067760201b60201c565b6200058b61dead60016200067760201b60201c565b6200059d33826200096660201b60201c565b50505050505062000f93565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000687620005a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006ad6200080260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000706576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fd9062000cad565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200083c620005a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008626200080260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b29062000cad565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200095a919062000c90565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d09062000ccf565b60405180910390fd5b620009ed6000838362000adf60201b60201c565b806002600082825462000a01919062000d1f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a58919062000d1f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000abf919062000cf1565b60405180910390a362000adb6000838362000ae460201b60201c565b5050565b505050565b505050565b82805462000af79062000e5f565b90600052602060002090601f01602090048101928262000b1b576000855562000b67565b82601f1062000b3657805160ff191683800117855562000b67565b8280016001018555821562000b67579182015b8281111562000b6657825182559160200191906001019062000b49565b5b50905062000b76919062000b7a565b5090565b5b8082111562000b9557600081600090555060010162000b7b565b5090565b60008151905062000baa8162000f79565b92915050565b60006020828403121562000bc95762000bc862000f22565b5b600062000bd98482850162000b99565b91505092915050565b62000bed8162000e15565b82525050565b62000bfe8162000e29565b82525050565b600062000c1360208362000d0e565b915062000c208262000f27565b602082019050919050565b600062000c3a601f8362000d0e565b915062000c478262000f50565b602082019050919050565b62000c5d8162000e55565b82525050565b600060408201905062000c7a600083018562000be2565b62000c89602083018462000be2565b9392505050565b600060208201905062000ca7600083018462000bf3565b92915050565b6000602082019050818103600083015262000cc88162000c04565b9050919050565b6000602082019050818103600083015262000cea8162000c2b565b9050919050565b600060208201905062000d08600083018462000c52565b92915050565b600082825260208201905092915050565b600062000d2c8262000e55565b915062000d398362000e55565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d715762000d7062000e95565b5b828201905092915050565b600062000d898262000e55565b915062000d968362000e55565b92508262000da95762000da862000ec4565b5b828204905092915050565b600062000dc18262000e55565b915062000dce8362000e55565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e0a5762000e0962000e95565b5b828202905092915050565b600062000e228262000e35565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000e7857607f821691505b6020821081141562000e8f5762000e8e62000ef3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000f848162000e15565b811462000f9057600080fd5b50565b6150c08062000fa36000396000f3fe6080604052600436106102295760003560e01c80638a8c523c11610123578063c8125e45116100ab578063df778d261161006f578063df778d2614610826578063e2f456051461083d578063e884f26014610868578063f2fde38b14610893578063f8b45b05146108bc57610230565b8063c8125e451461072d578063c876d0b914610756578063c8c8ebe414610781578063d257b34f146107ac578063dd62ed3e146107e957610230565b8063a457c2d7116100f2578063a457c2d714610636578063a9059cbb14610673578063bbc0c742146106b0578063c0246668146106db578063c18bc1951461070457610230565b80638a8c523c146105a05780638da5cb5b146105b757806395d89b41146105e25780639a7a23d61461060d57610230565b806323b872dd116101b1578063667185241161017557806366718524146104cf57806370a08231146104f8578063715018a614610535578063751039fc1461054c5780637571336a1461057757610230565b806323b872dd146103c2578063313ce567146103ff578063395093511461042a5780634a62bb65146104675780634fbee1931461049257610230565b806312b77e8a116101f857806312b77e8a1461030357806313114a9d1461031a57806318160ddd14610345578063203e727e14610370578063224290851461039957610230565b806306fdde0314610235578063095ea7b3146102605780630b559c6f1461029d5780630f3a325f146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108e7565b60405161025791906141c4565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613ba3565b610979565b60405161029491906141a9565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613be3565b61099c565b005b3480156102d257600080fd5b506102ed60048036038101906102e89190613a76565b610b93565b6040516102fa91906141a9565b60405180910390f35b34801561030f57600080fd5b50610318610be9565b005b34801561032657600080fd5b5061032f610cd0565b60405161033c91906144c6565b60405180910390f35b34801561035157600080fd5b5061035a610cd6565b60405161036791906144c6565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613c2c565b610ce0565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190613c59565b610def565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190613b10565b610eee565b6040516103f691906141a9565b60405180910390f35b34801561040b57600080fd5b50610414610f1d565b6040516104219190614572565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190613ba3565b610f26565b60405161045e91906141a9565b60405180910390f35b34801561047357600080fd5b5061047c610fd0565b60405161048991906141a9565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190613a76565b610fe3565b6040516104c691906141a9565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190613a76565b611039565b005b34801561050457600080fd5b5061051f600480360381019061051a9190613a76565b611175565b60405161052c91906144c6565b60405180910390f35b34801561054157600080fd5b5061054a6111bd565b005b34801561055857600080fd5b50610561611245565b60405161056e91906141a9565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190613b63565b6112e5565b005b3480156105ac57600080fd5b506105b56113bc565b005b3480156105c357600080fd5b506105cc611455565b6040516105d9919061412d565b60405180910390f35b3480156105ee57600080fd5b506105f761147f565b60405161060491906141c4565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f9190613b63565b611511565b005b34801561064257600080fd5b5061065d60048036038101906106589190613ba3565b61162c565b60405161066a91906141a9565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613ba3565b611716565b6040516106a791906141a9565b60405180910390f35b3480156106bc57600080fd5b506106c5611739565b6040516106d291906141a9565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd9190613b63565b61174c565b005b34801561071057600080fd5b5061072b60048036038101906107269190613c2c565b611871565b005b34801561073957600080fd5b50610754600480360381019061074f9190613be3565b611980565b005b34801561076257600080fd5b5061076b611a91565b60405161077891906141a9565b60405180910390f35b34801561078d57600080fd5b50610796611aa4565b6040516107a391906144c6565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce9190613c2c565b611aaa565b6040516107e091906141a9565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b9190613ad0565b611bff565b60405161081d91906144c6565b60405180910390f35b34801561083257600080fd5b5061083b611c86565b005b34801561084957600080fd5b50610852611d76565b60405161085f91906144c6565b60405180910390f35b34801561087457600080fd5b5061087d611d7c565b60405161088a91906141a9565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613a76565b611e1c565b005b3480156108c857600080fd5b506108d1611f14565b6040516108de91906144c6565b60405180910390f35b6060600380546108f6906147e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610922906147e2565b801561096f5780601f106109445761010080835404028352916020019161096f565b820191906000526020600020905b81548152906001019060200180831161095257829003601f168201915b5050505050905090565b600080610984611f1a565b9050610991818585611f22565b600191505092915050565b6109a4611f1a565b73ffffffffffffffffffffffffffffffffffffffff166109c2611455565b73ffffffffffffffffffffffffffffffffffffffff1614610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f906143c6565b60405180910390fd5b60005b8151811015610b8f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610a7057610a6f61491b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610b045750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610ae357610ae261491b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610b7c57600160086000848481518110610b2257610b2161491b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610b8790614845565b915050610a1b565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610bf1611f1a565b73ffffffffffffffffffffffffffffffffffffffff16610c0f611455565b73ffffffffffffffffffffffffffffffffffffffff1614610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c906143c6565b60405180910390fd5b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ccd573d6000803e3d6000fd5b50565b60105481565b6000600254905090565b610ce8611f1a565b73ffffffffffffffffffffffffffffffffffffffff16610d06611455565b73ffffffffffffffffffffffffffffffffffffffff1614610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d53906143c6565b60405180910390fd5b670de0b6b3a76400006103e86001610d72610cd6565b610d7c91906146ba565b610d869190614689565b610d909190614689565b811015610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc9906144a6565b60405180910390fd5b670de0b6b3a764000081610de691906146ba565b600a8190555050565b610df7611f1a565b73ffffffffffffffffffffffffffffffffffffffff16610e15611455565b73ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e62906143c6565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154610e939190614633565b610e9d9190614633565b601081905550600f6010541115610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090614206565b60405180910390fd5b505050565b600080610ef9611f1a565b9050610f068582856120ed565b610f11858585612179565b60019150509392505050565b60006012905090565b600080610f31611f1a565b9050610fc5818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fc09190614633565b611f22565b600191505092915050565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611041611f1a565b73ffffffffffffffffffffffffffffffffffffffff1661105f611455565b73ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac906143c6565b60405180910390fd5b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111c5611f1a565b73ffffffffffffffffffffffffffffffffffffffff166111e3611455565b73ffffffffffffffffffffffffffffffffffffffff1614611239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611230906143c6565b60405180910390fd5b6112436000612ddd565b565b600061124f611f1a565b73ffffffffffffffffffffffffffffffffffffffff1661126d611455565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba906143c6565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b6112ed611f1a565b73ffffffffffffffffffffffffffffffffffffffff1661130b611455565b73ffffffffffffffffffffffffffffffffffffffff1614611361576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611358906143c6565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113c4611f1a565b73ffffffffffffffffffffffffffffffffffffffff166113e2611455565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f906143c6565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461148e906147e2565b80601f01602080910402602001604051908101604052809291908181526020018280546114ba906147e2565b80156115075780601f106114dc57610100808354040283529160200191611507565b820191906000526020600020905b8154815290600101906020018083116114ea57829003601f168201915b5050505050905090565b611519611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611537611455565b73ffffffffffffffffffffffffffffffffffffffff161461158d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611584906143c6565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561161e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611615906142c6565b60405180910390fd5b6116288282612ea3565b5050565b600080611637611f1a565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156116fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f490614486565b60405180910390fd5b61170a8286868403611f22565b60019250505092915050565b600080611721611f1a565b905061172e818585612179565b600191505092915050565b600d60019054906101000a900460ff1681565b611754611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611772611455565b73ffffffffffffffffffffffffffffffffffffffff16146117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf906143c6565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161186591906141a9565b60405180910390a25050565b611879611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611897611455565b73ffffffffffffffffffffffffffffffffffffffff16146118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e4906143c6565b60405180910390fd5b670de0b6b3a76400006103e86005611903610cd6565b61190d91906146ba565b6119179190614689565b6119219190614689565b811015611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a906142a6565b60405180910390fd5b670de0b6b3a76400008161197791906146ba565b600c8190555050565b611988611f1a565b73ffffffffffffffffffffffffffffffffffffffff166119a6611455565b73ffffffffffffffffffffffffffffffffffffffff16146119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f3906143c6565b60405180910390fd5b60005b8151811015611a8d57600060086000848481518110611a2157611a2061491b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a8590614845565b9150506119ff565b5050565b600f60009054906101000a900460ff1681565b600a5481565b6000611ab4611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611ad2611455565b73ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f906143c6565b60405180910390fd5b620186a06001611b36610cd6565b611b4091906146ba565b611b4a9190614689565b821015611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390614346565b60405180910390fd5b6103e86005611b99610cd6565b611ba391906146ba565b611bad9190614689565b821115611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690614366565b60405180910390fd5b81600b8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c8e611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611cac611455565b73ffffffffffffffffffffffffffffffffffffffff1614611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf9906143c6565b60405180910390fd5b611d0b47612f44565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d73573d6000803e3d6000fd5b50565b600b5481565b6000611d86611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611da4611455565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df1906143c6565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b611e24611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611e42611455565b73ffffffffffffffffffffffffffffffffffffffff1614611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f906143c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eff90614266565b60405180910390fd5b611f1181612ddd565b50565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8990614446565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990614286565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120e091906144c6565b60405180910390a3505050565b60006120f98484611bff565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121735781811015612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c906142e6565b60405180910390fd5b6121728484848403611f22565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e090614406565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612250906141e6565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156122e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dd90614426565b60405180910390fd5b6000811415612300576122fb83836000613196565b612dd8565b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123a45750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123db5760006123bf60648361341790919063ffffffff16565b90506123cb848261342d565b80826123d79190614714565b9150505b600d60009054906101000a900460ff1615612aa2576123f8611455565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124665750612436611455565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561249f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124d9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124f25750600960009054906101000a900460ff16155b15612aa157600d60019054906101000a900460ff166125ec57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125ac5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e290614246565b60405180910390fd5b5b600f60009054906101000a900460ff16156127b857612609611455565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126925750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126ec5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156127b75743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612772576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612769906143a6565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561285b5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561290257600a548111156128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614386565b60405180910390fd5b600c546128b183611175565b826128bc9190614633565b11156128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f490614466565b60405180910390fd5b612aa0565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129a55750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129f457600a548111156129ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e690614326565b60405180910390fd5b612a9f565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a9e57600c54612a5183611175565b82612a5c9190614633565b1115612a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9490614466565b60405180910390fd5b5b5b5b5b5b6000612aad30611175565b90506000600b548210159050808015612ad35750600960009054906101000a900460ff16155b8015612b295750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b7f5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bd55750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c19576001600960006101000a81548160ff021916908315150217905550612bfd613604565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ccf5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cd957600090505b60008115612dc857612d096064612cfb6010548861382f90919063ffffffff16565b61341790919063ffffffff16565b905060105460125482612d1c91906146ba565b612d269190614689565b60156000828254612d379190614633565b9250508190555060105460135482612d4f91906146ba565b612d599190614689565b60166000828254612d6a9190614633565b9250508190555060105460115482612d8291906146ba565b612d8c9190614689565b60146000828254612d9d9190614633565b925050819055506000811115612db957612db8873083613196565b5b8085612dc59190614714565b94505b612dd3878787613196565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115612f6157612f6061494a565b5b604051908082528060200260200182016040528015612f8f5781602001602082028036833780820191505090505b5090503081600081518110612fa757612fa661491b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561304957600080fd5b505afa15801561305d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130819190613aa3565b816001815181106130955761309461491b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130fc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f22565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016131609594939291906144e1565b600060405180830381600087803b15801561317a57600080fd5b505af115801561318e573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fd90614406565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326d906141e6565b60405180910390fd5b613281838383613845565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fe90614306565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339a9190614633565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133fe91906144c6565b60405180910390a361341184848461384a565b50505050565b600081836134259190614689565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561349d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613494906143e6565b60405180910390fd5b6134a982600083613845565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561352f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352690614226565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546135869190614714565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135eb91906144c6565b60405180910390a36135ff8360008461384a565b505050565b600061360f30611175565b905060006016546014546015546136269190614633565b6136309190614633565b905060008214806136415750600081145b1561364d57505061382d565b600b5482111561365d57600b5491505b60006002826015548561367091906146ba565b61367a9190614689565b6136849190614689565b9050600061369b828561384f90919063ffffffff16565b905060004790506136ab82612f44565b60006136c0824761384f90919063ffffffff16565b905060006136eb866136dd6014548561382f90919063ffffffff16565b61341790919063ffffffff16565b90506000613716876137086016548661382f90919063ffffffff16565b61341790919063ffffffff16565b905060008183856137279190614714565b6137319190614714565b9050600060158190555060006014819055506000601681905550600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61379a848661386590919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156137c5573d6000803e3d6000fd5b506000871180156137d65750600081115b15613823576137e5878261387b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260155460405161381a9392919061453b565b60405180910390a15b5050505050505050505b565b6000818361383d91906146ba565b905092915050565b505050565b505050565b6000818361385d9190614714565b905092915050565b600081836138739190614633565b905092915050565b6138a830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f22565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806138f4611455565b426040518863ffffffff1660e01b815260040161391696959493929190614148565b6060604051808303818588803b15801561392f57600080fd5b505af1158015613943573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139689190613cac565b5050505050565b600061398261397d846145b2565b61458d565b905080838252602082019050828560208602820111156139a5576139a461497e565b5b60005b858110156139d557816139bb88826139df565b8452602084019350602083019250506001810190506139a8565b5050509392505050565b6000813590506139ee81615045565b92915050565b600081519050613a0381615045565b92915050565b600082601f830112613a1e57613a1d614979565b5b8135613a2e84826020860161396f565b91505092915050565b600081359050613a468161505c565b92915050565b600081359050613a5b81615073565b92915050565b600081519050613a7081615073565b92915050565b600060208284031215613a8c57613a8b614988565b5b6000613a9a848285016139df565b91505092915050565b600060208284031215613ab957613ab8614988565b5b6000613ac7848285016139f4565b91505092915050565b60008060408385031215613ae757613ae6614988565b5b6000613af5858286016139df565b9250506020613b06858286016139df565b9150509250929050565b600080600060608486031215613b2957613b28614988565b5b6000613b37868287016139df565b9350506020613b48868287016139df565b9250506040613b5986828701613a4c565b9150509250925092565b60008060408385031215613b7a57613b79614988565b5b6000613b88858286016139df565b9250506020613b9985828601613a37565b9150509250929050565b60008060408385031215613bba57613bb9614988565b5b6000613bc8858286016139df565b9250506020613bd985828601613a4c565b9150509250929050565b600060208284031215613bf957613bf8614988565b5b600082013567ffffffffffffffff811115613c1757613c16614983565b5b613c2384828501613a09565b91505092915050565b600060208284031215613c4257613c41614988565b5b6000613c5084828501613a4c565b91505092915050565b600080600060608486031215613c7257613c71614988565b5b6000613c8086828701613a4c565b9350506020613c9186828701613a4c565b9250506040613ca286828701613a4c565b9150509250925092565b600080600060608486031215613cc557613cc4614988565b5b6000613cd386828701613a61565b9350506020613ce486828701613a61565b9250506040613cf586828701613a61565b9150509250925092565b6000613d0b8383613d17565b60208301905092915050565b613d2081614748565b82525050565b613d2f81614748565b82525050565b6000613d40826145ee565b613d4a8185614611565b9350613d55836145de565b8060005b83811015613d86578151613d6d8882613cff565b9750613d7883614604565b925050600181019050613d59565b5085935050505092915050565b613d9c8161475a565b82525050565b613dab8161479d565b82525050565b6000613dbc826145f9565b613dc68185614622565b9350613dd68185602086016147af565b613ddf8161498d565b840191505092915050565b6000613df7602383614622565b9150613e028261499e565b604082019050919050565b6000613e1a601d83614622565b9150613e25826149ed565b602082019050919050565b6000613e3d602283614622565b9150613e4882614a16565b604082019050919050565b6000613e60601683614622565b9150613e6b82614a65565b602082019050919050565b6000613e83602683614622565b9150613e8e82614a8e565b604082019050919050565b6000613ea6602283614622565b9150613eb182614add565b604082019050919050565b6000613ec9602483614622565b9150613ed482614b2c565b604082019050919050565b6000613eec603983614622565b9150613ef782614b7b565b604082019050919050565b6000613f0f601d83614622565b9150613f1a82614bca565b602082019050919050565b6000613f32602683614622565b9150613f3d82614bf3565b604082019050919050565b6000613f55603683614622565b9150613f6082614c42565b604082019050919050565b6000613f78603583614622565b9150613f8382614c91565b604082019050919050565b6000613f9b603483614622565b9150613fa682614ce0565b604082019050919050565b6000613fbe603583614622565b9150613fc982614d2f565b604082019050919050565b6000613fe1604983614622565b9150613fec82614d7e565b606082019050919050565b6000614004602083614622565b915061400f82614df3565b602082019050919050565b6000614027602183614622565b915061403282614e1c565b604082019050919050565b600061404a602583614622565b915061405582614e6b565b604082019050919050565b600061406d604d83614622565b915061407882614eba565b606082019050919050565b6000614090602483614622565b915061409b82614f2f565b604082019050919050565b60006140b3601383614622565b91506140be82614f7e565b602082019050919050565b60006140d6602583614622565b91506140e182614fa7565b604082019050919050565b60006140f9602f83614622565b915061410482614ff6565b604082019050919050565b61411881614786565b82525050565b61412781614790565b82525050565b60006020820190506141426000830184613d26565b92915050565b600060c08201905061415d6000830189613d26565b61416a602083018861410f565b6141776040830187613da2565b6141846060830186613da2565b6141916080830185613d26565b61419e60a083018461410f565b979650505050505050565b60006020820190506141be6000830184613d93565b92915050565b600060208201905081810360008301526141de8184613db1565b905092915050565b600060208201905081810360008301526141ff81613dea565b9050919050565b6000602082019050818103600083015261421f81613e0d565b9050919050565b6000602082019050818103600083015261423f81613e30565b9050919050565b6000602082019050818103600083015261425f81613e53565b9050919050565b6000602082019050818103600083015261427f81613e76565b9050919050565b6000602082019050818103600083015261429f81613e99565b9050919050565b600060208201905081810360008301526142bf81613ebc565b9050919050565b600060208201905081810360008301526142df81613edf565b9050919050565b600060208201905081810360008301526142ff81613f02565b9050919050565b6000602082019050818103600083015261431f81613f25565b9050919050565b6000602082019050818103600083015261433f81613f48565b9050919050565b6000602082019050818103600083015261435f81613f6b565b9050919050565b6000602082019050818103600083015261437f81613f8e565b9050919050565b6000602082019050818103600083015261439f81613fb1565b9050919050565b600060208201905081810360008301526143bf81613fd4565b9050919050565b600060208201905081810360008301526143df81613ff7565b9050919050565b600060208201905081810360008301526143ff8161401a565b9050919050565b6000602082019050818103600083015261441f8161403d565b9050919050565b6000602082019050818103600083015261443f81614060565b9050919050565b6000602082019050818103600083015261445f81614083565b9050919050565b6000602082019050818103600083015261447f816140a6565b9050919050565b6000602082019050818103600083015261449f816140c9565b9050919050565b600060208201905081810360008301526144bf816140ec565b9050919050565b60006020820190506144db600083018461410f565b92915050565b600060a0820190506144f6600083018861410f565b6145036020830187613da2565b81810360408301526145158186613d35565b90506145246060830185613d26565b614531608083018461410f565b9695505050505050565b6000606082019050614550600083018661410f565b61455d602083018561410f565b61456a604083018461410f565b949350505050565b6000602082019050614587600083018461411e565b92915050565b60006145976145a8565b90506145a38282614814565b919050565b6000604051905090565b600067ffffffffffffffff8211156145cd576145cc61494a565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061463e82614786565b915061464983614786565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561467e5761467d61488e565b5b828201905092915050565b600061469482614786565b915061469f83614786565b9250826146af576146ae6148bd565b5b828204905092915050565b60006146c582614786565b91506146d083614786565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147095761470861488e565b5b828202905092915050565b600061471f82614786565b915061472a83614786565b92508282101561473d5761473c61488e565b5b828203905092915050565b600061475382614766565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147a882614786565b9050919050565b60005b838110156147cd5780820151818401526020810190506147b2565b838111156147dc576000848401525b50505050565b600060028204905060018216806147fa57607f821691505b6020821081141561480e5761480d6148ec565b5b50919050565b61481d8261498d565b810181811067ffffffffffffffff8211171561483c5761483b61494a565b5b80604052505050565b600061485082614786565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148835761488261488e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b61504e81614748565b811461505957600080fd5b50565b6150658161475a565b811461507057600080fd5b50565b61507c81614786565b811461508757600080fd5b5056fea2646970667358221220dfdcebbdfeec2ca229716d15a4328d4bc49418b46c8ba9c79684440913c5d4f964736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102295760003560e01c80638a8c523c11610123578063c8125e45116100ab578063df778d261161006f578063df778d2614610826578063e2f456051461083d578063e884f26014610868578063f2fde38b14610893578063f8b45b05146108bc57610230565b8063c8125e451461072d578063c876d0b914610756578063c8c8ebe414610781578063d257b34f146107ac578063dd62ed3e146107e957610230565b8063a457c2d7116100f2578063a457c2d714610636578063a9059cbb14610673578063bbc0c742146106b0578063c0246668146106db578063c18bc1951461070457610230565b80638a8c523c146105a05780638da5cb5b146105b757806395d89b41146105e25780639a7a23d61461060d57610230565b806323b872dd116101b1578063667185241161017557806366718524146104cf57806370a08231146104f8578063715018a614610535578063751039fc1461054c5780637571336a1461057757610230565b806323b872dd146103c2578063313ce567146103ff578063395093511461042a5780634a62bb65146104675780634fbee1931461049257610230565b806312b77e8a116101f857806312b77e8a1461030357806313114a9d1461031a57806318160ddd14610345578063203e727e14610370578063224290851461039957610230565b806306fdde0314610235578063095ea7b3146102605780630b559c6f1461029d5780630f3a325f146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108e7565b60405161025791906141c4565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613ba3565b610979565b60405161029491906141a9565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613be3565b61099c565b005b3480156102d257600080fd5b506102ed60048036038101906102e89190613a76565b610b93565b6040516102fa91906141a9565b60405180910390f35b34801561030f57600080fd5b50610318610be9565b005b34801561032657600080fd5b5061032f610cd0565b60405161033c91906144c6565b60405180910390f35b34801561035157600080fd5b5061035a610cd6565b60405161036791906144c6565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613c2c565b610ce0565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190613c59565b610def565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190613b10565b610eee565b6040516103f691906141a9565b60405180910390f35b34801561040b57600080fd5b50610414610f1d565b6040516104219190614572565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190613ba3565b610f26565b60405161045e91906141a9565b60405180910390f35b34801561047357600080fd5b5061047c610fd0565b60405161048991906141a9565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190613a76565b610fe3565b6040516104c691906141a9565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190613a76565b611039565b005b34801561050457600080fd5b5061051f600480360381019061051a9190613a76565b611175565b60405161052c91906144c6565b60405180910390f35b34801561054157600080fd5b5061054a6111bd565b005b34801561055857600080fd5b50610561611245565b60405161056e91906141a9565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190613b63565b6112e5565b005b3480156105ac57600080fd5b506105b56113bc565b005b3480156105c357600080fd5b506105cc611455565b6040516105d9919061412d565b60405180910390f35b3480156105ee57600080fd5b506105f761147f565b60405161060491906141c4565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f9190613b63565b611511565b005b34801561064257600080fd5b5061065d60048036038101906106589190613ba3565b61162c565b60405161066a91906141a9565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613ba3565b611716565b6040516106a791906141a9565b60405180910390f35b3480156106bc57600080fd5b506106c5611739565b6040516106d291906141a9565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd9190613b63565b61174c565b005b34801561071057600080fd5b5061072b60048036038101906107269190613c2c565b611871565b005b34801561073957600080fd5b50610754600480360381019061074f9190613be3565b611980565b005b34801561076257600080fd5b5061076b611a91565b60405161077891906141a9565b60405180910390f35b34801561078d57600080fd5b50610796611aa4565b6040516107a391906144c6565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce9190613c2c565b611aaa565b6040516107e091906141a9565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b9190613ad0565b611bff565b60405161081d91906144c6565b60405180910390f35b34801561083257600080fd5b5061083b611c86565b005b34801561084957600080fd5b50610852611d76565b60405161085f91906144c6565b60405180910390f35b34801561087457600080fd5b5061087d611d7c565b60405161088a91906141a9565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613a76565b611e1c565b005b3480156108c857600080fd5b506108d1611f14565b6040516108de91906144c6565b60405180910390f35b6060600380546108f6906147e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610922906147e2565b801561096f5780601f106109445761010080835404028352916020019161096f565b820191906000526020600020905b81548152906001019060200180831161095257829003601f168201915b5050505050905090565b600080610984611f1a565b9050610991818585611f22565b600191505092915050565b6109a4611f1a565b73ffffffffffffffffffffffffffffffffffffffff166109c2611455565b73ffffffffffffffffffffffffffffffffffffffff1614610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f906143c6565b60405180910390fd5b60005b8151811015610b8f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610a7057610a6f61491b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610b045750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610ae357610ae261491b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610b7c57600160086000848481518110610b2257610b2161491b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610b8790614845565b915050610a1b565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610bf1611f1a565b73ffffffffffffffffffffffffffffffffffffffff16610c0f611455565b73ffffffffffffffffffffffffffffffffffffffff1614610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c906143c6565b60405180910390fd5b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ccd573d6000803e3d6000fd5b50565b60105481565b6000600254905090565b610ce8611f1a565b73ffffffffffffffffffffffffffffffffffffffff16610d06611455565b73ffffffffffffffffffffffffffffffffffffffff1614610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d53906143c6565b60405180910390fd5b670de0b6b3a76400006103e86001610d72610cd6565b610d7c91906146ba565b610d869190614689565b610d909190614689565b811015610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc9906144a6565b60405180910390fd5b670de0b6b3a764000081610de691906146ba565b600a8190555050565b610df7611f1a565b73ffffffffffffffffffffffffffffffffffffffff16610e15611455565b73ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e62906143c6565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154610e939190614633565b610e9d9190614633565b601081905550600f6010541115610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090614206565b60405180910390fd5b505050565b600080610ef9611f1a565b9050610f068582856120ed565b610f11858585612179565b60019150509392505050565b60006012905090565b600080610f31611f1a565b9050610fc5818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fc09190614633565b611f22565b600191505092915050565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611041611f1a565b73ffffffffffffffffffffffffffffffffffffffff1661105f611455565b73ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac906143c6565b60405180910390fd5b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111c5611f1a565b73ffffffffffffffffffffffffffffffffffffffff166111e3611455565b73ffffffffffffffffffffffffffffffffffffffff1614611239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611230906143c6565b60405180910390fd5b6112436000612ddd565b565b600061124f611f1a565b73ffffffffffffffffffffffffffffffffffffffff1661126d611455565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba906143c6565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b6112ed611f1a565b73ffffffffffffffffffffffffffffffffffffffff1661130b611455565b73ffffffffffffffffffffffffffffffffffffffff1614611361576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611358906143c6565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113c4611f1a565b73ffffffffffffffffffffffffffffffffffffffff166113e2611455565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f906143c6565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461148e906147e2565b80601f01602080910402602001604051908101604052809291908181526020018280546114ba906147e2565b80156115075780601f106114dc57610100808354040283529160200191611507565b820191906000526020600020905b8154815290600101906020018083116114ea57829003601f168201915b5050505050905090565b611519611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611537611455565b73ffffffffffffffffffffffffffffffffffffffff161461158d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611584906143c6565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561161e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611615906142c6565b60405180910390fd5b6116288282612ea3565b5050565b600080611637611f1a565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156116fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f490614486565b60405180910390fd5b61170a8286868403611f22565b60019250505092915050565b600080611721611f1a565b905061172e818585612179565b600191505092915050565b600d60019054906101000a900460ff1681565b611754611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611772611455565b73ffffffffffffffffffffffffffffffffffffffff16146117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf906143c6565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161186591906141a9565b60405180910390a25050565b611879611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611897611455565b73ffffffffffffffffffffffffffffffffffffffff16146118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e4906143c6565b60405180910390fd5b670de0b6b3a76400006103e86005611903610cd6565b61190d91906146ba565b6119179190614689565b6119219190614689565b811015611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a906142a6565b60405180910390fd5b670de0b6b3a76400008161197791906146ba565b600c8190555050565b611988611f1a565b73ffffffffffffffffffffffffffffffffffffffff166119a6611455565b73ffffffffffffffffffffffffffffffffffffffff16146119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f3906143c6565b60405180910390fd5b60005b8151811015611a8d57600060086000848481518110611a2157611a2061491b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a8590614845565b9150506119ff565b5050565b600f60009054906101000a900460ff1681565b600a5481565b6000611ab4611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611ad2611455565b73ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f906143c6565b60405180910390fd5b620186a06001611b36610cd6565b611b4091906146ba565b611b4a9190614689565b821015611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390614346565b60405180910390fd5b6103e86005611b99610cd6565b611ba391906146ba565b611bad9190614689565b821115611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690614366565b60405180910390fd5b81600b8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c8e611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611cac611455565b73ffffffffffffffffffffffffffffffffffffffff1614611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf9906143c6565b60405180910390fd5b611d0b47612f44565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d73573d6000803e3d6000fd5b50565b600b5481565b6000611d86611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611da4611455565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df1906143c6565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b611e24611f1a565b73ffffffffffffffffffffffffffffffffffffffff16611e42611455565b73ffffffffffffffffffffffffffffffffffffffff1614611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f906143c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eff90614266565b60405180910390fd5b611f1181612ddd565b50565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8990614446565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990614286565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120e091906144c6565b60405180910390a3505050565b60006120f98484611bff565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121735781811015612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c906142e6565b60405180910390fd5b6121728484848403611f22565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e090614406565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612250906141e6565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156122e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dd90614426565b60405180910390fd5b6000811415612300576122fb83836000613196565b612dd8565b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123a45750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123db5760006123bf60648361341790919063ffffffff16565b90506123cb848261342d565b80826123d79190614714565b9150505b600d60009054906101000a900460ff1615612aa2576123f8611455565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124665750612436611455565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561249f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124d9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124f25750600960009054906101000a900460ff16155b15612aa157600d60019054906101000a900460ff166125ec57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125ac5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e290614246565b60405180910390fd5b5b600f60009054906101000a900460ff16156127b857612609611455565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126925750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126ec5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156127b75743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612772576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612769906143a6565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561285b5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561290257600a548111156128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614386565b60405180910390fd5b600c546128b183611175565b826128bc9190614633565b11156128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f490614466565b60405180910390fd5b612aa0565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129a55750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129f457600a548111156129ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e690614326565b60405180910390fd5b612a9f565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a9e57600c54612a5183611175565b82612a5c9190614633565b1115612a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9490614466565b60405180910390fd5b5b5b5b5b5b6000612aad30611175565b90506000600b548210159050808015612ad35750600960009054906101000a900460ff16155b8015612b295750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b7f5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bd55750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c19576001600960006101000a81548160ff021916908315150217905550612bfd613604565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ccf5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cd957600090505b60008115612dc857612d096064612cfb6010548861382f90919063ffffffff16565b61341790919063ffffffff16565b905060105460125482612d1c91906146ba565b612d269190614689565b60156000828254612d379190614633565b9250508190555060105460135482612d4f91906146ba565b612d599190614689565b60166000828254612d6a9190614633565b9250508190555060105460115482612d8291906146ba565b612d8c9190614689565b60146000828254612d9d9190614633565b925050819055506000811115612db957612db8873083613196565b5b8085612dc59190614714565b94505b612dd3878787613196565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115612f6157612f6061494a565b5b604051908082528060200260200182016040528015612f8f5781602001602082028036833780820191505090505b5090503081600081518110612fa757612fa661491b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561304957600080fd5b505afa15801561305d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130819190613aa3565b816001815181106130955761309461491b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130fc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f22565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016131609594939291906144e1565b600060405180830381600087803b15801561317a57600080fd5b505af115801561318e573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fd90614406565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326d906141e6565b60405180910390fd5b613281838383613845565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fe90614306565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339a9190614633565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133fe91906144c6565b60405180910390a361341184848461384a565b50505050565b600081836134259190614689565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561349d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613494906143e6565b60405180910390fd5b6134a982600083613845565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561352f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352690614226565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546135869190614714565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135eb91906144c6565b60405180910390a36135ff8360008461384a565b505050565b600061360f30611175565b905060006016546014546015546136269190614633565b6136309190614633565b905060008214806136415750600081145b1561364d57505061382d565b600b5482111561365d57600b5491505b60006002826015548561367091906146ba565b61367a9190614689565b6136849190614689565b9050600061369b828561384f90919063ffffffff16565b905060004790506136ab82612f44565b60006136c0824761384f90919063ffffffff16565b905060006136eb866136dd6014548561382f90919063ffffffff16565b61341790919063ffffffff16565b90506000613716876137086016548661382f90919063ffffffff16565b61341790919063ffffffff16565b905060008183856137279190614714565b6137319190614714565b9050600060158190555060006014819055506000601681905550600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61379a848661386590919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156137c5573d6000803e3d6000fd5b506000871180156137d65750600081115b15613823576137e5878261387b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260155460405161381a9392919061453b565b60405180910390a15b5050505050505050505b565b6000818361383d91906146ba565b905092915050565b505050565b505050565b6000818361385d9190614714565b905092915050565b600081836138739190614633565b905092915050565b6138a830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f22565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806138f4611455565b426040518863ffffffff1660e01b815260040161391696959493929190614148565b6060604051808303818588803b15801561392f57600080fd5b505af1158015613943573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139689190613cac565b5050505050565b600061398261397d846145b2565b61458d565b905080838252602082019050828560208602820111156139a5576139a461497e565b5b60005b858110156139d557816139bb88826139df565b8452602084019350602083019250506001810190506139a8565b5050509392505050565b6000813590506139ee81615045565b92915050565b600081519050613a0381615045565b92915050565b600082601f830112613a1e57613a1d614979565b5b8135613a2e84826020860161396f565b91505092915050565b600081359050613a468161505c565b92915050565b600081359050613a5b81615073565b92915050565b600081519050613a7081615073565b92915050565b600060208284031215613a8c57613a8b614988565b5b6000613a9a848285016139df565b91505092915050565b600060208284031215613ab957613ab8614988565b5b6000613ac7848285016139f4565b91505092915050565b60008060408385031215613ae757613ae6614988565b5b6000613af5858286016139df565b9250506020613b06858286016139df565b9150509250929050565b600080600060608486031215613b2957613b28614988565b5b6000613b37868287016139df565b9350506020613b48868287016139df565b9250506040613b5986828701613a4c565b9150509250925092565b60008060408385031215613b7a57613b79614988565b5b6000613b88858286016139df565b9250506020613b9985828601613a37565b9150509250929050565b60008060408385031215613bba57613bb9614988565b5b6000613bc8858286016139df565b9250506020613bd985828601613a4c565b9150509250929050565b600060208284031215613bf957613bf8614988565b5b600082013567ffffffffffffffff811115613c1757613c16614983565b5b613c2384828501613a09565b91505092915050565b600060208284031215613c4257613c41614988565b5b6000613c5084828501613a4c565b91505092915050565b600080600060608486031215613c7257613c71614988565b5b6000613c8086828701613a4c565b9350506020613c9186828701613a4c565b9250506040613ca286828701613a4c565b9150509250925092565b600080600060608486031215613cc557613cc4614988565b5b6000613cd386828701613a61565b9350506020613ce486828701613a61565b9250506040613cf586828701613a61565b9150509250925092565b6000613d0b8383613d17565b60208301905092915050565b613d2081614748565b82525050565b613d2f81614748565b82525050565b6000613d40826145ee565b613d4a8185614611565b9350613d55836145de565b8060005b83811015613d86578151613d6d8882613cff565b9750613d7883614604565b925050600181019050613d59565b5085935050505092915050565b613d9c8161475a565b82525050565b613dab8161479d565b82525050565b6000613dbc826145f9565b613dc68185614622565b9350613dd68185602086016147af565b613ddf8161498d565b840191505092915050565b6000613df7602383614622565b9150613e028261499e565b604082019050919050565b6000613e1a601d83614622565b9150613e25826149ed565b602082019050919050565b6000613e3d602283614622565b9150613e4882614a16565b604082019050919050565b6000613e60601683614622565b9150613e6b82614a65565b602082019050919050565b6000613e83602683614622565b9150613e8e82614a8e565b604082019050919050565b6000613ea6602283614622565b9150613eb182614add565b604082019050919050565b6000613ec9602483614622565b9150613ed482614b2c565b604082019050919050565b6000613eec603983614622565b9150613ef782614b7b565b604082019050919050565b6000613f0f601d83614622565b9150613f1a82614bca565b602082019050919050565b6000613f32602683614622565b9150613f3d82614bf3565b604082019050919050565b6000613f55603683614622565b9150613f6082614c42565b604082019050919050565b6000613f78603583614622565b9150613f8382614c91565b604082019050919050565b6000613f9b603483614622565b9150613fa682614ce0565b604082019050919050565b6000613fbe603583614622565b9150613fc982614d2f565b604082019050919050565b6000613fe1604983614622565b9150613fec82614d7e565b606082019050919050565b6000614004602083614622565b915061400f82614df3565b602082019050919050565b6000614027602183614622565b915061403282614e1c565b604082019050919050565b600061404a602583614622565b915061405582614e6b565b604082019050919050565b600061406d604d83614622565b915061407882614eba565b606082019050919050565b6000614090602483614622565b915061409b82614f2f565b604082019050919050565b60006140b3601383614622565b91506140be82614f7e565b602082019050919050565b60006140d6602583614622565b91506140e182614fa7565b604082019050919050565b60006140f9602f83614622565b915061410482614ff6565b604082019050919050565b61411881614786565b82525050565b61412781614790565b82525050565b60006020820190506141426000830184613d26565b92915050565b600060c08201905061415d6000830189613d26565b61416a602083018861410f565b6141776040830187613da2565b6141846060830186613da2565b6141916080830185613d26565b61419e60a083018461410f565b979650505050505050565b60006020820190506141be6000830184613d93565b92915050565b600060208201905081810360008301526141de8184613db1565b905092915050565b600060208201905081810360008301526141ff81613dea565b9050919050565b6000602082019050818103600083015261421f81613e0d565b9050919050565b6000602082019050818103600083015261423f81613e30565b9050919050565b6000602082019050818103600083015261425f81613e53565b9050919050565b6000602082019050818103600083015261427f81613e76565b9050919050565b6000602082019050818103600083015261429f81613e99565b9050919050565b600060208201905081810360008301526142bf81613ebc565b9050919050565b600060208201905081810360008301526142df81613edf565b9050919050565b600060208201905081810360008301526142ff81613f02565b9050919050565b6000602082019050818103600083015261431f81613f25565b9050919050565b6000602082019050818103600083015261433f81613f48565b9050919050565b6000602082019050818103600083015261435f81613f6b565b9050919050565b6000602082019050818103600083015261437f81613f8e565b9050919050565b6000602082019050818103600083015261439f81613fb1565b9050919050565b600060208201905081810360008301526143bf81613fd4565b9050919050565b600060208201905081810360008301526143df81613ff7565b9050919050565b600060208201905081810360008301526143ff8161401a565b9050919050565b6000602082019050818103600083015261441f8161403d565b9050919050565b6000602082019050818103600083015261443f81614060565b9050919050565b6000602082019050818103600083015261445f81614083565b9050919050565b6000602082019050818103600083015261447f816140a6565b9050919050565b6000602082019050818103600083015261449f816140c9565b9050919050565b600060208201905081810360008301526144bf816140ec565b9050919050565b60006020820190506144db600083018461410f565b92915050565b600060a0820190506144f6600083018861410f565b6145036020830187613da2565b81810360408301526145158186613d35565b90506145246060830185613d26565b614531608083018461410f565b9695505050505050565b6000606082019050614550600083018661410f565b61455d602083018561410f565b61456a604083018461410f565b949350505050565b6000602082019050614587600083018461411e565b92915050565b60006145976145a8565b90506145a38282614814565b919050565b6000604051905090565b600067ffffffffffffffff8211156145cd576145cc61494a565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061463e82614786565b915061464983614786565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561467e5761467d61488e565b5b828201905092915050565b600061469482614786565b915061469f83614786565b9250826146af576146ae6148bd565b5b828204905092915050565b60006146c582614786565b91506146d083614786565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147095761470861488e565b5b828202905092915050565b600061471f82614786565b915061472a83614786565b92508282101561473d5761473c61488e565b5b828203905092915050565b600061475382614766565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147a882614786565b9050919050565b60005b838110156147cd5780820151818401526020810190506147b2565b838111156147dc576000848401525b50505050565b600060028204905060018216806147fa57607f821691505b6020821081141561480e5761480d6148ec565b5b50919050565b61481d8261498d565b810181811067ffffffffffffffff8211171561483c5761483b61494a565b5b80604052505050565b600061485082614786565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148835761488261488e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b61504e81614748565b811461505957600080fd5b50565b6150658161475a565b811461507057600080fd5b50565b61507c81614786565b811461508757600080fd5b5056fea2646970667358221220dfdcebbdfeec2ca229716d15a4328d4bc49418b46c8ba9c79684440913c5d4f964736f6c63430008070033
Deployed Bytecode Sourcemap
34934:13980:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24040:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26391:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41406:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41954:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48765:109;;;;;;;;;;;;;:::i;:::-;;35660:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25160:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39493:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40112:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27172:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25002:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27876:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35348:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41269:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41104:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25331:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9575:103;;;;;;;;;;;;;:::i;:::-;;38703:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39956:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38564:83;;;;;;;;;;;;;:::i;:::-;;8924:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24259:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40652:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28619:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25664:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35388:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40462:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39733:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41739:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35612:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35225:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39099:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25920:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48597:160;;;;;;;;;;;;;:::i;:::-;;35267:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38889:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9833:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35307:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24040:100;24094:13;24127:5;24120:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24040:100;:::o;26391:201::-;26474:4;26491:13;26507:12;:10;:12::i;:::-;26491:28;;26530:32;26539:5;26546:7;26555:6;26530:8;:32::i;:::-;26580:4;26573:11;;;26391:201;;;;:::o;41406:321::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41494:6:::1;41489:231;41510:12;:19;41506:1;:23;41489:231;;;41574:13;;;;;;;;;;;41555:32;;:12;41568:1;41555:15;;;;;;;;:::i;:::-;;;;;;;;:32;;;;:79;;;;;41618:15;;;;;;;;;;;41591:43;;:12;41604:1;41591:15;;;;;;;;:::i;:::-;;;;;;;;:43;;;;41555:79;41551:158;;;41689:4;41655:14;:31;41670:12;41683:1;41670:15;;;;;;;;:::i;:::-;;;;;;;;41655:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;41551:158;41531:3;;;;;:::i;:::-;;;;41489:231;;;;41406:321:::0;:::o;41954:105::-;42007:4;42031:14;:20;42046:4;42031:20;;;;;;;;;;;;;;;;;;;;;;;;;42024:27;;41954:105;;;:::o;48765:109::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48824:9:::1;;;;;;;;;;;48816:27;;:50;48844:21;48816:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48765:109::o:0;35660:24::-;;;;:::o;25160:108::-;25221:7;25248:12;;25241:19;;25160:108;:::o;39493:232::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39614:4:::1;39606;39602:1;39586:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;39585:33;;;;:::i;:::-;39575:6;:43;;39567:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;39713:4;39704:6;:13;;;;:::i;:::-;39681:20;:36;;;;39493:232:::0;:::o;40112:342::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40238:12:::1;40222:13;:28;;;;40277:12;40261:13;:28;;;;40310:6;40300:7;:16;;;;40371:7;;40355:13;;40339;;:29;;;;:::i;:::-;:39;;;;:::i;:::-;40327:9;:51;;;;40410:2;40397:9;;:15;;40389:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;40112:342:::0;;;:::o;27172:295::-;27303:4;27320:15;27338:12;:10;:12::i;:::-;27320:30;;27361:38;27377:4;27383:7;27392:6;27361:15;:38::i;:::-;27410:27;27420:4;27426:2;27430:6;27410:9;:27::i;:::-;27455:4;27448:11;;;27172:295;;;;;:::o;25002:93::-;25060:5;25085:2;25078:9;;25002:93;:::o;27876:240::-;27964:4;27981:13;27997:12;:10;:12::i;:::-;27981:28;;28020:66;28029:5;28036:7;28075:10;28045:11;:18;28057:5;28045:18;;;;;;;;;;;;;;;:27;28064:7;28045:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;28020:8;:66::i;:::-;28104:4;28097:11;;;27876:240;;;;:::o;35348:33::-;;;;;;;;;;;;;:::o;41269:125::-;41334:4;41358:19;:28;41378:7;41358:28;;;;;;;;;;;;;;;;;;;;;;;;;41351:35;;41269:125;;;:::o;41104:157::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41211:9:::1;;;;;;;;;;;41183:38;;41200:9;41183:38;;;;;;;;;;;;41244:9;41232;;:21;;;;;;;;;;;;;;;;;;41104:157:::0;:::o;25331:127::-;25405:7;25432:9;:18;25442:7;25432:18;;;;;;;;;;;;;;;;25425:25;;25331:127;;;:::o;9575:103::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9640:30:::1;9667:1;9640:18;:30::i;:::-;9575:103::o:0;38703:121::-;38755:4;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38789:5:::1;38772:14;;:22;;;;;;;;;;;;;;;;;;38812:4;38805:11;;38703:121:::0;:::o;39956:144::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40088:4:::1;40046:31;:39;40078:6;40046:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39956:144:::0;;:::o;38564:83::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38635:4:::1;38619:13;;:20;;;;;;;;;;;;;;;;;;38564:83::o:0;8924:87::-;8970:7;8997:6;;;;;;;;;;;8990:13;;8924:87;:::o;24259:104::-;24315:13;24348:7;24341:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24259:104;:::o;40652:244::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40759:13:::1;;;;;;;;;;;40751:21;;:4;:21;;;;40743:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;40847:41;40876:4;40882:5;40847:28;:41::i;:::-;40652:244:::0;;:::o;28619:438::-;28712:4;28729:13;28745:12;:10;:12::i;:::-;28729:28;;28768:24;28795:11;:18;28807:5;28795:18;;;;;;;;;;;;;;;:27;28814:7;28795:27;;;;;;;;;;;;;;;;28768:54;;28861:15;28841:16;:35;;28833:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28954:60;28963:5;28970:7;28998:15;28979:16;:34;28954:8;:60::i;:::-;29045:4;29038:11;;;;28619:438;;;;:::o;25664:193::-;25743:4;25760:13;25776:12;:10;:12::i;:::-;25760:28;;25799;25809:5;25816:2;25820:6;25799:9;:28::i;:::-;25845:4;25838:11;;;25664:193;;;;:::o;35388:33::-;;;;;;;;;;;;;:::o;40462:182::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40578:8:::1;40547:19;:28;40567:7;40547:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40618:7;40602:34;;;40627:8;40602:34;;;;;;:::i;:::-;;;;;;;;40462:182:::0;;:::o;39733:211::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39855:4:::1;39849;39845:1;39829:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;39828:31;;;;:::i;:::-;39818:6;:41;;39810:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;39932:4;39923:6;:13;;;;:::i;:::-;39911:9;:25;;;;39733:211:::0;:::o;41739:203::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41827:6:::1;41822:113;41843:12;:19;41839:1;:23;41822:113;;;41918:5;41884:14;:31;41899:12;41912:1;41899:15;;;;;;;;:::i;:::-;;;;;;;;41884:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41864:3;;;;;:::i;:::-;;;;41822:113;;;;41739:203:::0;:::o;35612:39::-;;;;;;;;;;;;;:::o;35225:35::-;;;;:::o;39099:382::-;39180:4;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39237:6:::1;39233:1;39217:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;39204:9;:39;;39196:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;39352:4;39348:1;39332:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;39319:9;:37;;39311:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;39444:9;39423:18;:30;;;;39470:4;39463:11;;39099:382:::0;;;:::o;25920:151::-;26009:7;26036:11;:18;26048:5;26036:18;;;;;;;;;;;;;;;:27;26055:7;26036:27;;;;;;;;;;;;;;;;26029:34;;25920:151;;;;:::o;48597:160::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48648:40:::1;48666:21;48648:17;:40::i;:::-;48707:9;;;;;;;;;;;48699:27;;:50;48727:21;48699:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48597:160::o:0;35267:33::-;;;;:::o;38889:135::-;38949:4;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38989:5:::1;38966:20;;:28;;;;;;;;;;;;;;;;;;39012:4;39005:11;;38889:135:::0;:::o;9833:201::-;9155:12;:10;:12::i;:::-;9144:23;;:7;:5;:7::i;:::-;:23;;;9136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9942:1:::1;9922:22;;:8;:22;;;;9914:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9998:28;10017:8;9998:18;:28::i;:::-;9833:201:::0;:::o;35307:24::-;;;;:::o;804:98::-;857:7;884:10;877:17;;804:98;:::o;32255:380::-;32408:1;32391:19;;:5;:19;;;;32383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32489:1;32470:21;;:7;:21;;;;32462:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32573:6;32543:11;:18;32555:5;32543:18;;;;;;;;;;;;;;;:27;32562:7;32543:27;;;;;;;;;;;;;;;:36;;;;32611:7;32595:32;;32604:5;32595:32;;;32620:6;32595:32;;;;;;:::i;:::-;;;;;;;;32255:380;;;:::o;32922:453::-;33057:24;33084:25;33094:5;33101:7;33084:9;:25::i;:::-;33057:52;;33144:17;33124:16;:37;33120:248;;33206:6;33186:16;:26;;33178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33290:51;33299:5;33306:7;33334:6;33315:16;:25;33290:8;:51::i;:::-;33120:248;33046:329;32922:453;;;:::o;42067:3890::-;42215:1;42199:18;;:4;:18;;;;42191:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42292:1;42278:16;;:2;:16;;;;42270:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42354:14;:20;42369:4;42354:20;;;;;;;;;;;;;;;;;;;;;;;;;42353:21;42345:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;42492:1;42482:6;:11;42478:93;;;42510:28;42526:4;42532:2;42536:1;42510:15;:28::i;:::-;42553:7;;42478:93;42621:19;:25;42641:4;42621:25;;;;;;;;;;;;;;;;;;;;;;;;;42620:26;:54;;;;;42651:19;:23;42671:2;42651:23;;;;;;;;;;;;;;;;;;;;;;;;;42650:24;42620:54;42616:196;;;42691:18;42712:15;42723:3;42712:6;:10;;:15;;;;:::i;:::-;42691:36;;42742:23;42748:4;42754:10;42742:5;:23::i;:::-;42790:10;42780:20;;;;;:::i;:::-;;;42676:136;42616:196;42838:14;;;;;;;;;;;42834:1838;;;42899:7;:5;:7::i;:::-;42891:15;;:4;:15;;;;:49;;;;;42933:7;:5;:7::i;:::-;42927:13;;:2;:13;;;;42891:49;:86;;;;;42975:1;42961:16;;:2;:16;;;;42891:86;:128;;;;;43012:6;42998:21;;:2;:21;;;;42891:128;:159;;;;;43041:9;;;;;;;;;;;43040:10;42891:159;42869:1792;;;43090:13;;;;;;;;;;;43085:150;;43136:19;:25;43156:4;43136:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43165:19;:23;43185:2;43165:23;;;;;;;;;;;;;;;;;;;;;;;;;43136:52;43128:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43085:150;43393:20;;;;;;;;;;;43389:423;;;43447:7;:5;:7::i;:::-;43441:13;;:2;:13;;;;:47;;;;;43472:15;;;;;;;;;;;43458:30;;:2;:30;;;;43441:47;:79;;;;;43506:13;;;;;;;;;;;43492:28;;:2;:28;;;;43441:79;43437:356;;;43598:12;43556:28;:39;43585:9;43556:39;;;;;;;;;;;;;;;;:54;43548:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43757:12;43715:28;:39;43744:9;43715:39;;;;;;;;;;;;;;;:54;;;;43437:356;43389:423;43882:25;:31;43908:4;43882:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;43918:31;:35;43950:2;43918:35;;;;;;;;;;;;;;;;;;;;;;;;;43917:36;43882:71;43878:768;;;43996:20;;43986:6;:30;;43978:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;44131:9;;44114:13;44124:2;44114:9;:13::i;:::-;44105:6;:22;;;;:::i;:::-;:35;;44097:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43878:768;;;44259:25;:29;44285:2;44259:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;44293:31;:37;44325:4;44293:37;;;;;;;;;;;;;;;;;;;;;;;;;44292:38;44259:71;44255:391;;;44373:20;;44363:6;:30;;44355:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;44255:391;;;44500:31;:35;44532:2;44500:35;;;;;;;;;;;;;;;;;;;;;;;;;44495:151;;44593:9;;44576:13;44586:2;44576:9;:13::i;:::-;44567:6;:22;;;;:::i;:::-;:35;;44559:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44495:151;44255:391;43878:768;42869:1792;42834:1838;44686:28;44717:24;44735:4;44717:9;:24::i;:::-;44686:55;;44752:12;44791:18;;44767:20;:42;;44752:57;;44838:7;:34;;;;;44863:9;;;;;;;;;;;44862:10;44838:34;:83;;;;;44890:25;:31;44916:4;44890:31;;;;;;;;;;;;;;;;;;;;;;;;;44889:32;44838:83;:126;;;;;44939:19;:25;44959:4;44939:25;;;;;;;;;;;;;;;;;;;;;;;;;44938:26;44838:126;:167;;;;;44982:19;:23;45002:2;44982:23;;;;;;;;;;;;;;;;;;;;;;;;;44981:24;44838:167;44820:297;;;45044:4;45032:9;;:16;;;;;;;;;;;;;;;;;;45063:10;:8;:10::i;:::-;45100:5;45088:9;;:17;;;;;;;;;;;;;;;;;;44820:297;45129:12;45145:9;;;;;;;;;;;45144:10;45129:25;;45256:19;:25;45276:4;45256:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45285:19;:23;45305:2;45285:23;;;;;;;;;;;;;;;;;;;;;;;;;45256:52;45252:100;;;45335:5;45325:15;;45252:100;45372:12;45477:7;45473:431;;;45508:30;45534:3;45508:21;45519:9;;45508:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;45501:37;;45599:9;;45583:13;;45576:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;45553:19;;:55;;;;;;;:::i;:::-;;;;;;;;45657:9;;45647:7;;45640:4;:14;;;;:::i;:::-;:26;;;;:::i;:::-;45623:13;;:43;;;;;;;:::i;:::-;;;;;;;;45727:9;;45711:13;;45704:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;45681:19;;:55;;;;;;;:::i;:::-;;;;;;;;45776:1;45769:4;:8;45765:91;;;45798:42;45814:4;45828;45835;45798:15;:42::i;:::-;45765:91;45888:4;45878:14;;;;;:::i;:::-;;;45473:431;45916:33;45932:4;45938:2;45942:6;45916:15;:33::i;:::-;42180:3777;;;;42067:3890;;;;:::o;10194:191::-;10268:16;10287:6;;;;;;;;;;;10268:25;;10313:8;10304:6;;:17;;;;;;;;;;;;;;;;;;10368:8;10337:40;;10358:8;10337:40;;;;;;;;;;;;10257:128;10194:191;:::o;40904:188::-;41021:5;40987:25;:31;41013:4;40987:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41078:5;41044:40;;41072:4;41044:40;;;;;;;;;;;;40904:188;;:::o;45965:590::-;46092:21;46130:1;46116:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46092:40;;46161:4;46143;46148:1;46143:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46187:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46177:4;46182:1;46177:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;46222:62;46239:4;46254:15;;;;;;;;;;;46272:11;46222:8;:62::i;:::-;46323:15;;;;;;;;;;;:66;;;46404:11;46430:1;46474:4;46501;46521:15;46323:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46021:534;45965:590;:::o;29536:671::-;29683:1;29667:18;;:4;:18;;;;29659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29760:1;29746:16;;:2;:16;;;;29738:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29815:38;29836:4;29842:2;29846:6;29815:20;:38::i;:::-;29866:19;29888:9;:15;29898:4;29888:15;;;;;;;;;;;;;;;;29866:37;;29937:6;29922:11;:21;;29914:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;30054:6;30040:11;:20;30022:9;:15;30032:4;30022:15;;;;;;;;;;;;;;;:38;;;;30099:6;30082:9;:13;30092:2;30082:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;30138:2;30123:26;;30132:4;30123:26;;;30142:6;30123:26;;;;;;:::i;:::-;;;;;;;;30162:37;30182:4;30188:2;30192:6;30162:19;:37::i;:::-;29648:559;29536:671;;;:::o;4893:98::-;4951:7;4982:1;4978;:5;;;;:::i;:::-;4971:12;;4893:98;;;;:::o;31226:591::-;31329:1;31310:21;;:7;:21;;;;31302:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31382:49;31403:7;31420:1;31424:6;31382:20;:49::i;:::-;31444:22;31469:9;:18;31479:7;31469:18;;;;;;;;;;;;;;;;31444:43;;31524:6;31506:14;:24;;31498:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31643:6;31626:14;:23;31605:9;:18;31615:7;31605:18;;;;;;;;;;;;;;;:44;;;;31687:6;31671:12;;:22;;;;;;;:::i;:::-;;;;;;;;31737:1;31711:37;;31720:7;31711:37;;;31741:6;31711:37;;;;;;:::i;:::-;;;;;;;;31761:48;31781:7;31798:1;31802:6;31761:19;:48::i;:::-;31291:526;31226:591;;:::o;47089:1500::-;47128:23;47154:24;47172:4;47154:9;:24::i;:::-;47128:50;;47189:25;47261:13;;47239:19;;47217;;:41;;;;:::i;:::-;:57;;;;:::i;:::-;47189:85;;47318:1;47299:15;:20;:46;;;;47344:1;47323:17;:22;47299:46;47295:59;;;47347:7;;;;47295:59;47386:18;;47368:15;:36;47364:103;;;47437:18;;47419:36;;47364:103;47536:23;47622:1;47602:17;47580:19;;47562:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;47536:87;;47634:26;47663:36;47683:15;47663;:19;;:36;;;;:::i;:::-;47634:65;;47720:25;47748:21;47720:49;;47782:37;47800:18;47782:17;:37::i;:::-;47841:18;47862:44;47888:17;47862:21;:25;;:44;;;;:::i;:::-;47841:65;;47917:23;47943:58;47983:17;47943:35;47958:19;;47943:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;47917:84;;48012:17;48032:52;48066:17;48032:29;48047:13;;48032:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;48012:72;;48095:23;48152:9;48134:15;48121:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;48095:66;;48204:1;48182:19;:23;;;;48238:1;48216:19;:23;;;;48266:1;48250:13;:17;;;;48288:9;;;;;;;;;;;48280:27;;:59;48308:30;48328:9;48308:15;:19;;:30;;;;:::i;:::-;48280:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48390:1;48372:15;:19;:42;;;;;48413:1;48395:15;:19;48372:42;48368:214;;;48431:47;48445:15;48462;48431:13;:47::i;:::-;48498:72;48513:18;48533:15;48550:19;;48498:72;;;;;;;;:::i;:::-;;;;;;;;48368:214;47117:1472;;;;;;;;;47089:1500;:::o;4494:98::-;4552:7;4583:1;4579;:5;;;;:::i;:::-;4572:12;;4494:98;;;;:::o;33975:125::-;;;;:::o;34704:124::-;;;;:::o;4137:98::-;4195:7;4226:1;4222;:5;;;;:::i;:::-;4215:12;;4137:98;;;;:::o;3756:::-;3814:7;3845:1;3841;:5;;;;:::i;:::-;3834:12;;3756:98;;;;:::o;46567:514::-;46716:62;46733:4;46748:15;;;;;;;;;;;46766:11;46716:8;:62::i;:::-;46821:15;;;;;;;;;;;:31;;;46860:9;46893:4;46913:11;46939:1;46982;47025:7;:5;:7::i;:::-;47047:15;46821:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46567:514;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1063:370::-;1134:5;1183:3;1176:4;1168:6;1164:17;1160:27;1150:122;;1191:79;;:::i;:::-;1150:122;1308:6;1295:20;1333:94;1423:3;1415:6;1408:4;1400:6;1396:17;1333:94;:::i;:::-;1324:103;;1140:293;1063:370;;;;:::o;1439:133::-;1482:5;1520:6;1507:20;1498:29;;1536:30;1560:5;1536:30;:::i;:::-;1439:133;;;;:::o;1578:139::-;1624:5;1662:6;1649:20;1640:29;;1678:33;1705:5;1678:33;:::i;:::-;1578:139;;;;:::o;1723:143::-;1780:5;1811:6;1805:13;1796:22;;1827:33;1854:5;1827:33;:::i;:::-;1723:143;;;;:::o;1872:329::-;1931:6;1980:2;1968:9;1959:7;1955:23;1951:32;1948:119;;;1986:79;;:::i;:::-;1948:119;2106:1;2131:53;2176:7;2167:6;2156:9;2152:22;2131:53;:::i;:::-;2121:63;;2077:117;1872:329;;;;:::o;2207:351::-;2277:6;2326:2;2314:9;2305:7;2301:23;2297:32;2294:119;;;2332:79;;:::i;:::-;2294:119;2452:1;2477:64;2533:7;2524:6;2513:9;2509:22;2477:64;:::i;:::-;2467:74;;2423:128;2207:351;;;;:::o;2564:474::-;2632:6;2640;2689:2;2677:9;2668:7;2664:23;2660:32;2657:119;;;2695:79;;:::i;:::-;2657:119;2815:1;2840:53;2885:7;2876:6;2865:9;2861:22;2840:53;:::i;:::-;2830:63;;2786:117;2942:2;2968:53;3013:7;3004:6;2993:9;2989:22;2968:53;:::i;:::-;2958:63;;2913:118;2564:474;;;;;:::o;3044:619::-;3121:6;3129;3137;3186:2;3174:9;3165:7;3161:23;3157:32;3154:119;;;3192:79;;:::i;:::-;3154:119;3312:1;3337:53;3382:7;3373:6;3362:9;3358:22;3337:53;:::i;:::-;3327:63;;3283:117;3439:2;3465:53;3510:7;3501:6;3490:9;3486:22;3465:53;:::i;:::-;3455:63;;3410:118;3567:2;3593:53;3638:7;3629:6;3618:9;3614:22;3593:53;:::i;:::-;3583:63;;3538:118;3044:619;;;;;:::o;3669:468::-;3734:6;3742;3791:2;3779:9;3770:7;3766:23;3762:32;3759:119;;;3797:79;;:::i;:::-;3759:119;3917:1;3942:53;3987:7;3978:6;3967:9;3963:22;3942:53;:::i;:::-;3932:63;;3888:117;4044:2;4070:50;4112:7;4103:6;4092:9;4088:22;4070:50;:::i;:::-;4060:60;;4015:115;3669:468;;;;;:::o;4143:474::-;4211:6;4219;4268:2;4256:9;4247:7;4243:23;4239:32;4236:119;;;4274:79;;:::i;:::-;4236:119;4394:1;4419:53;4464:7;4455:6;4444:9;4440:22;4419:53;:::i;:::-;4409:63;;4365:117;4521:2;4547:53;4592:7;4583:6;4572:9;4568:22;4547:53;:::i;:::-;4537:63;;4492:118;4143:474;;;;;:::o;4623:539::-;4707:6;4756:2;4744:9;4735:7;4731:23;4727:32;4724:119;;;4762:79;;:::i;:::-;4724:119;4910:1;4899:9;4895:17;4882:31;4940:18;4932:6;4929:30;4926:117;;;4962:79;;:::i;:::-;4926:117;5067:78;5137:7;5128:6;5117:9;5113:22;5067:78;:::i;:::-;5057:88;;4853:302;4623:539;;;;:::o;5168:329::-;5227:6;5276:2;5264:9;5255:7;5251:23;5247:32;5244:119;;;5282:79;;:::i;:::-;5244:119;5402:1;5427:53;5472:7;5463:6;5452:9;5448:22;5427:53;:::i;:::-;5417:63;;5373:117;5168:329;;;;:::o;5503:619::-;5580:6;5588;5596;5645:2;5633:9;5624:7;5620:23;5616:32;5613:119;;;5651:79;;:::i;:::-;5613:119;5771:1;5796:53;5841:7;5832:6;5821:9;5817:22;5796:53;:::i;:::-;5786:63;;5742:117;5898:2;5924:53;5969:7;5960:6;5949:9;5945:22;5924:53;:::i;:::-;5914:63;;5869:118;6026:2;6052:53;6097:7;6088:6;6077:9;6073:22;6052:53;:::i;:::-;6042:63;;5997:118;5503:619;;;;;:::o;6128:663::-;6216:6;6224;6232;6281:2;6269:9;6260:7;6256:23;6252:32;6249:119;;;6287:79;;:::i;:::-;6249:119;6407:1;6432:64;6488:7;6479:6;6468:9;6464:22;6432:64;:::i;:::-;6422:74;;6378:128;6545:2;6571:64;6627:7;6618:6;6607:9;6603:22;6571:64;:::i;:::-;6561:74;;6516:129;6684:2;6710:64;6766:7;6757:6;6746:9;6742:22;6710:64;:::i;:::-;6700:74;;6655:129;6128:663;;;;;:::o;6797:179::-;6866:10;6887:46;6929:3;6921:6;6887:46;:::i;:::-;6965:4;6960:3;6956:14;6942:28;;6797:179;;;;:::o;6982:108::-;7059:24;7077:5;7059:24;:::i;:::-;7054:3;7047:37;6982:108;;:::o;7096:118::-;7183:24;7201:5;7183:24;:::i;:::-;7178:3;7171:37;7096:118;;:::o;7250:732::-;7369:3;7398:54;7446:5;7398:54;:::i;:::-;7468:86;7547:6;7542:3;7468:86;:::i;:::-;7461:93;;7578:56;7628:5;7578:56;:::i;:::-;7657:7;7688:1;7673:284;7698:6;7695:1;7692:13;7673:284;;;7774:6;7768:13;7801:63;7860:3;7845:13;7801:63;:::i;:::-;7794:70;;7887:60;7940:6;7887:60;:::i;:::-;7877:70;;7733:224;7720:1;7717;7713:9;7708:14;;7673:284;;;7677:14;7973:3;7966:10;;7374:608;;;7250:732;;;;:::o;7988:109::-;8069:21;8084:5;8069:21;:::i;:::-;8064:3;8057:34;7988:109;;:::o;8103:147::-;8198:45;8237:5;8198:45;:::i;:::-;8193:3;8186:58;8103:147;;:::o;8256:364::-;8344:3;8372:39;8405:5;8372:39;:::i;:::-;8427:71;8491:6;8486:3;8427:71;:::i;:::-;8420:78;;8507:52;8552:6;8547:3;8540:4;8533:5;8529:16;8507:52;:::i;:::-;8584:29;8606:6;8584:29;:::i;:::-;8579:3;8575:39;8568:46;;8348:272;8256:364;;;;:::o;8626:366::-;8768:3;8789:67;8853:2;8848:3;8789:67;:::i;:::-;8782:74;;8865:93;8954:3;8865:93;:::i;:::-;8983:2;8978:3;8974:12;8967:19;;8626:366;;;:::o;8998:::-;9140:3;9161:67;9225:2;9220:3;9161:67;:::i;:::-;9154:74;;9237:93;9326:3;9237:93;:::i;:::-;9355:2;9350:3;9346:12;9339:19;;8998:366;;;:::o;9370:::-;9512:3;9533:67;9597:2;9592:3;9533:67;:::i;:::-;9526:74;;9609:93;9698:3;9609:93;:::i;:::-;9727:2;9722:3;9718:12;9711:19;;9370:366;;;:::o;9742:::-;9884:3;9905:67;9969:2;9964:3;9905:67;:::i;:::-;9898:74;;9981:93;10070:3;9981:93;:::i;:::-;10099:2;10094:3;10090:12;10083:19;;9742:366;;;:::o;10114:::-;10256:3;10277:67;10341:2;10336:3;10277:67;:::i;:::-;10270:74;;10353:93;10442:3;10353:93;:::i;:::-;10471:2;10466:3;10462:12;10455:19;;10114:366;;;:::o;10486:::-;10628:3;10649:67;10713:2;10708:3;10649:67;:::i;:::-;10642:74;;10725:93;10814:3;10725:93;:::i;:::-;10843:2;10838:3;10834:12;10827:19;;10486:366;;;:::o;10858:::-;11000:3;11021:67;11085:2;11080:3;11021:67;:::i;:::-;11014:74;;11097:93;11186:3;11097:93;:::i;:::-;11215:2;11210:3;11206:12;11199:19;;10858:366;;;:::o;11230:::-;11372:3;11393:67;11457:2;11452:3;11393:67;:::i;:::-;11386:74;;11469:93;11558:3;11469:93;:::i;:::-;11587:2;11582:3;11578:12;11571:19;;11230:366;;;:::o;11602:::-;11744:3;11765:67;11829:2;11824:3;11765:67;:::i;:::-;11758:74;;11841:93;11930:3;11841:93;:::i;:::-;11959:2;11954:3;11950:12;11943:19;;11602:366;;;:::o;11974:::-;12116:3;12137:67;12201:2;12196:3;12137:67;:::i;:::-;12130:74;;12213:93;12302:3;12213:93;:::i;:::-;12331:2;12326:3;12322:12;12315:19;;11974:366;;;:::o;12346:::-;12488:3;12509:67;12573:2;12568:3;12509:67;:::i;:::-;12502:74;;12585:93;12674:3;12585:93;:::i;:::-;12703:2;12698:3;12694:12;12687:19;;12346:366;;;:::o;12718:::-;12860:3;12881:67;12945:2;12940:3;12881:67;:::i;:::-;12874:74;;12957:93;13046:3;12957:93;:::i;:::-;13075:2;13070:3;13066:12;13059:19;;12718:366;;;:::o;13090:::-;13232:3;13253:67;13317:2;13312:3;13253:67;:::i;:::-;13246:74;;13329:93;13418:3;13329:93;:::i;:::-;13447:2;13442:3;13438:12;13431:19;;13090:366;;;:::o;13462:::-;13604:3;13625:67;13689:2;13684:3;13625:67;:::i;:::-;13618:74;;13701:93;13790:3;13701:93;:::i;:::-;13819:2;13814:3;13810:12;13803:19;;13462:366;;;:::o;13834:::-;13976:3;13997:67;14061:2;14056:3;13997:67;:::i;:::-;13990:74;;14073:93;14162:3;14073:93;:::i;:::-;14191:2;14186:3;14182:12;14175:19;;13834:366;;;:::o;14206:::-;14348:3;14369:67;14433:2;14428:3;14369:67;:::i;:::-;14362:74;;14445:93;14534:3;14445:93;:::i;:::-;14563:2;14558:3;14554:12;14547:19;;14206:366;;;:::o;14578:::-;14720:3;14741:67;14805:2;14800:3;14741:67;:::i;:::-;14734:74;;14817:93;14906:3;14817:93;:::i;:::-;14935:2;14930:3;14926:12;14919:19;;14578:366;;;:::o;14950:::-;15092:3;15113:67;15177:2;15172:3;15113:67;:::i;:::-;15106:74;;15189:93;15278:3;15189:93;:::i;:::-;15307:2;15302:3;15298:12;15291:19;;14950:366;;;:::o;15322:::-;15464:3;15485:67;15549:2;15544:3;15485:67;:::i;:::-;15478:74;;15561:93;15650:3;15561:93;:::i;:::-;15679:2;15674:3;15670:12;15663:19;;15322:366;;;:::o;15694:::-;15836:3;15857:67;15921:2;15916:3;15857:67;:::i;:::-;15850:74;;15933:93;16022:3;15933:93;:::i;:::-;16051:2;16046:3;16042:12;16035:19;;15694:366;;;:::o;16066:::-;16208:3;16229:67;16293:2;16288:3;16229:67;:::i;:::-;16222:74;;16305:93;16394:3;16305:93;:::i;:::-;16423:2;16418:3;16414:12;16407:19;;16066:366;;;:::o;16438:::-;16580:3;16601:67;16665:2;16660:3;16601:67;:::i;:::-;16594:74;;16677:93;16766:3;16677:93;:::i;:::-;16795:2;16790:3;16786:12;16779:19;;16438:366;;;:::o;16810:::-;16952:3;16973:67;17037:2;17032:3;16973:67;:::i;:::-;16966:74;;17049:93;17138:3;17049:93;:::i;:::-;17167:2;17162:3;17158:12;17151:19;;16810:366;;;:::o;17182:118::-;17269:24;17287:5;17269:24;:::i;:::-;17264:3;17257:37;17182:118;;:::o;17306:112::-;17389:22;17405:5;17389:22;:::i;:::-;17384:3;17377:35;17306:112;;:::o;17424:222::-;17517:4;17555:2;17544:9;17540:18;17532:26;;17568:71;17636:1;17625:9;17621:17;17612:6;17568:71;:::i;:::-;17424:222;;;;:::o;17652:807::-;17901:4;17939:3;17928:9;17924:19;17916:27;;17953:71;18021:1;18010:9;18006:17;17997:6;17953:71;:::i;:::-;18034:72;18102:2;18091:9;18087:18;18078:6;18034:72;:::i;:::-;18116:80;18192:2;18181:9;18177:18;18168:6;18116:80;:::i;:::-;18206;18282:2;18271:9;18267:18;18258:6;18206:80;:::i;:::-;18296:73;18364:3;18353:9;18349:19;18340:6;18296:73;:::i;:::-;18379;18447:3;18436:9;18432:19;18423:6;18379:73;:::i;:::-;17652:807;;;;;;;;;:::o;18465:210::-;18552:4;18590:2;18579:9;18575:18;18567:26;;18603:65;18665:1;18654:9;18650:17;18641:6;18603:65;:::i;:::-;18465:210;;;;:::o;18681:313::-;18794:4;18832:2;18821:9;18817:18;18809:26;;18881:9;18875:4;18871:20;18867:1;18856:9;18852:17;18845:47;18909:78;18982:4;18973:6;18909:78;:::i;:::-;18901:86;;18681:313;;;;:::o;19000:419::-;19166:4;19204:2;19193:9;19189:18;19181:26;;19253:9;19247:4;19243:20;19239:1;19228:9;19224:17;19217:47;19281:131;19407:4;19281:131;:::i;:::-;19273:139;;19000:419;;;:::o;19425:::-;19591:4;19629:2;19618:9;19614:18;19606:26;;19678:9;19672:4;19668:20;19664:1;19653:9;19649:17;19642:47;19706:131;19832:4;19706:131;:::i;:::-;19698:139;;19425:419;;;:::o;19850:::-;20016:4;20054:2;20043:9;20039:18;20031:26;;20103:9;20097:4;20093:20;20089:1;20078:9;20074:17;20067:47;20131:131;20257:4;20131:131;:::i;:::-;20123:139;;19850:419;;;:::o;20275:::-;20441:4;20479:2;20468:9;20464:18;20456:26;;20528:9;20522:4;20518:20;20514:1;20503:9;20499:17;20492:47;20556:131;20682:4;20556:131;:::i;:::-;20548:139;;20275:419;;;:::o;20700:::-;20866:4;20904:2;20893:9;20889:18;20881:26;;20953:9;20947:4;20943:20;20939:1;20928:9;20924:17;20917:47;20981:131;21107:4;20981:131;:::i;:::-;20973:139;;20700:419;;;:::o;21125:::-;21291:4;21329:2;21318:9;21314:18;21306:26;;21378:9;21372:4;21368:20;21364:1;21353:9;21349:17;21342:47;21406:131;21532:4;21406:131;:::i;:::-;21398:139;;21125:419;;;:::o;21550:::-;21716:4;21754:2;21743:9;21739:18;21731:26;;21803:9;21797:4;21793:20;21789:1;21778:9;21774:17;21767:47;21831:131;21957:4;21831:131;:::i;:::-;21823:139;;21550:419;;;:::o;21975:::-;22141:4;22179:2;22168:9;22164:18;22156:26;;22228:9;22222:4;22218:20;22214:1;22203:9;22199:17;22192:47;22256:131;22382:4;22256:131;:::i;:::-;22248:139;;21975:419;;;:::o;22400:::-;22566:4;22604:2;22593:9;22589:18;22581:26;;22653:9;22647:4;22643:20;22639:1;22628:9;22624:17;22617:47;22681:131;22807:4;22681:131;:::i;:::-;22673:139;;22400:419;;;:::o;22825:::-;22991:4;23029:2;23018:9;23014:18;23006:26;;23078:9;23072:4;23068:20;23064:1;23053:9;23049:17;23042:47;23106:131;23232:4;23106:131;:::i;:::-;23098:139;;22825:419;;;:::o;23250:::-;23416:4;23454:2;23443:9;23439:18;23431:26;;23503:9;23497:4;23493:20;23489:1;23478:9;23474:17;23467:47;23531:131;23657:4;23531:131;:::i;:::-;23523:139;;23250:419;;;:::o;23675:::-;23841:4;23879:2;23868:9;23864:18;23856:26;;23928:9;23922:4;23918:20;23914:1;23903:9;23899:17;23892:47;23956:131;24082:4;23956:131;:::i;:::-;23948:139;;23675:419;;;:::o;24100:::-;24266:4;24304:2;24293:9;24289:18;24281:26;;24353:9;24347:4;24343:20;24339:1;24328:9;24324:17;24317:47;24381:131;24507:4;24381:131;:::i;:::-;24373:139;;24100:419;;;:::o;24525:::-;24691:4;24729:2;24718:9;24714:18;24706:26;;24778:9;24772:4;24768:20;24764:1;24753:9;24749:17;24742:47;24806:131;24932:4;24806:131;:::i;:::-;24798:139;;24525:419;;;:::o;24950:::-;25116:4;25154:2;25143:9;25139:18;25131:26;;25203:9;25197:4;25193:20;25189:1;25178:9;25174:17;25167:47;25231:131;25357:4;25231:131;:::i;:::-;25223:139;;24950:419;;;:::o;25375:::-;25541:4;25579:2;25568:9;25564:18;25556:26;;25628:9;25622:4;25618:20;25614:1;25603:9;25599:17;25592:47;25656:131;25782:4;25656:131;:::i;:::-;25648:139;;25375:419;;;:::o;25800:::-;25966:4;26004:2;25993:9;25989:18;25981:26;;26053:9;26047:4;26043:20;26039:1;26028:9;26024:17;26017:47;26081:131;26207:4;26081:131;:::i;:::-;26073:139;;25800:419;;;:::o;26225:::-;26391:4;26429:2;26418:9;26414:18;26406:26;;26478:9;26472:4;26468:20;26464:1;26453:9;26449:17;26442:47;26506:131;26632:4;26506:131;:::i;:::-;26498:139;;26225:419;;;:::o;26650:::-;26816:4;26854:2;26843:9;26839:18;26831:26;;26903:9;26897:4;26893:20;26889:1;26878:9;26874:17;26867:47;26931:131;27057:4;26931:131;:::i;:::-;26923:139;;26650:419;;;:::o;27075:::-;27241:4;27279:2;27268:9;27264:18;27256:26;;27328:9;27322:4;27318:20;27314:1;27303:9;27299:17;27292:47;27356:131;27482:4;27356:131;:::i;:::-;27348:139;;27075:419;;;:::o;27500:::-;27666:4;27704:2;27693:9;27689:18;27681:26;;27753:9;27747:4;27743:20;27739:1;27728:9;27724:17;27717:47;27781:131;27907:4;27781:131;:::i;:::-;27773:139;;27500:419;;;:::o;27925:::-;28091:4;28129:2;28118:9;28114:18;28106:26;;28178:9;28172:4;28168:20;28164:1;28153:9;28149:17;28142:47;28206:131;28332:4;28206:131;:::i;:::-;28198:139;;27925:419;;;:::o;28350:::-;28516:4;28554:2;28543:9;28539:18;28531:26;;28603:9;28597:4;28593:20;28589:1;28578:9;28574:17;28567:47;28631:131;28757:4;28631:131;:::i;:::-;28623:139;;28350:419;;;:::o;28775:222::-;28868:4;28906:2;28895:9;28891:18;28883:26;;28919:71;28987:1;28976:9;28972:17;28963:6;28919:71;:::i;:::-;28775:222;;;;:::o;29003:831::-;29266:4;29304:3;29293:9;29289:19;29281:27;;29318:71;29386:1;29375:9;29371:17;29362:6;29318:71;:::i;:::-;29399:80;29475:2;29464:9;29460:18;29451:6;29399:80;:::i;:::-;29526:9;29520:4;29516:20;29511:2;29500:9;29496:18;29489:48;29554:108;29657:4;29648:6;29554:108;:::i;:::-;29546:116;;29672:72;29740:2;29729:9;29725:18;29716:6;29672:72;:::i;:::-;29754:73;29822:3;29811:9;29807:19;29798:6;29754:73;:::i;:::-;29003:831;;;;;;;;:::o;29840:442::-;29989:4;30027:2;30016:9;30012:18;30004:26;;30040:71;30108:1;30097:9;30093:17;30084:6;30040:71;:::i;:::-;30121:72;30189:2;30178:9;30174:18;30165:6;30121:72;:::i;:::-;30203;30271:2;30260:9;30256:18;30247:6;30203:72;:::i;:::-;29840:442;;;;;;:::o;30288:214::-;30377:4;30415:2;30404:9;30400:18;30392:26;;30428:67;30492:1;30481:9;30477:17;30468:6;30428:67;:::i;:::-;30288:214;;;;:::o;30508:129::-;30542:6;30569:20;;:::i;:::-;30559:30;;30598:33;30626:4;30618:6;30598:33;:::i;:::-;30508:129;;;:::o;30643:75::-;30676:6;30709:2;30703:9;30693:19;;30643:75;:::o;30724:311::-;30801:4;30891:18;30883:6;30880:30;30877:56;;;30913:18;;:::i;:::-;30877:56;30963:4;30955:6;30951:17;30943:25;;31023:4;31017;31013:15;31005:23;;30724:311;;;:::o;31041:132::-;31108:4;31131:3;31123:11;;31161:4;31156:3;31152:14;31144:22;;31041:132;;;:::o;31179:114::-;31246:6;31280:5;31274:12;31264:22;;31179:114;;;:::o;31299:99::-;31351:6;31385:5;31379:12;31369:22;;31299:99;;;:::o;31404:113::-;31474:4;31506;31501:3;31497:14;31489:22;;31404:113;;;:::o;31523:184::-;31622:11;31656:6;31651:3;31644:19;31696:4;31691:3;31687:14;31672:29;;31523:184;;;;:::o;31713:169::-;31797:11;31831:6;31826:3;31819:19;31871:4;31866:3;31862:14;31847:29;;31713:169;;;;:::o;31888:305::-;31928:3;31947:20;31965:1;31947:20;:::i;:::-;31942:25;;31981:20;31999:1;31981:20;:::i;:::-;31976:25;;32135:1;32067:66;32063:74;32060:1;32057:81;32054:107;;;32141:18;;:::i;:::-;32054:107;32185:1;32182;32178:9;32171:16;;31888:305;;;;:::o;32199:185::-;32239:1;32256:20;32274:1;32256:20;:::i;:::-;32251:25;;32290:20;32308:1;32290:20;:::i;:::-;32285:25;;32329:1;32319:35;;32334:18;;:::i;:::-;32319:35;32376:1;32373;32369:9;32364:14;;32199:185;;;;:::o;32390:348::-;32430:7;32453:20;32471:1;32453:20;:::i;:::-;32448:25;;32487:20;32505:1;32487:20;:::i;:::-;32482:25;;32675:1;32607:66;32603:74;32600:1;32597:81;32592:1;32585:9;32578:17;32574:105;32571:131;;;32682:18;;:::i;:::-;32571:131;32730:1;32727;32723:9;32712:20;;32390:348;;;;:::o;32744:191::-;32784:4;32804:20;32822:1;32804:20;:::i;:::-;32799:25;;32838:20;32856:1;32838:20;:::i;:::-;32833:25;;32877:1;32874;32871:8;32868:34;;;32882:18;;:::i;:::-;32868:34;32927:1;32924;32920:9;32912:17;;32744:191;;;;:::o;32941:96::-;32978:7;33007:24;33025:5;33007:24;:::i;:::-;32996:35;;32941:96;;;:::o;33043:90::-;33077:7;33120:5;33113:13;33106:21;33095:32;;33043:90;;;:::o;33139:126::-;33176:7;33216:42;33209:5;33205:54;33194:65;;33139:126;;;:::o;33271:77::-;33308:7;33337:5;33326:16;;33271:77;;;:::o;33354:86::-;33389:7;33429:4;33422:5;33418:16;33407:27;;33354:86;;;:::o;33446:121::-;33504:9;33537:24;33555:5;33537:24;:::i;:::-;33524:37;;33446:121;;;:::o;33573:307::-;33641:1;33651:113;33665:6;33662:1;33659:13;33651:113;;;33750:1;33745:3;33741:11;33735:18;33731:1;33726:3;33722:11;33715:39;33687:2;33684:1;33680:10;33675:15;;33651:113;;;33782:6;33779:1;33776:13;33773:101;;;33862:1;33853:6;33848:3;33844:16;33837:27;33773:101;33622:258;33573:307;;;:::o;33886:320::-;33930:6;33967:1;33961:4;33957:12;33947:22;;34014:1;34008:4;34004:12;34035:18;34025:81;;34091:4;34083:6;34079:17;34069:27;;34025:81;34153:2;34145:6;34142:14;34122:18;34119:38;34116:84;;;34172:18;;:::i;:::-;34116:84;33937:269;33886:320;;;:::o;34212:281::-;34295:27;34317:4;34295:27;:::i;:::-;34287:6;34283:40;34425:6;34413:10;34410:22;34389:18;34377:10;34374:34;34371:62;34368:88;;;34436:18;;:::i;:::-;34368:88;34476:10;34472:2;34465:22;34255:238;34212:281;;:::o;34499:233::-;34538:3;34561:24;34579:5;34561:24;:::i;:::-;34552:33;;34607:66;34600:5;34597:77;34594:103;;;34677:18;;:::i;:::-;34594:103;34724:1;34717:5;34713:13;34706:20;;34499:233;;;:::o;34738:180::-;34786:77;34783:1;34776:88;34883:4;34880:1;34873:15;34907:4;34904:1;34897:15;34924:180;34972:77;34969:1;34962:88;35069:4;35066:1;35059:15;35093:4;35090:1;35083:15;35110:180;35158:77;35155:1;35148:88;35255:4;35252:1;35245:15;35279:4;35276:1;35269:15;35296:180;35344:77;35341:1;35334:88;35441:4;35438:1;35431:15;35465:4;35462:1;35455:15;35482:180;35530:77;35527:1;35520:88;35627:4;35624:1;35617:15;35651:4;35648:1;35641:15;35668:117;35777:1;35774;35767:12;35791:117;35900:1;35897;35890:12;35914:117;36023:1;36020;36013:12;36037:117;36146:1;36143;36136:12;36160:102;36201:6;36252:2;36248:7;36243:2;36236:5;36232:14;36228:28;36218:38;;36160:102;;;:::o;36268:222::-;36408:34;36404:1;36396:6;36392:14;36385:58;36477:5;36472:2;36464:6;36460:15;36453:30;36268:222;:::o;36496:179::-;36636:31;36632:1;36624:6;36620:14;36613:55;36496:179;:::o;36681:221::-;36821:34;36817:1;36809:6;36805:14;36798:58;36890:4;36885:2;36877:6;36873:15;36866:29;36681:221;:::o;36908:172::-;37048:24;37044:1;37036:6;37032:14;37025:48;36908:172;:::o;37086:225::-;37226:34;37222:1;37214:6;37210:14;37203:58;37295:8;37290:2;37282:6;37278:15;37271:33;37086:225;:::o;37317:221::-;37457:34;37453:1;37445:6;37441:14;37434:58;37526:4;37521:2;37513:6;37509:15;37502:29;37317:221;:::o;37544:223::-;37684:34;37680:1;37672:6;37668:14;37661:58;37753:6;37748:2;37740:6;37736:15;37729:31;37544:223;:::o;37773:244::-;37913:34;37909:1;37901:6;37897:14;37890:58;37982:27;37977:2;37969:6;37965:15;37958:52;37773:244;:::o;38023:179::-;38163:31;38159:1;38151:6;38147:14;38140:55;38023:179;:::o;38208:225::-;38348:34;38344:1;38336:6;38332:14;38325:58;38417:8;38412:2;38404:6;38400:15;38393:33;38208:225;:::o;38439:241::-;38579:34;38575:1;38567:6;38563:14;38556:58;38648:24;38643:2;38635:6;38631:15;38624:49;38439:241;:::o;38686:240::-;38826:34;38822:1;38814:6;38810:14;38803:58;38895:23;38890:2;38882:6;38878:15;38871:48;38686:240;:::o;38932:239::-;39072:34;39068:1;39060:6;39056:14;39049:58;39141:22;39136:2;39128:6;39124:15;39117:47;38932:239;:::o;39177:240::-;39317:34;39313:1;39305:6;39301:14;39294:58;39386:23;39381:2;39373:6;39369:15;39362:48;39177:240;:::o;39423:297::-;39563:34;39559:1;39551:6;39547:14;39540:58;39632:34;39627:2;39619:6;39615:15;39608:59;39701:11;39696:2;39688:6;39684:15;39677:36;39423:297;:::o;39726:182::-;39866:34;39862:1;39854:6;39850:14;39843:58;39726:182;:::o;39914:220::-;40054:34;40050:1;40042:6;40038:14;40031:58;40123:3;40118:2;40110:6;40106:15;40099:28;39914:220;:::o;40140:224::-;40280:34;40276:1;40268:6;40264:14;40257:58;40349:7;40344:2;40336:6;40332:15;40325:32;40140:224;:::o;40370:301::-;40510:34;40506:1;40498:6;40494:14;40487:58;40579:34;40574:2;40566:6;40562:15;40555:59;40648:15;40643:2;40635:6;40631:15;40624:40;40370:301;:::o;40677:223::-;40817:34;40813:1;40805:6;40801:14;40794:58;40886:6;40881:2;40873:6;40869:15;40862:31;40677:223;:::o;40906:169::-;41046:21;41042:1;41034:6;41030:14;41023:45;40906:169;:::o;41081:224::-;41221:34;41217:1;41209:6;41205:14;41198:58;41290:7;41285:2;41277:6;41273:15;41266:32;41081:224;:::o;41311:234::-;41451:34;41447:1;41439:6;41435:14;41428:58;41520:17;41515:2;41507:6;41503:15;41496:42;41311:234;:::o;41551:122::-;41624:24;41642:5;41624:24;:::i;:::-;41617:5;41614:35;41604:63;;41663:1;41660;41653:12;41604:63;41551:122;:::o;41679:116::-;41749:21;41764:5;41749:21;:::i;:::-;41742:5;41739:32;41729:60;;41785:1;41782;41775:12;41729:60;41679:116;:::o;41801:122::-;41874:24;41892:5;41874:24;:::i;:::-;41867:5;41864:35;41854:63;;41913:1;41910;41903:12;41854:63;41801:122;:::o
Swarm Source
ipfs://dfdcebbdfeec2ca229716d15a4328d4bc49418b46c8ba9c79684440913c5d4f9
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.