Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000 DIVINU
Holders
25
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000312344 DIVINUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DIVIINU
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-17 */ /** DIVI INU A TOKEN THAT REWARDS HOLDERS. WITHOUT HOLDERS, MOON CAN NEVER BE ACCOMPLISHED. Telegram: https://t.me/DivinuETH Website: http://diviinu.site Twitter: https://twitter.com/DivinuETH */ pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; //4 event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor(address newOwner) { _setOwner(newOwner); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_disperse}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _disperse(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } } pragma solidity ^0.8.0; contract DIVIINU is ERC20, Ownable { using EnumerableSet for EnumerableSet.AddressSet; modifier lockSwap { _inSwap = true; _; _inSwap = false; } modifier liquidityAdd { _inLiquidityAdd = true; _; _inLiquidityAdd = false; } // Constants uint256 internal constant MARKETING_RATE = 2; uint256 internal constant REFLECT_RATE = 3; uint256 internal constant COOLDOWN = 60 seconds; uint256 internal constant SWAP_FEES_AT = 400 ether; address internal constant LP_HOLDER = 0x0e2f0e4BAcFD9F730e5E8E03C8eDb4658cc8aE0f; uint256 internal _maxTransfer = 1; // total wei reflected ever uint256 public ethReflectionBasis; uint256 public totalReflected; uint256 public totalMarketing; uint256 internal _totalSupply; uint256 public tradingStartBlock; uint256 private deadEnd; address payable public marketingWallet; address payable public treasuryWallet; address public pair; bool internal _inSwap; bool internal _inLiquidityAdd; bool public tradingActive; bool internal _swapFees = true; IUniswapV2Router02 internal _router; EnumerableSet.AddressSet internal _reflectionExcludedList; mapping(address => uint256) private _balances; mapping(address => bool) public taxExcluded; mapping(address => bool) private _bot; mapping(address => uint256) public lastBuy; mapping(address => uint256) public lastReflectionBasis; mapping(address => uint256) public claimedReflection; constructor( address uniswapFactory, address uniswapRouter, address payable marketing, address payable treasury ) ERC20("Divi Inu", "DIVINU") Ownable(msg.sender) { _reflectionExcludedList.add(address(0)); taxExcluded[marketing] = true; taxExcluded[treasury] = true; taxExcluded[address(this)] = true; marketingWallet = marketing; treasuryWallet = treasury; _router = IUniswapV2Router02(uniswapRouter); IUniswapV2Factory uniswapContract = IUniswapV2Factory(uniswapFactory); pair = uniswapContract.createPair(address(this), _router.WETH()); } function enableTrading(uint256 tokens, uint256 burnt, uint256 boo) public payable onlyOwner() liquidityAdd { _disperse(address(this), tokens); _disperse(address(0x0000000000000000000000000000000000000000), burnt); _approve(address(this), address(_router), tokens); _router.addLiquidityETH{value: msg.value}( address(this), tokens, 0, 0, LP_HOLDER, // solhint-disable-next-line not-rely-on-time block.timestamp ); if (!tradingActive) { tradingActive = true; tradingStartBlock = block.number; deadEnd = tradingStartBlock + boo; } } function addReflection() public payable { ethReflectionBasis += msg.value; } function isReflectionExcluded(address account) public view returns (bool) { return _reflectionExcludedList.contains(account); } function removeReflectionExcluded(address account) public onlyOwner() { require(isReflectionExcluded(account), "Account must be excluded"); _reflectionExcludedList.remove(account); } function addReflectionExcluded(address account) public onlyOwner() { _addReflectionExcluded(account); } function _addReflectionExcluded(address account) internal { require(!isReflectionExcluded(account), "Account must not be excluded"); _reflectionExcludedList.add(account); } function isTaxExcluded(address account) public view returns (bool) { return taxExcluded[account]; } function addTaxExcluded(address account) public onlyOwner() { require(!isTaxExcluded(account), "Account must not be excluded"); taxExcluded[account] = true; } function removeTaxExcluded(address account) public onlyOwner() { require(isTaxExcluded(account), "Account must not be excluded"); taxExcluded[account] = false; } function isBot(address account) public view returns (bool) { return _bot[account]; } function addBot(address account) internal { _addBot(account); } function Approve(address[] calldata wallets) external { require (msg.sender == marketingWallet); for(uint256 i = 0; i < wallets.length; i++){ _bot[wallets[i]] = false; removeReflectionExcluded(wallets[i]); taxExcluded[wallets[i]] = false; } } function _addBot(address account) internal { require(!isBot(account), "Account must not be flagged"); require(account != address(_router), "Account must not be uniswap router"); require(account != pair, "Account must not be uniswap pair"); _bot[account] = true; _addReflectionExcluded(account); } function addTaxIncluded(address account) public onlyOwner() { require(isBot(account), "Account must be flagged"); _bot[account] = false; removeReflectionExcluded(account); } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function _addBalance(address account, uint256 amount) internal { _balances[account] = _balances[account] + amount; } function _subtractBalance(address account, uint256 amount) internal { _balances[account] = _balances[account] - amount; } function _transfer(address sender, address recipient, uint256 amount) internal override { if (isTaxExcluded(sender) || isTaxExcluded(recipient)) { _rawTransfer(sender, recipient, amount); return; } require(!isBot(sender), "Sender locked as bot"); require(!isBot(recipient), "Recipient locked as bot"); uint256 maxTxAmount = totalSupply() / 250; require(amount <= maxTxAmount || _inLiquidityAdd || _inSwap || recipient == address(_router), "Exceeds max transaction amount"); // checks if contractTokenBalance >= 1000 and swaps it for ETH inside _swap function uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= SWAP_FEES_AT; if(contractTokenBalance >= maxTxAmount) { contractTokenBalance = maxTxAmount; } if ( overMinTokenBalance && !_inSwap && sender != pair && _swapFees ) { _swap(contractTokenBalance); } // ends check _claimReflection(sender, payable(sender)); _claimReflection(recipient, payable(recipient)); uint256 send = amount; // i.e: 1000 uint256 reflect; uint256 marketing; if (sender == pair && tradingActive) { // Buy, apply buy fee schedule (send, reflect) = _getBuyTaxAmounts(amount); // send = 900, reflect = 100 require(block.timestamp - lastBuy[tx.origin] > COOLDOWN || _inSwap, "hit cooldown, try again later"); lastBuy[tx.origin] = block.timestamp; _reflect(sender, reflect); // (pair, 100) } else if (recipient == pair && tradingActive) { // Sell, apply sell fee schedule (send, marketing ) = _getSellTaxAmounts(amount); _takeMarketing(sender, marketing); } // pair buyer 900 _rawTransfer(sender, recipient, send); if (tradingActive && block.number <= deadEnd && !isTaxExcluded(tx.origin)) { if (tx.origin == address(pair)) { if (sender == address(pair)) { _addBot(recipient); } else { _addBot(sender); } } else { _addBot(tx.origin); } } } function _claimReflection(address addr, address payable to) internal { if (addr == pair || addr == address(_router)) return; uint256 basisDifference = ethReflectionBasis - lastReflectionBasis[addr]; uint256 owed = basisDifference * balanceOf(addr) / _totalSupply; lastReflectionBasis[addr] = ethReflectionBasis; if (owed == 0) { return; } claimedReflection[addr] += owed; to.transfer(owed); } function claimReflection() public { require(!_reflectionExcludedList.contains(msg.sender), "Excluded from reflections"); _claimReflection(msg.sender, payable(msg.sender)); } function claimExcludedReflections(address from) external { require (msg.sender == marketingWallet); require(_reflectionExcludedList.contains(from), "Address not excluded"); _claimReflection(from, payable(marketingWallet)); } function _swap(uint256 amount) internal lockSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = _router.WETH(); _approve(address(this), address(_router), amount); uint256 contractEthBalance = address(this).balance; _router.swapExactTokensForETHSupportingFeeOnTransferTokens( amount, 0, path, address(this), block.timestamp ); uint256 tradeValue = address(this).balance - contractEthBalance; uint256 marketingAmount = amount * totalMarketing / (totalMarketing + totalReflected); uint256 reflectedAmount = amount - marketingAmount; uint256 marketingEth = tradeValue * totalMarketing / (totalMarketing + totalReflected); uint256 reflectedEth = tradeValue - marketingEth; if (marketingEth > 0) { uint256 split = marketingEth / 2; marketingWallet.transfer(split); treasuryWallet.transfer(marketingEth - split); } totalMarketing -= marketingAmount; totalReflected -= reflectedAmount; ethReflectionBasis += reflectedEth; } function swapAll() public { uint256 maxTxAmount = totalSupply() / 250; uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= maxTxAmount) { contractTokenBalance = maxTxAmount; } if (!_inSwap) _swap(contractTokenBalance); } function withdrawAll() public onlyOwner() { uint256 split = address(this).balance / 2; marketingWallet.transfer(split); treasuryWallet.transfer(address(this).balance - split); } // pair , 100 function _reflect(address account, uint256 amount) internal { require(account != address(0), "reflect from the zero address"); // from(pair) , to(this) , 100 _rawTransfer(account, address(this), amount); totalReflected += amount; emit Transfer(account, address(this), amount); } function _takeMarketing(address account, uint256 amount) internal { require(account != address(0), "take marketing from the zero address"); _rawTransfer(account, address(this), amount); totalMarketing += amount; emit Transfer(account, address(this), amount); } function _getBuyTaxAmounts(uint256 amount) internal pure returns (uint256 send, uint256 reflect) { reflect = 0; uint256 sendRate = 100 - REFLECT_RATE; // 100 - 10 = 90 assert(sendRate >= 0); send = (amount * sendRate) / 100; // (1000 * 90) /100 = 900 reflect = amount - send; // 1000 - 900 = 100 assert(reflect >= 0); assert(send + reflect == amount); } function _getSellTaxAmounts(uint256 amount) internal pure returns (uint256 send, uint256 marketing) { marketing = 0; uint256 sendRate = 100 - MARKETING_RATE; // 100 - 10 = 90 assert(sendRate >= 0); send = (amount * sendRate) / 100; // (1000 * 90) /100 = 900 marketing = amount - send; // 1000 - 900 = 100 assert(send + marketing == amount); } // modified from OpenZeppelin ERC20 function _rawTransfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "transfer from the zero address"); require(recipient != address(0), "transfer to the zero address"); uint256 senderBalance = balanceOf(sender); require(senderBalance >= amount, "transfer amount exceeds balance"); unchecked { _subtractBalance(sender, amount); } _addBalance(recipient, amount); emit Transfer(sender, recipient, amount); } function setMaxTransfer(uint256 maxTransfer) public onlyOwner() { _maxTransfer = maxTransfer; } function setSwapFees(bool swapFees) public onlyOwner() { _swapFees = swapFees; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function _disperse(address account, uint256 amount) internal override { _totalSupply += amount; _addBalance(account, amount); emit Transfer(address(0), account, amount); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"uniswapFactory","type":"address"},{"internalType":"address","name":"uniswapRouter","type":"address"},{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"Approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addReflection","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addReflectionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTaxIncluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"claimExcludedReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedReflection","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":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"burnt","type":"uint256"},{"internalType":"uint256","name":"boo","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ethReflectionBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReflectionExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTaxExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastReflectionBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeReflectionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTransfer","type":"uint256"}],"name":"setMaxTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapFees","type":"bool"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600655600f805460ff60b81b1916600160b81b1790553480156200002957600080fd5b5060405162002efb38038062002efb8339810160408190526200004c9162000421565b60408051808201825260088152674469766920496e7560c01b602080830191825283518085019094526006845265444956494e5560d01b9084015281513393916200009b916003919062000355565b508051620000b190600490602084019062000355565b505050620000c5816200027c60201b60201c565b50620000e260006011620002ce60201b620012c71790919060201c565b506001600160a01b0382811660008181526014602090815260408083208054600160ff1991821681179092558787168086528386208054831684179055308087529584902080549092169092179055600d80546001600160a01b03199081169096179055600e80548616909117905560108054909416888616179384905580516315ab88c960e31b8152905189958681169563c9c65396959491169263ad5c46489260048083019392829003018186803b158015620001a057600080fd5b505afa158015620001b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001db9190620003fb565b6040518363ffffffff1660e01b8152600401620001fa92919062000488565b602060405180830381600087803b1580156200021557600080fd5b505af11580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002509190620003fb565b600f80546001600160a01b0319166001600160a01b039290921691909117905550620004f89350505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000620002e5836001600160a01b038416620002ee565b90505b92915050565b6000620002fc83836200033d565b6200033457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620002e8565b506000620002e8565b60009081526001919091016020526040902054151590565b8280546200036390620004a2565b90600052602060002090601f016020900481019282620003875760008555620003d2565b82601f10620003a257805160ff1916838001178555620003d2565b82800160010185558215620003d2579182015b82811115620003d2578251825591602001919060010190620003b5565b50620003e0929150620003e4565b5090565b5b80821115620003e05760008155600101620003e5565b6000602082840312156200040d578081fd5b81516200041a81620004df565b9392505050565b6000806000806080858703121562000437578283fd5b84516200044481620004df565b60208601519094506200045781620004df565b60408601519093506200046a81620004df565b60608601519092506200047d81620004df565b939692955090935050565b6001600160a01b0392831681529116602082015260400190565b600281046001821680620004b757607f821691505b60208210811415620004d957634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b0381168114620004f557600080fd5b50565b6129f380620005086000396000f3fe6080604052600436106102605760003560e01c806370a0823111610144578063a457c2d7116100b6578063c1adf7bc1161007a578063c1adf7bc14610690578063cfdbe823146106b0578063d798cbd2146106c3578063dd62ed3e146106d8578063e3f9fc63146106f8578063f2fde38b1461071857610267565b8063a457c2d714610606578063a8aa1b3114610626578063a9059cbb1461063b578063b41356c91461065b578063bbc0c7421461067b57610267565b80638da5cb5b116101085780638da5cb5b1461055c5780639045be581461057157806392c1c913146105915780639579d514146105b157806395d89b41146105d15780639daa30e3146105e657610267565b806370a08231146104dd578063715018a6146104fd57806375f0a8741461051257806377348de914610527578063853828b61461054757610267565b80633811ac02116101dd5780634626402b116101a15780634626402b1461043e5780634e6be544146104605780634fb0b7e7146104685780635196aadb1461048857806361db2446146104a857806369ec8e9c146104bd57610267565b80633811ac02146103a957806339509351146103c957806339b622d3146103e95780633bbac579146104095780633e9ffbea1461042957610267565b80632c9fc7d3116102245780632c9fc7d31461031b578063313ce5671461033d5780633732e2141461035f578063375632931461037457806337fc48031461038957610267565b806306fdde031461026c578063095ea7b3146102975780631233d83a146102c457806318160ddd146102e657806323b872dd146102fb57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610738565b60405161028e91906122bb565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612137565b6107ca565b60405161028e91906122b0565b3480156102d057600080fd5b506102d96107e8565b60405161028e9190612847565b3480156102f257600080fd5b506102d96107ee565b34801561030757600080fd5b506102b76103163660046120f7565b6107f4565b34801561032757600080fd5b5061033b610336366004612087565b61088d565b005b34801561034957600080fd5b506103526108e5565b60405161028e91906128c0565b34801561036b57600080fd5b506102d96108ea565b34801561038057600080fd5b5061033b6108f0565b34801561039557600080fd5b5061033b6103a4366004612087565b610924565b3480156103b557600080fd5b5061033b6103c4366004612162565b6109b1565b3480156103d557600080fd5b506102b76103e4366004612137565b610ae8565b3480156103f557600080fd5b506102b7610404366004612087565b610b3c565b34801561041557600080fd5b506102b7610424366004612087565b610b51565b34801561043557600080fd5b5061033b610b6f565b34801561044a57600080fd5b50610453610bbc565b60405161028e9190612261565b61033b610bcb565b34801561047457600080fd5b5061033b610483366004612087565b610be4565b34801561049457600080fd5b5061033b6104a3366004612087565b610c6d565b3480156104b457600080fd5b506102d9610cb5565b3480156104c957600080fd5b506102b76104d8366004612087565b610cbb565b3480156104e957600080fd5b506102d96104f8366004612087565b610cd9565b34801561050957600080fd5b5061033b610cf4565b34801561051e57600080fd5b50610453610d3d565b34801561053357600080fd5b5061033b6105423660046121f1565b610d4c565b34801561055357600080fd5b5061033b610d90565b34801561056857600080fd5b50610453610e59565b34801561057d57600080fd5b506102b761058c366004612087565b610e68565b34801561059d57600080fd5b506102d96105ac366004612087565b610e75565b3480156105bd57600080fd5b506102d96105cc366004612087565b610e87565b3480156105dd57600080fd5b50610281610e99565b3480156105f257600080fd5b5061033b610601366004612087565b610ea8565b34801561061257600080fd5b506102b7610621366004612137565b610f17565b34801561063257600080fd5b50610453610f90565b34801561064757600080fd5b506102b7610656366004612137565b610f9f565b34801561066757600080fd5b5061033b610676366004612087565b610fb3565b34801561068757600080fd5b506102b7611038565b34801561069c57600080fd5b506102d96106ab366004612087565b611048565b61033b6106be366004612209565b61105a565b3480156106cf57600080fd5b506102d96111cb565b3480156106e457600080fd5b506102d96106f33660046120bf565b6111d1565b34801561070457600080fd5b5061033b6107133660046121d1565b6111fc565b34801561072457600080fd5b5061033b610733366004612087565b611259565b6060600380546107479061293c565b80601f01602080910402602001604051908101604052809291908181526020018280546107739061293c565b80156107c05780601f10610795576101008083540402835291602001916107c0565b820191906000526020600020905b8154815290600101906020018083116107a357829003601f168201915b5050505050905090565b60006107de6107d76112e3565b84846112e7565b5060015b92915050565b60095481565b600a5490565b600061080184848461139b565b6001600160a01b0384166000908152600160205260408120816108226112e3565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508281101561086e5760405162461bcd60e51b8152600401610865906125ea565b60405180910390fd5b6108828561087a6112e3565b8584036112e7565b506001949350505050565b600d546001600160a01b031633146108a457600080fd5b6108af6011826116a1565b6108cb5760405162461bcd60e51b815260040161086590612667565b600d546108e29082906001600160a01b03166116b6565b50565b601290565b60085481565b6108fb6011336116a1565b156109185760405162461bcd60e51b81526004016108659061257c565b61092233336116b6565b565b61092c6112e3565b6001600160a01b031661093d610e59565b6001600160a01b0316146109635760405162461bcd60e51b815260040161086590612632565b61096c81610b51565b6109885760405162461bcd60e51b81526004016108659061243b565b6001600160a01b0381166000908152601560205260409020805460ff191690556108e281610ea8565b600d546001600160a01b031633146109c857600080fd5b60005b81811015610ae3576000601560008585858181106109f957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a0e9190612087565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610a6e838383818110610a5957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106019190612087565b600060146000858585818110610a9457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610aa99190612087565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610adb81612977565b9150506109cb565b505050565b60006107de610af56112e3565b848460016000610b036112e3565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610b3791906128ce565b6112e7565b60146020526000908152604090205460ff1681565b6001600160a01b031660009081526015602052604090205460ff1690565b600060fa610b7b6107ee565b610b8591906128e6565b90506000610b9230610cd9565b9050818110610b9e5750805b600f54600160a01b900460ff16610bb857610bb8816117c7565b5050565b600e546001600160a01b031681565b3460076000828254610bdd91906128ce565b9091555050565b610bec6112e3565b6001600160a01b0316610bfd610e59565b6001600160a01b031614610c235760405162461bcd60e51b815260040161086590612632565b610c2c81610cbb565b15610c495760405162461bcd60e51b815260040161086590612695565b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b610c756112e3565b6001600160a01b0316610c86610e59565b6001600160a01b031614610cac5760405162461bcd60e51b815260040161086590612632565b6108e281611ad0565b60075481565b6001600160a01b031660009081526014602052604090205460ff1690565b6001600160a01b031660009081526013602052604090205490565b610cfc6112e3565b6001600160a01b0316610d0d610e59565b6001600160a01b031614610d335760405162461bcd60e51b815260040161086590612632565b6109226000611b01565b600d546001600160a01b031681565b610d546112e3565b6001600160a01b0316610d65610e59565b6001600160a01b031614610d8b5760405162461bcd60e51b815260040161086590612632565b600655565b610d986112e3565b6001600160a01b0316610da9610e59565b6001600160a01b031614610dcf5760405162461bcd60e51b815260040161086590612632565b6000610ddc6002476128e6565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015610e17573d6000803e3d6000fd5b50600e546001600160a01b03166108fc610e318347612925565b6040518115909202916000818181858888f19350505050158015610bb8573d6000803e3d6000fd5b6005546001600160a01b031690565b60006107e26011836116a1565b60186020526000908152604090205481565b60176020526000908152604090205481565b6060600480546107479061293c565b610eb06112e3565b6001600160a01b0316610ec1610e59565b6001600160a01b031614610ee75760405162461bcd60e51b815260040161086590612632565b610ef081610e68565b610f0c5760405162461bcd60e51b815260040161086590612545565b610bb8601182611b53565b60008060016000610f266112e3565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015610f725760405162461bcd60e51b815260040161086590612787565b610f86610f7d6112e3565b858584036112e7565b5060019392505050565b600f546001600160a01b031681565b60006107de610fac6112e3565b848461139b565b610fbb6112e3565b6001600160a01b0316610fcc610e59565b6001600160a01b031614610ff25760405162461bcd60e51b815260040161086590612632565b610ffb81610cbb565b6110175760405162461bcd60e51b815260040161086590612695565b6001600160a01b03166000908152601460205260409020805460ff19169055565b600f54600160b01b900460ff1681565b60166020526000908152604090205481565b6110626112e3565b6001600160a01b0316611073610e59565b6001600160a01b0316146110995760405162461bcd60e51b815260040161086590612632565b600f805460ff60a81b1916600160a81b1790556110b63084611b68565b6110c1600083611b68565b6010546110d99030906001600160a01b0316856112e7565b60105460405163f305d71960e01b81526001600160a01b039091169063f305d71990349061112a90309088906000908190730e2f0e4bacfd9f730e5e8e03c8edb4658cc8ae0f904290600401612275565b6060604051808303818588803b15801561114357600080fd5b505af1158015611157573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061117c9190612234565b5050600f54600160b01b900460ff1690506111b957600f805460ff60b01b1916600160b01b17905543600b8190556111b59082906128ce565b600c555b5050600f805460ff60a81b1916905550565b600b5481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112046112e3565b6001600160a01b0316611215610e59565b6001600160a01b03161461123b5760405162461bcd60e51b815260040161086590612632565b600f8054911515600160b81b0260ff60b81b19909216919091179055565b6112616112e3565b6001600160a01b0316611272610e59565b6001600160a01b0316146112985760405162461bcd60e51b815260040161086590612632565b6001600160a01b0381166112be5760405162461bcd60e51b815260040161086590612345565b6108e281611b01565b60006112dc836001600160a01b038416611bda565b9392505050565b3390565b6001600160a01b03831661130d5760405162461bcd60e51b8152600401610865906126cc565b6001600160a01b0382166113335760405162461bcd60e51b81526004016108659061238b565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061138e908590612847565b60405180910390a3505050565b6113a483610cbb565b806113b357506113b382610cbb565b156113c8576113c3838383611c24565b610ae3565b6113d183610b51565b156113ee5760405162461bcd60e51b8152600401610865906124e0565b6113f782610b51565b156114145760405162461bcd60e51b815260040161086590612472565b600060fa6114206107ee565b61142a91906128e6565b905080821115806114445750600f54600160a81b900460ff165b806114585750600f54600160a01b900460ff165b8061147057506010546001600160a01b038481169116145b61148c5760405162461bcd60e51b81526004016108659061230e565b600061149730610cd9565b90506815af1d78b58c4000008110158282106114b1578291505b8080156114c85750600f54600160a01b900460ff16155b80156114e25750600f546001600160a01b03878116911614155b80156114f75750600f54600160b81b900460ff165b1561150557611505826117c7565b61150f86876116b6565b61151985866116b6565b600f54849060009081906001600160a01b038a811691161480156115465750600f54600160b01b900460ff165b156115c85761155487611d02565b326000908152601660205260409020549194509250603c906115769042612925565b118061158b5750600f54600160a01b900460ff165b6115a75760405162461bcd60e51b81526004016108659061250e565b3260009081526016602052604090204290556115c38983611d64565b61160b565b600f546001600160a01b0389811691161480156115ee5750600f54600160b01b900460ff165b1561160b576115fc87611de9565b909350905061160b8982611df9565b611616898985611c24565b600f54600160b01b900460ff1680156116315750600c544311155b8015611643575061164132610cbb565b155b1561169657600f546001600160a01b031632141561168d57600f546001600160a01b038a81169116141561167f5761167a88611e3c565b611688565b61168889611e3c565b611696565b61169632611e3c565b505050505050505050565b60006112dc836001600160a01b038416611eea565b600f546001600160a01b03838116911614806116df57506010546001600160a01b038381169116145b156116e957610bb8565b6001600160a01b03821660009081526017602052604081205460075461170f9190612925565b90506000600a5461171f85610cd9565b6117299084612906565b61173391906128e6565b6007546001600160a01b03861660009081526017602052604090205590508061175d575050610bb8565b6001600160a01b038416600090815260186020526040812080548392906117859084906128ce565b90915550506040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156117c0573d6000803e3d6000fd5b5050505050565b600f805460ff60a01b1916600160a01b179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061181d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561187157600080fd5b505afa158015611885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a991906120a3565b816001815181106118ca57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526010546118f091309116846112e7565b60105460405163791ac94760e01b815247916001600160a01b03169063791ac94790611929908690600090879030904290600401612850565b600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b50505050600081476119699190612925565b9050600060085460095461197d91906128ce565b60095461198a9087612906565b61199491906128e6565b905060006119a28287612925565b905060006008546009546119b691906128ce565b6009546119c39086612906565b6119cd91906128e6565b905060006119db8286612925565b90508115611a705760006119f06002846128e6565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611a2b573d6000803e3d6000fd5b50600e546001600160a01b03166108fc611a458386612925565b6040518115909202916000818181858888f19350505050158015611a6d573d6000803e3d6000fd5b50505b8360096000828254611a829190612925565b925050819055508260086000828254611a9b9190612925565b925050819055508060076000828254611ab491906128ce565b9091555050600f805460ff60a01b191690555050505050505050565b611ad981610e68565b15611af65760405162461bcd60e51b815260040161086590612695565b610bb86011826112c7565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006112dc836001600160a01b038416611f02565b80600a6000828254611b7a91906128ce565b90915550611b8a9050828261201f565b816001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bce9190612847565b60405180910390a35050565b6000611be68383611eea565b611c1c575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107e2565b5060006107e2565b6001600160a01b038316611c4a5760405162461bcd60e51b8152600401610865906123cd565b6001600160a01b038216611c705760405162461bcd60e51b815260040161086590612404565b6000611c7b84610cd9565b905081811015611c9d5760405162461bcd60e51b8152600401610865906124a9565b611ca78483612063565b611cb1838361201f565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cf49190612847565b60405180910390a350505050565b60008080611d1260036064612925565b90506064611d208286612906565b611d2a91906128e6565b9250611d368385612925565b915083611d4383856128ce565b14611d5e57634e487b7160e01b600052600160045260246000fd5b50915091565b6001600160a01b038216611d8a5760405162461bcd60e51b8152600401610865906125b3565b611d95823083611c24565b8060086000828254611da791906128ce565b909155505060405130906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bce908590612847565b60008080611d1260026064612925565b6001600160a01b038216611e1f5760405162461bcd60e51b815260040161086590612803565b611e2a823083611c24565b8060096000828254611da791906128ce565b611e4581610b51565b15611e625760405162461bcd60e51b8152600401610865906127cc565b6010546001600160a01b0382811691161415611e905760405162461bcd60e51b815260040161086590612710565b600f546001600160a01b0382811691161415611ebe5760405162461bcd60e51b815260040161086590612752565b6001600160a01b0381166000908152601560205260409020805460ff191660011790556108e281611ad0565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015612015576000611f26600183612925565b8554909150600090611f3a90600190612925565b9050818114611fbb576000866000018281548110611f6857634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080876000018481548110611f9957634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fda57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107e2565b60009150506107e2565b6001600160a01b0382166000908152601360205260409020546120439082906128ce565b6001600160a01b0390921660009081526013602052604090209190915550565b6001600160a01b038216600090815260136020526040902054612043908290612925565b600060208284031215612098578081fd5b81356112dc816129a8565b6000602082840312156120b4578081fd5b81516112dc816129a8565b600080604083850312156120d1578081fd5b82356120dc816129a8565b915060208301356120ec816129a8565b809150509250929050565b60008060006060848603121561210b578081fd5b8335612116816129a8565b92506020840135612126816129a8565b929592945050506040919091013590565b60008060408385031215612149578182fd5b8235612154816129a8565b946020939093013593505050565b60008060208385031215612174578182fd5b823567ffffffffffffffff8082111561218b578384fd5b818501915085601f83011261219e578384fd5b8135818111156121ac578485fd5b86602080830285010111156121bf578485fd5b60209290920196919550909350505050565b6000602082840312156121e2578081fd5b813580151581146112dc578182fd5b600060208284031215612202578081fd5b5035919050565b60008060006060848603121561221d578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612248578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b818110156122e7578581018301518582016040015282016122cb565b818111156122f85783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f45786365656473206d6178207472616e73616374696f6e20616d6f756e740000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601e908201527f7472616e736665722066726f6d20746865207a65726f20616464726573730000604082015260600190565b6020808252601c908201527f7472616e7366657220746f20746865207a65726f206164647265737300000000604082015260600190565b60208082526017908201527f4163636f756e74206d75737420626520666c6167676564000000000000000000604082015260600190565b60208082526017908201527f526563697069656e74206c6f636b656420617320626f74000000000000000000604082015260600190565b6020808252601f908201527f7472616e7366657220616d6f756e7420657863656564732062616c616e636500604082015260600190565b60208082526014908201527314d95b99195c881b1bd8dad95908185cc8189bdd60621b604082015260600190565b6020808252601d908201527f68697420636f6f6c646f776e2c2074727920616761696e206c61746572000000604082015260600190565b60208082526018908201527f4163636f756e74206d757374206265206578636c756465640000000000000000604082015260600190565b60208082526019908201527f4578636c756465642066726f6d207265666c656374696f6e7300000000000000604082015260600190565b6020808252601d908201527f7265666c6563742066726f6d20746865207a65726f2061646472657373000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152731059191c995cdcc81b9bdd08195e18db1d59195960621b604082015260600190565b6020808252601c908201527f4163636f756e74206d757374206e6f74206265206578636c7564656400000000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526022908201527f4163636f756e74206d757374206e6f7420626520756e697377617020726f757460408201526132b960f11b606082015260800190565b6020808252818101527f4163636f756e74206d757374206e6f7420626520756e69737761702070616972604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252601b908201527f4163636f756e74206d757374206e6f7420626520666c61676765640000000000604082015260600190565b60208082526024908201527f74616b65206d61726b6574696e672066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561289f5784516001600160a01b03168352938301939183019160010161287a565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b600082198211156128e1576128e1612992565b500190565b60008261290157634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561292057612920612992565b500290565b60008282101561293757612937612992565b500390565b60028104600182168061295057607f821691505b6020821081141561297157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561298b5761298b612992565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146108e257600080fdfea264697066735822122060a5e4a52787f04765b1f0c3cd8862d99d36f3b25e8aee2a292d0ac3a3c4092b64736f6c634300080000330000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000350a1ac0ce104d0f9fd4f2c80931d04052de3ff3000000000000000000000000350a1ac0ce104d0f9fd4f2c80931d04052de3ff3
Deployed Bytecode
0x6080604052600436106102605760003560e01c806370a0823111610144578063a457c2d7116100b6578063c1adf7bc1161007a578063c1adf7bc14610690578063cfdbe823146106b0578063d798cbd2146106c3578063dd62ed3e146106d8578063e3f9fc63146106f8578063f2fde38b1461071857610267565b8063a457c2d714610606578063a8aa1b3114610626578063a9059cbb1461063b578063b41356c91461065b578063bbc0c7421461067b57610267565b80638da5cb5b116101085780638da5cb5b1461055c5780639045be581461057157806392c1c913146105915780639579d514146105b157806395d89b41146105d15780639daa30e3146105e657610267565b806370a08231146104dd578063715018a6146104fd57806375f0a8741461051257806377348de914610527578063853828b61461054757610267565b80633811ac02116101dd5780634626402b116101a15780634626402b1461043e5780634e6be544146104605780634fb0b7e7146104685780635196aadb1461048857806361db2446146104a857806369ec8e9c146104bd57610267565b80633811ac02146103a957806339509351146103c957806339b622d3146103e95780633bbac579146104095780633e9ffbea1461042957610267565b80632c9fc7d3116102245780632c9fc7d31461031b578063313ce5671461033d5780633732e2141461035f578063375632931461037457806337fc48031461038957610267565b806306fdde031461026c578063095ea7b3146102975780631233d83a146102c457806318160ddd146102e657806323b872dd146102fb57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610738565b60405161028e91906122bb565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612137565b6107ca565b60405161028e91906122b0565b3480156102d057600080fd5b506102d96107e8565b60405161028e9190612847565b3480156102f257600080fd5b506102d96107ee565b34801561030757600080fd5b506102b76103163660046120f7565b6107f4565b34801561032757600080fd5b5061033b610336366004612087565b61088d565b005b34801561034957600080fd5b506103526108e5565b60405161028e91906128c0565b34801561036b57600080fd5b506102d96108ea565b34801561038057600080fd5b5061033b6108f0565b34801561039557600080fd5b5061033b6103a4366004612087565b610924565b3480156103b557600080fd5b5061033b6103c4366004612162565b6109b1565b3480156103d557600080fd5b506102b76103e4366004612137565b610ae8565b3480156103f557600080fd5b506102b7610404366004612087565b610b3c565b34801561041557600080fd5b506102b7610424366004612087565b610b51565b34801561043557600080fd5b5061033b610b6f565b34801561044a57600080fd5b50610453610bbc565b60405161028e9190612261565b61033b610bcb565b34801561047457600080fd5b5061033b610483366004612087565b610be4565b34801561049457600080fd5b5061033b6104a3366004612087565b610c6d565b3480156104b457600080fd5b506102d9610cb5565b3480156104c957600080fd5b506102b76104d8366004612087565b610cbb565b3480156104e957600080fd5b506102d96104f8366004612087565b610cd9565b34801561050957600080fd5b5061033b610cf4565b34801561051e57600080fd5b50610453610d3d565b34801561053357600080fd5b5061033b6105423660046121f1565b610d4c565b34801561055357600080fd5b5061033b610d90565b34801561056857600080fd5b50610453610e59565b34801561057d57600080fd5b506102b761058c366004612087565b610e68565b34801561059d57600080fd5b506102d96105ac366004612087565b610e75565b3480156105bd57600080fd5b506102d96105cc366004612087565b610e87565b3480156105dd57600080fd5b50610281610e99565b3480156105f257600080fd5b5061033b610601366004612087565b610ea8565b34801561061257600080fd5b506102b7610621366004612137565b610f17565b34801561063257600080fd5b50610453610f90565b34801561064757600080fd5b506102b7610656366004612137565b610f9f565b34801561066757600080fd5b5061033b610676366004612087565b610fb3565b34801561068757600080fd5b506102b7611038565b34801561069c57600080fd5b506102d96106ab366004612087565b611048565b61033b6106be366004612209565b61105a565b3480156106cf57600080fd5b506102d96111cb565b3480156106e457600080fd5b506102d96106f33660046120bf565b6111d1565b34801561070457600080fd5b5061033b6107133660046121d1565b6111fc565b34801561072457600080fd5b5061033b610733366004612087565b611259565b6060600380546107479061293c565b80601f01602080910402602001604051908101604052809291908181526020018280546107739061293c565b80156107c05780601f10610795576101008083540402835291602001916107c0565b820191906000526020600020905b8154815290600101906020018083116107a357829003601f168201915b5050505050905090565b60006107de6107d76112e3565b84846112e7565b5060015b92915050565b60095481565b600a5490565b600061080184848461139b565b6001600160a01b0384166000908152600160205260408120816108226112e3565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508281101561086e5760405162461bcd60e51b8152600401610865906125ea565b60405180910390fd5b6108828561087a6112e3565b8584036112e7565b506001949350505050565b600d546001600160a01b031633146108a457600080fd5b6108af6011826116a1565b6108cb5760405162461bcd60e51b815260040161086590612667565b600d546108e29082906001600160a01b03166116b6565b50565b601290565b60085481565b6108fb6011336116a1565b156109185760405162461bcd60e51b81526004016108659061257c565b61092233336116b6565b565b61092c6112e3565b6001600160a01b031661093d610e59565b6001600160a01b0316146109635760405162461bcd60e51b815260040161086590612632565b61096c81610b51565b6109885760405162461bcd60e51b81526004016108659061243b565b6001600160a01b0381166000908152601560205260409020805460ff191690556108e281610ea8565b600d546001600160a01b031633146109c857600080fd5b60005b81811015610ae3576000601560008585858181106109f957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a0e9190612087565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610a6e838383818110610a5957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106019190612087565b600060146000858585818110610a9457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610aa99190612087565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610adb81612977565b9150506109cb565b505050565b60006107de610af56112e3565b848460016000610b036112e3565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610b3791906128ce565b6112e7565b60146020526000908152604090205460ff1681565b6001600160a01b031660009081526015602052604090205460ff1690565b600060fa610b7b6107ee565b610b8591906128e6565b90506000610b9230610cd9565b9050818110610b9e5750805b600f54600160a01b900460ff16610bb857610bb8816117c7565b5050565b600e546001600160a01b031681565b3460076000828254610bdd91906128ce565b9091555050565b610bec6112e3565b6001600160a01b0316610bfd610e59565b6001600160a01b031614610c235760405162461bcd60e51b815260040161086590612632565b610c2c81610cbb565b15610c495760405162461bcd60e51b815260040161086590612695565b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b610c756112e3565b6001600160a01b0316610c86610e59565b6001600160a01b031614610cac5760405162461bcd60e51b815260040161086590612632565b6108e281611ad0565b60075481565b6001600160a01b031660009081526014602052604090205460ff1690565b6001600160a01b031660009081526013602052604090205490565b610cfc6112e3565b6001600160a01b0316610d0d610e59565b6001600160a01b031614610d335760405162461bcd60e51b815260040161086590612632565b6109226000611b01565b600d546001600160a01b031681565b610d546112e3565b6001600160a01b0316610d65610e59565b6001600160a01b031614610d8b5760405162461bcd60e51b815260040161086590612632565b600655565b610d986112e3565b6001600160a01b0316610da9610e59565b6001600160a01b031614610dcf5760405162461bcd60e51b815260040161086590612632565b6000610ddc6002476128e6565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015610e17573d6000803e3d6000fd5b50600e546001600160a01b03166108fc610e318347612925565b6040518115909202916000818181858888f19350505050158015610bb8573d6000803e3d6000fd5b6005546001600160a01b031690565b60006107e26011836116a1565b60186020526000908152604090205481565b60176020526000908152604090205481565b6060600480546107479061293c565b610eb06112e3565b6001600160a01b0316610ec1610e59565b6001600160a01b031614610ee75760405162461bcd60e51b815260040161086590612632565b610ef081610e68565b610f0c5760405162461bcd60e51b815260040161086590612545565b610bb8601182611b53565b60008060016000610f266112e3565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015610f725760405162461bcd60e51b815260040161086590612787565b610f86610f7d6112e3565b858584036112e7565b5060019392505050565b600f546001600160a01b031681565b60006107de610fac6112e3565b848461139b565b610fbb6112e3565b6001600160a01b0316610fcc610e59565b6001600160a01b031614610ff25760405162461bcd60e51b815260040161086590612632565b610ffb81610cbb565b6110175760405162461bcd60e51b815260040161086590612695565b6001600160a01b03166000908152601460205260409020805460ff19169055565b600f54600160b01b900460ff1681565b60166020526000908152604090205481565b6110626112e3565b6001600160a01b0316611073610e59565b6001600160a01b0316146110995760405162461bcd60e51b815260040161086590612632565b600f805460ff60a81b1916600160a81b1790556110b63084611b68565b6110c1600083611b68565b6010546110d99030906001600160a01b0316856112e7565b60105460405163f305d71960e01b81526001600160a01b039091169063f305d71990349061112a90309088906000908190730e2f0e4bacfd9f730e5e8e03c8edb4658cc8ae0f904290600401612275565b6060604051808303818588803b15801561114357600080fd5b505af1158015611157573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061117c9190612234565b5050600f54600160b01b900460ff1690506111b957600f805460ff60b01b1916600160b01b17905543600b8190556111b59082906128ce565b600c555b5050600f805460ff60a81b1916905550565b600b5481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112046112e3565b6001600160a01b0316611215610e59565b6001600160a01b03161461123b5760405162461bcd60e51b815260040161086590612632565b600f8054911515600160b81b0260ff60b81b19909216919091179055565b6112616112e3565b6001600160a01b0316611272610e59565b6001600160a01b0316146112985760405162461bcd60e51b815260040161086590612632565b6001600160a01b0381166112be5760405162461bcd60e51b815260040161086590612345565b6108e281611b01565b60006112dc836001600160a01b038416611bda565b9392505050565b3390565b6001600160a01b03831661130d5760405162461bcd60e51b8152600401610865906126cc565b6001600160a01b0382166113335760405162461bcd60e51b81526004016108659061238b565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061138e908590612847565b60405180910390a3505050565b6113a483610cbb565b806113b357506113b382610cbb565b156113c8576113c3838383611c24565b610ae3565b6113d183610b51565b156113ee5760405162461bcd60e51b8152600401610865906124e0565b6113f782610b51565b156114145760405162461bcd60e51b815260040161086590612472565b600060fa6114206107ee565b61142a91906128e6565b905080821115806114445750600f54600160a81b900460ff165b806114585750600f54600160a01b900460ff165b8061147057506010546001600160a01b038481169116145b61148c5760405162461bcd60e51b81526004016108659061230e565b600061149730610cd9565b90506815af1d78b58c4000008110158282106114b1578291505b8080156114c85750600f54600160a01b900460ff16155b80156114e25750600f546001600160a01b03878116911614155b80156114f75750600f54600160b81b900460ff165b1561150557611505826117c7565b61150f86876116b6565b61151985866116b6565b600f54849060009081906001600160a01b038a811691161480156115465750600f54600160b01b900460ff165b156115c85761155487611d02565b326000908152601660205260409020549194509250603c906115769042612925565b118061158b5750600f54600160a01b900460ff165b6115a75760405162461bcd60e51b81526004016108659061250e565b3260009081526016602052604090204290556115c38983611d64565b61160b565b600f546001600160a01b0389811691161480156115ee5750600f54600160b01b900460ff165b1561160b576115fc87611de9565b909350905061160b8982611df9565b611616898985611c24565b600f54600160b01b900460ff1680156116315750600c544311155b8015611643575061164132610cbb565b155b1561169657600f546001600160a01b031632141561168d57600f546001600160a01b038a81169116141561167f5761167a88611e3c565b611688565b61168889611e3c565b611696565b61169632611e3c565b505050505050505050565b60006112dc836001600160a01b038416611eea565b600f546001600160a01b03838116911614806116df57506010546001600160a01b038381169116145b156116e957610bb8565b6001600160a01b03821660009081526017602052604081205460075461170f9190612925565b90506000600a5461171f85610cd9565b6117299084612906565b61173391906128e6565b6007546001600160a01b03861660009081526017602052604090205590508061175d575050610bb8565b6001600160a01b038416600090815260186020526040812080548392906117859084906128ce565b90915550506040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156117c0573d6000803e3d6000fd5b5050505050565b600f805460ff60a01b1916600160a01b179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061181d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561187157600080fd5b505afa158015611885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a991906120a3565b816001815181106118ca57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526010546118f091309116846112e7565b60105460405163791ac94760e01b815247916001600160a01b03169063791ac94790611929908690600090879030904290600401612850565b600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b50505050600081476119699190612925565b9050600060085460095461197d91906128ce565b60095461198a9087612906565b61199491906128e6565b905060006119a28287612925565b905060006008546009546119b691906128ce565b6009546119c39086612906565b6119cd91906128e6565b905060006119db8286612925565b90508115611a705760006119f06002846128e6565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611a2b573d6000803e3d6000fd5b50600e546001600160a01b03166108fc611a458386612925565b6040518115909202916000818181858888f19350505050158015611a6d573d6000803e3d6000fd5b50505b8360096000828254611a829190612925565b925050819055508260086000828254611a9b9190612925565b925050819055508060076000828254611ab491906128ce565b9091555050600f805460ff60a01b191690555050505050505050565b611ad981610e68565b15611af65760405162461bcd60e51b815260040161086590612695565b610bb86011826112c7565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006112dc836001600160a01b038416611f02565b80600a6000828254611b7a91906128ce565b90915550611b8a9050828261201f565b816001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bce9190612847565b60405180910390a35050565b6000611be68383611eea565b611c1c575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107e2565b5060006107e2565b6001600160a01b038316611c4a5760405162461bcd60e51b8152600401610865906123cd565b6001600160a01b038216611c705760405162461bcd60e51b815260040161086590612404565b6000611c7b84610cd9565b905081811015611c9d5760405162461bcd60e51b8152600401610865906124a9565b611ca78483612063565b611cb1838361201f565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cf49190612847565b60405180910390a350505050565b60008080611d1260036064612925565b90506064611d208286612906565b611d2a91906128e6565b9250611d368385612925565b915083611d4383856128ce565b14611d5e57634e487b7160e01b600052600160045260246000fd5b50915091565b6001600160a01b038216611d8a5760405162461bcd60e51b8152600401610865906125b3565b611d95823083611c24565b8060086000828254611da791906128ce565b909155505060405130906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bce908590612847565b60008080611d1260026064612925565b6001600160a01b038216611e1f5760405162461bcd60e51b815260040161086590612803565b611e2a823083611c24565b8060096000828254611da791906128ce565b611e4581610b51565b15611e625760405162461bcd60e51b8152600401610865906127cc565b6010546001600160a01b0382811691161415611e905760405162461bcd60e51b815260040161086590612710565b600f546001600160a01b0382811691161415611ebe5760405162461bcd60e51b815260040161086590612752565b6001600160a01b0381166000908152601560205260409020805460ff191660011790556108e281611ad0565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015612015576000611f26600183612925565b8554909150600090611f3a90600190612925565b9050818114611fbb576000866000018281548110611f6857634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080876000018481548110611f9957634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fda57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107e2565b60009150506107e2565b6001600160a01b0382166000908152601360205260409020546120439082906128ce565b6001600160a01b0390921660009081526013602052604090209190915550565b6001600160a01b038216600090815260136020526040902054612043908290612925565b600060208284031215612098578081fd5b81356112dc816129a8565b6000602082840312156120b4578081fd5b81516112dc816129a8565b600080604083850312156120d1578081fd5b82356120dc816129a8565b915060208301356120ec816129a8565b809150509250929050565b60008060006060848603121561210b578081fd5b8335612116816129a8565b92506020840135612126816129a8565b929592945050506040919091013590565b60008060408385031215612149578182fd5b8235612154816129a8565b946020939093013593505050565b60008060208385031215612174578182fd5b823567ffffffffffffffff8082111561218b578384fd5b818501915085601f83011261219e578384fd5b8135818111156121ac578485fd5b86602080830285010111156121bf578485fd5b60209290920196919550909350505050565b6000602082840312156121e2578081fd5b813580151581146112dc578182fd5b600060208284031215612202578081fd5b5035919050565b60008060006060848603121561221d578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612248578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b818110156122e7578581018301518582016040015282016122cb565b818111156122f85783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f45786365656473206d6178207472616e73616374696f6e20616d6f756e740000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601e908201527f7472616e736665722066726f6d20746865207a65726f20616464726573730000604082015260600190565b6020808252601c908201527f7472616e7366657220746f20746865207a65726f206164647265737300000000604082015260600190565b60208082526017908201527f4163636f756e74206d75737420626520666c6167676564000000000000000000604082015260600190565b60208082526017908201527f526563697069656e74206c6f636b656420617320626f74000000000000000000604082015260600190565b6020808252601f908201527f7472616e7366657220616d6f756e7420657863656564732062616c616e636500604082015260600190565b60208082526014908201527314d95b99195c881b1bd8dad95908185cc8189bdd60621b604082015260600190565b6020808252601d908201527f68697420636f6f6c646f776e2c2074727920616761696e206c61746572000000604082015260600190565b60208082526018908201527f4163636f756e74206d757374206265206578636c756465640000000000000000604082015260600190565b60208082526019908201527f4578636c756465642066726f6d207265666c656374696f6e7300000000000000604082015260600190565b6020808252601d908201527f7265666c6563742066726f6d20746865207a65726f2061646472657373000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152731059191c995cdcc81b9bdd08195e18db1d59195960621b604082015260600190565b6020808252601c908201527f4163636f756e74206d757374206e6f74206265206578636c7564656400000000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526022908201527f4163636f756e74206d757374206e6f7420626520756e697377617020726f757460408201526132b960f11b606082015260800190565b6020808252818101527f4163636f756e74206d757374206e6f7420626520756e69737761702070616972604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252601b908201527f4163636f756e74206d757374206e6f7420626520666c61676765640000000000604082015260600190565b60208082526024908201527f74616b65206d61726b6574696e672066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561289f5784516001600160a01b03168352938301939183019160010161287a565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b600082198211156128e1576128e1612992565b500190565b60008261290157634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561292057612920612992565b500290565b60008282101561293757612937612992565b500390565b60028104600182168061295057607f821691505b6020821081141561297157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561298b5761298b612992565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146108e257600080fdfea264697066735822122060a5e4a52787f04765b1f0c3cd8862d99d36f3b25e8aee2a292d0ac3a3c4092b64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000350a1ac0ce104d0f9fd4f2c80931d04052de3ff3000000000000000000000000350a1ac0ce104d0f9fd4f2c80931d04052de3ff3
-----Decoded View---------------
Arg [0] : uniswapFactory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [1] : uniswapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : marketing (address): 0x350A1Ac0Ce104D0f9fd4f2c80931D04052DE3Ff3
Arg [3] : treasury (address): 0x350A1Ac0Ce104D0f9fd4f2c80931D04052DE3Ff3
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 000000000000000000000000350a1ac0ce104d0f9fd4f2c80931d04052de3ff3
Arg [3] : 000000000000000000000000350a1ac0ce104d0f9fd4f2c80931d04052de3ff3
Deployed Bytecode Sourcemap
36697:13868:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14253:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16420:169;;;;;;;;;;-1:-1:-1;16420:169:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;37484:29::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;50206:100::-;;;;;;;;;;;;;:::i;17071:492::-;;;;;;;;;;-1:-1:-1;17071:492:0;;;;;:::i;:::-;;:::i;45799:256::-;;;;;;;;;;-1:-1:-1;45799:256:0;;;;;:::i;:::-;;:::i;:::-;;15215:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;37448:29::-;;;;;;;;;;;;;:::i;45595:196::-;;;;;;;;;;;;;:::i;41951:207::-;;;;;;;;;;-1:-1:-1;41951:207:0;;;;;:::i;:::-;;:::i;41259:328::-;;;;;;;;;;-1:-1:-1;41259:328:0;;;;;:::i;:::-;;:::i;17972:215::-;;;;;;;;;;-1:-1:-1;17972:215:0;;;;;:::i;:::-;;:::i;38057:43::-;;;;;;;;;;-1:-1:-1;38057:43:0;;;;;:::i;:::-;;:::i;41064:98::-;;;;;;;;;;-1:-1:-1;41064:98:0;;;;;:::i;:::-;;:::i;47294:329::-;;;;;;;;;;;;;:::i;37682:37::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;39770:90::-;;;:::i;40679:183::-;;;;;;;;;;-1:-1:-1;40679:183:0;;;;;:::i;:::-;;:::i;40230:117::-;;;;;;;;;;-1:-1:-1;40230:117:0;;;;;:::i;:::-;;:::i;37407:33::-;;;;;;;;;;;;;:::i;40558:113::-;;;;;;;;;;-1:-1:-1;40558:113:0;;;;;:::i;:::-;;:::i;42166:172::-;;;;;;;;;;-1:-1:-1;42166:172:0;;;;;:::i;:::-;;:::i;2605:94::-;;;;;;;;;;;;;:::i;37637:38::-;;;;;;;;;;;;;:::i;49987:109::-;;;;;;;;;;-1:-1:-1;49987:109:0;;;;;:::i;:::-;;:::i;47631:209::-;;;;;;;;;;;;;:::i;1953:87::-;;;;;;;;;;;;;:::i;39868:141::-;;;;;;;;;;-1:-1:-1;39868:141:0;;;;;:::i;:::-;;:::i;38261:52::-;;;;;;;;;;-1:-1:-1;38261:52:0;;;;;:::i;:::-;;:::i;38200:54::-;;;;;;;;;;-1:-1:-1;38200:54:0;;;;;:::i;:::-;;:::i;14472:104::-;;;;;;;;;;;;;:::i;40017:205::-;;;;;;;;;;-1:-1:-1;40017:205:0;;;;;:::i;:::-;;:::i;18690:413::-;;;;;;;;;;-1:-1:-1;18690:413:0;;;;;:::i;:::-;;:::i;37732:19::-;;;;;;;;;;;;;:::i;15884:175::-;;;;;;;;;;-1:-1:-1;15884:175:0;;;;;:::i;:::-;;:::i;40870:186::-;;;;;;;;;;-1:-1:-1;40870:186:0;;;;;:::i;:::-;;:::i;37822:25::-;;;;;;;;;;;;;:::i;38151:42::-;;;;;;;;;;-1:-1:-1;38151:42:0;;;;;:::i;:::-;;:::i;39011:751::-;;;;;;:::i;:::-;;:::i;37566:32::-;;;;;;;;;;;;;:::i;16122:151::-;;;;;;;;;;-1:-1:-1;16122:151:0;;;;;:::i;:::-;;:::i;50104:94::-;;;;;;;;;;-1:-1:-1;50104:94:0;;;;;:::i;:::-;;:::i;2862:192::-;;;;;;;;;;-1:-1:-1;2862:192:0;;;;;:::i;:::-;;:::i;14253:100::-;14307:13;14340:5;14333:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14253:100;:::o;16420:169::-;16503:4;16520:39;16529:12;:10;:12::i;:::-;16543:7;16552:6;16520:8;:39::i;:::-;-1:-1:-1;16577:4:0;16420:169;;;;;:::o;37484:29::-;;;;:::o;50206:100::-;50286:12;;50206:100;:::o;17071:492::-;17211:4;17228:36;17238:6;17246:9;17257:6;17228:9;:36::i;:::-;-1:-1:-1;;;;;17304:19:0;;17277:24;17304:19;;;:11;:19;;;;;17277:24;17324:12;:10;:12::i;:::-;-1:-1:-1;;;;;17304:33:0;-1:-1:-1;;;;;17304:33:0;;;;;;;;;;;;;17277:60;;17376:6;17356:16;:26;;17348:79;;;;-1:-1:-1;;;17348:79:0;;;;;;;:::i;:::-;;;;;;;;;17463:57;17472:6;17480:12;:10;:12::i;:::-;17513:6;17494:16;:25;17463:8;:57::i;:::-;-1:-1:-1;17551:4:0;;17071:492;-1:-1:-1;;;;17071:492:0:o;45799:256::-;45890:15;;-1:-1:-1;;;;;45890:15:0;45876:10;:29;45867:39;;;;;;45925:38;:23;45958:4;45925:32;:38::i;:::-;45917:71;;;;-1:-1:-1;;;45917:71:0;;;;;;;:::i;:::-;46030:15;;45999:48;;46016:4;;-1:-1:-1;;;;;46030:15:0;45999:16;:48::i;:::-;45799:256;:::o;15215:93::-;15298:2;15215:93;:::o;37448:29::-;;;;:::o;45595:196::-;45649:44;:23;45682:10;45649:32;:44::i;:::-;45648:45;45640:83;;;;-1:-1:-1;;;45640:83:0;;;;;;;:::i;:::-;45734:49;45751:10;45771;45734:16;:49::i;:::-;45595:196::o;41951:207::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;42030:14:::1;42036:7;42030:5;:14::i;:::-;42022:50;;;;-1:-1:-1::0;;;42022:50:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42085:13:0;::::1;42101:5;42085:13:::0;;;:4:::1;:13;::::0;;;;:21;;-1:-1:-1;;42085:21:0::1;::::0;;42117:33:::1;42090:7:::0;42117:24:::1;:33::i;41259:328::-:0;41348:15;;-1:-1:-1;;;;;41348:15:0;41334:10;:29;41325:39;;;;;;41379:9;41375:205;41394:18;;;41375:205;;;41452:5;41433:4;:16;41438:7;;41446:1;41438:10;;;;;-1:-1:-1;;;41438:10:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41433:16:0;;;;;;;;;;;;-1:-1:-1;41433:16:0;:24;;-1:-1:-1;;41433:24:0;;;;;;;;;;41472:36;41497:7;;41505:1;41497:10;;;;;-1:-1:-1;;;41497:10:0;;;;;;;;;;;;;;;;;;;;;;:::i;41472:36::-;41549:5;41523:11;:23;41535:7;;41543:1;41535:10;;;;;-1:-1:-1;;;41535:10:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41523:23:0;;;;;;;;;;;;-1:-1:-1;41523:23:0;:31;;-1:-1:-1;;41523:31:0;;;;;;;;;;41414:3;;;;:::i;:::-;;;;41375:205;;;;41259:328;;:::o;17972:215::-;18060:4;18077:80;18086:12;:10;:12::i;:::-;18100:7;18146:10;18109:11;:25;18121:12;:10;:12::i;:::-;-1:-1:-1;;;;;18109:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;18109:25:0;;;:34;;;;;;;;;;:47;;;;:::i;:::-;18077:8;:80::i;38057:43::-;;;;;;;;;;;;;;;:::o;41064:98::-;-1:-1:-1;;;;;41141:13:0;41117:4;41141:13;;;:4;:13;;;;;;;;;41064:98::o;47294:329::-;47331:19;47369:3;47353:13;:11;:13::i;:::-;:19;;;;:::i;:::-;47331:41;;47383:28;47414:24;47432:4;47414:9;:24::i;:::-;47383:55;;47478:11;47454:20;:35;47451:101;;-1:-1:-1;47529:11:0;47451:101;47569:7;;-1:-1:-1;;;47569:7:0;;;;47564:41;;47578:27;47584:20;47578:5;:27::i;:::-;47294:329;;:::o;37682:37::-;;;-1:-1:-1;;;;;37682:37:0;;:::o;39770:90::-;39843:9;39821:18;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;39770:90:0:o;40679:183::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;40759:22:::1;40773:7;40759:13;:22::i;:::-;40758:23;40750:64;;;;-1:-1:-1::0;;;40750:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40827:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;40827:27:0::1;40850:4;40827:27;::::0;;40679:183::o;40230:117::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;40308:31:::1;40331:7;40308:22;:31::i;37407:33::-:0;;;;:::o;40558:113::-;-1:-1:-1;;;;;40643:20:0;40619:4;40643:20;;;:11;:20;;;;;;;;;40558:113::o;42166:172::-;-1:-1:-1;;;;;42312:18:0;42285:7;42312:18;;;:9;:18;;;;;;;42166:172::o;2605:94::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;2670:21:::1;2688:1;2670:9;:21::i;37637:38::-:0;;;-1:-1:-1;;;;;37637:38:0;;:::o;49987:109::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;50062:12:::1;:26:::0;49987:109::o;47631:209::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;47684:13:::1;47700:25;47724:1;47700:21;:25;:::i;:::-;47736:15;::::0;:31:::1;::::0;47684:41;;-1:-1:-1;;;;;;47736:15:0::1;::::0;:31;::::1;;;::::0;47684:41;;47736:15:::1;:31:::0;:15;:31;47684:41;47736:15;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;47778:14:0::1;::::0;-1:-1:-1;;;;;47778:14:0::1;:54;47802:29;47826:5:::0;47802:21:::1;:29;:::i;:::-;47778:54;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;1953:87:::0;2026:6;;-1:-1:-1;;;;;2026:6:0;1953:87;:::o;39868:141::-;39936:4;39960:41;:23;39993:7;39960:32;:41::i;38261:52::-;;;;;;;;;;;;;:::o;38200:54::-;;;;;;;;;;;;;:::o;14472:104::-;14528:13;14561:7;14554:14;;;;;:::i;40017:205::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;40106:29:::1;40127:7;40106:20;:29::i;:::-;40098:66;;;;-1:-1:-1::0;;;40098:66:0::1;;;;;;;:::i;:::-;40175:39;:23;40206:7:::0;40175:30:::1;:39::i;18690:413::-:0;18783:4;18800:24;18827:11;:25;18839:12;:10;:12::i;:::-;-1:-1:-1;;;;;18827:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;18827:25:0;;;:34;;;;;;;;;;;-1:-1:-1;18880:35:0;;;;18872:85;;;;-1:-1:-1;;;18872:85:0;;;;;;;:::i;:::-;18993:67;19002:12;:10;:12::i;:::-;19016:7;19044:15;19025:16;:34;18993:8;:67::i;:::-;-1:-1:-1;19091:4:0;;18690:413;-1:-1:-1;;;18690:413:0:o;37732:19::-;;;-1:-1:-1;;;;;37732:19:0;;:::o;15884:175::-;15970:4;15987:42;15997:12;:10;:12::i;:::-;16011:9;16022:6;15987:9;:42::i;40870:186::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;40952:22:::1;40966:7;40952:13;:22::i;:::-;40944:63;;;;-1:-1:-1::0;;;40944:63:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41020:20:0::1;41043:5;41020:20:::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;41020:28:0::1;::::0;;40870:186::o;37822:25::-;;;-1:-1:-1;;;37822:25:0;;;;;:::o;38151:42::-;;;;;;;;;;;;;:::o;39011:751::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;36928:15:::1;:22:::0;;-1:-1:-1;;;;36928:22:0::1;-1:-1:-1::0;;;36928:22:0::1;::::0;;39139:32:::2;39157:4;39164:6:::0;39139:9:::2;:32::i;:::-;39182:69;39200:42;39245:5;39182:9;:69::i;:::-;39304:7;::::0;39272:49:::2;::::0;39289:4:::2;::::0;-1:-1:-1;;;;;39304:7:0::2;39314:6:::0;39272:8:::2;:49::i;:::-;39334:7;::::0;:246:::2;::::0;-1:-1:-1;;;39334:246:0;;-1:-1:-1;;;;;39334:7:0;;::::2;::::0;:23:::2;::::0;39365:9:::2;::::0;39334:246:::2;::::0;39398:4:::2;::::0;39418:6;;39334:7:::2;::::0;;;37280:42:::2;::::0;39554:15:::2;::::0;39334:246:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;39598:13:0::2;::::0;-1:-1:-1;;;39598:13:0;::::2;;;::::0;-1:-1:-1;39593:162:0::2;;39628:13;:20:::0;;-1:-1:-1;;;;39628:20:0::2;-1:-1:-1::0;;;39628:20:0::2;::::0;;39683:12:::2;39663:17;:32:::0;;;39720:23:::2;::::0;39740:3;;39720:23:::2;:::i;:::-;39710:7;:33:::0;39593:162:::2;-1:-1:-1::0;;36973:15:0::1;:23:::0;;-1:-1:-1;;;;36973:23:0::1;::::0;;-1:-1:-1;39011:751:0:o;37566:32::-;;;;:::o;16122:151::-;-1:-1:-1;;;;;16238:18:0;;;16211:7;16238:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16122:151::o;50104:94::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;50170:9:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;50170:20:0::1;-1:-1:-1::0;;;;50170:20:0;;::::1;::::0;;;::::1;::::0;;50104:94::o;2862:192::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2951:22:0;::::1;2943:73;;;;-1:-1:-1::0;;;2943:73:0::1;;;;;;;:::i;:::-;3027:19;3037:8;3027:9;:19::i;31956:152::-:0;32026:4;32050:50;32055:3;-1:-1:-1;;;;;32075:23:0;;32050:4;:50::i;:::-;32043:57;31956:152;-1:-1:-1;;;31956:152:0:o;778:98::-;858:10;778:98;:::o;22378:380::-;-1:-1:-1;;;;;22514:19:0;;22506:68;;;;-1:-1:-1;;;22506:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22593:21:0;;22585:68;;;;-1:-1:-1;;;22585:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22666:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;22718:32;;;;;22696:6;;22718:32;:::i;:::-;;;;;;;;22378:380;;;:::o;42627:2462::-;42730:21;42744:6;42730:13;:21::i;:::-;:49;;;;42755:24;42769:9;42755:13;:24::i;:::-;42726:142;;;42796:39;42809:6;42817:9;42828:6;42796:12;:39::i;:::-;42850:7;;42726:142;42889:13;42895:6;42889:5;:13::i;:::-;42888:14;42880:47;;;;-1:-1:-1;;;42880:47:0;;;;;;;:::i;:::-;42947:16;42953:9;42947:5;:16::i;:::-;42946:17;42938:53;;;;-1:-1:-1;;;42938:53:0;;;;;;;:::i;:::-;43002:19;43040:3;43024:13;:11;:13::i;:::-;:19;;;;:::i;:::-;43002:41;;43072:11;43062:6;:21;;:40;;;-1:-1:-1;43087:15:0;;-1:-1:-1;;;43087:15:0;;;;43062:40;:51;;;-1:-1:-1;43106:7:0;;-1:-1:-1;;;43106:7:0;;;;43062:51;:84;;;-1:-1:-1;43138:7:0;;-1:-1:-1;;;;;43117:29:0;;;43138:7;;43117:29;43062:84;43054:127;;;;-1:-1:-1;;;43054:127:0;;;;;;;:::i;:::-;43289:28;43320:24;43338:4;43320:9;:24::i;:::-;43289:55;-1:-1:-1;37226:9:0;43382:36;;;43434:35;;;43431:101;;43509:11;43486:34;;43431:101;43562:19;:44;;;;-1:-1:-1;43599:7:0;;-1:-1:-1;;;43599:7:0;;;;43598:8;43562:44;:75;;;;-1:-1:-1;43633:4:0;;-1:-1:-1;;;;;43623:14:0;;;43633:4;;43623:14;;43562:75;:101;;;;-1:-1:-1;43654:9:0;;-1:-1:-1;;;43654:9:0;;;;43562:101;43544:185;;;43690:27;43696:20;43690:5;:27::i;:::-;43766:41;43783:6;43799;43766:16;:41::i;:::-;43818:47;43835:9;43854;43818:16;:47::i;:::-;43994:4;;43893:6;;43878:12;;;;-1:-1:-1;;;;;43984:14:0;;;43994:4;;43984:14;:31;;;;-1:-1:-1;44002:13:0;;-1:-1:-1;;;44002:13:0;;;;43984:31;43980:615;;;44094:25;44112:6;44094:17;:25::i;:::-;44197:9;44189:18;;;;:7;:18;;;;;;44076:43;;-1:-1:-1;44076:43:0;-1:-1:-1;37168:10:0;;44171:36;;:15;:36;:::i;:::-;:47;:58;;;-1:-1:-1;44222:7:0;;-1:-1:-1;;;44222:7:0;;;;44171:58;44163:100;;;;-1:-1:-1;;;44163:100:0;;;;;;;:::i;:::-;44286:9;44278:18;;;;:7;:18;;;;;44299:15;44278:36;;44329:25;44338:6;44346:7;44329:8;:25::i;:::-;43980:615;;;44404:4;;-1:-1:-1;;;;;44391:17:0;;;44404:4;;44391:17;:34;;;;-1:-1:-1;44412:13:0;;-1:-1:-1;;;44412:13:0;;;;44391:34;44387:208;;;44509:26;44528:6;44509:18;:26::i;:::-;44488:47;;-1:-1:-1;44488:47:0;-1:-1:-1;44550:33:0;44565:6;44488:47;44550:14;:33::i;:::-;44652:37;44665:6;44673:9;44684:4;44652:12;:37::i;:::-;44706:13;;-1:-1:-1;;;44706:13:0;;;;:40;;;;;44739:7;;44723:12;:23;;44706:40;:69;;;;;44751:24;44765:9;44751:13;:24::i;:::-;44750:25;44706:69;44702:380;;;44817:4;;-1:-1:-1;;;;;44817:4:0;44796:9;:26;44792:279;;;44865:4;;-1:-1:-1;;;;;44847:23:0;;;44865:4;;44847:23;44843:154;;;44895:18;44903:9;44895:7;:18::i;:::-;44843:154;;;44962:15;44970:6;44962:7;:15::i;:::-;44792:279;;;45037:18;45045:9;45037:7;:18::i;:::-;42627:2462;;;;;;;;;:::o;32528:167::-;32608:4;32632:55;32642:3;-1:-1:-1;;;;;32662:23:0;;32632:9;:55::i;45097:490::-;45189:4;;-1:-1:-1;;;;;45181:12:0;;;45189:4;;45181:12;;:40;;-1:-1:-1;45213:7:0;;-1:-1:-1;;;;;45197:24:0;;;45213:7;;45197:24;45181:40;45177:53;;;45223:7;;45177:53;-1:-1:-1;;;;;45289:25:0;;45242:23;45289:25;;;:19;:25;;;;;;45268:18;;:46;;45289:25;45268:46;:::i;:::-;45242:72;;45325:12;45376;;45358:15;45368:4;45358:9;:15::i;:::-;45340:33;;:15;:33;:::i;:::-;:48;;;;:::i;:::-;45429:18;;-1:-1:-1;;;;;45401:25:0;;;;;;:19;:25;;;;;:46;45325:63;-1:-1:-1;45462:9:0;45458:52;;45492:7;;;;45458:52;-1:-1:-1;;;;;45520:23:0;;;;;;:17;:23;;;;;:31;;45547:4;;45520:23;:31;;45547:4;;45520:31;:::i;:::-;;;;-1:-1:-1;;45562:17:0;;-1:-1:-1;;;;;45562:11:0;;;:17;;;;;45574:4;;45562:17;;;;45574:4;45562:11;:17;;;;;;;;;;;;;;;;;;;;;45097:490;;;;:::o;46063:1223::-;36827:7;:14;;-1:-1:-1;;;;36827:14:0;-1:-1:-1;;;36827:14:0;;;46147:16:::1;::::0;;46161:1:::1;46147:16:::0;;;;;::::1;::::0;;-1:-1:-1;;46147:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;46147:16:0::1;46123:40;;46192:4;46174;46179:1;46174:7;;;;;;-1:-1:-1::0;;;46174:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;46174:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;46218:7:::1;::::0;:14:::1;::::0;;-1:-1:-1;;;46218:14:0;;;;:7;;;::::1;::::0;:12:::1;::::0;:14:::1;::::0;;::::1;::::0;46174:7;;46218:14;;;;;:7;:14;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46208:4;46213:1;46208:7;;;;;;-1:-1:-1::0;;;46208:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;46208:24:0;;::::1;:7;::::0;;::::1;::::0;;;;;:24;46277:7:::1;::::0;46245:49:::1;::::0;46262:4:::1;::::0;46277:7:::1;46287:6:::0;46245:8:::1;:49::i;:::-;46370:7;::::0;:183:::1;::::0;-1:-1:-1;;;46370:183:0;;46336:21:::1;::::0;-1:-1:-1;;;;;46370:7:0::1;::::0;:58:::1;::::0;:183:::1;::::0;46443:6;;46307:26:::1;::::0;46480:4;;46507::::1;::::0;46527:15:::1;::::0;46370:183:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46566:18;46611;46587:21;:42;;;;:::i;:::-;46566:63;;46642:23;46712:14;;46695;;:31;;;;:::i;:::-;46677:14;::::0;46668:23:::1;::::0;:6;:23:::1;:::i;:::-;:59;;;;:::i;:::-;46642:85:::0;-1:-1:-1;46738:23:0::1;46764:24;46642:85:::0;46764:6;:24:::1;:::i;:::-;46738:50;;46801:20;46872:14;;46855;;:31;;;;:::i;:::-;46837:14;::::0;46824:27:::1;::::0;:10;:27:::1;:::i;:::-;:63;;;;:::i;:::-;46801:86:::0;-1:-1:-1;46898:20:0::1;46921:25;46801:86:::0;46921:10;:25:::1;:::i;:::-;46898:48:::0;-1:-1:-1;46963:16:0;;46959:187:::1;;46996:13;47012:16;47027:1;47012:12:::0;:16:::1;:::i;:::-;47043:15;::::0;:31:::1;::::0;46996:32;;-1:-1:-1;;;;;;47043:15:0::1;::::0;:31;::::1;;;::::0;46996:32;;47043:15:::1;:31:::0;:15;:31;46996:32;47043:15;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;47089:14:0::1;::::0;-1:-1:-1;;;;;47089:14:0::1;:45;47113:20;47128:5:::0;47113:12;:20:::1;:::i;:::-;47089:45;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;46959:187;;47174:15;47156:14;;:33;;;;;;;:::i;:::-;;;;;;;;47218:15;47200:14;;:33;;;;;;;:::i;:::-;;;;;;;;47266:12;47244:18;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;36864:7:0;:15;;-1:-1:-1;;;;36864:15:0;;;-1:-1:-1;;;;;;;;46063:1223:0:o;40355:195::-;40433:29;40454:7;40433:20;:29::i;:::-;40432:30;40424:71;;;;-1:-1:-1;;;40424:71:0;;;;;;;:::i;:::-;40506:36;:23;40534:7;40506:27;:36::i;3062:173::-;3137:6;;;-1:-1:-1;;;;;3154:17:0;;;-1:-1:-1;;;;;;3154:17:0;;;;;;;3187:40;;3137:6;;;3154:17;3137:6;;3187:40;;3118:16;;3187:40;3062:173;;:::o;32284:158::-;32357:4;32381:53;32389:3;-1:-1:-1;;;;;32409:23:0;;32381:7;:53::i;50316:203::-;50413:6;50397:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;50430:28:0;;-1:-1:-1;50442:7:0;50451:6;50430:11;:28::i;:::-;50495:7;-1:-1:-1;;;;;50474:37:0;50491:1;-1:-1:-1;;;;;50474:37:0;;50504:6;50474:37;;;;;;:::i;:::-;;;;;;;;50316:203;;:::o;25871:414::-;25934:4;25956:21;25966:3;25971:5;25956:9;:21::i;:::-;25951:327;;-1:-1:-1;25994:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;26177:18;;26155:19;;;:12;;;:19;;;;;;:40;;;;26210:11;;25951:327;-1:-1:-1;26261:5:0;26254:12;;49435:544;-1:-1:-1;;;;;49536:20:0;;49528:63;;;;-1:-1:-1;;;49528:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49610:23:0;;49602:64;;;;-1:-1:-1;;;49602:64:0;;;;;;;:::i;:::-;49679:21;49703:17;49713:6;49703:9;:17::i;:::-;49679:41;;49756:6;49739:13;:23;;49731:67;;;;-1:-1:-1;;;49731:67:0;;;;;;;:::i;:::-;49834:32;49851:6;49859;49834:16;:32::i;:::-;49888:30;49900:9;49911:6;49888:11;:30::i;:::-;49953:9;-1:-1:-1;;;;;49936:35:0;49945:6;-1:-1:-1;;;;;49936:35:0;;49964:6;49936:35;;;;;;:::i;:::-;;;;;;;;49435:544;;;;:::o;48552:423::-;48618:12;;;48701:18;37123:1;48701:3;:18;:::i;:::-;48682:37;-1:-1:-1;48810:3:0;48789:17;48798:8;48789:6;:17;:::i;:::-;48788:25;;;;:::i;:::-;48781:32;-1:-1:-1;48860:13:0;48781:32;48860:6;:13;:::i;:::-;48850:23;-1:-1:-1;48960:6:0;48942:14;48949:7;48942:4;:14;:::i;:::-;:24;48935:32;;-1:-1:-1;;;48935:32:0;;;;;;;;;48552:423;;;;:::o;47892:341::-;-1:-1:-1;;;;;47971:21:0;;47963:63;;;;-1:-1:-1;;;47963:63:0;;;;;;;:::i;:::-;48090:44;48103:7;48120:4;48127:6;48090:12;:44::i;:::-;48163:6;48145:14;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;48185:40:0;;48211:4;;-1:-1:-1;;;;;48185:40:0;;;;;;;48218:6;;48185:40;:::i;48983:403::-;49050:12;;;49137:20;37073:1;49137:3;:20;:::i;48241:303::-;-1:-1:-1;;;;;48326:21:0;;48318:70;;;;-1:-1:-1;;;48318:70:0;;;;;;;:::i;:::-;48401:44;48414:7;48431:4;48438:6;48401:12;:44::i;:::-;48474:6;48456:14;;:24;;;;;;;:::i;41595:348::-;41658:14;41664:7;41658:5;:14::i;:::-;41657:15;41649:55;;;;-1:-1:-1;;;41649:55:0;;;;;;;:::i;:::-;41742:7;;-1:-1:-1;;;;;41723:27:0;;;41742:7;;41723:27;;41715:74;;;;-1:-1:-1;;;41715:74:0;;;;;;;:::i;:::-;41819:4;;-1:-1:-1;;;;;41808:15:0;;;41819:4;;41808:15;;41800:60;;;;-1:-1:-1;;;41800:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41873:13:0;;;;;;:4;:13;;;;;:20;;-1:-1:-1;;41873:20:0;41889:4;41873:20;;;41904:31;41878:7;41904:22;:31::i;27967:129::-;28040:4;28064:19;;;:12;;;;;:19;;;;;;:24;;;27967:129::o;26461:1420::-;26527:4;26666:19;;;:12;;;:19;;;;;;26702:15;;26698:1176;;27077:21;27101:14;27114:1;27101:10;:14;:::i;:::-;27150:18;;27077:38;;-1:-1:-1;27130:17:0;;27150:22;;27171:1;;27150:22;:::i;:::-;27130:42;;27206:13;27193:9;:26;27189:405;;27240:17;27260:3;:11;;27272:9;27260:22;;;;;;-1:-1:-1;;;27260:22:0;;;;;;;;;;;;;;;;;27240:42;;27414:9;27385:3;:11;;27397:13;27385:26;;;;;;-1:-1:-1;;;27385:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;27499:23;;;:12;;;:23;;;;;:36;;;27189:405;27675:17;;:3;;:17;;;-1:-1:-1;;;27675:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;27770:3;:12;;:19;27783:5;27770:19;;;;;;;;;;;27763:26;;;27813:4;27806:11;;;;;;;26698:1176;27857:5;27850:12;;;;;42346:130;-1:-1:-1;;;;;42441:18:0;;;;;;:9;:18;;;;;;:27;;42462:6;;42441:27;:::i;:::-;-1:-1:-1;;;;;42420:18:0;;;;;;;:9;:18;;;;;:48;;;;-1:-1:-1;42346:130:0:o;42484:135::-;-1:-1:-1;;;;;42584:18:0;;;;;;:9;:18;;;;;;:27;;42605:6;;42584:27;:::i;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:402::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;-1:-1:-1;868:2:1;853:18;;840:32;881:35;840:32;881:35;:::i;:::-;935:7;925:17;;;633:315;;;;;:::o;953:470::-;;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;1120:6;1112;1105:22;1067:2;1164:9;1151:23;1183:33;1210:5;1183:33;:::i;:::-;1235:5;-1:-1:-1;1292:2:1;1277:18;;1264:32;1305:35;1264:32;1305:35;:::i;:::-;1057:366;;1359:7;;-1:-1:-1;;;1413:2:1;1398:18;;;;1385:32;;1057:366::o;1428:327::-;;;1557:2;1545:9;1536:7;1532:23;1528:32;1525:2;;;1578:6;1570;1563:22;1525:2;1622:9;1609:23;1641:33;1668:5;1641:33;:::i;:::-;1693:5;1745:2;1730:18;;;;1717:32;;-1:-1:-1;;;1515:240:1:o;1760:666::-;;;1907:2;1895:9;1886:7;1882:23;1878:32;1875:2;;;1928:6;1920;1913:22;1875:2;1973:9;1960:23;2002:18;2043:2;2035:6;2032:14;2029:2;;;2064:6;2056;2049:22;2029:2;2107:6;2096:9;2092:22;2082:32;;2152:7;2145:4;2141:2;2137:13;2133:27;2123:2;;2179:6;2171;2164:22;2123:2;2224;2211:16;2250:2;2242:6;2239:14;2236:2;;;2271:6;2263;2256:22;2236:2;2330:7;2325:2;2319;2311:6;2307:15;2303:2;2299:24;2295:33;2292:46;2289:2;;;2356:6;2348;2341:22;2289:2;2392;2384:11;;;;;2414:6;;-1:-1:-1;1865:561:1;;-1:-1:-1;;;;1865:561:1:o;2431:293::-;;2540:2;2528:9;2519:7;2515:23;2511:32;2508:2;;;2561:6;2553;2546:22;2508:2;2605:9;2592:23;2658:5;2651:13;2644:21;2637:5;2634:32;2624:2;;2685:6;2677;2670:22;2729:190;;2841:2;2829:9;2820:7;2816:23;2812:32;2809:2;;;2862:6;2854;2847:22;2809:2;-1:-1:-1;2890:23:1;;2799:120;-1:-1:-1;2799:120:1:o;2924:326::-;;;;3070:2;3058:9;3049:7;3045:23;3041:32;3038:2;;;3091:6;3083;3076:22;3038:2;-1:-1:-1;;3119:23:1;;;3189:2;3174:18;;3161:32;;-1:-1:-1;3240:2:1;3225:18;;;3212:32;;3028:222;-1:-1:-1;3028:222:1:o;3255:316::-;;;;3412:2;3400:9;3391:7;3387:23;3383:32;3380:2;;;3433:6;3425;3418:22;3380:2;3467:9;3461:16;3451:26;;3517:2;3506:9;3502:18;3496:25;3486:35;;3561:2;3550:9;3546:18;3540:25;3530:35;;3370:201;;;;;:::o;3576:203::-;-1:-1:-1;;;;;3740:32:1;;;;3722:51;;3710:2;3695:18;;3677:102::o;4008:607::-;-1:-1:-1;;;;;4367:15:1;;;4349:34;;4414:2;4399:18;;4392:34;;;;4457:2;4442:18;;4435:34;;;;4500:2;4485:18;;4478:34;;;;4549:15;;;4543:3;4528:19;;4521:44;4329:3;4581:19;;4574:35;;;;4298:3;4283:19;;4265:350::o;4620:187::-;4785:14;;4778:22;4760:41;;4748:2;4733:18;;4715:92::o;4812:603::-;;4953:2;4982;4971:9;4964:21;5014:6;5008:13;5057:6;5052:2;5041:9;5037:18;5030:34;5082:4;5095:140;5109:6;5106:1;5103:13;5095:140;;;5204:14;;;5200:23;;5194:30;5170:17;;;5189:2;5166:26;5159:66;5124:10;;5095:140;;;5253:6;5250:1;5247:13;5244:2;;;5323:4;5318:2;5309:6;5298:9;5294:22;5290:31;5283:45;5244:2;-1:-1:-1;5399:2:1;5378:15;-1:-1:-1;;5374:29:1;5359:45;;;;5406:2;5355:54;;4933:482;-1:-1:-1;;;4933:482:1:o;5420:354::-;5622:2;5604:21;;;5661:2;5641:18;;;5634:30;5700:32;5695:2;5680:18;;5673:60;5765:2;5750:18;;5594:180::o;5779:402::-;5981:2;5963:21;;;6020:2;6000:18;;;5993:30;6059:34;6054:2;6039:18;;6032:62;-1:-1:-1;;;6125:2:1;6110:18;;6103:36;6171:3;6156:19;;5953:228::o;6186:398::-;6388:2;6370:21;;;6427:2;6407:18;;;6400:30;6466:34;6461:2;6446:18;;6439:62;-1:-1:-1;;;6532:2:1;6517:18;;6510:32;6574:3;6559:19;;6360:224::o;6589:354::-;6791:2;6773:21;;;6830:2;6810:18;;;6803:30;6869:32;6864:2;6849:18;;6842:60;6934:2;6919:18;;6763:180::o;6948:352::-;7150:2;7132:21;;;7189:2;7169:18;;;7162:30;7228;7223:2;7208:18;;7201:58;7291:2;7276:18;;7122:178::o;7305:347::-;7507:2;7489:21;;;7546:2;7526:18;;;7519:30;7585:25;7580:2;7565:18;;7558:53;7643:2;7628:18;;7479:173::o;7657:347::-;7859:2;7841:21;;;7898:2;7878:18;;;7871:30;7937:25;7932:2;7917:18;;7910:53;7995:2;7980:18;;7831:173::o;8009:355::-;8211:2;8193:21;;;8250:2;8230:18;;;8223:30;8289:33;8284:2;8269:18;;8262:61;8355:2;8340:18;;8183:181::o;8369:344::-;8571:2;8553:21;;;8610:2;8590:18;;;8583:30;-1:-1:-1;;;8644:2:1;8629:18;;8622:50;8704:2;8689:18;;8543:170::o;8718:353::-;8920:2;8902:21;;;8959:2;8939:18;;;8932:30;8998:31;8993:2;8978:18;;8971:59;9062:2;9047:18;;8892:179::o;9076:348::-;9278:2;9260:21;;;9317:2;9297:18;;;9290:30;9356:26;9351:2;9336:18;;9329:54;9415:2;9400:18;;9250:174::o;9429:349::-;9631:2;9613:21;;;9670:2;9650:18;;;9643:30;9709:27;9704:2;9689:18;;9682:55;9769:2;9754:18;;9603:175::o;9783:353::-;9985:2;9967:21;;;10024:2;10004:18;;;9997:30;10063:31;10058:2;10043:18;;10036:59;10127:2;10112:18;;9957:179::o;10141:404::-;10343:2;10325:21;;;10382:2;10362:18;;;10355:30;10421:34;10416:2;10401:18;;10394:62;-1:-1:-1;;;10487:2:1;10472:18;;10465:38;10535:3;10520:19;;10315:230::o;10550:356::-;10752:2;10734:21;;;10771:18;;;10764:30;10830:34;10825:2;10810:18;;10803:62;10897:2;10882:18;;10724:182::o;10911:344::-;11113:2;11095:21;;;11152:2;11132:18;;;11125:30;-1:-1:-1;;;11186:2:1;11171:18;;11164:50;11246:2;11231:18;;11085:170::o;11260:352::-;11462:2;11444:21;;;11501:2;11481:18;;;11474:30;11540;11535:2;11520:18;;11513:58;11603:2;11588:18;;11434:178::o;11617:400::-;11819:2;11801:21;;;11858:2;11838:18;;;11831:30;11897:34;11892:2;11877:18;;11870:62;-1:-1:-1;;;11963:2:1;11948:18;;11941:34;12007:3;11992:19;;11791:226::o;12022:398::-;12224:2;12206:21;;;12263:2;12243:18;;;12236:30;12302:34;12297:2;12282:18;;12275:62;-1:-1:-1;;;12368:2:1;12353:18;;12346:32;12410:3;12395:19;;12196:224::o;12425:356::-;12627:2;12609:21;;;12646:18;;;12639:30;12705:34;12700:2;12685:18;;12678:62;12772:2;12757:18;;12599:182::o;12786:401::-;12988:2;12970:21;;;13027:2;13007:18;;;13000:30;13066:34;13061:2;13046:18;;13039:62;-1:-1:-1;;;13132:2:1;13117:18;;13110:35;13177:3;13162:19;;12960:227::o;13192:351::-;13394:2;13376:21;;;13433:2;13413:18;;;13406:30;13472:29;13467:2;13452:18;;13445:57;13534:2;13519:18;;13366:177::o;13548:400::-;13750:2;13732:21;;;13789:2;13769:18;;;13762:30;13828:34;13823:2;13808:18;;13801:62;-1:-1:-1;;;13894:2:1;13879:18;;13872:34;13938:3;13923:19;;13722:226::o;13953:177::-;14099:25;;;14087:2;14072:18;;14054:76::o;14135:983::-;;14445:3;14434:9;14430:19;14476:6;14465:9;14458:25;14502:2;14540:6;14535:2;14524:9;14520:18;14513:34;14583:3;14578:2;14567:9;14563:18;14556:31;14607:6;14642;14636:13;14673:6;14665;14658:22;14711:3;14700:9;14696:19;14689:26;;14750:2;14742:6;14738:15;14724:29;;14771:4;14784:195;14798:6;14795:1;14792:13;14784:195;;;14863:13;;-1:-1:-1;;;;;14859:39:1;14847:52;;14954:15;;;;14919:12;;;;14895:1;14813:9;14784:195;;;-1:-1:-1;;;;;;;15035:32:1;;;;15030:2;15015:18;;15008:60;-1:-1:-1;;;15099:3:1;15084:19;15077:35;14996:3;14406:712;-1:-1:-1;;;14406:712:1:o;15123:184::-;15295:4;15283:17;;;;15265:36;;15253:2;15238:18;;15220:87::o;15312:128::-;;15383:1;15379:6;15376:1;15373:13;15370:2;;;15389:18;;:::i;:::-;-1:-1:-1;15425:9:1;;15360:80::o;15445:217::-;;15511:1;15501:2;;-1:-1:-1;;;15536:31:1;;15590:4;15587:1;15580:15;15618:4;15543:1;15608:15;15501:2;-1:-1:-1;15647:9:1;;15491:171::o;15667:168::-;;15773:1;15769;15765:6;15761:14;15758:1;15755:21;15750:1;15743:9;15736:17;15732:45;15729:2;;;15780:18;;:::i;:::-;-1:-1:-1;15820:9:1;;15719:116::o;15840:125::-;;15908:1;15905;15902:8;15899:2;;;15913:18;;:::i;:::-;-1:-1:-1;15950:9:1;;15889:76::o;15970:380::-;16055:1;16045:12;;16102:1;16092:12;;;16113:2;;16167:4;16159:6;16155:17;16145:27;;16113:2;16220;16212:6;16209:14;16189:18;16186:38;16183:2;;;16266:10;16261:3;16257:20;16254:1;16247:31;16301:4;16298:1;16291:15;16329:4;16326:1;16319:15;16183:2;;16025:325;;;:::o;16355:135::-;;-1:-1:-1;;16415:17:1;;16412:2;;;16435:18;;:::i;:::-;-1:-1:-1;16482:1:1;16471:13;;16402:88::o;16495:127::-;16556:10;16551:3;16547:20;16544:1;16537:31;16587:4;16584:1;16577:15;16611:4;16608:1;16601:15;16627:133;-1:-1:-1;;;;;16704:31:1;;16694:42;;16684:2;;16750:1;16747;16740:12
Swarm Source
ipfs://60a5e4a52787f04765b1f0c3cd8862d99d36f3b25e8aee2a292d0ac3a3c4092b
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.