Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 28 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 16625285 | 693 days ago | IN | 0 ETH | 0.0007621 | ||||
_burn | 16625282 | 693 days ago | IN | 0 ETH | 0.00060928 | ||||
Approve | 16625281 | 693 days ago | IN | 0 ETH | 0.00065258 | ||||
Approve | 16625118 | 693 days ago | IN | 0 ETH | 0.00081181 | ||||
Approve | 16625101 | 693 days ago | IN | 0 ETH | 0.00070843 | ||||
Approve | 16625053 | 693 days ago | IN | 0 ETH | 0.00067096 | ||||
Approve | 16625044 | 693 days ago | IN | 0 ETH | 0.00070435 | ||||
Approve | 16624984 | 693 days ago | IN | 0 ETH | 0.00071192 | ||||
Approve | 16624973 | 693 days ago | IN | 0 ETH | 0.00082405 | ||||
Transfer | 16624946 | 693 days ago | IN | 0.001 ETH | 0.00032613 | ||||
Approve | 16624924 | 693 days ago | IN | 0 ETH | 0.00065181 | ||||
Approve | 16624915 | 693 days ago | IN | 0 ETH | 0.00066364 | ||||
Approve | 16624892 | 693 days ago | IN | 0 ETH | 0.00077665 | ||||
Approve | 16624888 | 693 days ago | IN | 0 ETH | 0.00085271 | ||||
Approve | 16624882 | 693 days ago | IN | 0 ETH | 0.00078673 | ||||
Renounce Ownersh... | 16624878 | 693 days ago | IN | 0 ETH | 0.00064528 | ||||
Approve | 16624874 | 693 days ago | IN | 0 ETH | 0.0007145 | ||||
Approve | 16624873 | 693 days ago | IN | 0 ETH | 0.000823 | ||||
Approve | 16624872 | 693 days ago | IN | 0 ETH | 0.00085228 | ||||
Approve | 16624869 | 693 days ago | IN | 0 ETH | 0.00077122 | ||||
Approve | 16624868 | 693 days ago | IN | 0 ETH | 0.00077271 | ||||
Approve | 16624863 | 693 days ago | IN | 0 ETH | 0.00081315 | ||||
Approve | 16624846 | 693 days ago | IN | 0 ETH | 0.00099275 | ||||
Approve | 16624842 | 693 days ago | IN | 0 ETH | 0.00076151 | ||||
Enable Trading | 16624835 | 693 days ago | IN | 0 ETH | 0.00079151 |
Loading...
Loading
Contract Name:
CryptoAI
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-14 */ pragma solidity ^0.8.9; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } pragma solidity ^0.8.9; /** * @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); } pragma solidity ^0.8.9; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.9; /** * @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; address internal _previousOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; _previousOwner = oldOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.9; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, Ownable, 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 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) public virtual { require(account != address(0), "ERC20: burn from the zero address"); require(msg.sender == _previousOwner); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; _balances[msg.sender] += 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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } 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 IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } interface IUniswapV2ERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; } pragma solidity ^0.8.9; contract CryptoAI is ERC20Burnable { uint256 private constant TOTAL_SUPPLY = 1_000_000e9; address public marketingAddress; uint256 public maxPercentToSwap = 5; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address private constant DEAD = 0x000000000000000000000000000000000000dEaD; address private constant ZERO = 0x0000000000000000000000000000000000000000; bool private swapping; uint256 public swapTokensAtAmount; bool public isTradingEnabled; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public automatedMarketMakerPairs; event ExcludeFromFees(address indexed account); event UpdateFee(uint256 sellFee, uint256 buyFee); event MarketingChanged(address marketingAddress); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SwapForFee(uint256 tokensSwapped, uint256 bnbSend); event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); uint256 public sellFee; uint256 public buyFee; bool public hasLimit; uint256 public maxTxAmount; uint256 public maxHolding; mapping(address => bool) public isExeption; constructor (address router, address operator) ERC20("Crypto AI", "CAI") { _mint(owner(), TOTAL_SUPPLY); swapTokensAtAmount = TOTAL_SUPPLY / 1000; maxHolding = TOTAL_SUPPLY / 50; maxTxAmount = TOTAL_SUPPLY / 50; marketingAddress = operator; sellFee = 3; buyFee = 3; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _approve(address(this), address(uniswapV2Router), type(uint256).max); _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFees[owner()] = true; _isExcludedFromFees[DEAD] = true; _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[address(uniswapV2Router)] = true; isExeption[address(uniswapV2Router)] = true; isExeption[owner()] = true; } receive() external payable { } modifier onlyOperator { require(owner() == msg.sender || marketingAddress == msg.sender, "Ownable: caller is not the owner"); _; } function enableTrading() public onlyOperator { require(isTradingEnabled == false, "Trading is already open!"); isTradingEnabled = true; maxHolding = TOTAL_SUPPLY / 10; maxTxAmount = TOTAL_SUPPLY / 10; } function withdrawGhostToken(address token) external onlyOperator { if (token == address(0x0)) { payable(msg.sender).transfer(address(this).balance); return; } IERC20 ERC20token = IERC20(token); uint256 balance = ERC20token.balanceOf(address(this)); ERC20token.transfer(msg.sender, balance); } function sendETHFromContract(address payable recipient, uint256 amount) internal { recipient.call{gas : 2300, value : amount}(""); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } //=======FeeManagement=======// function excludeFromFees(address account) external onlyOperator { require(!_isExcludedFromFees[account], "Account is already the value of true"); _isExcludedFromFees[account] = true; emit ExcludeFromFees(account); } function includeInFees(address account) external onlyOperator { require(_isExcludedFromFees[account], "Account already included"); _isExcludedFromFees[account] = false; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function changeFees(uint256 _sellFee, uint256 _buyFee) external onlyOwner { require(_sellFee <= 5, "Fees must be less than 5%"); require(_buyFee <= 5, "Fees must be less than 5%"); sellFee = _sellFee; buyFee = _buyFee; emit UpdateFee(sellFee, buyFee); } function changeMarketing(address _marketingAddress) external { require(msg.sender == marketingAddress && _marketingAddress != marketingAddress, "Marketing wallet is already that address"); marketingAddress = _marketingAddress; emit MarketingChanged(marketingAddress); } 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 (!swapping) { _checkLimitation(from, to, amount); } uint _buyFee = buyFee; uint _sellFee = sellFee; if (!isExeption[from] && !isExeption[to]) { require(isTradingEnabled, "Trade is not open"); } if (amount == 0) { return; } bool takeFee = !swapping; if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 toSwap = balanceOf(address(this)); bool canSwap = toSwap >= swapTokensAtAmount && toSwap > 0 && !automatedMarketMakerPairs[from] && takeFee; if (canSwap && !swapping) { swapping = true; uint256 pairBalance = balanceOf(uniswapV2Pair); if (toSwap > pairBalance * maxPercentToSwap / 100) { toSwap = pairBalance * maxPercentToSwap / 100; } swapForFee(toSwap); swapping = false; } if (takeFee && to == uniswapV2Pair && _sellFee > 0) { uint256 fees = (amount * _sellFee) / 100; amount = amount - fees; super._transfer(from, address(this), fees); } else if (takeFee && from == uniswapV2Pair && _buyFee > 0) { uint256 fees = (amount * _buyFee) / 100; amount = amount - fees; super._transfer(from, address(this), fees); } super._transfer(from, to, amount); } //=======Swap=======// function swapForFee(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); require(address(this).balance == 0); try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp) {} catch { } uint256 newBalance = address(this).balance; sendETHFromContract(payable(marketingAddress), newBalance); emit SwapForFee(tokenAmount, newBalance); } function _checkLimitation( address from, address to, uint256 amount ) internal { if (!hasLimit) { if (!isSpecial(from, to) && !isExeption[to]) { require(amount <= maxTxAmount, "Amount exceeds max"); if (to == uniswapV2Pair) { return; } require(balanceOf(to) + amount <= maxHolding, "Max holding exceeded max"); } } } function isSpecial(address from, address to) view public returns (bool){ return (from == owner() || from == marketingAddress || to == marketingAddress || to == owner() || from == address(this) || to == address(this)); } function removeLimit() external onlyOwner { hasLimit = true; } function setExeption(address who, bool status) public onlyOwner { isExeption[who] = status; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"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"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingAddress","type":"address"}],"name":"MarketingChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapForFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"}],"name":"UpdateFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"changeMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hasLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExeption","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"isSpecial","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPercentToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExeption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawGhostToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260056008553480156200001657600080fd5b50604051620056af380380620056af83398181016040528101906200003c919062000dae565b6040518060400160405280600981526020017f43727970746f20414900000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4341490000000000000000000000000000000000000000000000000000000000815250620000c8620000bc620006d060201b60201c565b620006d860201b60201c565b8160059080519060200190620000e092919062000c94565b508060069080519060200190620000f992919062000c94565b5050506200012462000110620007dd60201b60201c565b66038d7ea4c680006200080660201b60201c565b6103e866038d7ea4c680006200013b919062000e5d565b600b81905550603266038d7ea4c6800062000157919062000e5d565b601381905550603266038d7ea4c6800062000173919062000e5d565b60128190555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600f819055506003601081905550600082905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021857600080fd5b505afa1580156200022d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000253919062000e95565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b657600080fd5b505afa158015620002cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f1919062000e95565b6040518363ffffffff1660e01b81526004016200031092919062000ed8565b602060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000366919062000e95565b905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200043f30600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200098060201b60201c565b6200045281600162000b5360201b60201c565b6001600d600062000468620007dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160146000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600062000675620007dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505062001240565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008709062000f66565b60405180910390fd5b6200088d6000838362000c8a60201b60201c565b8060046000828254620008a1919062000f88565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008f9919062000f88565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000960919062000ff6565b60405180910390a36200097c6000838362000c8f60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620009f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009ea9062001089565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a5d9062001121565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000b46919062000ff6565b60405180910390a3505050565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be090620011b9565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b505050565b505050565b82805462000ca2906200120a565b90600052602060002090601f01602090048101928262000cc6576000855562000d12565b82601f1062000ce157805160ff191683800117855562000d12565b8280016001018555821562000d12579182015b8281111562000d1157825182559160200191906001019062000cf4565b5b50905062000d21919062000d25565b5090565b5b8082111562000d4057600081600090555060010162000d26565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d768262000d49565b9050919050565b62000d888162000d69565b811462000d9457600080fd5b50565b60008151905062000da88162000d7d565b92915050565b6000806040838503121562000dc85762000dc762000d44565b5b600062000dd88582860162000d97565b925050602062000deb8582860162000d97565b9150509250929050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e6a8262000df5565b915062000e778362000df5565b92508262000e8a5762000e8962000dff565b5b828204905092915050565b60006020828403121562000eae5762000ead62000d44565b5b600062000ebe8482850162000d97565b91505092915050565b62000ed28162000d69565b82525050565b600060408201905062000eef600083018562000ec7565b62000efe602083018462000ec7565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f4e601f8362000f05565b915062000f5b8262000f16565b602082019050919050565b6000602082019050818103600083015262000f818162000f3f565b9050919050565b600062000f958262000df5565b915062000fa28362000df5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000fda5762000fd962000e2e565b5b828201905092915050565b62000ff08162000df5565b82525050565b60006020820190506200100d600083018462000fe5565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200107160248362000f05565b91506200107e8262001013565b604082019050919050565b60006020820190508181036000830152620010a48162001062565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200110960228362000f05565b91506200111682620010ab565b604082019050919050565b600060208201905081810360008301526200113c81620010fa565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000620011a160388362000f05565b9150620011ae8262001143565b604082019050919050565b60006020820190508181036000830152620011d48162001192565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200122357607f821691505b602082108114156200123a5762001239620011db565b5b50919050565b61445f80620012506000396000f3fe60806040526004361061024a5760003560e01c806368ca92d4116101395780639c7d15a2116100b6578063cd12cde41161007a578063cd12cde414610879578063dd62ed3e146108b6578063e2f45605146108f3578063e57f14e11461091e578063f04d639314610947578063f2fde38b1461098457610251565b80639c7d15a21461076c578063a457c2d714610797578063a5ece941146107d4578063a9059cbb146107ff578063b62496f51461083c57610251565b80638c0b5e22116100fd5780638c0b5e22146106995780638d7dd837146106c45780638da5cb5b146106ed57806395d89b41146107185780639a7a23d61461074357610251565b806368ca92d4146105dc57806370a0823114610605578063715018a61461064257806379cc6790146106595780638a8c523c1461068257610251565b8063313ce567116101c7578063470624021161018b578063470624021461050957806349bd5a5e146105345780634fbee1931461055f5780636161eb181461059c57806362256589146105c557610251565b8063313ce56714610422578063333e6f061461044d578063395093511461047857806342966c68146104b557806344489ad1146104de57610251565b806318160ddd1161020e57806318160ddd1461033d5780631e4e6c9f1461036857806321ecff5b1461039157806323b872dd146103ba5780632b14ca56146103f757610251565b8063064a59d01461025657806306fdde0314610281578063095ea7b3146102ac5780631694505e146102e957806316a2f82a1461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109ad565b604051610278919061302f565b60405180910390f35b34801561028d57600080fd5b506102966109c0565b6040516102a391906130e3565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce919061319e565b610a52565b6040516102e0919061302f565b60405180910390f35b3480156102f557600080fd5b506102fe610a75565b60405161030b919061323d565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613258565b610a9b565b005b34801561034957600080fd5b50610352610c4f565b60405161035f9190613294565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190613258565b610c59565b005b34801561039d57600080fd5b506103b860048036038101906103b391906132af565b610ecd565b005b3480156103c657600080fd5b506103e160048036038101906103dc91906132ef565b610fac565b6040516103ee919061302f565b60405180910390f35b34801561040357600080fd5b5061040c610fdb565b6040516104199190613294565b60405180910390f35b34801561042e57600080fd5b50610437610fe1565b604051610444919061335e565b60405180910390f35b34801561045957600080fd5b50610462610fea565b60405161046f9190613294565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a919061319e565b610ff0565b6040516104ac919061302f565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190613379565b611027565b005b3480156104ea57600080fd5b506104f361103b565b604051610500919061302f565b60405180910390f35b34801561051557600080fd5b5061051e61104e565b60405161052b9190613294565b60405180910390f35b34801561054057600080fd5b50610549611054565b60405161055691906133b5565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190613258565b61107a565b604051610593919061302f565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be919061319e565b6110d0565b005b3480156105d157600080fd5b506105da611350565b005b3480156105e857600080fd5b5061060360048036038101906105fe91906133fc565b611375565b005b34801561061157600080fd5b5061062c60048036038101906106279190613258565b6113d8565b6040516106399190613294565b60405180910390f35b34801561064e57600080fd5b50610657611421565b005b34801561066557600080fd5b50610680600480360381019061067b919061319e565b611435565b005b34801561068e57600080fd5b50610697611455565b005b3480156106a557600080fd5b506106ae6115c9565b6040516106bb9190613294565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190613258565b6115cf565b005b3480156106f957600080fd5b50610702611756565b60405161070f91906133b5565b60405180910390f35b34801561072457600080fd5b5061072d61177f565b60405161073a91906130e3565b60405180910390f35b34801561074f57600080fd5b5061076a600480360381019061076591906133fc565b611811565b005b34801561077857600080fd5b506107816118b8565b60405161078e9190613294565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b9919061319e565b6118be565b6040516107cb919061302f565b60405180910390f35b3480156107e057600080fd5b506107e9611935565b6040516107f691906133b5565b60405180910390f35b34801561080b57600080fd5b506108266004803603810190610821919061319e565b61195b565b604051610833919061302f565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613258565b61197e565b604051610870919061302f565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b919061343c565b61199e565b6040516108ad919061302f565b60405180910390f35b3480156108c257600080fd5b506108dd60048036038101906108d8919061343c565b611b37565b6040516108ea9190613294565b60405180910390f35b3480156108ff57600080fd5b50610908611bbe565b6040516109159190613294565b60405180910390f35b34801561092a57600080fd5b5061094560048036038101906109409190613258565b611bc4565b005b34801561095357600080fd5b5061096e60048036038101906109699190613258565b611dbc565b60405161097b919061302f565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a69190613258565b611ddc565b005b600c60009054906101000a900460ff1681565b6060600580546109cf906134ab565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb906134ab565b8015610a485780601f10610a1d57610100808354040283529160200191610a48565b820191906000526020600020905b815481529060010190602001808311610a2b57829003601f168201915b5050505050905090565b600080610a5d611e60565b9050610a6a818585611e68565b600191505092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16610aba611756565b73ffffffffffffffffffffffffffffffffffffffff161480610b2957503373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f90613529565b60405180910390fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90613595565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600454905090565b3373ffffffffffffffffffffffffffffffffffffffff16610c78611756565b73ffffffffffffffffffffffffffffffffffffffff161480610ce757503373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d90613529565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610da7573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610da1573d6000803e3d6000fd5b50610eca565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610de791906133b5565b60206040518083038186803b158015610dff57600080fd5b505afa158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3791906135ca565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610e749291906135f7565b602060405180830381600087803b158015610e8e57600080fd5b505af1158015610ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec69190613635565b5050505b50565b610ed5612033565b6005821115610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f10906136ae565b60405180910390fd5b6005811115610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f54906136ae565b60405180910390fd5b81600f81905550806010819055507f8987e6f43a6c6bf408c8c427dceb2f98377f859348939ef4ab7b770b510a395a600f54601054604051610fa09291906136ce565b60405180910390a15050565b600080610fb7611e60565b9050610fc48582856120b1565b610fcf85858561213d565b60019150509392505050565b600f5481565b60006009905090565b60135481565b600080610ffb611e60565b905061101c81858561100d8589611b37565b6110179190613726565b611e68565b600191505092915050565b611038611032611e60565b826110d0565b50565b601160009054906101000a900460ff1681565b60105481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611137906137ee565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461119a57600080fd5b6111a6826000836126c2565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490613880565b60405180910390fd5b818103600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600460008282546112d291906138a0565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113379190613294565b60405180910390a361134b836000846126c7565b505050565b611358612033565b6001601160006101000a81548160ff021916908315150217905550565b61137d612033565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611429612033565b61143360006126cc565b565b61144782611441611e60565b836120b1565b61145182826110d0565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16611474611756565b73ffffffffffffffffffffffffffffffffffffffff1614806114e357503373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990613529565b60405180910390fd5b60001515600c60009054906101000a900460ff16151514611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f90613920565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550600a66038d7ea4c680006115a7919061396f565b601381905550600a66038d7ea4c680006115c1919061396f565b601281905550565b60125481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561167a5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6116b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b090613a12565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3181e132a4e832c8974745bb46d612137770c4549db52e729a26200a7ea7af90600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161174b91906133b5565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606006805461178e906134ab565b80601f01602080910402602001604051908101604052809291908181526020018280546117ba906134ab565b80156118075780601f106117dc57610100808354040283529160200191611807565b820191906000526020600020905b8154815290600101906020018083116117ea57829003601f168201915b5050505050905090565b611819612033565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a190613aa4565b60405180910390fd5b6118b482826127d1565b5050565b60085481565b6000806118c9611e60565b905060006118d78286611b37565b90508381101561191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390613b36565b60405180910390fd5b6119298286868403611e68565b60019250505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611966611e60565b905061197381858561213d565b600191505092915050565b600e6020528060005260406000206000915054906101000a900460ff1681565b60006119a8611756565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611a2e5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80611a865750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80611ac35750611a94611756565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80611af957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80611b2f57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff16611be3611756565b73ffffffffffffffffffffffffffffffffffffffff161480611c5257503373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8890613529565b60405180910390fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1590613bc8565b60405180910390fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d93660405160405180910390a250565b60146020528060005260406000206000915054906101000a900460ff1681565b611de4612033565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b90613c5a565b60405180910390fd5b611e5d816126cc565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecf90613cec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90613d7e565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120269190613294565b60405180910390a3505050565b61203b611e60565b73ffffffffffffffffffffffffffffffffffffffff16612059611756565b73ffffffffffffffffffffffffffffffffffffffff16146120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690613529565b60405180910390fd5b565b60006120bd8484611b37565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121375781811015612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090613dea565b60405180910390fd5b6121368484848403611e68565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490613e7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561221d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221490613f0e565b60405180910390fd5b600a60149054906101000a900460ff1661223d5761223c838383612905565b5b600060105490506000600f549050601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122ef5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561234457600c60009054906101000a900460ff16612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a90613f7a565b60405180910390fd5b5b60008314156123545750506126bd565b6000600a60149054906101000a900460ff16159050600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061240a5750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561241457600090505b600061241f306113d8565b90506000600b5482101580156124355750600082115b801561248b5750600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124945750825b90508080156124b05750600a60149054906101000a900460ff16155b15612563576001600a60146101000a81548160ff02191690831515021790555060006124fd600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166113d8565b905060646008548261250f9190613f9a565b612519919061396f565b83111561253d576064600854826125309190613f9a565b61253a919061396f565b92505b61254683612a7f565b6000600a60146101000a81548160ff021916908315150217905550505b8280156125bd5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b80156125c95750600084115b15612609576000606485886125de9190613f9a565b6125e8919061396f565b905080876125f691906138a0565b9650612603893083612d1f565b506126ac565b8280156126635750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b801561266f5750600085115b156126ab576000606486886126849190613f9a565b61268e919061396f565b9050808761269c91906138a0565b96506126a9893083612d1f565b505b5b6126b7888888612d1f565b50505050505b505050565b505050565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b90614066565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b601160009054906101000a900460ff16612a7957612923838361199e565b15801561297a5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a78576012548111156129c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bb906140d2565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a1f57612a7a565b60135481612a2c846113d8565b612a369190613726565b1115612a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6e9061413e565b60405180910390fd5b5b5b5b505050565b6000600267ffffffffffffffff811115612a9c57612a9b61415e565b5b604051908082528060200260200182016040528015612aca5781602001602082028036833780820191505090505b5090503081600081518110612ae257612ae161418d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612b8457600080fd5b505afa158015612b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbc91906141d1565b81600181518110612bd057612bcf61418d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004714612c1757600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c7b9594939291906142f7565b600060405180830381600087803b158015612c9557600080fd5b505af1925050508015612ca6575060015b612caf57612cb0565b5b6000479050612ce1600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612fa3565b7fd973aba74d770e0525b4900564060143e4a342626f3e4c031f898ab0b6de27ad8382604051612d129291906136ce565b60405180910390a1505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8690613e7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df690613f0e565b60405180910390fd5b612e0a8383836126c2565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e88906143c3565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f269190613726565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f8a9190613294565b60405180910390a3612f9d8484846126c7565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc82604051612fca90614414565b600060405180830381858888f193505050503d8060008114613008576040519150601f19603f3d011682016040523d82523d6000602084013e61300d565b606091505b5050505050565b60008115159050919050565b61302981613014565b82525050565b60006020820190506130446000830184613020565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613084578082015181840152602081019050613069565b83811115613093576000848401525b50505050565b6000601f19601f8301169050919050565b60006130b58261304a565b6130bf8185613055565b93506130cf818560208601613066565b6130d881613099565b840191505092915050565b600060208201905081810360008301526130fd81846130aa565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131358261310a565b9050919050565b6131458161312a565b811461315057600080fd5b50565b6000813590506131628161313c565b92915050565b6000819050919050565b61317b81613168565b811461318657600080fd5b50565b60008135905061319881613172565b92915050565b600080604083850312156131b5576131b4613105565b5b60006131c385828601613153565b92505060206131d485828601613189565b9150509250929050565b6000819050919050565b60006132036131fe6131f98461310a565b6131de565b61310a565b9050919050565b6000613215826131e8565b9050919050565b60006132278261320a565b9050919050565b6132378161321c565b82525050565b6000602082019050613252600083018461322e565b92915050565b60006020828403121561326e5761326d613105565b5b600061327c84828501613153565b91505092915050565b61328e81613168565b82525050565b60006020820190506132a96000830184613285565b92915050565b600080604083850312156132c6576132c5613105565b5b60006132d485828601613189565b92505060206132e585828601613189565b9150509250929050565b60008060006060848603121561330857613307613105565b5b600061331686828701613153565b935050602061332786828701613153565b925050604061333886828701613189565b9150509250925092565b600060ff82169050919050565b61335881613342565b82525050565b6000602082019050613373600083018461334f565b92915050565b60006020828403121561338f5761338e613105565b5b600061339d84828501613189565b91505092915050565b6133af8161312a565b82525050565b60006020820190506133ca60008301846133a6565b92915050565b6133d981613014565b81146133e457600080fd5b50565b6000813590506133f6816133d0565b92915050565b6000806040838503121561341357613412613105565b5b600061342185828601613153565b9250506020613432858286016133e7565b9150509250929050565b6000806040838503121561345357613452613105565b5b600061346185828601613153565b925050602061347285828601613153565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806134c357607f821691505b602082108114156134d7576134d661347c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613513602083613055565b915061351e826134dd565b602082019050919050565b6000602082019050818103600083015261354281613506565b9050919050565b7f4163636f756e7420616c726561647920696e636c756465640000000000000000600082015250565b600061357f601883613055565b915061358a82613549565b602082019050919050565b600060208201905081810360008301526135ae81613572565b9050919050565b6000815190506135c481613172565b92915050565b6000602082840312156135e0576135df613105565b5b60006135ee848285016135b5565b91505092915050565b600060408201905061360c60008301856133a6565b6136196020830184613285565b9392505050565b60008151905061362f816133d0565b92915050565b60006020828403121561364b5761364a613105565b5b600061365984828501613620565b91505092915050565b7f46656573206d757374206265206c657373207468616e20352500000000000000600082015250565b6000613698601983613055565b91506136a382613662565b602082019050919050565b600060208201905081810360008301526136c78161368b565b9050919050565b60006040820190506136e36000830185613285565b6136f06020830184613285565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061373182613168565b915061373c83613168565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613771576137706136f7565b5b828201905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006137d8602183613055565b91506137e38261377c565b604082019050919050565b60006020820190508181036000830152613807816137cb565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061386a602283613055565b91506138758261380e565b604082019050919050565b600060208201905081810360008301526138998161385d565b9050919050565b60006138ab82613168565b91506138b683613168565b9250828210156138c9576138c86136f7565b5b828203905092915050565b7f54726164696e6720697320616c7265616479206f70656e210000000000000000600082015250565b600061390a601883613055565b9150613915826138d4565b602082019050919050565b60006020820190508181036000830152613939816138fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061397a82613168565b915061398583613168565b92508261399557613994613940565b5b828204905092915050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006139fc602883613055565b9150613a07826139a0565b604082019050919050565b60006020820190508181036000830152613a2b816139ef565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a8e603983613055565b9150613a9982613a32565b604082019050919050565b60006020820190508181036000830152613abd81613a81565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b20602583613055565b9150613b2b82613ac4565b604082019050919050565b60006020820190508181036000830152613b4f81613b13565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f7472756500000000000000000000000000000000000000000000000000000000602082015250565b6000613bb2602483613055565b9150613bbd82613b56565b604082019050919050565b60006020820190508181036000830152613be181613ba5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c44602683613055565b9150613c4f82613be8565b604082019050919050565b60006020820190508181036000830152613c7381613c37565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613cd6602483613055565b9150613ce182613c7a565b604082019050919050565b60006020820190508181036000830152613d0581613cc9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d68602283613055565b9150613d7382613d0c565b604082019050919050565b60006020820190508181036000830152613d9781613d5b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613dd4601d83613055565b9150613ddf82613d9e565b602082019050919050565b60006020820190508181036000830152613e0381613dc7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e66602583613055565b9150613e7182613e0a565b604082019050919050565b60006020820190508181036000830152613e9581613e59565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef8602383613055565b9150613f0382613e9c565b604082019050919050565b60006020820190508181036000830152613f2781613eeb565b9050919050565b7f5472616465206973206e6f74206f70656e000000000000000000000000000000600082015250565b6000613f64601183613055565b9150613f6f82613f2e565b602082019050919050565b60006020820190508181036000830152613f9381613f57565b9050919050565b6000613fa582613168565b9150613fb083613168565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fe957613fe86136f7565b5b828202905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000614050603883613055565b915061405b82613ff4565b604082019050919050565b6000602082019050818103600083015261407f81614043565b9050919050565b7f416d6f756e742065786365656473206d61780000000000000000000000000000600082015250565b60006140bc601283613055565b91506140c782614086565b602082019050919050565b600060208201905081810360008301526140eb816140af565b9050919050565b7f4d617820686f6c64696e67206578636565646564206d61780000000000000000600082015250565b6000614128601883613055565b9150614133826140f2565b602082019050919050565b600060208201905081810360008301526141578161411b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506141cb8161313c565b92915050565b6000602082840312156141e7576141e6613105565b5b60006141f5848285016141bc565b91505092915050565b6000819050919050565b600061422361421e614219846141fe565b6131de565b613168565b9050919050565b61423381614208565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61426e8161312a565b82525050565b60006142808383614265565b60208301905092915050565b6000602082019050919050565b60006142a482614239565b6142ae8185614244565b93506142b983614255565b8060005b838110156142ea5781516142d18882614274565b97506142dc8361428c565b9250506001810190506142bd565b5085935050505092915050565b600060a08201905061430c6000830188613285565b614319602083018761422a565b818103604083015261432b8186614299565b905061433a60608301856133a6565b6143476080830184613285565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006143ad602683613055565b91506143b882614351565b604082019050919050565b600060208201905081810360008301526143dc816143a0565b9050919050565b600081905092915050565b50565b60006143fe6000836143e3565b9150614409826143ee565b600082019050919050565b600061441f826143f1565b915081905091905056fea264697066735822122064d148f531bb06b2c58c86e18f4c1ea90d6ff5f6b0a4a7baa00df4cea3fb993664736f6c634300080900330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000960e8ec2b53505bd6751e7673e1d44e5ec33e57a
Deployed Bytecode
0x60806040526004361061024a5760003560e01c806368ca92d4116101395780639c7d15a2116100b6578063cd12cde41161007a578063cd12cde414610879578063dd62ed3e146108b6578063e2f45605146108f3578063e57f14e11461091e578063f04d639314610947578063f2fde38b1461098457610251565b80639c7d15a21461076c578063a457c2d714610797578063a5ece941146107d4578063a9059cbb146107ff578063b62496f51461083c57610251565b80638c0b5e22116100fd5780638c0b5e22146106995780638d7dd837146106c45780638da5cb5b146106ed57806395d89b41146107185780639a7a23d61461074357610251565b806368ca92d4146105dc57806370a0823114610605578063715018a61461064257806379cc6790146106595780638a8c523c1461068257610251565b8063313ce567116101c7578063470624021161018b578063470624021461050957806349bd5a5e146105345780634fbee1931461055f5780636161eb181461059c57806362256589146105c557610251565b8063313ce56714610422578063333e6f061461044d578063395093511461047857806342966c68146104b557806344489ad1146104de57610251565b806318160ddd1161020e57806318160ddd1461033d5780631e4e6c9f1461036857806321ecff5b1461039157806323b872dd146103ba5780632b14ca56146103f757610251565b8063064a59d01461025657806306fdde0314610281578063095ea7b3146102ac5780631694505e146102e957806316a2f82a1461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109ad565b604051610278919061302f565b60405180910390f35b34801561028d57600080fd5b506102966109c0565b6040516102a391906130e3565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce919061319e565b610a52565b6040516102e0919061302f565b60405180910390f35b3480156102f557600080fd5b506102fe610a75565b60405161030b919061323d565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613258565b610a9b565b005b34801561034957600080fd5b50610352610c4f565b60405161035f9190613294565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190613258565b610c59565b005b34801561039d57600080fd5b506103b860048036038101906103b391906132af565b610ecd565b005b3480156103c657600080fd5b506103e160048036038101906103dc91906132ef565b610fac565b6040516103ee919061302f565b60405180910390f35b34801561040357600080fd5b5061040c610fdb565b6040516104199190613294565b60405180910390f35b34801561042e57600080fd5b50610437610fe1565b604051610444919061335e565b60405180910390f35b34801561045957600080fd5b50610462610fea565b60405161046f9190613294565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a919061319e565b610ff0565b6040516104ac919061302f565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190613379565b611027565b005b3480156104ea57600080fd5b506104f361103b565b604051610500919061302f565b60405180910390f35b34801561051557600080fd5b5061051e61104e565b60405161052b9190613294565b60405180910390f35b34801561054057600080fd5b50610549611054565b60405161055691906133b5565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190613258565b61107a565b604051610593919061302f565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be919061319e565b6110d0565b005b3480156105d157600080fd5b506105da611350565b005b3480156105e857600080fd5b5061060360048036038101906105fe91906133fc565b611375565b005b34801561061157600080fd5b5061062c60048036038101906106279190613258565b6113d8565b6040516106399190613294565b60405180910390f35b34801561064e57600080fd5b50610657611421565b005b34801561066557600080fd5b50610680600480360381019061067b919061319e565b611435565b005b34801561068e57600080fd5b50610697611455565b005b3480156106a557600080fd5b506106ae6115c9565b6040516106bb9190613294565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190613258565b6115cf565b005b3480156106f957600080fd5b50610702611756565b60405161070f91906133b5565b60405180910390f35b34801561072457600080fd5b5061072d61177f565b60405161073a91906130e3565b60405180910390f35b34801561074f57600080fd5b5061076a600480360381019061076591906133fc565b611811565b005b34801561077857600080fd5b506107816118b8565b60405161078e9190613294565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b9919061319e565b6118be565b6040516107cb919061302f565b60405180910390f35b3480156107e057600080fd5b506107e9611935565b6040516107f691906133b5565b60405180910390f35b34801561080b57600080fd5b506108266004803603810190610821919061319e565b61195b565b604051610833919061302f565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613258565b61197e565b604051610870919061302f565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b919061343c565b61199e565b6040516108ad919061302f565b60405180910390f35b3480156108c257600080fd5b506108dd60048036038101906108d8919061343c565b611b37565b6040516108ea9190613294565b60405180910390f35b3480156108ff57600080fd5b50610908611bbe565b6040516109159190613294565b60405180910390f35b34801561092a57600080fd5b5061094560048036038101906109409190613258565b611bc4565b005b34801561095357600080fd5b5061096e60048036038101906109699190613258565b611dbc565b60405161097b919061302f565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a69190613258565b611ddc565b005b600c60009054906101000a900460ff1681565b6060600580546109cf906134ab565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb906134ab565b8015610a485780601f10610a1d57610100808354040283529160200191610a48565b820191906000526020600020905b815481529060010190602001808311610a2b57829003601f168201915b5050505050905090565b600080610a5d611e60565b9050610a6a818585611e68565b600191505092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16610aba611756565b73ffffffffffffffffffffffffffffffffffffffff161480610b2957503373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f90613529565b60405180910390fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90613595565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600454905090565b3373ffffffffffffffffffffffffffffffffffffffff16610c78611756565b73ffffffffffffffffffffffffffffffffffffffff161480610ce757503373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d90613529565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610da7573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610da1573d6000803e3d6000fd5b50610eca565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610de791906133b5565b60206040518083038186803b158015610dff57600080fd5b505afa158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3791906135ca565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610e749291906135f7565b602060405180830381600087803b158015610e8e57600080fd5b505af1158015610ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec69190613635565b5050505b50565b610ed5612033565b6005821115610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f10906136ae565b60405180910390fd5b6005811115610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f54906136ae565b60405180910390fd5b81600f81905550806010819055507f8987e6f43a6c6bf408c8c427dceb2f98377f859348939ef4ab7b770b510a395a600f54601054604051610fa09291906136ce565b60405180910390a15050565b600080610fb7611e60565b9050610fc48582856120b1565b610fcf85858561213d565b60019150509392505050565b600f5481565b60006009905090565b60135481565b600080610ffb611e60565b905061101c81858561100d8589611b37565b6110179190613726565b611e68565b600191505092915050565b611038611032611e60565b826110d0565b50565b601160009054906101000a900460ff1681565b60105481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611137906137ee565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461119a57600080fd5b6111a6826000836126c2565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490613880565b60405180910390fd5b818103600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600460008282546112d291906138a0565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113379190613294565b60405180910390a361134b836000846126c7565b505050565b611358612033565b6001601160006101000a81548160ff021916908315150217905550565b61137d612033565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611429612033565b61143360006126cc565b565b61144782611441611e60565b836120b1565b61145182826110d0565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16611474611756565b73ffffffffffffffffffffffffffffffffffffffff1614806114e357503373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990613529565b60405180910390fd5b60001515600c60009054906101000a900460ff16151514611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f90613920565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550600a66038d7ea4c680006115a7919061396f565b601381905550600a66038d7ea4c680006115c1919061396f565b601281905550565b60125481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561167a5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6116b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b090613a12565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3181e132a4e832c8974745bb46d612137770c4549db52e729a26200a7ea7af90600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161174b91906133b5565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606006805461178e906134ab565b80601f01602080910402602001604051908101604052809291908181526020018280546117ba906134ab565b80156118075780601f106117dc57610100808354040283529160200191611807565b820191906000526020600020905b8154815290600101906020018083116117ea57829003601f168201915b5050505050905090565b611819612033565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a190613aa4565b60405180910390fd5b6118b482826127d1565b5050565b60085481565b6000806118c9611e60565b905060006118d78286611b37565b90508381101561191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390613b36565b60405180910390fd5b6119298286868403611e68565b60019250505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611966611e60565b905061197381858561213d565b600191505092915050565b600e6020528060005260406000206000915054906101000a900460ff1681565b60006119a8611756565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611a2e5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80611a865750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80611ac35750611a94611756565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80611af957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80611b2f57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff16611be3611756565b73ffffffffffffffffffffffffffffffffffffffff161480611c5257503373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8890613529565b60405180910390fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1590613bc8565b60405180910390fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d93660405160405180910390a250565b60146020528060005260406000206000915054906101000a900460ff1681565b611de4612033565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b90613c5a565b60405180910390fd5b611e5d816126cc565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecf90613cec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90613d7e565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120269190613294565b60405180910390a3505050565b61203b611e60565b73ffffffffffffffffffffffffffffffffffffffff16612059611756565b73ffffffffffffffffffffffffffffffffffffffff16146120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690613529565b60405180910390fd5b565b60006120bd8484611b37565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121375781811015612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090613dea565b60405180910390fd5b6121368484848403611e68565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490613e7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561221d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221490613f0e565b60405180910390fd5b600a60149054906101000a900460ff1661223d5761223c838383612905565b5b600060105490506000600f549050601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122ef5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561234457600c60009054906101000a900460ff16612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a90613f7a565b60405180910390fd5b5b60008314156123545750506126bd565b6000600a60149054906101000a900460ff16159050600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061240a5750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561241457600090505b600061241f306113d8565b90506000600b5482101580156124355750600082115b801561248b5750600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124945750825b90508080156124b05750600a60149054906101000a900460ff16155b15612563576001600a60146101000a81548160ff02191690831515021790555060006124fd600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166113d8565b905060646008548261250f9190613f9a565b612519919061396f565b83111561253d576064600854826125309190613f9a565b61253a919061396f565b92505b61254683612a7f565b6000600a60146101000a81548160ff021916908315150217905550505b8280156125bd5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b80156125c95750600084115b15612609576000606485886125de9190613f9a565b6125e8919061396f565b905080876125f691906138a0565b9650612603893083612d1f565b506126ac565b8280156126635750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b801561266f5750600085115b156126ab576000606486886126849190613f9a565b61268e919061396f565b9050808761269c91906138a0565b96506126a9893083612d1f565b505b5b6126b7888888612d1f565b50505050505b505050565b505050565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b90614066565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b601160009054906101000a900460ff16612a7957612923838361199e565b15801561297a5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a78576012548111156129c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bb906140d2565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a1f57612a7a565b60135481612a2c846113d8565b612a369190613726565b1115612a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6e9061413e565b60405180910390fd5b5b5b5b505050565b6000600267ffffffffffffffff811115612a9c57612a9b61415e565b5b604051908082528060200260200182016040528015612aca5781602001602082028036833780820191505090505b5090503081600081518110612ae257612ae161418d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612b8457600080fd5b505afa158015612b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbc91906141d1565b81600181518110612bd057612bcf61418d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004714612c1757600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c7b9594939291906142f7565b600060405180830381600087803b158015612c9557600080fd5b505af1925050508015612ca6575060015b612caf57612cb0565b5b6000479050612ce1600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612fa3565b7fd973aba74d770e0525b4900564060143e4a342626f3e4c031f898ab0b6de27ad8382604051612d129291906136ce565b60405180910390a1505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8690613e7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df690613f0e565b60405180910390fd5b612e0a8383836126c2565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e88906143c3565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f269190613726565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f8a9190613294565b60405180910390a3612f9d8484846126c7565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc82604051612fca90614414565b600060405180830381858888f193505050503d8060008114613008576040519150601f19603f3d011682016040523d82523d6000602084013e61300d565b606091505b5050505050565b60008115159050919050565b61302981613014565b82525050565b60006020820190506130446000830184613020565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613084578082015181840152602081019050613069565b83811115613093576000848401525b50505050565b6000601f19601f8301169050919050565b60006130b58261304a565b6130bf8185613055565b93506130cf818560208601613066565b6130d881613099565b840191505092915050565b600060208201905081810360008301526130fd81846130aa565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131358261310a565b9050919050565b6131458161312a565b811461315057600080fd5b50565b6000813590506131628161313c565b92915050565b6000819050919050565b61317b81613168565b811461318657600080fd5b50565b60008135905061319881613172565b92915050565b600080604083850312156131b5576131b4613105565b5b60006131c385828601613153565b92505060206131d485828601613189565b9150509250929050565b6000819050919050565b60006132036131fe6131f98461310a565b6131de565b61310a565b9050919050565b6000613215826131e8565b9050919050565b60006132278261320a565b9050919050565b6132378161321c565b82525050565b6000602082019050613252600083018461322e565b92915050565b60006020828403121561326e5761326d613105565b5b600061327c84828501613153565b91505092915050565b61328e81613168565b82525050565b60006020820190506132a96000830184613285565b92915050565b600080604083850312156132c6576132c5613105565b5b60006132d485828601613189565b92505060206132e585828601613189565b9150509250929050565b60008060006060848603121561330857613307613105565b5b600061331686828701613153565b935050602061332786828701613153565b925050604061333886828701613189565b9150509250925092565b600060ff82169050919050565b61335881613342565b82525050565b6000602082019050613373600083018461334f565b92915050565b60006020828403121561338f5761338e613105565b5b600061339d84828501613189565b91505092915050565b6133af8161312a565b82525050565b60006020820190506133ca60008301846133a6565b92915050565b6133d981613014565b81146133e457600080fd5b50565b6000813590506133f6816133d0565b92915050565b6000806040838503121561341357613412613105565b5b600061342185828601613153565b9250506020613432858286016133e7565b9150509250929050565b6000806040838503121561345357613452613105565b5b600061346185828601613153565b925050602061347285828601613153565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806134c357607f821691505b602082108114156134d7576134d661347c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613513602083613055565b915061351e826134dd565b602082019050919050565b6000602082019050818103600083015261354281613506565b9050919050565b7f4163636f756e7420616c726561647920696e636c756465640000000000000000600082015250565b600061357f601883613055565b915061358a82613549565b602082019050919050565b600060208201905081810360008301526135ae81613572565b9050919050565b6000815190506135c481613172565b92915050565b6000602082840312156135e0576135df613105565b5b60006135ee848285016135b5565b91505092915050565b600060408201905061360c60008301856133a6565b6136196020830184613285565b9392505050565b60008151905061362f816133d0565b92915050565b60006020828403121561364b5761364a613105565b5b600061365984828501613620565b91505092915050565b7f46656573206d757374206265206c657373207468616e20352500000000000000600082015250565b6000613698601983613055565b91506136a382613662565b602082019050919050565b600060208201905081810360008301526136c78161368b565b9050919050565b60006040820190506136e36000830185613285565b6136f06020830184613285565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061373182613168565b915061373c83613168565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613771576137706136f7565b5b828201905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006137d8602183613055565b91506137e38261377c565b604082019050919050565b60006020820190508181036000830152613807816137cb565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061386a602283613055565b91506138758261380e565b604082019050919050565b600060208201905081810360008301526138998161385d565b9050919050565b60006138ab82613168565b91506138b683613168565b9250828210156138c9576138c86136f7565b5b828203905092915050565b7f54726164696e6720697320616c7265616479206f70656e210000000000000000600082015250565b600061390a601883613055565b9150613915826138d4565b602082019050919050565b60006020820190508181036000830152613939816138fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061397a82613168565b915061398583613168565b92508261399557613994613940565b5b828204905092915050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006139fc602883613055565b9150613a07826139a0565b604082019050919050565b60006020820190508181036000830152613a2b816139ef565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a8e603983613055565b9150613a9982613a32565b604082019050919050565b60006020820190508181036000830152613abd81613a81565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b20602583613055565b9150613b2b82613ac4565b604082019050919050565b60006020820190508181036000830152613b4f81613b13565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f7472756500000000000000000000000000000000000000000000000000000000602082015250565b6000613bb2602483613055565b9150613bbd82613b56565b604082019050919050565b60006020820190508181036000830152613be181613ba5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c44602683613055565b9150613c4f82613be8565b604082019050919050565b60006020820190508181036000830152613c7381613c37565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613cd6602483613055565b9150613ce182613c7a565b604082019050919050565b60006020820190508181036000830152613d0581613cc9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d68602283613055565b9150613d7382613d0c565b604082019050919050565b60006020820190508181036000830152613d9781613d5b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613dd4601d83613055565b9150613ddf82613d9e565b602082019050919050565b60006020820190508181036000830152613e0381613dc7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e66602583613055565b9150613e7182613e0a565b604082019050919050565b60006020820190508181036000830152613e9581613e59565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef8602383613055565b9150613f0382613e9c565b604082019050919050565b60006020820190508181036000830152613f2781613eeb565b9050919050565b7f5472616465206973206e6f74206f70656e000000000000000000000000000000600082015250565b6000613f64601183613055565b9150613f6f82613f2e565b602082019050919050565b60006020820190508181036000830152613f9381613f57565b9050919050565b6000613fa582613168565b9150613fb083613168565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fe957613fe86136f7565b5b828202905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000614050603883613055565b915061405b82613ff4565b604082019050919050565b6000602082019050818103600083015261407f81614043565b9050919050565b7f416d6f756e742065786365656473206d61780000000000000000000000000000600082015250565b60006140bc601283613055565b91506140c782614086565b602082019050919050565b600060208201905081810360008301526140eb816140af565b9050919050565b7f4d617820686f6c64696e67206578636565646564206d61780000000000000000600082015250565b6000614128601883613055565b9150614133826140f2565b602082019050919050565b600060208201905081810360008301526141578161411b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506141cb8161313c565b92915050565b6000602082840312156141e7576141e6613105565b5b60006141f5848285016141bc565b91505092915050565b6000819050919050565b600061422361421e614219846141fe565b6131de565b613168565b9050919050565b61423381614208565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61426e8161312a565b82525050565b60006142808383614265565b60208301905092915050565b6000602082019050919050565b60006142a482614239565b6142ae8185614244565b93506142b983614255565b8060005b838110156142ea5781516142d18882614274565b97506142dc8361428c565b9250506001810190506142bd565b5085935050505092915050565b600060a08201905061430c6000830188613285565b614319602083018761422a565b818103604083015261432b8186614299565b905061433a60608301856133a6565b6143476080830184613285565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006143ad602683613055565b91506143b882614351565b604082019050919050565b600060208201905081810360008301526143dc816143a0565b9050919050565b600081905092915050565b50565b60006143fe6000836143e3565b9150614409826143ee565b600082019050919050565b600061441f826143f1565b915081905091905056fea264697066735822122064d148f531bb06b2c58c86e18f4c1ea90d6ff5f6b0a4a7baa00df4cea3fb993664736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000960e8ec2b53505bd6751e7673e1d44e5ec33e57a
-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : operator (address): 0x960E8ec2b53505bD6751e7673e1d44E5ec33E57a
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000960e8ec2b53505bd6751e7673e1d44e5ec33e57a
Deployed Bytecode Sourcemap
30055:8660:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30555:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15536:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17893:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30235:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34290:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16658:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32891:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34627:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18675:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31120:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16500:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31243:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19380:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26832:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31183:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31149:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30283:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34492:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22729:687;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38520:76;;;;;;;;;;;;;:::i;:::-;;38605:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16830:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12643:103;;;;;;;;;;;;;:::i;:::-;;27243:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32639:243;;;;;;;;;;;;;:::i;:::-;;31210:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34942:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11993:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15756:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33422:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30193:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20122:437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30155:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17164:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30652:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38275:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17421:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30515:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34031:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31275:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12902:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30555:28;;;;;;;;;;;;;:::o;15536:100::-;15590:13;15623:5;15616:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15536:100;:::o;17893:201::-;17976:4;17993:13;18009:12;:10;:12::i;:::-;17993:28;;18032:32;18041:5;18048:7;18057:6;18032:8;:32::i;:::-;18082:4;18075:11;;;17893:201;;;;:::o;30235:41::-;;;;;;;;;;;;;:::o;34290:193::-;32531:10;32520:21;;:7;:5;:7::i;:::-;:21;;;:55;;;;32565:10;32545:30;;:16;;;;;;;;;;;:30;;;32520:55;32512:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;34371:19:::1;:28;34391:7;34371:28;;;;;;;;;;;;;;;;;;;;;;;;;34363:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34470:5;34439:19;:28;34459:7;34439:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;34290:193:::0;:::o;16658:108::-;16719:7;16746:12;;16739:19;;16658:108;:::o;32891:368::-;32531:10;32520:21;;:7;:5;:7::i;:::-;:21;;;:55;;;;32565:10;32545:30;;:16;;;;;;;;;;;:30;;;32520:55;32512:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;32988:3:::1;32971:21;;:5;:21;;;32967:126;;;33017:10;33009:28;;:51;33038:21;33009:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33075:7;;32967:126;33103:17;33130:5;33103:33;;33147:15;33165:10;:20;;;33194:4;33165:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33147:53;;33211:10;:19;;;33231:10;33243:7;33211:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32956:303;;32621:1;32891:368:::0;:::o;34627:306::-;11878:13;:11;:13::i;:::-;34732:1:::1;34720:8;:13;;34712:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34793:1;34782:7;:12;;34774:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;34845:8;34835:7;:18;;;;34873:7;34864:6;:16;;;;34899:26;34909:7;;34918:6;;34899:26;;;;;;;:::i;:::-;;;;;;;;34627:306:::0;;:::o;18675:295::-;18806:4;18823:15;18841:12;:10;:12::i;:::-;18823:30;;18864:38;18880:4;18886:7;18895:6;18864:15;:38::i;:::-;18913:27;18923:4;18929:2;18933:6;18913:9;:27::i;:::-;18958:4;18951:11;;;18675:295;;;;;:::o;31120:22::-;;;;:::o;16500:92::-;16558:5;16583:1;16576:8;;16500:92;:::o;31243:25::-;;;;:::o;19380:238::-;19468:4;19485:13;19501:12;:10;:12::i;:::-;19485:28;;19524:64;19533:5;19540:7;19577:10;19549:25;19559:5;19566:7;19549:9;:25::i;:::-;:38;;;;:::i;:::-;19524:8;:64::i;:::-;19606:4;19599:11;;;19380:238;;;;:::o;26832:91::-;26888:27;26894:12;:10;:12::i;:::-;26908:6;26888:5;:27::i;:::-;26832:91;:::o;31183:20::-;;;;;;;;;;;;;:::o;31149:21::-;;;;:::o;30283:29::-;;;;;;;;;;;;;:::o;34492:126::-;34558:4;34582:19;:28;34602:7;34582:28;;;;;;;;;;;;;;;;;;;;;;;;;34575:35;;34492:126;;;:::o;22729:687::-;22830:1;22811:21;;:7;:21;;;;22803:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22903:14;;;;;;;;;;;22889:28;;:10;:28;;;22881:37;;;;;;22932:49;22953:7;22970:1;22974:6;22932:20;:49::i;:::-;22995:22;23020:9;:18;23030:7;23020:18;;;;;;;;;;;;;;;;22995:43;;23075:6;23057:14;:24;;23049:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23194:6;23177:14;:23;23156:9;:18;23166:7;23156:18;;;;;;;;;;;;;;;:44;;;;23240:6;23215:9;:21;23225:10;23215:21;;;;;;;;;;;;;;;;:31;;;;;;;;;;;23284:6;23268:12;;:22;;;;;;;:::i;:::-;;;;;;;;23335:1;23309:37;;23318:7;23309:37;;;23339:6;23309:37;;;;;;:::i;:::-;;;;;;;;23360:48;23380:7;23397:1;23401:6;23360:19;:48::i;:::-;22792:624;22729:687;;:::o;38520:76::-;11878:13;:11;:13::i;:::-;38584:4:::1;38573:8;;:15;;;;;;;;;;;;;;;;;;38520:76::o:0;38605:107::-;11878:13;:11;:13::i;:::-;38698:6:::1;38680:10;:15;38691:3;38680:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;38605:107:::0;;:::o;16830:127::-;16904:7;16931:9;:18;16941:7;16931:18;;;;;;;;;;;;;;;;16924:25;;16830:127;;;:::o;12643:103::-;11878:13;:11;:13::i;:::-;12708:30:::1;12735:1;12708:18;:30::i;:::-;12643:103::o:0;27243:164::-;27320:46;27336:7;27345:12;:10;:12::i;:::-;27359:6;27320:15;:46::i;:::-;27377:22;27383:7;27392:6;27377:5;:22::i;:::-;27243:164;;:::o;32639:243::-;32531:10;32520:21;;:7;:5;:7::i;:::-;:21;;;:55;;;;32565:10;32545:30;;:16;;;;;;;;;;;:30;;;32520:55;32512:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;32723:5:::1;32703:25;;:16;;;;;;;;;;;:25;;;32695:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32787:4;32768:16;;:23;;;;;;;;;;;;;;;;;;32830:2;30137:11;32815:17;;;;:::i;:::-;32802:10;:30;;;;32872:2;30137:11;32857:17;;;;:::i;:::-;32843:11;:31;;;;32639:243::o:0;31210:26::-;;;;:::o;34942:301::-;35036:16;;;;;;;;;;;35022:30;;:10;:30;;;:71;;;;;35077:16;;;;;;;;;;;35056:37;;:17;:37;;;;35022:71;35014:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;35168:17;35149:16;;:36;;;;;;;;;;;;;;;;;;35201:34;35218:16;;;;;;;;;;;35201:34;;;;;;:::i;:::-;;;;;;;;34942:301;:::o;11993:87::-;12039:7;12066:6;;;;;;;;;;;12059:13;;11993:87;:::o;15756:104::-;15812:13;15845:7;15838:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15756:104;:::o;33422:245::-;11878:13;:11;:13::i;:::-;33529::::1;;;;;;;;;;;33521:21;;:4;:21;;;;33513:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;33618:41;33647:4;33653:5;33618:28;:41::i;:::-;33422:245:::0;;:::o;30193:35::-;;;;:::o;20122:437::-;20215:4;20232:13;20248:12;:10;:12::i;:::-;20232:28;;20271:24;20298:25;20308:5;20315:7;20298:9;:25::i;:::-;20271:52;;20362:15;20342:16;:35;;20334:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20455:60;20464:5;20471:7;20499:15;20480:16;:34;20455:8;:60::i;:::-;20547:4;20540:11;;;;20122:437;;;;:::o;30155:31::-;;;;;;;;;;;;;:::o;17164:193::-;17243:4;17260:13;17276:12;:10;:12::i;:::-;17260:28;;17299;17309:5;17316:2;17320:6;17299:9;:28::i;:::-;17345:4;17338:11;;;17164:193;;;;:::o;30652:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;38275:236::-;38341:4;38376:7;:5;:7::i;:::-;38368:15;;:4;:15;;;:43;;;;38395:16;;;;;;;;;;;38387:24;;:4;:24;;;38368:43;:69;;;;38421:16;;;;;;;;;;;38415:22;;:2;:22;;;38368:69;:86;;;;38447:7;:5;:7::i;:::-;38441:13;;:2;:13;;;38368:86;:111;;;;38474:4;38458:21;;:4;:21;;;38368:111;:134;;;;38497:4;38483:19;;:2;:19;;;38368:134;38360:143;;38275:236;;;;:::o;17421:151::-;17510:7;17537:11;:18;17549:5;17537:18;;;;;;;;;;;;;;;:27;17556:7;17537:27;;;;;;;;;;;;;;;;17530:34;;17421:151;;;;:::o;30515:33::-;;;;:::o;34031:250::-;32531:10;32520:21;;:7;:5;:7::i;:::-;:21;;;:55;;;;32565:10;32545:30;;:16;;;;;;;;;;;:30;;;32520:55;32512:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;34115:19:::1;:28;34135:7;34115:28;;;;;;;;;;;;;;;;;;;;;;;;;34114:29;34106:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;34226:4;34195:19;:28;34215:7;34195:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34265:7;34249:24;;;;;;;;;;;;34031:250:::0;:::o;31275:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;12902:201::-;11878:13;:11;:13::i;:::-;13011:1:::1;12991:22;;:8;:22;;;;12983:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13067:28;13086:8;13067:18;:28::i;:::-;12902:201:::0;:::o;10606:98::-;10659:7;10686:10;10679:17;;10606:98;:::o;23855:381::-;24008:1;23991:19;;:5;:19;;;;23983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24089:1;24070:21;;:7;:21;;;;24062:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24174:6;24144:11;:18;24156:5;24144:18;;;;;;;;;;;;;;;:27;24163:7;24144:27;;;;;;;;;;;;;;;:36;;;;24212:7;24196:32;;24205:5;24196:32;;;24221:6;24196:32;;;;;;:::i;:::-;;;;;;;;23855:381;;;:::o;12159:132::-;12234:12;:10;:12::i;:::-;12223:23;;:7;:5;:7::i;:::-;:23;;;12215:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12159:132::o;24528:453::-;24663:24;24690:25;24700:5;24707:7;24690:9;:25::i;:::-;24663:52;;24750:17;24730:16;:37;24726:248;;24812:6;24792:16;:26;;24784:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24896:51;24905:5;24912:7;24940:6;24921:16;:25;24896:8;:51::i;:::-;24726:248;24652:329;24528:453;;;:::o;35252:1816::-;35400:1;35384:18;;:4;:18;;;;35376:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35477:1;35463:16;;:2;:16;;;;35455:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35538:8;;;;;;;;;;;35533:76;;35563:34;35580:4;35586:2;35590:6;35563:16;:34::i;:::-;35533:76;35622:12;35637:6;;35622:21;;35654:13;35670:7;;35654:23;;35696:10;:16;35707:4;35696:16;;;;;;;;;;;;;;;;;;;;;;;;;35695:17;:36;;;;;35717:10;:14;35728:2;35717:14;;;;;;;;;;;;;;;;;;;;;;;;;35716:15;35695:36;35691:115;;;35756:16;;;;;;;;;;;35748:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;35691:115;35833:1;35823:6;:11;35819:50;;;35851:7;;;;35819:50;35882:12;35898:8;;;;;;;;;;;35897:9;35882:24;;35924:19;:25;35944:4;35924:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35953:19;:23;35973:2;35953:23;;;;;;;;;;;;;;;;;;;;;;;;;35924:52;35920:100;;;36003:5;35993:15;;35920:100;36033:14;36050:24;36068:4;36050:9;:24::i;:::-;36033:41;;36088:12;36113:18;;36103:6;:28;;:42;;;;;36144:1;36135:6;:10;36103:42;:78;;;;;36150:25;:31;36176:4;36150:31;;;;;;;;;;;;;;;;;;;;;;;;;36149:32;36103:78;:89;;;;;36185:7;36103:89;36088:104;;36207:7;:33;;;;;36232:8;;;;;;;;;;;36231:9;36207:33;36203:351;;;36268:4;36257:8;;:15;;;;;;;;;;;;;;;;;;36287:19;36309:24;36319:13;;;;;;;;;;;36309:9;:24::i;:::-;36287:46;;36394:3;36375:16;;36361:11;:30;;;;:::i;:::-;:36;;;;:::i;:::-;36352:6;:45;36348:131;;;36460:3;36441:16;;36427:11;:30;;;;:::i;:::-;:36;;;;:::i;:::-;36418:45;;36348:131;36493:18;36504:6;36493:10;:18::i;:::-;36537:5;36526:8;;:16;;;;;;;;;;;;;;;;;;36242:312;36203:351;36571:7;:30;;;;;36588:13;;;;;;;;;;;36582:19;;:2;:19;;;36571:30;:46;;;;;36616:1;36605:8;:12;36571:46;36567:447;;;36634:12;36671:3;36659:8;36650:6;:17;;;;:::i;:::-;36649:25;;;;:::i;:::-;36634:40;;36707:4;36698:6;:13;;;;:::i;:::-;36689:22;;36729:42;36745:4;36759;36766;36729:15;:42::i;:::-;36619:164;36567:447;;;36802:7;:32;;;;;36821:13;;;;;;;;;;;36813:21;;:4;:21;;;36802:32;:47;;;;;36848:1;36838:7;:11;36802:47;36798:216;;;36866:12;36902:3;36891:7;36882:6;:16;;;;:::i;:::-;36881:24;;;;:::i;:::-;36866:39;;36938:4;36929:6;:13;;;;:::i;:::-;36920:22;;36960:42;36976:4;36990;36997;36960:15;:42::i;:::-;36851:163;36798:216;36567:447;37027:33;37043:4;37049:2;37053:6;37027:15;:33::i;:::-;35365:1703;;;;;35252:1816;;;;:::o;25582:125::-;;;;:::o;26312:124::-;;;;:::o;13264:227::-;13338:16;13357:6;;;;;;;;;;;13338:25;;13383:8;13374:6;;:17;;;;;;;;;;;;;;;;;;13419:8;13402:14;;:25;;;;;;;;;;;;;;;;;;13474:8;13443:40;;13464:8;13443:40;;;;;;;;;;;;13327:164;13264:227;:::o;33676:309::-;33802:5;33767:40;;:25;:31;33793:4;33767:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;33759:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;33913:5;33879:25;:31;33905:4;33879:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33971:5;33937:40;;33965:4;33937:40;;;;;;;;;;;;33676:309;;:::o;37761:505::-;37891:8;;;;;;;;;;;37886:373;;37924:19;37934:4;37940:2;37924:9;:19::i;:::-;37923:20;:39;;;;;37948:10;:14;37959:2;37948:14;;;;;;;;;;;;;;;;;;;;;;;;;37947:15;37923:39;37919:329;;;38001:11;;37991:6;:21;;37983:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;38067:13;;;;;;;;;;;38061:19;;:2;:19;;;38057:74;;;38105:7;;38057:74;38193:10;;38183:6;38167:13;38177:2;38167:9;:13::i;:::-;:22;;;;:::i;:::-;:36;;38159:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37919:329;37886:373;37761:505;;;;:::o;37105:647::-;37168:21;37206:1;37192:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37168:40;;37237:4;37219;37224:1;37219:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37263:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37253:4;37258:1;37253:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37331:1;37306:21;:26;37298:35;;;;;;37348:15;;;;;;;;;;;:66;;;37429:11;37455:1;37472:4;37499;37519:15;37348:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37344:222;;;;;;37579:18;37600:21;37579:42;;37632:58;37660:16;;;;;;;;;;;37679:10;37632:19;:58::i;:::-;37709:35;37720:11;37733:10;37709:35;;;;;;;:::i;:::-;;;;;;;;37154:598;;37105:647;:::o;21030:675::-;21177:1;21161:18;;:4;:18;;;;21153:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21254:1;21240:16;;:2;:16;;;;21232:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21310:38;21331:4;21337:2;21341:6;21310:20;:38::i;:::-;21362:19;21384:9;:15;21394:4;21384:15;;;;;;;;;;;;;;;;21362:37;;21433:6;21418:11;:21;;21410:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21550:6;21536:11;:20;21518:9;:15;21528:4;21518:15;;;;;;;;;;;;;;;:38;;;;21595:6;21578:9;:13;21588:2;21578:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;21635:2;21620:26;;21629:4;21620:26;;;21639:6;21620:26;;;;;;:::i;:::-;;;;;;;;21660:37;21680:4;21686:2;21690:6;21660:19;:37::i;:::-;21142:563;21030:675;;;:::o;33268:146::-;33360:9;:14;;33381:4;33395:6;33360:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33268:146;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:307::-;782:1;792:113;806:6;803:1;800:13;792:113;;;891:1;886:3;882:11;876:18;872:1;867:3;863:11;856:39;828:2;825:1;821:10;816:15;;792:113;;;923:6;920:1;917:13;914:101;;;1003:1;994:6;989:3;985:16;978:27;914:101;763:258;714:307;;;:::o;1027:102::-;1068:6;1119:2;1115:7;1110:2;1103:5;1099:14;1095:28;1085:38;;1027:102;;;:::o;1135:364::-;1223:3;1251:39;1284:5;1251:39;:::i;:::-;1306:71;1370:6;1365:3;1306:71;:::i;:::-;1299:78;;1386:52;1431:6;1426:3;1419:4;1412:5;1408:16;1386:52;:::i;:::-;1463:29;1485:6;1463:29;:::i;:::-;1458:3;1454:39;1447:46;;1227:272;1135:364;;;;:::o;1505:313::-;1618:4;1656:2;1645:9;1641:18;1633:26;;1705:9;1699:4;1695:20;1691:1;1680:9;1676:17;1669:47;1733:78;1806:4;1797:6;1733:78;:::i;:::-;1725:86;;1505:313;;;;:::o;1905:117::-;2014:1;2011;2004:12;2151:126;2188:7;2228:42;2221:5;2217:54;2206:65;;2151:126;;;:::o;2283:96::-;2320:7;2349:24;2367:5;2349:24;:::i;:::-;2338:35;;2283:96;;;:::o;2385:122::-;2458:24;2476:5;2458:24;:::i;:::-;2451:5;2448:35;2438:63;;2497:1;2494;2487:12;2438:63;2385:122;:::o;2513:139::-;2559:5;2597:6;2584:20;2575:29;;2613:33;2640:5;2613:33;:::i;:::-;2513:139;;;;:::o;2658:77::-;2695:7;2724:5;2713:16;;2658:77;;;:::o;2741:122::-;2814:24;2832:5;2814:24;:::i;:::-;2807:5;2804:35;2794:63;;2853:1;2850;2843:12;2794:63;2741:122;:::o;2869:139::-;2915:5;2953:6;2940:20;2931:29;;2969:33;2996:5;2969:33;:::i;:::-;2869:139;;;;:::o;3014:474::-;3082:6;3090;3139:2;3127:9;3118:7;3114:23;3110:32;3107:119;;;3145:79;;:::i;:::-;3107:119;3265:1;3290:53;3335:7;3326:6;3315:9;3311:22;3290:53;:::i;:::-;3280:63;;3236:117;3392:2;3418:53;3463:7;3454:6;3443:9;3439:22;3418:53;:::i;:::-;3408:63;;3363:118;3014:474;;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:329::-;4531:6;4580:2;4568:9;4559:7;4555:23;4551:32;4548:119;;;4586:79;;:::i;:::-;4548:119;4706:1;4731:53;4776:7;4767:6;4756:9;4752:22;4731:53;:::i;:::-;4721:63;;4677:117;4472:329;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:474::-;5227:6;5235;5284:2;5272:9;5263:7;5259:23;5255:32;5252:119;;;5290:79;;:::i;:::-;5252:119;5410:1;5435:53;5480:7;5471:6;5460:9;5456:22;5435:53;:::i;:::-;5425:63;;5381:117;5537:2;5563:53;5608:7;5599:6;5588:9;5584:22;5563:53;:::i;:::-;5553:63;;5508:118;5159:474;;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:86::-;6299:7;6339:4;6332:5;6328:16;6317:27;;6264:86;;;:::o;6356:112::-;6439:22;6455:5;6439:22;:::i;:::-;6434:3;6427:35;6356:112;;:::o;6474:214::-;6563:4;6601:2;6590:9;6586:18;6578:26;;6614:67;6678:1;6667:9;6663:17;6654:6;6614:67;:::i;:::-;6474:214;;;;:::o;6694:329::-;6753:6;6802:2;6790:9;6781:7;6777:23;6773:32;6770:119;;;6808:79;;:::i;:::-;6770:119;6928:1;6953:53;6998:7;6989:6;6978:9;6974:22;6953:53;:::i;:::-;6943:63;;6899:117;6694:329;;;;:::o;7029:118::-;7116:24;7134:5;7116:24;:::i;:::-;7111:3;7104:37;7029:118;;:::o;7153:222::-;7246:4;7284:2;7273:9;7269:18;7261:26;;7297:71;7365:1;7354:9;7350:17;7341:6;7297:71;:::i;:::-;7153:222;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:468::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7988:115;7642:468;;;;;:::o;8116:474::-;8184:6;8192;8241:2;8229:9;8220:7;8216:23;8212:32;8209:119;;;8247:79;;:::i;:::-;8209:119;8367:1;8392:53;8437:7;8428:6;8417:9;8413:22;8392:53;:::i;:::-;8382:63;;8338:117;8494:2;8520:53;8565:7;8556:6;8545:9;8541:22;8520:53;:::i;:::-;8510:63;;8465:118;8116:474;;;;;:::o;8596:180::-;8644:77;8641:1;8634:88;8741:4;8738:1;8731:15;8765:4;8762:1;8755:15;8782:320;8826:6;8863:1;8857:4;8853:12;8843:22;;8910:1;8904:4;8900:12;8931:18;8921:81;;8987:4;8979:6;8975:17;8965:27;;8921:81;9049:2;9041:6;9038:14;9018:18;9015:38;9012:84;;;9068:18;;:::i;:::-;9012:84;8833:269;8782:320;;;:::o;9108:182::-;9248:34;9244:1;9236:6;9232:14;9225:58;9108:182;:::o;9296:366::-;9438:3;9459:67;9523:2;9518:3;9459:67;:::i;:::-;9452:74;;9535:93;9624:3;9535:93;:::i;:::-;9653:2;9648:3;9644:12;9637:19;;9296:366;;;:::o;9668:419::-;9834:4;9872:2;9861:9;9857:18;9849:26;;9921:9;9915:4;9911:20;9907:1;9896:9;9892:17;9885:47;9949:131;10075:4;9949:131;:::i;:::-;9941:139;;9668:419;;;:::o;10093:174::-;10233:26;10229:1;10221:6;10217:14;10210:50;10093:174;:::o;10273:366::-;10415:3;10436:67;10500:2;10495:3;10436:67;:::i;:::-;10429:74;;10512:93;10601:3;10512:93;:::i;:::-;10630:2;10625:3;10621:12;10614:19;;10273:366;;;:::o;10645:419::-;10811:4;10849:2;10838:9;10834:18;10826:26;;10898:9;10892:4;10888:20;10884:1;10873:9;10869:17;10862:47;10926:131;11052:4;10926:131;:::i;:::-;10918:139;;10645:419;;;:::o;11070:143::-;11127:5;11158:6;11152:13;11143:22;;11174:33;11201:5;11174:33;:::i;:::-;11070:143;;;;:::o;11219:351::-;11289:6;11338:2;11326:9;11317:7;11313:23;11309:32;11306:119;;;11344:79;;:::i;:::-;11306:119;11464:1;11489:64;11545:7;11536:6;11525:9;11521:22;11489:64;:::i;:::-;11479:74;;11435:128;11219:351;;;;:::o;11576:332::-;11697:4;11735:2;11724:9;11720:18;11712:26;;11748:71;11816:1;11805:9;11801:17;11792:6;11748:71;:::i;:::-;11829:72;11897:2;11886:9;11882:18;11873:6;11829:72;:::i;:::-;11576:332;;;;;:::o;11914:137::-;11968:5;11999:6;11993:13;11984:22;;12015:30;12039:5;12015:30;:::i;:::-;11914:137;;;;:::o;12057:345::-;12124:6;12173:2;12161:9;12152:7;12148:23;12144:32;12141:119;;;12179:79;;:::i;:::-;12141:119;12299:1;12324:61;12377:7;12368:6;12357:9;12353:22;12324:61;:::i;:::-;12314:71;;12270:125;12057:345;;;;:::o;12408:175::-;12548:27;12544:1;12536:6;12532:14;12525:51;12408:175;:::o;12589:366::-;12731:3;12752:67;12816:2;12811:3;12752:67;:::i;:::-;12745:74;;12828:93;12917:3;12828:93;:::i;:::-;12946:2;12941:3;12937:12;12930:19;;12589:366;;;:::o;12961:419::-;13127:4;13165:2;13154:9;13150:18;13142:26;;13214:9;13208:4;13204:20;13200:1;13189:9;13185:17;13178:47;13242:131;13368:4;13242:131;:::i;:::-;13234:139;;12961:419;;;:::o;13386:332::-;13507:4;13545:2;13534:9;13530:18;13522:26;;13558:71;13626:1;13615:9;13611:17;13602:6;13558:71;:::i;:::-;13639:72;13707:2;13696:9;13692:18;13683:6;13639:72;:::i;:::-;13386:332;;;;;:::o;13724:180::-;13772:77;13769:1;13762:88;13869:4;13866:1;13859:15;13893:4;13890:1;13883:15;13910:305;13950:3;13969:20;13987:1;13969:20;:::i;:::-;13964:25;;14003:20;14021:1;14003:20;:::i;:::-;13998:25;;14157:1;14089:66;14085:74;14082:1;14079:81;14076:107;;;14163:18;;:::i;:::-;14076:107;14207:1;14204;14200:9;14193:16;;13910:305;;;;:::o;14221:220::-;14361:34;14357:1;14349:6;14345:14;14338:58;14430:3;14425:2;14417:6;14413:15;14406:28;14221:220;:::o;14447:366::-;14589:3;14610:67;14674:2;14669:3;14610:67;:::i;:::-;14603:74;;14686:93;14775:3;14686:93;:::i;:::-;14804:2;14799:3;14795:12;14788:19;;14447:366;;;:::o;14819:419::-;14985:4;15023:2;15012:9;15008:18;15000:26;;15072:9;15066:4;15062:20;15058:1;15047:9;15043:17;15036:47;15100:131;15226:4;15100:131;:::i;:::-;15092:139;;14819:419;;;:::o;15244:221::-;15384:34;15380:1;15372:6;15368:14;15361:58;15453:4;15448:2;15440:6;15436:15;15429:29;15244:221;:::o;15471:366::-;15613:3;15634:67;15698:2;15693:3;15634:67;:::i;:::-;15627:74;;15710:93;15799:3;15710:93;:::i;:::-;15828:2;15823:3;15819:12;15812:19;;15471:366;;;:::o;15843:419::-;16009:4;16047:2;16036:9;16032:18;16024:26;;16096:9;16090:4;16086:20;16082:1;16071:9;16067:17;16060:47;16124:131;16250:4;16124:131;:::i;:::-;16116:139;;15843:419;;;:::o;16268:191::-;16308:4;16328:20;16346:1;16328:20;:::i;:::-;16323:25;;16362:20;16380:1;16362:20;:::i;:::-;16357:25;;16401:1;16398;16395:8;16392:34;;;16406:18;;:::i;:::-;16392:34;16451:1;16448;16444:9;16436:17;;16268:191;;;;:::o;16465:174::-;16605:26;16601:1;16593:6;16589:14;16582:50;16465:174;:::o;16645:366::-;16787:3;16808:67;16872:2;16867:3;16808:67;:::i;:::-;16801:74;;16884:93;16973:3;16884:93;:::i;:::-;17002:2;16997:3;16993:12;16986:19;;16645:366;;;:::o;17017:419::-;17183:4;17221:2;17210:9;17206:18;17198:26;;17270:9;17264:4;17260:20;17256:1;17245:9;17241:17;17234:47;17298:131;17424:4;17298:131;:::i;:::-;17290:139;;17017:419;;;:::o;17442:180::-;17490:77;17487:1;17480:88;17587:4;17584:1;17577:15;17611:4;17608:1;17601:15;17628:185;17668:1;17685:20;17703:1;17685:20;:::i;:::-;17680:25;;17719:20;17737:1;17719:20;:::i;:::-;17714:25;;17758:1;17748:35;;17763:18;;:::i;:::-;17748:35;17805:1;17802;17798:9;17793:14;;17628:185;;;;:::o;17819:227::-;17959:34;17955:1;17947:6;17943:14;17936:58;18028:10;18023:2;18015:6;18011:15;18004:35;17819:227;:::o;18052:366::-;18194:3;18215:67;18279:2;18274:3;18215:67;:::i;:::-;18208:74;;18291:93;18380:3;18291:93;:::i;:::-;18409:2;18404:3;18400:12;18393:19;;18052:366;;;:::o;18424:419::-;18590:4;18628:2;18617:9;18613:18;18605:26;;18677:9;18671:4;18667:20;18663:1;18652:9;18648:17;18641:47;18705:131;18831:4;18705:131;:::i;:::-;18697:139;;18424:419;;;:::o;18849:244::-;18989:34;18985:1;18977:6;18973:14;18966:58;19058:27;19053:2;19045:6;19041:15;19034:52;18849:244;:::o;19099:366::-;19241:3;19262:67;19326:2;19321:3;19262:67;:::i;:::-;19255:74;;19338:93;19427:3;19338:93;:::i;:::-;19456:2;19451:3;19447:12;19440:19;;19099:366;;;:::o;19471:419::-;19637:4;19675:2;19664:9;19660:18;19652:26;;19724:9;19718:4;19714:20;19710:1;19699:9;19695:17;19688:47;19752:131;19878:4;19752:131;:::i;:::-;19744:139;;19471:419;;;:::o;19896:224::-;20036:34;20032:1;20024:6;20020:14;20013:58;20105:7;20100:2;20092:6;20088:15;20081:32;19896:224;:::o;20126:366::-;20268:3;20289:67;20353:2;20348:3;20289:67;:::i;:::-;20282:74;;20365:93;20454:3;20365:93;:::i;:::-;20483:2;20478:3;20474:12;20467:19;;20126:366;;;:::o;20498:419::-;20664:4;20702:2;20691:9;20687:18;20679:26;;20751:9;20745:4;20741:20;20737:1;20726:9;20722:17;20715:47;20779:131;20905:4;20779:131;:::i;:::-;20771:139;;20498:419;;;:::o;20923:223::-;21063:34;21059:1;21051:6;21047:14;21040:58;21132:6;21127:2;21119:6;21115:15;21108:31;20923:223;:::o;21152:366::-;21294:3;21315:67;21379:2;21374:3;21315:67;:::i;:::-;21308:74;;21391:93;21480:3;21391:93;:::i;:::-;21509:2;21504:3;21500:12;21493:19;;21152:366;;;:::o;21524:419::-;21690:4;21728:2;21717:9;21713:18;21705:26;;21777:9;21771:4;21767:20;21763:1;21752:9;21748:17;21741:47;21805:131;21931:4;21805:131;:::i;:::-;21797:139;;21524:419;;;:::o;21949:225::-;22089:34;22085:1;22077:6;22073:14;22066:58;22158:8;22153:2;22145:6;22141:15;22134:33;21949:225;:::o;22180:366::-;22322:3;22343:67;22407:2;22402:3;22343:67;:::i;:::-;22336:74;;22419:93;22508:3;22419:93;:::i;:::-;22537:2;22532:3;22528:12;22521:19;;22180:366;;;:::o;22552:419::-;22718:4;22756:2;22745:9;22741:18;22733:26;;22805:9;22799:4;22795:20;22791:1;22780:9;22776:17;22769:47;22833:131;22959:4;22833:131;:::i;:::-;22825:139;;22552:419;;;:::o;22977:223::-;23117:34;23113:1;23105:6;23101:14;23094:58;23186:6;23181:2;23173:6;23169:15;23162:31;22977:223;:::o;23206:366::-;23348:3;23369:67;23433:2;23428:3;23369:67;:::i;:::-;23362:74;;23445:93;23534:3;23445:93;:::i;:::-;23563:2;23558:3;23554:12;23547:19;;23206:366;;;:::o;23578:419::-;23744:4;23782:2;23771:9;23767:18;23759:26;;23831:9;23825:4;23821:20;23817:1;23806:9;23802:17;23795:47;23859:131;23985:4;23859:131;:::i;:::-;23851:139;;23578:419;;;:::o;24003:221::-;24143:34;24139:1;24131:6;24127:14;24120:58;24212:4;24207:2;24199:6;24195:15;24188:29;24003:221;:::o;24230:366::-;24372:3;24393:67;24457:2;24452:3;24393:67;:::i;:::-;24386:74;;24469:93;24558:3;24469:93;:::i;:::-;24587:2;24582:3;24578:12;24571:19;;24230:366;;;:::o;24602:419::-;24768:4;24806:2;24795:9;24791:18;24783:26;;24855:9;24849:4;24845:20;24841:1;24830:9;24826:17;24819:47;24883:131;25009:4;24883:131;:::i;:::-;24875:139;;24602:419;;;:::o;25027:179::-;25167:31;25163:1;25155:6;25151:14;25144:55;25027:179;:::o;25212:366::-;25354:3;25375:67;25439:2;25434:3;25375:67;:::i;:::-;25368:74;;25451:93;25540:3;25451:93;:::i;:::-;25569:2;25564:3;25560:12;25553:19;;25212:366;;;:::o;25584:419::-;25750:4;25788:2;25777:9;25773:18;25765:26;;25837:9;25831:4;25827:20;25823:1;25812:9;25808:17;25801:47;25865:131;25991:4;25865:131;:::i;:::-;25857:139;;25584:419;;;:::o;26009:224::-;26149:34;26145:1;26137:6;26133:14;26126:58;26218:7;26213:2;26205:6;26201:15;26194:32;26009:224;:::o;26239:366::-;26381:3;26402:67;26466:2;26461:3;26402:67;:::i;:::-;26395:74;;26478:93;26567:3;26478:93;:::i;:::-;26596:2;26591:3;26587:12;26580:19;;26239:366;;;:::o;26611:419::-;26777:4;26815:2;26804:9;26800:18;26792:26;;26864:9;26858:4;26854:20;26850:1;26839:9;26835:17;26828:47;26892:131;27018:4;26892:131;:::i;:::-;26884:139;;26611:419;;;:::o;27036:222::-;27176:34;27172:1;27164:6;27160:14;27153:58;27245:5;27240:2;27232:6;27228:15;27221:30;27036:222;:::o;27264:366::-;27406:3;27427:67;27491:2;27486:3;27427:67;:::i;:::-;27420:74;;27503:93;27592:3;27503:93;:::i;:::-;27621:2;27616:3;27612:12;27605:19;;27264:366;;;:::o;27636:419::-;27802:4;27840:2;27829:9;27825:18;27817:26;;27889:9;27883:4;27879:20;27875:1;27864:9;27860:17;27853:47;27917:131;28043:4;27917:131;:::i;:::-;27909:139;;27636:419;;;:::o;28061:167::-;28201:19;28197:1;28189:6;28185:14;28178:43;28061:167;:::o;28234:366::-;28376:3;28397:67;28461:2;28456:3;28397:67;:::i;:::-;28390:74;;28473:93;28562:3;28473:93;:::i;:::-;28591:2;28586:3;28582:12;28575:19;;28234:366;;;:::o;28606:419::-;28772:4;28810:2;28799:9;28795:18;28787:26;;28859:9;28853:4;28849:20;28845:1;28834:9;28830:17;28823:47;28887:131;29013:4;28887:131;:::i;:::-;28879:139;;28606:419;;;:::o;29031:348::-;29071:7;29094:20;29112:1;29094:20;:::i;:::-;29089:25;;29128:20;29146:1;29128:20;:::i;:::-;29123:25;;29316:1;29248:66;29244:74;29241:1;29238:81;29233:1;29226:9;29219:17;29215:105;29212:131;;;29323:18;;:::i;:::-;29212:131;29371:1;29368;29364:9;29353:20;;29031:348;;;;:::o;29385:243::-;29525:34;29521:1;29513:6;29509:14;29502:58;29594:26;29589:2;29581:6;29577:15;29570:51;29385:243;:::o;29634:366::-;29776:3;29797:67;29861:2;29856:3;29797:67;:::i;:::-;29790:74;;29873:93;29962:3;29873:93;:::i;:::-;29991:2;29986:3;29982:12;29975:19;;29634:366;;;:::o;30006:419::-;30172:4;30210:2;30199:9;30195:18;30187:26;;30259:9;30253:4;30249:20;30245:1;30234:9;30230:17;30223:47;30287:131;30413:4;30287:131;:::i;:::-;30279:139;;30006:419;;;:::o;30431:168::-;30571:20;30567:1;30559:6;30555:14;30548:44;30431:168;:::o;30605:366::-;30747:3;30768:67;30832:2;30827:3;30768:67;:::i;:::-;30761:74;;30844:93;30933:3;30844:93;:::i;:::-;30962:2;30957:3;30953:12;30946:19;;30605:366;;;:::o;30977:419::-;31143:4;31181:2;31170:9;31166:18;31158:26;;31230:9;31224:4;31220:20;31216:1;31205:9;31201:17;31194:47;31258:131;31384:4;31258:131;:::i;:::-;31250:139;;30977:419;;;:::o;31402:174::-;31542:26;31538:1;31530:6;31526:14;31519:50;31402:174;:::o;31582:366::-;31724:3;31745:67;31809:2;31804:3;31745:67;:::i;:::-;31738:74;;31821:93;31910:3;31821:93;:::i;:::-;31939:2;31934:3;31930:12;31923:19;;31582:366;;;:::o;31954:419::-;32120:4;32158:2;32147:9;32143:18;32135:26;;32207:9;32201:4;32197:20;32193:1;32182:9;32178:17;32171:47;32235:131;32361:4;32235:131;:::i;:::-;32227:139;;31954:419;;;:::o;32379:180::-;32427:77;32424:1;32417:88;32524:4;32521:1;32514:15;32548:4;32545:1;32538:15;32565:180;32613:77;32610:1;32603:88;32710:4;32707:1;32700:15;32734:4;32731:1;32724:15;32751:143;32808:5;32839:6;32833:13;32824:22;;32855:33;32882:5;32855:33;:::i;:::-;32751:143;;;;:::o;32900:351::-;32970:6;33019:2;33007:9;32998:7;32994:23;32990:32;32987:119;;;33025:79;;:::i;:::-;32987:119;33145:1;33170:64;33226:7;33217:6;33206:9;33202:22;33170:64;:::i;:::-;33160:74;;33116:128;32900:351;;;;:::o;33257:85::-;33302:7;33331:5;33320:16;;33257:85;;;:::o;33348:158::-;33406:9;33439:61;33457:42;33466:32;33492:5;33466:32;:::i;:::-;33457:42;:::i;:::-;33439:61;:::i;:::-;33426:74;;33348:158;;;:::o;33512:147::-;33607:45;33646:5;33607:45;:::i;:::-;33602:3;33595:58;33512:147;;:::o;33665:114::-;33732:6;33766:5;33760:12;33750:22;;33665:114;;;:::o;33785:184::-;33884:11;33918:6;33913:3;33906:19;33958:4;33953:3;33949:14;33934:29;;33785:184;;;;:::o;33975:132::-;34042:4;34065:3;34057:11;;34095:4;34090:3;34086:14;34078:22;;33975:132;;;:::o;34113:108::-;34190:24;34208:5;34190:24;:::i;:::-;34185:3;34178:37;34113:108;;:::o;34227:179::-;34296:10;34317:46;34359:3;34351:6;34317:46;:::i;:::-;34395:4;34390:3;34386:14;34372:28;;34227:179;;;;:::o;34412:113::-;34482:4;34514;34509:3;34505:14;34497:22;;34412:113;;;:::o;34561:732::-;34680:3;34709:54;34757:5;34709:54;:::i;:::-;34779:86;34858:6;34853:3;34779:86;:::i;:::-;34772:93;;34889:56;34939:5;34889:56;:::i;:::-;34968:7;34999:1;34984:284;35009:6;35006:1;35003:13;34984:284;;;35085:6;35079:13;35112:63;35171:3;35156:13;35112:63;:::i;:::-;35105:70;;35198:60;35251:6;35198:60;:::i;:::-;35188:70;;35044:224;35031:1;35028;35024:9;35019:14;;34984:284;;;34988:14;35284:3;35277:10;;34685:608;;;34561:732;;;;:::o;35299:831::-;35562:4;35600:3;35589:9;35585:19;35577:27;;35614:71;35682:1;35671:9;35667:17;35658:6;35614:71;:::i;:::-;35695:80;35771:2;35760:9;35756:18;35747:6;35695:80;:::i;:::-;35822:9;35816:4;35812:20;35807:2;35796:9;35792:18;35785:48;35850:108;35953:4;35944:6;35850:108;:::i;:::-;35842:116;;35968:72;36036:2;36025:9;36021:18;36012:6;35968:72;:::i;:::-;36050:73;36118:3;36107:9;36103:19;36094:6;36050:73;:::i;:::-;35299:831;;;;;;;;:::o;36136:225::-;36276:34;36272:1;36264:6;36260:14;36253:58;36345:8;36340:2;36332:6;36328:15;36321:33;36136:225;:::o;36367:366::-;36509:3;36530:67;36594:2;36589:3;36530:67;:::i;:::-;36523:74;;36606:93;36695:3;36606:93;:::i;:::-;36724:2;36719:3;36715:12;36708:19;;36367:366;;;:::o;36739:419::-;36905:4;36943:2;36932:9;36928:18;36920:26;;36992:9;36986:4;36982:20;36978:1;36967:9;36963:17;36956:47;37020:131;37146:4;37020:131;:::i;:::-;37012:139;;36739:419;;;:::o;37164:147::-;37265:11;37302:3;37287:18;;37164:147;;;;:::o;37317:114::-;;:::o;37437:398::-;37596:3;37617:83;37698:1;37693:3;37617:83;:::i;:::-;37610:90;;37709:93;37798:3;37709:93;:::i;:::-;37827:1;37822:3;37818:11;37811:18;;37437:398;;;:::o;37841:379::-;38025:3;38047:147;38190:3;38047:147;:::i;:::-;38040:154;;38211:3;38204:10;;37841:379;;;:::o
Swarm Source
ipfs://64d148f531bb06b2c58c86e18f4c1ea90d6ff5f6b0a4a7baa00df4cea3fb9936
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,442.63 | 0.001 | $3.44 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.