More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 31 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Update Fees | 17155000 | 557 days ago | IN | 0 ETH | 0.00156686 | ||||
Approve | 17154996 | 557 days ago | IN | 0 ETH | 0.00153337 | ||||
Approve | 17154976 | 557 days ago | IN | 0 ETH | 0.00149809 | ||||
Approve | 17154966 | 557 days ago | IN | 0 ETH | 0.00146491 | ||||
Approve | 17154964 | 557 days ago | IN | 0 ETH | 0.00154988 | ||||
Approve | 17154962 | 557 days ago | IN | 0 ETH | 0.00153077 | ||||
Approve | 17154959 | 557 days ago | IN | 0 ETH | 0.00150509 | ||||
Approve | 17154958 | 557 days ago | IN | 0 ETH | 0.0015283 | ||||
Approve | 17154936 | 557 days ago | IN | 0 ETH | 0.00147737 | ||||
Approve | 17154928 | 557 days ago | IN | 0 ETH | 0.00191517 | ||||
Update Fees | 17154917 | 557 days ago | IN | 0 ETH | 0.00074767 | ||||
Approve | 17154899 | 557 days ago | IN | 0 ETH | 0.00156347 | ||||
Approve | 17154899 | 557 days ago | IN | 0 ETH | 0.00171041 | ||||
Approve | 17154896 | 557 days ago | IN | 0 ETH | 0.00156802 | ||||
Approve | 17154893 | 557 days ago | IN | 0 ETH | 0.00184795 | ||||
Approve | 17154891 | 557 days ago | IN | 0 ETH | 0.00173752 | ||||
Update Fees | 17154889 | 557 days ago | IN | 0 ETH | 0.00096827 | ||||
Approve | 17154883 | 557 days ago | IN | 0 ETH | 0.00152469 | ||||
Approve | 17154879 | 557 days ago | IN | 0 ETH | 0.00172701 | ||||
Approve | 17154870 | 557 days ago | IN | 0 ETH | 0.00148942 | ||||
Approve | 17154870 | 557 days ago | IN | 0 ETH | 0.00162721 | ||||
Approve | 17154869 | 557 days ago | IN | 0 ETH | 0.00153787 | ||||
Approve | 17154866 | 557 days ago | IN | 0 ETH | 0.00157868 | ||||
Approve | 17154866 | 557 days ago | IN | 0 ETH | 0.00157868 | ||||
Approve | 17154861 | 557 days ago | IN | 0 ETH | 0.0017637 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
UgandaKnuckles
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-29 */ // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: DAWAE.sol pragma solidity ^0.8.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract UgandaKnuckles is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; uint256 public swapTokensAtAmount; bool public tradingActive = true; uint256 public marketingFeeSell; /******************/ // exlcude from fees mapping(address => bool) private _isExcludedFromFees; event ExcludeFromFees(address indexed account, bool isExcluded); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); constructor() ERC20("UgandaKnuckles", "DAWAE") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uint256 totalSupply = 420_000_000_000 * 1e18; swapTokensAtAmount = 1000 * 1e18; //swap tax for eth when collected tokens are 1000 or more marketingFeeSell = 20; marketingWallet = address(0x680b5FE4f93CFe7fF7F665eA56c495A6605d45aD); // marketing wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(marketingWallet, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable {} // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= 1000 * 1e18, "Swap amount cannot be lower than 1000 tokens." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateFees( uint256 _marketingFeeSell ) external onlyOwner { marketingFeeSell = _marketingFeeSell; require(marketingFeeSell <= 20, "Sell tax too high"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && !swapping && to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (to == uniswapV2Pair && marketingFeeSell > 0) { fees = amount.mul(marketingFeeSell).div(100); } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForETH(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, marketingWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); if (contractBalance == 0) { return; } swapTokensForETH(contractBalance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600860006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600e81526020017f5567616e64614b6e75636b6c65730000000000000000000000000000000000008152506040518060400160405280600581526020017f44415741450000000000000000000000000000000000000000000000000000008152508160039081620000aa919062000a11565b508060049081620000bc919062000a11565b505050620000df620000d3620003dc60201b60201c565b620003e460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000178573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019e919062000b62565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022c919062000b62565b6040518363ffffffff1660e01b81526004016200024b92919062000ba5565b6020604051808303816000875af11580156200026b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000291919062000b62565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060006c054d17db76321263eca00000009050683635c9adc5dea00000600781905550601460098190555073680b5fe4f93cfe7ff7f665ea56c495a6605d45ad600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200036562000357620004aa60201b60201c565b6001620004d460201b60201c565b6200039a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004d460201b60201c565b620003ad306001620004d460201b60201c565b620003c261dead6001620004d460201b60201c565b620003d433826200058f60201b60201c565b505062000d99565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004e4620006fc60201b60201c565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000583919062000bef565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000601576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005f89062000c6d565b60405180910390fd5b62000615600083836200078d60201b60201c565b806002600082825462000629919062000cbe565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620006dc919062000d0a565b60405180910390a3620006f8600083836200079260201b60201c565b5050565b6200070c620003dc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000732620004aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200078b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007829062000d77565b60405180910390fd5b565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200081957607f821691505b6020821081036200082f576200082e620007d1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200085a565b620008a586836200085a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620008f2620008ec620008e684620008bd565b620008c7565b620008bd565b9050919050565b6000819050919050565b6200090e83620008d1565b620009266200091d82620008f9565b84845462000867565b825550505050565b600090565b6200093d6200092e565b6200094a81848462000903565b505050565b5b8181101562000972576200096660008262000933565b60018101905062000950565b5050565b601f821115620009c1576200098b8162000835565b62000996846200084a565b81016020851015620009a6578190505b620009be620009b5856200084a565b8301826200094f565b50505b505050565b600082821c905092915050565b6000620009e660001984600802620009c6565b1980831691505092915050565b600062000a018383620009d3565b9150826002028217905092915050565b62000a1c8262000797565b67ffffffffffffffff81111562000a385762000a37620007a2565b5b62000a44825462000800565b62000a5182828562000976565b600060209050601f83116001811462000a89576000841562000a74578287015190505b62000a808582620009f3565b86555062000af0565b601f19841662000a998662000835565b60005b8281101562000ac35784890151825560018201915060208501945060208101905062000a9c565b8683101562000ae3578489015162000adf601f891682620009d3565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b2a8262000afd565b9050919050565b62000b3c8162000b1d565b811462000b4857600080fd5b50565b60008151905062000b5c8162000b31565b92915050565b60006020828403121562000b7b5762000b7a62000af8565b5b600062000b8b8482850162000b4b565b91505092915050565b62000b9f8162000b1d565b82525050565b600060408201905062000bbc600083018562000b94565b62000bcb602083018462000b94565b9392505050565b60008115159050919050565b62000be98162000bd2565b82525050565b600060208201905062000c06600083018462000bde565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000c55601f8362000c0c565b915062000c628262000c1d565b602082019050919050565b6000602082019050818103600083015262000c888162000c46565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ccb82620008bd565b915062000cd883620008bd565b925082820190508082111562000cf35762000cf262000c8f565b5b92915050565b62000d0481620008bd565b82525050565b600060208201905062000d21600083018462000cf9565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d5f60208362000c0c565b915062000d6c8262000d27565b602082019050919050565b6000602082019050818103600083015262000d928162000d50565b9050919050565b60805160a051612b6362000de2600039600081816107d50152818161136d015261157501526000818161073201528181611af001528181611bd10152611bf80152612b636000f3fe6080604052600436106101855760003560e01c806375f0a874116100d1578063aacebbe31161008a578063d257b34f11610064578063d257b34f146105a7578063dd62ed3e146105e4578063e2f4560514610621578063f2fde38b1461064c5761018c565b8063aacebbe31461052a578063bbc0c74214610553578063c02466681461057e5761018c565b806375f0a8741461040657806378dacee1146104315780638da5cb5b1461045a57806395d89b4114610485578063a457c2d7146104b0578063a9059cbb146104ed5761018c565b806327c8f8351161013e57806349bd5a5e1161011857806349bd5a5e1461034a5780634fbee1931461037557806370a08231146103b2578063715018a6146103ef5761018c565b806327c8f835146102b7578063313ce567146102e2578063395093511461030d5761018c565b806306fdde0314610191578063095ea7b3146101bc57806313374e7a146101f95780631694505e1461022457806318160ddd1461024f57806323b872dd1461027a5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610675565b6040516101b39190611d40565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190611dfb565b610707565b6040516101f09190611e56565b60405180910390f35b34801561020557600080fd5b5061020e61072a565b60405161021b9190611e80565b60405180910390f35b34801561023057600080fd5b50610239610730565b6040516102469190611efa565b60405180910390f35b34801561025b57600080fd5b50610264610754565b6040516102719190611e80565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c9190611f15565b61075e565b6040516102ae9190611e56565b60405180910390f35b3480156102c357600080fd5b506102cc61078d565b6040516102d99190611f77565b60405180910390f35b3480156102ee57600080fd5b506102f7610793565b6040516103049190611fae565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190611dfb565b61079c565b6040516103419190611e56565b60405180910390f35b34801561035657600080fd5b5061035f6107d3565b60405161036c9190611f77565b60405180910390f35b34801561038157600080fd5b5061039c60048036038101906103979190611fc9565b6107f7565b6040516103a99190611e56565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190611fc9565b61084d565b6040516103e69190611e80565b60405180910390f35b3480156103fb57600080fd5b50610404610895565b005b34801561041257600080fd5b5061041b6108a9565b6040516104289190611f77565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190611ff6565b6108cf565b005b34801561046657600080fd5b5061046f610927565b60405161047c9190611f77565b60405180910390f35b34801561049157600080fd5b5061049a610951565b6040516104a79190611d40565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d29190611dfb565b6109e3565b6040516104e49190611e56565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190611dfb565b610a5a565b6040516105219190611e56565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190611fc9565b610a7d565b005b34801561055f57600080fd5b50610568610b45565b6040516105759190611e56565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a0919061204f565b610b58565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190611ff6565b610c09565b6040516105db9190611e56565b60405180910390f35b3480156105f057600080fd5b5061060b6004803603810190610606919061208f565b610cd2565b6040516106189190611e80565b60405180910390f35b34801561062d57600080fd5b50610636610d59565b6040516106439190611e80565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190611fc9565b610d5f565b005b606060038054610684906120fe565b80601f01602080910402602001604051908101604052809291908181526020018280546106b0906120fe565b80156106fd5780601f106106d2576101008083540402835291602001916106fd565b820191906000526020600020905b8154815290600101906020018083116106e057829003601f168201915b5050505050905090565b600080610712610de2565b905061071f818585610dea565b600191505092915050565b60095481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600080610769610de2565b9050610776858285610fb3565b61078185858561103f565b60019150509392505050565b61dead81565b60006012905090565b6000806107a7610de2565b90506107c88185856107b98589610cd2565b6107c3919061215e565b610dea565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61089d611639565b6108a760006116b7565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108d7611639565b8060098190555060146009541115610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b906121de565b60405180910390fd5b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610960906120fe565b80601f016020809104026020016040519081016040528092919081815260200182805461098c906120fe565b80156109d95780601f106109ae576101008083540402835291602001916109d9565b820191906000526020600020905b8154815290600101906020018083116109bc57829003601f168201915b5050505050905090565b6000806109ee610de2565b905060006109fc8286610cd2565b905083811015610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3890612270565b60405180910390fd5b610a4e8286868403610dea565b60019250505092915050565b600080610a65610de2565b9050610a7281858561103f565b600191505092915050565b610a85611639565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900460ff1681565b610b60611639565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610bfd9190611e56565b60405180910390a25050565b6000610c13611639565b683635c9adc5dea00000821015610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5690612302565b60405180910390fd5b6103e86005610c6c610754565b610c769190612322565b610c809190612393565b821115610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb990612436565b60405180910390fd5b8160078190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b610d67611639565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd906124c8565b60405180910390fd5b610ddf816116b7565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e509061255a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf906125ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fa69190611e80565b60405180910390a3505050565b6000610fbf8484610cd2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611039578181101561102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290612658565b60405180910390fd5b6110388484848403610dea565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a5906126ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361111d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111149061277c565b60405180910390fd5b60008103611136576111318383600061177d565b611634565b61113e610927565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156111ac575061117c610927565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156111e55750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561121f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156112385750600560149054906101000a900460ff16155b1561133357600860009054906101000a900460ff1661133257600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806112f25750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611331576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611328906127e8565b60405180910390fd5b5b5b600061133e3061084d565b9050600060075482101590508080156113645750600560149054906101000a900460ff16155b80156113bb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156114115750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156114675750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156114ab576001600560146101000a81548160ff02191690831515021790555061148f6119f3565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806115615750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561156b57600090505b60008115611624577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480156115d057506000600954115b15611600576115fd60646115ef60095488611a1b90919063ffffffff16565b611a3190919063ffffffff16565b90505b60008111156116155761161487308361177d565b5b80856116219190612808565b94505b61162f87878761177d565b505050505b505050565b611641610de2565b73ffffffffffffffffffffffffffffffffffffffff1661165f610927565b73ffffffffffffffffffffffffffffffffffffffff16146116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90612888565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e3906126ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361185b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118529061277c565b60405180910390fd5b611866838383611a47565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e39061291a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119da9190611e80565b60405180910390a36119ed848484611a4c565b50505050565b60006119fe3061084d565b905060008103611a0e5750611a19565b611a1781611a51565b505b565b60008183611a299190612322565b905092915050565b60008183611a3f9190612393565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115611a6e57611a6d61293a565b5b604051908082528060200260200182016040528015611a9c5781602001602082028036833780820191505090505b5090503081600081518110611ab457611ab3612969565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7d91906129ad565b81600181518110611b9157611b90612969565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611bf6307f000000000000000000000000000000000000000000000000000000000000000084610dea565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611c7a959493929190612ad3565b600060405180830381600087803b158015611c9457600080fd5b505af1158015611ca8573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611cea578082015181840152602081019050611ccf565b60008484015250505050565b6000601f19601f8301169050919050565b6000611d1282611cb0565b611d1c8185611cbb565b9350611d2c818560208601611ccc565b611d3581611cf6565b840191505092915050565b60006020820190508181036000830152611d5a8184611d07565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d9282611d67565b9050919050565b611da281611d87565b8114611dad57600080fd5b50565b600081359050611dbf81611d99565b92915050565b6000819050919050565b611dd881611dc5565b8114611de357600080fd5b50565b600081359050611df581611dcf565b92915050565b60008060408385031215611e1257611e11611d62565b5b6000611e2085828601611db0565b9250506020611e3185828601611de6565b9150509250929050565b60008115159050919050565b611e5081611e3b565b82525050565b6000602082019050611e6b6000830184611e47565b92915050565b611e7a81611dc5565b82525050565b6000602082019050611e956000830184611e71565b92915050565b6000819050919050565b6000611ec0611ebb611eb684611d67565b611e9b565b611d67565b9050919050565b6000611ed282611ea5565b9050919050565b6000611ee482611ec7565b9050919050565b611ef481611ed9565b82525050565b6000602082019050611f0f6000830184611eeb565b92915050565b600080600060608486031215611f2e57611f2d611d62565b5b6000611f3c86828701611db0565b9350506020611f4d86828701611db0565b9250506040611f5e86828701611de6565b9150509250925092565b611f7181611d87565b82525050565b6000602082019050611f8c6000830184611f68565b92915050565b600060ff82169050919050565b611fa881611f92565b82525050565b6000602082019050611fc36000830184611f9f565b92915050565b600060208284031215611fdf57611fde611d62565b5b6000611fed84828501611db0565b91505092915050565b60006020828403121561200c5761200b611d62565b5b600061201a84828501611de6565b91505092915050565b61202c81611e3b565b811461203757600080fd5b50565b60008135905061204981612023565b92915050565b6000806040838503121561206657612065611d62565b5b600061207485828601611db0565b92505060206120858582860161203a565b9150509250929050565b600080604083850312156120a6576120a5611d62565b5b60006120b485828601611db0565b92505060206120c585828601611db0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061211657607f821691505b602082108103612129576121286120cf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061216982611dc5565b915061217483611dc5565b925082820190508082111561218c5761218b61212f565b5b92915050565b7f53656c6c2074617820746f6f2068696768000000000000000000000000000000600082015250565b60006121c8601183611cbb565b91506121d382612192565b602082019050919050565b600060208201905081810360008301526121f7816121bb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061225a602583611cbb565b9150612265826121fe565b604082019050919050565b600060208201905081810360008301526122898161224d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f203130303020746f6b656e732e00000000000000000000000000000000000000602082015250565b60006122ec602d83611cbb565b91506122f782612290565b604082019050919050565b6000602082019050818103600083015261231b816122df565b9050919050565b600061232d82611dc5565b915061233883611dc5565b925082820261234681611dc5565b9150828204841483151761235d5761235c61212f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061239e82611dc5565b91506123a983611dc5565b9250826123b9576123b8612364565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000612420603483611cbb565b915061242b826123c4565b604082019050919050565b6000602082019050818103600083015261244f81612413565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006124b2602683611cbb565b91506124bd82612456565b604082019050919050565b600060208201905081810360008301526124e1816124a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612544602483611cbb565b915061254f826124e8565b604082019050919050565b6000602082019050818103600083015261257381612537565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006125d6602283611cbb565b91506125e18261257a565b604082019050919050565b60006020820190508181036000830152612605816125c9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612642601d83611cbb565b915061264d8261260c565b602082019050919050565b6000602082019050818103600083015261267181612635565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006126d4602583611cbb565b91506126df82612678565b604082019050919050565b60006020820190508181036000830152612703816126c7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612766602383611cbb565b91506127718261270a565b604082019050919050565b6000602082019050818103600083015261279581612759565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006127d2601683611cbb565b91506127dd8261279c565b602082019050919050565b60006020820190508181036000830152612801816127c5565b9050919050565b600061281382611dc5565b915061281e83611dc5565b92508282039050818111156128365761283561212f565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612872602083611cbb565b915061287d8261283c565b602082019050919050565b600060208201905081810360008301526128a181612865565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612904602683611cbb565b915061290f826128a8565b604082019050919050565b60006020820190508181036000830152612933816128f7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506129a781611d99565b92915050565b6000602082840312156129c3576129c2611d62565b5b60006129d184828501612998565b91505092915050565b6000819050919050565b60006129ff6129fa6129f5846129da565b611e9b565b611dc5565b9050919050565b612a0f816129e4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a4a81611d87565b82525050565b6000612a5c8383612a41565b60208301905092915050565b6000602082019050919050565b6000612a8082612a15565b612a8a8185612a20565b9350612a9583612a31565b8060005b83811015612ac6578151612aad8882612a50565b9750612ab883612a68565b925050600181019050612a99565b5085935050505092915050565b600060a082019050612ae86000830188611e71565b612af56020830187612a06565b8181036040830152612b078186612a75565b9050612b166060830185611f68565b612b236080830184611e71565b969550505050505056fea264697066735822122073f576b60b27b34dbf9c3e255ba141785d53bede49173b8cfe3e4b7baeecb06564736f6c63430008120033
Deployed Bytecode
0x6080604052600436106101855760003560e01c806375f0a874116100d1578063aacebbe31161008a578063d257b34f11610064578063d257b34f146105a7578063dd62ed3e146105e4578063e2f4560514610621578063f2fde38b1461064c5761018c565b8063aacebbe31461052a578063bbc0c74214610553578063c02466681461057e5761018c565b806375f0a8741461040657806378dacee1146104315780638da5cb5b1461045a57806395d89b4114610485578063a457c2d7146104b0578063a9059cbb146104ed5761018c565b806327c8f8351161013e57806349bd5a5e1161011857806349bd5a5e1461034a5780634fbee1931461037557806370a08231146103b2578063715018a6146103ef5761018c565b806327c8f835146102b7578063313ce567146102e2578063395093511461030d5761018c565b806306fdde0314610191578063095ea7b3146101bc57806313374e7a146101f95780631694505e1461022457806318160ddd1461024f57806323b872dd1461027a5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610675565b6040516101b39190611d40565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190611dfb565b610707565b6040516101f09190611e56565b60405180910390f35b34801561020557600080fd5b5061020e61072a565b60405161021b9190611e80565b60405180910390f35b34801561023057600080fd5b50610239610730565b6040516102469190611efa565b60405180910390f35b34801561025b57600080fd5b50610264610754565b6040516102719190611e80565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c9190611f15565b61075e565b6040516102ae9190611e56565b60405180910390f35b3480156102c357600080fd5b506102cc61078d565b6040516102d99190611f77565b60405180910390f35b3480156102ee57600080fd5b506102f7610793565b6040516103049190611fae565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190611dfb565b61079c565b6040516103419190611e56565b60405180910390f35b34801561035657600080fd5b5061035f6107d3565b60405161036c9190611f77565b60405180910390f35b34801561038157600080fd5b5061039c60048036038101906103979190611fc9565b6107f7565b6040516103a99190611e56565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190611fc9565b61084d565b6040516103e69190611e80565b60405180910390f35b3480156103fb57600080fd5b50610404610895565b005b34801561041257600080fd5b5061041b6108a9565b6040516104289190611f77565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190611ff6565b6108cf565b005b34801561046657600080fd5b5061046f610927565b60405161047c9190611f77565b60405180910390f35b34801561049157600080fd5b5061049a610951565b6040516104a79190611d40565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d29190611dfb565b6109e3565b6040516104e49190611e56565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190611dfb565b610a5a565b6040516105219190611e56565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190611fc9565b610a7d565b005b34801561055f57600080fd5b50610568610b45565b6040516105759190611e56565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a0919061204f565b610b58565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190611ff6565b610c09565b6040516105db9190611e56565b60405180910390f35b3480156105f057600080fd5b5061060b6004803603810190610606919061208f565b610cd2565b6040516106189190611e80565b60405180910390f35b34801561062d57600080fd5b50610636610d59565b6040516106439190611e80565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190611fc9565b610d5f565b005b606060038054610684906120fe565b80601f01602080910402602001604051908101604052809291908181526020018280546106b0906120fe565b80156106fd5780601f106106d2576101008083540402835291602001916106fd565b820191906000526020600020905b8154815290600101906020018083116106e057829003601f168201915b5050505050905090565b600080610712610de2565b905061071f818585610dea565b600191505092915050565b60095481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600080610769610de2565b9050610776858285610fb3565b61078185858561103f565b60019150509392505050565b61dead81565b60006012905090565b6000806107a7610de2565b90506107c88185856107b98589610cd2565b6107c3919061215e565b610dea565b600191505092915050565b7f000000000000000000000000132ae55a8676c7efd2dd2f6febb2e40dd954fd9781565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61089d611639565b6108a760006116b7565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108d7611639565b8060098190555060146009541115610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b906121de565b60405180910390fd5b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610960906120fe565b80601f016020809104026020016040519081016040528092919081815260200182805461098c906120fe565b80156109d95780601f106109ae576101008083540402835291602001916109d9565b820191906000526020600020905b8154815290600101906020018083116109bc57829003601f168201915b5050505050905090565b6000806109ee610de2565b905060006109fc8286610cd2565b905083811015610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3890612270565b60405180910390fd5b610a4e8286868403610dea565b60019250505092915050565b600080610a65610de2565b9050610a7281858561103f565b600191505092915050565b610a85611639565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900460ff1681565b610b60611639565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610bfd9190611e56565b60405180910390a25050565b6000610c13611639565b683635c9adc5dea00000821015610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5690612302565b60405180910390fd5b6103e86005610c6c610754565b610c769190612322565b610c809190612393565b821115610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb990612436565b60405180910390fd5b8160078190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b610d67611639565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd906124c8565b60405180910390fd5b610ddf816116b7565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e509061255a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf906125ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fa69190611e80565b60405180910390a3505050565b6000610fbf8484610cd2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611039578181101561102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290612658565b60405180910390fd5b6110388484848403610dea565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a5906126ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361111d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111149061277c565b60405180910390fd5b60008103611136576111318383600061177d565b611634565b61113e610927565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156111ac575061117c610927565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156111e55750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561121f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156112385750600560149054906101000a900460ff16155b1561133357600860009054906101000a900460ff1661133257600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806112f25750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611331576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611328906127e8565b60405180910390fd5b5b5b600061133e3061084d565b9050600060075482101590508080156113645750600560149054906101000a900460ff16155b80156113bb57507f000000000000000000000000132ae55a8676c7efd2dd2f6febb2e40dd954fd9773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156114115750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156114675750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156114ab576001600560146101000a81548160ff02191690831515021790555061148f6119f3565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806115615750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561156b57600090505b60008115611624577f000000000000000000000000132ae55a8676c7efd2dd2f6febb2e40dd954fd9773ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480156115d057506000600954115b15611600576115fd60646115ef60095488611a1b90919063ffffffff16565b611a3190919063ffffffff16565b90505b60008111156116155761161487308361177d565b5b80856116219190612808565b94505b61162f87878761177d565b505050505b505050565b611641610de2565b73ffffffffffffffffffffffffffffffffffffffff1661165f610927565b73ffffffffffffffffffffffffffffffffffffffff16146116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90612888565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e3906126ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361185b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118529061277c565b60405180910390fd5b611866838383611a47565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e39061291a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119da9190611e80565b60405180910390a36119ed848484611a4c565b50505050565b60006119fe3061084d565b905060008103611a0e5750611a19565b611a1781611a51565b505b565b60008183611a299190612322565b905092915050565b60008183611a3f9190612393565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115611a6e57611a6d61293a565b5b604051908082528060200260200182016040528015611a9c5781602001602082028036833780820191505090505b5090503081600081518110611ab457611ab3612969565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7d91906129ad565b81600181518110611b9157611b90612969565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611bf6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610dea565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611c7a959493929190612ad3565b600060405180830381600087803b158015611c9457600080fd5b505af1158015611ca8573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611cea578082015181840152602081019050611ccf565b60008484015250505050565b6000601f19601f8301169050919050565b6000611d1282611cb0565b611d1c8185611cbb565b9350611d2c818560208601611ccc565b611d3581611cf6565b840191505092915050565b60006020820190508181036000830152611d5a8184611d07565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d9282611d67565b9050919050565b611da281611d87565b8114611dad57600080fd5b50565b600081359050611dbf81611d99565b92915050565b6000819050919050565b611dd881611dc5565b8114611de357600080fd5b50565b600081359050611df581611dcf565b92915050565b60008060408385031215611e1257611e11611d62565b5b6000611e2085828601611db0565b9250506020611e3185828601611de6565b9150509250929050565b60008115159050919050565b611e5081611e3b565b82525050565b6000602082019050611e6b6000830184611e47565b92915050565b611e7a81611dc5565b82525050565b6000602082019050611e956000830184611e71565b92915050565b6000819050919050565b6000611ec0611ebb611eb684611d67565b611e9b565b611d67565b9050919050565b6000611ed282611ea5565b9050919050565b6000611ee482611ec7565b9050919050565b611ef481611ed9565b82525050565b6000602082019050611f0f6000830184611eeb565b92915050565b600080600060608486031215611f2e57611f2d611d62565b5b6000611f3c86828701611db0565b9350506020611f4d86828701611db0565b9250506040611f5e86828701611de6565b9150509250925092565b611f7181611d87565b82525050565b6000602082019050611f8c6000830184611f68565b92915050565b600060ff82169050919050565b611fa881611f92565b82525050565b6000602082019050611fc36000830184611f9f565b92915050565b600060208284031215611fdf57611fde611d62565b5b6000611fed84828501611db0565b91505092915050565b60006020828403121561200c5761200b611d62565b5b600061201a84828501611de6565b91505092915050565b61202c81611e3b565b811461203757600080fd5b50565b60008135905061204981612023565b92915050565b6000806040838503121561206657612065611d62565b5b600061207485828601611db0565b92505060206120858582860161203a565b9150509250929050565b600080604083850312156120a6576120a5611d62565b5b60006120b485828601611db0565b92505060206120c585828601611db0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061211657607f821691505b602082108103612129576121286120cf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061216982611dc5565b915061217483611dc5565b925082820190508082111561218c5761218b61212f565b5b92915050565b7f53656c6c2074617820746f6f2068696768000000000000000000000000000000600082015250565b60006121c8601183611cbb565b91506121d382612192565b602082019050919050565b600060208201905081810360008301526121f7816121bb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061225a602583611cbb565b9150612265826121fe565b604082019050919050565b600060208201905081810360008301526122898161224d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f203130303020746f6b656e732e00000000000000000000000000000000000000602082015250565b60006122ec602d83611cbb565b91506122f782612290565b604082019050919050565b6000602082019050818103600083015261231b816122df565b9050919050565b600061232d82611dc5565b915061233883611dc5565b925082820261234681611dc5565b9150828204841483151761235d5761235c61212f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061239e82611dc5565b91506123a983611dc5565b9250826123b9576123b8612364565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000612420603483611cbb565b915061242b826123c4565b604082019050919050565b6000602082019050818103600083015261244f81612413565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006124b2602683611cbb565b91506124bd82612456565b604082019050919050565b600060208201905081810360008301526124e1816124a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612544602483611cbb565b915061254f826124e8565b604082019050919050565b6000602082019050818103600083015261257381612537565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006125d6602283611cbb565b91506125e18261257a565b604082019050919050565b60006020820190508181036000830152612605816125c9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612642601d83611cbb565b915061264d8261260c565b602082019050919050565b6000602082019050818103600083015261267181612635565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006126d4602583611cbb565b91506126df82612678565b604082019050919050565b60006020820190508181036000830152612703816126c7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612766602383611cbb565b91506127718261270a565b604082019050919050565b6000602082019050818103600083015261279581612759565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006127d2601683611cbb565b91506127dd8261279c565b602082019050919050565b60006020820190508181036000830152612801816127c5565b9050919050565b600061281382611dc5565b915061281e83611dc5565b92508282039050818111156128365761283561212f565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612872602083611cbb565b915061287d8261283c565b602082019050919050565b600060208201905081810360008301526128a181612865565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612904602683611cbb565b915061290f826128a8565b604082019050919050565b60006020820190508181036000830152612933816128f7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506129a781611d99565b92915050565b6000602082840312156129c3576129c2611d62565b5b60006129d184828501612998565b91505092915050565b6000819050919050565b60006129ff6129fa6129f5846129da565b611e9b565b611dc5565b9050919050565b612a0f816129e4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a4a81611d87565b82525050565b6000612a5c8383612a41565b60208301905092915050565b6000602082019050919050565b6000612a8082612a15565b612a8a8185612a20565b9350612a9583612a31565b8060005b83811015612ac6578151612aad8882612a50565b9750612ab883612a68565b925050600181019050612a99565b5085935050505092915050565b600060a082019050612ae86000830188611e71565b612af56020830187612a06565b8181036040830152612b078186612a75565b9050612b166060830185611f68565b612b236080830184611e71565b969550505050505056fea264697066735822122073f576b60b27b34dbf9c3e255ba141785d53bede49173b8cfe3e4b7baeecb06564736f6c63430008120033
Deployed Bytecode Sourcemap
28297:6075:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16392:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18743:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28694:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28381:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17512:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19524:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28484:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17354:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20228:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28439:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31394:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17683:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9817:103;;;;;;;;;;;;;:::i;:::-;;28574:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30757:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9169:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16611:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20969:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18016:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31155:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28653:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30965:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30277:472;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18272:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28613:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10075:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16392:100;16446:13;16479:5;16472:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16392:100;:::o;18743:201::-;18826:4;18843:13;18859:12;:10;:12::i;:::-;18843:28;;18882:32;18891:5;18898:7;18907:6;18882:8;:32::i;:::-;18932:4;18925:11;;;18743:201;;;;:::o;28694:31::-;;;;:::o;28381:51::-;;;:::o;17512:108::-;17573:7;17600:12;;17593:19;;17512:108;:::o;19524:295::-;19655:4;19672:15;19690:12;:10;:12::i;:::-;19672:30;;19713:38;19729:4;19735:7;19744:6;19713:15;:38::i;:::-;19762:27;19772:4;19778:2;19782:6;19762:9;:27::i;:::-;19807:4;19800:11;;;19524:295;;;;;:::o;28484:53::-;28530:6;28484:53;:::o;17354:93::-;17412:5;17437:2;17430:9;;17354:93;:::o;20228:238::-;20316:4;20333:13;20349:12;:10;:12::i;:::-;20333:28;;20372:64;20381:5;20388:7;20425:10;20397:25;20407:5;20414:7;20397:9;:25::i;:::-;:38;;;;:::i;:::-;20372:8;:64::i;:::-;20454:4;20447:11;;;20228:238;;;;:::o;28439:38::-;;;:::o;31394:126::-;31460:4;31484:19;:28;31504:7;31484:28;;;;;;;;;;;;;;;;;;;;;;;;;31477:35;;31394:126;;;:::o;17683:127::-;17757:7;17784:9;:18;17794:7;17784:18;;;;;;;;;;;;;;;;17777:25;;17683:127;;;:::o;9817:103::-;9055:13;:11;:13::i;:::-;9882:30:::1;9909:1;9882:18;:30::i;:::-;9817:103::o:0;28574:30::-;;;;;;;;;;;;;:::o;30757:200::-;9055:13;:11;:13::i;:::-;30869:17:::1;30850:16;:36;;;;30925:2;30905:16;;:22;;30897:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;30757:200:::0;:::o;9169:87::-;9215:7;9242:6;;;;;;;;;;;9235:13;;9169:87;:::o;16611:104::-;16667:13;16700:7;16693:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16611:104;:::o;20969:436::-;21062:4;21079:13;21095:12;:10;:12::i;:::-;21079:28;;21118:24;21145:25;21155:5;21162:7;21145:9;:25::i;:::-;21118:52;;21209:15;21189:16;:35;;21181:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21302:60;21311:5;21318:7;21346:15;21327:16;:34;21302:8;:60::i;:::-;21393:4;21386:11;;;;20969:436;;;;:::o;18016:193::-;18095:4;18112:13;18128:12;:10;:12::i;:::-;18112:28;;18151;18161:5;18168:2;18172:6;18151:9;:28::i;:::-;18197:4;18190:11;;;18016:193;;;;:::o;31155:231::-;9055:13;:11;:13::i;:::-;31315:15:::1;;;;;;;;;;;31272:59;;31295:18;31272:59;;;;;;;;;;;;31360:18;31342:15;;:36;;;;;;;;;;;;;;;;;;31155:231:::0;:::o;28653:32::-;;;;;;;;;;;;;:::o;30965:182::-;9055:13;:11;:13::i;:::-;31081:8:::1;31050:19;:28;31070:7;31050:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31121:7;31105:34;;;31130:8;31105:34;;;;;;:::i;:::-;;;;;;;;30965:182:::0;;:::o;30277:472::-;30385:4;9055:13;:11;:13::i;:::-;30442:11:::1;30429:9;:24;;30407:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;30594:4;30589:1;30573:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30572:26;;;;:::i;:::-;30559:9;:39;;30537:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;30710:9;30689:18;:30;;;;30737:4;30730:11;;30277:472:::0;;;:::o;18272:151::-;18361:7;18388:11;:18;18400:5;18388:18;;;;;;;;;;;;;;;:27;18407:7;18388:27;;;;;;;;;;;;;;;;18381:34;;18272:151;;;;:::o;28613:33::-;;;;:::o;10075:201::-;9055:13;:11;:13::i;:::-;10184:1:::1;10164:22;;:8;:22;;::::0;10156:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10240:28;10259:8;10240:18;:28::i;:::-;10075:201:::0;:::o;7720:98::-;7773:7;7800:10;7793:17;;7720:98;:::o;24996:380::-;25149:1;25132:19;;:5;:19;;;25124:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25230:1;25211:21;;:7;:21;;;25203:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25314:6;25284:11;:18;25296:5;25284:18;;;;;;;;;;;;;;;:27;25303:7;25284:27;;;;;;;;;;;;;;;:36;;;;25352:7;25336:32;;25345:5;25336:32;;;25361:6;25336:32;;;;;;:::i;:::-;;;;;;;;24996:380;;;:::o;25667:453::-;25802:24;25829:25;25839:5;25846:7;25829:9;:25::i;:::-;25802:52;;25889:17;25869:16;:37;25865:248;;25951:6;25931:16;:26;;25923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26035:51;26044:5;26051:7;26079:6;26060:16;:25;26035:8;:51::i;:::-;25865:248;25791:329;25667:453;;;:::o;31528:2020::-;31676:1;31660:18;;:4;:18;;;31652:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31753:1;31739:16;;:2;:16;;;31731:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31822:1;31812:6;:11;31808:93;;31840:28;31856:4;31862:2;31866:1;31840:15;:28::i;:::-;31883:7;;31808:93;31957:7;:5;:7::i;:::-;31949:15;;:4;:15;;;;:49;;;;;31991:7;:5;:7::i;:::-;31985:13;;:2;:13;;;;31949:49;:86;;;;;32033:1;32019:16;;:2;:16;;;;31949:86;:128;;;;;32070:6;32056:21;;:2;:21;;;;31949:128;:158;;;;;32099:8;;;;;;;;;;;32098:9;31949:158;31927:455;;;32147:13;;;;;;;;;;;32142:223;;32219:19;:25;32239:4;32219:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32248:19;:23;32268:2;32248:23;;;;;;;;;;;;;;;;;;;;;;;;;32219:52;32185:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;32142:223;31927:455;32396:28;32427:24;32445:4;32427:9;:24::i;:::-;32396:55;;32464:12;32503:18;;32479:20;:42;;32464:57;;32552:7;:33;;;;;32577:8;;;;;;;;;;;32576:9;32552:33;:69;;;;;32608:13;32602:19;;:2;:19;;;32552:69;:112;;;;;32639:19;:25;32659:4;32639:25;;;;;;;;;;;;;;;;;;;;;;;;;32638:26;32552:112;:153;;;;;32682:19;:23;32702:2;32682:23;;;;;;;;;;;;;;;;;;;;;;;;;32681:24;32552:153;32534:285;;;32743:4;32732:8;;:15;;;;;;;;;;;;;;;;;;32764:10;:8;:10::i;:::-;32802:5;32791:8;;:16;;;;;;;;;;;;;;;;;;32534:285;32831:12;32847:8;;;;;;;;;;;32846:9;32831:24;;32957:19;:25;32977:4;32957:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32986:19;:23;33006:2;32986:23;;;;;;;;;;;;;;;;;;;;;;;;;32957:52;32953:100;;;33036:5;33026:15;;32953:100;33065:12;33170:7;33166:329;;;33228:13;33222:19;;:2;:19;;;:43;;;;;33264:1;33245:16;;:20;33222:43;33218:128;;;33293:37;33326:3;33293:28;33304:16;;33293:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;33286:44;;33218:128;33373:1;33366:4;:8;33362:91;;;33395:42;33411:4;33425;33432;33395:15;:42::i;:::-;33362:91;33479:4;33469:14;;;;;:::i;:::-;;;33166:329;33507:33;33523:4;33529:2;33533:6;33507:15;:33::i;:::-;31641:1907;;;;31528:2020;;;;:::o;9334:132::-;9409:12;:10;:12::i;:::-;9398:23;;:7;:5;:7::i;:::-;:23;;;9390:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9334:132::o;10436:191::-;10510:16;10529:6;;;;;;;;;;;10510:25;;10555:8;10546:6;;:17;;;;;;;;;;;;;;;;;;10610:8;10579:40;;10600:8;10579:40;;;;;;;;;;;;10499:128;10436:191;:::o;21875:840::-;22022:1;22006:18;;:4;:18;;;21998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22099:1;22085:16;;:2;:16;;;22077:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22154:38;22175:4;22181:2;22185:6;22154:20;:38::i;:::-;22205:19;22227:9;:15;22237:4;22227:15;;;;;;;;;;;;;;;;22205:37;;22276:6;22261:11;:21;;22253:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;22393:6;22379:11;:20;22361:9;:15;22371:4;22361:15;;;;;;;;;;;;;;;:38;;;;22596:6;22579:9;:13;22589:2;22579:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;22646:2;22631:26;;22640:4;22631:26;;;22650:6;22631:26;;;;;;:::i;:::-;;;;;;;;22670:37;22690:4;22696:2;22700:6;22670:19;:37::i;:::-;21987:728;21875:840;;;:::o;34155:212::-;34194:23;34220:24;34238:4;34220:9;:24::i;:::-;34194:50;;34278:1;34259:15;:20;34255:59;;34296:7;;;34255:59;34326:33;34343:15;34326:16;:33::i;:::-;34183:184;34155:212;:::o;3614:98::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;4013:::-;4071:7;4102:1;4098;:5;;;;:::i;:::-;4091:12;;4013:98;;;;:::o;26720:125::-;;;;:::o;27449:124::-;;;;:::o;33556:591::-;33682:21;33720:1;33706:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33682:40;;33751:4;33733;33738:1;33733:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33777:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33767:4;33772:1;33767:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33812:62;33829:4;33844:15;33862:11;33812:8;:62::i;:::-;33913:15;:66;;;33994:11;34020:1;34064:4;34083:15;;;;;;;;;;;34113;33913:226;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33611:536;33556:591;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:118::-;5488:24;5506:5;5488:24;:::i;:::-;5483:3;5476:37;5401:118;;:::o;5525:222::-;5618:4;5656:2;5645:9;5641:18;5633:26;;5669:71;5737:1;5726:9;5722:17;5713:6;5669:71;:::i;:::-;5525:222;;;;:::o;5753:86::-;5788:7;5828:4;5821:5;5817:16;5806:27;;5753:86;;;:::o;5845:112::-;5928:22;5944:5;5928:22;:::i;:::-;5923:3;5916:35;5845:112;;:::o;5963:214::-;6052:4;6090:2;6079:9;6075:18;6067:26;;6103:67;6167:1;6156:9;6152:17;6143:6;6103:67;:::i;:::-;5963:214;;;;:::o;6183:329::-;6242:6;6291:2;6279:9;6270:7;6266:23;6262:32;6259:119;;;6297:79;;:::i;:::-;6259:119;6417:1;6442:53;6487:7;6478:6;6467:9;6463:22;6442:53;:::i;:::-;6432:63;;6388:117;6183:329;;;;:::o;6518:::-;6577:6;6626:2;6614:9;6605:7;6601:23;6597:32;6594:119;;;6632:79;;:::i;:::-;6594:119;6752:1;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6723:117;6518:329;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:474::-;7656:6;7664;7713:2;7701:9;7692:7;7688:23;7684:32;7681:119;;;7719:79;;:::i;:::-;7681:119;7839:1;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7810:117;7966:2;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7937:118;7588:474;;;;;:::o;8068:180::-;8116:77;8113:1;8106:88;8213:4;8210:1;8203:15;8237:4;8234:1;8227:15;8254:320;8298:6;8335:1;8329:4;8325:12;8315:22;;8382:1;8376:4;8372:12;8403:18;8393:81;;8459:4;8451:6;8447:17;8437:27;;8393:81;8521:2;8513:6;8510:14;8490:18;8487:38;8484:84;;8540:18;;:::i;:::-;8484:84;8305:269;8254:320;;;:::o;8580:180::-;8628:77;8625:1;8618:88;8725:4;8722:1;8715:15;8749:4;8746:1;8739:15;8766:191;8806:3;8825:20;8843:1;8825:20;:::i;:::-;8820:25;;8859:20;8877:1;8859:20;:::i;:::-;8854:25;;8902:1;8899;8895:9;8888:16;;8923:3;8920:1;8917:10;8914:36;;;8930:18;;:::i;:::-;8914:36;8766:191;;;;:::o;8963:167::-;9103:19;9099:1;9091:6;9087:14;9080:43;8963:167;:::o;9136:366::-;9278:3;9299:67;9363:2;9358:3;9299:67;:::i;:::-;9292:74;;9375:93;9464:3;9375:93;:::i;:::-;9493:2;9488:3;9484:12;9477:19;;9136:366;;;:::o;9508:419::-;9674:4;9712:2;9701:9;9697:18;9689:26;;9761:9;9755:4;9751:20;9747:1;9736:9;9732:17;9725:47;9789:131;9915:4;9789:131;:::i;:::-;9781:139;;9508:419;;;:::o;9933:224::-;10073:34;10069:1;10061:6;10057:14;10050:58;10142:7;10137:2;10129:6;10125:15;10118:32;9933:224;:::o;10163:366::-;10305:3;10326:67;10390:2;10385:3;10326:67;:::i;:::-;10319:74;;10402:93;10491:3;10402:93;:::i;:::-;10520:2;10515:3;10511:12;10504:19;;10163:366;;;:::o;10535:419::-;10701:4;10739:2;10728:9;10724:18;10716:26;;10788:9;10782:4;10778:20;10774:1;10763:9;10759:17;10752:47;10816:131;10942:4;10816:131;:::i;:::-;10808:139;;10535:419;;;:::o;10960:232::-;11100:34;11096:1;11088:6;11084:14;11077:58;11169:15;11164:2;11156:6;11152:15;11145:40;10960:232;:::o;11198:366::-;11340:3;11361:67;11425:2;11420:3;11361:67;:::i;:::-;11354:74;;11437:93;11526:3;11437:93;:::i;:::-;11555:2;11550:3;11546:12;11539:19;;11198:366;;;:::o;11570:419::-;11736:4;11774:2;11763:9;11759:18;11751:26;;11823:9;11817:4;11813:20;11809:1;11798:9;11794:17;11787:47;11851:131;11977:4;11851:131;:::i;:::-;11843:139;;11570:419;;;:::o;11995:410::-;12035:7;12058:20;12076:1;12058:20;:::i;:::-;12053:25;;12092:20;12110:1;12092:20;:::i;:::-;12087:25;;12147:1;12144;12140:9;12169:30;12187:11;12169:30;:::i;:::-;12158:41;;12348:1;12339:7;12335:15;12332:1;12329:22;12309:1;12302:9;12282:83;12259:139;;12378:18;;:::i;:::-;12259:139;12043:362;11995:410;;;;:::o;12411:180::-;12459:77;12456:1;12449:88;12556:4;12553:1;12546:15;12580:4;12577:1;12570:15;12597:185;12637:1;12654:20;12672:1;12654:20;:::i;:::-;12649:25;;12688:20;12706:1;12688:20;:::i;:::-;12683:25;;12727:1;12717:35;;12732:18;;:::i;:::-;12717:35;12774:1;12771;12767:9;12762:14;;12597:185;;;;:::o;12788:239::-;12928:34;12924:1;12916:6;12912:14;12905:58;12997:22;12992:2;12984:6;12980:15;12973:47;12788:239;:::o;13033:366::-;13175:3;13196:67;13260:2;13255:3;13196:67;:::i;:::-;13189:74;;13272:93;13361:3;13272:93;:::i;:::-;13390:2;13385:3;13381:12;13374:19;;13033:366;;;:::o;13405:419::-;13571:4;13609:2;13598:9;13594:18;13586:26;;13658:9;13652:4;13648:20;13644:1;13633:9;13629:17;13622:47;13686:131;13812:4;13686:131;:::i;:::-;13678:139;;13405:419;;;:::o;13830:225::-;13970:34;13966:1;13958:6;13954:14;13947:58;14039:8;14034:2;14026:6;14022:15;14015:33;13830:225;:::o;14061:366::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:419::-;14599:4;14637:2;14626:9;14622:18;14614:26;;14686:9;14680:4;14676:20;14672:1;14661:9;14657:17;14650:47;14714:131;14840:4;14714:131;:::i;:::-;14706:139;;14433:419;;;:::o;14858:223::-;14998:34;14994:1;14986:6;14982:14;14975:58;15067:6;15062:2;15054:6;15050:15;15043:31;14858:223;:::o;15087:366::-;15229:3;15250:67;15314:2;15309:3;15250:67;:::i;:::-;15243:74;;15326:93;15415:3;15326:93;:::i;:::-;15444:2;15439:3;15435:12;15428:19;;15087:366;;;:::o;15459:419::-;15625:4;15663:2;15652:9;15648:18;15640:26;;15712:9;15706:4;15702:20;15698:1;15687:9;15683:17;15676:47;15740:131;15866:4;15740:131;:::i;:::-;15732:139;;15459:419;;;:::o;15884:221::-;16024:34;16020:1;16012:6;16008:14;16001:58;16093:4;16088:2;16080:6;16076:15;16069:29;15884:221;:::o;16111:366::-;16253:3;16274:67;16338:2;16333:3;16274:67;:::i;:::-;16267:74;;16350:93;16439:3;16350:93;:::i;:::-;16468:2;16463:3;16459:12;16452:19;;16111:366;;;:::o;16483:419::-;16649:4;16687:2;16676:9;16672:18;16664:26;;16736:9;16730:4;16726:20;16722:1;16711:9;16707:17;16700:47;16764:131;16890:4;16764:131;:::i;:::-;16756:139;;16483:419;;;:::o;16908:179::-;17048:31;17044:1;17036:6;17032:14;17025:55;16908:179;:::o;17093:366::-;17235:3;17256:67;17320:2;17315:3;17256:67;:::i;:::-;17249:74;;17332:93;17421:3;17332:93;:::i;:::-;17450:2;17445:3;17441:12;17434:19;;17093:366;;;:::o;17465:419::-;17631:4;17669:2;17658:9;17654:18;17646:26;;17718:9;17712:4;17708:20;17704:1;17693:9;17689:17;17682:47;17746:131;17872:4;17746:131;:::i;:::-;17738:139;;17465:419;;;:::o;17890:224::-;18030:34;18026:1;18018:6;18014:14;18007:58;18099:7;18094:2;18086:6;18082:15;18075:32;17890:224;:::o;18120:366::-;18262:3;18283:67;18347:2;18342:3;18283:67;:::i;:::-;18276:74;;18359:93;18448:3;18359:93;:::i;:::-;18477:2;18472:3;18468:12;18461:19;;18120:366;;;:::o;18492:419::-;18658:4;18696:2;18685:9;18681:18;18673:26;;18745:9;18739:4;18735:20;18731:1;18720:9;18716:17;18709:47;18773:131;18899:4;18773:131;:::i;:::-;18765:139;;18492:419;;;:::o;18917:222::-;19057:34;19053:1;19045:6;19041:14;19034:58;19126:5;19121:2;19113:6;19109:15;19102:30;18917:222;:::o;19145:366::-;19287:3;19308:67;19372:2;19367:3;19308:67;:::i;:::-;19301:74;;19384:93;19473:3;19384:93;:::i;:::-;19502:2;19497:3;19493:12;19486:19;;19145:366;;;:::o;19517:419::-;19683:4;19721:2;19710:9;19706:18;19698:26;;19770:9;19764:4;19760:20;19756:1;19745:9;19741:17;19734:47;19798:131;19924:4;19798:131;:::i;:::-;19790:139;;19517:419;;;:::o;19942:172::-;20082:24;20078:1;20070:6;20066:14;20059:48;19942:172;:::o;20120:366::-;20262:3;20283:67;20347:2;20342:3;20283:67;:::i;:::-;20276:74;;20359:93;20448:3;20359:93;:::i;:::-;20477:2;20472:3;20468:12;20461:19;;20120:366;;;:::o;20492:419::-;20658:4;20696:2;20685:9;20681:18;20673:26;;20745:9;20739:4;20735:20;20731:1;20720:9;20716:17;20709:47;20773:131;20899:4;20773:131;:::i;:::-;20765:139;;20492:419;;;:::o;20917:194::-;20957:4;20977:20;20995:1;20977:20;:::i;:::-;20972:25;;21011:20;21029:1;21011:20;:::i;:::-;21006:25;;21055:1;21052;21048:9;21040:17;;21079:1;21073:4;21070:11;21067:37;;;21084:18;;:::i;:::-;21067:37;20917:194;;;;:::o;21117:182::-;21257:34;21253:1;21245:6;21241:14;21234:58;21117:182;:::o;21305:366::-;21447:3;21468:67;21532:2;21527:3;21468:67;:::i;:::-;21461:74;;21544:93;21633:3;21544:93;:::i;:::-;21662:2;21657:3;21653:12;21646:19;;21305:366;;;:::o;21677:419::-;21843:4;21881:2;21870:9;21866:18;21858:26;;21930:9;21924:4;21920:20;21916:1;21905:9;21901:17;21894:47;21958:131;22084:4;21958:131;:::i;:::-;21950:139;;21677:419;;;:::o;22102:225::-;22242:34;22238:1;22230:6;22226:14;22219:58;22311:8;22306:2;22298:6;22294:15;22287:33;22102:225;:::o;22333:366::-;22475:3;22496:67;22560:2;22555:3;22496:67;:::i;:::-;22489:74;;22572:93;22661:3;22572:93;:::i;:::-;22690:2;22685:3;22681:12;22674:19;;22333:366;;;:::o;22705:419::-;22871:4;22909:2;22898:9;22894:18;22886:26;;22958:9;22952:4;22948:20;22944:1;22933:9;22929:17;22922:47;22986:131;23112:4;22986:131;:::i;:::-;22978:139;;22705:419;;;:::o;23130:180::-;23178:77;23175:1;23168:88;23275:4;23272:1;23265:15;23299:4;23296:1;23289:15;23316:180;23364:77;23361:1;23354:88;23461:4;23458:1;23451:15;23485:4;23482:1;23475:15;23502:143;23559:5;23590:6;23584:13;23575:22;;23606:33;23633:5;23606:33;:::i;:::-;23502:143;;;;:::o;23651:351::-;23721:6;23770:2;23758:9;23749:7;23745:23;23741:32;23738:119;;;23776:79;;:::i;:::-;23738:119;23896:1;23921:64;23977:7;23968:6;23957:9;23953:22;23921:64;:::i;:::-;23911:74;;23867:128;23651:351;;;;:::o;24008:85::-;24053:7;24082:5;24071:16;;24008:85;;;:::o;24099:158::-;24157:9;24190:61;24208:42;24217:32;24243:5;24217:32;:::i;:::-;24208:42;:::i;:::-;24190:61;:::i;:::-;24177:74;;24099:158;;;:::o;24263:147::-;24358:45;24397:5;24358:45;:::i;:::-;24353:3;24346:58;24263:147;;:::o;24416:114::-;24483:6;24517:5;24511:12;24501:22;;24416:114;;;:::o;24536:184::-;24635:11;24669:6;24664:3;24657:19;24709:4;24704:3;24700:14;24685:29;;24536:184;;;;:::o;24726:132::-;24793:4;24816:3;24808:11;;24846:4;24841:3;24837:14;24829:22;;24726:132;;;:::o;24864:108::-;24941:24;24959:5;24941:24;:::i;:::-;24936:3;24929:37;24864:108;;:::o;24978:179::-;25047:10;25068:46;25110:3;25102:6;25068:46;:::i;:::-;25146:4;25141:3;25137:14;25123:28;;24978:179;;;;:::o;25163:113::-;25233:4;25265;25260:3;25256:14;25248:22;;25163:113;;;:::o;25312:732::-;25431:3;25460:54;25508:5;25460:54;:::i;:::-;25530:86;25609:6;25604:3;25530:86;:::i;:::-;25523:93;;25640:56;25690:5;25640:56;:::i;:::-;25719:7;25750:1;25735:284;25760:6;25757:1;25754:13;25735:284;;;25836:6;25830:13;25863:63;25922:3;25907:13;25863:63;:::i;:::-;25856:70;;25949:60;26002:6;25949:60;:::i;:::-;25939:70;;25795:224;25782:1;25779;25775:9;25770:14;;25735:284;;;25739:14;26035:3;26028:10;;25436:608;;;25312:732;;;;:::o;26050:831::-;26313:4;26351:3;26340:9;26336:19;26328:27;;26365:71;26433:1;26422:9;26418:17;26409:6;26365:71;:::i;:::-;26446:80;26522:2;26511:9;26507:18;26498:6;26446:80;:::i;:::-;26573:9;26567:4;26563:20;26558:2;26547:9;26543:18;26536:48;26601:108;26704:4;26695:6;26601:108;:::i;:::-;26593:116;;26719:72;26787:2;26776:9;26772:18;26763:6;26719:72;:::i;:::-;26801:73;26869:3;26858:9;26854:19;26845:6;26801:73;:::i;:::-;26050:831;;;;;;;;:::o
Swarm Source
ipfs://73f576b60b27b34dbf9c3e255ba141785d53bede49173b8cfe3e4b7baeecb065
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.