Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 582 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 24266734 | 18 days ago | IN | 0 ETH | 0.00000406 | ||||
| Transfer | 24265006 | 18 days ago | IN | 0 ETH | 0.00000733 | ||||
| Transfer | 24262549 | 19 days ago | IN | 0 ETH | 0.00000669 | ||||
| Transfer | 24257598 | 19 days ago | IN | 0 ETH | 0.00000673 | ||||
| Approve | 24255283 | 20 days ago | IN | 0 ETH | 0.00000766 | ||||
| Approve | 24255272 | 20 days ago | IN | 0 ETH | 0.00000722 | ||||
| Approve | 24206008 | 26 days ago | IN | 0 ETH | 0.00004876 | ||||
| Approve | 24013887 | 53 days ago | IN | 0 ETH | 0.00004907 | ||||
| Approve | 24006454 | 54 days ago | IN | 0 ETH | 0.00000207 | ||||
| Transfer | 23879571 | 72 days ago | IN | 0 ETH | 0.00012309 | ||||
| Approve | 23844308 | 77 days ago | IN | 0 ETH | 0.00015964 | ||||
| Approve | 23803461 | 83 days ago | IN | 0 ETH | 0.00000519 | ||||
| Approve | 23711876 | 96 days ago | IN | 0 ETH | 0.0000993 | ||||
| Transfer | 23685632 | 99 days ago | IN | 0 ETH | 0.0000894 | ||||
| Approve | 23583356 | 114 days ago | IN | 0 ETH | 0.00005486 | ||||
| Approve | 23567887 | 116 days ago | IN | 0 ETH | 0.00008254 | ||||
| Approve | 23564817 | 116 days ago | IN | 0 ETH | 0.00005516 | ||||
| Approve | 23516094 | 123 days ago | IN | 0 ETH | 0.00005186 | ||||
| Approve | 23509963 | 124 days ago | IN | 0 ETH | 0.00000901 | ||||
| Approve | 23505971 | 125 days ago | IN | 0 ETH | 0.00005525 | ||||
| Approve | 23467176 | 130 days ago | IN | 0 ETH | 0.00001205 | ||||
| Approve | 23467174 | 130 days ago | IN | 0 ETH | 0.00001219 | ||||
| Transfer | 23461651 | 131 days ago | IN | 0 ETH | 0.00006462 | ||||
| Approve | 23373123 | 143 days ago | IN | 0 ETH | 0.00003591 | ||||
| Approve | 23312581 | 152 days ago | IN | 0 ETH | 0.00002786 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Token
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2025-06-16 */ // SPDX-License-Identifier: MIT /* Cypher App: A Privacy Protocol For Anonymous Transactions Non-custodial privacy protocol on Ethereum leveraging ZKPs and ASP for secure, anonymous, compliant transactions. Website: https://cypherapp.tech/ X: https://x.com/0xCypherApp TG: https://t.me/CypherApp0x TG Bot: t.me/cypherapp_bot Email: [email protected] Github: https://github.com/0xcypherapp */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ 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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.20; /** * @dev Interface for the optional metadata functions from the ERC-20 standard. */ 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); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** * @dev Standard ERC-20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC-721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC-1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.20; /** * @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}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * 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 ERC-20 * applications. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * Both 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 returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual 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 default value returned by this function, unless * it's 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 returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual 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 `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` 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 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Skips emitting an {Approval} event indicating an allowance update. This is not * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. * * 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 `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` 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. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` 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. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * * ```solidity * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner`'s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance < type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity ^0.8.28; contract Token is ERC20, Ownable { uint256 public immutable MAX_SUPPLY; address public immutable pair; address public treasury; IUniswapV2Router02 private constant _router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address private immutable _weth; address private immutable _deployer; uint256 public startBlock; uint256 public startBlockTime; uint256 private raiseAmount; mapping(address account => bool) public isExcludedFromFees; mapping(address account => bool) public isExcludedFromMaxWallet; mapping(address origin => mapping(uint256 blockNumber => uint256 txCount)) public maxBuyTxsPerBlockPerOrigin; uint256 private _maxBuyTxsPerBlockPerOrigin = 15; mapping(uint256 blockNumber => uint256 txCount) public maxBuyTxsPerBlock; uint256 private _maxBuyTxsPerBlock = 100; constructor( string memory name, string memory symbol, uint256 maxSupply, address _treasury ) ERC20(name, symbol) Ownable(msg.sender) { MAX_SUPPLY = maxSupply; _weth = _router.WETH(); pair = IUniswapV2Factory(_router.factory()).createPair( address(this), _weth ); isExcludedFromFees[msg.sender] = true; isExcludedFromFees[address(this)] = true; isExcludedFromFees[pair] = true; isExcludedFromFees[treasury] = true; isExcludedFromMaxWallet[msg.sender] = true; isExcludedFromMaxWallet[address(this)] = true; isExcludedFromMaxWallet[pair] = true; isExcludedFromMaxWallet[treasury] = true; _mint(msg.sender, maxSupply); _approve(msg.sender, address(_router), type(uint256).max); treasury = _treasury; _deployer = msg.sender; _approve(address(this), address(_router), type(uint256).max); } function setTreasury(address newTreasury) external { require(newTreasury != address(0), "treasury-is-0"); require( msg.sender == _deployer || msg.sender == owner(), "only-deployer" ); treasury = newTreasury; } function enableTrading() external onlyOwner { require(startBlock == 0, "trading-already-enabled"); startBlock = block.number; startBlockTime = block.timestamp; } function setExcludedFromFees( address account, bool excluded ) external onlyOwner { isExcludedFromFees[account] = excluded; } function setExcludedFromMaxWallet( address account, bool excluded ) external onlyOwner { isExcludedFromMaxWallet[account] = excluded; } function feesAndMaxWallet() external view returns (uint256 _feeBps, uint256 _maxWallet) { return _feesAndMaxWallet(); } function _feesAndMaxWallet() internal view returns (uint256 _feeBps, uint256 _maxWallet) { if (startBlockTime == 0) { return (0, 0); } uint256 _diffSeconds = block.timestamp - startBlockTime; if (_diffSeconds < 3600) { // 1 min if (_diffSeconds < 60) { _feeBps = 2500; // 25% _maxWallet = MAX_SUPPLY / 100; // 1% return (_feeBps, _maxWallet); } // 2-5 min if (_diffSeconds < 300) { _feeBps = 2000; // 20% _maxWallet = MAX_SUPPLY / 80; // 1.25% return (_feeBps, _maxWallet); } // 6-8 min if (_diffSeconds < 480) { _feeBps = 1500; // 15% _maxWallet = MAX_SUPPLY / 66; // 1.5% return (_feeBps, _maxWallet); } if (_diffSeconds < 900) { // 9-15 min _feeBps = 1000; // 10% _maxWallet = MAX_SUPPLY / 50; // 2% return (_feeBps, _maxWallet); } _feeBps = 500; // 5% _maxWallet = MAX_SUPPLY; // NO LIMIT ✅ return (_feeBps, _maxWallet); } // After 1 hour if (raiseAmount < 100 ether) { _feeBps = 400; // 4%; } else if (raiseAmount < 200 ether) { _feeBps = 300; // 3%; } else if (raiseAmount < 300 ether) { _feeBps = 200; // 2%; } else { _feeBps = 0; // 0%; } _maxWallet = MAX_SUPPLY; // no limit return (_feeBps, _maxWallet); } function _update( address from, address to, uint256 value ) internal override { (uint256 _feeBps, uint256 _maxWallet) = _feesAndMaxWallet(); bool isBuy = from == pair; if (isBuy || to == pair) { require( startBlock > 0 || isExcludedFromFees[to], "trading-not-enabled" ); if (_feeBps != 0) { if (isBuy && !isExcludedFromFees[to]) { if ( startBlockTime > 0 && block.timestamp - startBlockTime < 180 ) { require( maxBuyTxsPerBlockPerOrigin[tx.origin][ block.number ] < _maxBuyTxsPerBlockPerOrigin, "max-buy-txs-per-block-per-origin-exceeded" ); maxBuyTxsPerBlockPerOrigin[tx.origin][block.number]++; require( maxBuyTxsPerBlock[block.number] < _maxBuyTxsPerBlock, "max-buy-txs-per-block-exceeded" ); maxBuyTxsPerBlock[block.number]++; } uint256 fee = (value * _feeBps) / 10000; value -= fee; super._update(from, address(this), fee); } if (!isBuy && !isExcludedFromFees[from]) { uint256 fee = (value * _feeBps) / 10000; value -= fee; super._update(from, address(this), fee); _swapTokensForEth(); } } else { // sell any remaining tokens after cap is reached if (!isBuy && !isExcludedFromFees[from]) { _swapTokensForEth(); } } } require( isExcludedFromMaxWallet[to] || value + balanceOf(to) <= _maxWallet, "max-wallet-size-exceeded" ); super._update(from, to, value); } function _swapTokensForEth() internal { uint256 startDiff = block.timestamp - startBlockTime; if (startDiff < 300) { return; } uint256 _tokenAmount = balanceOf(address(this)); if (_tokenAmount == 0) { return; } address[] memory _path = new address[](2); _path[0] = _weth; _path[1] = address(this); // sell max 1 eth worth of tokens uint256 _maxTokenAmount = _router.getAmountsOut(1 ether, _path)[1]; if (_tokenAmount > _maxTokenAmount) { _tokenAmount = _maxTokenAmount; } _path[0] = address(this); _path[1] = _weth; uint256 _treasuryBalanceBefore = address(treasury).balance; _router.swapExactTokensForETHSupportingFeeOnTransferTokens( _tokenAmount, 0, _path, treasury, block.timestamp ); uint256 _treasuryBalanceAfter = address(treasury).balance; raiseAmount += _treasuryBalanceAfter - _treasuryBalanceBefore; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesAndMaxWallet","outputs":[{"internalType":"uint256","name":"_feeBps","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"stateMutability":"view","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":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"maxBuyTxsPerBlock","outputs":[{"internalType":"uint256","name":"txCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"origin","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"maxBuyTxsPerBlockPerOrigin","outputs":[{"internalType":"uint256","name":"txCount","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlockTime","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":"value","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":"value","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":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
610100604052600f600d556064600f5534801561001b57600080fd5b50604051614fa7380380614fa7833981810160405281019061003d9190611922565b338484816003908161004f9190611bd8565b50806004908161005f9190611bd8565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100d45760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100cb9190611cb9565b60405180910390fd5b6100e3816106f760201b60201c565b508160808181525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561014b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061016f9190611cd4565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102259190611cd4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b8152600401610261929190611d01565b6020604051808303816000875af1158015610280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a49190611cd4565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506105ef33836107bd60201b60201c565b61063433737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61084560201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250506106ee30737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61084560201b60201c565b505050506123f1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361082f5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016108269190611cb9565b60405180910390fd5b6108416000838361085d60201b60201c565b5050565b6108588383836001610da460201b60201c565b505050565b60008061086e610f7b60201b60201c565b91509150600060a05173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905080806108e0575060a05173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15610cdb576000600754118061093f5750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097590611d87565b60405180910390fd5b60008314610c6d578080156109dd5750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610bbf576000600854118015610a01575060b4600854426109ff9190611dd6565b105b15610b8157600d54600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060004381526020019081526020016000205410610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9190611e7c565b60405180910390fd5b600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060004381526020019081526020016000206000815480929190610afb90611e9c565b9190505550600f54600e60004381526020019081526020016000205410610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90611f30565b60405180910390fd5b600e60004381526020019081526020016000206000815480929190610b7b90611e9c565b91905055505b60006127108486610b929190611f50565b610b9c9190611fc1565b90508085610baa9190611dd6565b9450610bbd8730836110bf60201b60201c565b505b80158015610c175750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610c685760006127108486610c2d9190611f50565b610c379190611fc1565b90508085610c459190611dd6565b9450610c588730836110bf60201b60201c565b610c666112e460201b60201c565b505b610cda565b80158015610cc55750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610cd957610cd86112e460201b60201c565b5b5b5b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610d4c575081610d3e866116d160201b60201c565b85610d499190611ff2565b11155b610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8290612072565b60405180910390fd5b610d9c8686866110bf60201b60201c565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e165760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e0d9190611cb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e885760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610e7f9190611cb9565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610f75578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f6c91906120a1565b60405180910390a35b50505050565b600080600060085403610f9457600080915091506110bb565b600060085442610fa49190611dd6565b9050610e1081101561105757603c811015610fd5576109c492506064608051610fcd9190611fc1565b9150506110bb565b61012c811015610ffb576107d092506050608051610ff39190611fc1565b9150506110bb565b6101e0811015611021576105dc925060426080516110199190611fc1565b9150506110bb565b610384811015611047576103e89250603260805161103f9190611fc1565b9150506110bb565b6101f492506080519150506110bb565b68056bc75e2d6310000060095410156110745761019092506110b4565b680ad78ebc5ac620000060095410156110915761012c92506110b3565b681043561a882930000060095410156110ad5760c892506110b2565b600092505b5b5b6080519150505b9091565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111115780600260008282546111059190611ff2565b925050819055506111e4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561119d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611194939291906120bc565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361122d578060026000828254039250508190555061127a565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112d791906120a1565b60405180910390a3505050565b6000600854426112f49190611dd6565b905061012c81101561130657506116cf565b6000611317306116d160201b60201c565b9050600081036113285750506116cf565b6000600267ffffffffffffffff81111561134557611344611748565b5b6040519080825280602002602001820160405280156113735781602001602082028036833780820191505090505b50905060c0518160008151811061138d5761138c6120f3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106113dc576113db6120f3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b815260040161146f92919061221b565b600060405180830381865afa15801561148c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906114b59190612313565b6001815181106114c8576114c76120f3565b5b60200260200101519050808311156114de578092505b30826000815181106114f3576114f26120f3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060c05182600181518110611544576115436120f3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16319050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94785600086600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611634959493929190612397565b600060405180830381600087803b15801561164e57600080fd5b505af1158015611662573d6000803e3d6000fd5b505050506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1631905081816116b09190611dd6565b600960008282546116c19190611ff2565b925050819055505050505050505b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61178082611737565b810181811067ffffffffffffffff8211171561179f5761179e611748565b5b80604052505050565b60006117b2611719565b90506117be8282611777565b919050565b600067ffffffffffffffff8211156117de576117dd611748565b5b6117e782611737565b9050602081019050919050565b60005b838110156118125780820151818401526020810190506117f7565b60008484015250505050565b600061183161182c846117c3565b6117a8565b90508281526020810184848401111561184d5761184c611732565b5b6118588482856117f4565b509392505050565b600082601f8301126118755761187461172d565b5b815161188584826020860161181e565b91505092915050565b6000819050919050565b6118a18161188e565b81146118ac57600080fd5b50565b6000815190506118be81611898565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118ef826118c4565b9050919050565b6118ff816118e4565b811461190a57600080fd5b50565b60008151905061191c816118f6565b92915050565b6000806000806080858703121561193c5761193b611723565b5b600085015167ffffffffffffffff81111561195a57611959611728565b5b61196687828801611860565b945050602085015167ffffffffffffffff81111561198757611986611728565b5b61199387828801611860565b93505060406119a4878288016118af565b92505060606119b58782880161190d565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a1357607f821691505b602082108103611a2657611a256119cc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611a8e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611a51565b611a988683611a51565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611ad5611ad0611acb8461188e565b611ab0565b61188e565b9050919050565b6000819050919050565b611aef83611aba565b611b03611afb82611adc565b848454611a5e565b825550505050565b600090565b611b18611b0b565b611b23818484611ae6565b505050565b5b81811015611b4757611b3c600082611b10565b600181019050611b29565b5050565b601f821115611b8c57611b5d81611a2c565b611b6684611a41565b81016020851015611b75578190505b611b89611b8185611a41565b830182611b28565b50505b505050565b600082821c905092915050565b6000611baf60001984600802611b91565b1980831691505092915050565b6000611bc88383611b9e565b9150826002028217905092915050565b611be1826119c1565b67ffffffffffffffff811115611bfa57611bf9611748565b5b611c0482546119fb565b611c0f828285611b4b565b600060209050601f831160018114611c425760008415611c30578287015190505b611c3a8582611bbc565b865550611ca2565b601f198416611c5086611a2c565b60005b82811015611c7857848901518255600182019150602085019450602081019050611c53565b86831015611c955784890151611c91601f891682611b9e565b8355505b6001600288020188555050505b505050505050565b611cb3816118e4565b82525050565b6000602082019050611cce6000830184611caa565b92915050565b600060208284031215611cea57611ce9611723565b5b6000611cf88482850161190d565b91505092915050565b6000604082019050611d166000830185611caa565b611d236020830184611caa565b9392505050565b600082825260208201905092915050565b7f74726164696e672d6e6f742d656e61626c656400000000000000000000000000600082015250565b6000611d71601383611d2a565b9150611d7c82611d3b565b602082019050919050565b60006020820190508181036000830152611da081611d64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611de18261188e565b9150611dec8361188e565b9250828203905081811115611e0457611e03611da7565b5b92915050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e60008201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b6000611e66602983611d2a565b9150611e7182611e0a565b604082019050919050565b60006020820190508181036000830152611e9581611e59565b9050919050565b6000611ea78261188e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ed957611ed8611da7565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d65786365656465640000600082015250565b6000611f1a601e83611d2a565b9150611f2582611ee4565b602082019050919050565b60006020820190508181036000830152611f4981611f0d565b9050919050565b6000611f5b8261188e565b9150611f668361188e565b9250828202611f748161188e565b91508282048414831517611f8b57611f8a611da7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611fcc8261188e565b9150611fd78361188e565b925082611fe757611fe6611f92565b5b828204905092915050565b6000611ffd8261188e565b91506120088361188e565b92508282019050808211156120205761201f611da7565b5b92915050565b7f6d61782d77616c6c65742d73697a652d65786365656465640000000000000000600082015250565b600061205c601883611d2a565b915061206782612026565b602082019050919050565b6000602082019050818103600083015261208b8161204f565b9050919050565b61209b8161188e565b82525050565b60006020820190506120b66000830184612092565b92915050565b60006060820190506120d16000830186611caa565b6120de6020830185612092565b6120eb6040830184612092565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061214761214261213d84612122565b611ab0565b61188e565b9050919050565b6121578161212c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612192816118e4565b82525050565b60006121a48383612189565b60208301905092915050565b6000602082019050919050565b60006121c88261215d565b6121d28185612168565b93506121dd83612179565b8060005b8381101561220e5781516121f58882612198565b9750612200836121b0565b9250506001810190506121e1565b5085935050505092915050565b6000604082019050612230600083018561214e565b818103602083015261224281846121bd565b90509392505050565b600067ffffffffffffffff82111561226657612265611748565b5b602082029050602081019050919050565b600080fd5b600061228f61228a8461224b565b6117a8565b905080838252602082019050602084028301858111156122b2576122b1612277565b5b835b818110156122db57806122c788826118af565b8452602084019350506020810190506122b4565b5050509392505050565b600082601f8301126122fa576122f961172d565b5b815161230a84826020860161227c565b91505092915050565b60006020828403121561232957612328611723565b5b600082015167ffffffffffffffff81111561234757612346611728565b5b612353848285016122e5565b91505092915050565b6000819050919050565b600061238161237c6123778461235c565b611ab0565b61188e565b9050919050565b61239181612366565b82525050565b600060a0820190506123ac6000830188612092565b6123b96020830187612388565b81810360408301526123cb81866121bd565b90506123da6060830185611caa565b6123e76080830184612092565b9695505050505050565b60805160a05160c05160e051612b3e6124696000396000610a69015260008181611ac70152611c9c01526000818161092c015281816112ce015261132601526000818161064e01528181610f3301528181610f7701528181610fbb01528181610fff0152818161103701526110bd0152612b3e6000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806361d027b3116100de57806395d89b4111610097578063a9059cbb11610071578063a9059cbb1461047a578063dd62ed3e146104aa578063f0f44260146104da578063f2fde38b146104f65761018e565b806395d89b411461041f578063a25ba1831461043d578063a8aa1b311461045c5761018e565b806361d027b31461036f5780636dd3d39f1461038d57806370a08231146103bd578063715018a6146103ed5780638a8c523c146103f75780638da5cb5b146104015761018e565b806323b872dd1161014b578063412201041161012557806341220104146102e957806348cd4cb1146103055780634fbee19314610323578063590ffdce146103535761018e565b806323b872dd1461027d578063313ce567146102ad57806332cb6b0c146102cb5761018e565b806306fdde0314610193578063095ea7b3146101b15780630c18d4ce146101e15780630fe3fe7d146101ff57806318160ddd1461022f57806321b024861461024d575b600080fd5b61019b610512565b6040516101a89190611eec565b60405180910390f35b6101cb60048036038101906101c69190611fb6565b6105a4565b6040516101d89190612011565b60405180910390f35b6101e96105c7565b6040516101f6919061203b565b60405180910390f35b61021960048036038101906102149190611fb6565b6105cd565b604051610226919061203b565b60405180910390f35b6102376105f2565b604051610244919061203b565b60405180910390f35b61026760048036038101906102629190612056565b6105fc565b604051610274919061203b565b60405180910390f35b61029760048036038101906102929190612083565b610614565b6040516102a49190612011565b60405180910390f35b6102b5610643565b6040516102c291906120f2565b60405180910390f35b6102d361064c565b6040516102e0919061203b565b60405180910390f35b61030360048036038101906102fe9190612139565b610670565b005b61030d6106d3565b60405161031a919061203b565b60405180910390f35b61033d60048036038101906103389190612179565b6106d9565b60405161034a9190612011565b60405180910390f35b61036d60048036038101906103689190612139565b6106f9565b005b61037761075c565b60405161038491906121b5565b60405180910390f35b6103a760048036038101906103a29190612179565b610782565b6040516103b49190612011565b60405180910390f35b6103d760048036038101906103d29190612179565b6107a2565b6040516103e4919061203b565b60405180910390f35b6103f56107ea565b005b6103ff6107fe565b005b61040961085b565b60405161041691906121b5565b60405180910390f35b610427610885565b6040516104349190611eec565b60405180910390f35b610445610917565b6040516104539291906121d0565b60405180910390f35b61046461092a565b60405161047191906121b5565b60405180910390f35b610494600480360381019061048f9190611fb6565b61094e565b6040516104a19190612011565b60405180910390f35b6104c460048036038101906104bf91906121f9565b610971565b6040516104d1919061203b565b60405180910390f35b6104f460048036038101906104ef9190612179565b6109f8565b005b610510600480360381019061050b9190612179565b610b76565b005b60606003805461052190612268565b80601f016020809104026020016040519081016040528092919081815260200182805461054d90612268565b801561059a5780601f1061056f5761010080835404028352916020019161059a565b820191906000526020600020905b81548152906001019060200180831161057d57829003601f168201915b5050505050905090565b6000806105af610bfc565b90506105bc818585610c04565b600191505092915050565b60085481565b600c602052816000526040600020602052806000526040600020600091509150505481565b6000600254905090565b600e6020528060005260406000206000915090505481565b60008061061f610bfc565b905061062c858285610c16565b610637858585610cab565b60019150509392505050565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610678610d9f565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60075481565b600a6020528060005260406000206000915054906101000a900460ff1681565b610701610d9f565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107f2610d9f565b6107fc6000610e26565b565b610806610d9f565b60006007541461084b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610842906122e5565b60405180910390fd5b4360078190555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461089490612268565b80601f01602080910402602001604051908101604052809291908181526020018280546108c090612268565b801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b5050505050905090565b600080610922610eec565b915091509091565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610959610bfc565b9050610966818585610cab565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e90612351565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610af35750610ac461085b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b29906123bd565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b7e610d9f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bf05760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610be791906121b5565b60405180910390fd5b610bf981610e26565b50565b600033905090565b610c1183838360016110e4565b505050565b6000610c228484610971565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610ca55781811015610c95578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c8c939291906123dd565b60405180910390fd5b610ca4848484840360006110e4565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d1d5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d1491906121b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d8f5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d8691906121b5565b60405180910390fd5b610d9a8383836112bb565b505050565b610da7610bfc565b73ffffffffffffffffffffffffffffffffffffffff16610dc561085b565b73ffffffffffffffffffffffffffffffffffffffff1614610e2457610de8610bfc565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e1b91906121b5565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600060085403610f0557600080915091506110e0565b600060085442610f159190612443565b9050610e1081101561105e57603c811015610f64576109c4925060647f0000000000000000000000000000000000000000000000000000000000000000610f5c91906124a6565b9150506110e0565b61012c811015610fa8576107d0925060507f0000000000000000000000000000000000000000000000000000000000000000610fa091906124a6565b9150506110e0565b6101e0811015610fec576105dc925060427f0000000000000000000000000000000000000000000000000000000000000000610fe491906124a6565b9150506110e0565b610384811015611030576103e8925060327f000000000000000000000000000000000000000000000000000000000000000061102891906124a6565b9150506110e0565b6101f492507f00000000000000000000000000000000000000000000000000000000000000009150506110e0565b68056bc75e2d63100000600954101561107b5761019092506110bb565b680ad78ebc5ac620000060095410156110985761012c92506110ba565b681043561a882930000060095410156110b45760c892506110b9565b600092505b5b5b7f00000000000000000000000000000000000000000000000000000000000000009150505b9091565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111565760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161114d91906121b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111c85760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016111bf91906121b5565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156112b5578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112ac919061203b565b60405180910390a35b50505050565b6000806112c6610eec565b9150915060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16149050808061137457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561175757600060075411806113d35750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990612523565b60405180910390fd5b600083146116ef578080156114715750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561164d576000600854118015611495575060b4600854426114939190612443565b105b1561161557600d54600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000438152602001908152602001600020541061152e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611525906125b5565b60405180910390fd5b600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000438152602001908152602001600020600081548092919061158f906125d5565b9190505550600f54600e600043815260200190815260200160002054106115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e290612669565b60405180910390fd5b600e6000438152602001908152602001600020600081548092919061160f906125d5565b91905055505b600061271084866116269190612689565b61163091906124a6565b9050808561163e9190612443565b945061164b873083611814565b505b801580156116a55750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156116ea57600061271084866116bb9190612689565b6116c591906124a6565b905080856116d39190612443565b94506116e0873083611814565b6116e8611a39565b505b611756565b801580156117475750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561175557611754611a39565b5b5b5b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806117c25750816117b4866107a2565b856117bf91906126cb565b11155b611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f89061274b565b60405180910390fd5b61180c868686611814565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361186657806002600082825461185a91906126cb565b92505081905550611939565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118f2578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016118e9939291906123dd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361198257806002600082825403925050819055506119cf565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a2c919061203b565b60405180910390a3505050565b600060085442611a499190612443565b905061012c811015611a5b5750611e5a565b6000611a66306107a2565b905060008103611a77575050611e5a565b6000600267ffffffffffffffff811115611a9457611a9361276b565b5b604051908082528060200260200182016040528015611ac25781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000081600081518110611afa57611af961279a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611b4957611b4861279a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b8152600401611bdc9291906128cc565b600060405180830381865afa158015611bf9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611c229190612a2a565b600181518110611c3557611c3461279a565b5b6020026020010151905080831115611c4b578092505b3082600081518110611c6057611c5f61279a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000082600181518110611ccf57611cce61279a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16319050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94785600086600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611dbf959493929190612aae565b600060405180830381600087803b158015611dd957600080fd5b505af1158015611ded573d6000803e3d6000fd5b505050506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163190508181611e3b9190612443565b60096000828254611e4c91906126cb565b925050819055505050505050505b565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e96578082015181840152602081019050611e7b565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ebe82611e5c565b611ec88185611e67565b9350611ed8818560208601611e78565b611ee181611ea2565b840191505092915050565b60006020820190508181036000830152611f068184611eb3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f4d82611f22565b9050919050565b611f5d81611f42565b8114611f6857600080fd5b50565b600081359050611f7a81611f54565b92915050565b6000819050919050565b611f9381611f80565b8114611f9e57600080fd5b50565b600081359050611fb081611f8a565b92915050565b60008060408385031215611fcd57611fcc611f18565b5b6000611fdb85828601611f6b565b9250506020611fec85828601611fa1565b9150509250929050565b60008115159050919050565b61200b81611ff6565b82525050565b60006020820190506120266000830184612002565b92915050565b61203581611f80565b82525050565b6000602082019050612050600083018461202c565b92915050565b60006020828403121561206c5761206b611f18565b5b600061207a84828501611fa1565b91505092915050565b60008060006060848603121561209c5761209b611f18565b5b60006120aa86828701611f6b565b93505060206120bb86828701611f6b565b92505060406120cc86828701611fa1565b9150509250925092565b600060ff82169050919050565b6120ec816120d6565b82525050565b600060208201905061210760008301846120e3565b92915050565b61211681611ff6565b811461212157600080fd5b50565b6000813590506121338161210d565b92915050565b600080604083850312156121505761214f611f18565b5b600061215e85828601611f6b565b925050602061216f85828601612124565b9150509250929050565b60006020828403121561218f5761218e611f18565b5b600061219d84828501611f6b565b91505092915050565b6121af81611f42565b82525050565b60006020820190506121ca60008301846121a6565b92915050565b60006040820190506121e5600083018561202c565b6121f2602083018461202c565b9392505050565b600080604083850312156122105761220f611f18565b5b600061221e85828601611f6b565b925050602061222f85828601611f6b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061228057607f821691505b60208210810361229357612292612239565b5b50919050565b7f74726164696e672d616c72656164792d656e61626c6564000000000000000000600082015250565b60006122cf601783611e67565b91506122da82612299565b602082019050919050565b600060208201905081810360008301526122fe816122c2565b9050919050565b7f74726561737572792d69732d3000000000000000000000000000000000000000600082015250565b600061233b600d83611e67565b915061234682612305565b602082019050919050565b6000602082019050818103600083015261236a8161232e565b9050919050565b7f6f6e6c792d6465706c6f79657200000000000000000000000000000000000000600082015250565b60006123a7600d83611e67565b91506123b282612371565b602082019050919050565b600060208201905081810360008301526123d68161239a565b9050919050565b60006060820190506123f260008301866121a6565b6123ff602083018561202c565b61240c604083018461202c565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061244e82611f80565b915061245983611f80565b925082820390508181111561247157612470612414565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006124b182611f80565b91506124bc83611f80565b9250826124cc576124cb612477565b5b828204905092915050565b7f74726164696e672d6e6f742d656e61626c656400000000000000000000000000600082015250565b600061250d601383611e67565b9150612518826124d7565b602082019050919050565b6000602082019050818103600083015261253c81612500565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e60008201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b600061259f602983611e67565b91506125aa82612543565b604082019050919050565b600060208201905081810360008301526125ce81612592565b9050919050565b60006125e082611f80565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361261257612611612414565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d65786365656465640000600082015250565b6000612653601e83611e67565b915061265e8261261d565b602082019050919050565b6000602082019050818103600083015261268281612646565b9050919050565b600061269482611f80565b915061269f83611f80565b92508282026126ad81611f80565b915082820484148315176126c4576126c3612414565b5b5092915050565b60006126d682611f80565b91506126e183611f80565b92508282019050808211156126f9576126f8612414565b5b92915050565b7f6d61782d77616c6c65742d73697a652d65786365656465640000000000000000600082015250565b6000612735601883611e67565b9150612740826126ff565b602082019050919050565b6000602082019050818103600083015261276481612728565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b60006127f86127f36127ee846127c9565b6127d3565b611f80565b9050919050565b612808816127dd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61284381611f42565b82525050565b6000612855838361283a565b60208301905092915050565b6000602082019050919050565b60006128798261280e565b6128838185612819565b935061288e8361282a565b8060005b838110156128bf5781516128a68882612849565b97506128b183612861565b925050600181019050612892565b5085935050505092915050565b60006040820190506128e160008301856127ff565b81810360208301526128f3818461286e565b90509392505050565b600080fd5b61290a82611ea2565b810181811067ffffffffffffffff821117156129295761292861276b565b5b80604052505050565b600061293c611f0e565b90506129488282612901565b919050565b600067ffffffffffffffff8211156129685761296761276b565b5b602082029050602081019050919050565b600080fd5b60008151905061298d81611f8a565b92915050565b60006129a66129a18461294d565b612932565b905080838252602082019050602084028301858111156129c9576129c8612979565b5b835b818110156129f257806129de888261297e565b8452602084019350506020810190506129cb565b5050509392505050565b600082601f830112612a1157612a106128fc565b5b8151612a21848260208601612993565b91505092915050565b600060208284031215612a4057612a3f611f18565b5b600082015167ffffffffffffffff811115612a5e57612a5d611f1d565b5b612a6a848285016129fc565b91505092915050565b6000819050919050565b6000612a98612a93612a8e84612a73565b6127d3565b611f80565b9050919050565b612aa881612a7d565b82525050565b600060a082019050612ac3600083018861202c565b612ad06020830187612a9f565b8181036040830152612ae2818661286e565b9050612af160608301856121a6565b612afe608083018461202c565b969550505050505056fea2646970667358221220434dcc02a5bb6e3a0adbffdc2c44d0d0023eaac6b640494a9eee036e80275ae464736f6c634300081e0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000024b4cd14c74792574ddc8914f0ea360fa0d0ed0e000000000000000000000000000000000000000000000000000000000000000a437970686572204170700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064359504845520000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806361d027b3116100de57806395d89b4111610097578063a9059cbb11610071578063a9059cbb1461047a578063dd62ed3e146104aa578063f0f44260146104da578063f2fde38b146104f65761018e565b806395d89b411461041f578063a25ba1831461043d578063a8aa1b311461045c5761018e565b806361d027b31461036f5780636dd3d39f1461038d57806370a08231146103bd578063715018a6146103ed5780638a8c523c146103f75780638da5cb5b146104015761018e565b806323b872dd1161014b578063412201041161012557806341220104146102e957806348cd4cb1146103055780634fbee19314610323578063590ffdce146103535761018e565b806323b872dd1461027d578063313ce567146102ad57806332cb6b0c146102cb5761018e565b806306fdde0314610193578063095ea7b3146101b15780630c18d4ce146101e15780630fe3fe7d146101ff57806318160ddd1461022f57806321b024861461024d575b600080fd5b61019b610512565b6040516101a89190611eec565b60405180910390f35b6101cb60048036038101906101c69190611fb6565b6105a4565b6040516101d89190612011565b60405180910390f35b6101e96105c7565b6040516101f6919061203b565b60405180910390f35b61021960048036038101906102149190611fb6565b6105cd565b604051610226919061203b565b60405180910390f35b6102376105f2565b604051610244919061203b565b60405180910390f35b61026760048036038101906102629190612056565b6105fc565b604051610274919061203b565b60405180910390f35b61029760048036038101906102929190612083565b610614565b6040516102a49190612011565b60405180910390f35b6102b5610643565b6040516102c291906120f2565b60405180910390f35b6102d361064c565b6040516102e0919061203b565b60405180910390f35b61030360048036038101906102fe9190612139565b610670565b005b61030d6106d3565b60405161031a919061203b565b60405180910390f35b61033d60048036038101906103389190612179565b6106d9565b60405161034a9190612011565b60405180910390f35b61036d60048036038101906103689190612139565b6106f9565b005b61037761075c565b60405161038491906121b5565b60405180910390f35b6103a760048036038101906103a29190612179565b610782565b6040516103b49190612011565b60405180910390f35b6103d760048036038101906103d29190612179565b6107a2565b6040516103e4919061203b565b60405180910390f35b6103f56107ea565b005b6103ff6107fe565b005b61040961085b565b60405161041691906121b5565b60405180910390f35b610427610885565b6040516104349190611eec565b60405180910390f35b610445610917565b6040516104539291906121d0565b60405180910390f35b61046461092a565b60405161047191906121b5565b60405180910390f35b610494600480360381019061048f9190611fb6565b61094e565b6040516104a19190612011565b60405180910390f35b6104c460048036038101906104bf91906121f9565b610971565b6040516104d1919061203b565b60405180910390f35b6104f460048036038101906104ef9190612179565b6109f8565b005b610510600480360381019061050b9190612179565b610b76565b005b60606003805461052190612268565b80601f016020809104026020016040519081016040528092919081815260200182805461054d90612268565b801561059a5780601f1061056f5761010080835404028352916020019161059a565b820191906000526020600020905b81548152906001019060200180831161057d57829003601f168201915b5050505050905090565b6000806105af610bfc565b90506105bc818585610c04565b600191505092915050565b60085481565b600c602052816000526040600020602052806000526040600020600091509150505481565b6000600254905090565b600e6020528060005260406000206000915090505481565b60008061061f610bfc565b905061062c858285610c16565b610637858585610cab565b60019150509392505050565b60006012905090565b7f00000000000000000000000000000000000000000052b7d2dcc80cd2e400000081565b610678610d9f565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60075481565b600a6020528060005260406000206000915054906101000a900460ff1681565b610701610d9f565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107f2610d9f565b6107fc6000610e26565b565b610806610d9f565b60006007541461084b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610842906122e5565b60405180910390fd5b4360078190555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461089490612268565b80601f01602080910402602001604051908101604052809291908181526020018280546108c090612268565b801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b5050505050905090565b600080610922610eec565b915091509091565b7f000000000000000000000000c22eabe527621e44883a05ee29e8c10ec813433a81565b600080610959610bfc565b9050610966818585610cab565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e90612351565b60405180910390fd5b7f0000000000000000000000008ad367163f55d62808696b652de72138780b241a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610af35750610ac461085b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b29906123bd565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b7e610d9f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bf05760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610be791906121b5565b60405180910390fd5b610bf981610e26565b50565b600033905090565b610c1183838360016110e4565b505050565b6000610c228484610971565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015610ca55781811015610c95578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c8c939291906123dd565b60405180910390fd5b610ca4848484840360006110e4565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d1d5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d1491906121b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d8f5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d8691906121b5565b60405180910390fd5b610d9a8383836112bb565b505050565b610da7610bfc565b73ffffffffffffffffffffffffffffffffffffffff16610dc561085b565b73ffffffffffffffffffffffffffffffffffffffff1614610e2457610de8610bfc565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e1b91906121b5565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600060085403610f0557600080915091506110e0565b600060085442610f159190612443565b9050610e1081101561105e57603c811015610f64576109c4925060647f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000610f5c91906124a6565b9150506110e0565b61012c811015610fa8576107d0925060507f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000610fa091906124a6565b9150506110e0565b6101e0811015610fec576105dc925060427f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000610fe491906124a6565b9150506110e0565b610384811015611030576103e8925060327f00000000000000000000000000000000000000000052b7d2dcc80cd2e400000061102891906124a6565b9150506110e0565b6101f492507f00000000000000000000000000000000000000000052b7d2dcc80cd2e40000009150506110e0565b68056bc75e2d63100000600954101561107b5761019092506110bb565b680ad78ebc5ac620000060095410156110985761012c92506110ba565b681043561a882930000060095410156110b45760c892506110b9565b600092505b5b5b7f00000000000000000000000000000000000000000052b7d2dcc80cd2e40000009150505b9091565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111565760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161114d91906121b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111c85760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016111bf91906121b5565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156112b5578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112ac919061203b565b60405180910390a35b50505050565b6000806112c6610eec565b9150915060007f000000000000000000000000c22eabe527621e44883a05ee29e8c10ec813433a73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16149050808061137457507f000000000000000000000000c22eabe527621e44883a05ee29e8c10ec813433a73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561175757600060075411806113d35750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990612523565b60405180910390fd5b600083146116ef578080156114715750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561164d576000600854118015611495575060b4600854426114939190612443565b105b1561161557600d54600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000438152602001908152602001600020541061152e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611525906125b5565b60405180910390fd5b600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000438152602001908152602001600020600081548092919061158f906125d5565b9190505550600f54600e600043815260200190815260200160002054106115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e290612669565b60405180910390fd5b600e6000438152602001908152602001600020600081548092919061160f906125d5565b91905055505b600061271084866116269190612689565b61163091906124a6565b9050808561163e9190612443565b945061164b873083611814565b505b801580156116a55750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156116ea57600061271084866116bb9190612689565b6116c591906124a6565b905080856116d39190612443565b94506116e0873083611814565b6116e8611a39565b505b611756565b801580156117475750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561175557611754611a39565b5b5b5b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806117c25750816117b4866107a2565b856117bf91906126cb565b11155b611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f89061274b565b60405180910390fd5b61180c868686611814565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361186657806002600082825461185a91906126cb565b92505081905550611939565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118f2578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016118e9939291906123dd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361198257806002600082825403925050819055506119cf565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a2c919061203b565b60405180910390a3505050565b600060085442611a499190612443565b905061012c811015611a5b5750611e5a565b6000611a66306107a2565b905060008103611a77575050611e5a565b6000600267ffffffffffffffff811115611a9457611a9361276b565b5b604051908082528060200260200182016040528015611ac25781602001602082028036833780820191505090505b5090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110611afa57611af961279a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611b4957611b4861279a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b8152600401611bdc9291906128cc565b600060405180830381865afa158015611bf9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611c229190612a2a565b600181518110611c3557611c3461279a565b5b6020026020010151905080831115611c4b578092505b3082600081518110611c6057611c5f61279a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282600181518110611ccf57611cce61279a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16319050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94785600086600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611dbf959493929190612aae565b600060405180830381600087803b158015611dd957600080fd5b505af1158015611ded573d6000803e3d6000fd5b505050506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163190508181611e3b9190612443565b60096000828254611e4c91906126cb565b925050819055505050505050505b565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e96578082015181840152602081019050611e7b565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ebe82611e5c565b611ec88185611e67565b9350611ed8818560208601611e78565b611ee181611ea2565b840191505092915050565b60006020820190508181036000830152611f068184611eb3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f4d82611f22565b9050919050565b611f5d81611f42565b8114611f6857600080fd5b50565b600081359050611f7a81611f54565b92915050565b6000819050919050565b611f9381611f80565b8114611f9e57600080fd5b50565b600081359050611fb081611f8a565b92915050565b60008060408385031215611fcd57611fcc611f18565b5b6000611fdb85828601611f6b565b9250506020611fec85828601611fa1565b9150509250929050565b60008115159050919050565b61200b81611ff6565b82525050565b60006020820190506120266000830184612002565b92915050565b61203581611f80565b82525050565b6000602082019050612050600083018461202c565b92915050565b60006020828403121561206c5761206b611f18565b5b600061207a84828501611fa1565b91505092915050565b60008060006060848603121561209c5761209b611f18565b5b60006120aa86828701611f6b565b93505060206120bb86828701611f6b565b92505060406120cc86828701611fa1565b9150509250925092565b600060ff82169050919050565b6120ec816120d6565b82525050565b600060208201905061210760008301846120e3565b92915050565b61211681611ff6565b811461212157600080fd5b50565b6000813590506121338161210d565b92915050565b600080604083850312156121505761214f611f18565b5b600061215e85828601611f6b565b925050602061216f85828601612124565b9150509250929050565b60006020828403121561218f5761218e611f18565b5b600061219d84828501611f6b565b91505092915050565b6121af81611f42565b82525050565b60006020820190506121ca60008301846121a6565b92915050565b60006040820190506121e5600083018561202c565b6121f2602083018461202c565b9392505050565b600080604083850312156122105761220f611f18565b5b600061221e85828601611f6b565b925050602061222f85828601611f6b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061228057607f821691505b60208210810361229357612292612239565b5b50919050565b7f74726164696e672d616c72656164792d656e61626c6564000000000000000000600082015250565b60006122cf601783611e67565b91506122da82612299565b602082019050919050565b600060208201905081810360008301526122fe816122c2565b9050919050565b7f74726561737572792d69732d3000000000000000000000000000000000000000600082015250565b600061233b600d83611e67565b915061234682612305565b602082019050919050565b6000602082019050818103600083015261236a8161232e565b9050919050565b7f6f6e6c792d6465706c6f79657200000000000000000000000000000000000000600082015250565b60006123a7600d83611e67565b91506123b282612371565b602082019050919050565b600060208201905081810360008301526123d68161239a565b9050919050565b60006060820190506123f260008301866121a6565b6123ff602083018561202c565b61240c604083018461202c565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061244e82611f80565b915061245983611f80565b925082820390508181111561247157612470612414565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006124b182611f80565b91506124bc83611f80565b9250826124cc576124cb612477565b5b828204905092915050565b7f74726164696e672d6e6f742d656e61626c656400000000000000000000000000600082015250565b600061250d601383611e67565b9150612518826124d7565b602082019050919050565b6000602082019050818103600083015261253c81612500565b9050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d7065722d6f726967696e60008201527f2d65786365656465640000000000000000000000000000000000000000000000602082015250565b600061259f602983611e67565b91506125aa82612543565b604082019050919050565b600060208201905081810360008301526125ce81612592565b9050919050565b60006125e082611f80565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361261257612611612414565b5b600182019050919050565b7f6d61782d6275792d7478732d7065722d626c6f636b2d65786365656465640000600082015250565b6000612653601e83611e67565b915061265e8261261d565b602082019050919050565b6000602082019050818103600083015261268281612646565b9050919050565b600061269482611f80565b915061269f83611f80565b92508282026126ad81611f80565b915082820484148315176126c4576126c3612414565b5b5092915050565b60006126d682611f80565b91506126e183611f80565b92508282019050808211156126f9576126f8612414565b5b92915050565b7f6d61782d77616c6c65742d73697a652d65786365656465640000000000000000600082015250565b6000612735601883611e67565b9150612740826126ff565b602082019050919050565b6000602082019050818103600083015261276481612728565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b60006127f86127f36127ee846127c9565b6127d3565b611f80565b9050919050565b612808816127dd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61284381611f42565b82525050565b6000612855838361283a565b60208301905092915050565b6000602082019050919050565b60006128798261280e565b6128838185612819565b935061288e8361282a565b8060005b838110156128bf5781516128a68882612849565b97506128b183612861565b925050600181019050612892565b5085935050505092915050565b60006040820190506128e160008301856127ff565b81810360208301526128f3818461286e565b90509392505050565b600080fd5b61290a82611ea2565b810181811067ffffffffffffffff821117156129295761292861276b565b5b80604052505050565b600061293c611f0e565b90506129488282612901565b919050565b600067ffffffffffffffff8211156129685761296761276b565b5b602082029050602081019050919050565b600080fd5b60008151905061298d81611f8a565b92915050565b60006129a66129a18461294d565b612932565b905080838252602082019050602084028301858111156129c9576129c8612979565b5b835b818110156129f257806129de888261297e565b8452602084019350506020810190506129cb565b5050509392505050565b600082601f830112612a1157612a106128fc565b5b8151612a21848260208601612993565b91505092915050565b600060208284031215612a4057612a3f611f18565b5b600082015167ffffffffffffffff811115612a5e57612a5d611f1d565b5b612a6a848285016129fc565b91505092915050565b6000819050919050565b6000612a98612a93612a8e84612a73565b6127d3565b611f80565b9050919050565b612aa881612a7d565b82525050565b600060a082019050612ac3600083018861202c565b612ad06020830187612a9f565b8181036040830152612ae2818661286e565b9050612af160608301856121a6565b612afe608083018461202c565b969550505050505056fea2646970667358221220434dcc02a5bb6e3a0adbffdc2c44d0d0023eaac6b640494a9eee036e80275ae464736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000024b4cd14c74792574ddc8914f0ea360fa0d0ed0e000000000000000000000000000000000000000000000000000000000000000a437970686572204170700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064359504845520000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Cypher App
Arg [1] : symbol (string): CYPHER
Arg [2] : maxSupply (uint256): 100000000000000000000000000
Arg [3] : _treasury (address): 0x24b4CD14c74792574DdC8914f0eA360fA0D0ED0e
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [3] : 00000000000000000000000024b4cd14c74792574ddc8914f0ea360fa0d0ed0e
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [5] : 4379706865722041707000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 4359504845520000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
31772:7878:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13415:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15708:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32162:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32369:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14517:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32548:72;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16508:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14368:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31812:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34356:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32130:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32234:58;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34186:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31890:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32299:63;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14679:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25137:103;;;:::i;:::-;;33985:193;;;:::i;:::-;;24462:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13625:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34536:165;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;31854:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15002:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15247:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33701:276;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25395:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13415:91;13460:13;13493:5;13486:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13415:91;:::o;15708:190::-;15781:4;15798:13;15814:12;:10;:12::i;:::-;15798:28;;15837:31;15846:5;15853:7;15862:5;15837:8;:31::i;:::-;15886:4;15879:11;;;15708:190;;;;:::o;32162:29::-;;;;:::o;32369:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14517:99::-;14569:7;14596:12;;14589:19;;14517:99;:::o;32548:72::-;;;;;;;;;;;;;;;;;:::o;16508:249::-;16595:4;16612:15;16630:12;:10;:12::i;:::-;16612:30;;16653:37;16669:4;16675:7;16684:5;16653:15;:37::i;:::-;16701:26;16711:4;16717:2;16721:5;16701:9;:26::i;:::-;16745:4;16738:11;;;16508:249;;;;;:::o;14368:84::-;14417:5;14442:2;14435:9;;14368:84;:::o;31812:35::-;;;:::o;34356:172::-;24348:13;:11;:13::i;:::-;34512:8:::1;34477:23;:32;34501:7;34477:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;34356:172:::0;;:::o;32130:25::-;;;;:::o;32234:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;34186:162::-;24348:13;:11;:13::i;:::-;34332:8:::1;34302:18;:27;34321:7;34302:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;34186:162:::0;;:::o;31890:23::-;;;;;;;;;;;;;:::o;32299:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;14679:118::-;14744:7;14771:9;:18;14781:7;14771:18;;;;;;;;;;;;;;;;14764:25;;14679:118;;;:::o;25137:103::-;24348:13;:11;:13::i;:::-;25202:30:::1;25229:1;25202:18;:30::i;:::-;25137:103::o:0;33985:193::-;24348:13;:11;:13::i;:::-;34062:1:::1;34048:10;;:15;34040:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34115:12;34102:10;:25;;;;34155:15;34138:14;:32;;;;33985:193::o:0;24462:87::-;24508:7;24535:6;;;;;;;;;;;24528:13;;24462:87;:::o;13625:95::-;13672:13;13705:7;13698:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13625:95;:::o;34536:165::-;34614:15;34631:18;34674:19;:17;:19::i;:::-;34667:26;;;;34536:165;;:::o;31854:29::-;;;:::o;15002:182::-;15071:4;15088:13;15104:12;:10;:12::i;:::-;15088:28;;15127:27;15137:5;15144:2;15148:5;15127:9;:27::i;:::-;15172:4;15165:11;;;15002:182;;;;:::o;15247:142::-;15327:7;15354:11;:18;15366:5;15354:18;;;;;;;;;;;;;;;:27;15373:7;15354:27;;;;;;;;;;;;;;;;15347:34;;15247:142;;;;:::o;33701:276::-;33794:1;33771:25;;:11;:25;;;33763:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;33861:9;33847:23;;:10;:23;;;:48;;;;33888:7;:5;:7::i;:::-;33874:21;;:10;:21;;;33847:48;33825:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33958:11;33947:8;;:22;;;;;;;;;;;;;;;;;;33701:276;:::o;25395:220::-;24348:13;:11;:13::i;:::-;25500:1:::1;25480:22;;:8;:22;;::::0;25476:93:::1;;25554:1;25526:31;;;;;;;;;;;:::i;:::-;;;;;;;;25476:93;25579:28;25598:8;25579:18;:28::i;:::-;25395:220:::0;:::o;4734:98::-;4787:7;4814:10;4807:17;;4734:98;:::o;20567:130::-;20652:37;20661:5;20668:7;20677:5;20684:4;20652:8;:37::i;:::-;20567:130;;;:::o;22299:486::-;22399:24;22426:25;22436:5;22443:7;22426:9;:25::i;:::-;22399:52;;22485:17;22466:16;:36;22462:316;;;22542:5;22523:16;:24;22519:132;;;22602:7;22611:16;22629:5;22575:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;22519:132;22694:57;22703:5;22710:7;22738:5;22719:16;:24;22745:5;22694:8;:57::i;:::-;22462:316;22388:397;22299:486;;;:::o;17142:308::-;17242:1;17226:18;;:4;:18;;;17222:88;;17295:1;17268:30;;;;;;;;;;;:::i;:::-;;;;;;;;17222:88;17338:1;17324:16;;:2;:16;;;17320:88;;17393:1;17364:32;;;;;;;;;;;:::i;:::-;;;;;;;;17320:88;17418:24;17426:4;17432:2;17436:5;17418:7;:24::i;:::-;17142:308;;;:::o;24627:166::-;24698:12;:10;:12::i;:::-;24687:23;;:7;:5;:7::i;:::-;:23;;;24683:103;;24761:12;:10;:12::i;:::-;24734:40;;;;;;;;;;;:::i;:::-;;;;;;;;24683:103;24627:166::o;25775:191::-;25849:16;25868:6;;;;;;;;;;;25849:25;;25894:8;25885:6;;:17;;;;;;;;;;;;;;;;;;25949:8;25918:40;;25939:8;25918:40;;;;;;;;;;;;25838:128;25775:191;:::o;34709:1547::-;34776:15;34793:18;34843:1;34825:14;;:19;34821:57;;34865:1;34868;34857:13;;;;;;34821:57;34884:20;34925:14;;34907:15;:32;;;;:::i;:::-;34884:55;;34967:4;34952:12;:19;34948:940;;;35021:2;35006:12;:17;35002:164;;;35050:4;35040:14;;35102:3;35089:10;:16;;;;:::i;:::-;35076:29;;35126:28;;;35002:164;35215:3;35200:12;:18;35196:167;;;35245:4;35235:14;;35297:2;35284:10;:15;;;;:::i;:::-;35271:28;;35323;;;35196:167;35412:3;35397:12;:18;35393:166;;;35442:4;35432:14;;35494:2;35481:10;:15;;;;:::i;:::-;35468:28;;35519;;;35393:166;35590:3;35575:12;:18;35571:189;;;35645:4;35635:14;;35697:2;35684:10;:15;;;;:::i;:::-;35671:28;;35720;;;35571:189;35782:3;35772:13;;35815:10;35802:23;;35852:28;;;34948:940;35935:9;35921:11;;:23;35917:259;;;35967:3;35957:13;;35917:259;;;36009:9;35995:11;;:23;35991:185;;;36041:3;36031:13;;35991:185;;;36083:9;36069:11;;:23;36065:111;;;36115:3;36105:13;;36065:111;;;36160:1;36150:11;;36065:111;35991:185;35917:259;36195:10;36182:23;;36224:28;34709:1547;;;:::o;21564:443::-;21694:1;21677:19;;:5;:19;;;21673:91;;21749:1;21720:32;;;;;;;;;;;:::i;:::-;;;;;;;;21673:91;21797:1;21778:21;;:7;:21;;;21774:92;;21851:1;21823:31;;;;;;;;;;;:::i;:::-;;;;;;;;21774:92;21906:5;21876:11;:18;21888:5;21876:18;;;;;;;;;;;;;;;:27;21895:7;21876:27;;;;;;;;;;;;;;;:35;;;;21926:9;21922:78;;;21973:7;21957:31;;21966:5;21957:31;;;21982:5;21957:31;;;;;;:::i;:::-;;;;;;;;21922:78;21564:443;;;;:::o;36264:2260::-;36386:15;36403:18;36425:19;:17;:19::i;:::-;36385:59;;;;36457:10;36478:4;36470:12;;:4;:12;;;36457:25;;36497:5;:19;;;;36512:4;36506:10;;:2;:10;;;36497:19;36493:1830;;;36572:1;36559:10;;:14;:40;;;;36577:18;:22;36596:2;36577:22;;;;;;;;;;;;;;;;;;;;;;;;;36559:40;36533:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;36686:1;36675:7;:12;36671:1641;;36712:5;:32;;;;;36722:18;:22;36741:2;36722:22;;;;;;;;;;;;;;;;;;;;;;;;;36721:23;36712:32;36708:1097;;;36816:1;36799:14;;:18;:85;;;;;36881:3;36864:14;;36846:15;:32;;;;:::i;:::-;:38;36799:85;36769:856;;;37091:27;;36973:26;:37;37000:9;36973:37;;;;;;;;;;;;;;;:115;37045:12;36973:115;;;;;;;;;;;;:145;36935:284;;;;;;;;;;;;:::i;:::-;;;;;;;;;37246:26;:37;37273:9;37246:37;;;;;;;;;;;;;;;:51;37284:12;37246:51;;;;;;;;;;;;:53;;;;;;;;;:::i;:::-;;;;;;37433:18;;37366:17;:31;37384:12;37366:31;;;;;;;;;;;;:85;37328:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;37568:17;:31;37586:12;37568:31;;;;;;;;;;;;:33;;;;;;;;;:::i;:::-;;;;;;36769:856;37649:11;37683:5;37672:7;37664:5;:15;;;;:::i;:::-;37663:25;;;;:::i;:::-;37649:39;;37720:3;37711:12;;;;;:::i;:::-;;;37746:39;37760:4;37774;37781:3;37746:13;:39::i;:::-;36746:1059;36708:1097;37830:5;37829:6;:35;;;;;37840:18;:24;37859:4;37840:24;;;;;;;;;;;;;;;;;;;;;;;;;37839:25;37829:35;37825:262;;;37889:11;37923:5;37912:7;37904:5;:15;;;;:::i;:::-;37903:25;;;;:::i;:::-;37889:39;;37960:3;37951:12;;;;;:::i;:::-;;;37986:39;38000:4;38014;38021:3;37986:13;:39::i;:::-;38048:19;:17;:19::i;:::-;37866:221;37825:262;36671:1641;;;38199:5;38198:6;:35;;;;;38209:18;:24;38228:4;38209:24;;;;;;;;;;;;;;;;;;;;;;;;;38208:25;38198:35;38194:103;;;38258:19;:17;:19::i;:::-;38194:103;36671:1641;36493:1830;38357:23;:27;38381:2;38357:27;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;38413:10;38396:13;38406:2;38396:9;:13::i;:::-;38388:5;:21;;;;:::i;:::-;:35;;38357:66;38335:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38486:30;38500:4;38506:2;38510:5;38486:13;:30::i;:::-;36374:2150;;;36264:2260;;;:::o;17774:1135::-;17880:1;17864:18;;:4;:18;;;17860:552;;18018:5;18002:12;;:21;;;;;;;:::i;:::-;;;;;;;;17860:552;;;18056:19;18078:9;:15;18088:4;18078:15;;;;;;;;;;;;;;;;18056:37;;18126:5;18112:11;:19;18108:117;;;18184:4;18190:11;18203:5;18159:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;18108:117;18380:5;18366:11;:19;18348:9;:15;18358:4;18348:15;;;;;;;;;;;;;;;:37;;;;18041:371;17860:552;18442:1;18428:16;;:2;:16;;;18424:435;;18610:5;18594:12;;:21;;;;;;;;;;;18424:435;;;18827:5;18810:9;:13;18820:2;18810:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;18424:435;18891:2;18876:25;;18885:4;18876:25;;;18895:5;18876:25;;;;;;:::i;:::-;;;;;;;;17774:1135;;;:::o;38532:1115::-;38581:17;38619:14;;38601:15;:32;;;;:::i;:::-;38581:52;;38660:3;38648:9;:15;38644:54;;;38680:7;;;38644:54;38710:20;38733:24;38751:4;38733:9;:24::i;:::-;38710:47;;38790:1;38774:12;:17;38770:56;;38808:7;;;;38770:56;38838:22;38877:1;38863:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38838:41;;38901:5;38890;38896:1;38890:8;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;;;38936:4;38917:5;38923:1;38917:8;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;38997:23;31996:42;39023:21;;;39045:7;39054:5;39023:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39061:1;39023:40;;;;;;;;:::i;:::-;;;;;;;;38997:66;;39095:15;39080:12;:30;39076:93;;;39142:15;39127:30;;39076:93;39200:4;39181:5;39187:1;39181:8;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;39227:5;39216;39222:1;39216:8;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;;;39245:30;39286:8;;;;;;;;;;;39278:25;;;39245:58;;31996:42;39314:58;;;39387:12;39414:1;39430:5;39450:8;;;;;;;;;;;39473:15;39314:185;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39510:29;39550:8;;;;;;;;;;;39542:25;;;39510:57;;39617:22;39593:21;:46;;;;:::i;:::-;39578:11;;:61;;;;;;;:::i;:::-;;;;;;;;38570:1077;;;;;;38532:1115;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:248::-;369:1;379:113;393:6;390:1;387:13;379:113;;;478:1;473:3;469:11;463:18;459:1;454:3;450:11;443:39;415:2;412:1;408:10;403:15;;379:113;;;526:1;517:6;512:3;508:16;501:27;349:186;287:248;;;:::o;541:102::-;582:6;633:2;629:7;624:2;617:5;613:14;609:28;599:38;;541:102;;;:::o;649:377::-;737:3;765:39;798:5;765:39;:::i;:::-;820:71;884:6;879:3;820:71;:::i;:::-;813:78;;900:65;958:6;953:3;946:4;939:5;935:16;900:65;:::i;:::-;990:29;1012:6;990:29;:::i;:::-;985:3;981:39;974:46;;741:285;649:377;;;;:::o;1032:313::-;1145:4;1183:2;1172:9;1168:18;1160:26;;1232:9;1226:4;1222:20;1218:1;1207:9;1203:17;1196:47;1260:78;1333:4;1324:6;1260:78;:::i;:::-;1252:86;;1032:313;;;;:::o;1351:75::-;1384:6;1417:2;1411:9;1401:19;;1351:75;:::o;1432:117::-;1541:1;1538;1531:12;1555:117;1664:1;1661;1654:12;1678:126;1715:7;1755:42;1748:5;1744:54;1733:65;;1678:126;;;:::o;1810:96::-;1847:7;1876:24;1894:5;1876:24;:::i;:::-;1865:35;;1810:96;;;:::o;1912:122::-;1985:24;2003:5;1985:24;:::i;:::-;1978:5;1975:35;1965:63;;2024:1;2021;2014:12;1965:63;1912:122;:::o;2040:139::-;2086:5;2124:6;2111:20;2102:29;;2140:33;2167:5;2140:33;:::i;:::-;2040:139;;;;:::o;2185:77::-;2222:7;2251:5;2240:16;;2185:77;;;:::o;2268:122::-;2341:24;2359:5;2341:24;:::i;:::-;2334:5;2331:35;2321:63;;2380:1;2377;2370:12;2321:63;2268:122;:::o;2396:139::-;2442:5;2480:6;2467:20;2458:29;;2496:33;2523:5;2496:33;:::i;:::-;2396:139;;;;:::o;2541:474::-;2609:6;2617;2666:2;2654:9;2645:7;2641:23;2637:32;2634:119;;;2672:79;;:::i;:::-;2634:119;2792:1;2817:53;2862:7;2853:6;2842:9;2838:22;2817:53;:::i;:::-;2807:63;;2763:117;2919:2;2945:53;2990:7;2981:6;2970:9;2966:22;2945:53;:::i;:::-;2935:63;;2890:118;2541:474;;;;;:::o;3021:90::-;3055:7;3098:5;3091:13;3084:21;3073:32;;3021:90;;;:::o;3117:109::-;3198:21;3213:5;3198:21;:::i;:::-;3193:3;3186:34;3117:109;;:::o;3232:210::-;3319:4;3357:2;3346:9;3342:18;3334:26;;3370:65;3432:1;3421:9;3417:17;3408:6;3370:65;:::i;:::-;3232:210;;;;:::o;3448:118::-;3535:24;3553:5;3535:24;:::i;:::-;3530:3;3523:37;3448:118;;:::o;3572:222::-;3665:4;3703:2;3692:9;3688:18;3680:26;;3716:71;3784:1;3773:9;3769:17;3760:6;3716:71;:::i;:::-;3572:222;;;;:::o;3800:329::-;3859:6;3908:2;3896:9;3887:7;3883:23;3879:32;3876:119;;;3914:79;;:::i;:::-;3876:119;4034:1;4059:53;4104:7;4095:6;4084:9;4080:22;4059:53;:::i;:::-;4049:63;;4005:117;3800:329;;;;:::o;4135:619::-;4212:6;4220;4228;4277:2;4265:9;4256:7;4252:23;4248:32;4245:119;;;4283:79;;:::i;:::-;4245:119;4403:1;4428:53;4473:7;4464:6;4453:9;4449:22;4428:53;:::i;:::-;4418:63;;4374:117;4530:2;4556:53;4601:7;4592:6;4581:9;4577:22;4556:53;:::i;:::-;4546:63;;4501:118;4658:2;4684:53;4729:7;4720:6;4709:9;4705:22;4684:53;:::i;:::-;4674:63;;4629:118;4135:619;;;;;:::o;4760:86::-;4795:7;4835:4;4828:5;4824:16;4813:27;;4760:86;;;:::o;4852:112::-;4935:22;4951:5;4935:22;:::i;:::-;4930:3;4923:35;4852:112;;:::o;4970:214::-;5059:4;5097:2;5086:9;5082:18;5074:26;;5110:67;5174:1;5163:9;5159:17;5150:6;5110:67;:::i;:::-;4970:214;;;;:::o;5190:116::-;5260:21;5275:5;5260:21;:::i;:::-;5253:5;5250:32;5240:60;;5296:1;5293;5286:12;5240:60;5190:116;:::o;5312:133::-;5355:5;5393:6;5380:20;5371:29;;5409:30;5433:5;5409:30;:::i;:::-;5312:133;;;;:::o;5451:468::-;5516:6;5524;5573:2;5561:9;5552:7;5548:23;5544:32;5541:119;;;5579:79;;:::i;:::-;5541:119;5699:1;5724:53;5769:7;5760:6;5749:9;5745:22;5724:53;:::i;:::-;5714:63;;5670:117;5826:2;5852:50;5894:7;5885:6;5874:9;5870:22;5852:50;:::i;:::-;5842:60;;5797:115;5451:468;;;;;:::o;5925:329::-;5984:6;6033:2;6021:9;6012:7;6008:23;6004:32;6001:119;;;6039:79;;:::i;:::-;6001:119;6159:1;6184:53;6229:7;6220:6;6209:9;6205:22;6184:53;:::i;:::-;6174:63;;6130:117;5925:329;;;;:::o;6260:118::-;6347:24;6365:5;6347:24;:::i;:::-;6342:3;6335:37;6260:118;;:::o;6384:222::-;6477:4;6515:2;6504:9;6500:18;6492:26;;6528:71;6596:1;6585:9;6581:17;6572:6;6528:71;:::i;:::-;6384:222;;;;:::o;6612:332::-;6733:4;6771:2;6760:9;6756:18;6748:26;;6784:71;6852:1;6841:9;6837:17;6828:6;6784:71;:::i;:::-;6865:72;6933:2;6922:9;6918:18;6909:6;6865:72;:::i;:::-;6612:332;;;;;:::o;6950:474::-;7018:6;7026;7075:2;7063:9;7054:7;7050:23;7046:32;7043:119;;;7081:79;;:::i;:::-;7043:119;7201:1;7226:53;7271:7;7262:6;7251:9;7247:22;7226:53;:::i;:::-;7216:63;;7172:117;7328:2;7354:53;7399:7;7390:6;7379:9;7375:22;7354:53;:::i;:::-;7344:63;;7299:118;6950:474;;;;;:::o;7430:180::-;7478:77;7475:1;7468:88;7575:4;7572:1;7565:15;7599:4;7596:1;7589:15;7616:320;7660:6;7697:1;7691:4;7687:12;7677:22;;7744:1;7738:4;7734:12;7765:18;7755:81;;7821:4;7813:6;7809:17;7799:27;;7755:81;7883:2;7875:6;7872:14;7852:18;7849:38;7846:84;;7902:18;;:::i;:::-;7846:84;7667:269;7616:320;;;:::o;7942:173::-;8082:25;8078:1;8070:6;8066:14;8059:49;7942:173;:::o;8121:366::-;8263:3;8284:67;8348:2;8343:3;8284:67;:::i;:::-;8277:74;;8360:93;8449:3;8360:93;:::i;:::-;8478:2;8473:3;8469:12;8462:19;;8121:366;;;:::o;8493:419::-;8659:4;8697:2;8686:9;8682:18;8674:26;;8746:9;8740:4;8736:20;8732:1;8721:9;8717:17;8710:47;8774:131;8900:4;8774:131;:::i;:::-;8766:139;;8493:419;;;:::o;8918:163::-;9058:15;9054:1;9046:6;9042:14;9035:39;8918:163;:::o;9087:366::-;9229:3;9250:67;9314:2;9309:3;9250:67;:::i;:::-;9243:74;;9326:93;9415:3;9326:93;:::i;:::-;9444:2;9439:3;9435:12;9428:19;;9087:366;;;:::o;9459:419::-;9625:4;9663:2;9652:9;9648:18;9640:26;;9712:9;9706:4;9702:20;9698:1;9687:9;9683:17;9676:47;9740:131;9866:4;9740:131;:::i;:::-;9732:139;;9459:419;;;:::o;9884:163::-;10024:15;10020:1;10012:6;10008:14;10001:39;9884:163;:::o;10053:366::-;10195:3;10216:67;10280:2;10275:3;10216:67;:::i;:::-;10209:74;;10292:93;10381:3;10292:93;:::i;:::-;10410:2;10405:3;10401:12;10394:19;;10053:366;;;:::o;10425:419::-;10591:4;10629:2;10618:9;10614:18;10606:26;;10678:9;10672:4;10668:20;10664:1;10653:9;10649:17;10642:47;10706:131;10832:4;10706:131;:::i;:::-;10698:139;;10425:419;;;:::o;10850:442::-;10999:4;11037:2;11026:9;11022:18;11014:26;;11050:71;11118:1;11107:9;11103:17;11094:6;11050:71;:::i;:::-;11131:72;11199:2;11188:9;11184:18;11175:6;11131:72;:::i;:::-;11213;11281:2;11270:9;11266:18;11257:6;11213:72;:::i;:::-;10850:442;;;;;;:::o;11298:180::-;11346:77;11343:1;11336:88;11443:4;11440:1;11433:15;11467:4;11464:1;11457:15;11484:194;11524:4;11544:20;11562:1;11544:20;:::i;:::-;11539:25;;11578:20;11596:1;11578:20;:::i;:::-;11573:25;;11622:1;11619;11615:9;11607:17;;11646:1;11640:4;11637:11;11634:37;;;11651:18;;:::i;:::-;11634:37;11484:194;;;;:::o;11684:180::-;11732:77;11729:1;11722:88;11829:4;11826:1;11819:15;11853:4;11850:1;11843:15;11870:185;11910:1;11927:20;11945:1;11927:20;:::i;:::-;11922:25;;11961:20;11979:1;11961:20;:::i;:::-;11956:25;;12000:1;11990:35;;12005:18;;:::i;:::-;11990:35;12047:1;12044;12040:9;12035:14;;11870:185;;;;:::o;12061:169::-;12201:21;12197:1;12189:6;12185:14;12178:45;12061:169;:::o;12236:366::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12236:366;;;:::o;12608:419::-;12774:4;12812:2;12801:9;12797:18;12789:26;;12861:9;12855:4;12851:20;12847:1;12836:9;12832:17;12825:47;12889:131;13015:4;12889:131;:::i;:::-;12881:139;;12608:419;;;:::o;13033:228::-;13173:34;13169:1;13161:6;13157:14;13150:58;13242:11;13237:2;13229:6;13225:15;13218:36;13033:228;:::o;13267:366::-;13409:3;13430:67;13494:2;13489:3;13430:67;:::i;:::-;13423:74;;13506:93;13595:3;13506:93;:::i;:::-;13624:2;13619:3;13615:12;13608:19;;13267:366;;;:::o;13639:419::-;13805:4;13843:2;13832:9;13828:18;13820:26;;13892:9;13886:4;13882:20;13878:1;13867:9;13863:17;13856:47;13920:131;14046:4;13920:131;:::i;:::-;13912:139;;13639:419;;;:::o;14064:233::-;14103:3;14126:24;14144:5;14126:24;:::i;:::-;14117:33;;14172:66;14165:5;14162:77;14159:103;;14242:18;;:::i;:::-;14159:103;14289:1;14282:5;14278:13;14271:20;;14064:233;;;:::o;14303:180::-;14443:32;14439:1;14431:6;14427:14;14420:56;14303:180;:::o;14489:366::-;14631:3;14652:67;14716:2;14711:3;14652:67;:::i;:::-;14645:74;;14728:93;14817:3;14728:93;:::i;:::-;14846:2;14841:3;14837:12;14830:19;;14489:366;;;:::o;14861:419::-;15027:4;15065:2;15054:9;15050:18;15042:26;;15114:9;15108:4;15104:20;15100:1;15089:9;15085:17;15078:47;15142:131;15268:4;15142:131;:::i;:::-;15134:139;;14861:419;;;:::o;15286:410::-;15326:7;15349:20;15367:1;15349:20;:::i;:::-;15344:25;;15383:20;15401:1;15383:20;:::i;:::-;15378:25;;15438:1;15435;15431:9;15460:30;15478:11;15460:30;:::i;:::-;15449:41;;15639:1;15630:7;15626:15;15623:1;15620:22;15600:1;15593:9;15573:83;15550:139;;15669:18;;:::i;:::-;15550:139;15334:362;15286:410;;;;:::o;15702:191::-;15742:3;15761:20;15779:1;15761:20;:::i;:::-;15756:25;;15795:20;15813:1;15795:20;:::i;:::-;15790:25;;15838:1;15835;15831:9;15824:16;;15859:3;15856:1;15853:10;15850:36;;;15866:18;;:::i;:::-;15850:36;15702:191;;;;:::o;15899:174::-;16039:26;16035:1;16027:6;16023:14;16016:50;15899:174;:::o;16079:366::-;16221:3;16242:67;16306:2;16301:3;16242:67;:::i;:::-;16235:74;;16318:93;16407:3;16318:93;:::i;:::-;16436:2;16431:3;16427:12;16420:19;;16079:366;;;:::o;16451:419::-;16617:4;16655:2;16644:9;16640:18;16632:26;;16704:9;16698:4;16694:20;16690:1;16679:9;16675:17;16668:47;16732:131;16858:4;16732:131;:::i;:::-;16724:139;;16451:419;;;:::o;16876:180::-;16924:77;16921:1;16914:88;17021:4;17018:1;17011:15;17045:4;17042:1;17035:15;17062:180;17110:77;17107:1;17100:88;17207:4;17204:1;17197:15;17231:4;17228:1;17221:15;17248:103;17311:7;17340:5;17329:16;;17248:103;;;:::o;17357:60::-;17385:3;17406:5;17399:12;;17357:60;;;:::o;17423:194::-;17499:9;17532:79;17550:60;17559:50;17603:5;17559:50;:::i;:::-;17550:60;:::i;:::-;17532:79;:::i;:::-;17519:92;;17423:194;;;:::o;17623:183::-;17736:63;17793:5;17736:63;:::i;:::-;17731:3;17724:76;17623:183;;:::o;17812:114::-;17879:6;17913:5;17907:12;17897:22;;17812:114;;;:::o;17932:184::-;18031:11;18065:6;18060:3;18053:19;18105:4;18100:3;18096:14;18081:29;;17932:184;;;;:::o;18122:132::-;18189:4;18212:3;18204:11;;18242:4;18237:3;18233:14;18225:22;;18122:132;;;:::o;18260:108::-;18337:24;18355:5;18337:24;:::i;:::-;18332:3;18325:37;18260:108;;:::o;18374:179::-;18443:10;18464:46;18506:3;18498:6;18464:46;:::i;:::-;18542:4;18537:3;18533:14;18519:28;;18374:179;;;;:::o;18559:113::-;18629:4;18661;18656:3;18652:14;18644:22;;18559:113;;;:::o;18708:732::-;18827:3;18856:54;18904:5;18856:54;:::i;:::-;18926:86;19005:6;19000:3;18926:86;:::i;:::-;18919:93;;19036:56;19086:5;19036:56;:::i;:::-;19115:7;19146:1;19131:284;19156:6;19153:1;19150:13;19131:284;;;19232:6;19226:13;19259:63;19318:3;19303:13;19259:63;:::i;:::-;19252:70;;19345:60;19398:6;19345:60;:::i;:::-;19335:70;;19191:224;19178:1;19175;19171:9;19166:14;;19131:284;;;19135:14;19431:3;19424:10;;18832:608;;;18708:732;;;;:::o;19446:535::-;19643:4;19681:2;19670:9;19666:18;19658:26;;19694:97;19788:1;19777:9;19773:17;19764:6;19694:97;:::i;:::-;19838:9;19832:4;19828:20;19823:2;19812:9;19808:18;19801:48;19866:108;19969:4;19960:6;19866:108;:::i;:::-;19858:116;;19446:535;;;;;:::o;19987:117::-;20096:1;20093;20086:12;20110:281;20193:27;20215:4;20193:27;:::i;:::-;20185:6;20181:40;20323:6;20311:10;20308:22;20287:18;20275:10;20272:34;20269:62;20266:88;;;20334:18;;:::i;:::-;20266:88;20374:10;20370:2;20363:22;20153:238;20110:281;;:::o;20397:129::-;20431:6;20458:20;;:::i;:::-;20448:30;;20487:33;20515:4;20507:6;20487:33;:::i;:::-;20397:129;;;:::o;20532:311::-;20609:4;20699:18;20691:6;20688:30;20685:56;;;20721:18;;:::i;:::-;20685:56;20771:4;20763:6;20759:17;20751:25;;20831:4;20825;20821:15;20813:23;;20532:311;;;:::o;20849:117::-;20958:1;20955;20948:12;20972:143;21029:5;21060:6;21054:13;21045:22;;21076:33;21103:5;21076:33;:::i;:::-;20972:143;;;;:::o;21138:732::-;21245:5;21270:81;21286:64;21343:6;21286:64;:::i;:::-;21270:81;:::i;:::-;21261:90;;21371:5;21400:6;21393:5;21386:21;21434:4;21427:5;21423:16;21416:23;;21487:4;21479:6;21475:17;21467:6;21463:30;21516:3;21508:6;21505:15;21502:122;;;21535:79;;:::i;:::-;21502:122;21650:6;21633:231;21667:6;21662:3;21659:15;21633:231;;;21742:3;21771:48;21815:3;21803:10;21771:48;:::i;:::-;21766:3;21759:61;21849:4;21844:3;21840:14;21833:21;;21709:155;21693:4;21688:3;21684:14;21677:21;;21633:231;;;21637:21;21251:619;;21138:732;;;;;:::o;21893:385::-;21975:5;22024:3;22017:4;22009:6;22005:17;22001:27;21991:122;;22032:79;;:::i;:::-;21991:122;22142:6;22136:13;22167:105;22268:3;22260:6;22253:4;22245:6;22241:17;22167:105;:::i;:::-;22158:114;;21981:297;21893:385;;;;:::o;22284:554::-;22379:6;22428:2;22416:9;22407:7;22403:23;22399:32;22396:119;;;22434:79;;:::i;:::-;22396:119;22575:1;22564:9;22560:17;22554:24;22605:18;22597:6;22594:30;22591:117;;;22627:79;;:::i;:::-;22591:117;22732:89;22813:7;22804:6;22793:9;22789:22;22732:89;:::i;:::-;22722:99;;22525:306;22284:554;;;;:::o;22844:85::-;22889:7;22918:5;22907:16;;22844:85;;;:::o;22935:158::-;22993:9;23026:61;23044:42;23053:32;23079:5;23053:32;:::i;:::-;23044:42;:::i;:::-;23026:61;:::i;:::-;23013:74;;22935:158;;;:::o;23099:147::-;23194:45;23233:5;23194:45;:::i;:::-;23189:3;23182:58;23099:147;;:::o;23252:831::-;23515:4;23553:3;23542:9;23538:19;23530:27;;23567:71;23635:1;23624:9;23620:17;23611:6;23567:71;:::i;:::-;23648:80;23724:2;23713:9;23709:18;23700:6;23648:80;:::i;:::-;23775:9;23769:4;23765:20;23760:2;23749:9;23745:18;23738:48;23803:108;23906:4;23897:6;23803:108;:::i;:::-;23795:116;;23921:72;23989:2;23978:9;23974:18;23965:6;23921:72;:::i;:::-;24003:73;24071:3;24060:9;24056:19;24047:6;24003:73;:::i;:::-;23252:831;;;;;;;;:::o
Swarm Source
ipfs://434dcc02a5bb6e3a0adbffdc2c44d0d0023eaac6b640494a9eee036e80275ae4
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.