Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 DPAI
Holders
57
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
984,016.223230568 DPAIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Darkpool
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-06 */ // DarkPool AI // $DPAI // SPDX-License-Identifier: MIT pragma solidity 0.8.16; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function allPairsLength() external view returns (uint256); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); 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, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 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, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } /** * @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 decimals places of the token. */ function decimals() external view returns (uint8); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); } /** * @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; } } /** * @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); } } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the name of the token. */ function name() external view virtual override returns (string memory) { return _name; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @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 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() external view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @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) external virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @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) external 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 ) external virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); 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) external 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 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) external virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** @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"); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); } /** * @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"); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); } /** * @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); } } } 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"); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); } } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract Darkpool is ERC20, Ownable { // TOKENOMICS ==========================================================> string private _name = "Darkpool AI"; string private _symbol = "DPAI"; uint8 private _decimals = 9; uint256 private _supply = 1000000000; uint256 public taxForLiquidity = 48; // antisniper uint256 public taxForMarketing = 48; // antisniper uint256 public maxTxAmount = 15000000 * 10**_decimals; uint256 public maxWalletAmount = 15000000 * 10**_decimals; address public marketingWallet = 0x4C61CCb98c02aECAc1CCeD36Cb5E008f13Abe5F8; address public DEAD = 0x000000000000000000000000000000000000dEaD; uint256 public _marketingReserves = 0; mapping(address => bool) public _isExcludedFromFee; uint256 public numTokensSellToAddToLiquidity = 600000 * 10**_decimals; uint256 public numTokensSellToAddToETH = 2400000 * 10**_decimals; // will be reduced post launch to .1 total swap // Antibot ==============================================> function Antibot() external onlyOwner { require(taxForMarketing > 45, "Antibot stage one 42%"); taxForLiquidity = 3; taxForMarketing = 39; maxTxAmount = 15000000 * 10**_decimals; maxWalletAmount = 15000000 * 10**_decimals; } function Antibot2() external onlyOwner { require(taxForMarketing > 35, "Antibot stage two 24%"); taxForLiquidity = 2; taxForMarketing = 22; maxTxAmount = 15000000 * 10**_decimals; maxWalletAmount = 15000000 * 10**_decimals; } function Antibot3() external onlyOwner { require(taxForMarketing > 20, "Antibot stage three 10%"); taxForLiquidity = 2; taxForMarketing = 8; maxTxAmount = 15000000 * 10**_decimals; maxWalletAmount = 15000000 * 10**_decimals; } // Access ==============================================> struct userUnlock { string tgUserName; bool unlocked; uint256 unlockedAt; uint256 totalEthPaid; } struct channelUnlock { string tgChannel; bool unlocked; uint256 unlockedAt; uint256 totalEthPaid; } mapping(string => userUnlock) public unlockedUsers; mapping(string => channelUnlock) public unlockedChannels; uint public userCostEth = 0.05 ether; uint public userCostTokens = 10000 * 10**_decimals; uint public channelCostEth = 0.3 ether; uint public channelCostTokens = 100000 * 10**_decimals; event UserUnlocked(string tg_username, uint256 unlockTime); event ChannelUnlocked(string tg_channel, uint256 unlockTime); event CostUpdated(bool _isEth, bool _isChannel, uint _cost); event ExcludedFromFeeUpdated(address _address, bool _status); event AdminModifierSet(string tg_user_chan, bool _isChannel, bool _isUnlocked, uint _unlockBlock, uint _amtPaid); event PairUpdated(address _address); // Unlocks AI through contract function unlockUser(string memory tg_username) external payable { require(msg.value >= userCostEth, "Not enough ETH sent!"); require(msg.sender.balance >= userCostTokens, "Not enough tokens!"); _marketingReserves += msg.value; _transfer(msg.sender, DEAD, userCostTokens); unlockedUsers[tg_username] = userUnlock( tg_username, true, block.timestamp, unlockedUsers[tg_username].totalEthPaid + msg.value ); emit UserUnlocked(tg_username, block.timestamp); } function unlockChannel(string memory tg_channel) external payable { require(msg.value >= userCostEth, "Not enough ETH sent!"); require(msg.sender.balance >= userCostTokens, "Not enough tokens!"); _marketingReserves += msg.value; _transfer(msg.sender, DEAD, userCostTokens); unlockedChannels[tg_channel] = channelUnlock( tg_channel, true, block.timestamp, unlockedChannels[tg_channel].totalEthPaid + msg.value ); emit ChannelUnlocked(tg_channel, block.timestamp); } //ABI getters function isUnlocked(string memory tg_user_chan, bool _isChannel) external view returns(bool) { if (_isChannel) { return unlockedChannels[tg_user_chan].unlocked; } return unlockedUsers[tg_user_chan].unlocked; } function getAmtPaid(string memory tg_user_chan, bool _isChannel) external view returns(uint) { if (_isChannel) { return unlockedChannels[tg_user_chan].totalEthPaid; } return unlockedUsers[tg_user_chan].totalEthPaid; } function getUnlockBlock(string memory tg_user_chan, bool _isChannel) external view returns(uint) { if (_isChannel) { return unlockedChannels[tg_user_chan].unlockedAt; } return unlockedUsers[tg_user_chan].unlockedAt; } //Admin modifier function function setUnlockStatus(string memory tg_user_chan, bool _isChannel, bool _isUnlocked, uint _unlockBlock, uint _amtPaid) external onlyOwner { if (_isChannel) { unlockedChannels[tg_user_chan] = channelUnlock( tg_user_chan, _isUnlocked, _unlockBlock, _amtPaid ); } else { unlockedUsers[tg_user_chan] = userUnlock( tg_user_chan, _isUnlocked, _unlockBlock, _amtPaid ); } emit AdminModifierSet(tg_user_chan, _isChannel, _isUnlocked, _unlockBlock, _amtPaid); } function setCost(bool _isEth, bool _isChannel, uint _cost) external onlyOwner { if (_isEth) { if (_isChannel) { channelCostEth = _cost; } else { userCostEth = _cost; } } else { if (_isChannel) { channelCostTokens = _cost * 10**_decimals; } else { userCostTokens = _cost * 10**_decimals; } } emit CostUpdated(_isEth, _isChannel, _cost); } // Rest ---> IUniswapV2Router02 public immutable uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } /** * @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() ERC20(_name, _symbol) { _mint(msg.sender, (_supply * 10**_decimals)); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //eth mainnet uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[address(uniswapV2Router)] = true; _isExcludedFromFee[msg.sender] = true; _isExcludedFromFee[marketingWallet] = true; } function updatePair(address _pair) external onlyOwner { require(_pair != DEAD, "LP Pair cannot be the Dead wallet, or 0!"); require(_pair != address(0), "LP Pair cannot be the Dead wallet, or 0!"); uniswapV2Pair = _pair; emit PairUpdated(_pair); } /** * @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 override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(balanceOf(from) >= amount, "ERC20: transfer amount exceeds balance"); if ((from == uniswapV2Pair || to == uniswapV2Pair) && !inSwapAndLiquify) { if (from != uniswapV2Pair) { uint256 contractLiquidityBalance = balanceOf(address(this)) - _marketingReserves; if (contractLiquidityBalance >= numTokensSellToAddToLiquidity) { _swapAndLiquify(numTokensSellToAddToLiquidity); } if ((_marketingReserves) >= numTokensSellToAddToETH) { _swapTokensForEth(numTokensSellToAddToETH); _marketingReserves -= numTokensSellToAddToETH; bool sent = payable(marketingWallet).send(address(this).balance); require(sent, "Failed to send ETH"); } } uint256 transferAmount; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { transferAmount = amount; } else { require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount"); if(from == uniswapV2Pair){ require((amount + balanceOf(to)) <= maxWalletAmount, "ERC20: balance amount exceeded max wallet amount limit"); } uint256 marketingShare = ((amount * taxForMarketing) / 100); uint256 liquidityShare = ((amount * taxForLiquidity) / 100); transferAmount = amount - (marketingShare + liquidityShare); _marketingReserves += marketingShare; super._transfer(from, address(this), (marketingShare + liquidityShare)); } super._transfer(from, to, transferAmount); } else { super._transfer(from, to, amount); } } function excludeFromFee(address _address, bool _status) external onlyOwner { _isExcludedFromFee[_address] = _status; emit ExcludedFromFeeUpdated(_address, _status); } function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 half = (contractTokenBalance / 2); uint256 otherHalf = (contractTokenBalance - half); uint256 initialBalance = address(this).balance; _swapTokensForEth(half); uint256 newBalance = (address(this).balance - initialBalance); _addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function _swapTokensForEth(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private lockTheSwap { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, marketingWallet, block.timestamp ); } function changeMarketingWallet(address newWallet) public onlyOwner returns (bool) { require(newWallet != DEAD, "LP Pair cannot be the Dead wallet, or 0!"); require(newWallet != address(0), "LP Pair cannot be the Dead wallet, or 0!"); marketingWallet = newWallet; return true; } function changeTaxForLiquidityAndMarketing(uint256 _taxForLiquidity, uint256 _taxForMarketing) public onlyOwner returns (bool) { require((_taxForLiquidity+_taxForMarketing) <= 10, "ERC20: total tax cannot exceed 10%"); taxForLiquidity = _taxForLiquidity; taxForMarketing = _taxForMarketing; return true; } function changeSwapThresholds(uint256 _numTokensSellToAddToLiquidity, uint256 _numTokensSellToAddToETH) public onlyOwner returns (bool) { require(_numTokensSellToAddToLiquidity < _supply / 98, "Cannot liquidate more than 2% at once!"); require(_numTokensSellToAddToETH < _supply / 98, "Cannot liquidate more than 2% at once!"); numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity * 10**_decimals; numTokensSellToAddToETH = _numTokensSellToAddToETH * 10**_decimals; return true; } function changeMaxTxAmount(uint256 _maxTxAmount) public onlyOwner returns (bool) { require(_maxTxAmount > 10000000000000000, "Minimum transaction size 1%"); maxTxAmount = _maxTxAmount; return true; } function changeMaxWalletAmount(uint256 _maxWalletAmount) public onlyOwner returns (bool) { require(_maxWalletAmount > 10000000000000000, "Minimum wallet size 1%"); maxWalletAmount = _maxWalletAmount; return true; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"tg_user_chan","type":"string"},{"indexed":false,"internalType":"bool","name":"_isChannel","type":"bool"},{"indexed":false,"internalType":"bool","name":"_isUnlocked","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_unlockBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amtPaid","type":"uint256"}],"name":"AdminModifierSet","type":"event"},{"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":false,"internalType":"string","name":"tg_channel","type":"string"},{"indexed":false,"internalType":"uint256","name":"unlockTime","type":"uint256"}],"name":"ChannelUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_isEth","type":"bool"},{"indexed":false,"internalType":"bool","name":"_isChannel","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"CostUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludedFromFeeUpdated","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":false,"internalType":"address","name":"_address","type":"address"}],"name":"PairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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":false,"internalType":"string","name":"tg_username","type":"string"},{"indexed":false,"internalType":"uint256","name":"unlockTime","type":"uint256"}],"name":"UserUnlocked","type":"event"},{"inputs":[],"name":"Antibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Antibot2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Antibot3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"},{"internalType":"uint256","name":"_numTokensSellToAddToETH","type":"uint256"}],"name":"changeSwapThresholds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_taxForMarketing","type":"uint256"}],"name":"changeTaxForLiquidityAndMarketing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"channelCostEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"channelCostTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tg_user_chan","type":"string"},{"internalType":"bool","name":"_isChannel","type":"bool"}],"name":"getAmtPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tg_user_chan","type":"string"},{"internalType":"bool","name":"_isChannel","type":"bool"}],"name":"getUnlockBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tg_user_chan","type":"string"},{"internalType":"bool","name":"_isChannel","type":"bool"}],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"numTokensSellToAddToETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEth","type":"bool"},{"internalType":"bool","name":"_isChannel","type":"bool"},{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tg_user_chan","type":"string"},{"internalType":"bool","name":"_isChannel","type":"bool"},{"internalType":"bool","name":"_isUnlocked","type":"bool"},{"internalType":"uint256","name":"_unlockBlock","type":"uint256"},{"internalType":"uint256","name":"_amtPaid","type":"uint256"}],"name":"setUnlockStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"string","name":"tg_channel","type":"string"}],"name":"unlockChannel","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"tg_username","type":"string"}],"name":"unlockUser","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"unlockedChannels","outputs":[{"internalType":"string","name":"tgChannel","type":"string"},{"internalType":"bool","name":"unlocked","type":"bool"},{"internalType":"uint256","name":"unlockedAt","type":"uint256"},{"internalType":"uint256","name":"totalEthPaid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"unlockedUsers","outputs":[{"internalType":"string","name":"tgUserName","type":"string"},{"internalType":"bool","name":"unlocked","type":"bool"},{"internalType":"uint256","name":"unlockedAt","type":"uint256"},{"internalType":"uint256","name":"totalEthPaid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"updatePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"userCostEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"userCostTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e0604052600b60a09081526a4461726b706f6f6c20414960a81b60c0526006906200002c9082620006d4565b506040805180820190915260048152634450414960e01b6020820152600790620000579082620006d4565b506008805460ff19166009908117909155633b9aca0081556030600a818155600b91909155620000889190620008b5565b620000979062e4e1c0620008cd565b600c55600854620000ad9060ff16600a620008b5565b620000bc9062e4e1c0620008cd565b600d55600e80546001600160a01b0319908116734c61ccb98c02aecac1cced36cb5e008f13abe5f817909155600f805490911661dead17905560006010556008546200010d9060ff16600a620008b5565b6200011c90620927c0620008cd565b601255600854620001329060ff16600a620008b5565b620001419062249f00620008cd565b60135566b1a2bc2ec50000601655600854620001629060ff16600a620008b5565b6200017090612710620008cd565b601755670429d069189e0000601855600854620001929060ff16600a620008b5565b620001a190620186a0620008cd565b601955348015620001b157600080fd5b5060068054620001c19062000645565b80601f0160208091040260200160405190810160405280929190818152602001828054620001ef9062000645565b8015620002405780601f10620002145761010080835404028352916020019162000240565b820191906000526020600020905b8154815290600101906020018083116200022257829003601f168201915b505050505060078054620002549062000645565b80601f0160208091040260200160405190810160405280929190818152602001828054620002829062000645565b8015620002d35780601f10620002a757610100808354040283529160200191620002d3565b820191906000526020600020905b815481529060010190602001808311620002b557829003601f168201915b50505050508160039081620002e99190620006d4565b506004620002f88282620006d4565b505050620003156200030f6200051360201b60201c565b62000517565b600854620003449033906200032f9060ff16600a620008b5565b6009546200033e9190620008cd565b62000569565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200039c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c29190620008ef565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000410573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004369190620008ef565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000484573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004aa9190620008ef565b601a80546001600160a01b0319166001600160a01b039283161790559081166080819052600090815260116020526040808220805460ff1990811660019081179092553384528284208054821683179055600e5490941683529120805490921617905562000930565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620005c45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620005d891906200091a565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200065a57607f821691505b6020821081036200067b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006cf57600081815260208120601f850160051c81016020861015620006aa5750805b601f850160051c820191505b81811015620006cb57828155600101620006b6565b5050505b505050565b81516001600160401b03811115620006f057620006f06200062f565b620007088162000701845462000645565b8462000681565b602080601f831160018114620007405760008415620007275750858301515b600019600386901b1c1916600185901b178555620006cb565b600085815260208120601f198616915b82811015620007715788860151825594840194600190910190840162000750565b5085821015620007905787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007f7578160001904821115620007db57620007db620007a0565b80851615620007e957918102915b93841c9390800290620007bb565b509250929050565b6000826200081057506001620008af565b816200081f57506000620008af565b8160018114620008385760028114620008435762000863565b6001915050620008af565b60ff841115620008575762000857620007a0565b50506001821b620008af565b5060208310610133831016604e8410600b841016171562000888575081810a620008af565b620008948383620007b6565b8060001904821115620008ab57620008ab620007a0565b0290505b92915050565b6000620008c660ff841683620007ff565b9392505050565b6000816000190483118215151615620008ea57620008ea620007a0565b500290565b6000602082840312156200090257600080fd5b81516001600160a01b0381168114620008c657600080fd5b80820180821115620008af57620008af620007a0565b608051612b2c6200096f6000396000818161039801528181611e7101528181611f2a01528181611f66015281816120ec01526121540152612b2c6000f3fe6080604052600436106102b25760003560e01c806373c503b311610175578063ad16a0cf116100dc578063dd62ed3e11610095578063f1b2b3d91161006f578063f1b2b3d91461082b578063f2fde38b1461084b578063f345bd851461086b578063fbee93ba1461088157600080fd5b8063dd62ed3e146107d5578063df1d099e146107f5578063df8408fe1461080b57600080fd5b8063ad16a0cf14610733578063af8af69014610749578063b5c78e8a14610769578063bb85c6d114610789578063c0fdea57146107a9578063d12a7688146107bf57600080fd5b80638da5cb5b1161012e5780638da5cb5b1461068a57806395d89b41146106a8578063a2330d97146106bd578063a457c2d7146106dd578063a9059cbb146106fd578063aa4bde281461071d57600080fd5b806373c503b3146105ce57806375f0a874146105ee578063768dc7101461060e5780637930ef691461063e57806381bfdcca146106545780638c0b5e221461067457600080fd5b8063248efac7116102195780634fa74c4d116101d25780634fa74c4d146104fd578063527ffabd1461051d57806363cdf60f14610533578063677daa571461056357806370a0823114610583578063715018a6146105b957600080fd5b8063248efac7146104575780632d5e9d911461046c57806330b63d8014610481578063313ce567146104a157806339509351146104bd57806349bd5a5e146104dd57600080fd5b806316a7b1601161026b57806316a7b160146103ba57806318160ddd146103cd57806318bc47f6146103e25780631939837d146104025780631b56bbf91461041757806323b872dd1461043757600080fd5b806303fd2a45146102be578063054dee0f146102fb57806306fdde031461031f578063095ea7b3146103415780630f1d7ad9146103715780631694505e1461038657600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b50600f546102de906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561030757600080fd5b5061031160165481565b6040519081526020016102f2565b34801561032b57600080fd5b50610334610897565b6040516102f29190612229565b34801561034d57600080fd5b5061036161035c366004612258565b610929565b60405190151581526020016102f2565b61038461037f366004612327565b610943565b005b34801561039257600080fd5b506102de7f000000000000000000000000000000000000000000000000000000000000000081565b6103846103c8366004612327565b610af5565b3480156103d957600080fd5b50600254610311565b3480156103ee57600080fd5b506103846103fd366004612374565b610c97565b34801561040e57600080fd5b50610384610def565b34801561042357600080fd5b506103846104323660046123e4565b610e9a565b34801561044357600080fd5b50610361610452366004612401565b610f44565b34801561046357600080fd5b50610384610f68565b34801561047857600080fd5b50610384610fd8565b34801561048d57600080fd5b5061036161049c366004612442565b611048565b3480156104ad57600080fd5b50604051600981526020016102f2565b3480156104c957600080fd5b506103616104d8366004612258565b6110f1565b3480156104e957600080fd5b50601a546102de906001600160a01b031681565b34801561050957600080fd5b50610361610518366004612464565b611113565b34801561052957600080fd5b50610311600b5481565b34801561053f57600080fd5b5061055361054e366004612327565b611176565b6040516102f294939291906124b2565b34801561056f57600080fd5b5061036161057e3660046124e1565b611237565b34801561058f57600080fd5b5061031161059e3660046123e4565b6001600160a01b031660009081526020819052604090205490565b3480156105c557600080fd5b506103846112a5565b3480156105da57600080fd5b506103846105e93660046124fa565b6112b9565b3480156105fa57600080fd5b50600e546102de906001600160a01b031681565b34801561061a57600080fd5b506103616106293660046123e4565b60116020526000908152604090205460ff1681565b34801561064a57600080fd5b5061031160185481565b34801561066057600080fd5b5061036161066f3660046124e1565b611372565b34801561068057600080fd5b50610311600c5481565b34801561069657600080fd5b506005546001600160a01b03166102de565b3480156106b457600080fd5b506103346113d4565b3480156106c957600080fd5b506105536106d8366004612327565b6113e3565b3480156106e957600080fd5b506103616106f8366004612258565b611409565b34801561070957600080fd5b50610361610718366004612258565b611484565b34801561072957600080fd5b50610311600d5481565b34801561073f57600080fd5b5061031160135481565b34801561075557600080fd5b50610361610764366004612442565b611492565b34801561077557600080fd5b50610311610784366004612464565b611510565b34801561079557600080fd5b506103616107a43660046123e4565b61156b565b3480156107b557600080fd5b5061031160105481565b3480156107cb57600080fd5b5061031160125481565b3480156107e157600080fd5b506103116107f0366004612536565b6115ee565b34801561080157600080fd5b5061031160195481565b34801561081757600080fd5b5061038461082636600461256f565b611619565b34801561083757600080fd5b50610311610846366004612464565b611684565b34801561085757600080fd5b506103846108663660046123e4565b6116df565b34801561087757600080fd5b50610311600a5481565b34801561088d57600080fd5b5061031160175481565b6060600380546108a69061259b565b80601f01602080910402602001604051908101604052809291908181526020018280546108d29061259b565b801561091f5780601f106108f45761010080835404028352916020019161091f565b820191906000526020600020905b81548152906001019060200180831161090257829003601f168201915b5050505050905090565b600033610937818585611758565b60019150505b92915050565b6016543410156109915760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768204554482073656e742160601b60448201526064015b60405180910390fd5b601754333110156109d95760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f75676820746f6b656e732160701b6044820152606401610988565b34601060008282546109eb91906125eb565b9091555050600f54601754610a0d9133916001600160a01b039091169061187c565b604051806080016040528082815260200160011515815260200142815260200134601584604051610a3e91906125fe565b908152602001604051809103902060030154610a5a91906125eb565b815250601582604051610a6d91906125fe565b90815260405190819003602001902081518190610a8a9082612668565b50602082015160018201805460ff19169115159190911790556040808301516002830155606090920151600390910155517f8382dfeb92e23123a91d983e4f179a9fbe329ff91e14e11cd3c3b5252f11512290610aea9083904290612728565b60405180910390a150565b601654341015610b3e5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768204554482073656e742160601b6044820152606401610988565b60175433311015610b865760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f75676820746f6b656e732160701b6044820152606401610988565b3460106000828254610b9891906125eb565b9091555050600f54601754610bba9133916001600160a01b039091169061187c565b604051806080016040528082815260200160011515815260200142815260200134601484604051610beb91906125fe565b908152602001604051809103902060030154610c0791906125eb565b815250601482604051610c1a91906125fe565b90815260405190819003602001902081518190610c379082612668565b50602082015160018201805460ff19169115159190911790556040808301516002830155606090920151600390910155517f892c7b6af36dc1cd7c78d56ead1e536ddf81fe5688e6b3f631cdfadf7ad4c50890610aea9083904290612728565b610c9f611c40565b8315610d29576040518060800160405280868152602001841515815260200183815260200182815250601586604051610cd891906125fe565b90815260405190819003602001902081518190610cf59082612668565b50602082015160018201805460ff191691151591909117905560408201516002820155606090910151600390910155610da9565b6040518060800160405280868152602001841515815260200183815260200182815250601486604051610d5c91906125fe565b90815260405190819003602001902081518190610d799082612668565b50602082015160018201805460ff1916911515919091179055604082015160028201556060909101516003909101555b7fc7da2a9b77928245e263afcf4e639fd44ae7d1970e45b7c6ff1a952442938caf8585858585604051610de095949392919061274a565b60405180910390a15050505050565b610df7611c40565b6014600b5411610e495760405162461bcd60e51b815260206004820152601760248201527f416e7469626f74207374616765207468726565203130250000000000000000006044820152606401610988565b6002600a9081556008600b81905554610e679160ff90911690612865565b610e749062e4e1c0612874565b600c55600854610e889060ff16600a612865565b610e959062e4e1c0612874565b600d55565b610ea2611c40565b600f546001600160a01b0390811690821603610ed05760405162461bcd60e51b815260040161098890612893565b6001600160a01b038116610ef65760405162461bcd60e51b815260040161098890612893565b601a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f90602001610aea565b600033610f52858285611c9a565b610f5d85858561187c565b506001949350505050565b610f70611c40565b6023600b5411610fba5760405162461bcd60e51b8152602060048201526015602482015274416e7469626f742073746167652074776f2032342560581b6044820152606401610988565b6002600a9081556016600b55600854610e679160ff90911690612865565b610fe0611c40565b602d600b541161102a5760405162461bcd60e51b8152602060048201526015602482015274416e7469626f74207374616765206f6e652034322560581b6044820152606401610988565b6003600a9081556027600b55600854610e679160ff90911690612865565b6000611052611c40565b606260095461106191906128db565b831061107f5760405162461bcd60e51b8152600401610988906128fd565b606260095461108e91906128db565b82106110ac5760405162461bcd60e51b8152600401610988906128fd565b6008546110bd9060ff16600a612865565b6110c79084612874565b6012556008546110db9060ff16600a612865565b6110e59083612874565b60135550600192915050565b60003361093781858561110483836115ee565b61110e91906125eb565b611758565b600081156111485760158360405161112b91906125fe565b9081526040519081900360200190206001015460ff16905061093d565b60148360405161115891906125fe565b9081526040519081900360200190206001015460ff16905092915050565b805160208183018101805160148252928201919093012091528054819061119c9061259b565b80601f01602080910402602001604051908101604052809291908181526020018280546111c89061259b565b80156112155780601f106111ea57610100808354040283529160200191611215565b820191906000526020600020905b8154815290600101906020018083116111f857829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b6000611241611c40565b662386f26fc1000082116112975760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d207472616e73616374696f6e2073697a6520312500000000006044820152606401610988565b50600c81905560015b919050565b6112ad611c40565b6112b76000611d0e565b565b6112c1611c40565b82156112e15781156112d7576018819055611329565b6016819055611329565b811561130a576008546112f89060ff16600a612865565b6113029082612874565b601955611329565b60085461131b9060ff16600a612865565b6113259082612874565b6017555b60408051841515815283151560208201529081018290527fb87a29e1f0734b57d95308af5a136440c194441ac49edd417a1ed26aa78ceda29060600160405180910390a1505050565b600061137c611c40565b662386f26fc1000082116113cb5760405162461bcd60e51b81526020600482015260166024820152754d696e696d756d2077616c6c65742073697a6520312560501b6044820152606401610988565b50600d55600190565b6060600480546108a69061259b565b805160208183018101805160158252928201919093012091528054819061119c9061259b565b6000338161141782866115ee565b9050838110156114775760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610988565b610f5d8286868403611758565b60003361093781858561187c565b600061149c611c40565b600a6114a883856125eb565b11156115015760405162461bcd60e51b815260206004820152602260248201527f45524332303a20746f74616c207461782063616e6e6f74206578636565642031604482015261302560f01b6064820152608401610988565b50600a91909155600b55600190565b600081156115415760158360405161152891906125fe565b908152602001604051809103902060030154905061093d565b60148360405161155191906125fe565b908152602001604051809103902060030154905092915050565b6000611575611c40565b600f546001600160a01b03908116908316036115a35760405162461bcd60e51b815260040161098890612893565b6001600160a01b0382166115c95760405162461bcd60e51b815260040161098890612893565b50600e80546001600160a01b0383166001600160a01b03199091161790556001919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611621611c40565b6001600160a01b038216600081815260116020908152604091829020805460ff19168515159081179091558251938452908301527f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff2910160405180910390a15050565b600081156116b55760158360405161169c91906125fe565b908152602001604051809103902060020154905061093d565b6014836040516116c591906125fe565b908152602001604051809103902060020154905092915050565b6116e7611c40565b6001600160a01b03811661174c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610988565b61175581611d0e565b50565b6001600160a01b0383166117ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610988565b6001600160a01b03821661181b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610988565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118a25760405162461bcd60e51b815260040161098890612943565b6001600160a01b0382166118c85760405162461bcd60e51b815260040161098890612988565b806118e8846001600160a01b031660009081526020819052604090205490565b10156119065760405162461bcd60e51b8152600401610988906129cb565b601a546001600160a01b038481169116148061192f5750601a546001600160a01b038381169116145b80156119455750601a54600160a01b900460ff16155b15611c3057601a546001600160a01b03848116911614611a325760105430600090815260208190526040812054909161197d91612a11565b9050601254811061199357611993601254611d60565b60135460105410611a30576119a9601354611e07565b601354601060008282546119bd9190612a11565b9091555050600e546040516000916001600160a01b0316904780156108fc029184818181858888f19350505050905080611a2e5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610988565b505b505b6001600160a01b03831660009081526011602052604081205460ff1680611a7157506001600160a01b03831660009081526011602052604090205460ff165b15611a7d575080611c1f565b600c54821115611af55760405162461bcd60e51b815260206004820152603960248201527f45524332303a207472616e7366657220616d6f756e742065786365656473207460448201527f6865206d6178207472616e73616374696f6e20616d6f756e74000000000000006064820152608401610988565b601a546001600160a01b0390811690851603611b9e57600d546001600160a01b038416600090815260208190526040902054611b3190846125eb565b1115611b9e5760405162461bcd60e51b815260206004820152603660248201527f45524332303a2062616c616e636520616d6f756e74206578636565646564206d604482015275185e081dd85b1b195d08185b5bdd5b9d081b1a5b5a5d60521b6064820152608401610988565b60006064600b5484611bb09190612874565b611bba91906128db565b905060006064600a5485611bce9190612874565b611bd891906128db565b9050611be481836125eb565b611bee9085612a11565b92508160106000828254611c0291906125eb565b90915550611c1c90508630611c1784866125eb565b611fe7565b50505b611c2a848483611fe7565b50505050565b611c3b838383611fe7565b505050565b6005546001600160a01b031633146112b75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610988565b6000611ca684846115ee565b90506000198114611c2a5781811015611d015760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610988565b611c2a8484848403611758565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601a805460ff60a01b1916600160a01b1790556000611d806002836128db565b90506000611d8e8284612a11565b905047611d9a83611e07565b6000611da68247612a11565b9050611db283826120d3565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601a805460ff60a01b19169055505050565b601a805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611e4f57611e4f612a24565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef19190612a3a565b81600181518110611f0457611f04612a24565b60200260200101906001600160a01b031690816001600160a01b031681525050611f4f307f000000000000000000000000000000000000000000000000000000000000000084611758565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611fa4908590600090869030904290600401612a57565b600060405180830381600087803b158015611fbe57600080fd5b505af1158015611fd2573d6000803e3d6000fd5b5050601a805460ff60a01b1916905550505050565b6001600160a01b03831661200d5760405162461bcd60e51b815260040161098890612943565b6001600160a01b0382166120335760405162461bcd60e51b815260040161098890612988565b6001600160a01b0383166000908152602081905260409020548181101561206c5760405162461bcd60e51b8152600401610988906129cb565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b601a805460ff60a01b1916600160a01b179055612111307f000000000000000000000000000000000000000000000000000000000000000084611758565b600e5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af11580156121a0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121c59190612ac8565b5050601a805460ff60a01b19169055505050565b60005b838110156121f45781810151838201526020016121dc565b50506000910152565b600081518084526122158160208601602086016121d9565b601f01601f19169290920160200192915050565b60208152600061223c60208301846121fd565b9392505050565b6001600160a01b038116811461175557600080fd5b6000806040838503121561226b57600080fd5b823561227681612243565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126122ab57600080fd5b813567ffffffffffffffff808211156122c6576122c6612284565b604051601f8301601f19908116603f011681019082821181831017156122ee576122ee612284565b8160405283815286602085880101111561230757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561233957600080fd5b813567ffffffffffffffff81111561235057600080fd5b61235c8482850161229a565b949350505050565b803580151581146112a057600080fd5b600080600080600060a0868803121561238c57600080fd5b853567ffffffffffffffff8111156123a357600080fd5b6123af8882890161229a565b9550506123be60208701612364565b93506123cc60408701612364565b94979396509394606081013594506080013592915050565b6000602082840312156123f657600080fd5b813561223c81612243565b60008060006060848603121561241657600080fd5b833561242181612243565b9250602084013561243181612243565b929592945050506040919091013590565b6000806040838503121561245557600080fd5b50508035926020909101359150565b6000806040838503121561247757600080fd5b823567ffffffffffffffff81111561248e57600080fd5b61249a8582860161229a565b9250506124a960208401612364565b90509250929050565b6080815260006124c560808301876121fd565b9415156020830152506040810192909252606090910152919050565b6000602082840312156124f357600080fd5b5035919050565b60008060006060848603121561250f57600080fd5b61251884612364565b925061252660208501612364565b9150604084013590509250925092565b6000806040838503121561254957600080fd5b823561255481612243565b9150602083013561256481612243565b809150509250929050565b6000806040838503121561258257600080fd5b823561258d81612243565b91506124a960208401612364565b600181811c908216806125af57607f821691505b6020821081036125cf57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561093d5761093d6125d5565b600082516126108184602087016121d9565b9190910192915050565b601f821115611c3b57600081815260208120601f850160051c810160208610156126415750805b601f850160051c820191505b818110156126605782815560010161264d565b505050505050565b815167ffffffffffffffff81111561268257612682612284565b61269681612690845461259b565b8461261a565b602080601f8311600181146126cb57600084156126b35750858301515b600019600386901b1c1916600185901b178555612660565b600085815260208120601f198616915b828110156126fa578886015182559484019460019091019084016126db565b50858210156127185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600061273b60408301856121fd565b90508260208301529392505050565b60a08152600061275d60a08301886121fd565b95151560208301525092151560408401526060830191909152608090910152919050565b600181815b808511156127bc5781600019048211156127a2576127a26125d5565b808516156127af57918102915b93841c9390800290612786565b509250929050565b6000826127d35750600161093d565b816127e05750600061093d565b81600181146127f657600281146128005761281c565b600191505061093d565b60ff841115612811576128116125d5565b50506001821b61093d565b5060208310610133831016604e8410600b841016171561283f575081810a61093d565b6128498383612781565b806000190482111561285d5761285d6125d5565b029392505050565b600061223c60ff8416836127c4565b600081600019048311821515161561288e5761288e6125d5565b500290565b60208082526028908201527f4c5020506169722063616e6e6f742062652074686520446561642077616c6c65604082015267742c206f7220302160c01b606082015260800190565b6000826128f857634e487b7160e01b600052601260045260246000fd5b500490565b60208082526026908201527f43616e6e6f74206c6971756964617465206d6f7265207468616e203225206174604082015265206f6e63652160d01b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b8181038181111561093d5761093d6125d5565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612a4c57600080fd5b815161223c81612243565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612aa75784516001600160a01b031683529383019391830191600101612a82565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612add57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204fb7869ef56b176340292352c1c9e7698f17e20c626b3304b7c31a4bfe8ac94864736f6c63430008100033
Deployed Bytecode
0x6080604052600436106102b25760003560e01c806373c503b311610175578063ad16a0cf116100dc578063dd62ed3e11610095578063f1b2b3d91161006f578063f1b2b3d91461082b578063f2fde38b1461084b578063f345bd851461086b578063fbee93ba1461088157600080fd5b8063dd62ed3e146107d5578063df1d099e146107f5578063df8408fe1461080b57600080fd5b8063ad16a0cf14610733578063af8af69014610749578063b5c78e8a14610769578063bb85c6d114610789578063c0fdea57146107a9578063d12a7688146107bf57600080fd5b80638da5cb5b1161012e5780638da5cb5b1461068a57806395d89b41146106a8578063a2330d97146106bd578063a457c2d7146106dd578063a9059cbb146106fd578063aa4bde281461071d57600080fd5b806373c503b3146105ce57806375f0a874146105ee578063768dc7101461060e5780637930ef691461063e57806381bfdcca146106545780638c0b5e221461067457600080fd5b8063248efac7116102195780634fa74c4d116101d25780634fa74c4d146104fd578063527ffabd1461051d57806363cdf60f14610533578063677daa571461056357806370a0823114610583578063715018a6146105b957600080fd5b8063248efac7146104575780632d5e9d911461046c57806330b63d8014610481578063313ce567146104a157806339509351146104bd57806349bd5a5e146104dd57600080fd5b806316a7b1601161026b57806316a7b160146103ba57806318160ddd146103cd57806318bc47f6146103e25780631939837d146104025780631b56bbf91461041757806323b872dd1461043757600080fd5b806303fd2a45146102be578063054dee0f146102fb57806306fdde031461031f578063095ea7b3146103415780630f1d7ad9146103715780631694505e1461038657600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b50600f546102de906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561030757600080fd5b5061031160165481565b6040519081526020016102f2565b34801561032b57600080fd5b50610334610897565b6040516102f29190612229565b34801561034d57600080fd5b5061036161035c366004612258565b610929565b60405190151581526020016102f2565b61038461037f366004612327565b610943565b005b34801561039257600080fd5b506102de7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6103846103c8366004612327565b610af5565b3480156103d957600080fd5b50600254610311565b3480156103ee57600080fd5b506103846103fd366004612374565b610c97565b34801561040e57600080fd5b50610384610def565b34801561042357600080fd5b506103846104323660046123e4565b610e9a565b34801561044357600080fd5b50610361610452366004612401565b610f44565b34801561046357600080fd5b50610384610f68565b34801561047857600080fd5b50610384610fd8565b34801561048d57600080fd5b5061036161049c366004612442565b611048565b3480156104ad57600080fd5b50604051600981526020016102f2565b3480156104c957600080fd5b506103616104d8366004612258565b6110f1565b3480156104e957600080fd5b50601a546102de906001600160a01b031681565b34801561050957600080fd5b50610361610518366004612464565b611113565b34801561052957600080fd5b50610311600b5481565b34801561053f57600080fd5b5061055361054e366004612327565b611176565b6040516102f294939291906124b2565b34801561056f57600080fd5b5061036161057e3660046124e1565b611237565b34801561058f57600080fd5b5061031161059e3660046123e4565b6001600160a01b031660009081526020819052604090205490565b3480156105c557600080fd5b506103846112a5565b3480156105da57600080fd5b506103846105e93660046124fa565b6112b9565b3480156105fa57600080fd5b50600e546102de906001600160a01b031681565b34801561061a57600080fd5b506103616106293660046123e4565b60116020526000908152604090205460ff1681565b34801561064a57600080fd5b5061031160185481565b34801561066057600080fd5b5061036161066f3660046124e1565b611372565b34801561068057600080fd5b50610311600c5481565b34801561069657600080fd5b506005546001600160a01b03166102de565b3480156106b457600080fd5b506103346113d4565b3480156106c957600080fd5b506105536106d8366004612327565b6113e3565b3480156106e957600080fd5b506103616106f8366004612258565b611409565b34801561070957600080fd5b50610361610718366004612258565b611484565b34801561072957600080fd5b50610311600d5481565b34801561073f57600080fd5b5061031160135481565b34801561075557600080fd5b50610361610764366004612442565b611492565b34801561077557600080fd5b50610311610784366004612464565b611510565b34801561079557600080fd5b506103616107a43660046123e4565b61156b565b3480156107b557600080fd5b5061031160105481565b3480156107cb57600080fd5b5061031160125481565b3480156107e157600080fd5b506103116107f0366004612536565b6115ee565b34801561080157600080fd5b5061031160195481565b34801561081757600080fd5b5061038461082636600461256f565b611619565b34801561083757600080fd5b50610311610846366004612464565b611684565b34801561085757600080fd5b506103846108663660046123e4565b6116df565b34801561087757600080fd5b50610311600a5481565b34801561088d57600080fd5b5061031160175481565b6060600380546108a69061259b565b80601f01602080910402602001604051908101604052809291908181526020018280546108d29061259b565b801561091f5780601f106108f45761010080835404028352916020019161091f565b820191906000526020600020905b81548152906001019060200180831161090257829003601f168201915b5050505050905090565b600033610937818585611758565b60019150505b92915050565b6016543410156109915760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768204554482073656e742160601b60448201526064015b60405180910390fd5b601754333110156109d95760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f75676820746f6b656e732160701b6044820152606401610988565b34601060008282546109eb91906125eb565b9091555050600f54601754610a0d9133916001600160a01b039091169061187c565b604051806080016040528082815260200160011515815260200142815260200134601584604051610a3e91906125fe565b908152602001604051809103902060030154610a5a91906125eb565b815250601582604051610a6d91906125fe565b90815260405190819003602001902081518190610a8a9082612668565b50602082015160018201805460ff19169115159190911790556040808301516002830155606090920151600390910155517f8382dfeb92e23123a91d983e4f179a9fbe329ff91e14e11cd3c3b5252f11512290610aea9083904290612728565b60405180910390a150565b601654341015610b3e5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768204554482073656e742160601b6044820152606401610988565b60175433311015610b865760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f75676820746f6b656e732160701b6044820152606401610988565b3460106000828254610b9891906125eb565b9091555050600f54601754610bba9133916001600160a01b039091169061187c565b604051806080016040528082815260200160011515815260200142815260200134601484604051610beb91906125fe565b908152602001604051809103902060030154610c0791906125eb565b815250601482604051610c1a91906125fe565b90815260405190819003602001902081518190610c379082612668565b50602082015160018201805460ff19169115159190911790556040808301516002830155606090920151600390910155517f892c7b6af36dc1cd7c78d56ead1e536ddf81fe5688e6b3f631cdfadf7ad4c50890610aea9083904290612728565b610c9f611c40565b8315610d29576040518060800160405280868152602001841515815260200183815260200182815250601586604051610cd891906125fe565b90815260405190819003602001902081518190610cf59082612668565b50602082015160018201805460ff191691151591909117905560408201516002820155606090910151600390910155610da9565b6040518060800160405280868152602001841515815260200183815260200182815250601486604051610d5c91906125fe565b90815260405190819003602001902081518190610d799082612668565b50602082015160018201805460ff1916911515919091179055604082015160028201556060909101516003909101555b7fc7da2a9b77928245e263afcf4e639fd44ae7d1970e45b7c6ff1a952442938caf8585858585604051610de095949392919061274a565b60405180910390a15050505050565b610df7611c40565b6014600b5411610e495760405162461bcd60e51b815260206004820152601760248201527f416e7469626f74207374616765207468726565203130250000000000000000006044820152606401610988565b6002600a9081556008600b81905554610e679160ff90911690612865565b610e749062e4e1c0612874565b600c55600854610e889060ff16600a612865565b610e959062e4e1c0612874565b600d55565b610ea2611c40565b600f546001600160a01b0390811690821603610ed05760405162461bcd60e51b815260040161098890612893565b6001600160a01b038116610ef65760405162461bcd60e51b815260040161098890612893565b601a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f90602001610aea565b600033610f52858285611c9a565b610f5d85858561187c565b506001949350505050565b610f70611c40565b6023600b5411610fba5760405162461bcd60e51b8152602060048201526015602482015274416e7469626f742073746167652074776f2032342560581b6044820152606401610988565b6002600a9081556016600b55600854610e679160ff90911690612865565b610fe0611c40565b602d600b541161102a5760405162461bcd60e51b8152602060048201526015602482015274416e7469626f74207374616765206f6e652034322560581b6044820152606401610988565b6003600a9081556027600b55600854610e679160ff90911690612865565b6000611052611c40565b606260095461106191906128db565b831061107f5760405162461bcd60e51b8152600401610988906128fd565b606260095461108e91906128db565b82106110ac5760405162461bcd60e51b8152600401610988906128fd565b6008546110bd9060ff16600a612865565b6110c79084612874565b6012556008546110db9060ff16600a612865565b6110e59083612874565b60135550600192915050565b60003361093781858561110483836115ee565b61110e91906125eb565b611758565b600081156111485760158360405161112b91906125fe565b9081526040519081900360200190206001015460ff16905061093d565b60148360405161115891906125fe565b9081526040519081900360200190206001015460ff16905092915050565b805160208183018101805160148252928201919093012091528054819061119c9061259b565b80601f01602080910402602001604051908101604052809291908181526020018280546111c89061259b565b80156112155780601f106111ea57610100808354040283529160200191611215565b820191906000526020600020905b8154815290600101906020018083116111f857829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b6000611241611c40565b662386f26fc1000082116112975760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d207472616e73616374696f6e2073697a6520312500000000006044820152606401610988565b50600c81905560015b919050565b6112ad611c40565b6112b76000611d0e565b565b6112c1611c40565b82156112e15781156112d7576018819055611329565b6016819055611329565b811561130a576008546112f89060ff16600a612865565b6113029082612874565b601955611329565b60085461131b9060ff16600a612865565b6113259082612874565b6017555b60408051841515815283151560208201529081018290527fb87a29e1f0734b57d95308af5a136440c194441ac49edd417a1ed26aa78ceda29060600160405180910390a1505050565b600061137c611c40565b662386f26fc1000082116113cb5760405162461bcd60e51b81526020600482015260166024820152754d696e696d756d2077616c6c65742073697a6520312560501b6044820152606401610988565b50600d55600190565b6060600480546108a69061259b565b805160208183018101805160158252928201919093012091528054819061119c9061259b565b6000338161141782866115ee565b9050838110156114775760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610988565b610f5d8286868403611758565b60003361093781858561187c565b600061149c611c40565b600a6114a883856125eb565b11156115015760405162461bcd60e51b815260206004820152602260248201527f45524332303a20746f74616c207461782063616e6e6f74206578636565642031604482015261302560f01b6064820152608401610988565b50600a91909155600b55600190565b600081156115415760158360405161152891906125fe565b908152602001604051809103902060030154905061093d565b60148360405161155191906125fe565b908152602001604051809103902060030154905092915050565b6000611575611c40565b600f546001600160a01b03908116908316036115a35760405162461bcd60e51b815260040161098890612893565b6001600160a01b0382166115c95760405162461bcd60e51b815260040161098890612893565b50600e80546001600160a01b0383166001600160a01b03199091161790556001919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611621611c40565b6001600160a01b038216600081815260116020908152604091829020805460ff19168515159081179091558251938452908301527f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff2910160405180910390a15050565b600081156116b55760158360405161169c91906125fe565b908152602001604051809103902060020154905061093d565b6014836040516116c591906125fe565b908152602001604051809103902060020154905092915050565b6116e7611c40565b6001600160a01b03811661174c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610988565b61175581611d0e565b50565b6001600160a01b0383166117ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610988565b6001600160a01b03821661181b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610988565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118a25760405162461bcd60e51b815260040161098890612943565b6001600160a01b0382166118c85760405162461bcd60e51b815260040161098890612988565b806118e8846001600160a01b031660009081526020819052604090205490565b10156119065760405162461bcd60e51b8152600401610988906129cb565b601a546001600160a01b038481169116148061192f5750601a546001600160a01b038381169116145b80156119455750601a54600160a01b900460ff16155b15611c3057601a546001600160a01b03848116911614611a325760105430600090815260208190526040812054909161197d91612a11565b9050601254811061199357611993601254611d60565b60135460105410611a30576119a9601354611e07565b601354601060008282546119bd9190612a11565b9091555050600e546040516000916001600160a01b0316904780156108fc029184818181858888f19350505050905080611a2e5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610988565b505b505b6001600160a01b03831660009081526011602052604081205460ff1680611a7157506001600160a01b03831660009081526011602052604090205460ff165b15611a7d575080611c1f565b600c54821115611af55760405162461bcd60e51b815260206004820152603960248201527f45524332303a207472616e7366657220616d6f756e742065786365656473207460448201527f6865206d6178207472616e73616374696f6e20616d6f756e74000000000000006064820152608401610988565b601a546001600160a01b0390811690851603611b9e57600d546001600160a01b038416600090815260208190526040902054611b3190846125eb565b1115611b9e5760405162461bcd60e51b815260206004820152603660248201527f45524332303a2062616c616e636520616d6f756e74206578636565646564206d604482015275185e081dd85b1b195d08185b5bdd5b9d081b1a5b5a5d60521b6064820152608401610988565b60006064600b5484611bb09190612874565b611bba91906128db565b905060006064600a5485611bce9190612874565b611bd891906128db565b9050611be481836125eb565b611bee9085612a11565b92508160106000828254611c0291906125eb565b90915550611c1c90508630611c1784866125eb565b611fe7565b50505b611c2a848483611fe7565b50505050565b611c3b838383611fe7565b505050565b6005546001600160a01b031633146112b75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610988565b6000611ca684846115ee565b90506000198114611c2a5781811015611d015760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610988565b611c2a8484848403611758565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601a805460ff60a01b1916600160a01b1790556000611d806002836128db565b90506000611d8e8284612a11565b905047611d9a83611e07565b6000611da68247612a11565b9050611db283826120d3565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601a805460ff60a01b19169055505050565b601a805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611e4f57611e4f612a24565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef19190612a3a565b81600181518110611f0457611f04612a24565b60200260200101906001600160a01b031690816001600160a01b031681525050611f4f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611758565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611fa4908590600090869030904290600401612a57565b600060405180830381600087803b158015611fbe57600080fd5b505af1158015611fd2573d6000803e3d6000fd5b5050601a805460ff60a01b1916905550505050565b6001600160a01b03831661200d5760405162461bcd60e51b815260040161098890612943565b6001600160a01b0382166120335760405162461bcd60e51b815260040161098890612988565b6001600160a01b0383166000908152602081905260409020548181101561206c5760405162461bcd60e51b8152600401610988906129cb565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b601a805460ff60a01b1916600160a01b179055612111307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611758565b600e5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af11580156121a0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121c59190612ac8565b5050601a805460ff60a01b19169055505050565b60005b838110156121f45781810151838201526020016121dc565b50506000910152565b600081518084526122158160208601602086016121d9565b601f01601f19169290920160200192915050565b60208152600061223c60208301846121fd565b9392505050565b6001600160a01b038116811461175557600080fd5b6000806040838503121561226b57600080fd5b823561227681612243565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126122ab57600080fd5b813567ffffffffffffffff808211156122c6576122c6612284565b604051601f8301601f19908116603f011681019082821181831017156122ee576122ee612284565b8160405283815286602085880101111561230757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561233957600080fd5b813567ffffffffffffffff81111561235057600080fd5b61235c8482850161229a565b949350505050565b803580151581146112a057600080fd5b600080600080600060a0868803121561238c57600080fd5b853567ffffffffffffffff8111156123a357600080fd5b6123af8882890161229a565b9550506123be60208701612364565b93506123cc60408701612364565b94979396509394606081013594506080013592915050565b6000602082840312156123f657600080fd5b813561223c81612243565b60008060006060848603121561241657600080fd5b833561242181612243565b9250602084013561243181612243565b929592945050506040919091013590565b6000806040838503121561245557600080fd5b50508035926020909101359150565b6000806040838503121561247757600080fd5b823567ffffffffffffffff81111561248e57600080fd5b61249a8582860161229a565b9250506124a960208401612364565b90509250929050565b6080815260006124c560808301876121fd565b9415156020830152506040810192909252606090910152919050565b6000602082840312156124f357600080fd5b5035919050565b60008060006060848603121561250f57600080fd5b61251884612364565b925061252660208501612364565b9150604084013590509250925092565b6000806040838503121561254957600080fd5b823561255481612243565b9150602083013561256481612243565b809150509250929050565b6000806040838503121561258257600080fd5b823561258d81612243565b91506124a960208401612364565b600181811c908216806125af57607f821691505b6020821081036125cf57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561093d5761093d6125d5565b600082516126108184602087016121d9565b9190910192915050565b601f821115611c3b57600081815260208120601f850160051c810160208610156126415750805b601f850160051c820191505b818110156126605782815560010161264d565b505050505050565b815167ffffffffffffffff81111561268257612682612284565b61269681612690845461259b565b8461261a565b602080601f8311600181146126cb57600084156126b35750858301515b600019600386901b1c1916600185901b178555612660565b600085815260208120601f198616915b828110156126fa578886015182559484019460019091019084016126db565b50858210156127185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600061273b60408301856121fd565b90508260208301529392505050565b60a08152600061275d60a08301886121fd565b95151560208301525092151560408401526060830191909152608090910152919050565b600181815b808511156127bc5781600019048211156127a2576127a26125d5565b808516156127af57918102915b93841c9390800290612786565b509250929050565b6000826127d35750600161093d565b816127e05750600061093d565b81600181146127f657600281146128005761281c565b600191505061093d565b60ff841115612811576128116125d5565b50506001821b61093d565b5060208310610133831016604e8410600b841016171561283f575081810a61093d565b6128498383612781565b806000190482111561285d5761285d6125d5565b029392505050565b600061223c60ff8416836127c4565b600081600019048311821515161561288e5761288e6125d5565b500290565b60208082526028908201527f4c5020506169722063616e6e6f742062652074686520446561642077616c6c65604082015267742c206f7220302160c01b606082015260800190565b6000826128f857634e487b7160e01b600052601260045260246000fd5b500490565b60208082526026908201527f43616e6e6f74206c6971756964617465206d6f7265207468616e203225206174604082015265206f6e63652160d01b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b8181038181111561093d5761093d6125d5565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612a4c57600080fd5b815161223c81612243565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612aa75784516001600160a01b031683529383019391830191600101612a82565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612add57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204fb7869ef56b176340292352c1c9e7698f17e20c626b3304b7c31a4bfe8ac94864736f6c63430008100033
Deployed Bytecode Sourcemap
28171:14049:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28772:64;;;;;;;;;;-1:-1:-1;28772:64:0;;;;-1:-1:-1;;;;;28772:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;28772:64:0;;;;;;;;30553:36;;;;;;;;;;;;;;;;;;;368:25:1;;;356:2;341:18;30553:36:0;222:177:1;17889:102:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20163:244::-;;;;;;;;;;-1:-1:-1;20163:244:0;;;;;:::i;:::-;;:::i;:::-;;;1781:14:1;;1774:22;1756:41;;1744:2;1729:18;20163:244:0;1616:187:1;31821:594:0;;;;;;:::i;:::-;;:::i;:::-;;34527:51;;;;;;;;;;;;;;;31237:576;;;;;;:::i;:::-;;:::i;19027:110::-;;;;;;;;;;-1:-1:-1;19117:12:0;;19027:110;;33275:694;;;;;;;;;;-1:-1:-1;33275:694:0;;;;;:::i;:::-;;:::i;29783:276::-;;;;;;;;;;;;;:::i;35792:288::-;;;;;;;;;;-1:-1:-1;35792:288:0;;;;;:::i;:::-;;:::i;20987:297::-;;;;;;;;;;-1:-1:-1;20987:297:0;;;;;:::i;:::-;;:::i;29498:275::-;;;;;;;;;;;;;:::i;29214:274::-;;;;;;;;;;;;;:::i;41045:574::-;;;;;;;;;;-1:-1:-1;41045:574:0;;;;;:::i;:::-;;:::i;18870:92::-;;;;;;;;;;-1:-1:-1;18870:92:0;;18953:1;5099:36:1;;5087:2;5072:18;18870:92:0;4957:184:1;22703:272:0;;;;;;;;;;-1:-1:-1;22703:272:0;;;;;:::i;:::-;;:::i;34585:28::-;;;;;;;;;;-1:-1:-1;34585:28:0;;;;-1:-1:-1;;;;;34585:28:0;;;32442:254;;;;;;;;;;-1:-1:-1;32442:254:0;;;;;:::i;:::-;;:::i;28510:35::-;;;;;;;;;;;;;;;;30431:50;;;;;;;;;;-1:-1:-1;30431:50:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;41627:265::-;;;;;;;;;;-1:-1:-1;41627:265:0;;;;;:::i;:::-;;:::i;18054:177::-;;;;;;;;;;-1:-1:-1;18054:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;18205:18:0;18173:7;18205:18;;;;;;;;;;;;18054:177;15148:103;;;;;;;;;;;;;:::i;33977:524::-;;;;;;;;;;-1:-1:-1;33977:524:0;;;;;:::i;:::-;;:::i;28690:75::-;;;;;;;;;;-1:-1:-1;28690:75:0;;;;-1:-1:-1;;;;;28690:75:0;;;28887:50;;;;;;;;;;-1:-1:-1;28887:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30655:38;;;;;;;;;;;;;;;;41900:280;;;;;;;;;;-1:-1:-1;41900:280:0;;;;;:::i;:::-;;:::i;28566:53::-;;;;;;;;;;;;;;;;14500:87;;;;;;;;;;-1:-1:-1;14573:6:0;;-1:-1:-1;;;;;14573:6:0;14500:87;;17713:106;;;;;;;;;;;;;:::i;30488:56::-;;;;;;;;;;-1:-1:-1;30488:56:0;;;;;:::i;:::-;;:::i;21787:507::-;;;;;;;;;;-1:-1:-1;21787:507:0;;;;;:::i;:::-;;:::i;19607:236::-;;;;;;;;;;-1:-1:-1;19607:236:0;;;;;:::i;:::-;;:::i;28626:57::-;;;;;;;;;;;;;;;;29022:64;;;;;;;;;;;;;;;;40657:380;;;;;;;;;;-1:-1:-1;40657:380:0;;;;;:::i;:::-;;:::i;32704:262::-;;;;;;;;;;-1:-1:-1;32704:262:0;;;;;:::i;:::-;;:::i;40299:350::-;;;;;;;;;;-1:-1:-1;40299:350:0;;;;;:::i;:::-;;:::i;28843:37::-;;;;;;;;;;;;;;;;28946:69;;;;;;;;;;;;;;;;19200:201;;;;;;;;;;-1:-1:-1;19200:201:0;;;;;:::i;:::-;;:::i;30700:54::-;;;;;;;;;;;;;;;;38710:189;;;;;;;;;;-1:-1:-1;38710:189:0;;;;;:::i;:::-;;:::i;32974:262::-;;;;;;;;;;-1:-1:-1;32974:262:0;;;;;:::i;:::-;;:::i;15406:238::-;;;;;;;;;;-1:-1:-1;15406:238:0;;;;;:::i;:::-;;:::i;28454:35::-;;;;;;;;;;;;;;;;30596:50;;;;;;;;;;;;;;;;17889:102;17945:13;17978:5;17971:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17889:102;:::o;20163:244::-;20284:4;13373:10;20345:32;13373:10;20361:7;20370:6;20345:8;:32::i;:::-;20395:4;20388:11;;;20163:244;;;;;:::o;31821:594::-;31919:11;;31906:9;:24;;31898:57;;;;-1:-1:-1;;;31898:57:0;;7797:2:1;31898:57:0;;;7779:21:1;7836:2;7816:18;;;7809:30;-1:-1:-1;;;7855:18:1;;;7848:50;7915:18;;31898:57:0;;;;;;;;;31996:14;;31974:10;:18;:36;;31966:67;;;;-1:-1:-1;;;31966:67:0;;8146:2:1;31966:67:0;;;8128:21:1;8185:2;8165:18;;;8158:30;-1:-1:-1;;;8204:18:1;;;8197:48;8262:18;;31966:67:0;7944:342:1;31966:67:0;32066:9;32044:18;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;32108:4:0;;32114:14;;32086:43;;32096:10;;-1:-1:-1;;;;;32108:4:0;;;;32086:9;:43::i;:::-;32181:166;;;;;;;;32209:10;32181:166;;;;32234:4;32181:166;;;;;;32253:15;32181:166;;;;32327:9;32283:16;32300:10;32283:28;;;;;;:::i;:::-;;;;;;;;;;;;;:41;;;:53;;;;:::i;:::-;32181:166;;;32150:16;32167:10;32150:28;;;;;;:::i;:::-;;;;;;;;;;;;;;:197;;:28;;:197;;:28;:197;:::i;:::-;-1:-1:-1;32150:197:0;;;;;;;;;-1:-1:-1;;32150:197:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32363:44;;;;;32379:10;;32391:15;;32363:44;:::i;:::-;;;;;;;;31821:594;:::o;31237:576::-;31333:11;;31320:9;:24;;31312:57;;;;-1:-1:-1;;;31312:57:0;;7797:2:1;31312:57:0;;;7779:21:1;7836:2;7816:18;;;7809:30;-1:-1:-1;;;7855:18:1;;;7848:50;7915:18;;31312:57:0;7595:344:1;31312:57:0;31410:14;;31388:10;:18;:36;;31380:67;;;;-1:-1:-1;;;31380:67:0;;8146:2:1;31380:67:0;;;8128:21:1;8185:2;8165:18;;;8158:30;-1:-1:-1;;;8204:18:1;;;8197:48;8262:18;;31380:67:0;7944:342:1;31380:67:0;31480:9;31458:18;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;31522:4:0;;31528:14;;31500:43;;31510:10;;-1:-1:-1;;;;;31522:4:0;;;;31500:9;:43::i;:::-;31585:162;;;;;;;;31610:11;31585:162;;;;31636:4;31585:162;;;;;;31655:15;31585:162;;;;31727:9;31685:13;31699:11;31685:26;;;;;;:::i;:::-;;;;;;;;;;;;;:39;;;:51;;;;:::i;:::-;31585:162;;;31556:13;31570:11;31556:26;;;;;;:::i;:::-;;;;;;;;;;;;;;:191;;:26;;:191;;:26;:191;:::i;:::-;-1:-1:-1;31556:191:0;;;;;;;;;-1:-1:-1;;31556:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31763:42;;;;;31776:11;;31789:15;;31763:42;:::i;33275:694::-;14386:13;:11;:13::i;:::-;33441:10:::1;33437:430;;;33501:147;;;;;;;;33533:12;33501:147;;;;33564:11;33501:147;;;;;;33594:12;33501:147;;;;33625:8;33501:147;;::::0;33468:16:::1;33485:12;33468:30;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:180;;:30;;:180:::1;::::0;:30;:180:::1;:::i;:::-;-1:-1:-1::0;33468:180:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;33468:180:0::1;::::0;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;33437:430:::1;;;33711:144;;;;;;;;33740:12;33711:144;;;;33771:11;33711:144;;;;;;33801:12;33711:144;;;;33832:8;33711:144;;::::0;33681:13:::1;33695:12;33681:27;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:174;;:27;;:174:::1;::::0;:27;:174:::1;:::i;:::-;-1:-1:-1::0;33681:174:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;33681:174:0::1;::::0;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;33437:430:::1;33882:79;33899:12;33913:10;33925:11;33938:12;33952:8;33882:79;;;;;;;;;;:::i;:::-;;;;;;;;33275:694:::0;;;;;:::o;29783:276::-;14386:13;:11;:13::i;:::-;29859:2:::1;29841:15;;:20;29833:56;;;::::0;-1:-1:-1;;;29833:56:0;;12081:2:1;29833:56:0::1;::::0;::::1;12063:21:1::0;12120:2;12100:18;;;12093:30;12159:25;12139:18;;;12132:53;12202:18;;29833:56:0::1;11879:347:1::0;29833:56:0::1;29918:1;29900:15;:19:::0;;;29948:1:::1;29930:15;:19:::0;;;29989:9;29985:13:::1;::::0;29989:9:::1;::::0;;::::1;::::0;29985:13:::1;:::i;:::-;29974:24;::::0;:8:::1;:24;:::i;:::-;29960:11;:38:::0;30042:9:::1;::::0;30038:13:::1;::::0;30042:9:::1;;30038:2;:13;:::i;:::-;30027:24;::::0;:8:::1;:24;:::i;:::-;30009:15;:42:::0;29783:276::o;35792:288::-;14386:13;:11;:13::i;:::-;35874:4:::1;::::0;-1:-1:-1;;;;;35874:4:0;;::::1;35865:13:::0;;::::1;::::0;35857:66:::1;;;;-1:-1:-1::0;;;35857:66:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35942:19:0;::::1;35934:72;;;;-1:-1:-1::0;;;35934:72:0::1;;;;;;;:::i;:::-;36017:13;:21:::0;;-1:-1:-1;;;;;;36017:21:0::1;-1:-1:-1::0;;;;;36017:21:0;::::1;::::0;;::::1;::::0;;;36054:18:::1;::::0;160:51:1;;;36054:18:0::1;::::0;148:2:1;133:18;36054::0::1;14:203:1::0;20987:297:0;21120:4;13373:10;21178:38;21194:4;13373:10;21209:6;21178:15;:38::i;:::-;21227:27;21237:4;21243:2;21247:6;21227:9;:27::i;:::-;-1:-1:-1;21272:4:0;;20987:297;-1:-1:-1;;;;20987:297:0:o;29498:275::-;14386:13;:11;:13::i;:::-;29574:2:::1;29556:15;;:20;29548:54;;;::::0;-1:-1:-1;;;29548:54:0;;14398:2:1;29548:54:0::1;::::0;::::1;14380:21:1::0;14437:2;14417:18;;;14410:30;-1:-1:-1;;;14456:18:1;;;14449:51;14517:18;;29548:54:0::1;14196:345:1::0;29548:54:0::1;29631:1;29613:15;:19:::0;;;29661:2:::1;29643:15;:20:::0;29703:9:::1;::::0;29699:13:::1;::::0;29703:9:::1;::::0;;::::1;::::0;29699:13:::1;:::i;29214:274::-:0;14386:13;:11;:13::i;:::-;29289:2:::1;29271:15;;:20;29263:54;;;::::0;-1:-1:-1;;;29263:54:0;;14748:2:1;29263:54:0::1;::::0;::::1;14730:21:1::0;14787:2;14767:18;;;14760:30;-1:-1:-1;;;14806:18:1;;;14799:51;14867:18;;29263:54:0::1;14546:345:1::0;29263:54:0::1;29346:1;29328:15;:19:::0;;;29376:2:::1;29358:15;:20:::0;29418:9:::1;::::0;29414:13:::1;::::0;29418:9:::1;::::0;;::::1;::::0;29414:13:::1;:::i;41045:574::-:0;41202:4;14386:13;:11;:13::i;:::-;41275:2:::1;41265:7;;:12;;;;:::i;:::-;41232:30;:45;41224:96;;;;-1:-1:-1::0;;;41224:96:0::1;;;;;;;:::i;:::-;41376:2;41366:7;;:12;;;;:::i;:::-;41339:24;:39;41331:90;;;;-1:-1:-1::0;;;41331:90:0::1;;;;;;;:::i;:::-;41501:9;::::0;41497:13:::1;::::0;41501:9:::1;;41497:2;:13;:::i;:::-;41464:46;::::0;:30;:46:::1;:::i;:::-;41432:29;:78:::0;41578:9:::1;::::0;41574:13:::1;::::0;41578:9:::1;;41574:2;:13;:::i;:::-;41547:40;::::0;:24;:40:::1;:::i;:::-;41521:23;:66:::0;-1:-1:-1;41607:4:0::1;41045:574:::0;;;;:::o;22703:272::-;22820:4;13373:10;22881:64;13373:10;22897:7;22934:10;22906:25;13373:10;22897:7;22906:9;:25::i;:::-;:38;;;;:::i;:::-;22881:8;:64::i;32442:254::-;32529:4;32550:10;32546:89;;;32584:16;32601:12;32584:30;;;;;;:::i;:::-;;;;;;;;;;;;;;:39;;;;;;-1:-1:-1;32577:46:0;;32546:89;32652:13;32666:12;32652:27;;;;;;:::i;:::-;;;;;;;;;;;;;;:36;;;;;;-1:-1:-1;32442:254:0;;;;:::o;30431:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;30431:50:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30431:50:0;:::o;41627:265::-;41729:4;14386:13;:11;:13::i;:::-;41774:17:::1;41759:12;:32;41751:72;;;::::0;-1:-1:-1;;;41751:72:0;;15727:2:1;41751:72:0::1;::::0;::::1;15709:21:1::0;15766:2;15746:18;;;15739:30;15805:29;15785:18;;;15778:57;15852:18;;41751:72:0::1;15525:351:1::0;41751:72:0::1;-1:-1:-1::0;41834:11:0::1;:26:::0;;;41880:4:::1;14410:1;41627:265:::0;;;:::o;15148:103::-;14386:13;:11;:13::i;:::-;15213:30:::1;15240:1;15213:18;:30::i;:::-;15148:103::o:0;33977:524::-;14386:13;:11;:13::i;:::-;34070:6:::1;34066:374;;;34097:10;34093:133;;;34128:14;:22:::0;;;34066:374:::1;;34093:133;34191:11;:19:::0;;;34066:374:::1;;;34262:10;34258:171;;;34325:9;::::0;34321:13:::1;::::0;34325:9:::1;;34321:2;:13;:::i;:::-;34313:21;::::0;:5;:21:::1;:::i;:::-;34293:17;:41:::0;34258:171:::1;;;34404:9;::::0;34400:13:::1;::::0;34404:9:::1;;34400:2;:13;:::i;:::-;34392:21;::::0;:5;:21:::1;:::i;:::-;34375:14;:38:::0;34258:171:::1;34455:38;::::0;;16096:14:1;;16089:22;16071:41;;16155:14;;16148:22;16143:2;16128:18;;16121:50;16187:18;;;16180:34;;;34455:38:0::1;::::0;16059:2:1;16044:18;34455:38:0::1;;;;;;;33977:524:::0;;;:::o;41900:280::-;42010:4;14386:13;:11;:13::i;:::-;42059:17:::1;42040:16;:36;42032:71;;;::::0;-1:-1:-1;;;42032:71:0;;16427:2:1;42032:71:0::1;::::0;::::1;16409:21:1::0;16466:2;16446:18;;;16439:30;-1:-1:-1;;;16485:18:1;;;16478:52;16547:18;;42032:71:0::1;16225:346:1::0;42032:71:0::1;-1:-1:-1::0;42114:15:0::1;:34:::0;42168:4:::1;::::0;41900:280::o;17713:106::-;17771:13;17804:7;17797:14;;;;;:::i;30488:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21787:507::-;21909:4;13373:10;21909:4;21997:25;13373:10;22014:7;21997:9;:25::i;:::-;21970:52;;22075:15;22055:16;:35;;22033:122;;;;-1:-1:-1;;;22033:122:0;;16778:2:1;22033:122:0;;;16760:21:1;16817:2;16797:18;;;16790:30;16856:34;16836:18;;;16829:62;-1:-1:-1;;;16907:18:1;;;16900:35;16952:19;;22033:122:0;16576:401:1;22033:122:0;22191:60;22200:5;22207:7;22235:15;22216:16;:34;22191:8;:60::i;19607:236::-;19724:4;13373:10;19785:28;13373:10;19802:2;19806:6;19785:9;:28::i;40657:380::-;40805:4;14386:13;:11;:13::i;:::-;40874:2:::1;40836:33;40853:16:::0;40836;:33:::1;:::i;:::-;40835:41;;40827:88;;;::::0;-1:-1:-1;;;40827:88:0;;17184:2:1;40827:88:0::1;::::0;::::1;17166:21:1::0;17223:2;17203:18;;;17196:30;17262:34;17242:18;;;17235:62;-1:-1:-1;;;17313:18:1;;;17306:32;17355:19;;40827:88:0::1;16982:398:1::0;40827:88:0::1;-1:-1:-1::0;40926:15:0::1;:34:::0;;;;40971:15:::1;:34:::0;41025:4:::1;::::0;40657:380::o;32704:262::-;32791:4;32812:10;32808:93;;;32846:16;32863:12;32846:30;;;;;;:::i;:::-;;;;;;;;;;;;;:43;;;32839:50;;;;32808:93;32918:13;32932:12;32918:27;;;;;;:::i;:::-;;;;;;;;;;;;;:40;;;32911:47;;32704:262;;;;:::o;40299:350::-;40402:4;14386:13;:11;:13::i;:::-;40445:4:::1;::::0;-1:-1:-1;;;;;40445:4:0;;::::1;40432:17:::0;;::::1;::::0;40424:70:::1;;;;-1:-1:-1::0;;;40424:70:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40513:23:0;::::1;40505:76;;;;-1:-1:-1::0;;;40505:76:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;40592:15:0::1;:27:::0;;-1:-1:-1;;;;;40592:27:0;::::1;-1:-1:-1::0;;;;;;40592:27:0;;::::1;;::::0;;;40299:350;;;:::o;19200:201::-;-1:-1:-1;;;;;19366:18:0;;;19334:7;19366:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19200:201::o;38710:189::-;14386:13;:11;:13::i;:::-;-1:-1:-1;;;;;38796:28:0;::::1;;::::0;;;:18:::1;:28;::::0;;;;;;;;:38;;-1:-1:-1;;38796:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;38850:41;;17553:51:1;;;17620:18;;;17613:50;38850:41:0::1;::::0;17526:18:1;38850:41:0::1;;;;;;;38710:189:::0;;:::o;32974:262::-;33065:4;33086:10;33082:91;;;33120:16;33137:12;33120:30;;;;;;:::i;:::-;;;;;;;;;;;;;:41;;;33113:48;;;;33082:91;33190:13;33204:12;33190:27;;;;;;:::i;:::-;;;;;;;;;;;;;:38;;;33183:45;;32974:262;;;;:::o;15406:238::-;14386:13;:11;:13::i;:::-;-1:-1:-1;;;;;15509:22:0;::::1;15487:110;;;::::0;-1:-1:-1;;;15487:110:0;;17876:2:1;15487:110:0::1;::::0;::::1;17858:21:1::0;17915:2;17895:18;;;17888:30;17954:34;17934:18;;;17927:62;-1:-1:-1;;;18005:18:1;;;17998:36;18051:19;;15487:110:0::1;17674:402:1::0;15487:110:0::1;15608:28;15627:8;15608:18;:28::i;:::-;15406:238:::0;:::o;25010:380::-;-1:-1:-1;;;;;25146:19:0;;25138:68;;;;-1:-1:-1;;;25138:68:0;;18283:2:1;25138:68:0;;;18265:21:1;18322:2;18302:18;;;18295:30;18361:34;18341:18;;;18334:62;-1:-1:-1;;;18412:18:1;;;18405:34;18456:19;;25138:68:0;18081:400:1;25138:68:0;-1:-1:-1;;;;;25225:21:0;;25217:68;;;;-1:-1:-1;;;25217:68:0;;18688:2:1;25217:68:0;;;18670:21:1;18727:2;18707:18;;;18700:30;18766:34;18746:18;;;18739:62;-1:-1:-1;;;18817:18:1;;;18810:32;18859:19;;25217:68:0;18486:398:1;25217:68:0;-1:-1:-1;;;;;25298:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25350:32;;368:25:1;;;25350:32:0;;341:18:1;25350:32:0;;;;;;;25010:380;;;:::o;36558:2144::-;-1:-1:-1;;;;;36656:18:0;;36648:68;;;;-1:-1:-1;;;36648:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36735:16:0;;36727:64;;;;-1:-1:-1;;;36727:64:0;;;;;;;:::i;:::-;36829:6;36810:15;36820:4;-1:-1:-1;;;;;18205:18:0;18173:7;18205:18;;;;;;;;;;;;18054:177;36810:15;:25;;36802:76;;;;-1:-1:-1;;;36802:76:0;;;;;;;:::i;:::-;36904:13;;-1:-1:-1;;;;;36896:21:0;;;36904:13;;36896:21;;:44;;-1:-1:-1;36927:13:0;;-1:-1:-1;;;;;36921:19:0;;;36927:13;;36921:19;36896:44;36895:67;;;;-1:-1:-1;36946:16:0;;-1:-1:-1;;;36946:16:0;;;;36945:17;36895:67;36891:1804;;;36991:13;;-1:-1:-1;;;;;36983:21:0;;;36991:13;;36983:21;36979:681;;37087:18;;37078:4;37025:32;18205:18;;;;;;;;;;;37025:32;;37060:45;;;:::i;:::-;37025:80;;37156:29;;37128:24;:57;37124:152;;37210:46;37226:29;;37210:15;:46::i;:::-;37322:23;;37299:18;;37298:47;37294:351;;37370:42;37388:23;;37370:17;:42::i;:::-;37457:23;;37435:18;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;37523:15:0;;37515:52;;37503:9;;-1:-1:-1;;;;;37523:15:0;;37545:21;37515:52;;;;;37503:9;37515:52;37503:9;37515:52;37545:21;37523:15;37515:52;;;;;;;37503:64;;37598:4;37590:35;;;;-1:-1:-1;;;37590:35:0;;20441:2:1;37590:35:0;;;20423:21:1;20480:2;20460:18;;;20453:30;-1:-1:-1;;;20499:18:1;;;20492:48;20557:18;;37590:35:0;20239:342:1;37590:35:0;37347:298;37294:351;37006:654;36979:681;-1:-1:-1;;;;;37717:24:0;;37676:22;37717:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;37745:22:0;;;;;;:18;:22;;;;;;;;37717:50;37713:839;;;-1:-1:-1;37805:6:0;37713:839;;;37884:11;;37874:6;:21;;37866:91;;;;-1:-1:-1;;;37866:91:0;;20788:2:1;37866:91:0;;;20770:21:1;20827:2;20807:18;;;20800:30;20866:34;20846:18;;;20839:62;20937:27;20917:18;;;20910:55;20982:19;;37866:91:0;20586:421:1;37866:91:0;37987:13;;-1:-1:-1;;;;;37987:13:0;;;37979:21;;;;37976:178;;38060:15;;-1:-1:-1;;;;;18205:18:0;;18173:7;18205:18;;;;;;;;;;;38033:22;;:6;:22;:::i;:::-;38032:43;;38024:110;;;;-1:-1:-1;;;38024:110:0;;21214:2:1;38024:110:0;;;21196:21:1;21253:2;21233:18;;;21226:30;21292:34;21272:18;;;21265:62;-1:-1:-1;;;21343:18:1;;;21336:52;21405:19;;38024:110:0;21012:418:1;38024:110:0;38174:22;38229:3;38210:15;;38201:6;:24;;;;:::i;:::-;38200:32;;;;:::i;:::-;38174:59;;38252:22;38307:3;38288:15;;38279:6;:24;;;;:::i;:::-;38278:32;;;;:::i;:::-;38252:59;-1:-1:-1;38357:31:0;38252:59;38357:14;:31;:::i;:::-;38347:42;;:6;:42;:::i;:::-;38330:59;;38430:14;38408:18;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;38465:71:0;;-1:-1:-1;38481:4:0;38495;38503:31;38520:14;38503;:31;:::i;:::-;38465:15;:71::i;:::-;37847:705;;37713:839;38566:41;38582:4;38588:2;38592:14;38566:15;:41::i;:::-;36964:1655;36558:2144;;;:::o;36891:1804::-;38650:33;38666:4;38672:2;38676:6;38650:15;:33::i;:::-;36558:2144;;;:::o;14665:132::-;14573:6;;-1:-1:-1;;;;;14573:6:0;13373:10;14729:23;14721:68;;;;-1:-1:-1;;;14721:68:0;;21637:2:1;14721:68:0;;;21619:21:1;;;21656:18;;;21649:30;21715:34;21695:18;;;21688:62;21767:18;;14721:68:0;21435:356:1;25681:502:0;25816:24;25843:25;25853:5;25860:7;25843:9;:25::i;:::-;25816:52;;-1:-1:-1;;25883:16:0;:37;25879:297;;25983:6;25963:16;:26;;25937:117;;;;-1:-1:-1;;;25937:117:0;;21998:2:1;25937:117:0;;;21980:21:1;22037:2;22017:18;;;22010:30;22076:31;22056:18;;;22049:59;22125:18;;25937:117:0;21796:353:1;25937:117:0;26098:51;26107:5;26114:7;26142:6;26123:16;:25;26098:8;:51::i;15804:191::-;15897:6;;;-1:-1:-1;;;;;15914:17:0;;;-1:-1:-1;;;;;;15914:17:0;;;;;;;15947:40;;15897:6;;;15914:17;15897:6;;15947:40;;15878:16;;15947:40;15867:128;15804:191;:::o;38907:474::-;34825:16;:23;;-1:-1:-1;;;;34825:23:0;-1:-1:-1;;;34825:23:0;;;;39009:24:::1;39032:1;39009:20:::0;:24:::1;:::i;:::-;38993:41:::0;-1:-1:-1;39045:17:0::1;39066:27;38993:41:::0;39066:20;:27:::1;:::i;:::-;39045:49:::0;-1:-1:-1;39132:21:0::1;39166:23;39184:4:::0;39166:17:::1;:23::i;:::-;39202:18;39224:38;39248:14:::0;39224:21:::1;:38;:::i;:::-;39202:61;;39276:36;39290:9;39301:10;39276:13;:36::i;:::-;39330:43;::::0;;22356:25:1;;;22412:2;22397:18;;22390:34;;;22440:18;;;22433:34;;;39330:43:0::1;::::0;22344:2:1;22329:18;39330:43:0::1;;;;;;;-1:-1:-1::0;;34871:16:0;:24;;-1:-1:-1;;;;34871:24:0;;;-1:-1:-1;;;38907:474:0:o;39389:488::-;34825:16;:23;;-1:-1:-1;;;;34825:23:0;-1:-1:-1;;;34825:23:0;;;39492:16:::1;::::0;;39506:1:::1;39492:16:::0;;;;;::::1;::::0;;-1:-1:-1;;39492:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;39492:16:0::1;39468:40;;39537:4;39519;39524:1;39519:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;39519:23:0::1;;;-1:-1:-1::0;;;;;39519:23:0::1;;;::::0;::::1;39563:15;-1:-1:-1::0;;;;;39563:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39553:4;39558:1;39553:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;39553:32:0::1;;;-1:-1:-1::0;;;;;39553:32:0::1;;;::::0;::::1;39598:62;39615:4;39630:15;39648:11;39598:8;:62::i;:::-;39673:196;::::0;-1:-1:-1;;;39673:196:0;;-1:-1:-1;;;;;39673:15:0::1;:66;::::0;::::1;::::0;:196:::1;::::0;39754:11;;39780:1:::1;::::0;39796:4;;39823::::1;::::0;39843:15:::1;::::0;39673:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;34871:16:0;:24;;-1:-1:-1;;;;34871:24:0;;;-1:-1:-1;;;;39389:488:0:o;26191:776::-;-1:-1:-1;;;;;26322:18:0;;26314:68;;;;-1:-1:-1;;;26314:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26401:16:0;;26393:64;;;;-1:-1:-1;;;26393:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26492:15:0;;26470:19;26492:15;;;;;;;;;;;26540:21;;;;26518:109;;;;-1:-1:-1;;;26518:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26663:15:0;;;:9;:15;;;;;;;;;;;26681:20;;;26663:38;;26881:13;;;;;;;;;;:23;;;;;;26933:26;;368:25:1;;;26881:13:0;;26933:26;;341:18:1;26933:26:0;;;;;;;26303:664;26191:776;;;:::o;39885:406::-;34825:16;:23;;-1:-1:-1;;;;34825:23:0;-1:-1:-1;;;34825:23:0;;;40002:62:::1;40019:4;40034:15;40052:11:::0;40002:8:::1;:62::i;:::-;40227:15;::::0;40077:206:::1;::::0;-1:-1:-1;;;40077:206:0;;40149:4:::1;40077:206;::::0;::::1;24192:34:1::0;24242:18;;;24235:34;;;40195:1:0::1;24285:18:1::0;;;24278:34;;;24328:18;;;24321:34;-1:-1:-1;;;;;40227:15:0;;::::1;24371:19:1::0;;;24364:44;40257:15:0::1;24424:19:1::0;;;24417:35;40077:15:0::1;:31:::0;;::::1;::::0;::::1;::::0;40116:9;;24126:19:1;;40077:206:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;34871:16:0;:24;;-1:-1:-1;;;;34871:24:0;;;-1:-1:-1;;;39885:406:0:o;404:250:1:-;489:1;499:113;513:6;510:1;507:13;499:113;;;589:11;;;583:18;570:11;;;563:39;535:2;528:10;499:113;;;-1:-1:-1;;646:1:1;628:16;;621:27;404:250::o;659:271::-;701:3;739:5;733:12;766:6;761:3;754:19;782:76;851:6;844:4;839:3;835:14;828:4;821:5;817:16;782:76;:::i;:::-;912:2;891:15;-1:-1:-1;;887:29:1;878:39;;;;919:4;874:50;;659:271;-1:-1:-1;;659:271:1:o;935:220::-;1084:2;1073:9;1066:21;1047:4;1104:45;1145:2;1134:9;1130:18;1122:6;1104:45;:::i;:::-;1096:53;935:220;-1:-1:-1;;;935:220:1:o;1160:131::-;-1:-1:-1;;;;;1235:31:1;;1225:42;;1215:70;;1281:1;1278;1271:12;1296:315;1364:6;1372;1425:2;1413:9;1404:7;1400:23;1396:32;1393:52;;;1441:1;1438;1431:12;1393:52;1480:9;1467:23;1499:31;1524:5;1499:31;:::i;:::-;1549:5;1601:2;1586:18;;;;1573:32;;-1:-1:-1;;;1296:315:1:o;1808:127::-;1869:10;1864:3;1860:20;1857:1;1850:31;1900:4;1897:1;1890:15;1924:4;1921:1;1914:15;1940:719;1983:5;2036:3;2029:4;2021:6;2017:17;2013:27;2003:55;;2054:1;2051;2044:12;2003:55;2090:6;2077:20;2116:18;2153:2;2149;2146:10;2143:36;;;2159:18;;:::i;:::-;2234:2;2228:9;2202:2;2288:13;;-1:-1:-1;;2284:22:1;;;2308:2;2280:31;2276:40;2264:53;;;2332:18;;;2352:22;;;2329:46;2326:72;;;2378:18;;:::i;:::-;2418:10;2414:2;2407:22;2453:2;2445:6;2438:18;2499:3;2492:4;2487:2;2479:6;2475:15;2471:26;2468:35;2465:55;;;2516:1;2513;2506:12;2465:55;2580:2;2573:4;2565:6;2561:17;2554:4;2546:6;2542:17;2529:54;2627:1;2620:4;2615:2;2607:6;2603:15;2599:26;2592:37;2647:6;2638:15;;;;;;1940:719;;;;:::o;2664:322::-;2733:6;2786:2;2774:9;2765:7;2761:23;2757:32;2754:52;;;2802:1;2799;2792:12;2754:52;2842:9;2829:23;2875:18;2867:6;2864:30;2861:50;;;2907:1;2904;2897:12;2861:50;2930;2972:7;2963:6;2952:9;2948:22;2930:50;:::i;:::-;2920:60;2664:322;-1:-1:-1;;;;2664:322:1:o;3225:160::-;3290:20;;3346:13;;3339:21;3329:32;;3319:60;;3375:1;3372;3365:12;3390:596;3489:6;3497;3505;3513;3521;3574:3;3562:9;3553:7;3549:23;3545:33;3542:53;;;3591:1;3588;3581:12;3542:53;3631:9;3618:23;3664:18;3656:6;3653:30;3650:50;;;3696:1;3693;3686:12;3650:50;3719;3761:7;3752:6;3741:9;3737:22;3719:50;:::i;:::-;3709:60;;;3788:35;3819:2;3808:9;3804:18;3788:35;:::i;:::-;3778:45;;3842:35;3873:2;3862:9;3858:18;3842:35;:::i;:::-;3390:596;;;;-1:-1:-1;3832:45:1;;3924:2;3909:18;;3896:32;;-1:-1:-1;3975:3:1;3960:19;3947:33;;3390:596;-1:-1:-1;;3390:596:1:o;3991:247::-;4050:6;4103:2;4091:9;4082:7;4078:23;4074:32;4071:52;;;4119:1;4116;4109:12;4071:52;4158:9;4145:23;4177:31;4202:5;4177:31;:::i;4243:456::-;4320:6;4328;4336;4389:2;4377:9;4368:7;4364:23;4360:32;4357:52;;;4405:1;4402;4395:12;4357:52;4444:9;4431:23;4463:31;4488:5;4463:31;:::i;:::-;4513:5;-1:-1:-1;4570:2:1;4555:18;;4542:32;4583:33;4542:32;4583:33;:::i;:::-;4243:456;;4635:7;;-1:-1:-1;;;4689:2:1;4674:18;;;;4661:32;;4243:456::o;4704:248::-;4772:6;4780;4833:2;4821:9;4812:7;4808:23;4804:32;4801:52;;;4849:1;4846;4839:12;4801:52;-1:-1:-1;;4872:23:1;;;4942:2;4927:18;;;4914:32;;-1:-1:-1;4704:248:1:o;5146:390::-;5221:6;5229;5282:2;5270:9;5261:7;5257:23;5253:32;5250:52;;;5298:1;5295;5288:12;5250:52;5338:9;5325:23;5371:18;5363:6;5360:30;5357:50;;;5403:1;5400;5393:12;5357:50;5426;5468:7;5459:6;5448:9;5444:22;5426:50;:::i;:::-;5416:60;;;5495:35;5526:2;5515:9;5511:18;5495:35;:::i;:::-;5485:45;;5146:390;;;;;:::o;5541:445::-;5768:3;5757:9;5750:22;5731:4;5789:46;5830:3;5819:9;5815:19;5807:6;5789:46;:::i;:::-;5878:14;;5871:22;5866:2;5851:18;;5844:50;-1:-1:-1;5925:2:1;5910:18;;5903:34;;;;5968:2;5953:18;;;5946:34;5781:54;5541:445;-1:-1:-1;5541:445:1:o;5991:180::-;6050:6;6103:2;6091:9;6082:7;6078:23;6074:32;6071:52;;;6119:1;6116;6109:12;6071:52;-1:-1:-1;6142:23:1;;5991:180;-1:-1:-1;5991:180:1:o;6176:316::-;6247:6;6255;6263;6316:2;6304:9;6295:7;6291:23;6287:32;6284:52;;;6332:1;6329;6322:12;6284:52;6355:26;6371:9;6355:26;:::i;:::-;6345:36;;6400:35;6431:2;6420:9;6416:18;6400:35;:::i;:::-;6390:45;;6482:2;6471:9;6467:18;6454:32;6444:42;;6176:316;;;;;:::o;6497:388::-;6565:6;6573;6626:2;6614:9;6605:7;6601:23;6597:32;6594:52;;;6642:1;6639;6632:12;6594:52;6681:9;6668:23;6700:31;6725:5;6700:31;:::i;:::-;6750:5;-1:-1:-1;6807:2:1;6792:18;;6779:32;6820:33;6779:32;6820:33;:::i;:::-;6872:7;6862:17;;;6497:388;;;;;:::o;6890:315::-;6955:6;6963;7016:2;7004:9;6995:7;6991:23;6987:32;6984:52;;;7032:1;7029;7022:12;6984:52;7071:9;7058:23;7090:31;7115:5;7090:31;:::i;:::-;7140:5;-1:-1:-1;7164:35:1;7195:2;7180:18;;7164:35;:::i;7210:380::-;7289:1;7285:12;;;;7332;;;7353:61;;7407:4;7399:6;7395:17;7385:27;;7353:61;7460:2;7452:6;7449:14;7429:18;7426:38;7423:161;;7506:10;7501:3;7497:20;7494:1;7487:31;7541:4;7538:1;7531:15;7569:4;7566:1;7559:15;7423:161;;7210:380;;;:::o;8291:127::-;8352:10;8347:3;8343:20;8340:1;8333:31;8383:4;8380:1;8373:15;8407:4;8404:1;8397:15;8423:125;8488:9;;;8509:10;;;8506:36;;;8522:18;;:::i;8553:289::-;8684:3;8722:6;8716:13;8738:66;8797:6;8792:3;8785:4;8777:6;8773:17;8738:66;:::i;:::-;8820:16;;;;;8553:289;-1:-1:-1;;8553:289:1:o;8973:545::-;9075:2;9070:3;9067:11;9064:448;;;9111:1;9136:5;9132:2;9125:17;9181:4;9177:2;9167:19;9251:2;9239:10;9235:19;9232:1;9228:27;9222:4;9218:38;9287:4;9275:10;9272:20;9269:47;;;-1:-1:-1;9310:4:1;9269:47;9365:2;9360:3;9356:12;9353:1;9349:20;9343:4;9339:31;9329:41;;9420:82;9438:2;9431:5;9428:13;9420:82;;;9483:17;;;9464:1;9453:13;9420:82;;;9424:3;;;8973:545;;;:::o;9694:1352::-;9820:3;9814:10;9847:18;9839:6;9836:30;9833:56;;;9869:18;;:::i;:::-;9898:97;9988:6;9948:38;9980:4;9974:11;9948:38;:::i;:::-;9942:4;9898:97;:::i;:::-;10050:4;;10114:2;10103:14;;10131:1;10126:663;;;;10833:1;10850:6;10847:89;;;-1:-1:-1;10902:19:1;;;10896:26;10847:89;-1:-1:-1;;9651:1:1;9647:11;;;9643:24;9639:29;9629:40;9675:1;9671:11;;;9626:57;10949:81;;10096:944;;10126:663;8920:1;8913:14;;;8957:4;8944:18;;-1:-1:-1;;10162:20:1;;;10280:236;10294:7;10291:1;10288:14;10280:236;;;10383:19;;;10377:26;10362:42;;10475:27;;;;10443:1;10431:14;;;;10310:19;;10280:236;;;10284:3;10544:6;10535:7;10532:19;10529:201;;;10605:19;;;10599:26;-1:-1:-1;;10688:1:1;10684:14;;;10700:3;10680:24;10676:37;10672:42;10657:58;10642:74;;10529:201;-1:-1:-1;;;;;10776:1:1;10760:14;;;10756:22;10743:36;;-1:-1:-1;9694:1352:1:o;11051:291::-;11228:2;11217:9;11210:21;11191:4;11248:45;11289:2;11278:9;11274:18;11266:6;11248:45;:::i;:::-;11240:53;;11329:6;11324:2;11313:9;11309:18;11302:34;11051:291;;;;;:::o;11347:527::-;11596:3;11585:9;11578:22;11559:4;11617:46;11658:3;11647:9;11643:19;11635:6;11617:46;:::i;:::-;11706:14;;11699:22;11694:2;11679:18;;11672:50;-1:-1:-1;11765:14:1;;11758:22;11753:2;11738:18;;11731:50;11812:2;11797:18;;11790:34;;;;11855:3;11840:19;;;11833:35;11609:54;11347:527;-1:-1:-1;11347:527:1:o;12231:422::-;12320:1;12363:5;12320:1;12377:270;12398:7;12388:8;12385:21;12377:270;;;12457:4;12453:1;12449:6;12445:17;12439:4;12436:27;12433:53;;;12466:18;;:::i;:::-;12516:7;12506:8;12502:22;12499:55;;;12536:16;;;;12499:55;12615:22;;;;12575:15;;;;12377:270;;;12381:3;12231:422;;;;;:::o;12658:806::-;12707:5;12737:8;12727:80;;-1:-1:-1;12778:1:1;12792:5;;12727:80;12826:4;12816:76;;-1:-1:-1;12863:1:1;12877:5;;12816:76;12908:4;12926:1;12921:59;;;;12994:1;12989:130;;;;12901:218;;12921:59;12951:1;12942:10;;12965:5;;;12989:130;13026:3;13016:8;13013:17;13010:43;;;13033:18;;:::i;:::-;-1:-1:-1;;13089:1:1;13075:16;;13104:5;;12901:218;;13203:2;13193:8;13190:16;13184:3;13178:4;13175:13;13171:36;13165:2;13155:8;13152:16;13147:2;13141:4;13138:12;13134:35;13131:77;13128:159;;;-1:-1:-1;13240:19:1;;;13272:5;;13128:159;13319:34;13344:8;13338:4;13319:34;:::i;:::-;13389:6;13385:1;13381:6;13377:19;13368:7;13365:32;13362:58;;;13400:18;;:::i;:::-;13438:20;;12658:806;-1:-1:-1;;;12658:806:1:o;13469:140::-;13527:5;13556:47;13597:4;13587:8;13583:19;13577:4;13556:47;:::i;13614:168::-;13654:7;13720:1;13716;13712:6;13708:14;13705:1;13702:21;13697:1;13690:9;13683:17;13679:45;13676:71;;;13727:18;;:::i;:::-;-1:-1:-1;13767:9:1;;13614:168::o;13787:404::-;13989:2;13971:21;;;14028:2;14008:18;;;14001:30;14067:34;14062:2;14047:18;;14040:62;-1:-1:-1;;;14133:2:1;14118:18;;14111:38;14181:3;14166:19;;13787:404::o;14896:217::-;14936:1;14962;14952:132;;15006:10;15001:3;14997:20;14994:1;14987:31;15041:4;15038:1;15031:15;15069:4;15066:1;15059:15;14952:132;-1:-1:-1;15098:9:1;;14896:217::o;15118:402::-;15320:2;15302:21;;;15359:2;15339:18;;;15332:30;15398:34;15393:2;15378:18;;15371:62;-1:-1:-1;;;15464:2:1;15449:18;;15442:36;15510:3;15495:19;;15118:402::o;18889:401::-;19091:2;19073:21;;;19130:2;19110:18;;;19103:30;19169:34;19164:2;19149:18;;19142:62;-1:-1:-1;;;19235:2:1;19220:18;;19213:35;19280:3;19265:19;;18889:401::o;19295:399::-;19497:2;19479:21;;;19536:2;19516:18;;;19509:30;19575:34;19570:2;19555:18;;19548:62;-1:-1:-1;;;19641:2:1;19626:18;;19619:33;19684:3;19669:19;;19295:399::o;19699:402::-;19901:2;19883:21;;;19940:2;19920:18;;;19913:30;19979:34;19974:2;19959:18;;19952:62;-1:-1:-1;;;20045:2:1;20030:18;;20023:36;20091:3;20076:19;;19699:402::o;20106:128::-;20173:9;;;20194:11;;;20191:37;;;20208:18;;:::i;22478:127::-;22539:10;22534:3;22530:20;22527:1;22520:31;22570:4;22567:1;22560:15;22594:4;22591:1;22584:15;22610:251;22680:6;22733:2;22721:9;22712:7;22708:23;22704:32;22701:52;;;22749:1;22746;22739:12;22701:52;22781:9;22775:16;22800:31;22825:5;22800:31;:::i;22866:980::-;23128:4;23176:3;23165:9;23161:19;23207:6;23196:9;23189:25;23233:2;23271:6;23266:2;23255:9;23251:18;23244:34;23314:3;23309:2;23298:9;23294:18;23287:31;23338:6;23373;23367:13;23404:6;23396;23389:22;23442:3;23431:9;23427:19;23420:26;;23481:2;23473:6;23469:15;23455:29;;23502:1;23512:195;23526:6;23523:1;23520:13;23512:195;;;23591:13;;-1:-1:-1;;;;;23587:39:1;23575:52;;23682:15;;;;23647:12;;;;23623:1;23541:9;23512:195;;;-1:-1:-1;;;;;;;23763:32:1;;;;23758:2;23743:18;;23736:60;-1:-1:-1;;;23827:3:1;23812:19;23805:35;23724:3;22866:980;-1:-1:-1;;;22866:980:1:o;24463:306::-;24551:6;24559;24567;24620:2;24608:9;24599:7;24595:23;24591:32;24588:52;;;24636:1;24633;24626:12;24588:52;24665:9;24659:16;24649:26;;24715:2;24704:9;24700:18;24694:25;24684:35;;24759:2;24748:9;24744:18;24738:25;24728:35;;24463:306;;;;;:::o
Swarm Source
ipfs://4fb7869ef56b176340292352c1c9e7698f17e20c626b3304b7c31a4bfe8ac948
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.