Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
250,000,000 CDR
Holders
66
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
346,416.87568155727069116 CDRValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CDR
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-09 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.15; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @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); } /** * @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 this function * 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 guidelines: functions revert instead * of 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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _createSupply(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 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 {} } /** * @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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } 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; } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SignedSafeMath { /** * @dev Returns the multiplication of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { return a * b; } /** * @dev Returns the integer division of two signed integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(int256 a, int256 b) internal pure returns (int256) { return a / b; } /** * @dev Returns the subtraction of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { return a - b; } /** * @dev Returns the addition of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { return a + b; } } // 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 no longer needed starting with Solidity 0.8. 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; } } } /** * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow * checks. * * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such an operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. * * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing * all math on `uint256` and `int256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint224 from uint256, reverting on * overflow (when the input is greater than largest uint224). * * Counterpart to Solidity's `uint224` operator. * * Requirements: * * - input must fit into 224 bits */ function toUint224(uint256 value) internal pure returns (uint224) { require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); return uint224(value); } /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint96 from uint256, reverting on * overflow (when the input is greater than largest uint96). * * Counterpart to Solidity's `uint96` operator. * * Requirements: * * - input must fit into 96 bits */ function toUint96(uint256 value) internal pure returns (uint96) { require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); return uint96(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits. */ function toUint8(uint256 value) internal pure returns (uint8) { require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Returns the downcasted int128 from int256, reverting on * overflow (when the input is less than smallest int128 or * greater than largest int128). * * Counterpart to Solidity's `int128` operator. * * Requirements: * * - input must fit into 128 bits * * _Available since v3.1._ */ function toInt128(int256 value) internal pure returns (int128) { require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits"); return int128(value); } /** * @dev Returns the downcasted int64 from int256, reverting on * overflow (when the input is less than smallest int64 or * greater than largest int64). * * Counterpart to Solidity's `int64` operator. * * Requirements: * * - input must fit into 64 bits * * _Available since v3.1._ */ function toInt64(int256 value) internal pure returns (int64) { require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits"); return int64(value); } /** * @dev Returns the downcasted int32 from int256, reverting on * overflow (when the input is less than smallest int32 or * greater than largest int32). * * Counterpart to Solidity's `int32` operator. * * Requirements: * * - input must fit into 32 bits * * _Available since v3.1._ */ function toInt32(int256 value) internal pure returns (int32) { require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits"); return int32(value); } /** * @dev Returns the downcasted int16 from int256, reverting on * overflow (when the input is less than smallest int16 or * greater than largest int16). * * Counterpart to Solidity's `int16` operator. * * Requirements: * * - input must fit into 16 bits * * _Available since v3.1._ */ function toInt16(int256 value) internal pure returns (int16) { require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits"); return int16(value); } /** * @dev Returns the downcasted int8 from int256, reverting on * overflow (when the input is less than smallest int8 or * greater than largest int8). * * Counterpart to Solidity's `int8` operator. * * Requirements: * * - input must fit into 8 bits. * * _Available since v3.1._ */ function toInt8(int256 value) internal pure returns (int8) { require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits"); return int8(value); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); return int256(value); } } contract CDR is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public isOpen = false; uint256 public launchTime; uint256 public swapTokensAtAmount = 80000 * (10**18); uint256 public maxWalletToken = 5000000 * (10**18); uint256 public liquidityFee = 1; uint256 public marketingFee = 4; uint256 public operationsFee = 1; uint256 private totalFees = liquidityFee.add(marketingFee).add(operationsFee); address payable public marketingWallet = payable(0x550018ffAeFE4fb90448a850cAD7578F3baB1321); address payable public operationsWallet = payable(0x8E43A715B3176ab20d8843512a473C4907E502C8); // cooldown bool public cooldownEnabled = true; uint256 public cooldownTimerInterval = 30 seconds; mapping (address => uint) private cooldown; // exlcude from fees and max wallet mapping (address => bool) private _isExcludedFromFees; event ExcludeFromFees(address indexed account, bool isExcluded); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() ERC20("Champs Defi Radio", "CDR") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; launchTime = block.timestamp; // exclude from paying fees or having max wallet limit excludeFromFees(owner(), true); excludeFromFees(marketingWallet, true); excludeFromFees(operationsWallet, true); excludeFromFees(address(this), true); /* an internal function that is only called here, and CANNOT be called ever again */ _createSupply(owner(), 250000000 * (10**18)); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if (from != owner() && to != owner()) { require(isOpen == true); } if (from != owner() && to != owner()) { if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFees[to] && cooldownEnabled) { // Cooldown require(cooldown[to] < block.timestamp); cooldown[to] = block.timestamp + (cooldownTimerInterval); } } if(from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){ uint256 contractBalanceRecepient = balanceOf(to); require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if( overMinTokenBalance && !inSwapAndLiquify && to==uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = swapTokensAtAmount; swapAndLiquify(contractTokenBalance); } // if any account belongs to _isExcludedFromFee account then remove the fee if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { uint256 fees; if(from==uniswapV2Pair || to==uniswapV2Pair) { fees = amount.mul(totalFees).div(100); if(to==uniswapV2Pair && (block.timestamp < launchTime + 24 hours)) { fees = amount.mul(12).div(100); } } amount = amount.sub(fees); if(fees > 0) { super._transfer(from, address(this), fees); } } super._transfer(from, to, amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 tokensForLiquidity = contractTokenBalance.mul(liquidityFee).div(totalFees); // split the Liquidity token balance into halves uint256 half = tokensForLiquidity.div(2); uint256 otherHalf = tokensForLiquidity.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); // swap and Send to wallets swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity)); marketingWallet.transfer(address(this).balance.mul(marketingFee).div(totalFees.sub(liquidityFee))); operationsWallet.transfer(address(this).balance); emit SwapAndLiquify(half, newBalance); } 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(); if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) { _approve(address(this), address(uniswapV2Router), ~uint256(0)); } // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } receive() external payable { } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } // enable cooldown between trades function changeCooldownSettings(bool newStatus, uint256 newInterval) external onlyOwner { cooldownEnabled = newStatus; cooldownTimerInterval = newInterval; } function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner { swapTokensAtAmount = _newAmount; } function setMaxWalletLimit(uint256 _newLimit) public onlyOwner { maxWalletToken = _newLimit; require(maxWalletToken >= totalSupply().div(100), "value too low"); } function openTrade() external onlyOwner { require(isOpen != true, "trade is Already open"); isOpen = true; launchTime = block.timestamp; } }
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":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":[{"internalType":"bool","name":"newStatus","type":"bool"},{"internalType":"uint256","name":"newInterval","type":"uint256"}],"name":"changeCooldownSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","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":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmouunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526001600660156101000a81548160ff0219169083151502179055506000600660166101000a81548160ff0219169083151502179055506910f0cf064dd5920000006008556a0422ca8b0a00a4250000006009556001600a556004600b556001600c556200009f600c546200008b600b54600a54620004fd60201b620015a31790919060201c565b620004fd60201b620015a31790919060201c565b600d5573550018ffaefe4fb90448a850cad7578f3bab1321600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738e43a715b3176ab20d8843512a473c4907e502c8600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60146101000a81548160ff021916908315150217905550601e6010553480156200017957600080fd5b506040518060400160405280601181526020017f4368616d7073204465666920526164696f0000000000000000000000000000008152506040518060400160405280600381526020017f43445200000000000000000000000000000000000000000000000000000000008152508160039081620001f7919062000bd8565b50806004908162000209919062000bd8565b5050506200022c620002206200051560201b60201c565b6200051d60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b9919062000d29565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000321573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000347919062000d29565b6040518363ffffffff1660e01b81526004016200036692919062000d6c565b6020604051808303816000875af115801562000386573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ac919062000d29565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050426007819055506200044c6200043e620005e360201b60201c565b60016200060d60201b60201c565b62000481600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200060d60201b60201c565b620004b6600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200060d60201b60201c565b620004c93060016200060d60201b60201c565b620004f5620004dd620005e360201b60201c565b6acecb8f27f4200f3a000000620007dc60201b60201c565b50506200101a565b600081836200050d919062000dc8565b905092915050565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200061d6200051560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000643620005e360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200069c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006939062000e86565b60405180910390fd5b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000731576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007289062000f1e565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007d0919062000f5d565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200084e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008459062000fca565b60405180910390fd5b62000862600083836200095460201b60201c565b806002600082825462000876919062000dc8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008cd919062000dc8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000934919062000ffd565b60405180910390a362000950600083836200095960201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009e057607f821691505b602082108103620009f657620009f562000998565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a21565b62000a6c868362000a21565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ab962000ab362000aad8462000a84565b62000a8e565b62000a84565b9050919050565b6000819050919050565b62000ad58362000a98565b62000aed62000ae48262000ac0565b84845462000a2e565b825550505050565b600090565b62000b0462000af5565b62000b1181848462000aca565b505050565b5b8181101562000b395762000b2d60008262000afa565b60018101905062000b17565b5050565b601f82111562000b885762000b5281620009fc565b62000b5d8462000a11565b8101602085101562000b6d578190505b62000b8562000b7c8562000a11565b83018262000b16565b50505b505050565b600082821c905092915050565b600062000bad6000198460080262000b8d565b1980831691505092915050565b600062000bc8838362000b9a565b9150826002028217905092915050565b62000be3826200095e565b67ffffffffffffffff81111562000bff5762000bfe62000969565b5b62000c0b8254620009c7565b62000c1882828562000b3d565b600060209050601f83116001811462000c50576000841562000c3b578287015190505b62000c47858262000bba565b86555062000cb7565b601f19841662000c6086620009fc565b60005b8281101562000c8a5784890151825560018201915060208501945060208101905062000c63565b8683101562000caa578489015162000ca6601f89168262000b9a565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cf18262000cc4565b9050919050565b62000d038162000ce4565b811462000d0f57600080fd5b50565b60008151905062000d238162000cf8565b92915050565b60006020828403121562000d425762000d4162000cbf565b5b600062000d528482850162000d12565b91505092915050565b62000d668162000ce4565b82525050565b600060408201905062000d83600083018562000d5b565b62000d92602083018462000d5b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dd58262000a84565b915062000de28362000a84565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e1a5762000e1962000d99565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e6e60208362000e25565b915062000e7b8262000e36565b602082019050919050565b6000602082019050818103600083015262000ea18162000e5f565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000f06602a8362000e25565b915062000f138262000ea8565b604082019050919050565b6000602082019050818103600083015262000f398162000ef7565b9050919050565b60008115159050919050565b62000f578162000f40565b82525050565b600060208201905062000f74600083018462000f4c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fb2601f8362000e25565b915062000fbf8262000f7a565b602082019050919050565b6000602082019050818103600083015262000fe58162000fa3565b9050919050565b62000ff78162000a84565b82525050565b600060208201905062001014600083018462000fec565b92915050565b6080516139616200106060003960008181610b9a0152818161199a01528181611b5401528181611ceb01528181611e1201528181611e670152611ee601526139616000f3fe6080604052600436106102085760003560e01c8063728d41c911610118578063a985ceef116100a0578063e2f456051161006f578063e2f4560514610790578063e6c75f71146107bb578063f2fde38b146107e6578063fb201b1d1461080f578063fd72e22a146108265761020f565b8063a985ceef146106d6578063c024666814610701578063c49b9a801461072a578063dd62ed3e146107535761020f565b80638da5cb5b116100e75780638da5cb5b146105db57806395d89b411461060657806398118cb414610631578063a457c2d71461065c578063a9059cbb146106995761020f565b8063728d41c914610533578063750c11b61461055c57806375f0a87414610585578063790ca413146105b05761020f565b8063395093511161019b5780634fbee1931161016a5780634fbee1931461044c5780636b67c4df1461048957806370a08231146104b4578063715018a6146104f1578063722b62ad146105085761020f565b8063395093511461038e57806347535d7b146103cb57806349bd5a5e146103f65780634a74bb02146104215761020f565b80631694505e116101d75780631694505e146102d057806318160ddd146102fb57806323b872dd14610326578063313ce567146103635761020f565b806306fdde0314610214578063090896be1461023f578063095ea7b31461026a5780630d45c0e3146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610851565b6040516102369190612943565b60405180910390f35b34801561024b57600080fd5b506102546108e3565b604051610261919061297e565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c9190612a28565b6108e9565b60405161029e9190612a83565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c99190612aca565b610907565b005b3480156102dc57600080fd5b506102e56109a8565b6040516102f29190612b69565b60405180910390f35b34801561030757600080fd5b506103106109ce565b60405161031d919061297e565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190612b84565b6109d8565b60405161035a9190612a83565b60405180910390f35b34801561036f57600080fd5b50610378610ad0565b6040516103859190612bf3565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190612a28565b610ad9565b6040516103c29190612a83565b60405180910390f35b3480156103d757600080fd5b506103e0610b85565b6040516103ed9190612a83565b60405180910390f35b34801561040257600080fd5b5061040b610b98565b6040516104189190612c1d565b60405180910390f35b34801561042d57600080fd5b50610436610bbc565b6040516104439190612a83565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e9190612c38565b610bcf565b6040516104809190612a83565b60405180910390f35b34801561049557600080fd5b5061049e610c25565b6040516104ab919061297e565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190612c38565b610c2b565b6040516104e8919061297e565b60405180910390f35b3480156104fd57600080fd5b50610506610c73565b005b34801561051457600080fd5b5061051d610cfb565b60405161052a919061297e565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190612c65565b610d01565b005b34801561056857600080fd5b50610583600480360381019061057e9190612c65565b610de6565b005b34801561059157600080fd5b5061059a610e6c565b6040516105a79190612cb3565b60405180910390f35b3480156105bc57600080fd5b506105c5610e92565b6040516105d2919061297e565b60405180910390f35b3480156105e757600080fd5b506105f0610e98565b6040516105fd9190612c1d565b60405180910390f35b34801561061257600080fd5b5061061b610ec2565b6040516106289190612943565b60405180910390f35b34801561063d57600080fd5b50610646610f54565b604051610653919061297e565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190612a28565b610f5a565b6040516106909190612a83565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190612a28565b611045565b6040516106cd9190612a83565b60405180910390f35b3480156106e257600080fd5b506106eb611063565b6040516106f89190612a83565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190612cce565b611076565b005b34801561073657600080fd5b50610751600480360381019061074c9190612d0e565b61122d565b005b34801561075f57600080fd5b5061077a60048036038101906107759190612d3b565b6112fd565b604051610787919061297e565b60405180910390f35b34801561079c57600080fd5b506107a5611384565b6040516107b2919061297e565b60405180910390f35b3480156107c757600080fd5b506107d061138a565b6040516107dd919061297e565b60405180910390f35b3480156107f257600080fd5b5061080d60048036038101906108089190612c38565b611390565b005b34801561081b57600080fd5b50610824611487565b005b34801561083257600080fd5b5061083b61157d565b6040516108489190612cb3565b60405180910390f35b60606003805461086090612daa565b80601f016020809104026020016040519081016040528092919081815260200182805461088c90612daa565b80156108d95780601f106108ae576101008083540402835291602001916108d9565b820191906000526020600020905b8154815290600101906020018083116108bc57829003601f168201915b5050505050905090565b600c5481565b60006108fd6108f66115b9565b84846115c1565b6001905092915050565b61090f6115b9565b73ffffffffffffffffffffffffffffffffffffffff1661092d610e98565b73ffffffffffffffffffffffffffffffffffffffff1614610983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097a90612e27565b60405180910390fd5b81600f60146101000a81548160ff021916908315150217905550806010819055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109e584848461178a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a306115b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790612eb9565b60405180910390fd5b610ac485610abc6115b9565b8584036115c1565b60019150509392505050565b60006012905090565b6000610b7b610ae66115b9565b848460016000610af46115b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b769190612f08565b6115c1565b6001905092915050565b600660169054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c7b6115b9565b73ffffffffffffffffffffffffffffffffffffffff16610c99610e98565b73ffffffffffffffffffffffffffffffffffffffff1614610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690612e27565b60405180910390fd5b610cf96000611fbd565b565b60105481565b610d096115b9565b73ffffffffffffffffffffffffffffffffffffffff16610d27610e98565b73ffffffffffffffffffffffffffffffffffffffff1614610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490612e27565b60405180910390fd5b80600981905550610d9f6064610d916109ce565b61208390919063ffffffff16565b6009541015610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90612faa565b60405180910390fd5b50565b610dee6115b9565b73ffffffffffffffffffffffffffffffffffffffff16610e0c610e98565b73ffffffffffffffffffffffffffffffffffffffff1614610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990612e27565b60405180910390fd5b8060088190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ed190612daa565b80601f0160208091040260200160405190810160405280929190818152602001828054610efd90612daa565b8015610f4a5780601f10610f1f57610100808354040283529160200191610f4a565b820191906000526020600020905b815481529060010190602001808311610f2d57829003601f168201915b5050505050905090565b600a5481565b60008060016000610f696115b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d9061303c565b60405180910390fd5b61103a6110316115b9565b858584036115c1565b600191505092915050565b60006110596110526115b9565b848461178a565b6001905092915050565b600f60149054906101000a900460ff1681565b61107e6115b9565b73ffffffffffffffffffffffffffffffffffffffff1661109c610e98565b73ffffffffffffffffffffffffffffffffffffffff16146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990612e27565b60405180910390fd5b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b906130ce565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516112219190612a83565b60405180910390a25050565b6112356115b9565b73ffffffffffffffffffffffffffffffffffffffff16611253610e98565b73ffffffffffffffffffffffffffffffffffffffff16146112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a090612e27565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516112f29190612a83565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b60095481565b6113986115b9565b73ffffffffffffffffffffffffffffffffffffffff166113b6610e98565b73ffffffffffffffffffffffffffffffffffffffff161461140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390612e27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290613160565b60405180910390fd5b61148481611fbd565b50565b61148f6115b9565b73ffffffffffffffffffffffffffffffffffffffff166114ad610e98565b73ffffffffffffffffffffffffffffffffffffffff1614611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90612e27565b60405180910390fd5b60011515600660169054906101000a900460ff16151503611559576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611550906131cc565b60405180910390fd5b6001600660166101000a81548160ff02191690831515021790555042600781905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081836115b19190612f08565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116279061325e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361169f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611696906132f0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161177d919061297e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f090613382565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185f90613414565b60405180910390fd5b600081036118815761187c83836000612099565b611fb8565b611889610e98565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118f757506118c7610e98565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561191d5760011515600660169054906101000a900460ff1615151461191c57600080fd5b5b611925610e98565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119935750611963610e98565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611b52577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611a415750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a975750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611aaf5750600f60149054906101000a900460ff165b15611b515742601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611aff57600080fd5b60105442611b0d9190612f08565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611bf75750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c4d5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cb1576000611c5d83610c2b565b90506009548282611c6e9190612f08565b1115611caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca6906134a6565b60405180910390fd5b505b6000611cbc30610c2b565b905060006008548210159050808015611ce25750600660149054906101000a900460ff16155b8015611d3957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611d515750600660159054906101000a900460ff165b15611d65576008549150611d6482612318565b5b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e095750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611faa5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480611eb557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15611f7e57611ee26064611ed4600d548761254390919063ffffffff16565b61208390919063ffffffff16565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611f4e575062015180600754611f4b9190612f08565b42105b15611f7d57611f7a6064611f6c600c8761254390919063ffffffff16565b61208390919063ffffffff16565b90505b5b611f91818561255990919063ffffffff16565b93506000811115611fa857611fa7863083612099565b5b505b611fb5858585612099565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361209191906134f5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ff90613382565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e90613414565b60405180910390fd5b61218283838361256f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ff90613598565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461229b9190612f08565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122ff919061297e565b60405180910390a3612312848484612574565b50505050565b6001600660146101000a81548160ff021916908315150217905550600061235e600d54612350600a548561254390919063ffffffff16565b61208390919063ffffffff16565b9050600061237660028361208390919063ffffffff16565b9050600061238d828461255990919063ffffffff16565b9050600047905061239d83612579565b60006123b2824761255990919063ffffffff16565b90506123be83826127f2565b6123d96123d4868861255990919063ffffffff16565b612579565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61245261242f600a54600d5461255990919063ffffffff16565b612444600b544761254390919063ffffffff16565b61208390919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561247d573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156124e6573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516125189291906135b8565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b6000818361255191906135e1565b905092915050565b60008183612567919061363b565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156125965761259561366f565b5b6040519080825280602002602001820160405280156125c45781602001602082028036833780820191505090505b50905030816000815181106125dc576125db61369e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a791906136e2565b816001815181106126bb576126ba61369e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161272230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166112fd565b10156127585761275730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196115c1565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127bc959493929190613808565b600060405180830381600087803b1580156127d657600080fd5b505af11580156127ea573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061283e610e98565b426040518863ffffffff1660e01b815260040161286096959493929190613862565b60606040518083038185885af115801561287e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128a391906138d8565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156128e45780820151818401526020810190506128c9565b838111156128f3576000848401525b50505050565b6000601f19601f8301169050919050565b6000612915826128aa565b61291f81856128b5565b935061292f8185602086016128c6565b612938816128f9565b840191505092915050565b6000602082019050818103600083015261295d818461290a565b905092915050565b6000819050919050565b61297881612965565b82525050565b6000602082019050612993600083018461296f565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129c98261299e565b9050919050565b6129d9816129be565b81146129e457600080fd5b50565b6000813590506129f6816129d0565b92915050565b612a0581612965565b8114612a1057600080fd5b50565b600081359050612a22816129fc565b92915050565b60008060408385031215612a3f57612a3e612999565b5b6000612a4d858286016129e7565b9250506020612a5e85828601612a13565b9150509250929050565b60008115159050919050565b612a7d81612a68565b82525050565b6000602082019050612a986000830184612a74565b92915050565b612aa781612a68565b8114612ab257600080fd5b50565b600081359050612ac481612a9e565b92915050565b60008060408385031215612ae157612ae0612999565b5b6000612aef85828601612ab5565b9250506020612b0085828601612a13565b9150509250929050565b6000819050919050565b6000612b2f612b2a612b258461299e565b612b0a565b61299e565b9050919050565b6000612b4182612b14565b9050919050565b6000612b5382612b36565b9050919050565b612b6381612b48565b82525050565b6000602082019050612b7e6000830184612b5a565b92915050565b600080600060608486031215612b9d57612b9c612999565b5b6000612bab868287016129e7565b9350506020612bbc868287016129e7565b9250506040612bcd86828701612a13565b9150509250925092565b600060ff82169050919050565b612bed81612bd7565b82525050565b6000602082019050612c086000830184612be4565b92915050565b612c17816129be565b82525050565b6000602082019050612c326000830184612c0e565b92915050565b600060208284031215612c4e57612c4d612999565b5b6000612c5c848285016129e7565b91505092915050565b600060208284031215612c7b57612c7a612999565b5b6000612c8984828501612a13565b91505092915050565b6000612c9d8261299e565b9050919050565b612cad81612c92565b82525050565b6000602082019050612cc86000830184612ca4565b92915050565b60008060408385031215612ce557612ce4612999565b5b6000612cf3858286016129e7565b9250506020612d0485828601612ab5565b9150509250929050565b600060208284031215612d2457612d23612999565b5b6000612d3284828501612ab5565b91505092915050565b60008060408385031215612d5257612d51612999565b5b6000612d60858286016129e7565b9250506020612d71858286016129e7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dc257607f821691505b602082108103612dd557612dd4612d7b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e116020836128b5565b9150612e1c82612ddb565b602082019050919050565b60006020820190508181036000830152612e4081612e04565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612ea36028836128b5565b9150612eae82612e47565b604082019050919050565b60006020820190508181036000830152612ed281612e96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f1382612965565b9150612f1e83612965565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f5357612f52612ed9565b5b828201905092915050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000612f94600d836128b5565b9150612f9f82612f5e565b602082019050919050565b60006020820190508181036000830152612fc381612f87565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006130266025836128b5565b915061303182612fca565b604082019050919050565b6000602082019050818103600083015261305581613019565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006130b8602a836128b5565b91506130c38261305c565b604082019050919050565b600060208201905081810360008301526130e7816130ab565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061314a6026836128b5565b9150613155826130ee565b604082019050919050565b600060208201905081810360008301526131798161313d565b9050919050565b7f747261646520697320416c7265616479206f70656e0000000000000000000000600082015250565b60006131b66015836128b5565b91506131c182613180565b602082019050919050565b600060208201905081810360008301526131e5816131a9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132486024836128b5565b9150613253826131ec565b604082019050919050565b600060208201905081810360008301526132778161323b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006132da6022836128b5565b91506132e58261327e565b604082019050919050565b60006020820190508181036000830152613309816132cd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061336c6025836128b5565b915061337782613310565b604082019050919050565b6000602082019050818103600083015261339b8161335f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133fe6023836128b5565b9150613409826133a2565b604082019050919050565b6000602082019050818103600083015261342d816133f1565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006134906024836128b5565b915061349b82613434565b604082019050919050565b600060208201905081810360008301526134bf81613483565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061350082612965565b915061350b83612965565b92508261351b5761351a6134c6565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006135826026836128b5565b915061358d82613526565b604082019050919050565b600060208201905081810360008301526135b181613575565b9050919050565b60006040820190506135cd600083018561296f565b6135da602083018461296f565b9392505050565b60006135ec82612965565b91506135f783612965565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136305761362f612ed9565b5b828202905092915050565b600061364682612965565b915061365183612965565b92508282101561366457613663612ed9565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506136dc816129d0565b92915050565b6000602082840312156136f8576136f7612999565b5b6000613706848285016136cd565b91505092915050565b6000819050919050565b600061373461372f61372a8461370f565b612b0a565b612965565b9050919050565b61374481613719565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61377f816129be565b82525050565b60006137918383613776565b60208301905092915050565b6000602082019050919050565b60006137b58261374a565b6137bf8185613755565b93506137ca83613766565b8060005b838110156137fb5781516137e28882613785565b97506137ed8361379d565b9250506001810190506137ce565b5085935050505092915050565b600060a08201905061381d600083018861296f565b61382a602083018761373b565b818103604083015261383c81866137aa565b905061384b6060830185612c0e565b613858608083018461296f565b9695505050505050565b600060c0820190506138776000830189612c0e565b613884602083018861296f565b613891604083018761373b565b61389e606083018661373b565b6138ab6080830185612c0e565b6138b860a083018461296f565b979650505050505050565b6000815190506138d2816129fc565b92915050565b6000806000606084860312156138f1576138f0612999565b5b60006138ff868287016138c3565b9350506020613910868287016138c3565b9250506040613921868287016138c3565b915050925092509256fea264697066735822122099efb929b2d7c94353d1e7c76d4d9199f6c4dfa2a144c0988c33c120dcca676164736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102085760003560e01c8063728d41c911610118578063a985ceef116100a0578063e2f456051161006f578063e2f4560514610790578063e6c75f71146107bb578063f2fde38b146107e6578063fb201b1d1461080f578063fd72e22a146108265761020f565b8063a985ceef146106d6578063c024666814610701578063c49b9a801461072a578063dd62ed3e146107535761020f565b80638da5cb5b116100e75780638da5cb5b146105db57806395d89b411461060657806398118cb414610631578063a457c2d71461065c578063a9059cbb146106995761020f565b8063728d41c914610533578063750c11b61461055c57806375f0a87414610585578063790ca413146105b05761020f565b8063395093511161019b5780634fbee1931161016a5780634fbee1931461044c5780636b67c4df1461048957806370a08231146104b4578063715018a6146104f1578063722b62ad146105085761020f565b8063395093511461038e57806347535d7b146103cb57806349bd5a5e146103f65780634a74bb02146104215761020f565b80631694505e116101d75780631694505e146102d057806318160ddd146102fb57806323b872dd14610326578063313ce567146103635761020f565b806306fdde0314610214578063090896be1461023f578063095ea7b31461026a5780630d45c0e3146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610851565b6040516102369190612943565b60405180910390f35b34801561024b57600080fd5b506102546108e3565b604051610261919061297e565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c9190612a28565b6108e9565b60405161029e9190612a83565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c99190612aca565b610907565b005b3480156102dc57600080fd5b506102e56109a8565b6040516102f29190612b69565b60405180910390f35b34801561030757600080fd5b506103106109ce565b60405161031d919061297e565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190612b84565b6109d8565b60405161035a9190612a83565b60405180910390f35b34801561036f57600080fd5b50610378610ad0565b6040516103859190612bf3565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190612a28565b610ad9565b6040516103c29190612a83565b60405180910390f35b3480156103d757600080fd5b506103e0610b85565b6040516103ed9190612a83565b60405180910390f35b34801561040257600080fd5b5061040b610b98565b6040516104189190612c1d565b60405180910390f35b34801561042d57600080fd5b50610436610bbc565b6040516104439190612a83565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e9190612c38565b610bcf565b6040516104809190612a83565b60405180910390f35b34801561049557600080fd5b5061049e610c25565b6040516104ab919061297e565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190612c38565b610c2b565b6040516104e8919061297e565b60405180910390f35b3480156104fd57600080fd5b50610506610c73565b005b34801561051457600080fd5b5061051d610cfb565b60405161052a919061297e565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190612c65565b610d01565b005b34801561056857600080fd5b50610583600480360381019061057e9190612c65565b610de6565b005b34801561059157600080fd5b5061059a610e6c565b6040516105a79190612cb3565b60405180910390f35b3480156105bc57600080fd5b506105c5610e92565b6040516105d2919061297e565b60405180910390f35b3480156105e757600080fd5b506105f0610e98565b6040516105fd9190612c1d565b60405180910390f35b34801561061257600080fd5b5061061b610ec2565b6040516106289190612943565b60405180910390f35b34801561063d57600080fd5b50610646610f54565b604051610653919061297e565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190612a28565b610f5a565b6040516106909190612a83565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190612a28565b611045565b6040516106cd9190612a83565b60405180910390f35b3480156106e257600080fd5b506106eb611063565b6040516106f89190612a83565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190612cce565b611076565b005b34801561073657600080fd5b50610751600480360381019061074c9190612d0e565b61122d565b005b34801561075f57600080fd5b5061077a60048036038101906107759190612d3b565b6112fd565b604051610787919061297e565b60405180910390f35b34801561079c57600080fd5b506107a5611384565b6040516107b2919061297e565b60405180910390f35b3480156107c757600080fd5b506107d061138a565b6040516107dd919061297e565b60405180910390f35b3480156107f257600080fd5b5061080d60048036038101906108089190612c38565b611390565b005b34801561081b57600080fd5b50610824611487565b005b34801561083257600080fd5b5061083b61157d565b6040516108489190612cb3565b60405180910390f35b60606003805461086090612daa565b80601f016020809104026020016040519081016040528092919081815260200182805461088c90612daa565b80156108d95780601f106108ae576101008083540402835291602001916108d9565b820191906000526020600020905b8154815290600101906020018083116108bc57829003601f168201915b5050505050905090565b600c5481565b60006108fd6108f66115b9565b84846115c1565b6001905092915050565b61090f6115b9565b73ffffffffffffffffffffffffffffffffffffffff1661092d610e98565b73ffffffffffffffffffffffffffffffffffffffff1614610983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097a90612e27565b60405180910390fd5b81600f60146101000a81548160ff021916908315150217905550806010819055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109e584848461178a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a306115b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790612eb9565b60405180910390fd5b610ac485610abc6115b9565b8584036115c1565b60019150509392505050565b60006012905090565b6000610b7b610ae66115b9565b848460016000610af46115b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b769190612f08565b6115c1565b6001905092915050565b600660169054906101000a900460ff1681565b7f00000000000000000000000003dd838c9b532f5b0631f3396e70f718d689c74781565b600660159054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c7b6115b9565b73ffffffffffffffffffffffffffffffffffffffff16610c99610e98565b73ffffffffffffffffffffffffffffffffffffffff1614610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690612e27565b60405180910390fd5b610cf96000611fbd565b565b60105481565b610d096115b9565b73ffffffffffffffffffffffffffffffffffffffff16610d27610e98565b73ffffffffffffffffffffffffffffffffffffffff1614610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490612e27565b60405180910390fd5b80600981905550610d9f6064610d916109ce565b61208390919063ffffffff16565b6009541015610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90612faa565b60405180910390fd5b50565b610dee6115b9565b73ffffffffffffffffffffffffffffffffffffffff16610e0c610e98565b73ffffffffffffffffffffffffffffffffffffffff1614610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990612e27565b60405180910390fd5b8060088190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ed190612daa565b80601f0160208091040260200160405190810160405280929190818152602001828054610efd90612daa565b8015610f4a5780601f10610f1f57610100808354040283529160200191610f4a565b820191906000526020600020905b815481529060010190602001808311610f2d57829003601f168201915b5050505050905090565b600a5481565b60008060016000610f696115b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d9061303c565b60405180910390fd5b61103a6110316115b9565b858584036115c1565b600191505092915050565b60006110596110526115b9565b848461178a565b6001905092915050565b600f60149054906101000a900460ff1681565b61107e6115b9565b73ffffffffffffffffffffffffffffffffffffffff1661109c610e98565b73ffffffffffffffffffffffffffffffffffffffff16146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990612e27565b60405180910390fd5b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b906130ce565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516112219190612a83565b60405180910390a25050565b6112356115b9565b73ffffffffffffffffffffffffffffffffffffffff16611253610e98565b73ffffffffffffffffffffffffffffffffffffffff16146112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a090612e27565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516112f29190612a83565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b60095481565b6113986115b9565b73ffffffffffffffffffffffffffffffffffffffff166113b6610e98565b73ffffffffffffffffffffffffffffffffffffffff161461140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390612e27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290613160565b60405180910390fd5b61148481611fbd565b50565b61148f6115b9565b73ffffffffffffffffffffffffffffffffffffffff166114ad610e98565b73ffffffffffffffffffffffffffffffffffffffff1614611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90612e27565b60405180910390fd5b60011515600660169054906101000a900460ff16151503611559576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611550906131cc565b60405180910390fd5b6001600660166101000a81548160ff02191690831515021790555042600781905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081836115b19190612f08565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116279061325e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361169f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611696906132f0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161177d919061297e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f090613382565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185f90613414565b60405180910390fd5b600081036118815761187c83836000612099565b611fb8565b611889610e98565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118f757506118c7610e98565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561191d5760011515600660169054906101000a900460ff1615151461191c57600080fd5b5b611925610e98565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119935750611963610e98565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611b52577f00000000000000000000000003dd838c9b532f5b0631f3396e70f718d689c74773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611a415750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a975750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611aaf5750600f60149054906101000a900460ff165b15611b515742601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611aff57600080fd5b60105442611b0d9190612f08565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b7f00000000000000000000000003dd838c9b532f5b0631f3396e70f718d689c74773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611bf75750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c4d5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cb1576000611c5d83610c2b565b90506009548282611c6e9190612f08565b1115611caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca6906134a6565b60405180910390fd5b505b6000611cbc30610c2b565b905060006008548210159050808015611ce25750600660149054906101000a900460ff16155b8015611d3957507f00000000000000000000000003dd838c9b532f5b0631f3396e70f718d689c74773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611d515750600660159054906101000a900460ff165b15611d65576008549150611d6482612318565b5b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e095750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611faa5760007f00000000000000000000000003dd838c9b532f5b0631f3396e70f718d689c74773ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480611eb557507f00000000000000000000000003dd838c9b532f5b0631f3396e70f718d689c74773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15611f7e57611ee26064611ed4600d548761254390919063ffffffff16565b61208390919063ffffffff16565b90507f00000000000000000000000003dd838c9b532f5b0631f3396e70f718d689c74773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611f4e575062015180600754611f4b9190612f08565b42105b15611f7d57611f7a6064611f6c600c8761254390919063ffffffff16565b61208390919063ffffffff16565b90505b5b611f91818561255990919063ffffffff16565b93506000811115611fa857611fa7863083612099565b5b505b611fb5858585612099565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361209191906134f5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ff90613382565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e90613414565b60405180910390fd5b61218283838361256f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ff90613598565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461229b9190612f08565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122ff919061297e565b60405180910390a3612312848484612574565b50505050565b6001600660146101000a81548160ff021916908315150217905550600061235e600d54612350600a548561254390919063ffffffff16565b61208390919063ffffffff16565b9050600061237660028361208390919063ffffffff16565b9050600061238d828461255990919063ffffffff16565b9050600047905061239d83612579565b60006123b2824761255990919063ffffffff16565b90506123be83826127f2565b6123d96123d4868861255990919063ffffffff16565b612579565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61245261242f600a54600d5461255990919063ffffffff16565b612444600b544761254390919063ffffffff16565b61208390919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561247d573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156124e6573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516125189291906135b8565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b6000818361255191906135e1565b905092915050565b60008183612567919061363b565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156125965761259561366f565b5b6040519080825280602002602001820160405280156125c45781602001602082028036833780820191505090505b50905030816000815181106125dc576125db61369e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a791906136e2565b816001815181106126bb576126ba61369e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161272230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166112fd565b10156127585761275730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196115c1565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127bc959493929190613808565b600060405180830381600087803b1580156127d657600080fd5b505af11580156127ea573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061283e610e98565b426040518863ffffffff1660e01b815260040161286096959493929190613862565b60606040518083038185885af115801561287e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128a391906138d8565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156128e45780820151818401526020810190506128c9565b838111156128f3576000848401525b50505050565b6000601f19601f8301169050919050565b6000612915826128aa565b61291f81856128b5565b935061292f8185602086016128c6565b612938816128f9565b840191505092915050565b6000602082019050818103600083015261295d818461290a565b905092915050565b6000819050919050565b61297881612965565b82525050565b6000602082019050612993600083018461296f565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129c98261299e565b9050919050565b6129d9816129be565b81146129e457600080fd5b50565b6000813590506129f6816129d0565b92915050565b612a0581612965565b8114612a1057600080fd5b50565b600081359050612a22816129fc565b92915050565b60008060408385031215612a3f57612a3e612999565b5b6000612a4d858286016129e7565b9250506020612a5e85828601612a13565b9150509250929050565b60008115159050919050565b612a7d81612a68565b82525050565b6000602082019050612a986000830184612a74565b92915050565b612aa781612a68565b8114612ab257600080fd5b50565b600081359050612ac481612a9e565b92915050565b60008060408385031215612ae157612ae0612999565b5b6000612aef85828601612ab5565b9250506020612b0085828601612a13565b9150509250929050565b6000819050919050565b6000612b2f612b2a612b258461299e565b612b0a565b61299e565b9050919050565b6000612b4182612b14565b9050919050565b6000612b5382612b36565b9050919050565b612b6381612b48565b82525050565b6000602082019050612b7e6000830184612b5a565b92915050565b600080600060608486031215612b9d57612b9c612999565b5b6000612bab868287016129e7565b9350506020612bbc868287016129e7565b9250506040612bcd86828701612a13565b9150509250925092565b600060ff82169050919050565b612bed81612bd7565b82525050565b6000602082019050612c086000830184612be4565b92915050565b612c17816129be565b82525050565b6000602082019050612c326000830184612c0e565b92915050565b600060208284031215612c4e57612c4d612999565b5b6000612c5c848285016129e7565b91505092915050565b600060208284031215612c7b57612c7a612999565b5b6000612c8984828501612a13565b91505092915050565b6000612c9d8261299e565b9050919050565b612cad81612c92565b82525050565b6000602082019050612cc86000830184612ca4565b92915050565b60008060408385031215612ce557612ce4612999565b5b6000612cf3858286016129e7565b9250506020612d0485828601612ab5565b9150509250929050565b600060208284031215612d2457612d23612999565b5b6000612d3284828501612ab5565b91505092915050565b60008060408385031215612d5257612d51612999565b5b6000612d60858286016129e7565b9250506020612d71858286016129e7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dc257607f821691505b602082108103612dd557612dd4612d7b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e116020836128b5565b9150612e1c82612ddb565b602082019050919050565b60006020820190508181036000830152612e4081612e04565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612ea36028836128b5565b9150612eae82612e47565b604082019050919050565b60006020820190508181036000830152612ed281612e96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f1382612965565b9150612f1e83612965565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f5357612f52612ed9565b5b828201905092915050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000612f94600d836128b5565b9150612f9f82612f5e565b602082019050919050565b60006020820190508181036000830152612fc381612f87565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006130266025836128b5565b915061303182612fca565b604082019050919050565b6000602082019050818103600083015261305581613019565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006130b8602a836128b5565b91506130c38261305c565b604082019050919050565b600060208201905081810360008301526130e7816130ab565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061314a6026836128b5565b9150613155826130ee565b604082019050919050565b600060208201905081810360008301526131798161313d565b9050919050565b7f747261646520697320416c7265616479206f70656e0000000000000000000000600082015250565b60006131b66015836128b5565b91506131c182613180565b602082019050919050565b600060208201905081810360008301526131e5816131a9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132486024836128b5565b9150613253826131ec565b604082019050919050565b600060208201905081810360008301526132778161323b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006132da6022836128b5565b91506132e58261327e565b604082019050919050565b60006020820190508181036000830152613309816132cd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061336c6025836128b5565b915061337782613310565b604082019050919050565b6000602082019050818103600083015261339b8161335f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133fe6023836128b5565b9150613409826133a2565b604082019050919050565b6000602082019050818103600083015261342d816133f1565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006134906024836128b5565b915061349b82613434565b604082019050919050565b600060208201905081810360008301526134bf81613483565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061350082612965565b915061350b83612965565b92508261351b5761351a6134c6565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006135826026836128b5565b915061358d82613526565b604082019050919050565b600060208201905081810360008301526135b181613575565b9050919050565b60006040820190506135cd600083018561296f565b6135da602083018461296f565b9392505050565b60006135ec82612965565b91506135f783612965565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136305761362f612ed9565b5b828202905092915050565b600061364682612965565b915061365183612965565b92508282101561366457613663612ed9565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506136dc816129d0565b92915050565b6000602082840312156136f8576136f7612999565b5b6000613706848285016136cd565b91505092915050565b6000819050919050565b600061373461372f61372a8461370f565b612b0a565b612965565b9050919050565b61374481613719565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61377f816129be565b82525050565b60006137918383613776565b60208301905092915050565b6000602082019050919050565b60006137b58261374a565b6137bf8185613755565b93506137ca83613766565b8060005b838110156137fb5781516137e28882613785565b97506137ed8361379d565b9250506001810190506137ce565b5085935050505092915050565b600060a08201905061381d600083018861296f565b61382a602083018761373b565b818103604083015261383c81866137aa565b905061384b6060830185612c0e565b613858608083018461296f565b9695505050505050565b600060c0820190506138776000830189612c0e565b613884602083018861296f565b613891604083018761373b565b61389e606083018661373b565b6138ab6080830185612c0e565b6138b860a083018461296f565b979650505050505050565b6000815190506138d2816129fc565b92915050565b6000806000606084860312156138f1576138f0612999565b5b60006138ff868287016138c3565b9350506020613910868287016138c3565b9250506040613921868287016138c3565b915050925092509256fea264697066735822122099efb929b2d7c94353d1e7c76d4d9199f6c4dfa2a144c0988c33c120dcca676164736f6c634300080f0033
Deployed Bytecode Sourcemap
39718:8545:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40232:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7748:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47577:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39791:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6701:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8399:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6543:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9300:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39969:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39839:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39922:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47222:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40194:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6872:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17111:94;;;;;;;;;;;;;:::i;:::-;;40616:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47892:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47765:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40357:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40004:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16460:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5800:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40156:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10018:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7212:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40575:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46920:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47358:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7450:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40038:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40097:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17360:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48086:170;;;;;;;;;;;;;:::i;:::-;;40456:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5581:100;5635:13;5668:5;5661:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:100;:::o;40232:32::-;;;;:::o;7748:169::-;7831:4;7848:39;7857:12;:10;:12::i;:::-;7871:7;7880:6;7848:8;:39::i;:::-;7905:4;7898:11;;7748:169;;;;:::o;47577:180::-;16691:12;:10;:12::i;:::-;16680:23;;:7;:5;:7::i;:::-;:23;;;16672:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47694:9:::1;47676:15;;:27;;;;;;;;;;;;;;;;;;47738:11;47714:21;:35;;;;47577:180:::0;;:::o;39791:41::-;;;;;;;;;;;;;:::o;6701:108::-;6762:7;6789:12;;6782:19;;6701:108;:::o;8399:492::-;8539:4;8556:36;8566:6;8574:9;8585:6;8556:9;:36::i;:::-;8605:24;8632:11;:19;8644:6;8632:19;;;;;;;;;;;;;;;:33;8652:12;:10;:12::i;:::-;8632:33;;;;;;;;;;;;;;;;8605:60;;8704:6;8684:16;:26;;8676:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8791:57;8800:6;8808:12;:10;:12::i;:::-;8841:6;8822:16;:25;8791:8;:57::i;:::-;8879:4;8872:11;;;8399:492;;;;;:::o;6543:93::-;6601:5;6626:2;6619:9;;6543:93;:::o;9300:215::-;9388:4;9405:80;9414:12;:10;:12::i;:::-;9428:7;9474:10;9437:11;:25;9449:12;:10;:12::i;:::-;9437:25;;;;;;;;;;;;;;;:34;9463:7;9437:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9405:8;:80::i;:::-;9503:4;9496:11;;9300:215;;;;:::o;39969:26::-;;;;;;;;;;;;;:::o;39839:38::-;;;:::o;39922:40::-;;;;;;;;;;;;;:::o;47222:125::-;47287:4;47311:19;:28;47331:7;47311:28;;;;;;;;;;;;;;;;;;;;;;;;;47304:35;;47222:125;;;:::o;40194:31::-;;;;:::o;6872:127::-;6946:7;6973:9;:18;6983:7;6973:18;;;;;;;;;;;;;;;;6966:25;;6872:127;;;:::o;17111:94::-;16691:12;:10;:12::i;:::-;16680:23;;:7;:5;:7::i;:::-;:23;;;16672:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17176:21:::1;17194:1;17176:9;:21::i;:::-;17111:94::o:0;40616:49::-;;;;:::o;47892:185::-;16691:12;:10;:12::i;:::-;16680:23;;:7;:5;:7::i;:::-;:23;;;16672:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47983:9:::1;47966:14;:26;;;;48029:22;48047:3;48029:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;48011:14;;:40;;48003:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47892:185:::0;:::o;47765:119::-;16691:12;:10;:12::i;:::-;16680:23;;:7;:5;:7::i;:::-;:23;;;16672:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47866:10:::1;47845:18;:31;;;;47765:119:::0;:::o;40357:92::-;;;;;;;;;;;;;:::o;40004:25::-;;;;:::o;16460:87::-;16506:7;16533:6;;;;;;;;;;;16526:13;;16460:87;:::o;5800:104::-;5856:13;5889:7;5882:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5800:104;:::o;40156:31::-;;;;:::o;10018:413::-;10111:4;10128:24;10155:11;:25;10167:12;:10;:12::i;:::-;10155:25;;;;;;;;;;;;;;;:34;10181:7;10155:34;;;;;;;;;;;;;;;;10128:61;;10228:15;10208:16;:35;;10200:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10321:67;10330:12;:10;:12::i;:::-;10344:7;10372:15;10353:16;:34;10321:8;:67::i;:::-;10419:4;10412:11;;;10018:413;;;;:::o;7212:175::-;7298:4;7315:42;7325:12;:10;:12::i;:::-;7339:9;7350:6;7315:9;:42::i;:::-;7375:4;7368:11;;7212:175;;;;:::o;40575:34::-;;;;;;;;;;;;;:::o;46920:290::-;16691:12;:10;:12::i;:::-;16680:23;;:7;:5;:7::i;:::-;:23;;;16672:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47045:8:::1;47013:40;;:19;:28;47033:7;47013:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;47005:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;47142:8;47111:19;:28;47131:7;47111:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;47184:7;47168:34;;;47193:8;47168:34;;;;;;:::i;:::-;;;;;;;;46920:290:::0;;:::o;47358:171::-;16691:12;:10;:12::i;:::-;16680:23;;:7;:5;:7::i;:::-;:23;;;16672:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47459:8:::1;47435:21;;:32;;;;;;;;;;;;;;;;;;47483:38;47512:8;47483:38;;;;;;:::i;:::-;;;;;;;;47358:171:::0;:::o;7450:151::-;7539:7;7566:11;:18;7578:5;7566:18;;;;;;;;;;;;;;;:27;7585:7;7566:27;;;;;;;;;;;;;;;;7559:34;;7450:151;;;;:::o;40038:52::-;;;;:::o;40097:50::-;;;;:::o;17360:192::-;16691:12;:10;:12::i;:::-;16680:23;;:7;:5;:7::i;:::-;:23;;;16672:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17469:1:::1;17449:22;;:8;:22;;::::0;17441:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17525:19;17535:8;17525:9;:19::i;:::-;17360:192:::0;:::o;48086:170::-;16691:12;:10;:12::i;:::-;16680:23;;:7;:5;:7::i;:::-;:23;;;16672:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48155:4:::1;48145:14;;:6;;;;;;;;;;;:14;;::::0;48137:48:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;48205:4;48196:6;;:13;;;;;;;;;;;;;;;;;;48233:15;48220:10;:28;;;;48086:170::o:0;40456:93::-;;;;;;;;;;;;;:::o;27614:98::-;27672:7;27703:1;27699;:5;;;;:::i;:::-;27692:12;;27614:98;;;;:::o;102:::-;155:7;182:10;175:17;;102:98;:::o;13710:380::-;13863:1;13846:19;;:5;:19;;;13838:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13944:1;13925:21;;:7;:21;;;13917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14028:6;13998:11;:18;14010:5;13998:18;;;;;;;;;;;;;;;:27;14017:7;13998:27;;;;;;;;;;;;;;;:36;;;;14066:7;14050:32;;14059:5;14050:32;;;14075:6;14050:32;;;;;;:::i;:::-;;;;;;;;13710:380;;;:::o;42100:2328::-;42248:1;42232:18;;:4;:18;;;42224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42325:1;42311:16;;:2;:16;;;42303:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42393:1;42383:6;:11;42380:92;;42411:28;42427:4;42433:2;42437:1;42411:15;:28::i;:::-;42454:7;;42380:92;42496:7;:5;:7::i;:::-;42488:15;;:4;:15;;;;:32;;;;;42513:7;:5;:7::i;:::-;42507:13;;:2;:13;;;;42488:32;42484:102;;;42555:4;42545:14;;:6;;;;;;;;;;;:14;;;42537:23;;;;;;42484:102;42611:7;:5;:7::i;:::-;42603:15;;:4;:15;;;;:32;;;;;42628:7;:5;:7::i;:::-;42622:13;;:2;:13;;;;42603:32;42599:365;;;42664:13;42656:21;;:4;:21;;;:55;;;;;42695:15;;;;;;;;;;;42681:30;;:2;:30;;;;42656:55;:84;;;;;42717:19;:23;42737:2;42717:23;;;;;;;;;;;;;;;;;;;;;;;;;42715:25;42656:84;:103;;;;;42744:15;;;;;;;;;;;42656:103;42652:287;;;42832:15;42817:8;:12;42826:2;42817:12;;;;;;;;;;;;;;;;:30;42809:39;;;;;;42901:21;;42882:15;:41;;;;:::i;:::-;42867:8;:12;42876:2;42867:12;;;;;;;;;;;;;;;:56;;;;42652:287;42599:365;42993:13;42987:19;;:4;:19;;;:49;;;;;43011:19;:25;43031:4;43011:25;;;;;;;;;;;;;;;;;;;;;;;;;43010:26;42987:49;:77;;;;;43041:19;:23;43061:2;43041:23;;;;;;;;;;;;;;;;;;;;;;;;;43040:24;42987:77;42984:271;;;43080:32;43115:13;43125:2;43115:9;:13::i;:::-;43080:48;;43188:14;;43178:6;43151:24;:33;;;;:::i;:::-;:51;;43143:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;43065:190;42984:271;43264:28;43295:24;43313:4;43295:9;:24::i;:::-;43264:55;;43340:24;43391:18;;43367:20;:42;;43340:69;;43446:19;:53;;;;;43483:16;;;;;;;;;;;43482:17;43446:53;:87;;;;;43520:13;43516:17;;:2;:17;;;43446:87;:126;;;;;43551:21;;;;;;;;;;;43446:126;43429:274;;;43622:18;;43599:41;;43655:36;43670:20;43655:14;:36::i;:::-;43429:274;43805:19;:25;43825:4;43805:25;;;;;;;;;;;;;;;;;;;;;;;;;43804:26;:54;;;;;43835:19;:23;43855:2;43835:23;;;;;;;;;;;;;;;;;;;;;;;;;43834:24;43804:54;43801:572;;;43875:12;43911:13;43905:19;;:4;:19;;;:40;;;;43932:13;43928:17;;:2;:17;;;43905:40;43902:299;;;43973:30;43999:3;43973:21;43984:9;;43973:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;43966:37;;44031:13;44027:17;;:2;:17;;;:62;;;;;44080:8;44067:10;;:21;;;;:::i;:::-;44049:15;:39;44027:62;44024:160;;;44120:23;44139:3;44120:14;44131:2;44120:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;44113:30;;44024:160;43902:299;44223:16;44234:4;44223:6;:10;;:16;;;;:::i;:::-;44214:25;;44266:1;44259:4;:8;44256:91;;;44288:42;44304:4;44318;44325;44288:15;:42::i;:::-;44256:91;43860:513;43801:572;44385:33;44401:4;44407:2;44411:6;44385:15;:33::i;:::-;42213:2215;;42100:2328;;;;:::o;17560:173::-;17616:16;17635:6;;;;;;;;;;;17616:25;;17661:8;17652:6;;:17;;;;;;;;;;;;;;;;;;17716:8;17685:40;;17706:8;17685:40;;;;;;;;;;;;17605:128;17560:173;:::o;28751:98::-;28809:7;28840:1;28836;:5;;;;:::i;:::-;28829:12;;28751:98;;;;:::o;10921:733::-;11079:1;11061:20;;:6;:20;;;11053:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11163:1;11142:23;;:9;:23;;;11134:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11218:47;11239:6;11247:9;11258:6;11218:20;:47::i;:::-;11278:21;11302:9;:17;11312:6;11302:17;;;;;;;;;;;;;;;;11278:41;;11355:6;11338:13;:23;;11330:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11476:6;11460:13;:22;11440:9;:17;11450:6;11440:17;;;;;;;;;;;;;;;:42;;;;11528:6;11504:9;:20;11514:9;11504:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11569:9;11552:35;;11561:6;11552:35;;;11580:6;11552:35;;;;;;:::i;:::-;;;;;;;;11600:46;11620:6;11628:9;11639:6;11600:19;:46::i;:::-;11042:612;10921:733;;;:::o;44437:1342::-;41084:4;41065:16;;:23;;;;;;;;;;;;;;;;;;44522:26:::1;44551:53;44594:9;;44551:38;44576:12;;44551:20;:24;;:38;;;;:::i;:::-;:42;;:53;;;;:::i;:::-;44522:82;;44673:12;44688:25;44711:1;44688:18;:22;;:25;;;;:::i;:::-;44673:40;;44724:17;44744:28;44767:4;44744:18;:22;;:28;;;;:::i;:::-;44724:48;;45050:22;45075:21;45050:46;;45141:22;45158:4;45141:16;:22::i;:::-;45294:18;45315:41;45341:14;45315:21;:25;;:41;;;;:::i;:::-;45294:62;;45406:35;45419:9;45430:10;45406:12;:35::i;:::-;45491:62;45508:44;45533:18;45508:20;:24;;:44;;;;:::i;:::-;45491:16;:62::i;:::-;45564:15;;;;;;;;;;;:24;;:98;45589:72;45633:27;45647:12;;45633:9;;:13;;:27;;;;:::i;:::-;45589:39;45615:12;;45589:21;:25;;:39;;;;:::i;:::-;:43;;:72;;;;:::i;:::-;45564:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45673:16;;;;;;;;;;;:25;;:48;45699:21;45673:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45739:32;45754:4;45760:10;45739:32;;;;;;;:::i;:::-;;;;;;;;44511:1268;;;;;41130:5:::0;41111:16;;:24;;;;;;;;;;;;;;;;;;44437:1342;:::o;28352:98::-;28410:7;28441:1;28437;:5;;;;:::i;:::-;28430:12;;28352:98;;;;:::o;27995:::-;28053:7;28084:1;28080;:5;;;;:::i;:::-;28073:12;;27995:98;;;;:::o;14690:125::-;;;;:::o;15419:124::-;;;;:::o;45787:692::-;45913:21;45951:1;45937:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45913:40;;45982:4;45964;45969:1;45964:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46008:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45998:4;46003:1;45998:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;46099:11;46046:50;46064:4;46079:15;;;;;;;;;;;46046:9;:50::i;:::-;:64;46043:156;;;46125:62;46142:4;46157:15;;;;;;;;;;;46184:1;46175:11;46125:8;:62::i;:::-;46043:156;46237:15;;;;;;;;;;;:66;;;46318:11;46344:1;46388:4;46415;46435:15;46237:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45842:637;45787:692;:::o;46487:381::-;46598:15;;;;;;;;;;;:31;;;46637:9;46670:4;46690:11;46716:1;46759;46802:7;:5;:7::i;:::-;46824:15;46598:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46487:381;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:77::-;1434:7;1463:5;1452:16;;1397:77;;;:::o;1480:118::-;1567:24;1585:5;1567:24;:::i;:::-;1562:3;1555:37;1480:118;;:::o;1604:222::-;1697:4;1735:2;1724:9;1720:18;1712:26;;1748:71;1816:1;1805:9;1801:17;1792:6;1748:71;:::i;:::-;1604:222;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:116::-;3916:21;3931:5;3916:21;:::i;:::-;3909:5;3906:32;3896:60;;3952:1;3949;3942:12;3896:60;3846:116;:::o;3968:133::-;4011:5;4049:6;4036:20;4027:29;;4065:30;4089:5;4065:30;:::i;:::-;3968:133;;;;:::o;4107:468::-;4172:6;4180;4229:2;4217:9;4208:7;4204:23;4200:32;4197:119;;;4235:79;;:::i;:::-;4197:119;4355:1;4380:50;4422:7;4413:6;4402:9;4398:22;4380:50;:::i;:::-;4370:60;;4326:114;4479:2;4505:53;4550:7;4541:6;4530:9;4526:22;4505:53;:::i;:::-;4495:63;;4450:118;4107:468;;;;;:::o;4581:60::-;4609:3;4630:5;4623:12;;4581:60;;;:::o;4647:142::-;4697:9;4730:53;4748:34;4757:24;4775:5;4757:24;:::i;:::-;4748:34;:::i;:::-;4730:53;:::i;:::-;4717:66;;4647:142;;;:::o;4795:126::-;4845:9;4878:37;4909:5;4878:37;:::i;:::-;4865:50;;4795:126;;;:::o;4927:153::-;5004:9;5037:37;5068:5;5037:37;:::i;:::-;5024:50;;4927:153;;;:::o;5086:185::-;5200:64;5258:5;5200:64;:::i;:::-;5195:3;5188:77;5086:185;;:::o;5277:276::-;5397:4;5435:2;5424:9;5420:18;5412:26;;5448:98;5543:1;5532:9;5528:17;5519:6;5448:98;:::i;:::-;5277:276;;;;:::o;5559:619::-;5636:6;5644;5652;5701:2;5689:9;5680:7;5676:23;5672:32;5669:119;;;5707:79;;:::i;:::-;5669:119;5827:1;5852:53;5897:7;5888:6;5877:9;5873:22;5852:53;:::i;:::-;5842:63;;5798:117;5954:2;5980:53;6025:7;6016:6;6005:9;6001:22;5980:53;:::i;:::-;5970:63;;5925:118;6082:2;6108:53;6153:7;6144:6;6133:9;6129:22;6108:53;:::i;:::-;6098:63;;6053:118;5559:619;;;;;:::o;6184:86::-;6219:7;6259:4;6252:5;6248:16;6237:27;;6184:86;;;:::o;6276:112::-;6359:22;6375:5;6359:22;:::i;:::-;6354:3;6347:35;6276:112;;:::o;6394:214::-;6483:4;6521:2;6510:9;6506:18;6498:26;;6534:67;6598:1;6587:9;6583:17;6574:6;6534:67;:::i;:::-;6394:214;;;;:::o;6614:118::-;6701:24;6719:5;6701:24;:::i;:::-;6696:3;6689:37;6614:118;;:::o;6738:222::-;6831:4;6869:2;6858:9;6854:18;6846:26;;6882:71;6950:1;6939:9;6935:17;6926:6;6882:71;:::i;:::-;6738:222;;;;:::o;6966:329::-;7025:6;7074:2;7062:9;7053:7;7049:23;7045:32;7042:119;;;7080:79;;:::i;:::-;7042:119;7200:1;7225:53;7270:7;7261:6;7250:9;7246:22;7225:53;:::i;:::-;7215:63;;7171:117;6966:329;;;;:::o;7301:::-;7360:6;7409:2;7397:9;7388:7;7384:23;7380:32;7377:119;;;7415:79;;:::i;:::-;7377:119;7535:1;7560:53;7605:7;7596:6;7585:9;7581:22;7560:53;:::i;:::-;7550:63;;7506:117;7301:329;;;;:::o;7636:104::-;7681:7;7710:24;7728:5;7710:24;:::i;:::-;7699:35;;7636:104;;;:::o;7746:142::-;7849:32;7875:5;7849:32;:::i;:::-;7844:3;7837:45;7746:142;;:::o;7894:254::-;8003:4;8041:2;8030:9;8026:18;8018:26;;8054:87;8138:1;8127:9;8123:17;8114:6;8054:87;:::i;:::-;7894:254;;;;:::o;8154:468::-;8219:6;8227;8276:2;8264:9;8255:7;8251:23;8247:32;8244:119;;;8282:79;;:::i;:::-;8244:119;8402:1;8427:53;8472:7;8463:6;8452:9;8448:22;8427:53;:::i;:::-;8417:63;;8373:117;8529:2;8555:50;8597:7;8588:6;8577:9;8573:22;8555:50;:::i;:::-;8545:60;;8500:115;8154:468;;;;;:::o;8628:323::-;8684:6;8733:2;8721:9;8712:7;8708:23;8704:32;8701:119;;;8739:79;;:::i;:::-;8701:119;8859:1;8884:50;8926:7;8917:6;8906:9;8902:22;8884:50;:::i;:::-;8874:60;;8830:114;8628:323;;;;:::o;8957:474::-;9025:6;9033;9082:2;9070:9;9061:7;9057:23;9053:32;9050:119;;;9088:79;;:::i;:::-;9050:119;9208:1;9233:53;9278:7;9269:6;9258:9;9254:22;9233:53;:::i;:::-;9223:63;;9179:117;9335:2;9361:53;9406:7;9397:6;9386:9;9382:22;9361:53;:::i;:::-;9351:63;;9306:118;8957:474;;;;;:::o;9437:180::-;9485:77;9482:1;9475:88;9582:4;9579:1;9572:15;9606:4;9603:1;9596:15;9623:320;9667:6;9704:1;9698:4;9694:12;9684:22;;9751:1;9745:4;9741:12;9772:18;9762:81;;9828:4;9820:6;9816:17;9806:27;;9762:81;9890:2;9882:6;9879:14;9859:18;9856:38;9853:84;;9909:18;;:::i;:::-;9853:84;9674:269;9623:320;;;:::o;9949:182::-;10089:34;10085:1;10077:6;10073:14;10066:58;9949:182;:::o;10137:366::-;10279:3;10300:67;10364:2;10359:3;10300:67;:::i;:::-;10293:74;;10376:93;10465:3;10376:93;:::i;:::-;10494:2;10489:3;10485:12;10478:19;;10137:366;;;:::o;10509:419::-;10675:4;10713:2;10702:9;10698:18;10690:26;;10762:9;10756:4;10752:20;10748:1;10737:9;10733:17;10726:47;10790:131;10916:4;10790:131;:::i;:::-;10782:139;;10509:419;;;:::o;10934:227::-;11074:34;11070:1;11062:6;11058:14;11051:58;11143:10;11138:2;11130:6;11126:15;11119:35;10934:227;:::o;11167:366::-;11309:3;11330:67;11394:2;11389:3;11330:67;:::i;:::-;11323:74;;11406:93;11495:3;11406:93;:::i;:::-;11524:2;11519:3;11515:12;11508:19;;11167:366;;;:::o;11539:419::-;11705:4;11743:2;11732:9;11728:18;11720:26;;11792:9;11786:4;11782:20;11778:1;11767:9;11763:17;11756:47;11820:131;11946:4;11820:131;:::i;:::-;11812:139;;11539:419;;;:::o;11964:180::-;12012:77;12009:1;12002:88;12109:4;12106:1;12099:15;12133:4;12130:1;12123:15;12150:305;12190:3;12209:20;12227:1;12209:20;:::i;:::-;12204:25;;12243:20;12261:1;12243:20;:::i;:::-;12238:25;;12397:1;12329:66;12325:74;12322:1;12319:81;12316:107;;;12403:18;;:::i;:::-;12316:107;12447:1;12444;12440:9;12433:16;;12150:305;;;;:::o;12461:163::-;12601:15;12597:1;12589:6;12585:14;12578:39;12461:163;:::o;12630:366::-;12772:3;12793:67;12857:2;12852:3;12793:67;:::i;:::-;12786:74;;12869:93;12958:3;12869:93;:::i;:::-;12987:2;12982:3;12978:12;12971:19;;12630:366;;;:::o;13002:419::-;13168:4;13206:2;13195:9;13191:18;13183:26;;13255:9;13249:4;13245:20;13241:1;13230:9;13226:17;13219:47;13283:131;13409:4;13283:131;:::i;:::-;13275:139;;13002:419;;;:::o;13427:224::-;13567:34;13563:1;13555:6;13551:14;13544:58;13636:7;13631:2;13623:6;13619:15;13612:32;13427:224;:::o;13657:366::-;13799:3;13820:67;13884:2;13879:3;13820:67;:::i;:::-;13813:74;;13896:93;13985:3;13896:93;:::i;:::-;14014:2;14009:3;14005:12;13998:19;;13657:366;;;:::o;14029:419::-;14195:4;14233:2;14222:9;14218:18;14210:26;;14282:9;14276:4;14272:20;14268:1;14257:9;14253:17;14246:47;14310:131;14436:4;14310:131;:::i;:::-;14302:139;;14029:419;;;:::o;14454:229::-;14594:34;14590:1;14582:6;14578:14;14571:58;14663:12;14658:2;14650:6;14646:15;14639:37;14454:229;:::o;14689:366::-;14831:3;14852:67;14916:2;14911:3;14852:67;:::i;:::-;14845:74;;14928:93;15017:3;14928:93;:::i;:::-;15046:2;15041:3;15037:12;15030:19;;14689:366;;;:::o;15061:419::-;15227:4;15265:2;15254:9;15250:18;15242:26;;15314:9;15308:4;15304:20;15300:1;15289:9;15285:17;15278:47;15342:131;15468:4;15342:131;:::i;:::-;15334:139;;15061:419;;;:::o;15486:225::-;15626:34;15622:1;15614:6;15610:14;15603:58;15695:8;15690:2;15682:6;15678:15;15671:33;15486:225;:::o;15717:366::-;15859:3;15880:67;15944:2;15939:3;15880:67;:::i;:::-;15873:74;;15956:93;16045:3;15956:93;:::i;:::-;16074:2;16069:3;16065:12;16058:19;;15717:366;;;:::o;16089:419::-;16255:4;16293:2;16282:9;16278:18;16270:26;;16342:9;16336:4;16332:20;16328:1;16317:9;16313:17;16306:47;16370:131;16496:4;16370:131;:::i;:::-;16362:139;;16089:419;;;:::o;16514:171::-;16654:23;16650:1;16642:6;16638:14;16631:47;16514:171;:::o;16691:366::-;16833:3;16854:67;16918:2;16913:3;16854:67;:::i;:::-;16847:74;;16930:93;17019:3;16930:93;:::i;:::-;17048:2;17043:3;17039:12;17032:19;;16691:366;;;:::o;17063:419::-;17229:4;17267:2;17256:9;17252:18;17244:26;;17316:9;17310:4;17306:20;17302:1;17291:9;17287:17;17280:47;17344:131;17470:4;17344:131;:::i;:::-;17336:139;;17063:419;;;:::o;17488:223::-;17628:34;17624:1;17616:6;17612:14;17605:58;17697:6;17692:2;17684:6;17680:15;17673:31;17488:223;:::o;17717:366::-;17859:3;17880:67;17944:2;17939:3;17880:67;:::i;:::-;17873:74;;17956:93;18045:3;17956:93;:::i;:::-;18074:2;18069:3;18065:12;18058:19;;17717:366;;;:::o;18089:419::-;18255:4;18293:2;18282:9;18278:18;18270:26;;18342:9;18336:4;18332:20;18328:1;18317:9;18313:17;18306:47;18370:131;18496:4;18370:131;:::i;:::-;18362:139;;18089:419;;;:::o;18514:221::-;18654:34;18650:1;18642:6;18638:14;18631:58;18723:4;18718:2;18710:6;18706:15;18699:29;18514:221;:::o;18741:366::-;18883:3;18904:67;18968:2;18963:3;18904:67;:::i;:::-;18897:74;;18980:93;19069:3;18980:93;:::i;:::-;19098:2;19093:3;19089:12;19082:19;;18741:366;;;:::o;19113:419::-;19279:4;19317:2;19306:9;19302:18;19294:26;;19366:9;19360:4;19356:20;19352:1;19341:9;19337:17;19330:47;19394:131;19520:4;19394:131;:::i;:::-;19386:139;;19113:419;;;:::o;19538:224::-;19678:34;19674:1;19666:6;19662:14;19655:58;19747:7;19742:2;19734:6;19730:15;19723:32;19538:224;:::o;19768:366::-;19910:3;19931:67;19995:2;19990:3;19931:67;:::i;:::-;19924:74;;20007:93;20096:3;20007:93;:::i;:::-;20125:2;20120:3;20116:12;20109:19;;19768:366;;;:::o;20140:419::-;20306:4;20344:2;20333:9;20329:18;20321:26;;20393:9;20387:4;20383:20;20379:1;20368:9;20364:17;20357:47;20421:131;20547:4;20421:131;:::i;:::-;20413:139;;20140:419;;;:::o;20565:222::-;20705:34;20701:1;20693:6;20689:14;20682:58;20774:5;20769:2;20761:6;20757:15;20750:30;20565:222;:::o;20793:366::-;20935:3;20956:67;21020:2;21015:3;20956:67;:::i;:::-;20949:74;;21032:93;21121:3;21032:93;:::i;:::-;21150:2;21145:3;21141:12;21134:19;;20793:366;;;:::o;21165:419::-;21331:4;21369:2;21358:9;21354:18;21346:26;;21418:9;21412:4;21408:20;21404:1;21393:9;21389:17;21382:47;21446:131;21572:4;21446:131;:::i;:::-;21438:139;;21165:419;;;:::o;21590:223::-;21730:34;21726:1;21718:6;21714:14;21707:58;21799:6;21794:2;21786:6;21782:15;21775:31;21590:223;:::o;21819:366::-;21961:3;21982:67;22046:2;22041:3;21982:67;:::i;:::-;21975:74;;22058:93;22147:3;22058:93;:::i;:::-;22176:2;22171:3;22167:12;22160:19;;21819:366;;;:::o;22191:419::-;22357:4;22395:2;22384:9;22380:18;22372:26;;22444:9;22438:4;22434:20;22430:1;22419:9;22415:17;22408:47;22472:131;22598:4;22472:131;:::i;:::-;22464:139;;22191:419;;;:::o;22616:180::-;22664:77;22661:1;22654:88;22761:4;22758:1;22751:15;22785:4;22782:1;22775:15;22802:185;22842:1;22859:20;22877:1;22859:20;:::i;:::-;22854:25;;22893:20;22911:1;22893:20;:::i;:::-;22888:25;;22932:1;22922:35;;22937:18;;:::i;:::-;22922:35;22979:1;22976;22972:9;22967:14;;22802:185;;;;:::o;22993:225::-;23133:34;23129:1;23121:6;23117:14;23110:58;23202:8;23197:2;23189:6;23185:15;23178:33;22993:225;:::o;23224:366::-;23366:3;23387:67;23451:2;23446:3;23387:67;:::i;:::-;23380:74;;23463:93;23552:3;23463:93;:::i;:::-;23581:2;23576:3;23572:12;23565:19;;23224:366;;;:::o;23596:419::-;23762:4;23800:2;23789:9;23785:18;23777:26;;23849:9;23843:4;23839:20;23835:1;23824:9;23820:17;23813:47;23877:131;24003:4;23877:131;:::i;:::-;23869:139;;23596:419;;;:::o;24021:332::-;24142:4;24180:2;24169:9;24165:18;24157:26;;24193:71;24261:1;24250:9;24246:17;24237:6;24193:71;:::i;:::-;24274:72;24342:2;24331:9;24327:18;24318:6;24274:72;:::i;:::-;24021:332;;;;;:::o;24359:348::-;24399:7;24422:20;24440:1;24422:20;:::i;:::-;24417:25;;24456:20;24474:1;24456:20;:::i;:::-;24451:25;;24644:1;24576:66;24572:74;24569:1;24566:81;24561:1;24554:9;24547:17;24543:105;24540:131;;;24651:18;;:::i;:::-;24540:131;24699:1;24696;24692:9;24681:20;;24359:348;;;;:::o;24713:191::-;24753:4;24773:20;24791:1;24773:20;:::i;:::-;24768:25;;24807:20;24825:1;24807:20;:::i;:::-;24802:25;;24846:1;24843;24840:8;24837:34;;;24851:18;;:::i;:::-;24837:34;24896:1;24893;24889:9;24881:17;;24713:191;;;;:::o;24910:180::-;24958:77;24955:1;24948:88;25055:4;25052:1;25045:15;25079:4;25076:1;25069:15;25096:180;25144:77;25141:1;25134:88;25241:4;25238:1;25231:15;25265:4;25262:1;25255:15;25282:143;25339:5;25370:6;25364:13;25355:22;;25386:33;25413:5;25386:33;:::i;:::-;25282:143;;;;:::o;25431:351::-;25501:6;25550:2;25538:9;25529:7;25525:23;25521:32;25518:119;;;25556:79;;:::i;:::-;25518:119;25676:1;25701:64;25757:7;25748:6;25737:9;25733:22;25701:64;:::i;:::-;25691:74;;25647:128;25431:351;;;;:::o;25788:85::-;25833:7;25862:5;25851:16;;25788:85;;;:::o;25879:158::-;25937:9;25970:61;25988:42;25997:32;26023:5;25997:32;:::i;:::-;25988:42;:::i;:::-;25970:61;:::i;:::-;25957:74;;25879:158;;;:::o;26043:147::-;26138:45;26177:5;26138:45;:::i;:::-;26133:3;26126:58;26043:147;;:::o;26196:114::-;26263:6;26297:5;26291:12;26281:22;;26196:114;;;:::o;26316:184::-;26415:11;26449:6;26444:3;26437:19;26489:4;26484:3;26480:14;26465:29;;26316:184;;;;:::o;26506:132::-;26573:4;26596:3;26588:11;;26626:4;26621:3;26617:14;26609:22;;26506:132;;;:::o;26644:108::-;26721:24;26739:5;26721:24;:::i;:::-;26716:3;26709:37;26644:108;;:::o;26758:179::-;26827:10;26848:46;26890:3;26882:6;26848:46;:::i;:::-;26926:4;26921:3;26917:14;26903:28;;26758:179;;;;:::o;26943:113::-;27013:4;27045;27040:3;27036:14;27028:22;;26943:113;;;:::o;27092:732::-;27211:3;27240:54;27288:5;27240:54;:::i;:::-;27310:86;27389:6;27384:3;27310:86;:::i;:::-;27303:93;;27420:56;27470:5;27420:56;:::i;:::-;27499:7;27530:1;27515:284;27540:6;27537:1;27534:13;27515:284;;;27616:6;27610:13;27643:63;27702:3;27687:13;27643:63;:::i;:::-;27636:70;;27729:60;27782:6;27729:60;:::i;:::-;27719:70;;27575:224;27562:1;27559;27555:9;27550:14;;27515:284;;;27519:14;27815:3;27808:10;;27216:608;;;27092:732;;;;:::o;27830:831::-;28093:4;28131:3;28120:9;28116:19;28108:27;;28145:71;28213:1;28202:9;28198:17;28189:6;28145:71;:::i;:::-;28226:80;28302:2;28291:9;28287:18;28278:6;28226:80;:::i;:::-;28353:9;28347:4;28343:20;28338:2;28327:9;28323:18;28316:48;28381:108;28484:4;28475:6;28381:108;:::i;:::-;28373:116;;28499:72;28567:2;28556:9;28552:18;28543:6;28499:72;:::i;:::-;28581:73;28649:3;28638:9;28634:19;28625:6;28581:73;:::i;:::-;27830:831;;;;;;;;:::o;28667:807::-;28916:4;28954:3;28943:9;28939:19;28931:27;;28968:71;29036:1;29025:9;29021:17;29012:6;28968:71;:::i;:::-;29049:72;29117:2;29106:9;29102:18;29093:6;29049:72;:::i;:::-;29131:80;29207:2;29196:9;29192:18;29183:6;29131:80;:::i;:::-;29221;29297:2;29286:9;29282:18;29273:6;29221:80;:::i;:::-;29311:73;29379:3;29368:9;29364:19;29355:6;29311:73;:::i;:::-;29394;29462:3;29451:9;29447:19;29438:6;29394:73;:::i;:::-;28667:807;;;;;;;;;:::o;29480:143::-;29537:5;29568:6;29562:13;29553:22;;29584:33;29611:5;29584:33;:::i;:::-;29480:143;;;;:::o;29629:663::-;29717:6;29725;29733;29782:2;29770:9;29761:7;29757:23;29753:32;29750:119;;;29788:79;;:::i;:::-;29750:119;29908:1;29933:64;29989:7;29980:6;29969:9;29965:22;29933:64;:::i;:::-;29923:74;;29879:128;30046:2;30072:64;30128:7;30119:6;30108:9;30104:22;30072:64;:::i;:::-;30062:74;;30017:129;30185:2;30211:64;30267:7;30258:6;30247:9;30243:22;30211:64;:::i;:::-;30201:74;;30156:129;29629:663;;;;;:::o
Swarm Source
ipfs://99efb929b2d7c94353d1e7c76d4d9199f6c4dfa2a144c0988c33c120dcca6761
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.