Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 SKR
Holders
58
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.848709030024687105 SKRValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Sakuru
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-13 */ /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) 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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/interfaces/IUniswap.sol interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01{ function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } interface IUniswapV2ERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; } // SPDX-License-Identifier: MIT pragma solidity ^0.8.15; contract Sakuru is ERC20Burnable, Ownable { uint256 private constant TOTAL_SUPPLY = 100_000_000e18; address public marketingWallet; uint256 public maxPercentToSwap = 5; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address private constant DEAD = 0x000000000000000000000000000000000000dEaD; address private constant ZERO = 0x0000000000000000000000000000000000000000; bool private swapping; uint256 public swapTokensAtAmount; bool public isTradingEnabled; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public automatedMarketMakerPairs; event ExcludeFromFees(address indexed account); event FeesUpdated(uint256 sellFee, uint256 buyFee); event MarketingWalletChanged(address marketingWallet); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend); event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); uint256 public sellFee; uint256 public buyFee; bool public isBotProtectionDisabledPermanently; bool public accountEnabled = true; uint256 public maxTxAmount; uint256 public maxHolding; bool public buyCooldownEnabled = true; uint256 public buyCooldown = 30; mapping(address => bool) public isExempt; mapping(address => bool) public accountStatus; mapping(address => uint256) public lastBuy; constructor (address router, address operator) ERC20("SAKURU", "SKR") { _mint(owner(), TOTAL_SUPPLY); swapTokensAtAmount = TOTAL_SUPPLY / 1000; maxHolding = TOTAL_SUPPLY / 100; maxTxAmount = TOTAL_SUPPLY / 100; marketingWallet = operator; sellFee = 95; buyFee = 9; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _approve(address(this), address(uniswapV2Router), type(uint256).max); _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFees[owner()] = true; _isExcludedFromFees[DEAD] = true; _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[address(uniswapV2Router)] = true; // the pair should be excluded because of maxHolding isExempt[address(uniswapV2Router)] = true; isExempt[owner()] = true; } receive() external payable { } function openTrade() public onlyOwner { require(isTradingEnabled == false, "Trading is already open!"); isTradingEnabled = true; } function claimStuckTokens(address token) external onlyOwner { require(token != address(this), "Owner cannot claim native tokens"); if (token == address(0x0)) { payable(msg.sender).transfer(address(this).balance); return; } IERC20 ERC20token = IERC20(token); uint256 balance = ERC20token.balanceOf(address(this)); ERC20token.transfer(msg.sender, balance); } function sendETH(address payable recipient, uint256 amount) internal { // ignore failures recipient.call{gas : 2300, value : amount}(""); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The PancakeSwap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } //=======FeeManagement=======// function excludeFromFees(address account) external onlyOwner { require(!_isExcludedFromFees[account], "Account is already the value of true"); _isExcludedFromFees[account] = true; emit ExcludeFromFees(account); } function includeInFees(address account) external onlyOwner { require(_isExcludedFromFees[account], "Account already included"); _isExcludedFromFees[account] = false; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function updateFees(uint256 _sellFee, uint256 _buyFee) external onlyOwner { require(_sellFee <= 12, "Fees must be less than 10%"); require(_buyFee <= 12, "Fees must be less than 10%"); sellFee = _sellFee; buyFee = _buyFee; emit FeesUpdated(sellFee, buyFee); } function changeMarketingWallet(address _marketingWallet) external onlyOwner { require(_marketingWallet != marketingWallet, "Marketing wallet is already that address"); marketingWallet = _marketingWallet; emit MarketingWalletChanged(marketingWallet); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (!swapping) { _check(from, to, amount); } uint _buyFee = buyFee; uint _sellFee = sellFee; if (!isExempt[from] && !isExempt[to]) { require(isTradingEnabled, "Trade is not open"); } if (amount == 0) { return; } bool takeFee = !swapping; if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 toSwap = balanceOf(address(this)); bool canSwap = toSwap >= swapTokensAtAmount && toSwap > 0 && !automatedMarketMakerPairs[from] && takeFee; if (canSwap && !swapping) { swapping = true; uint256 pairBalance = balanceOf(uniswapV2Pair); if (toSwap > pairBalance * maxPercentToSwap / 100) { toSwap = pairBalance * maxPercentToSwap / 100; } swapAndSendMarketing(toSwap); swapping = false; } if (takeFee && to == uniswapV2Pair && _sellFee > 0) { uint256 fees = (amount * _sellFee) / 100; amount = amount - fees; super._transfer(from, address(this), fees); } else if (takeFee && from == uniswapV2Pair && _buyFee > 0) { uint256 fees = (amount * _buyFee) / 100; amount = amount - fees; super._transfer(from, address(this), fees); } super._transfer(from, to, amount); } //=======Swap=======// function swapAndSendMarketing(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp) {} catch { } uint256 newBalance = address(this).balance; sendETH(payable(marketingWallet), newBalance); emit SwapAndSendMarketing(tokenAmount, newBalance); } function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner { require(newAmount > 0); swapTokensAtAmount = newAmount; } function setMaxPercentToSwap(uint256 newAmount) external onlyOwner { require(newAmount > 1, "too low"); require(newAmount <= 10, "too high"); maxPercentToSwap = newAmount; } function _check( address from, address to, uint256 amount ) internal { require(!accountStatus[from] && !accountStatus[to], "account status"); if (!isBotProtectionDisabledPermanently) { if (!isSpecialAddresses(from, to) && !isExempt[to]) { _checkBuyCooldown(from, to); _checkMaxTxAmount(to, amount); // check max holding for receiver _checkMaxHoldingLimit(to, amount); } } } function _checkBuyCooldown(address from, address to) internal { if (buyCooldownEnabled && from == uniswapV2Pair) { require(block.timestamp - lastBuy[tx.origin] >= buyCooldown, "buy cooldown"); lastBuy[tx.origin] = block.timestamp; } } function _checkMaxTxAmount(address to, uint256 amount) internal view { require(amount <= maxTxAmount, "Amount exceeds max"); } function _checkMaxHoldingLimit(address to, uint256 amount) internal view { if (to == uniswapV2Pair) { return; } require(balanceOf(to) + amount <= maxHolding, "Max holding exceeded max"); } function isSpecialAddresses(address from, address to) view public returns (bool){ // from == address(0) || to == address(0) to exclude mint, and burn functions from bot protection limits. return (from == owner() || to == owner() || from == address(this) || to == address(this)); } function disableBotProtectionPermanently() external onlyOwner { isBotProtectionDisabledPermanently = true; } function setMaxTxAmount(uint256 maxTxAmount_) external onlyOwner { require(maxTxAmount_ > totalSupply() / 1000, "max tx amount"); maxTxAmount = maxTxAmount_; } function setAccountsStatus(address[] memory accounts, bool status) external onlyOwner { require(accountEnabled || status == false, "cant set anymore"); for (uint256 i; i < accounts.length; i++) { address account = accounts[i]; require(account != address(uniswapV2Router) && account != uniswapV2Pair && account != address(this)); accountStatus[account] = status; } } function disableAccounts() external onlyOwner { accountEnabled = false; } function setMaxHolding(uint256 maxHolding_) external onlyOwner { maxHolding = maxHolding_; } function setExempt(address who, bool status) public onlyOwner { isExempt[who] = status; } function setBuyCooldownStatus(bool status) external onlyOwner { buyCooldownEnabled = status; } function setBuyCooldown(uint256 buyCooldown_) external onlyOwner { buyCooldown = buyCooldown_; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"accountEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accountStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableBotProtectionPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isBotProtectionDisabledPermanently","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"isSpecialAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","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":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPercentToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAccountsStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyCooldown_","type":"uint256"}],"name":"setBuyCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setBuyCooldownStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxHolding_","type":"uint256"}],"name":"setMaxHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setMaxPercentToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount_","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260056007556010805461ff0019166101001790556013805460ff19166001179055601e6014553480156200003757600080fd5b5060405162003496380380620034968339810160408190526200005a9162000785565b6040518060400160405280600681526020016553414b55525560d01b8152506040518060400160405280600381526020016229a5a960e91b8152508160039081620000a6919062000861565b506004620000b5828262000861565b505050620000d2620000cc6200041060201b60201c565b62000414565b620000fb620000e96005546001600160a01b031690565b6a52b7d2dcc80cd2e400000062000466565b620001146103e86a52b7d2dcc80cd2e40000006200092d565b600a556200012f60646a52b7d2dcc80cd2e40000006200092d565b6012556200014a60646a52b7d2dcc80cd2e40000006200092d565b601155600680546001600160a01b0319166001600160a01b0383811691909117909155605f600e556009600f556040805163c45a015560e01b8152905184926000929084169163c45a0155916004808201926020929091908290030181865afa158015620001bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e2919062000950565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000230573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000256919062000950565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000950565b600880546001600160a01b038086166001600160a01b0319928316811790935560098054918516919092161790559091506200030b9030906000196200054f565b6200031881600162000677565b6001600c6000620003316005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600c84527f45117a726ea4f344045dc210793664a28d2d320b7e03f6bffdae553d24c3586c80548616600190811790915530825283822080548716821790556008805484168352848320805488168317905554909216815260159384905291822080549094168117909355620003dd6005546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055506200099d92505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620004c25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060026000828254620004d6919062000975565b90915550506001600160a01b038216600090815260208190526040812080548392906200050590849062000975565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038316620005b35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004b9565b6001600160a01b038216620006165760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004b9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000908152600d602052604090205481151560ff9091161515036200070f5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401620004b9565b6001600160a01b0382166000818152600d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b505050565b80516001600160a01b03811681146200078057600080fd5b919050565b600080604083850312156200079957600080fd5b620007a48362000768565b9150620007b46020840162000768565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007e857607f821691505b6020821081036200080957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200076357600081815260208120601f850160051c81016020861015620008385750805b601f850160051c820191505b81811015620008595782815560010162000844565b505050505050565b81516001600160401b038111156200087d576200087d620007bd565b62000895816200088e8454620007d3565b846200080f565b602080601f831160018114620008cd5760008415620008b45750858301515b600019600386901b1c1916600185901b17855562000859565b600085815260208120601f198616915b82811015620008fe57888601518255948401946001909101908401620008dd565b50858210156200091d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826200094b57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200096357600080fd5b6200096e8262000768565b9392505050565b808201808211156200099757634e487b7160e01b600052601160045260246000fd5b92915050565b612ae980620009ad6000396000f3fe60806040526004361061034e5760003560e01c80637d530192116101bb578063b62496f5116100f7578063e3084d9e11610095578063ec28438a1161006f578063ec28438a146109b1578063f2fde38b146109d1578063f9d0831a146109f1578063fb201b1d14610a1157600080fd5b8063e3084d9e1461095c578063e57f14e11461097c578063ec11ba341461099c57600080fd5b8063c29632bd116100d1578063c29632bd146108cb578063c72f6fc9146108eb578063dd62ed3e14610900578063e2f456051461094657600080fd5b8063b62496f51461084e578063bb85c6d11461087e578063c1adf7bc1461089e57600080fd5b80639c7d15a211610164578063a9059cbb1161013e578063a9059cbb146107bf578063ac57b470146107df578063ad5dff73146107fe578063afa4f3b21461082e57600080fd5b80639c7d15a2146107695780639fde54f51461077f578063a457c2d71461079f57600080fd5b806395d89b411161019557806395d89b41146107145780639a7a23d6146107295780639bc7c8c01461074957600080fd5b80637d530192146106c05780638c0b5e22146106e05780638da5cb5b146106f657600080fd5b80634589aaea1161028a5780636457c4c31161023357806370a082311161020d57806370a0823114610635578063715018a61461066b57806375f0a8741461068057806379cc6790146106a057600080fd5b80636457c4c3146105df5780636db79437146105ff578063704fbfe51461061f57600080fd5b80634fbee193116102645780634fbee1931461055c57806361242bdd14610595578063617fe0ed146105c557600080fd5b80634589aaea1461050c578063470624021461052657806349bd5a5e1461053c57600080fd5b806320518758116102f7578063313ce567116102d1578063313ce5671461049a578063333e6f06146104b657806339509351146104cc57806342966c68146104ec57600080fd5b8063205187581461044457806323b872dd146104645780632b14ca561461048457600080fd5b80631694505e116103285780631694505e146103cb57806316a2f82a1461040357806318160ddd1461042557600080fd5b8063064a59d01461035a57806306fdde0314610389578063095ea7b3146103ab57600080fd5b3661035557005b600080fd5b34801561036657600080fd5b50600b546103749060ff1681565b60405190151581526020015b60405180910390f35b34801561039557600080fd5b5061039e610a26565b6040516103809190612646565b3480156103b757600080fd5b506103746103c63660046126b9565b610ab8565b3480156103d757600080fd5b506008546103eb906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b34801561040f57600080fd5b5061042361041e3660046126e5565b610ad2565b005b34801561043157600080fd5b506002545b604051908152602001610380565b34801561045057600080fd5b5061042361045f366004612702565b610b68565b34801561047057600080fd5b5061037461047f36600461271b565b610c16565b34801561049057600080fd5b50610436600e5481565b3480156104a657600080fd5b5060405160128152602001610380565b3480156104c257600080fd5b5061043660125481565b3480156104d857600080fd5b506103746104e73660046126b9565b610c3a565b3480156104f857600080fd5b50610423610507366004612702565b610c79565b34801561051857600080fd5b506010546103749060ff1681565b34801561053257600080fd5b50610436600f5481565b34801561054857600080fd5b506009546103eb906001600160a01b031681565b34801561056857600080fd5b506103746105773660046126e5565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156105a157600080fd5b506103746105b03660046126e5565b60166020526000908152604090205460ff1681565b3480156105d157600080fd5b506013546103749060ff1681565b3480156105eb57600080fd5b506104236105fa366004612775565b610c86565b34801561060b57600080fd5b5061042361061a366004612792565b610ca1565b34801561062b57600080fd5b5061043660145481565b34801561064157600080fd5b506104366106503660046126e5565b6001600160a01b031660009081526020819052604090205490565b34801561067757600080fd5b50610423610d92565b34801561068c57600080fd5b506006546103eb906001600160a01b031681565b3480156106ac57600080fd5b506104236106bb3660046126b9565b610da6565b3480156106cc57600080fd5b506104236106db3660046127ca565b610dbf565b3480156106ec57600080fd5b5061043660115481565b34801561070257600080fd5b506005546001600160a01b03166103eb565b34801561072057600080fd5b5061039e610ed9565b34801561073557600080fd5b506104236107443660046128a1565b610ee8565b34801561075557600080fd5b50610423610764366004612702565b610fa4565b34801561077557600080fd5b5061043660075481565b34801561078b57600080fd5b5061042361079a3660046128a1565b610fb1565b3480156107ab57600080fd5b506103746107ba3660046126b9565b610fe4565b3480156107cb57600080fd5b506103746107da3660046126b9565b61108e565b3480156107eb57600080fd5b5060105461037490610100900460ff1681565b34801561080a57600080fd5b506103746108193660046126e5565b60156020526000908152604090205460ff1681565b34801561083a57600080fd5b50610423610849366004612702565b61109c565b34801561085a57600080fd5b506103746108693660046126e5565b600d6020526000908152604090205460ff1681565b34801561088a57600080fd5b506104236108993660046126e5565b6110b6565b3480156108aa57600080fd5b506104366108b93660046126e5565b60176020526000908152604090205481565b3480156108d757600080fd5b506104236108e6366004612702565b6111ae565b3480156108f757600080fd5b506104236111bb565b34801561090c57600080fd5b5061043661091b3660046128da565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561095257600080fd5b50610436600a5481565b34801561096857600080fd5b506103746109773660046128da565b6111ed565b34801561098857600080fd5b506104236109973660046126e5565b61125a565b3480156109a857600080fd5b5061042361133c565b3480156109bd57600080fd5b506104236109cc366004612702565b611353565b3480156109dd57600080fd5b506104236109ec3660046126e5565b6113c4565b3480156109fd57600080fd5b50610423610a0c3660046126e5565b611451565b348015610a1d57600080fd5b50610423611604565b606060038054610a3590612908565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6190612908565b8015610aae5780601f10610a8357610100808354040283529160200191610aae565b820191906000526020600020905b815481529060010190602001808311610a9157829003601f168201915b5050505050905090565b600033610ac681858561166e565b60019150505b92915050565b610ada6117c6565b6001600160a01b0381166000908152600c602052604090205460ff16610b475760405162461bcd60e51b815260206004820152601860248201527f4163636f756e7420616c726561647920696e636c75646564000000000000000060448201526064015b60405180910390fd5b6001600160a01b03166000908152600c60205260409020805460ff19169055565b610b706117c6565b60018111610bc05760405162461bcd60e51b815260206004820152600760248201527f746f6f206c6f77000000000000000000000000000000000000000000000000006044820152606401610b3e565b600a811115610c115760405162461bcd60e51b815260206004820152600860248201527f746f6f20686967680000000000000000000000000000000000000000000000006044820152606401610b3e565b600755565b600033610c24858285611820565b610c2f8585856118ac565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610ac69082908690610c74908790612958565b61166e565b610c833382611cc5565b50565b610c8e6117c6565b6013805460ff1916911515919091179055565b610ca96117c6565b600c821115610cfa5760405162461bcd60e51b815260206004820152601a60248201527f46656573206d757374206265206c657373207468616e203130250000000000006044820152606401610b3e565b600c811115610d4b5760405162461bcd60e51b815260206004820152601a60248201527f46656573206d757374206265206c657373207468616e203130250000000000006044820152606401610b3e565b600e829055600f81905560408051838152602081018390527f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a1910160405180910390a15050565b610d9a6117c6565b610da46000611e4a565b565b610db1823383611820565b610dbb8282611cc5565b5050565b610dc76117c6565b601054610100900460ff1680610ddb575080155b610e275760405162461bcd60e51b815260206004820152601060248201527f63616e742073657420616e796d6f7265000000000000000000000000000000006044820152606401610b3e565b60005b8251811015610ed4576000838281518110610e4757610e4761296b565b60209081029190910101516008549091506001600160a01b03808316911614801590610e8157506009546001600160a01b03828116911614155b8015610e9657506001600160a01b0381163014155b610e9f57600080fd5b6001600160a01b03166000908152601660205260409020805460ff191683151517905580610ecc81612981565b915050610e2a565b505050565b606060048054610a3590612908565b610ef06117c6565b6009546001600160a01b0390811690831603610f9a5760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260648201527f5061697273000000000000000000000000000000000000000000000000000000608482015260a401610b3e565b610dbb8282611eb4565b610fac6117c6565b601255565b610fb96117c6565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156110815760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610b3e565b610c2f828686840361166e565b600033610ac68185856118ac565b6110a46117c6565b600081116110b157600080fd5b600a55565b6110be6117c6565b6006546001600160a01b03908116908216036111425760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f20616464726573730000000000000000000000000000000000000000000000006064820152608401610b3e565b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b9060200160405180910390a150565b6111b66117c6565b601455565b6111c36117c6565b601080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60006112016005546001600160a01b031690565b6001600160a01b0316836001600160a01b0316148061122d57506005546001600160a01b038381169116145b8061124057506001600160a01b03831630145b8061125357506001600160a01b03821630145b9392505050565b6112626117c6565b6001600160a01b0381166000908152600c602052604090205460ff16156112f05760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f74727565000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b0381166000818152600c6020526040808220805460ff19166001179055517f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d9369190a250565b6113446117c6565b6010805460ff19166001179055565b61135b6117c6565b6103e861136760025490565b611371919061299b565b81116113bf5760405162461bcd60e51b815260206004820152600d60248201527f6d617820747820616d6f756e74000000000000000000000000000000000000006044820152606401610b3e565b601155565b6113cc6117c6565b6001600160a01b0381166114485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b3e565b610c8381611e4a565b6114596117c6565b306001600160a01b038216036114b15760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610b3e565b6001600160a01b0381166114eb5760405133904780156108fc02916000818181858888f19350505050158015610dbb573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561154d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157191906129bd565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156115da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fe91906129d6565b50505050565b61160c6117c6565b600b5460ff161561165f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720697320616c7265616479206f70656e2100000000000000006044820152606401610b3e565b600b805460ff19166001179055565b6001600160a01b0383166116e95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b0382166117655760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610da45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b3e565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146115fe578181101561189f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b3e565b6115fe848484840361166e565b6001600160a01b0383166119285760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b0382166119a45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b600954600160a01b900460ff166119c0576119c0838383611f9e565b600f54600e546001600160a01b03851660009081526015602052604090205460ff16158015611a0857506001600160a01b03841660009081526015602052604090205460ff16155b15611a5f57600b5460ff16611a5f5760405162461bcd60e51b815260206004820152601160248201527f5472616465206973206e6f74206f70656e0000000000000000000000000000006044820152606401610b3e565b82600003611a6e575050505050565b6009546001600160a01b0386166000908152600c602052604090205460ff600160a01b909204821615911680611abc57506001600160a01b0385166000908152600c602052604090205460ff165b15611ac5575060005b3060009081526020819052604081205490506000600a548210158015611aeb5750600082115b8015611b1057506001600160a01b0388166000908152600d602052604090205460ff16155b8015611b195750825b9050808015611b325750600954600160a01b900460ff16155b15611bf057600980547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116600160a01b179091556001600160a01b0316600090815260208190526040902054600754606490611b8f90836129f3565b611b99919061299b565b831115611bbd57606460075482611bb091906129f3565b611bba919061299b565b92505b611bc683612089565b50600980547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555b828015611c0a57506009546001600160a01b038881169116145b8015611c165750600084115b15611c525760006064611c2986896129f3565b611c33919061299b565b9050611c3f8188612a12565b9650611c4c893083612248565b50611cb0565b828015611c6c57506009546001600160a01b038981169116145b8015611c785750600085115b15611cb05760006064611c8b87896129f3565b611c95919061299b565b9050611ca18188612a12565b9650611cae893083612248565b505b611cbb888888612248565b5050505050505050565b6001600160a01b038216611d415760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b03821660009081526020819052604090205481811015611dd05760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611dff908490612a12565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152600d602052604090205481151560ff909116151503611f4a5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b3e565b6001600160a01b0382166000818152600d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831660009081526016602052604090205460ff16158015611fe057506001600160a01b03821660009081526016602052604090205460ff16155b61202c5760405162461bcd60e51b815260206004820152600e60248201527f6163636f756e74207374617475730000000000000000000000000000000000006044820152606401610b3e565b60105460ff16610ed45761204083836111ed565b15801561206657506001600160a01b03821660009081526015602052604090205460ff16155b15610ed457612075838361245f565b61207f8282612504565b610ed48282612556565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120be576120be61296b565b6001600160a01b03928316602091820292909201810191909152600854604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015612130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121549190612a25565b816001815181106121675761216761296b565b6001600160a01b0392831660209182029290920101526008546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906121c6908590600090869030904290600401612a42565b600060405180830381600087803b1580156121e057600080fd5b505af19250505080156121f1575060015b50600654479061220a906001600160a01b0316826125eb565b60408051848152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a1505050565b6001600160a01b0383166122c45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b0382166123405760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b038316600090815260208190526040902054818110156123cf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612406908490612958565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161245291815260200190565b60405180910390a36115fe565b60135460ff16801561247e57506009546001600160a01b038381169116145b15610dbb57601454326000908152601760205260409020546124a09042612a12565b10156124ee5760405162461bcd60e51b815260206004820152600c60248201527f62757920636f6f6c646f776e00000000000000000000000000000000000000006044820152606401610b3e565b3260009081526017602052604090204290555050565b601154811115610dbb5760405162461bcd60e51b815260206004820152601260248201527f416d6f756e742065786365656473206d617800000000000000000000000000006044820152606401610b3e565b6009546001600160a01b0390811690831603612570575050565b60125481612593846001600160a01b031660009081526020819052604090205490565b61259d9190612958565b1115610dbb5760405162461bcd60e51b815260206004820152601860248201527f4d617820686f6c64696e67206578636565646564206d617800000000000000006044820152606401610b3e565b816001600160a01b03166108fc82604051600060405180830381858888f193505050503d806000811461263a576040519150601f19603f3d011682016040523d82523d6000602084013e61263f565b606091505b5050505050565b600060208083528351808285015260005b8181101561267357858101830151858201604001528201612657565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c8357600080fd5b80356126b481612694565b919050565b600080604083850312156126cc57600080fd5b82356126d781612694565b946020939093013593505050565b6000602082840312156126f757600080fd5b813561125381612694565b60006020828403121561271457600080fd5b5035919050565b60008060006060848603121561273057600080fd5b833561273b81612694565b9250602084013561274b81612694565b929592945050506040919091013590565b8015158114610c8357600080fd5b80356126b48161275c565b60006020828403121561278757600080fd5b81356112538161275c565b600080604083850312156127a557600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156127dd57600080fd5b823567ffffffffffffffff808211156127f557600080fd5b818501915085601f83011261280957600080fd5b813560208282111561281d5761281d6127b4565b8160051b604051601f19603f83011681018181108682111715612842576128426127b4565b60405292835281830193508481018201928984111561286057600080fd5b948201945b8386101561288557612876866126a9565b85529482019493820193612865565b9650612894905087820161276a565b9450505050509250929050565b600080604083850312156128b457600080fd5b82356128bf81612694565b915060208301356128cf8161275c565b809150509250929050565b600080604083850312156128ed57600080fd5b82356128f881612694565b915060208301356128cf81612694565b600181811c9082168061291c57607f821691505b60208210810361293c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610acc57610acc612942565b634e487b7160e01b600052603260045260246000fd5b6000600019820361299457612994612942565b5060010190565b6000826129b857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156129cf57600080fd5b5051919050565b6000602082840312156129e857600080fd5b81516112538161275c565b6000816000190483118215151615612a0d57612a0d612942565b500290565b81810381811115610acc57610acc612942565b600060208284031215612a3757600080fd5b815161125381612694565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a925784516001600160a01b031683529383019391830191600101612a6d565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220d751e385e98b656c2568087e959e719fcf226081f784524c09f18a5f2b85f27064736f6c634300081000330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000ff3c930db4e8ea3c681f32bc32cfc12b8f69536b
Deployed Bytecode
0x60806040526004361061034e5760003560e01c80637d530192116101bb578063b62496f5116100f7578063e3084d9e11610095578063ec28438a1161006f578063ec28438a146109b1578063f2fde38b146109d1578063f9d0831a146109f1578063fb201b1d14610a1157600080fd5b8063e3084d9e1461095c578063e57f14e11461097c578063ec11ba341461099c57600080fd5b8063c29632bd116100d1578063c29632bd146108cb578063c72f6fc9146108eb578063dd62ed3e14610900578063e2f456051461094657600080fd5b8063b62496f51461084e578063bb85c6d11461087e578063c1adf7bc1461089e57600080fd5b80639c7d15a211610164578063a9059cbb1161013e578063a9059cbb146107bf578063ac57b470146107df578063ad5dff73146107fe578063afa4f3b21461082e57600080fd5b80639c7d15a2146107695780639fde54f51461077f578063a457c2d71461079f57600080fd5b806395d89b411161019557806395d89b41146107145780639a7a23d6146107295780639bc7c8c01461074957600080fd5b80637d530192146106c05780638c0b5e22146106e05780638da5cb5b146106f657600080fd5b80634589aaea1161028a5780636457c4c31161023357806370a082311161020d57806370a0823114610635578063715018a61461066b57806375f0a8741461068057806379cc6790146106a057600080fd5b80636457c4c3146105df5780636db79437146105ff578063704fbfe51461061f57600080fd5b80634fbee193116102645780634fbee1931461055c57806361242bdd14610595578063617fe0ed146105c557600080fd5b80634589aaea1461050c578063470624021461052657806349bd5a5e1461053c57600080fd5b806320518758116102f7578063313ce567116102d1578063313ce5671461049a578063333e6f06146104b657806339509351146104cc57806342966c68146104ec57600080fd5b8063205187581461044457806323b872dd146104645780632b14ca561461048457600080fd5b80631694505e116103285780631694505e146103cb57806316a2f82a1461040357806318160ddd1461042557600080fd5b8063064a59d01461035a57806306fdde0314610389578063095ea7b3146103ab57600080fd5b3661035557005b600080fd5b34801561036657600080fd5b50600b546103749060ff1681565b60405190151581526020015b60405180910390f35b34801561039557600080fd5b5061039e610a26565b6040516103809190612646565b3480156103b757600080fd5b506103746103c63660046126b9565b610ab8565b3480156103d757600080fd5b506008546103eb906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b34801561040f57600080fd5b5061042361041e3660046126e5565b610ad2565b005b34801561043157600080fd5b506002545b604051908152602001610380565b34801561045057600080fd5b5061042361045f366004612702565b610b68565b34801561047057600080fd5b5061037461047f36600461271b565b610c16565b34801561049057600080fd5b50610436600e5481565b3480156104a657600080fd5b5060405160128152602001610380565b3480156104c257600080fd5b5061043660125481565b3480156104d857600080fd5b506103746104e73660046126b9565b610c3a565b3480156104f857600080fd5b50610423610507366004612702565b610c79565b34801561051857600080fd5b506010546103749060ff1681565b34801561053257600080fd5b50610436600f5481565b34801561054857600080fd5b506009546103eb906001600160a01b031681565b34801561056857600080fd5b506103746105773660046126e5565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156105a157600080fd5b506103746105b03660046126e5565b60166020526000908152604090205460ff1681565b3480156105d157600080fd5b506013546103749060ff1681565b3480156105eb57600080fd5b506104236105fa366004612775565b610c86565b34801561060b57600080fd5b5061042361061a366004612792565b610ca1565b34801561062b57600080fd5b5061043660145481565b34801561064157600080fd5b506104366106503660046126e5565b6001600160a01b031660009081526020819052604090205490565b34801561067757600080fd5b50610423610d92565b34801561068c57600080fd5b506006546103eb906001600160a01b031681565b3480156106ac57600080fd5b506104236106bb3660046126b9565b610da6565b3480156106cc57600080fd5b506104236106db3660046127ca565b610dbf565b3480156106ec57600080fd5b5061043660115481565b34801561070257600080fd5b506005546001600160a01b03166103eb565b34801561072057600080fd5b5061039e610ed9565b34801561073557600080fd5b506104236107443660046128a1565b610ee8565b34801561075557600080fd5b50610423610764366004612702565b610fa4565b34801561077557600080fd5b5061043660075481565b34801561078b57600080fd5b5061042361079a3660046128a1565b610fb1565b3480156107ab57600080fd5b506103746107ba3660046126b9565b610fe4565b3480156107cb57600080fd5b506103746107da3660046126b9565b61108e565b3480156107eb57600080fd5b5060105461037490610100900460ff1681565b34801561080a57600080fd5b506103746108193660046126e5565b60156020526000908152604090205460ff1681565b34801561083a57600080fd5b50610423610849366004612702565b61109c565b34801561085a57600080fd5b506103746108693660046126e5565b600d6020526000908152604090205460ff1681565b34801561088a57600080fd5b506104236108993660046126e5565b6110b6565b3480156108aa57600080fd5b506104366108b93660046126e5565b60176020526000908152604090205481565b3480156108d757600080fd5b506104236108e6366004612702565b6111ae565b3480156108f757600080fd5b506104236111bb565b34801561090c57600080fd5b5061043661091b3660046128da565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561095257600080fd5b50610436600a5481565b34801561096857600080fd5b506103746109773660046128da565b6111ed565b34801561098857600080fd5b506104236109973660046126e5565b61125a565b3480156109a857600080fd5b5061042361133c565b3480156109bd57600080fd5b506104236109cc366004612702565b611353565b3480156109dd57600080fd5b506104236109ec3660046126e5565b6113c4565b3480156109fd57600080fd5b50610423610a0c3660046126e5565b611451565b348015610a1d57600080fd5b50610423611604565b606060038054610a3590612908565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6190612908565b8015610aae5780601f10610a8357610100808354040283529160200191610aae565b820191906000526020600020905b815481529060010190602001808311610a9157829003601f168201915b5050505050905090565b600033610ac681858561166e565b60019150505b92915050565b610ada6117c6565b6001600160a01b0381166000908152600c602052604090205460ff16610b475760405162461bcd60e51b815260206004820152601860248201527f4163636f756e7420616c726561647920696e636c75646564000000000000000060448201526064015b60405180910390fd5b6001600160a01b03166000908152600c60205260409020805460ff19169055565b610b706117c6565b60018111610bc05760405162461bcd60e51b815260206004820152600760248201527f746f6f206c6f77000000000000000000000000000000000000000000000000006044820152606401610b3e565b600a811115610c115760405162461bcd60e51b815260206004820152600860248201527f746f6f20686967680000000000000000000000000000000000000000000000006044820152606401610b3e565b600755565b600033610c24858285611820565b610c2f8585856118ac565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610ac69082908690610c74908790612958565b61166e565b610c833382611cc5565b50565b610c8e6117c6565b6013805460ff1916911515919091179055565b610ca96117c6565b600c821115610cfa5760405162461bcd60e51b815260206004820152601a60248201527f46656573206d757374206265206c657373207468616e203130250000000000006044820152606401610b3e565b600c811115610d4b5760405162461bcd60e51b815260206004820152601a60248201527f46656573206d757374206265206c657373207468616e203130250000000000006044820152606401610b3e565b600e829055600f81905560408051838152602081018390527f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a1910160405180910390a15050565b610d9a6117c6565b610da46000611e4a565b565b610db1823383611820565b610dbb8282611cc5565b5050565b610dc76117c6565b601054610100900460ff1680610ddb575080155b610e275760405162461bcd60e51b815260206004820152601060248201527f63616e742073657420616e796d6f7265000000000000000000000000000000006044820152606401610b3e565b60005b8251811015610ed4576000838281518110610e4757610e4761296b565b60209081029190910101516008549091506001600160a01b03808316911614801590610e8157506009546001600160a01b03828116911614155b8015610e9657506001600160a01b0381163014155b610e9f57600080fd5b6001600160a01b03166000908152601660205260409020805460ff191683151517905580610ecc81612981565b915050610e2a565b505050565b606060048054610a3590612908565b610ef06117c6565b6009546001600160a01b0390811690831603610f9a5760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260648201527f5061697273000000000000000000000000000000000000000000000000000000608482015260a401610b3e565b610dbb8282611eb4565b610fac6117c6565b601255565b610fb96117c6565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156110815760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610b3e565b610c2f828686840361166e565b600033610ac68185856118ac565b6110a46117c6565b600081116110b157600080fd5b600a55565b6110be6117c6565b6006546001600160a01b03908116908216036111425760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f20616464726573730000000000000000000000000000000000000000000000006064820152608401610b3e565b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b9060200160405180910390a150565b6111b66117c6565b601455565b6111c36117c6565b601080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60006112016005546001600160a01b031690565b6001600160a01b0316836001600160a01b0316148061122d57506005546001600160a01b038381169116145b8061124057506001600160a01b03831630145b8061125357506001600160a01b03821630145b9392505050565b6112626117c6565b6001600160a01b0381166000908152600c602052604090205460ff16156112f05760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f74727565000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b0381166000818152600c6020526040808220805460ff19166001179055517f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d9369190a250565b6113446117c6565b6010805460ff19166001179055565b61135b6117c6565b6103e861136760025490565b611371919061299b565b81116113bf5760405162461bcd60e51b815260206004820152600d60248201527f6d617820747820616d6f756e74000000000000000000000000000000000000006044820152606401610b3e565b601155565b6113cc6117c6565b6001600160a01b0381166114485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b3e565b610c8381611e4a565b6114596117c6565b306001600160a01b038216036114b15760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610b3e565b6001600160a01b0381166114eb5760405133904780156108fc02916000818181858888f19350505050158015610dbb573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561154d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157191906129bd565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156115da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fe91906129d6565b50505050565b61160c6117c6565b600b5460ff161561165f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720697320616c7265616479206f70656e2100000000000000006044820152606401610b3e565b600b805460ff19166001179055565b6001600160a01b0383166116e95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b0382166117655760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610da45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b3e565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146115fe578181101561189f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b3e565b6115fe848484840361166e565b6001600160a01b0383166119285760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b0382166119a45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b600954600160a01b900460ff166119c0576119c0838383611f9e565b600f54600e546001600160a01b03851660009081526015602052604090205460ff16158015611a0857506001600160a01b03841660009081526015602052604090205460ff16155b15611a5f57600b5460ff16611a5f5760405162461bcd60e51b815260206004820152601160248201527f5472616465206973206e6f74206f70656e0000000000000000000000000000006044820152606401610b3e565b82600003611a6e575050505050565b6009546001600160a01b0386166000908152600c602052604090205460ff600160a01b909204821615911680611abc57506001600160a01b0385166000908152600c602052604090205460ff165b15611ac5575060005b3060009081526020819052604081205490506000600a548210158015611aeb5750600082115b8015611b1057506001600160a01b0388166000908152600d602052604090205460ff16155b8015611b195750825b9050808015611b325750600954600160a01b900460ff16155b15611bf057600980547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116600160a01b179091556001600160a01b0316600090815260208190526040902054600754606490611b8f90836129f3565b611b99919061299b565b831115611bbd57606460075482611bb091906129f3565b611bba919061299b565b92505b611bc683612089565b50600980547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555b828015611c0a57506009546001600160a01b038881169116145b8015611c165750600084115b15611c525760006064611c2986896129f3565b611c33919061299b565b9050611c3f8188612a12565b9650611c4c893083612248565b50611cb0565b828015611c6c57506009546001600160a01b038981169116145b8015611c785750600085115b15611cb05760006064611c8b87896129f3565b611c95919061299b565b9050611ca18188612a12565b9650611cae893083612248565b505b611cbb888888612248565b5050505050505050565b6001600160a01b038216611d415760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b03821660009081526020819052604090205481811015611dd05760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611dff908490612a12565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152600d602052604090205481151560ff909116151503611f4a5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b3e565b6001600160a01b0382166000818152600d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831660009081526016602052604090205460ff16158015611fe057506001600160a01b03821660009081526016602052604090205460ff16155b61202c5760405162461bcd60e51b815260206004820152600e60248201527f6163636f756e74207374617475730000000000000000000000000000000000006044820152606401610b3e565b60105460ff16610ed45761204083836111ed565b15801561206657506001600160a01b03821660009081526015602052604090205460ff16155b15610ed457612075838361245f565b61207f8282612504565b610ed48282612556565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120be576120be61296b565b6001600160a01b03928316602091820292909201810191909152600854604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015612130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121549190612a25565b816001815181106121675761216761296b565b6001600160a01b0392831660209182029290920101526008546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906121c6908590600090869030904290600401612a42565b600060405180830381600087803b1580156121e057600080fd5b505af19250505080156121f1575060015b50600654479061220a906001600160a01b0316826125eb565b60408051848152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a1505050565b6001600160a01b0383166122c45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b0382166123405760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b038316600090815260208190526040902054818110156123cf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610b3e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612406908490612958565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161245291815260200190565b60405180910390a36115fe565b60135460ff16801561247e57506009546001600160a01b038381169116145b15610dbb57601454326000908152601760205260409020546124a09042612a12565b10156124ee5760405162461bcd60e51b815260206004820152600c60248201527f62757920636f6f6c646f776e00000000000000000000000000000000000000006044820152606401610b3e565b3260009081526017602052604090204290555050565b601154811115610dbb5760405162461bcd60e51b815260206004820152601260248201527f416d6f756e742065786365656473206d617800000000000000000000000000006044820152606401610b3e565b6009546001600160a01b0390811690831603612570575050565b60125481612593846001600160a01b031660009081526020819052604090205490565b61259d9190612958565b1115610dbb5760405162461bcd60e51b815260206004820152601860248201527f4d617820686f6c64696e67206578636565646564206d617800000000000000006044820152606401610b3e565b816001600160a01b03166108fc82604051600060405180830381858888f193505050503d806000811461263a576040519150601f19603f3d011682016040523d82523d6000602084013e61263f565b606091505b5050505050565b600060208083528351808285015260005b8181101561267357858101830151858201604001528201612657565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c8357600080fd5b80356126b481612694565b919050565b600080604083850312156126cc57600080fd5b82356126d781612694565b946020939093013593505050565b6000602082840312156126f757600080fd5b813561125381612694565b60006020828403121561271457600080fd5b5035919050565b60008060006060848603121561273057600080fd5b833561273b81612694565b9250602084013561274b81612694565b929592945050506040919091013590565b8015158114610c8357600080fd5b80356126b48161275c565b60006020828403121561278757600080fd5b81356112538161275c565b600080604083850312156127a557600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156127dd57600080fd5b823567ffffffffffffffff808211156127f557600080fd5b818501915085601f83011261280957600080fd5b813560208282111561281d5761281d6127b4565b8160051b604051601f19603f83011681018181108682111715612842576128426127b4565b60405292835281830193508481018201928984111561286057600080fd5b948201945b8386101561288557612876866126a9565b85529482019493820193612865565b9650612894905087820161276a565b9450505050509250929050565b600080604083850312156128b457600080fd5b82356128bf81612694565b915060208301356128cf8161275c565b809150509250929050565b600080604083850312156128ed57600080fd5b82356128f881612694565b915060208301356128cf81612694565b600181811c9082168061291c57607f821691505b60208210810361293c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610acc57610acc612942565b634e487b7160e01b600052603260045260246000fd5b6000600019820361299457612994612942565b5060010190565b6000826129b857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156129cf57600080fd5b5051919050565b6000602082840312156129e857600080fd5b81516112538161275c565b6000816000190483118215151615612a0d57612a0d612942565b500290565b81810381811115610acc57610acc612942565b600060208284031215612a3757600080fd5b815161125381612694565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a925784516001600160a01b031683529383019391830191600101612a6d565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220d751e385e98b656c2568087e959e719fcf226081f784524c09f18a5f2b85f27064736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000ff3c930db4e8ea3c681f32bc32cfc12b8f69536b
-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : operator (address): 0xff3C930dB4e8EA3c681F32Bc32CFC12b8f69536b
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000ff3c930db4e8ea3c681f32bc32cfc12b8f69536b
Deployed Bytecode Sourcemap
29635:11038:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30142:28;;;;;;;;;;-1:-1:-1;30142:28:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;30142:28:0;;;;;;;;5993:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8344:201::-;;;;;;;;;;-1:-1:-1;8344:201:0;;;;;:::i;:::-;;:::i;29824:41::-;;;;;;;;;;-1:-1:-1;29824:41:0;;;;-1:-1:-1;;;;;29824:41:0;;;;;;-1:-1:-1;;;;;1627:55:1;;;1609:74;;1597:2;1582:18;29824:41:0;1436:253:1;34021:190:0;;;;;;;;;;-1:-1:-1;34021:190:0;;;;;:::i;:::-;;:::i;:::-;;7113:108;;;;;;;;;;-1:-1:-1;7201:12:0;;7113:108;;;2092:25:1;;;2080:2;2065:18;7113:108:0;1946:177:1;37598:205:0;;;;;;;;;;-1:-1:-1;37598:205:0;;;;;:::i;:::-;;:::i;9125:295::-;;;;;;;;;;-1:-1:-1;9125:295:0;;;;;:::i;:::-;;:::i;30721:22::-;;;;;;;;;;;;;;;;6955:93;;;;;;;;;;-1:-1:-1;6955:93:0;;7038:2;2916:36:1;;2904:2;2889:18;6955:93:0;2774:184:1;30906:25:0;;;;;;;;;;;;;;;;9829:238;;;;;;;;;;-1:-1:-1;9829:238:0;;;;;:::i;:::-;;:::i;17156:91::-;;;;;;;;;;-1:-1:-1;17156:91:0;;;;;:::i;:::-;;:::i;30780:46::-;;;;;;;;;;-1:-1:-1;30780:46:0;;;;;;;;30750:21;;;;;;;;;;;;;;;;29872:29;;;;;;;;;;-1:-1:-1;29872:29:0;;;;-1:-1:-1;;;;;29872:29:0;;;34219:126;;;;;;;;;;-1:-1:-1;34219:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;34309:28:0;34285:4;34309:28;;;:19;:28;;;;;;;;;34219:126;31067:45;;;;;;;;;;-1:-1:-1;31067:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30938:37;;;;;;;;;;-1:-1:-1;30938:37:0;;;;;;;;40444:108;;;;;;;;;;-1:-1:-1;40444:108:0;;;;;:::i;:::-;;:::i;34353:311::-;;;;;;;;;;-1:-1:-1;34353:311:0;;;;;:::i;:::-;;:::i;30982:31::-;;;;;;;;;;;;;;;;7284:127;;;;;;;;;;-1:-1:-1;7284:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;7385:18:0;7358:7;7385:18;;;;;;;;;;;;7284:127;19462:103;;;;;;;;;;;;;:::i;29745:30::-;;;;;;;;;;-1:-1:-1;29745:30:0;;;;-1:-1:-1;;;;;29745:30:0;;;17566:164;;;;;;;;;;-1:-1:-1;17566:164:0;;;;;:::i;:::-;;:::i;39678:438::-;;;;;;;;;;-1:-1:-1;39678:438:0;;;;;:::i;:::-;;:::i;30873:26::-;;;;;;;;;;;;;;;;18814:87;;;;;;;;;;-1:-1:-1;18887:6:0;;-1:-1:-1;;;;;18887:6:0;18814:87;;6212:104;;;;;;;;;;;;;:::i;33150:256::-;;;;;;;;;;-1:-1:-1;33150:256:0;;;;;:::i;:::-;;:::i;40219:106::-;;;;;;;;;;-1:-1:-1;40219:106:0;;;;;:::i;:::-;;:::i;29782:35::-;;;;;;;;;;;;;;;;40333:103;;;;;;;;;;-1:-1:-1;40333:103:0;;;;;:::i;:::-;;:::i;10570:436::-;;;;;;;;;;-1:-1:-1;10570:436:0;;;;;:::i;:::-;;:::i;7617:193::-;;;;;;;;;;-1:-1:-1;7617:193:0;;;;;:::i;:::-;;:::i;30833:33::-;;;;;;;;;;-1:-1:-1;30833:33:0;;;;;;;;;;;31020:40;;;;;;;;;;-1:-1:-1;31020:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37439:151;;;;;;;;;;-1:-1:-1;37439:151:0;;;;;:::i;:::-;;:::i;30238:57::-;;;;;;;;;;-1:-1:-1;30238:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34672:283;;;;;;;;;;-1:-1:-1;34672:283:0;;;;;:::i;:::-;;:::i;31119:42::-;;;;;;;;;;-1:-1:-1;31119:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;40560:110;;;;;;;;;;-1:-1:-1;40560:110:0;;;;;:::i;:::-;;:::i;40124:87::-;;;;;;;;;;;;;:::i;7873:151::-;;;;;;;;;;-1:-1:-1;7873:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;7989:18:0;;;7962:7;7989:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7873:151;30102:33;;;;;;;;;;;;;;;;39046:303;;;;;;;;;;-1:-1:-1;39046:303:0;;;;;:::i;:::-;;:::i;33767:246::-;;;;;;;;;;-1:-1:-1;33767:246:0;;;;;:::i;:::-;;:::i;39357:122::-;;;;;;;;;;;;;:::i;39487:183::-;;;;;;;;;;-1:-1:-1;39487:183:0;;;;;:::i;:::-;;:::i;19720:201::-;;;;;;;;;;-1:-1:-1;19720:201:0;;;;;:::i;:::-;;:::i;32531:441::-;;;;;;;;;;-1:-1:-1;32531:441:0;;;;;:::i;:::-;;:::i;32370:153::-;;;;;;;;;;;;;:::i;5993:100::-;6047:13;6080:5;6073:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5993:100;:::o;8344:201::-;8427:4;3881:10;8483:32;3881:10;8499:7;8508:6;8483:8;:32::i;:::-;8533:4;8526:11;;;8344:201;;;;;:::o;34021:190::-;18700:13;:11;:13::i;:::-;-1:-1:-1;;;;;34099:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;34091:65;;;::::0;-1:-1:-1;;;34091:65:0;;6817:2:1;34091:65:0::1;::::0;::::1;6799:21:1::0;6856:2;6836:18;;;6829:30;6895:26;6875:18;;;6868:54;6939:18;;34091:65:0::1;;;;;;;;;-1:-1:-1::0;;;;;34167:28:0::1;34198:5;34167:28:::0;;;:19:::1;:28;::::0;;;;:36;;-1:-1:-1;;34167:36:0::1;::::0;;34021:190::o;37598:205::-;18700:13;:11;:13::i;:::-;37696:1:::1;37684:9;:13;37676:33;;;::::0;-1:-1:-1;;;37676:33:0;;7170:2:1;37676:33:0::1;::::0;::::1;7152:21:1::0;7209:1;7189:18;;;7182:29;7247:9;7227:18;;;7220:37;7274:18;;37676:33:0::1;6968:330:1::0;37676:33:0::1;37741:2;37728:9;:15;;37720:36;;;::::0;-1:-1:-1;;;37720:36:0;;7505:2:1;37720:36:0::1;::::0;::::1;7487:21:1::0;7544:1;7524:18;;;7517:29;7582:10;7562:18;;;7555:38;7610:18;;37720:36:0::1;7303:331:1::0;37720:36:0::1;37767:16;:28:::0;37598:205::o;9125:295::-;9256:4;3881:10;9314:38;9330:4;3881:10;9345:6;9314:15;:38::i;:::-;9363:27;9373:4;9379:2;9383:6;9363:9;:27::i;:::-;-1:-1:-1;9408:4:0;;9125:295;-1:-1:-1;;;;9125:295:0:o;9829:238::-;3881:10;9917:4;7989:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;7989:27:0;;;;;;;;;;9917:4;;3881:10;9973:64;;3881:10;;7989:27;;9998:38;;10026:10;;9998:38;:::i;:::-;9973:8;:64::i;17156:91::-;17212:27;3881:10;17232:6;17212:5;:27::i;:::-;17156:91;:::o;40444:108::-;18700:13;:11;:13::i;:::-;40517:18:::1;:27:::0;;-1:-1:-1;;40517:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40444:108::o;34353:311::-;18700:13;:11;:13::i;:::-;34458:2:::1;34446:8;:14;;34438:53;;;::::0;-1:-1:-1;;;34438:53:0;;8160:2:1;34438:53:0::1;::::0;::::1;8142:21:1::0;8199:2;8179:18;;;8172:30;8238:28;8218:18;;;8211:56;8284:18;;34438:53:0::1;7958:350:1::0;34438:53:0::1;34521:2;34510:7;:13;;34502:52;;;::::0;-1:-1:-1;;;34502:52:0;;8160:2:1;34502:52:0::1;::::0;::::1;8142:21:1::0;8199:2;8179:18;;;8172:30;8238:28;8218:18;;;8211:56;8284:18;;34502:52:0::1;7958:350:1::0;34502:52:0::1;34565:7;:18:::0;;;34594:6:::1;:16:::0;;;34628:28:::1;::::0;;8487:25:1;;;8543:2;8528:18;;8521:34;;;34628:28:0::1;::::0;8460:18:1;34628:28:0::1;;;;;;;34353:311:::0;;:::o;19462:103::-;18700:13;:11;:13::i;:::-;19527:30:::1;19554:1;19527:18;:30::i;:::-;19462:103::o:0;17566:164::-;17643:46;17659:7;3881:10;17682:6;17643:15;:46::i;:::-;17700:22;17706:7;17715:6;17700:5;:22::i;:::-;17566:164;;:::o;39678:438::-;18700:13;:11;:13::i;:::-;39783:14:::1;::::0;::::1;::::0;::::1;;;::::0;:33:::1;;-1:-1:-1::0;39801:15:0;::::1;39783:33;39775:62;;;::::0;-1:-1:-1;;;39775:62:0;;8768:2:1;39775:62:0::1;::::0;::::1;8750:21:1::0;8807:2;8787:18;;;8780:30;8846:18;8826;;;8819:46;8882:18;;39775:62:0::1;8566:340:1::0;39775:62:0::1;39855:9;39850:259;39870:8;:15;39866:1;:19;39850:259;;;39907:15;39925:8;39934:1;39925:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;39978:15:::1;::::0;39925:11;;-1:-1:-1;;;;;;39959:35:0;;::::1;39978:15:::0;::::1;39959:35;::::0;::::1;::::0;:63:::1;;-1:-1:-1::0;40009:13:0::1;::::0;-1:-1:-1;;;;;39998:24:0;;::::1;40009:13:::0;::::1;39998:24;;39959:63;:91;;;;-1:-1:-1::0;;;;;;40026:24:0;::::1;40045:4;40026:24;;39959:91;39951:100;;;::::0;::::1;;-1:-1:-1::0;;;;;40066:22:0::1;;::::0;;;:13:::1;:22;::::0;;;;:31;;-1:-1:-1;;40066:31:0::1;::::0;::::1;;;::::0;;39887:3;::::1;::::0;::::1;:::i;:::-;;;;39850:259;;;;39678:438:::0;;:::o;6212:104::-;6268:13;6301:7;6294:14;;;;;:::i;33150:256::-;18700:13;:11;:13::i;:::-;33257::::1;::::0;-1:-1:-1;;;;;33257:13:0;;::::1;33249:21:::0;;::::1;::::0;33241:103:::1;;;::::0;-1:-1:-1;;;33241:103:0;;9502:2:1;33241:103:0::1;::::0;::::1;9484:21:1::0;9541:2;9521:18;;;9514:30;9580:34;9560:18;;;9553:62;9651:34;9631:18;;;9624:62;9723:7;9702:19;;;9695:36;9748:19;;33241:103:0::1;9300:473:1::0;33241:103:0::1;33357:41;33386:4;33392:5;33357:28;:41::i;40219:106::-:0;18700:13;:11;:13::i;:::-;40293:10:::1;:24:::0;40219:106::o;40333:103::-;18700:13;:11;:13::i;:::-;-1:-1:-1;;;;;40406:13:0;;;::::1;;::::0;;;:8:::1;:13;::::0;;;;:22;;-1:-1:-1;;40406:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40333:103::o;10570:436::-;3881:10;10663:4;7989:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;7989:27:0;;;;;;;;;;10663:4;;3881:10;10810:15;10790:16;:35;;10782:85;;;;-1:-1:-1;;;10782:85:0;;9980:2:1;10782:85:0;;;9962:21:1;10019:2;9999:18;;;9992:30;10058:34;10038:18;;;10031:62;10129:7;10109:18;;;10102:35;10154:19;;10782:85:0;9778:401:1;10782:85:0;10903:60;10912:5;10919:7;10947:15;10928:16;:34;10903:8;:60::i;7617:193::-;7696:4;3881:10;7752:28;3881:10;7769:2;7773:6;7752:9;:28::i;37439:151::-;18700:13;:11;:13::i;:::-;37539:1:::1;37527:9;:13;37519:22;;;::::0;::::1;;37552:18;:30:::0;37439:151::o;34672:283::-;18700:13;:11;:13::i;:::-;34787:15:::1;::::0;-1:-1:-1;;;;;34787:15:0;;::::1;34767:35:::0;;::::1;::::0;34759:88:::1;;;::::0;-1:-1:-1;;;34759:88:0;;10386:2:1;34759:88:0::1;::::0;::::1;10368:21:1::0;10425:2;10405:18;;;10398:30;10464:34;10444:18;;;10437:62;10535:10;10515:18;;;10508:38;10563:19;;34759:88:0::1;10184:404:1::0;34759:88:0::1;34858:15;:34:::0;;;::::1;-1:-1:-1::0;;;;;34858:34:0;::::1;::::0;;::::1;::::0;;;34908:39:::1;::::0;1609:74:1;;;34908:39:0::1;::::0;1597:2:1;1582:18;34908:39:0::1;;;;;;;34672:283:::0;:::o;40560:110::-;18700:13;:11;:13::i;:::-;40636:11:::1;:26:::0;40560:110::o;40124:87::-;18700:13;:11;:13::i;:::-;40181:14:::1;:22:::0;;;::::1;::::0;;40124:87::o;39046:303::-;39121:4;39268:7;18887:6;;-1:-1:-1;;;;;18887:6:0;;18814:87;39268:7;-1:-1:-1;;;;;39260:15:0;:4;-1:-1:-1;;;;;39260:15:0;;:32;;;-1:-1:-1;18887:6:0;;-1:-1:-1;;;;;39279:13:0;;;18887:6;;39279:13;39260:32;:57;;;-1:-1:-1;;;;;;39296:21:0;;39312:4;39296:21;39260:57;:80;;;-1:-1:-1;;;;;;39321:19:0;;39335:4;39321:19;39260:80;39252:89;39046:303;-1:-1:-1;;;39046:303:0:o;33767:246::-;18700:13;:11;:13::i;:::-;-1:-1:-1;;;;;33848:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;33847:29;33839:78;;;::::0;-1:-1:-1;;;33839:78:0;;10795:2:1;33839:78:0::1;::::0;::::1;10777:21:1::0;10834:2;10814:18;;;10807:30;10873:34;10853:18;;;10846:62;10944:6;10924:18;;;10917:34;10968:19;;33839:78:0::1;10593:400:1::0;33839:78:0::1;-1:-1:-1::0;;;;;33928:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:35;;-1:-1:-1;;33928:35:0::1;33959:4;33928:35;::::0;;33981:24;::::1;::::0;33928:28;33981:24:::1;33767:246:::0;:::o;39357:122::-;18700:13;:11;:13::i;:::-;39430:34:::1;:41:::0;;-1:-1:-1;;39430:41:0::1;39467:4;39430:41;::::0;;39357:122::o;39487:183::-;18700:13;:11;:13::i;:::-;39603:4:::1;39587:13;7201:12:::0;;;7113:108;39587:13:::1;:20;;;;:::i;:::-;39571:12;:36;39563:62;;;::::0;-1:-1:-1;;;39563:62:0;;11479:2:1;39563:62:0::1;::::0;::::1;11461:21:1::0;11518:2;11498:18;;;11491:30;11557:15;11537:18;;;11530:43;11590:18;;39563:62:0::1;11277:337:1::0;39563:62:0::1;39636:11;:26:::0;39487:183::o;19720:201::-;18700:13;:11;:13::i;:::-;-1:-1:-1;;;;;19809:22:0;::::1;19801:73;;;::::0;-1:-1:-1;;;19801:73:0;;11821:2:1;19801:73:0::1;::::0;::::1;11803:21:1::0;11860:2;11840:18;;;11833:30;11899:34;11879:18;;;11872:62;11970:8;11950:18;;;11943:36;11996:19;;19801:73:0::1;11619:402:1::0;19801:73:0::1;19885:28;19904:8;19885:18;:28::i;32531:441::-:0;18700:13;:11;:13::i;:::-;32627:4:::1;-1:-1:-1::0;;;;;32610:22:0;::::1;::::0;32602:67:::1;;;::::0;-1:-1:-1;;;32602:67:0;;12228:2:1;32602:67:0::1;::::0;::::1;12210:21:1::0;;;12247:18;;;12240:30;12306:34;12286:18;;;12279:62;12358:18;;32602:67:0::1;12026:356:1::0;32602:67:0::1;-1:-1:-1::0;;;;;32684:21:0;::::1;32680:126;;32722:51;::::0;32730:10:::1;::::0;32751:21:::1;32722:51:::0;::::1;;;::::0;::::1;::::0;;;32751:21;32730:10;32722:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;32680:126;32878:35;::::0;;;;32907:4:::1;32878:35;::::0;::::1;1609:74:1::0;32843:5:0;;32816:17:::1;::::0;-1:-1:-1;;;;;32878:20:0;::::1;::::0;::::1;::::0;1582:18:1;;32878:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32924:40;::::0;;;;32944:10:::1;32924:40;::::0;::::1;12750:74:1::0;12840:18;;;12833:34;;;32860:53:0;;-1:-1:-1;;;;;;32924:19:0;::::1;::::0;::::1;::::0;12723:18:1;;32924:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32591:381;;32531:441:::0;:::o;32370:153::-;18700:13;:11;:13::i;:::-;32427:16:::1;::::0;::::1;;:25;32419:62;;;::::0;-1:-1:-1;;;32419:62:0;;13330:2:1;32419:62:0::1;::::0;::::1;13312:21:1::0;13369:2;13349:18;;;13342:30;13408:26;13388:18;;;13381:54;13452:18;;32419:62:0::1;13128:348:1::0;32419:62:0::1;32492:16;:23:::0;;-1:-1:-1;;32492:23:0::1;32511:4;32492:23;::::0;;32370:153::o;14195:380::-;-1:-1:-1;;;;;14331:19:0;;14323:68;;;;-1:-1:-1;;;14323:68:0;;13683:2:1;14323:68:0;;;13665:21:1;13722:2;13702:18;;;13695:30;13761:34;13741:18;;;13734:62;13832:6;13812:18;;;13805:34;13856:19;;14323:68:0;13481:400:1;14323:68:0;-1:-1:-1;;;;;14410:21:0;;14402:68;;;;-1:-1:-1;;;14402:68:0;;14088:2:1;14402:68:0;;;14070:21:1;14127:2;14107:18;;;14100:30;14166:34;14146:18;;;14139:62;14237:4;14217:18;;;14210:32;14259:19;;14402:68:0;13886:398:1;14402:68:0;-1:-1:-1;;;;;14483:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14535:32;;2092:25:1;;;14535:32:0;;2065:18:1;14535:32:0;;;;;;;14195:380;;;:::o;18979:132::-;18887:6;;-1:-1:-1;;;;;18887:6:0;3881:10;19043:23;19035:68;;;;-1:-1:-1;;;19035:68:0;;14491:2:1;19035:68:0;;;14473:21:1;;;14510:18;;;14503:30;14569:34;14549:18;;;14542:62;14621:18;;19035:68:0;14289:356:1;14866:453:0;-1:-1:-1;;;;;7989:18:0;;;15001:24;7989:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;15068:37:0;;15064:248;;15150:6;15130:16;:26;;15122:68;;;;-1:-1:-1;;;15122:68:0;;14852:2:1;15122:68:0;;;14834:21:1;14891:2;14871:18;;;14864:30;14930:31;14910:18;;;14903:59;14979:18;;15122:68:0;14650:353:1;15122:68:0;15234:51;15243:5;15250:7;15278:6;15259:16;:25;15234:8;:51::i;34963:1800::-;-1:-1:-1;;;;;35095:18:0;;35087:68;;;;-1:-1:-1;;;35087:68:0;;15210:2:1;35087:68:0;;;15192:21:1;15249:2;15229:18;;;15222:30;15288:34;15268:18;;;15261:62;15359:7;15339:18;;;15332:35;15384:19;;35087:68:0;15008:401:1;35087:68:0;-1:-1:-1;;;;;35174:16:0;;35166:64;;;;-1:-1:-1;;;35166:64:0;;15616:2:1;35166:64:0;;;15598:21:1;15655:2;15635:18;;;15628:30;15694:34;15674:18;;;15667:62;15765:5;15745:18;;;15738:33;15788:19;;35166:64:0;15414:399:1;35166:64:0;35248:8;;-1:-1:-1;;;35248:8:0;;;;35243:66;;35273:24;35280:4;35286:2;35290:6;35273;:24::i;:::-;35336:6;;35369:7;;-1:-1:-1;;;;;35394:14:0;;35321:12;35394:14;;;:8;:14;;;;;;;;35393:15;:32;;;;-1:-1:-1;;;;;;35413:12:0;;;;;;:8;:12;;;;;;;;35412:13;35393:32;35389:111;;;35450:16;;;;35442:46;;;;-1:-1:-1;;;35442:46:0;;16020:2:1;35442:46:0;;;16002:21:1;16059:2;16039:18;;;16032:30;16098:19;16078:18;;;16071:47;16135:18;;35442:46:0;15818:341:1;35442:46:0;35516:6;35526:1;35516:11;35512:50;;35544:7;;34963:1800;;;:::o;35512:50::-;35590:8;;-1:-1:-1;;;;;35615:25:0;;35574:12;35615:25;;;:19;:25;;;;;;35590:8;-1:-1:-1;;;35590:8:0;;;;;35589:9;;35615:25;;:52;;-1:-1:-1;;;;;;35644:23:0;;;;;;:19;:23;;;;;;;;35615:52;35611:100;;;-1:-1:-1;35694:5:0;35611:100;35758:4;35723:14;7385:18;;;;;;;;;;;35723:41;;35777:12;35802:18;;35792:6;:28;;:42;;;;;35833:1;35824:6;:10;35792:42;:78;;;;-1:-1:-1;;;;;;35839:31:0;;;;;;:25;:31;;;;;;;;35838:32;35792:78;:89;;;;;35874:7;35792:89;35777:104;;35896:7;:33;;;;-1:-1:-1;35921:8:0;;-1:-1:-1;;;35921:8:0;;;;35920:9;35896:33;35892:361;;;35946:8;:15;;;;;-1:-1:-1;;;35946:15:0;;;;-1:-1:-1;;;;;36008:13:0;-1:-1:-1;7385:18:0;;;;;;;;;;;36064:16;;36083:3;;36050:30;;7385:18;36050:30;:::i;:::-;:36;;;;:::i;:::-;36041:6;:45;36037:131;;;36149:3;36130:16;;36116:11;:30;;;;:::i;:::-;:36;;;;:::i;:::-;36107:45;;36037:131;36182:28;36203:6;36182:20;:28::i;:::-;-1:-1:-1;36225:8:0;:16;;;;;;35892:361;36269:7;:30;;;;-1:-1:-1;36286:13:0;;-1:-1:-1;;;;;36280:19:0;;;36286:13;;36280:19;36269:30;:46;;;;;36314:1;36303:8;:12;36269:46;36265:445;;;36332:12;36369:3;36348:17;36357:8;36348:6;:17;:::i;:::-;36347:25;;;;:::i;:::-;36332:40;-1:-1:-1;36396:13:0;36332:40;36396:6;:13;:::i;:::-;36387:22;;36426:42;36442:4;36456;36463;36426:15;:42::i;:::-;36317:163;36265:445;;;36499:7;:32;;;;-1:-1:-1;36518:13:0;;-1:-1:-1;;;;;36510:21:0;;;36518:13;;36510:21;36499:32;:47;;;;;36545:1;36535:7;:11;36499:47;36495:215;;;36563:12;36599:3;36579:16;36588:7;36579:6;:16;:::i;:::-;36578:24;;;;:::i;:::-;36563:39;-1:-1:-1;36626:13:0;36563:39;36626:6;:13;:::i;:::-;36617:22;;36656:42;36672:4;36686;36693;36656:15;:42::i;:::-;36548:162;36495:215;36722:33;36738:4;36744:2;36748:6;36722:15;:33::i;:::-;35076:1687;;;;;34963:1800;;;:::o;13166:591::-;-1:-1:-1;;;;;13250:21:0;;13242:67;;;;-1:-1:-1;;;13242:67:0;;16732:2:1;13242:67:0;;;16714:21:1;16771:2;16751:18;;;16744:30;16810:34;16790:18;;;16783:62;16881:3;16861:18;;;16854:31;16902:19;;13242:67:0;16530:397:1;13242:67:0;-1:-1:-1;;;;;13409:18:0;;13384:22;13409:18;;;;;;;;;;;13446:24;;;;13438:71;;;;-1:-1:-1;;;13438:71:0;;17134:2:1;13438:71:0;;;17116:21:1;17173:2;17153:18;;;17146:30;17212:34;17192:18;;;17185:62;17283:4;17263:18;;;17256:32;17305:19;;13438:71:0;16932:398:1;13438:71:0;-1:-1:-1;;;;;13545:18:0;;:9;:18;;;;;;;;;;13566:23;;;13545:44;;13611:12;:22;;13583:6;;13545:9;13611:22;;13583:6;;13611:22;:::i;:::-;;;;-1:-1:-1;;13651:37:0;;2092:25:1;;;13677:1:0;;-1:-1:-1;;;;;13651:37:0;;;;;2080:2:1;2065:18;13651:37:0;;;;;;;39850:259:::1;39678:438:::0;;:::o;20081:191::-;20174:6;;;-1:-1:-1;;;;;20191:17:0;;;;;;;;;;;20224:40;;20174:6;;;20191:17;20174:6;;20224:40;;20155:16;;20224:40;20144:128;20081:191;:::o;33414:308::-;-1:-1:-1;;;;;33505:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;33497:109;;;;-1:-1:-1;;;33497:109:0;;17537:2:1;33497:109:0;;;17519:21:1;17576:2;17556:18;;;17549:30;17615:34;17595:18;;;17588:62;17686:26;17666:18;;;17659:54;17730:19;;33497:109:0;17335:420:1;33497:109:0;-1:-1:-1;;;;;33617:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;33617:39:0;;;;;;;;;;33674:40;;33617:39;;:31;33674:40;;;33414:308;;:::o;37811:539::-;-1:-1:-1;;;;;37934:19:0;;;;;;:13;:19;;;;;;;;37933:20;:42;;;;-1:-1:-1;;;;;;37958:17:0;;;;;;:13;:17;;;;;;;;37957:18;37933:42;37925:69;;;;-1:-1:-1;;;37925:69:0;;17962:2:1;37925:69:0;;;17944:21:1;18001:2;17981:18;;;17974:30;18040:16;18020:18;;;18013:44;18074:18;;37925:69:0;17760:338:1;37925:69:0;38012:34;;;;38007:334;;38068:28;38087:4;38093:2;38068:18;:28::i;:::-;38067:29;:46;;;;-1:-1:-1;;;;;;38101:12:0;;;;;;:8;:12;;;;;;;;38100:13;38067:46;38063:267;;;38136:27;38154:4;38160:2;38136:17;:27::i;:::-;38182:29;38200:2;38204:6;38182:17;:29::i;:::-;38281:33;38303:2;38307:6;38281:21;:33::i;36799:632::-;36895:16;;;36909:1;36895:16;;;;;;;;36871:21;;36895:16;;;;;;;;;;-1:-1:-1;36895:16:0;36871:40;;36940:4;36922;36927:1;36922:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36922:23:0;;;:7;;;;;;;;;;:23;;;;36966:15;;:22;;;;;;;;:15;;;;;:20;;:22;;;;;36922:7;;36966:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36956:4;36961:1;36956:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36956:32:0;;;:7;;;;;;;;;:32;37005:15;;:214;;;;;:15;;;:66;;:214;;37086:11;;37005:15;;37156:4;;37183;;37203:15;;37005:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37001:249;37331:15;;37283:21;;37315:45;;-1:-1:-1;;;;;37331:15:0;37283:21;37315:7;:45::i;:::-;37378;;;8487:25:1;;;8543:2;8528:18;;8521:34;;;37378:45:0;;8460:18:1;37378:45:0;;;;;;;36858:573;;36799:632;:::o;11476:671::-;-1:-1:-1;;;;;11607:18:0;;11599:68;;;;-1:-1:-1;;;11599:68:0;;15210:2:1;11599:68:0;;;15192:21:1;15249:2;15229:18;;;15222:30;15288:34;15268:18;;;15261:62;15359:7;15339:18;;;15332:35;15384:19;;11599:68:0;15008:401:1;11599:68:0;-1:-1:-1;;;;;11686:16:0;;11678:64;;;;-1:-1:-1;;;11678:64:0;;15616:2:1;11678:64:0;;;15598:21:1;15655:2;15635:18;;;15628:30;15694:34;15674:18;;;15667:62;15765:5;15745:18;;;15738:33;15788:19;;11678:64:0;15414:399:1;11678:64:0;-1:-1:-1;;;;;11828:15:0;;11806:19;11828:15;;;;;;;;;;;11862:21;;;;11854:72;;;;-1:-1:-1;;;11854:72:0;;19592:2:1;11854:72:0;;;19574:21:1;19631:2;19611:18;;;19604:30;19670:34;19650:18;;;19643:62;19741:8;19721:18;;;19714:36;19767:19;;11854:72:0;19390:402:1;11854:72:0;-1:-1:-1;;;;;11962:15:0;;;:9;:15;;;;;;;;;;;11980:20;;;11962:38;;12022:13;;;;;;;;:23;;11994:6;;11962:9;12022:23;;11994:6;;12022:23;:::i;:::-;;;;;;;;12078:2;-1:-1:-1;;;;;12063:26:0;12072:4;-1:-1:-1;;;;;12063:26:0;;12082:6;12063:26;;;;2092:25:1;;2080:2;2065:18;;1946:177;12063:26:0;;;;;;;;12102:37;39678:438;38358:285;38435:18;;;;:43;;;;-1:-1:-1;38465:13:0;;-1:-1:-1;;;;;38457:21:0;;;38465:13;;38457:21;38435:43;38431:203;;;38543:11;;38529:9;38521:18;;;;:7;:18;;;;;;38503:36;;:15;:36;:::i;:::-;:51;;38495:76;;;;-1:-1:-1;;;38495:76:0;;19999:2:1;38495:76:0;;;19981:21:1;20038:2;20018:18;;;20011:30;20077:14;20057:18;;;20050:42;20109:18;;38495:76:0;19797:336:1;38495:76:0;38594:9;38586:18;;;;:7;:18;;;;;38607:15;38586:36;;38358:285;;:::o;38651:142::-;38749:11;;38739:6;:21;;38731:52;;;;-1:-1:-1;;;38731:52:0;;20340:2:1;38731:52:0;;;20322:21:1;20379:2;20359:18;;;20352:30;20418:20;20398:18;;;20391:48;20456:18;;38731:52:0;20138:342:1;38801:237:0;38895:13;;-1:-1:-1;;;;;38895:13:0;;;38889:19;;;;38885:58;;38801:237;;:::o;38885:58::-;38989:10;;38979:6;38963:13;38973:2;-1:-1:-1;;;;;7385:18:0;7358:7;7385:18;;;;;;;;;;;;7284:127;38963:13;:22;;;;:::i;:::-;:36;;38955:73;;;;-1:-1:-1;;;38955:73:0;;20687:2:1;38955:73:0;;;20669:21:1;20726:2;20706:18;;;20699:30;20765:26;20745:18;;;20738:54;20809:18;;38955:73:0;20485:348:1;32980:162:0;33088:9;-1:-1:-1;;;;;33088:14:0;33109:4;33123:6;33088:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32980:162;;:::o;206:607:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;804:2;-1:-1:-1;;729:2:1;721:6;717:15;713:88;702:9;698:104;694:113;686:121;;;;206:607;;;;:::o;818:154::-;-1:-1:-1;;;;;897:5:1;893:54;886:5;883:65;873:93;;962:1;959;952:12;977:134;1045:20;;1074:31;1045:20;1074:31;:::i;:::-;977:134;;;:::o;1116:315::-;1184:6;1192;1245:2;1233:9;1224:7;1220:23;1216:32;1213:52;;;1261:1;1258;1251:12;1213:52;1300:9;1287:23;1319:31;1344:5;1319:31;:::i;:::-;1369:5;1421:2;1406:18;;;;1393:32;;-1:-1:-1;;;1116:315:1:o;1694:247::-;1753:6;1806:2;1794:9;1785:7;1781:23;1777:32;1774:52;;;1822:1;1819;1812:12;1774:52;1861:9;1848:23;1880:31;1905:5;1880:31;:::i;2128:180::-;2187:6;2240:2;2228:9;2219:7;2215:23;2211:32;2208:52;;;2256:1;2253;2246:12;2208:52;-1:-1:-1;2279:23:1;;2128:180;-1:-1:-1;2128:180:1:o;2313:456::-;2390:6;2398;2406;2459:2;2447:9;2438:7;2434:23;2430:32;2427:52;;;2475:1;2472;2465:12;2427:52;2514:9;2501:23;2533:31;2558:5;2533:31;:::i;:::-;2583:5;-1:-1:-1;2640:2:1;2625:18;;2612:32;2653:33;2612:32;2653:33;:::i;:::-;2313:456;;2705:7;;-1:-1:-1;;;2759:2:1;2744:18;;;;2731:32;;2313:456::o;3194:118::-;3280:5;3273:13;3266:21;3259:5;3256:32;3246:60;;3302:1;3299;3292:12;3317:128;3382:20;;3411:28;3382:20;3411:28;:::i;3450:241::-;3506:6;3559:2;3547:9;3538:7;3534:23;3530:32;3527:52;;;3575:1;3572;3565:12;3527:52;3614:9;3601:23;3633:28;3655:5;3633:28;:::i;3696:248::-;3764:6;3772;3825:2;3813:9;3804:7;3800:23;3796:32;3793:52;;;3841:1;3838;3831:12;3793:52;-1:-1:-1;;3864:23:1;;;3934:2;3919:18;;;3906:32;;-1:-1:-1;3696:248:1:o;3949:184::-;-1:-1:-1;;;3998:1:1;3991:88;4098:4;4095:1;4088:15;4122:4;4119:1;4112:15;4138:1250;4228:6;4236;4289:2;4277:9;4268:7;4264:23;4260:32;4257:52;;;4305:1;4302;4295:12;4257:52;4345:9;4332:23;4374:18;4415:2;4407:6;4404:14;4401:34;;;4431:1;4428;4421:12;4401:34;4469:6;4458:9;4454:22;4444:32;;4514:7;4507:4;4503:2;4499:13;4495:27;4485:55;;4536:1;4533;4526:12;4485:55;4572:2;4559:16;4594:4;4617:2;4613;4610:10;4607:36;;;4623:18;;:::i;:::-;4669:2;4666:1;4662:10;4701:2;4695:9;-1:-1:-1;;4755:2:1;4751;4747:11;4743:84;4735:6;4731:97;4878:6;4866:10;4863:22;4858:2;4846:10;4843:18;4840:46;4837:72;;;4889:18;;:::i;:::-;4925:2;4918:22;4975:18;;;5009:15;;;;-1:-1:-1;5051:11:1;;;5047:20;;;5079:19;;;5076:39;;;5111:1;5108;5101:12;5076:39;5135:11;;;;5155:148;5171:6;5166:3;5163:15;5155:148;;;5237:23;5256:3;5237:23;:::i;:::-;5225:36;;5188:12;;;;5281;;;;5155:148;;;5322:6;-1:-1:-1;5347:35:1;;-1:-1:-1;5363:18:1;;;5347:35;:::i;:::-;5337:45;;;;;;4138:1250;;;;;:::o;5393:382::-;5458:6;5466;5519:2;5507:9;5498:7;5494:23;5490:32;5487:52;;;5535:1;5532;5525:12;5487:52;5574:9;5561:23;5593:31;5618:5;5593:31;:::i;:::-;5643:5;-1:-1:-1;5700:2:1;5685:18;;5672:32;5713:30;5672:32;5713:30;:::i;:::-;5762:7;5752:17;;;5393:382;;;;;:::o;5780:388::-;5848:6;5856;5909:2;5897:9;5888:7;5884:23;5880:32;5877:52;;;5925:1;5922;5915:12;5877:52;5964:9;5951:23;5983:31;6008:5;5983:31;:::i;:::-;6033:5;-1:-1:-1;6090:2:1;6075:18;;6062:32;6103:33;6062:32;6103:33;:::i;6173:437::-;6252:1;6248:12;;;;6295;;;6316:61;;6370:4;6362:6;6358:17;6348:27;;6316:61;6423:2;6415:6;6412:14;6392:18;6389:38;6386:218;;-1:-1:-1;;;6457:1:1;6450:88;6561:4;6558:1;6551:15;6589:4;6586:1;6579:15;6386:218;;6173:437;;;:::o;7639:184::-;-1:-1:-1;;;7688:1:1;7681:88;7788:4;7785:1;7778:15;7812:4;7809:1;7802:15;7828:125;7893:9;;;7914:10;;;7911:36;;;7927:18;;:::i;8911:184::-;-1:-1:-1;;;8960:1:1;8953:88;9060:4;9057:1;9050:15;9084:4;9081:1;9074:15;9100:195;9139:3;-1:-1:-1;;9163:5:1;9160:77;9157:103;;9240:18;;:::i;:::-;-1:-1:-1;9287:1:1;9276:13;;9100:195::o;10998:274::-;11038:1;11064;11054:189;;-1:-1:-1;;;11096:1:1;11089:88;11200:4;11197:1;11190:15;11228:4;11225:1;11218:15;11054:189;-1:-1:-1;11257:9:1;;10998:274::o;12387:184::-;12457:6;12510:2;12498:9;12489:7;12485:23;12481:32;12478:52;;;12526:1;12523;12516:12;12478:52;-1:-1:-1;12549:16:1;;12387:184;-1:-1:-1;12387:184:1:o;12878:245::-;12945:6;12998:2;12986:9;12977:7;12973:23;12969:32;12966:52;;;13014:1;13011;13004:12;12966:52;13046:9;13040:16;13065:28;13087:5;13065:28;:::i;16164:228::-;16204:7;16330:1;-1:-1:-1;;16258:74:1;16255:1;16252:81;16247:1;16240:9;16233:17;16229:105;16226:131;;;16337:18;;:::i;:::-;-1:-1:-1;16377:9:1;;16164:228::o;16397:128::-;16464:9;;;16485:11;;;16482:37;;;16499:18;;:::i;18103:251::-;18173:6;18226:2;18214:9;18205:7;18201:23;18197:32;18194:52;;;18242:1;18239;18232:12;18194:52;18274:9;18268:16;18293:31;18318:5;18293:31;:::i;18359:1026::-;18621:4;18669:3;18658:9;18654:19;18700:6;18689:9;18682:25;18726:2;18764:6;18759:2;18748:9;18744:18;18737:34;18807:3;18802:2;18791:9;18787:18;18780:31;18831:6;18866;18860:13;18897:6;18889;18882:22;18935:3;18924:9;18920:19;18913:26;;18974:2;18966:6;18962:15;18948:29;;18995:1;19005:218;19019:6;19016:1;19013:13;19005:218;;;19084:13;;-1:-1:-1;;;;;19080:62:1;19068:75;;19198:15;;;;19163:12;;;;19041:1;19034:9;19005:218;;;-1:-1:-1;;;;;;;19279:55:1;;;;19274:2;19259:18;;19252:83;-1:-1:-1;;;19366:3:1;19351:19;19344:35;19240:3;18359:1026;-1:-1:-1;;;18359:1026:1:o
Swarm Source
ipfs://d751e385e98b656c2568087e959e719fcf226081f784524c09f18a5f2b85f270
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.