Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
6,666,666,666,666 TRIBE
Holders
247
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,507,464,354.148241675902410415 TRIBEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TribeDAO
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC20.sol"; import "./Ownable.sol"; import "./SafeMath.sol"; import "./IUniswapV2Pair.sol"; import "./IUniswapV2Router02.sol"; import "./IUniswapV2Factory.sol"; /* * Tribe DAO * */ contract TribeDAO is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; mapping (address => bool) private _isBanished; bool private _swapping; uint256 private _liveBlock; address private treasuryWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingLive = false; // anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastBuyTimestamp; uint256 private _treasuryFee = 2; uint256 private _tokensForTreasury; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) private _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) private automatedMarketMakerPairs; constructor() ERC20("Tribe DAO", "TRIBE") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 totalSupply = 6666666666666 * 1e18; maxTransactionAmount = totalSupply * 25 / 10000; maxWallet = totalSupply * 5 / 1000; swapTokensAtAmount = totalSupply * 1 / 1000; treasuryWallet = address(owner()); // set as fee wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingLive = true; _liveBlock = block.number.add(2); } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; } function updatetreasuryWallet(address newWallet) external onlyOwner { treasuryWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function banish(address[] memory addresses) public onlyOwner { for (uint i = 0; i < addresses.length; i++) { if (addresses[i] != uniswapV2Pair && addresses[i] != address(uniswapV2Router)) { _isBanished[addresses[i]] = true; } } } function unbanish(address[] memory addresses) public onlyOwner { for (uint i = 0; i < addresses.length; i++) { _isBanished[addresses[i]] = false; } } function banished(address addr) public view returns (bool) { return _isBanished[addr]; } 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(!_isBanished[from], "You have been banished, you are unable to transfer or swap."); if (amount == 0) { super._transfer(from, to, 0); return; } // all to secure a smooth launch if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_swapping ) { if (!tradingLive) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "_transfer:: Trading is not active."); if (block.number <= _liveBlock) _isBanished[to] = true; // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)) { require(_holderLastBuyTimestamp[tx.origin] < block.timestamp, "_transfer:: Transfer Delay enabled. Only one purchase per minute allowed."); } // wen buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "_transfer:: Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded"); } // wen sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "_transfer:: Sell transfer amount exceeds the maxTransactionAmount."); } else if (!_isExcludedMaxTransactionAmount[to]) { require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && !_swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { _swapping = true; swapBack(); _swapping = false; } bool takeFee = !_swapping; // if any addy belongs to _isExcludedFromFee or isn't a swap then remove the fee if ( _isExcludedFromFees[from] || _isExcludedFromFees[to] || (!automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) ) takeFee = false; uint256 fees = 0; if (takeFee) { if (limitsInEffect) { fees = amount.mul(99).div(100); // good luck snipers :) } else { // let's try to f*ck the sandwich bots if (automatedMarketMakerPairs[to] && _holderLastBuyTimestamp[tx.origin] > block.timestamp) { fees = amount.mul(49).div(100); } else { fees = amount.mul(_treasuryFee).div(100); } } _tokensForTreasury += fees; _holderLastBuyTimestamp[tx.origin] = block.timestamp.add(1 minutes); if (fees > 0) super._transfer(from, address(this), fees); amount -= fees; } super._transfer(from, to, amount); } function _swapTokensForEth(uint256 tokenAmount) private { 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 swapBack() private { uint256 contractBalance = balanceOf(address(this)); if (contractBalance == 0) return; if (contractBalance > swapTokensAtAmount) contractBalance = swapTokensAtAmount; uint256 initialETHBalance = address(this).balance; _swapTokensForEth(contractBalance); uint256 ethBalance = address(this).balance.sub(initialETHBalance); _tokensForTreasury = 0; payable(treasuryWallet).transfer(ethBalance); } function sendTreasury() external { payable(treasuryWallet).transfer(address(this).balance); } receive() external payable {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; import "./Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `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 Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"banish","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"banished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unbanish","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatetreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff02191690831515021790555060026011553480156200004c57600080fd5b506040518060400160405280600981526020017f54726962652044414f00000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f54524942450000000000000000000000000000000000000000000000000000008152508160039080519060200190620000d1929190620009df565b508060049080519060200190620000ea929190620009df565b5050506200010d620001016200053560201b60201c565b6200053d60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001398160016200060360201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001c157600080fd5b505afa158015620001d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fc919062000aa6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025f57600080fd5b505afa15801562000274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029a919062000aa6565b6040518363ffffffff1660e01b8152600401620002b992919062000b48565b602060405180830381600087803b158015620002d457600080fd5b505af1158015620002e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030f919062000aa6565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000384600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200060360201b60201c565b620003b9600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006ed60201b60201c565b60006c5425296ac1cc75b84c906800009050612710601982620003dd919062000c7c565b620003e9919062000c44565b600c819055506103e860058262000401919062000c7c565b6200040d919062000c44565b600e819055506103e860018262000425919062000c7c565b62000431919062000c44565b600d81905550620004476200074860201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004a96200049b6200074860201b60201c565b60016200077260201b60201c565b620004bc3060016200077260201b60201c565b620004d161dead60016200077260201b60201c565b620004f3620004e56200074860201b60201c565b60016200060360201b60201c565b620005063060016200060360201b60201c565b6200051b61dead60016200060360201b60201c565b6200052d33826200085c60201b60201c565b505062000e4f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006136200053560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006396200074860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000692576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006899062000b75565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007826200053560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007a86200074860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000801576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f89062000b75565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008c69062000b97565b60405180910390fd5b620008e360008383620009d560201b60201c565b8060026000828254620008f7919062000be7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200094e919062000be7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009b5919062000bb9565b60405180910390a3620009d160008383620009da60201b60201c565b5050565b505050565b505050565b828054620009ed9062000d1b565b90600052602060002090601f01602090048101928262000a11576000855562000a5d565b82601f1062000a2c57805160ff191683800117855562000a5d565b8280016001018555821562000a5d579182015b8281111562000a5c57825182559160200191906001019062000a3f565b5b50905062000a6c919062000a70565b5090565b5b8082111562000a8b57600081600090555060010162000a71565b5090565b60008151905062000aa08162000e35565b92915050565b60006020828403121562000abf5762000abe62000dde565b5b600062000acf8482850162000a8f565b91505092915050565b62000ae38162000cdd565b82525050565b600062000af860208362000bd6565b915062000b058262000de3565b602082019050919050565b600062000b1f601f8362000bd6565b915062000b2c8262000e0c565b602082019050919050565b62000b428162000d11565b82525050565b600060408201905062000b5f600083018562000ad8565b62000b6e602083018462000ad8565b9392505050565b6000602082019050818103600083015262000b908162000ae9565b9050919050565b6000602082019050818103600083015262000bb28162000b10565b9050919050565b600060208201905062000bd0600083018462000b37565b92915050565b600082825260208201905092915050565b600062000bf48262000d11565b915062000c018362000d11565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c395762000c3862000d51565b5b828201905092915050565b600062000c518262000d11565b915062000c5e8362000d11565b92508262000c715762000c7062000d80565b5b828204905092915050565b600062000c898262000d11565b915062000c968362000d11565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cd25762000cd162000d51565b5b828202905092915050565b600062000cea8262000cf1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000d3457607f821691505b6020821081141562000d4b5762000d4a62000daf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000e408162000cdd565b811462000e4c57600080fd5b50565b613f0f8062000e5f6000396000f3fe6080604052600436106101d15760003560e01c80638a8c523c116100f7578063b6c3de5c11610095578063e2f4560511610064578063e2f4560514610683578063e8ff2ba9146106ae578063f2fde38b146106eb578063f8b45b0514610714576101d8565b8063b6c3de5c146105c9578063c0246668146105f2578063c8c8ebe41461061b578063dd62ed3e14610646576101d8565b80639a7a23d6116100d15780639a7a23d6146104fd578063a457c2d714610526578063a9059cbb14610563578063aff3324f146105a0576101d8565b80638a8c523c146104905780638da5cb5b146104a757806395d89b41146104d2576101d8565b8063395093511161016f57806370a082311161013e57806370a08231146103e8578063715018a614610425578063751039fc1461043c5780637571336a14610467576101d8565b8063395093511461032c5780634a62bb65146103695780634fbee19314610394578063540725ca146103d1576101d8565b806318160ddd116101ab57806318160ddd1461027057806323b872dd1461029b5780632955ede6146102d8578063313ce56714610301576101d8565b806306fdde03146101dd578063095ea7b31461020857806311704f5214610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f261073f565b6040516101ff91906132e1565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190612ee9565b6107d1565b60405161023c91906132c6565b60405180910390f35b34801561025157600080fd5b5061025a6107f4565b60405161026791906132c6565b60405180910390f35b34801561027c57600080fd5b50610285610807565b6040516102929190613503565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd9190612e56565b610811565b6040516102cf91906132c6565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa9190612dbc565b610840565b005b34801561030d57600080fd5b50610316610900565b6040516103239190613578565b60405180910390f35b34801561033857600080fd5b50610353600480360381019061034e9190612ee9565b610909565b60405161036091906132c6565b60405180910390f35b34801561037557600080fd5b5061037e6109b3565b60405161038b91906132c6565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190612dbc565b6109c6565b6040516103c891906132c6565b60405180910390f35b3480156103dd57600080fd5b506103e6610a1c565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190612dbc565b610a87565b60405161041c9190613503565b60405180910390f35b34801561043157600080fd5b5061043a610acf565b005b34801561044857600080fd5b50610451610b57565b60405161045e91906132c6565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190612ea9565b610bf7565b005b34801561049c57600080fd5b506104a5610cce565b005b3480156104b357600080fd5b506104bc610d81565b6040516104c991906132ab565b60405180910390f35b3480156104de57600080fd5b506104e7610dab565b6040516104f491906132e1565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190612ea9565b610e3d565b005b34801561053257600080fd5b5061054d60048036038101906105489190612ee9565b610f58565b60405161055a91906132c6565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190612ee9565b611042565b60405161059791906132c6565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190612f29565b611065565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190612f29565b61125c565b005b3480156105fe57600080fd5b5061061960048036038101906106149190612ea9565b61136d565b005b34801561062757600080fd5b50610630611444565b60405161063d9190613503565b60405180910390f35b34801561065257600080fd5b5061066d60048036038101906106689190612e16565b61144a565b60405161067a9190613503565b60405180910390f35b34801561068f57600080fd5b506106986114d1565b6040516106a59190613503565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190612dbc565b6114d7565b6040516106e291906132c6565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190612dbc565b61152d565b005b34801561072057600080fd5b50610729611625565b6040516107369190613503565b60405180910390f35b60606003805461074e906137e8565b80601f016020809104026020016040519081016040528092919081815260200182805461077a906137e8565b80156107c75780601f1061079c576101008083540402835291602001916107c7565b820191906000526020600020905b8154815290600101906020018083116107aa57829003601f168201915b5050505050905090565b6000806107dc61162b565b90506107e9818585611633565b600191505092915050565b600f60019054906101000a900460ff1681565b6000600254905090565b60008061081c61162b565b90506108298582856117fe565b61083485858561188a565b60019150509392505050565b61084861162b565b73ffffffffffffffffffffffffffffffffffffffff16610866610d81565b73ffffffffffffffffffffffffffffffffffffffff16146108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b3906133e3565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b60008061091461162b565b90506109a8818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109a39190613639565b611633565b600191505092915050565b600f60009054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610a84573d6000803e3d6000fd5b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ad761162b565b73ffffffffffffffffffffffffffffffffffffffff16610af5610d81565b73ffffffffffffffffffffffffffffffffffffffff1614610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b42906133e3565b60405180910390fd5b610b5560006125ac565b565b6000610b6161162b565b73ffffffffffffffffffffffffffffffffffffffff16610b7f610d81565b73ffffffffffffffffffffffffffffffffffffffff1614610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc906133e3565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b610bff61162b565b73ffffffffffffffffffffffffffffffffffffffff16610c1d610d81565b73ffffffffffffffffffffffffffffffffffffffff1614610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a906133e3565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610cd661162b565b73ffffffffffffffffffffffffffffffffffffffff16610cf4610d81565b73ffffffffffffffffffffffffffffffffffffffff1614610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d41906133e3565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550610d7960024361267290919063ffffffff16565b600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610dba906137e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610de6906137e8565b8015610e335780601f10610e0857610100808354040283529160200191610e33565b820191906000526020600020905b815481529060010190602001808311610e1657829003601f168201915b5050505050905090565b610e4561162b565b73ffffffffffffffffffffffffffffffffffffffff16610e63610d81565b73ffffffffffffffffffffffffffffffffffffffff1614610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb0906133e3565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190613363565b60405180910390fd5b610f548282612688565b5050565b600080610f6361162b565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611020906134e3565b60405180910390fd5b6110368286868403611633565b60019250505092915050565b60008061104d61162b565b905061105a81858561188a565b600191505092915050565b61106d61162b565b73ffffffffffffffffffffffffffffffffffffffff1661108b610d81565b73ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d8906133e3565b60405180910390fd5b60005b815181101561125857600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682828151811061113957611138613921565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156111cd5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168282815181106111ac576111ab613921565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15611245576001600860008484815181106111eb576111ea613921565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80806112509061384b565b9150506110e4565b5050565b61126461162b565b73ffffffffffffffffffffffffffffffffffffffff16611282610d81565b73ffffffffffffffffffffffffffffffffffffffff16146112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf906133e3565b60405180910390fd5b60005b8151811015611369576000600860008484815181106112fd576112fc613921565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113619061384b565b9150506112db565b5050565b61137561162b565b73ffffffffffffffffffffffffffffffffffffffff16611393610d81565b73ffffffffffffffffffffffffffffffffffffffff16146113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e0906133e3565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61153561162b565b73ffffffffffffffffffffffffffffffffffffffff16611553610d81565b73ffffffffffffffffffffffffffffffffffffffff16146115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a0906133e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090613323565b60405180910390fd5b611622816125ac565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613443565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90613343565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117f19190613503565b60405180910390a3505050565b600061180a848461144a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118845781811015611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90613383565b60405180910390fd5b6118838484848403611633565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190613423565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190613303565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee90613463565b60405180910390fd5b6000811415611a1157611a0c838360006126e3565b6125a7565b600f60009054906101000a900460ff16156120e057611a2e610d81565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a9c5750611a6c610d81565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ad55750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b0f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b285750600960009054906101000a900460ff16155b156120df57600f60019054906101000a900460ff16611c2257601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611be25750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c18906133c3565b60405180910390fd5b5b600a544311611c84576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b611c8c610d81565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611d155750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d6f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611df65742601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dec906134c3565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e995750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f4057600c54811115611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda90613483565b60405180910390fd5b600e54611eef83610a87565b82611efa9190613639565b1115611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f32906134a3565b60405180910390fd5b6120de565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fe35750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203257600c5481111561202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490613403565b60405180910390fd5b6120dd565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120dc57600e5461208f83610a87565b8261209a9190613639565b11156120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d2906134a3565b60405180910390fd5b5b5b5b5b5b60006120eb30610a87565b90506000600d5482101590508080156121115750600960009054906101000a900460ff16155b80156121675750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121bd5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122135750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612257576001600960006101000a81548160ff02191690831515021790555061223b612964565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061230d5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123b85750601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123b75750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156123c257600090505b6000811561259757600f60009054906101000a900460ff161561240d5761240660646123f8606388612a2c90919063ffffffff16565b612a4290919063ffffffff16565b9050612503565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124a4575042601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156124d7576124d060646124c2603188612a2c90919063ffffffff16565b612a4290919063ffffffff16565b9050612502565b6124ff60646124f160115488612a2c90919063ffffffff16565b612a4290919063ffffffff16565b90505b5b80601260008282546125159190613639565b92505081905550612530603c4261267290919063ffffffff16565b601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000811115612588576125878730836126e3565b5b8085612594919061371a565b94505b6125a28787876126e3565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836126809190613639565b905092915050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a90613423565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba90613303565b60405180910390fd5b6127ce838383612a58565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284b906133a3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128e79190613639565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161294b9190613503565b60405180910390a361295e848484612a5d565b50505050565b600061296f30610a87565b905060008114156129805750612a2a565b600d5481111561299057600d5490505b600047905061299e82612a62565b60006129b38247612cb490919063ffffffff16565b90506000601281905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a25573d6000803e3d6000fd5b505050505b565b60008183612a3a91906136c0565b905092915050565b60008183612a50919061368f565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612a7f57612a7e613950565b5b604051908082528060200260200182016040528015612aad5781602001602082028036833780820191505090505b5090503081600081518110612ac557612ac4613921565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612b6757600080fd5b505afa158015612b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9f9190612de9565b81600181518110612bb357612bb2613921565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c1a30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611633565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c7e95949392919061351e565b600060405180830381600087803b158015612c9857600080fd5b505af1158015612cac573d6000803e3d6000fd5b505050505050565b60008183612cc2919061371a565b905092915050565b6000612cdd612cd8846135b8565b613593565b90508083825260208201905082856020860282011115612d0057612cff613984565b5b60005b85811015612d305781612d168882612d3a565b845260208401935060208301925050600181019050612d03565b5050509392505050565b600081359050612d4981613e94565b92915050565b600081519050612d5e81613e94565b92915050565b600082601f830112612d7957612d7861397f565b5b8135612d89848260208601612cca565b91505092915050565b600081359050612da181613eab565b92915050565b600081359050612db681613ec2565b92915050565b600060208284031215612dd257612dd161398e565b5b6000612de084828501612d3a565b91505092915050565b600060208284031215612dff57612dfe61398e565b5b6000612e0d84828501612d4f565b91505092915050565b60008060408385031215612e2d57612e2c61398e565b5b6000612e3b85828601612d3a565b9250506020612e4c85828601612d3a565b9150509250929050565b600080600060608486031215612e6f57612e6e61398e565b5b6000612e7d86828701612d3a565b9350506020612e8e86828701612d3a565b9250506040612e9f86828701612da7565b9150509250925092565b60008060408385031215612ec057612ebf61398e565b5b6000612ece85828601612d3a565b9250506020612edf85828601612d92565b9150509250929050565b60008060408385031215612f0057612eff61398e565b5b6000612f0e85828601612d3a565b9250506020612f1f85828601612da7565b9150509250929050565b600060208284031215612f3f57612f3e61398e565b5b600082013567ffffffffffffffff811115612f5d57612f5c613989565b5b612f6984828501612d64565b91505092915050565b6000612f7e8383612f8a565b60208301905092915050565b612f938161374e565b82525050565b612fa28161374e565b82525050565b6000612fb3826135f4565b612fbd8185613617565b9350612fc8836135e4565b8060005b83811015612ff9578151612fe08882612f72565b9750612feb8361360a565b925050600181019050612fcc565b5085935050505092915050565b61300f81613760565b82525050565b61301e816137a3565b82525050565b600061302f826135ff565b6130398185613628565b93506130498185602086016137b5565b61305281613993565b840191505092915050565b600061306a602383613628565b9150613075826139a4565b604082019050919050565b600061308d602683613628565b9150613098826139f3565b604082019050919050565b60006130b0602283613628565b91506130bb82613a42565b604082019050919050565b60006130d3603983613628565b91506130de82613a91565b604082019050919050565b60006130f6601d83613628565b915061310182613ae0565b602082019050919050565b6000613119602683613628565b915061312482613b09565b604082019050919050565b600061313c602283613628565b915061314782613b58565b604082019050919050565b600061315f602083613628565b915061316a82613ba7565b602082019050919050565b6000613182604283613628565b915061318d82613bd0565b606082019050919050565b60006131a5602583613628565b91506131b082613c45565b604082019050919050565b60006131c8602483613628565b91506131d382613c94565b604082019050919050565b60006131eb603b83613628565b91506131f682613ce3565b604082019050919050565b600061320e604183613628565b915061321982613d32565b606082019050919050565b6000613231601f83613628565b915061323c82613da7565b602082019050919050565b6000613254604a83613628565b915061325f82613dd0565b606082019050919050565b6000613277602583613628565b915061328282613e45565b604082019050919050565b6132968161378c565b82525050565b6132a581613796565b82525050565b60006020820190506132c06000830184612f99565b92915050565b60006020820190506132db6000830184613006565b92915050565b600060208201905081810360008301526132fb8184613024565b905092915050565b6000602082019050818103600083015261331c8161305d565b9050919050565b6000602082019050818103600083015261333c81613080565b9050919050565b6000602082019050818103600083015261335c816130a3565b9050919050565b6000602082019050818103600083015261337c816130c6565b9050919050565b6000602082019050818103600083015261339c816130e9565b9050919050565b600060208201905081810360008301526133bc8161310c565b9050919050565b600060208201905081810360008301526133dc8161312f565b9050919050565b600060208201905081810360008301526133fc81613152565b9050919050565b6000602082019050818103600083015261341c81613175565b9050919050565b6000602082019050818103600083015261343c81613198565b9050919050565b6000602082019050818103600083015261345c816131bb565b9050919050565b6000602082019050818103600083015261347c816131de565b9050919050565b6000602082019050818103600083015261349c81613201565b9050919050565b600060208201905081810360008301526134bc81613224565b9050919050565b600060208201905081810360008301526134dc81613247565b9050919050565b600060208201905081810360008301526134fc8161326a565b9050919050565b6000602082019050613518600083018461328d565b92915050565b600060a082019050613533600083018861328d565b6135406020830187613015565b81810360408301526135528186612fa8565b90506135616060830185612f99565b61356e608083018461328d565b9695505050505050565b600060208201905061358d600083018461329c565b92915050565b600061359d6135ae565b90506135a9828261381a565b919050565b6000604051905090565b600067ffffffffffffffff8211156135d3576135d2613950565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136448261378c565b915061364f8361378c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561368457613683613894565b5b828201905092915050565b600061369a8261378c565b91506136a58361378c565b9250826136b5576136b46138c3565b5b828204905092915050565b60006136cb8261378c565b91506136d68361378c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561370f5761370e613894565b5b828202905092915050565b60006137258261378c565b91506137308361378c565b92508282101561374357613742613894565b5b828203905092915050565b60006137598261376c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006137ae8261378c565b9050919050565b60005b838110156137d35780820151818401526020810190506137b8565b838111156137e2576000848401525b50505050565b6000600282049050600182168061380057607f821691505b60208210811415613814576138136138f2565b5b50919050565b61382382613993565b810181811067ffffffffffffffff8211171561384257613841613950565b5b80604052505050565b60006138568261378c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561388957613888613894565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f596f752068617665206265656e2062616e69736865642c20796f75206172652060008201527f756e61626c6520746f207472616e73666572206f7220737761702e0000000000602082015250565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e6520707572636861736520706572206d696e757460208201527f6520616c6c6f7765642e00000000000000000000000000000000000000000000604082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613e9d8161374e565b8114613ea857600080fd5b50565b613eb481613760565b8114613ebf57600080fd5b50565b613ecb8161378c565b8114613ed657600080fd5b5056fea2646970667358221220867f5e15302154cba1fa47e117240078ef3433a1511ae9d9e7d0f848621989b264736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101d15760003560e01c80638a8c523c116100f7578063b6c3de5c11610095578063e2f4560511610064578063e2f4560514610683578063e8ff2ba9146106ae578063f2fde38b146106eb578063f8b45b0514610714576101d8565b8063b6c3de5c146105c9578063c0246668146105f2578063c8c8ebe41461061b578063dd62ed3e14610646576101d8565b80639a7a23d6116100d15780639a7a23d6146104fd578063a457c2d714610526578063a9059cbb14610563578063aff3324f146105a0576101d8565b80638a8c523c146104905780638da5cb5b146104a757806395d89b41146104d2576101d8565b8063395093511161016f57806370a082311161013e57806370a08231146103e8578063715018a614610425578063751039fc1461043c5780637571336a14610467576101d8565b8063395093511461032c5780634a62bb65146103695780634fbee19314610394578063540725ca146103d1576101d8565b806318160ddd116101ab57806318160ddd1461027057806323b872dd1461029b5780632955ede6146102d8578063313ce56714610301576101d8565b806306fdde03146101dd578063095ea7b31461020857806311704f5214610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f261073f565b6040516101ff91906132e1565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190612ee9565b6107d1565b60405161023c91906132c6565b60405180910390f35b34801561025157600080fd5b5061025a6107f4565b60405161026791906132c6565b60405180910390f35b34801561027c57600080fd5b50610285610807565b6040516102929190613503565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd9190612e56565b610811565b6040516102cf91906132c6565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa9190612dbc565b610840565b005b34801561030d57600080fd5b50610316610900565b6040516103239190613578565b60405180910390f35b34801561033857600080fd5b50610353600480360381019061034e9190612ee9565b610909565b60405161036091906132c6565b60405180910390f35b34801561037557600080fd5b5061037e6109b3565b60405161038b91906132c6565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190612dbc565b6109c6565b6040516103c891906132c6565b60405180910390f35b3480156103dd57600080fd5b506103e6610a1c565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190612dbc565b610a87565b60405161041c9190613503565b60405180910390f35b34801561043157600080fd5b5061043a610acf565b005b34801561044857600080fd5b50610451610b57565b60405161045e91906132c6565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190612ea9565b610bf7565b005b34801561049c57600080fd5b506104a5610cce565b005b3480156104b357600080fd5b506104bc610d81565b6040516104c991906132ab565b60405180910390f35b3480156104de57600080fd5b506104e7610dab565b6040516104f491906132e1565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190612ea9565b610e3d565b005b34801561053257600080fd5b5061054d60048036038101906105489190612ee9565b610f58565b60405161055a91906132c6565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190612ee9565b611042565b60405161059791906132c6565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190612f29565b611065565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190612f29565b61125c565b005b3480156105fe57600080fd5b5061061960048036038101906106149190612ea9565b61136d565b005b34801561062757600080fd5b50610630611444565b60405161063d9190613503565b60405180910390f35b34801561065257600080fd5b5061066d60048036038101906106689190612e16565b61144a565b60405161067a9190613503565b60405180910390f35b34801561068f57600080fd5b506106986114d1565b6040516106a59190613503565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190612dbc565b6114d7565b6040516106e291906132c6565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190612dbc565b61152d565b005b34801561072057600080fd5b50610729611625565b6040516107369190613503565b60405180910390f35b60606003805461074e906137e8565b80601f016020809104026020016040519081016040528092919081815260200182805461077a906137e8565b80156107c75780601f1061079c576101008083540402835291602001916107c7565b820191906000526020600020905b8154815290600101906020018083116107aa57829003601f168201915b5050505050905090565b6000806107dc61162b565b90506107e9818585611633565b600191505092915050565b600f60019054906101000a900460ff1681565b6000600254905090565b60008061081c61162b565b90506108298582856117fe565b61083485858561188a565b60019150509392505050565b61084861162b565b73ffffffffffffffffffffffffffffffffffffffff16610866610d81565b73ffffffffffffffffffffffffffffffffffffffff16146108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b3906133e3565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b60008061091461162b565b90506109a8818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109a39190613639565b611633565b600191505092915050565b600f60009054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610a84573d6000803e3d6000fd5b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ad761162b565b73ffffffffffffffffffffffffffffffffffffffff16610af5610d81565b73ffffffffffffffffffffffffffffffffffffffff1614610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b42906133e3565b60405180910390fd5b610b5560006125ac565b565b6000610b6161162b565b73ffffffffffffffffffffffffffffffffffffffff16610b7f610d81565b73ffffffffffffffffffffffffffffffffffffffff1614610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc906133e3565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b610bff61162b565b73ffffffffffffffffffffffffffffffffffffffff16610c1d610d81565b73ffffffffffffffffffffffffffffffffffffffff1614610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a906133e3565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610cd661162b565b73ffffffffffffffffffffffffffffffffffffffff16610cf4610d81565b73ffffffffffffffffffffffffffffffffffffffff1614610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d41906133e3565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550610d7960024361267290919063ffffffff16565b600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610dba906137e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610de6906137e8565b8015610e335780601f10610e0857610100808354040283529160200191610e33565b820191906000526020600020905b815481529060010190602001808311610e1657829003601f168201915b5050505050905090565b610e4561162b565b73ffffffffffffffffffffffffffffffffffffffff16610e63610d81565b73ffffffffffffffffffffffffffffffffffffffff1614610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb0906133e3565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190613363565b60405180910390fd5b610f548282612688565b5050565b600080610f6361162b565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611020906134e3565b60405180910390fd5b6110368286868403611633565b60019250505092915050565b60008061104d61162b565b905061105a81858561188a565b600191505092915050565b61106d61162b565b73ffffffffffffffffffffffffffffffffffffffff1661108b610d81565b73ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d8906133e3565b60405180910390fd5b60005b815181101561125857600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682828151811061113957611138613921565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156111cd5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168282815181106111ac576111ab613921565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15611245576001600860008484815181106111eb576111ea613921565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80806112509061384b565b9150506110e4565b5050565b61126461162b565b73ffffffffffffffffffffffffffffffffffffffff16611282610d81565b73ffffffffffffffffffffffffffffffffffffffff16146112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf906133e3565b60405180910390fd5b60005b8151811015611369576000600860008484815181106112fd576112fc613921565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113619061384b565b9150506112db565b5050565b61137561162b565b73ffffffffffffffffffffffffffffffffffffffff16611393610d81565b73ffffffffffffffffffffffffffffffffffffffff16146113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e0906133e3565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61153561162b565b73ffffffffffffffffffffffffffffffffffffffff16611553610d81565b73ffffffffffffffffffffffffffffffffffffffff16146115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a0906133e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090613323565b60405180910390fd5b611622816125ac565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613443565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90613343565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117f19190613503565b60405180910390a3505050565b600061180a848461144a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118845781811015611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90613383565b60405180910390fd5b6118838484848403611633565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190613423565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190613303565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee90613463565b60405180910390fd5b6000811415611a1157611a0c838360006126e3565b6125a7565b600f60009054906101000a900460ff16156120e057611a2e610d81565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a9c5750611a6c610d81565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ad55750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b0f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b285750600960009054906101000a900460ff16155b156120df57600f60019054906101000a900460ff16611c2257601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611be25750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c18906133c3565b60405180910390fd5b5b600a544311611c84576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b611c8c610d81565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611d155750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d6f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611df65742601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dec906134c3565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e995750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f4057600c54811115611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda90613483565b60405180910390fd5b600e54611eef83610a87565b82611efa9190613639565b1115611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f32906134a3565b60405180910390fd5b6120de565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fe35750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203257600c5481111561202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490613403565b60405180910390fd5b6120dd565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120dc57600e5461208f83610a87565b8261209a9190613639565b11156120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d2906134a3565b60405180910390fd5b5b5b5b5b5b60006120eb30610a87565b90506000600d5482101590508080156121115750600960009054906101000a900460ff16155b80156121675750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121bd5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122135750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612257576001600960006101000a81548160ff02191690831515021790555061223b612964565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061230d5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123b85750601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123b75750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156123c257600090505b6000811561259757600f60009054906101000a900460ff161561240d5761240660646123f8606388612a2c90919063ffffffff16565b612a4290919063ffffffff16565b9050612503565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124a4575042601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156124d7576124d060646124c2603188612a2c90919063ffffffff16565b612a4290919063ffffffff16565b9050612502565b6124ff60646124f160115488612a2c90919063ffffffff16565b612a4290919063ffffffff16565b90505b5b80601260008282546125159190613639565b92505081905550612530603c4261267290919063ffffffff16565b601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000811115612588576125878730836126e3565b5b8085612594919061371a565b94505b6125a28787876126e3565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836126809190613639565b905092915050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a90613423565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba90613303565b60405180910390fd5b6127ce838383612a58565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284b906133a3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128e79190613639565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161294b9190613503565b60405180910390a361295e848484612a5d565b50505050565b600061296f30610a87565b905060008114156129805750612a2a565b600d5481111561299057600d5490505b600047905061299e82612a62565b60006129b38247612cb490919063ffffffff16565b90506000601281905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a25573d6000803e3d6000fd5b505050505b565b60008183612a3a91906136c0565b905092915050565b60008183612a50919061368f565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612a7f57612a7e613950565b5b604051908082528060200260200182016040528015612aad5781602001602082028036833780820191505090505b5090503081600081518110612ac557612ac4613921565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612b6757600080fd5b505afa158015612b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9f9190612de9565b81600181518110612bb357612bb2613921565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c1a30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611633565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c7e95949392919061351e565b600060405180830381600087803b158015612c9857600080fd5b505af1158015612cac573d6000803e3d6000fd5b505050505050565b60008183612cc2919061371a565b905092915050565b6000612cdd612cd8846135b8565b613593565b90508083825260208201905082856020860282011115612d0057612cff613984565b5b60005b85811015612d305781612d168882612d3a565b845260208401935060208301925050600181019050612d03565b5050509392505050565b600081359050612d4981613e94565b92915050565b600081519050612d5e81613e94565b92915050565b600082601f830112612d7957612d7861397f565b5b8135612d89848260208601612cca565b91505092915050565b600081359050612da181613eab565b92915050565b600081359050612db681613ec2565b92915050565b600060208284031215612dd257612dd161398e565b5b6000612de084828501612d3a565b91505092915050565b600060208284031215612dff57612dfe61398e565b5b6000612e0d84828501612d4f565b91505092915050565b60008060408385031215612e2d57612e2c61398e565b5b6000612e3b85828601612d3a565b9250506020612e4c85828601612d3a565b9150509250929050565b600080600060608486031215612e6f57612e6e61398e565b5b6000612e7d86828701612d3a565b9350506020612e8e86828701612d3a565b9250506040612e9f86828701612da7565b9150509250925092565b60008060408385031215612ec057612ebf61398e565b5b6000612ece85828601612d3a565b9250506020612edf85828601612d92565b9150509250929050565b60008060408385031215612f0057612eff61398e565b5b6000612f0e85828601612d3a565b9250506020612f1f85828601612da7565b9150509250929050565b600060208284031215612f3f57612f3e61398e565b5b600082013567ffffffffffffffff811115612f5d57612f5c613989565b5b612f6984828501612d64565b91505092915050565b6000612f7e8383612f8a565b60208301905092915050565b612f938161374e565b82525050565b612fa28161374e565b82525050565b6000612fb3826135f4565b612fbd8185613617565b9350612fc8836135e4565b8060005b83811015612ff9578151612fe08882612f72565b9750612feb8361360a565b925050600181019050612fcc565b5085935050505092915050565b61300f81613760565b82525050565b61301e816137a3565b82525050565b600061302f826135ff565b6130398185613628565b93506130498185602086016137b5565b61305281613993565b840191505092915050565b600061306a602383613628565b9150613075826139a4565b604082019050919050565b600061308d602683613628565b9150613098826139f3565b604082019050919050565b60006130b0602283613628565b91506130bb82613a42565b604082019050919050565b60006130d3603983613628565b91506130de82613a91565b604082019050919050565b60006130f6601d83613628565b915061310182613ae0565b602082019050919050565b6000613119602683613628565b915061312482613b09565b604082019050919050565b600061313c602283613628565b915061314782613b58565b604082019050919050565b600061315f602083613628565b915061316a82613ba7565b602082019050919050565b6000613182604283613628565b915061318d82613bd0565b606082019050919050565b60006131a5602583613628565b91506131b082613c45565b604082019050919050565b60006131c8602483613628565b91506131d382613c94565b604082019050919050565b60006131eb603b83613628565b91506131f682613ce3565b604082019050919050565b600061320e604183613628565b915061321982613d32565b606082019050919050565b6000613231601f83613628565b915061323c82613da7565b602082019050919050565b6000613254604a83613628565b915061325f82613dd0565b606082019050919050565b6000613277602583613628565b915061328282613e45565b604082019050919050565b6132968161378c565b82525050565b6132a581613796565b82525050565b60006020820190506132c06000830184612f99565b92915050565b60006020820190506132db6000830184613006565b92915050565b600060208201905081810360008301526132fb8184613024565b905092915050565b6000602082019050818103600083015261331c8161305d565b9050919050565b6000602082019050818103600083015261333c81613080565b9050919050565b6000602082019050818103600083015261335c816130a3565b9050919050565b6000602082019050818103600083015261337c816130c6565b9050919050565b6000602082019050818103600083015261339c816130e9565b9050919050565b600060208201905081810360008301526133bc8161310c565b9050919050565b600060208201905081810360008301526133dc8161312f565b9050919050565b600060208201905081810360008301526133fc81613152565b9050919050565b6000602082019050818103600083015261341c81613175565b9050919050565b6000602082019050818103600083015261343c81613198565b9050919050565b6000602082019050818103600083015261345c816131bb565b9050919050565b6000602082019050818103600083015261347c816131de565b9050919050565b6000602082019050818103600083015261349c81613201565b9050919050565b600060208201905081810360008301526134bc81613224565b9050919050565b600060208201905081810360008301526134dc81613247565b9050919050565b600060208201905081810360008301526134fc8161326a565b9050919050565b6000602082019050613518600083018461328d565b92915050565b600060a082019050613533600083018861328d565b6135406020830187613015565b81810360408301526135528186612fa8565b90506135616060830185612f99565b61356e608083018461328d565b9695505050505050565b600060208201905061358d600083018461329c565b92915050565b600061359d6135ae565b90506135a9828261381a565b919050565b6000604051905090565b600067ffffffffffffffff8211156135d3576135d2613950565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136448261378c565b915061364f8361378c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561368457613683613894565b5b828201905092915050565b600061369a8261378c565b91506136a58361378c565b9250826136b5576136b46138c3565b5b828204905092915050565b60006136cb8261378c565b91506136d68361378c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561370f5761370e613894565b5b828202905092915050565b60006137258261378c565b91506137308361378c565b92508282101561374357613742613894565b5b828203905092915050565b60006137598261376c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006137ae8261378c565b9050919050565b60005b838110156137d35780820151818401526020810190506137b8565b838111156137e2576000848401525b50505050565b6000600282049050600182168061380057607f821691505b60208210811415613814576138136138f2565b5b50919050565b61382382613993565b810181811067ffffffffffffffff8211171561384257613841613950565b5b80604052505050565b60006138568261378c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561388957613888613894565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f596f752068617665206265656e2062616e69736865642c20796f75206172652060008201527f756e61626c6520746f207472616e73666572206f7220737761702e0000000000602082015250565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e6520707572636861736520706572206d696e757460208201527f6520616c6c6f7765642e00000000000000000000000000000000000000000000604082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613e9d8161374e565b8114613ea857600080fd5b50565b613eb481613760565b8114613ebf57600080fd5b50565b613ecb8161378c565b8114613ed657600080fd5b5056fea2646970667358221220867f5e15302154cba1fa47e117240078ef3433a1511ae9d9e7d0f848621989b264736f6c63430008070033
Deployed Bytecode Sourcemap
277:9661:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2135:98:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4412:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;764:31:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3223:106:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5171:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3924:113:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3072:91:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5852:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;724:33:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4045:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9791:107;;;;;;;;;;;;;:::i;:::-;;3387:125:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:9;;;;;;;;;;;;;:::i;:::-;;3109:121:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3238:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2933:124;;;;;;;;;;;;;:::i;:::-;;1029:85:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2346:102:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3530:244:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6575:429:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3708:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4182:295:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4489:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3390:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;601:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3955:149:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;643:33:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4686:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;683:24:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2135:98:2;2189:13;2221:5;2214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2135:98;:::o;4412:197::-;4495:4;4511:13;4527:12;:10;:12::i;:::-;4511:28;;4549:32;4558:5;4565:7;4574:6;4549:8;:32::i;:::-;4598:4;4591:11;;;4412:197;;;;:::o;764:31:1:-;;;;;;;;;;;;;:::o;3223:106:2:-;3284:7;3310:12;;3303:19;;3223:106;:::o;5171:286::-;5298:4;5314:15;5332:12;:10;:12::i;:::-;5314:30;;5354:38;5370:4;5376:7;5385:6;5354:15;:38::i;:::-;5402:27;5412:4;5418:2;5422:6;5402:9;:27::i;:::-;5446:4;5439:11;;;5171:286;;;;;:::o;3924:113:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4020:9:1::1;4003:14;;:26;;;;;;;;;;;;;;;;;;3924:113:::0;:::o;3072:91:2:-;3130:5;3154:2;3147:9;;3072:91;:::o;5852:236::-;5940:4;5956:13;5972:12;:10;:12::i;:::-;5956:28;;5994:66;6003:5;6010:7;6049:10;6019:11;:18;6031:5;6019:18;;;;;;;;;;;;;;;:27;6038:7;6019:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;5994:8;:66::i;:::-;6077:4;6070:11;;;5852:236;;;;:::o;724:33:1:-;;;;;;;;;;;;;:::o;4045:125::-;4110:4;4134:19;:28;4154:7;4134:28;;;;;;;;;;;;;;;;;;;;;;;;;4127:35;;4045:125;;;:::o;9791:107::-;9843:14;;;;;;;;;;;9835:32;;:55;9868:21;9835:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9791:107::o;3387:125:2:-;3461:7;3487:9;:18;3497:7;3487:18;;;;;;;;;;;;;;;;3480:25;;3387:125;;;:::o;1661:101:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;3109:121:1:-;3161:4;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3195:5:1::1;3178:14;;:22;;;;;;;;;;;;;;;;;;3218:4;3211:11;;3109:121:::0;:::o;3238:144::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3370:4:1::1;3328:31;:39;3360:6;3328:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;3238:144:::0;;:::o;2933:124::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3002:4:1::1;2988:11;;:18;;;;;;;;;;;;;;;;;;3030:19;3047:1;3030:12;:16;;:19;;;;:::i;:::-;3017:10;:32;;;;2933:124::o:0;1029:85:9:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;2346:102:2:-;2402:13;2434:7;2427:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2346:102;:::o;3530:244:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3637:13:1::1;;;;;;;;;;;3629:21;;:4;:21;;;;3621:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;3725:41;3754:4;3760:5;3725:28;:41::i;:::-;3530:244:::0;;:::o;6575:429:2:-;6668:4;6684:13;6700:12;:10;:12::i;:::-;6684:28;;6722:24;6749:11;:18;6761:5;6749:18;;;;;;;;;;;;;;;:27;6768:7;6749:27;;;;;;;;;;;;;;;;6722:54;;6814:15;6794:16;:35;;6786:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6905:60;6914:5;6921:7;6949:15;6930:16;:34;6905:8;:60::i;:::-;6993:4;6986:11;;;;6575:429;;;;:::o;3708:189::-;3787:4;3803:13;3819:12;:10;:12::i;:::-;3803:28;;3841;3851:5;3858:2;3862:6;3841:9;:28::i;:::-;3886:4;3879:11;;;3708:189;;;;:::o;4182:295:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4259:6:1::1;4254:216;4275:9;:16;4271:1;:20;4254:216;;;4333:13;;;;;;;;;;;4317:29;;:9;4327:1;4317:12;;;;;;;;:::i;:::-;;;;;;;;:29;;;;:73;;;;;4374:15;;;;;;;;;;;4350:40;;:9;4360:1;4350:12;;;;;;;;:::i;:::-;;;;;;;;:40;;;;4317:73;4313:146;;;4439:4;4411:11;:25;4423:9;4433:1;4423:12;;;;;;;;:::i;:::-;;;;;;;;4411:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;4313:146;4293:3;;;;;:::i;:::-;;;;4254:216;;;;4182:295:::0;:::o;4489:185::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4568:6:1::1;4563:104;4584:9;:16;4580:1;:20;4563:104;;;4650:5;4622:11;:25;4634:9;4644:1;4634:12;;;;;;;;:::i;:::-;;;;;;;;4622:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;4602:3;;;;;:::i;:::-;;;;4563:104;;;;4489:185:::0;:::o;3390:132::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3506:8:1::1;3475:19;:28;3495:7;3475:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;3390:132:::0;;:::o;601:35::-;;;;:::o;3955:149:2:-;4044:7;4070:11;:18;4082:5;4070:18;;;;;;;;;;;;;;;:27;4089:7;4070:27;;;;;;;;;;;;;;;;4063:34;;3955:149;;;;:::o;643:33:1:-;;;;:::o;4686:102::-;4739:4;4763:11;:17;4775:4;4763:17;;;;;;;;;;;;;;;;;;;;;;;;;4756:24;;4686:102;;;:::o;1911:198:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;683:24:1:-;;;;:::o;640:96:0:-;693:7;719:10;712:17;;640:96;:::o;10102:370:2:-;10250:1;10233:19;;:5;:19;;;;10225:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10330:1;10311:21;;:7;:21;;;;10303:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10412:6;10382:11;:18;10394:5;10382:18;;;;;;;;;;;;;;;:27;10401:7;10382:27;;;;;;;;;;;;;;;:36;;;;10449:7;10433:32;;10442:5;10433:32;;;10458:6;10433:32;;;;;;:::i;:::-;;;;;;;;10102:370;;;:::o;10749:441::-;10879:24;10906:25;10916:5;10923:7;10906:9;:25::i;:::-;10879:52;;10965:17;10945:16;:37;10941:243;;11026:6;11006:16;:26;;10998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11108:51;11117:5;11124:7;11152:6;11133:16;:25;11108:8;:51::i;:::-;10941:243;10869:321;10749:441;;;:::o;4796:3952:1:-;4944:1;4928:18;;:4;:18;;;;4920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5021:1;5007:16;;:2;:16;;;;4999:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;5083:11;:17;5095:4;5083:17;;;;;;;;;;;;;;;;;;;;;;;;;5082:18;5074:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;5199:1;5189:6;:11;5185:93;;;5217:28;5233:4;5239:2;5243:1;5217:15;:28::i;:::-;5260:7;;5185:93;5336:14;;;;;;;;;;;5332:1786;;;5397:7;:5;:7::i;:::-;5389:15;;:4;:15;;;;:49;;;;;5431:7;:5;:7::i;:::-;5425:13;;:2;:13;;;;5389:49;:86;;;;;5473:1;5459:16;;:2;:16;;;;5389:86;:128;;;;;5510:6;5496:21;;:2;:21;;;;5389:128;:159;;;;;5539:9;;;;;;;;;;;5538:10;5389:159;5367:1740;;;5588:11;;;;;;;;;;;5583:117;;5609:19;:25;5629:4;5609:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;5638:19;:23;5658:2;5638:23;;;;;;;;;;;;;;;;;;;;;;;;;5609:52;5601:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;5583:117;5739:10;;5723:12;:26;5719:54;;5769:4;5751:11;:15;5763:2;5751:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;5719:54;5954:7;:5;:7::i;:::-;5948:13;;:2;:13;;;;:47;;;;;5979:15;;;;;;;;;;;5965:30;;:2;:30;;;;5948:47;:79;;;;;6013:13;;;;;;;;;;;5999:28;;:2;:28;;;;5948:79;5944:267;;;6097:15;6060:23;:34;6084:9;6060:34;;;;;;;;;;;;;;;;:52;6052:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;5944:267;6280:25;:31;6306:4;6280:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;6316:31;:35;6348:2;6316:35;;;;;;;;;;;;;;;;;;;;;;;;;6315:36;6280:71;6276:816;;;6394:20;;6384:6;:30;;6376:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;6541:9;;6524:13;6534:2;6524:9;:13::i;:::-;6515:6;:22;;;;:::i;:::-;:35;;6507:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6276:816;;;6680:25;:29;6706:2;6680:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;6714:31;:37;6746:4;6714:37;;;;;;;;;;;;;;;;;;;;;;;;;6713:38;6680:71;6676:416;;;6794:20;;6784:6;:30;;6776:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;6676:416;;;6933:31;:35;6965:2;6933:35;;;;;;;;;;;;;;;;;;;;;;;;;6928:164;;7027:9;;7010:13;7020:2;7010:9;:13::i;:::-;7001:6;:22;;;;:::i;:::-;:35;;6993:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6928:164;6676:416;6276:816;5367:1740;5332:1786;7132:28;7163:24;7181:4;7163:9;:24::i;:::-;7132:55;;7198:12;7237:18;;7213:20;:42;;7198:57;;7284:7;:34;;;;;7309:9;;;;;;;;;;;7308:10;7284:34;:83;;;;;7336:25;:31;7362:4;7336:31;;;;;;;;;;;;;;;;;;;;;;;;;7335:32;7284:83;:126;;;;;7385:19;:25;7405:4;7385:25;;;;;;;;;;;;;;;;;;;;;;;;;7384:26;7284:126;:167;;;;;7428:19;:23;7448:2;7428:23;;;;;;;;;;;;;;;;;;;;;;;;;7427:24;7284:167;7266:297;;;7490:4;7478:9;;:16;;;;;;;;;;;;;;;;;;7509:10;:8;:10::i;:::-;7546:5;7534:9;;:17;;;;;;;;;;;;;;;;;;7266:297;7575:12;7591:9;;;;;;;;;;;7590:10;7575:25;;7721:19;:25;7741:4;7721:25;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;7764:19;:23;7784:2;7764:23;;;;;;;;;;;;;;;;;;;;;;;;;7721:66;:152;;;;7807:25;:31;7833:4;7807:31;;;;;;;;;;;;;;;;;;;;;;;;;7806:32;:66;;;;;7843:25;:29;7869:2;7843:29;;;;;;;;;;;;;;;;;;;;;;;;;7842:30;7806:66;7721:152;7703:197;;;7895:5;7885:15;;7703:197;7921:12;7952:7;7948:747;;;7980:14;;;;;;;;;;;7976:461;;;8022:23;8041:3;8022:14;8033:2;8022:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;8015:30;;7976:461;;;8173:25;:29;8199:2;8173:29;;;;;;;;;;;;;;;;;;;;;;;;;:85;;;;;8243:15;8206:23;:34;8230:9;8206:34;;;;;;;;;;;;;;;;:52;8173:85;8169:253;;;8290:23;8309:3;8290:14;8301:2;8290:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;8283:30;;8169:253;;;8369:33;8398:3;8369:24;8380:12;;8369:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;8362:40;;8169:253;7976:461;8475:4;8453:18;;:26;;;;;;;:::i;:::-;;;;;;;;8531:30;8551:9;8531:15;:19;;:30;;;;:::i;:::-;8494:23;:34;8518:9;8494:34;;;;;;;;;;;;;;;:67;;;;8601:1;8594:4;:8;8590:56;;;8604:42;8620:4;8634;8641;8604:15;:42::i;:::-;8590:56;8679:4;8669:14;;;;;:::i;:::-;;;7948:747;8707:33;8723:4;8729:2;8733:6;8707:15;:33::i;:::-;4909:3839;;;;4796:3952;;;;:::o;2263:187:9:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;2741:96:10:-;2799:7;2829:1;2825;:5;;;;:::i;:::-;2818:12;;2741:96;;;;:::o;3782:130:1:-;3899:5;3865:25;:31;3891:4;3865:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;3782:130;;:::o;7467:651:2:-;7609:1;7593:18;;:4;:18;;;;7585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7685:1;7671:16;;:2;:16;;;;7663:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7738:38;7759:4;7765:2;7769:6;7738:20;:38::i;:::-;7787:19;7809:9;:15;7819:4;7809:15;;;;;;;;;;;;;;;;7787:37;;7857:6;7842:11;:21;;7834:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7972:6;7958:11;:20;7940:9;:15;7950:4;7940:15;;;;;;;;;;;;;;;:38;;;;8015:6;7998:9;:13;8008:2;7998:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;8052:2;8037:26;;8046:4;8037:26;;;8056:6;8037:26;;;;;;:::i;:::-;;;;;;;;8074:37;8094:4;8100:2;8104:6;8074:19;:37::i;:::-;7575:543;7467:651;;;:::o;9240:543:1:-;9279:23;9305:24;9323:4;9305:9;:24::i;:::-;9279:50;;9373:1;9354:15;:20;9350:33;;;9376:7;;;9350:33;9415:18;;9397:15;:36;9393:78;;;9453:18;;9435:36;;9393:78;9500:25;9528:21;9500:49;;9562:34;9580:15;9562:17;:34::i;:::-;9618:18;9639:44;9665:17;9639:21;:25;;:44;;;;:::i;:::-;9618:65;;9717:1;9696:18;:22;;;;9739:14;;;;;;;;;;;9731:32;;:44;9764:10;9731:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9268:515;;;9240:543;:::o;3451:96:10:-;3509:7;3539:1;3535;:5;;;;:::i;:::-;3528:12;;3451:96;;;;:::o;3836:::-;3894:7;3924:1;3920;:5;;;;:::i;:::-;3913:12;;3836:96;;;;:::o;11774:121:2:-;;;;:::o;12483:120::-;;;;:::o;8756:476:1:-;8823:21;8861:1;8847:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8823:40;;8892:4;8874;8879:1;8874:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;8918:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8908:4;8913:1;8908:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;8953:62;8970:4;8985:15;;;;;;;;;;;9003:11;8953:8;:62::i;:::-;9028:15;;;;;;;;;;;:66;;;9109:11;9135:1;9151:4;9178;9198:15;9028:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8812:420;8756:476;:::o;3108:96:10:-;3166:7;3196:1;3192;:5;;;;:::i;:::-;3185:12;;3108:96;;;;:::o;24:722:11:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1063:370::-;1134:5;1183:3;1176:4;1168:6;1164:17;1160:27;1150:122;;1191:79;;:::i;:::-;1150:122;1308:6;1295:20;1333:94;1423:3;1415:6;1408:4;1400:6;1396:17;1333:94;:::i;:::-;1324:103;;1140:293;1063:370;;;;:::o;1439:133::-;1482:5;1520:6;1507:20;1498:29;;1536:30;1560:5;1536:30;:::i;:::-;1439:133;;;;:::o;1578:139::-;1624:5;1662:6;1649:20;1640:29;;1678:33;1705:5;1678:33;:::i;:::-;1578:139;;;;:::o;1723:329::-;1782:6;1831:2;1819:9;1810:7;1806:23;1802:32;1799:119;;;1837:79;;:::i;:::-;1799:119;1957:1;1982:53;2027:7;2018:6;2007:9;2003:22;1982:53;:::i;:::-;1972:63;;1928:117;1723:329;;;;:::o;2058:351::-;2128:6;2177:2;2165:9;2156:7;2152:23;2148:32;2145:119;;;2183:79;;:::i;:::-;2145:119;2303:1;2328:64;2384:7;2375:6;2364:9;2360:22;2328:64;:::i;:::-;2318:74;;2274:128;2058:351;;;;:::o;2415:474::-;2483:6;2491;2540:2;2528:9;2519:7;2515:23;2511:32;2508:119;;;2546:79;;:::i;:::-;2508:119;2666:1;2691:53;2736:7;2727:6;2716:9;2712:22;2691:53;:::i;:::-;2681:63;;2637:117;2793:2;2819:53;2864:7;2855:6;2844:9;2840:22;2819:53;:::i;:::-;2809:63;;2764:118;2415:474;;;;;:::o;2895:619::-;2972:6;2980;2988;3037:2;3025:9;3016:7;3012:23;3008:32;3005:119;;;3043:79;;:::i;:::-;3005:119;3163:1;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3134:117;3290:2;3316:53;3361:7;3352:6;3341:9;3337:22;3316:53;:::i;:::-;3306:63;;3261:118;3418:2;3444:53;3489:7;3480:6;3469:9;3465:22;3444:53;:::i;:::-;3434:63;;3389:118;2895:619;;;;;:::o;3520:468::-;3585:6;3593;3642:2;3630:9;3621:7;3617:23;3613:32;3610:119;;;3648:79;;:::i;:::-;3610:119;3768:1;3793:53;3838:7;3829:6;3818:9;3814:22;3793:53;:::i;:::-;3783:63;;3739:117;3895:2;3921:50;3963:7;3954:6;3943:9;3939:22;3921:50;:::i;:::-;3911:60;;3866:115;3520:468;;;;;:::o;3994:474::-;4062:6;4070;4119:2;4107:9;4098:7;4094:23;4090:32;4087:119;;;4125:79;;:::i;:::-;4087:119;4245:1;4270:53;4315:7;4306:6;4295:9;4291:22;4270:53;:::i;:::-;4260:63;;4216:117;4372:2;4398:53;4443:7;4434:6;4423:9;4419:22;4398:53;:::i;:::-;4388:63;;4343:118;3994:474;;;;;:::o;4474:539::-;4558:6;4607:2;4595:9;4586:7;4582:23;4578:32;4575:119;;;4613:79;;:::i;:::-;4575:119;4761:1;4750:9;4746:17;4733:31;4791:18;4783:6;4780:30;4777:117;;;4813:79;;:::i;:::-;4777:117;4918:78;4988:7;4979:6;4968:9;4964:22;4918:78;:::i;:::-;4908:88;;4704:302;4474:539;;;;:::o;5019:179::-;5088:10;5109:46;5151:3;5143:6;5109:46;:::i;:::-;5187:4;5182:3;5178:14;5164:28;;5019:179;;;;:::o;5204:108::-;5281:24;5299:5;5281:24;:::i;:::-;5276:3;5269:37;5204:108;;:::o;5318:118::-;5405:24;5423:5;5405:24;:::i;:::-;5400:3;5393:37;5318:118;;:::o;5472:732::-;5591:3;5620:54;5668:5;5620:54;:::i;:::-;5690:86;5769:6;5764:3;5690:86;:::i;:::-;5683:93;;5800:56;5850:5;5800:56;:::i;:::-;5879:7;5910:1;5895:284;5920:6;5917:1;5914:13;5895:284;;;5996:6;5990:13;6023:63;6082:3;6067:13;6023:63;:::i;:::-;6016:70;;6109:60;6162:6;6109:60;:::i;:::-;6099:70;;5955:224;5942:1;5939;5935:9;5930:14;;5895:284;;;5899:14;6195:3;6188:10;;5596:608;;;5472:732;;;;:::o;6210:109::-;6291:21;6306:5;6291:21;:::i;:::-;6286:3;6279:34;6210:109;;:::o;6325:147::-;6420:45;6459:5;6420:45;:::i;:::-;6415:3;6408:58;6325:147;;:::o;6478:364::-;6566:3;6594:39;6627:5;6594:39;:::i;:::-;6649:71;6713:6;6708:3;6649:71;:::i;:::-;6642:78;;6729:52;6774:6;6769:3;6762:4;6755:5;6751:16;6729:52;:::i;:::-;6806:29;6828:6;6806:29;:::i;:::-;6801:3;6797:39;6790:46;;6570:272;6478:364;;;;:::o;6848:366::-;6990:3;7011:67;7075:2;7070:3;7011:67;:::i;:::-;7004:74;;7087:93;7176:3;7087:93;:::i;:::-;7205:2;7200:3;7196:12;7189:19;;6848:366;;;:::o;7220:::-;7362:3;7383:67;7447:2;7442:3;7383:67;:::i;:::-;7376:74;;7459:93;7548:3;7459:93;:::i;:::-;7577:2;7572:3;7568:12;7561:19;;7220:366;;;:::o;7592:::-;7734:3;7755:67;7819:2;7814:3;7755:67;:::i;:::-;7748:74;;7831:93;7920:3;7831:93;:::i;:::-;7949:2;7944:3;7940:12;7933:19;;7592:366;;;:::o;7964:::-;8106:3;8127:67;8191:2;8186:3;8127:67;:::i;:::-;8120:74;;8203:93;8292:3;8203:93;:::i;:::-;8321:2;8316:3;8312:12;8305:19;;7964:366;;;:::o;8336:::-;8478:3;8499:67;8563:2;8558:3;8499:67;:::i;:::-;8492:74;;8575:93;8664:3;8575:93;:::i;:::-;8693:2;8688:3;8684:12;8677:19;;8336:366;;;:::o;8708:::-;8850:3;8871:67;8935:2;8930:3;8871:67;:::i;:::-;8864:74;;8947:93;9036:3;8947:93;:::i;:::-;9065:2;9060:3;9056:12;9049:19;;8708:366;;;:::o;9080:::-;9222:3;9243:67;9307:2;9302:3;9243:67;:::i;:::-;9236:74;;9319:93;9408:3;9319:93;:::i;:::-;9437:2;9432:3;9428:12;9421:19;;9080:366;;;:::o;9452:::-;9594:3;9615:67;9679:2;9674:3;9615:67;:::i;:::-;9608:74;;9691:93;9780:3;9691:93;:::i;:::-;9809:2;9804:3;9800:12;9793:19;;9452:366;;;:::o;9824:::-;9966:3;9987:67;10051:2;10046:3;9987:67;:::i;:::-;9980:74;;10063:93;10152:3;10063:93;:::i;:::-;10181:2;10176:3;10172:12;10165:19;;9824:366;;;:::o;10196:::-;10338:3;10359:67;10423:2;10418:3;10359:67;:::i;:::-;10352:74;;10435:93;10524:3;10435:93;:::i;:::-;10553:2;10548:3;10544:12;10537:19;;10196:366;;;:::o;10568:::-;10710:3;10731:67;10795:2;10790:3;10731:67;:::i;:::-;10724:74;;10807:93;10896:3;10807:93;:::i;:::-;10925:2;10920:3;10916:12;10909:19;;10568:366;;;:::o;10940:::-;11082:3;11103:67;11167:2;11162:3;11103:67;:::i;:::-;11096:74;;11179:93;11268:3;11179:93;:::i;:::-;11297:2;11292:3;11288:12;11281:19;;10940:366;;;:::o;11312:::-;11454:3;11475:67;11539:2;11534:3;11475:67;:::i;:::-;11468:74;;11551:93;11640:3;11551:93;:::i;:::-;11669:2;11664:3;11660:12;11653:19;;11312:366;;;:::o;11684:::-;11826:3;11847:67;11911:2;11906:3;11847:67;:::i;:::-;11840:74;;11923:93;12012:3;11923:93;:::i;:::-;12041:2;12036:3;12032:12;12025:19;;11684:366;;;:::o;12056:::-;12198:3;12219:67;12283:2;12278:3;12219:67;:::i;:::-;12212:74;;12295:93;12384:3;12295:93;:::i;:::-;12413:2;12408:3;12404:12;12397:19;;12056:366;;;:::o;12428:::-;12570:3;12591:67;12655:2;12650:3;12591:67;:::i;:::-;12584:74;;12667:93;12756:3;12667:93;:::i;:::-;12785:2;12780:3;12776:12;12769:19;;12428:366;;;:::o;12800:118::-;12887:24;12905:5;12887:24;:::i;:::-;12882:3;12875:37;12800:118;;:::o;12924:112::-;13007:22;13023:5;13007:22;:::i;:::-;13002:3;12995:35;12924:112;;:::o;13042:222::-;13135:4;13173:2;13162:9;13158:18;13150:26;;13186:71;13254:1;13243:9;13239:17;13230:6;13186:71;:::i;:::-;13042:222;;;;:::o;13270:210::-;13357:4;13395:2;13384:9;13380:18;13372:26;;13408:65;13470:1;13459:9;13455:17;13446:6;13408:65;:::i;:::-;13270:210;;;;:::o;13486:313::-;13599:4;13637:2;13626:9;13622:18;13614:26;;13686:9;13680:4;13676:20;13672:1;13661:9;13657:17;13650:47;13714:78;13787:4;13778:6;13714:78;:::i;:::-;13706:86;;13486:313;;;;:::o;13805:419::-;13971:4;14009:2;13998:9;13994:18;13986:26;;14058:9;14052:4;14048:20;14044:1;14033:9;14029:17;14022:47;14086:131;14212:4;14086:131;:::i;:::-;14078:139;;13805:419;;;:::o;14230:::-;14396:4;14434:2;14423:9;14419:18;14411:26;;14483:9;14477:4;14473:20;14469:1;14458:9;14454:17;14447:47;14511:131;14637:4;14511:131;:::i;:::-;14503:139;;14230:419;;;:::o;14655:::-;14821:4;14859:2;14848:9;14844:18;14836:26;;14908:9;14902:4;14898:20;14894:1;14883:9;14879:17;14872:47;14936:131;15062:4;14936:131;:::i;:::-;14928:139;;14655:419;;;:::o;15080:::-;15246:4;15284:2;15273:9;15269:18;15261:26;;15333:9;15327:4;15323:20;15319:1;15308:9;15304:17;15297:47;15361:131;15487:4;15361:131;:::i;:::-;15353:139;;15080:419;;;:::o;15505:::-;15671:4;15709:2;15698:9;15694:18;15686:26;;15758:9;15752:4;15748:20;15744:1;15733:9;15729:17;15722:47;15786:131;15912:4;15786:131;:::i;:::-;15778:139;;15505:419;;;:::o;15930:::-;16096:4;16134:2;16123:9;16119:18;16111:26;;16183:9;16177:4;16173:20;16169:1;16158:9;16154:17;16147:47;16211:131;16337:4;16211:131;:::i;:::-;16203:139;;15930:419;;;:::o;16355:::-;16521:4;16559:2;16548:9;16544:18;16536:26;;16608:9;16602:4;16598:20;16594:1;16583:9;16579:17;16572:47;16636:131;16762:4;16636:131;:::i;:::-;16628:139;;16355:419;;;:::o;16780:::-;16946:4;16984:2;16973:9;16969:18;16961:26;;17033:9;17027:4;17023:20;17019:1;17008:9;17004:17;16997:47;17061:131;17187:4;17061:131;:::i;:::-;17053:139;;16780:419;;;:::o;17205:::-;17371:4;17409:2;17398:9;17394:18;17386:26;;17458:9;17452:4;17448:20;17444:1;17433:9;17429:17;17422:47;17486:131;17612:4;17486:131;:::i;:::-;17478:139;;17205:419;;;:::o;17630:::-;17796:4;17834:2;17823:9;17819:18;17811:26;;17883:9;17877:4;17873:20;17869:1;17858:9;17854:17;17847:47;17911:131;18037:4;17911:131;:::i;:::-;17903:139;;17630:419;;;:::o;18055:::-;18221:4;18259:2;18248:9;18244:18;18236:26;;18308:9;18302:4;18298:20;18294:1;18283:9;18279:17;18272:47;18336:131;18462:4;18336:131;:::i;:::-;18328:139;;18055:419;;;:::o;18480:::-;18646:4;18684:2;18673:9;18669:18;18661:26;;18733:9;18727:4;18723:20;18719:1;18708:9;18704:17;18697:47;18761:131;18887:4;18761:131;:::i;:::-;18753:139;;18480:419;;;:::o;18905:::-;19071:4;19109:2;19098:9;19094:18;19086:26;;19158:9;19152:4;19148:20;19144:1;19133:9;19129:17;19122:47;19186:131;19312:4;19186:131;:::i;:::-;19178:139;;18905:419;;;:::o;19330:::-;19496:4;19534:2;19523:9;19519:18;19511:26;;19583:9;19577:4;19573:20;19569:1;19558:9;19554:17;19547:47;19611:131;19737:4;19611:131;:::i;:::-;19603:139;;19330:419;;;:::o;19755:::-;19921:4;19959:2;19948:9;19944:18;19936:26;;20008:9;20002:4;19998:20;19994:1;19983:9;19979:17;19972:47;20036:131;20162:4;20036:131;:::i;:::-;20028:139;;19755:419;;;:::o;20180:::-;20346:4;20384:2;20373:9;20369:18;20361:26;;20433:9;20427:4;20423:20;20419:1;20408:9;20404:17;20397:47;20461:131;20587:4;20461:131;:::i;:::-;20453:139;;20180:419;;;:::o;20605:222::-;20698:4;20736:2;20725:9;20721:18;20713:26;;20749:71;20817:1;20806:9;20802:17;20793:6;20749:71;:::i;:::-;20605:222;;;;:::o;20833:831::-;21096:4;21134:3;21123:9;21119:19;21111:27;;21148:71;21216:1;21205:9;21201:17;21192:6;21148:71;:::i;:::-;21229:80;21305:2;21294:9;21290:18;21281:6;21229:80;:::i;:::-;21356:9;21350:4;21346:20;21341:2;21330:9;21326:18;21319:48;21384:108;21487:4;21478:6;21384:108;:::i;:::-;21376:116;;21502:72;21570:2;21559:9;21555:18;21546:6;21502:72;:::i;:::-;21584:73;21652:3;21641:9;21637:19;21628:6;21584:73;:::i;:::-;20833:831;;;;;;;;:::o;21670:214::-;21759:4;21797:2;21786:9;21782:18;21774:26;;21810:67;21874:1;21863:9;21859:17;21850:6;21810:67;:::i;:::-;21670:214;;;;:::o;21890:129::-;21924:6;21951:20;;:::i;:::-;21941:30;;21980:33;22008:4;22000:6;21980:33;:::i;:::-;21890:129;;;:::o;22025:75::-;22058:6;22091:2;22085:9;22075:19;;22025:75;:::o;22106:311::-;22183:4;22273:18;22265:6;22262:30;22259:56;;;22295:18;;:::i;:::-;22259:56;22345:4;22337:6;22333:17;22325:25;;22405:4;22399;22395:15;22387:23;;22106:311;;;:::o;22423:132::-;22490:4;22513:3;22505:11;;22543:4;22538:3;22534:14;22526:22;;22423:132;;;:::o;22561:114::-;22628:6;22662:5;22656:12;22646:22;;22561:114;;;:::o;22681:99::-;22733:6;22767:5;22761:12;22751:22;;22681:99;;;:::o;22786:113::-;22856:4;22888;22883:3;22879:14;22871:22;;22786:113;;;:::o;22905:184::-;23004:11;23038:6;23033:3;23026:19;23078:4;23073:3;23069:14;23054:29;;22905:184;;;;:::o;23095:169::-;23179:11;23213:6;23208:3;23201:19;23253:4;23248:3;23244:14;23229:29;;23095:169;;;;:::o;23270:305::-;23310:3;23329:20;23347:1;23329:20;:::i;:::-;23324:25;;23363:20;23381:1;23363:20;:::i;:::-;23358:25;;23517:1;23449:66;23445:74;23442:1;23439:81;23436:107;;;23523:18;;:::i;:::-;23436:107;23567:1;23564;23560:9;23553:16;;23270:305;;;;:::o;23581:185::-;23621:1;23638:20;23656:1;23638:20;:::i;:::-;23633:25;;23672:20;23690:1;23672:20;:::i;:::-;23667:25;;23711:1;23701:35;;23716:18;;:::i;:::-;23701:35;23758:1;23755;23751:9;23746:14;;23581:185;;;;:::o;23772:348::-;23812:7;23835:20;23853:1;23835:20;:::i;:::-;23830:25;;23869:20;23887:1;23869:20;:::i;:::-;23864:25;;24057:1;23989:66;23985:74;23982:1;23979:81;23974:1;23967:9;23960:17;23956:105;23953:131;;;24064:18;;:::i;:::-;23953:131;24112:1;24109;24105:9;24094:20;;23772:348;;;;:::o;24126:191::-;24166:4;24186:20;24204:1;24186:20;:::i;:::-;24181:25;;24220:20;24238:1;24220:20;:::i;:::-;24215:25;;24259:1;24256;24253:8;24250:34;;;24264:18;;:::i;:::-;24250:34;24309:1;24306;24302:9;24294:17;;24126:191;;;;:::o;24323:96::-;24360:7;24389:24;24407:5;24389:24;:::i;:::-;24378:35;;24323:96;;;:::o;24425:90::-;24459:7;24502:5;24495:13;24488:21;24477:32;;24425:90;;;:::o;24521:126::-;24558:7;24598:42;24591:5;24587:54;24576:65;;24521:126;;;:::o;24653:77::-;24690:7;24719:5;24708:16;;24653:77;;;:::o;24736:86::-;24771:7;24811:4;24804:5;24800:16;24789:27;;24736:86;;;:::o;24828:121::-;24886:9;24919:24;24937:5;24919:24;:::i;:::-;24906:37;;24828:121;;;:::o;24955:307::-;25023:1;25033:113;25047:6;25044:1;25041:13;25033:113;;;25132:1;25127:3;25123:11;25117:18;25113:1;25108:3;25104:11;25097:39;25069:2;25066:1;25062:10;25057:15;;25033:113;;;25164:6;25161:1;25158:13;25155:101;;;25244:1;25235:6;25230:3;25226:16;25219:27;25155:101;25004:258;24955:307;;;:::o;25268:320::-;25312:6;25349:1;25343:4;25339:12;25329:22;;25396:1;25390:4;25386:12;25417:18;25407:81;;25473:4;25465:6;25461:17;25451:27;;25407:81;25535:2;25527:6;25524:14;25504:18;25501:38;25498:84;;;25554:18;;:::i;:::-;25498:84;25319:269;25268:320;;;:::o;25594:281::-;25677:27;25699:4;25677:27;:::i;:::-;25669:6;25665:40;25807:6;25795:10;25792:22;25771:18;25759:10;25756:34;25753:62;25750:88;;;25818:18;;:::i;:::-;25750:88;25858:10;25854:2;25847:22;25637:238;25594:281;;:::o;25881:233::-;25920:3;25943:24;25961:5;25943:24;:::i;:::-;25934:33;;25989:66;25982:5;25979:77;25976:103;;;26059:18;;:::i;:::-;25976:103;26106:1;26099:5;26095:13;26088:20;;25881:233;;;:::o;26120:180::-;26168:77;26165:1;26158:88;26265:4;26262:1;26255:15;26289:4;26286:1;26279:15;26306:180;26354:77;26351:1;26344:88;26451:4;26448:1;26441:15;26475:4;26472:1;26465:15;26492:180;26540:77;26537:1;26530:88;26637:4;26634:1;26627:15;26661:4;26658:1;26651:15;26678:180;26726:77;26723:1;26716:88;26823:4;26820:1;26813:15;26847:4;26844:1;26837:15;26864:180;26912:77;26909:1;26902:88;27009:4;27006:1;26999:15;27033:4;27030:1;27023:15;27050:117;27159:1;27156;27149:12;27173:117;27282:1;27279;27272:12;27296:117;27405:1;27402;27395:12;27419:117;27528:1;27525;27518:12;27542:102;27583:6;27634:2;27630:7;27625:2;27618:5;27614:14;27610:28;27600:38;;27542:102;;;:::o;27650:222::-;27790:34;27786:1;27778:6;27774:14;27767:58;27859:5;27854:2;27846:6;27842:15;27835:30;27650:222;:::o;27878:225::-;28018:34;28014:1;28006:6;28002:14;27995:58;28087:8;28082:2;28074:6;28070:15;28063:33;27878:225;:::o;28109:221::-;28249:34;28245:1;28237:6;28233:14;28226:58;28318:4;28313:2;28305:6;28301:15;28294:29;28109:221;:::o;28336:244::-;28476:34;28472:1;28464:6;28460:14;28453:58;28545:27;28540:2;28532:6;28528:15;28521:52;28336:244;:::o;28586:179::-;28726:31;28722:1;28714:6;28710:14;28703:55;28586:179;:::o;28771:225::-;28911:34;28907:1;28899:6;28895:14;28888:58;28980:8;28975:2;28967:6;28963:15;28956:33;28771:225;:::o;29002:221::-;29142:34;29138:1;29130:6;29126:14;29119:58;29211:4;29206:2;29198:6;29194:15;29187:29;29002:221;:::o;29229:182::-;29369:34;29365:1;29357:6;29353:14;29346:58;29229:182;:::o;29417:290::-;29557:34;29553:1;29545:6;29541:14;29534:58;29626:34;29621:2;29613:6;29609:15;29602:59;29695:4;29690:2;29682:6;29678:15;29671:29;29417:290;:::o;29713:224::-;29853:34;29849:1;29841:6;29837:14;29830:58;29922:7;29917:2;29909:6;29905:15;29898:32;29713:224;:::o;29943:223::-;30083:34;30079:1;30071:6;30067:14;30060:58;30152:6;30147:2;30139:6;30135:15;30128:31;29943:223;:::o;30172:246::-;30312:34;30308:1;30300:6;30296:14;30289:58;30381:29;30376:2;30368:6;30364:15;30357:54;30172:246;:::o;30424:289::-;30564:34;30560:1;30552:6;30548:14;30541:58;30633:34;30628:2;30620:6;30616:15;30609:59;30702:3;30697:2;30689:6;30685:15;30678:28;30424:289;:::o;30719:181::-;30859:33;30855:1;30847:6;30843:14;30836:57;30719:181;:::o;30906:298::-;31046:34;31042:1;31034:6;31030:14;31023:58;31115:34;31110:2;31102:6;31098:15;31091:59;31184:12;31179:2;31171:6;31167:15;31160:37;30906:298;:::o;31210:224::-;31350:34;31346:1;31338:6;31334:14;31327:58;31419:7;31414:2;31406:6;31402:15;31395:32;31210:224;:::o;31440:122::-;31513:24;31531:5;31513:24;:::i;:::-;31506:5;31503:35;31493:63;;31552:1;31549;31542:12;31493:63;31440:122;:::o;31568:116::-;31638:21;31653:5;31638:21;:::i;:::-;31631:5;31628:32;31618:60;;31674:1;31671;31664:12;31618:60;31568:116;:::o;31690:122::-;31763:24;31781:5;31763:24;:::i;:::-;31756:5;31753:35;31743:63;;31802:1;31799;31792:12;31743:63;31690:122;:::o
Swarm Source
ipfs://867f5e15302154cba1fa47e117240078ef3433a1511ae9d9e7d0f848621989b2
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.