Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000 GFI
Holders
314
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.668706838272444148 GFIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GFI
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-20 */ //The World's First AI Privacy Swap. // SPDX-License-Identifier: MIT pragma solidity = 0.8.19; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Sync(uint112 reserve0, uint112 reserve1); function sync() external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } 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); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev 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 to 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 {} } library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } interface IUniswapV2Router02 is IUniswapV2Router01 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract GFI is ERC20, Ownable { IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public percentForLPBurn = 25; // 25 = .25% bool public lpBurnEnabled = false; uint256 public lpBurnFrequency = 3600 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch mapping (address => bool) public isBlacklisted; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; string public _websiteInformation; string public _twitterInformation; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _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) public automatedMarketMakerPairs; constructor() ERC20(unicode"Ghost Finance", unicode"GFI") { 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 _buyMarketingFee = 25; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 35; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 0; uint256 totalSupply = 1000000000000 * 1e18; maxTransactionAmount = totalSupply * 2 / 100; // maxWallet = totalSupply * 2 / 100; // swapTokensAtAmount = totalSupply * 5 / 1000; // buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(owner()); devWallet = address(owner()); // // 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(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function openTrading() external onlyOwner { tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function Updatealllimits() external onlyOwner returns (bool){ limitsInEffect = false; transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount <= 1, "Swap amount cannot be higher than 1% total supply."); swapTokensAtAmount = totalSupply() * newAmount / 100; return true; } function updateMaxTxnAmount(uint256 txNum, uint256 walNum) external onlyOwner { require(txNum >= 1, "Cannot set maxTransactionAmount lower than 1%"); maxTransactionAmount = (totalSupply() * txNum / 100)/1e18; require(walNum >= 1, "Cannot set maxWallet lower than 1%"); maxWallet = (totalSupply() * walNum / 100)/1e18; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 40, "Must keep fees at 99% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 50, "Must keep fees at 99% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; } function UpdateallmarketingWallet(address newMarketingWallet) external onlyOwner { marketingWallet = newMarketingWallet; } function UpdatealldevWallet(address newWallet) external onlyOwner { devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function massManageBoughtEarly(address[] calldata wallets, bool flag) external onlyOwner { for(uint256 i = 0; i < wallets.length; i++){ isBlacklisted[wallets[i]] = flag; } } function withdrawETH() external onlyOwner returns(bool){ (bool success, ) = owner().call{value: address(this).balance}(""); return success; } 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(!isBlacklisted[from] && !isBlacklisted[to],"Blacklisted"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount * sellTotalFees/100; tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount * buyTotalFees/100; tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() public { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance - liquidityTokens; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance - initialETHBalance; uint256 ethForMarketing = ethBalance * tokensForMarketing/totalTokensToSwap; uint256 ethForDev = ethBalance * tokensForDev/totalTokensToSwap; uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){ require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish"); require(percent <= 1000, "May not nuke more than 10% of tokens in LP"); lastManualLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance * percent/10000; if (amountToBurn > 0){ super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); return true; } /** Socials - Web & Twitter **/ function setSocialswebtwitter( string calldata __websiteInformation, string calldata __twitterInformation ) external { require( msg.sender == address(owner()), "Only developer can adjust social links" ); _websiteInformation = __websiteInformation; _twitterInformation = __twitterInformation; } function getWebsiteInformation() public view returns (string memory) { return _websiteInformation; } function getTwitterInformation() public view returns (string memory) { return _twitterInformation; } }
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":"newWallet","type":"address"}],"name":"UpdatealldevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Updatealllimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"UpdateallmarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_twitterInformation","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_websiteInformation","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"getTwitterInformation","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWebsiteInformation","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"massManageBoughtEarly","outputs":[],"stateMutability":"nonpayable","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"__websiteInformation","type":"string"},{"internalType":"string","name":"__twitterInformation","type":"string"}],"name":"setSocialswebtwitter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txNum","type":"uint256"},{"internalType":"uint256","name":"walNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526019600b55600c805460ff19908116909155610e10600d55610708600f556011805462ffffff19166001908117909155601480549092161790553480156200004b57600080fd5b506040518060400160405280600d81526020016c47686f73742046696e616e636560981b8152506040518060400160405280600381526020016247464960e81b81525081600390816200009f91906200072e565b506004620000ae82826200072e565b5050506000620000c36200044160201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6200013381600162000445565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a49190620007fa565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002189190620007fa565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000266573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028c9190620007fa565b6001600160a01b031660a0819052620002a790600162000445565b60a0516001600160a01b03166000908152602460205260409020805460ff191660011790556019600080602381806c0c9f2c9cd04674edea400000006064620002f28260026200083b565b620002fe919062000855565b6008556064620003108260026200083b565b6200031c919062000855565b600a556103e86200032f8260056200083b565b6200033b919062000855565b600955601687905560178690556018859055846200035a878962000878565b62000366919062000878565b601555601a849055601b839055601c8290558162000385848662000878565b62000391919062000878565b601955600554600680546001600160a01b03199081166001600160a01b039093169283179091556007805490911682179055620003d0906001620004bf565b620003dd306001620004bf565b620003ec61dead6001620004bf565b6200040b620004036005546001600160a01b031690565b600162000445565b6200041830600162000445565b6200042761dead600162000445565b62000433338262000535565b50505050505050506200088e565b3390565b6005546001600160a01b03163314620004945760405162461bcd60e51b81526020600482018190526024820152600080516020620039ce83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146200050a5760405162461bcd60e51b81526020600482018190526024820152600080516020620039ce83398151915260448201526064016200048b565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6001600160a01b0382166200058d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200048b565b6002546200059c90826200061e565b6002556001600160a01b038216600090815260208190526040902054620005c490826200061e565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b6000806200062d838562000878565b905083811015620006815760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200048b565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006b557607f821691505b602082108103620006d657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200061957600081815260208120601f850160051c81016020861015620007055750805b601f850160051c820191505b81811015620007265782815560010162000711565b505050505050565b81516001600160401b038111156200074a576200074a6200068a565b62000762816200075b8454620006a0565b84620006dc565b602080601f8311600181146200079a5760008415620007815750858301515b600019600386901b1c1916600185901b17855562000726565b600085815260208120601f198616915b82811015620007cb57888601518255948401946001909101908401620007aa565b5085821015620007ea5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200080d57600080fd5b81516001600160a01b03811681146200068157600080fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000684576200068462000825565b6000826200087357634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000684576200068462000825565b60805160a0516130d4620008fa60003960008181610658015281816119ff01528181611a9b01528181611ac70152611ebb0152600081816104f301528181611e7d0152818161262a015281816126e30152818161271f0152818161279901526127f601526130d46000f3fe6080604052600436106103e85760003560e01c80638da5cb5b11610208578063c804343211610118578063e086e5ec116100ab578063f2fde38b1161007a578063f2fde38b14610b4a578063f637434214610b6a578063f8b45b0514610b80578063fe575a8714610b96578063fe72b27a14610bc657600080fd5b8063e086e5ec14610af4578063e0dc354614610b09578063e2f4560514610b1e578063f11a24d314610b3457600080fd5b8063c9567bf9116100e7578063c9567bf914610a63578063d257b34f14610a78578063d85ba06314610a98578063dd62ed3e14610aae57600080fd5b8063c804343214610a09578063c876d0b914610a1e578063c8a4aef014610a38578063c8c8ebe414610a4d57600080fd5b8063a0d82dc51161019b578063b62496f51161016a578063b62496f514610965578063bbc0c74214610995578063c0246668146109b4578063c17b5b8c146109d4578063c3f93b01146109f457600080fd5b8063a0d82dc5146108f9578063a457c2d71461090f578063a4c82a001461092f578063a9059cbb1461094557600080fd5b806395d89b41116101d757806395d89b41146108a25780639c3b4fdc146108b75780639ec22c0e146108cd5780639fccce32146108e357600080fd5b80638da5cb5b1461082e5780638ea5220f1461084c578063921369131461086c578063924de9b71461088257600080fd5b8063313ce567116103035780636ac5eeee116102965780637514b675116102655780637514b675146107985780637571336a146107b857806375f0a874146107d85780637bce5a04146107f85780638095d5641461080e57600080fd5b80636ac5eeee146107185780636ddd17131461072d57806370a082311461074d578063715018a61461078357600080fd5b80634fbee193116102d25780634fbee1931461069457806356c8c7ae146106cd5780635882e1c1146106e25780636a486a8e1461070257600080fd5b8063313ce5671461060a578063395093511461062657806349bd5a5e146106465780634a62bb651461067a57600080fd5b8063184c16c51161037b57806323b872dd1161034a57806323b872dd146105a457806327c8f835146105c45780632c3e486c146105da5780632e82f1a0146105f057600080fd5b8063184c16c51461054c578063199ffc72146105625780631a8145bb146105785780631f3fed8f1461058e57600080fd5b806311e0cf38116103b757806311e0cf38146104a1578063130a2c3c146104c15780631694505e146104e157806318160ddd1461052d57600080fd5b806306fdde03146103f4578063095ea7b31461041f57806310d5de531461044f57806311a582c31461047f57600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50610409610be6565b6040516104169190612976565b60405180910390f35b34801561042b57600080fd5b5061043f61043a3660046129dc565b610c78565b6040519015158152602001610416565b34801561045b57600080fd5b5061043f61046a366004612a08565b60236020526000908152604090205460ff1681565b34801561048b57600080fd5b5061049f61049a366004612a25565b610c8f565b005b3480156104ad57600080fd5b5061049f6104bc366004612a08565b610df5565b3480156104cd57600080fd5b5061049f6104dc366004612a57565b610e41565b3480156104ed57600080fd5b506105157f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610416565b34801561053957600080fd5b506002545b604051908152602001610416565b34801561055857600080fd5b5061053e600f5481565b34801561056e57600080fd5b5061053e600b5481565b34801561058457600080fd5b5061053e601e5481565b34801561059a57600080fd5b5061053e601d5481565b3480156105b057600080fd5b5061043f6105bf366004612adb565b610ee2565b3480156105d057600080fd5b5061051561dead81565b3480156105e657600080fd5b5061053e600d5481565b3480156105fc57600080fd5b50600c5461043f9060ff1681565b34801561061657600080fd5b5060405160128152602001610416565b34801561063257600080fd5b5061043f6106413660046129dc565b610f4b565b34801561065257600080fd5b506105157f000000000000000000000000000000000000000000000000000000000000000081565b34801561068657600080fd5b5060115461043f9060ff1681565b3480156106a057600080fd5b5061043f6106af366004612a08565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156106d957600080fd5b50610409610f81565b3480156106ee57600080fd5b5061049f6106fd366004612a08565b61100f565b34801561070e57600080fd5b5061053e60195481565b34801561072457600080fd5b5061049f61105b565b34801561073957600080fd5b5060115461043f9062010000900460ff1681565b34801561075957600080fd5b5061053e610768366004612a08565b6001600160a01b031660009081526020819052604090205490565b34801561078f57600080fd5b5061049f611251565b3480156107a457600080fd5b5061049f6107b3366004612b65565b6112c5565b3480156107c457600080fd5b5061049f6107d3366004612bd1565b611350565b3480156107e457600080fd5b50600654610515906001600160a01b031681565b34801561080457600080fd5b5061053e60165481565b34801561081a57600080fd5b5061049f610829366004612c06565b6113a5565b34801561083a57600080fd5b506005546001600160a01b0316610515565b34801561085857600080fd5b50600754610515906001600160a01b031681565b34801561087857600080fd5b5061053e601a5481565b34801561088e57600080fd5b5061049f61089d366004612c32565b61144d565b3480156108ae57600080fd5b50610409611493565b3480156108c357600080fd5b5061053e60185481565b3480156108d957600080fd5b5061053e60105481565b3480156108ef57600080fd5b5061053e601f5481565b34801561090557600080fd5b5061053e601c5481565b34801561091b57600080fd5b5061043f61092a3660046129dc565b6114a2565b34801561093b57600080fd5b5061053e600e5481565b34801561095157600080fd5b5061043f6109603660046129dc565b6114f1565b34801561097157600080fd5b5061043f610980366004612a08565b60246020526000908152604090205460ff1681565b3480156109a157600080fd5b5060115461043f90610100900460ff1681565b3480156109c057600080fd5b5061049f6109cf366004612bd1565b6114fe565b3480156109e057600080fd5b5061049f6109ef366004612c06565b611553565b348015610a0057600080fd5b506104096115f6565b348015610a1557600080fd5b50610409611605565b348015610a2a57600080fd5b5060145461043f9060ff1681565b348015610a4457600080fd5b5061043f611612565b348015610a5957600080fd5b5061053e60085481565b348015610a6f57600080fd5b5061049f61165b565b348015610a8457600080fd5b5061043f610a93366004612c4d565b61169c565b348015610aa457600080fd5b5061053e60155481565b348015610aba57600080fd5b5061053e610ac9366004612c66565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b0057600080fd5b5061043f611761565b348015610b1557600080fd5b506104096117fa565b348015610b2a57600080fd5b5061053e60095481565b348015610b4057600080fd5b5061053e60175481565b348015610b5657600080fd5b5061049f610b65366004612a08565b611809565b348015610b7657600080fd5b5061053e601b5481565b348015610b8c57600080fd5b5061053e600a5481565b348015610ba257600080fd5b5061043f610bb1366004612a08565b60136020526000908152604090205460ff1681565b348015610bd257600080fd5b5061043f610be1366004612c4d565b6118f4565b606060038054610bf590612c9f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2190612c9f565b8015610c6e5780601f10610c4357610100808354040283529160200191610c6e565b820191906000526020600020905b815481529060010190602001808311610c5157829003601f168201915b5050505050905090565b6000610c85338484611b46565b5060015b92915050565b6005546001600160a01b03163314610cc25760405162461bcd60e51b8152600401610cb990612cd9565b60405180910390fd5b6001821015610d295760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b6064820152608401610cb9565b670de0b6b3a7640000606483610d3e60025490565b610d489190612d24565b610d529190612d3b565b610d5c9190612d3b565b6008556001811015610dbb5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610cb9565b670de0b6b3a7640000606482610dd060025490565b610dda9190612d24565b610de49190612d3b565b610dee9190612d3b565b600a555050565b6005546001600160a01b03163314610e1f5760405162461bcd60e51b8152600401610cb990612cd9565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e6b5760405162461bcd60e51b8152600401610cb990612cd9565b60005b82811015610edc578160136000868685818110610e8d57610e8d612d5d565b9050602002016020810190610ea29190612a08565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610ed481612d73565b915050610e6e565b50505050565b6000610eef848484611c6b565b610f418433610f3c85604051806060016040528060288152602001613052602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612533565b611b46565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c85918590610f3c908661256d565b60218054610f8e90612c9f565b80601f0160208091040260200160405190810160405280929190818152602001828054610fba90612c9f565b80156110075780601f10610fdc57610100808354040283529160200191611007565b820191906000526020600020905b815481529060010190602001808311610fea57829003601f168201915b505050505081565b6005546001600160a01b031633146110395760405162461bcd60e51b8152600401610cb990612cd9565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b3060009081526020819052604081205490506000601f54601d54601e546110829190612d8c565b61108c9190612d8c565b9050600082158061109b575081155b156110a557505050565b6009546110b3906014612d24565b8311156110cb576009546110c8906014612d24565b92505b6000600283601e54866110de9190612d24565b6110e89190612d3b565b6110f29190612d3b565b905060006111008286612d9f565b90504761110c826125d3565b60006111188247612d9f565b9050600086601d548361112b9190612d24565b6111359190612d3b565b9050600087601f54846111489190612d24565b6111529190612d3b565b90506000816111618486612d9f565b61116b9190612d9f565b6000601e819055601d819055601f8190556007546040519293506001600160a01b031691849181818185875af1925050503d80600081146111c8576040519150601f19603f3d011682016040523d82523d6000602084013e6111cd565b606091505b509098505086158015906111e15750600081115b156111f0576111f08782612793565b6006546040516001600160a01b03909116904790600081818185875af1925050503d806000811461123d576040519150601f19603f3d011682016040523d82523d6000602084013e611242565b606091505b50505050505050505050505050565b6005546001600160a01b0316331461127b5760405162461bcd60e51b8152600401610cb990612cd9565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461132e5760405162461bcd60e51b815260206004820152602660248201527f4f6e6c7920646576656c6f7065722063616e2061646a75737420736f6369616c604482015265206c696e6b7360d01b6064820152608401610cb9565b602061133b848683612e0e565b506021611349828483612e0e565b5050505050565b6005546001600160a01b0316331461137a5760405162461bcd60e51b8152600401610cb990612cd9565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113cf5760405162461bcd60e51b8152600401610cb990612cd9565b601683905560178290556018819055806113e98385612d8c565b6113f39190612d8c565b6015819055602810156114485760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610cb9565b505050565b6005546001600160a01b031633146114775760405162461bcd60e51b8152600401610cb990612cd9565b60118054911515620100000262ff000019909216919091179055565b606060048054610bf590612c9f565b6000610c853384610f3c8560405180606001604052806025815260200161307a602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612533565b6000610c85338484611c6b565b6005546001600160a01b031633146115285760405162461bcd60e51b8152600401610cb990612cd9565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461157d5760405162461bcd60e51b8152600401610cb990612cd9565b601a839055601b829055601c819055806115978385612d8c565b6115a19190612d8c565b6019819055603210156114485760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610cb9565b606060218054610bf590612c9f565b60208054610f8e90612c9f565b6005546000906001600160a01b0316331461163f5760405162461bcd60e51b8152600401610cb990612cd9565b506011805460ff19908116909155601480549091169055600190565b6005546001600160a01b031633146116855760405162461bcd60e51b8152600401610cb990612cd9565b6011805462ffff0019166201010017905542600e55565b6005546000906001600160a01b031633146116c95760405162461bcd60e51b8152600401610cb990612cd9565b60018211156117355760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610cb9565b60648261174160025490565b61174b9190612d24565b6117559190612d3b565b6009555060015b919050565b6005546000906001600160a01b0316331461178e5760405162461bcd60e51b8152600401610cb990612cd9565b60006117a26005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d80600081146117ec576040519150601f19603f3d011682016040523d82523d6000602084013e6117f1565b606091505b50909250505090565b606060208054610bf590612c9f565b6005546001600160a01b031633146118335760405162461bcd60e51b8152600401610cb990612cd9565b6001600160a01b0381166118985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cb9565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146119215760405162461bcd60e51b8152600401610cb990612cd9565b600f546010546119319190612d8c565b421161197f5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610cb9565b6103e88211156119e45760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610cb9565b426010556040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260009030906370a0823190602401602060405180830381865afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a739190612ece565b90506000612710611a848584612d24565b611a8e9190612d3b565b90508015611ac357611ac37f000000000000000000000000000000000000000000000000000000000000000061dead8361286d565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b50600198975050505050505050565b6001600160a01b038316611ba85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cb9565b6001600160a01b038216611c095760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cb9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c915760405162461bcd60e51b8152600401610cb990612ee7565b6001600160a01b038216611cb75760405162461bcd60e51b8152600401610cb990612f2c565b6001600160a01b03831660009081526013602052604090205460ff16158015611cf957506001600160a01b03821660009081526013602052604090205460ff16155b611d335760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610cb9565b80600003611d47576114488383600061286d565b60115460ff1615612204576005546001600160a01b03848116911614801590611d7e57506005546001600160a01b03838116911614155b8015611d9257506001600160a01b03821615155b8015611da957506001600160a01b03821661dead14155b8015611dbf5750600554600160a01b900460ff16155b1561220457601154610100900460ff16611e57576001600160a01b03831660009081526022602052604090205460ff1680611e1257506001600160a01b03821660009081526022602052604090205460ff165b611e575760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cb9565b60145460ff1615611f9e576005546001600160a01b03838116911614801590611eb257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611ef057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611f9e57326000908152601260205260409020544311611f8b5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610cb9565b3260009081526012602052604090204390555b6001600160a01b03831660009081526024602052604090205460ff168015611fdf57506001600160a01b03821660009081526023602052604090205460ff16155b156120c3576008548111156120545760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610cb9565b600a546001600160a01b03831660009081526020819052604090205461207a9083612d8c565b11156120be5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cb9565b612204565b6001600160a01b03821660009081526024602052604090205460ff16801561210457506001600160a01b03831660009081526023602052604090205460ff16155b1561217a576008548111156120be5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610cb9565b6001600160a01b03821660009081526023602052604090205460ff1661220457600a546001600160a01b0383166000908152602081905260409020546121c09083612d8c565b11156122045760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cb9565b3060009081526020819052604090205460095481108015908190612230575060115462010000900460ff165b80156122465750600554600160a01b900460ff16155b801561226b57506001600160a01b03851660009081526024602052604090205460ff16155b801561229057506001600160a01b03851660009081526022602052604090205460ff16155b80156122b557506001600160a01b03841660009081526022602052604090205460ff16155b156122e3576005805460ff60a01b1916600160a01b1790556122d561105b565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526022602052604090205460ff600160a01b90920482161591168061233157506001600160a01b03851660009081526022602052604090205460ff165b1561233a575060005b6000811561251f576001600160a01b03861660009081526024602052604090205460ff16801561236c57506000601954115b15612424576064601954866123819190612d24565b61238b9190612d3b565b9050601954601b548261239e9190612d24565b6123a89190612d3b565b601e60008282546123b99190612d8c565b9091555050601954601c546123ce9083612d24565b6123d89190612d3b565b601f60008282546123e99190612d8c565b9091555050601954601a546123fe9083612d24565b6124089190612d3b565b601d60008282546124199190612d8c565b909155506125019050565b6001600160a01b03871660009081526024602052604090205460ff16801561244e57506000601554115b15612501576064601554866124639190612d24565b61246d9190612d3b565b9050601554601754826124809190612d24565b61248a9190612d3b565b601e600082825461249b9190612d8c565b90915550506015546018546124b09083612d24565b6124ba9190612d3b565b601f60008282546124cb9190612d8c565b90915550506015546016546124e09083612d24565b6124ea9190612d3b565b601d60008282546124fb9190612d8c565b90915550505b80156125125761251287308361286d565b61251c8186612d9f565b94505b61252a87878761286d565b50505050505050565b600081848411156125575760405162461bcd60e51b8152600401610cb99190612976565b5060006125648486612d9f565b95945050505050565b60008061257a8385612d8c565b9050838110156125cc5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cb9565b9392505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061260857612608612d5d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190612f6f565b816001815181106126bd576126bd612d5d565b60200260200101906001600160a01b031690816001600160a01b031681525050612708307f000000000000000000000000000000000000000000000000000000000000000084611b46565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061275d908590600090869030904290600401612f8c565b600060405180830381600087803b15801561277757600080fd5b505af115801561278b573d6000803e3d6000fd5b505050505050565b6127be307f000000000000000000000000000000000000000000000000000000000000000084611b46565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612848573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113499190612ffd565b6001600160a01b0383166128935760405162461bcd60e51b8152600401610cb990612ee7565b6001600160a01b0382166128b95760405162461bcd60e51b8152600401610cb990612f2c565b6128f68160405180606001604052806026815260200161302c602691396001600160a01b0386166000908152602081905260409020549190612533565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612925908261256d565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c5e565b600060208083528351808285015260005b818110156129a357858101830151858201604001528201612987565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146129d957600080fd5b50565b600080604083850312156129ef57600080fd5b82356129fa816129c4565b946020939093013593505050565b600060208284031215612a1a57600080fd5b81356125cc816129c4565b60008060408385031215612a3857600080fd5b50508035926020909101359150565b8035801515811461175c57600080fd5b600080600060408486031215612a6c57600080fd5b833567ffffffffffffffff80821115612a8457600080fd5b818601915086601f830112612a9857600080fd5b813581811115612aa757600080fd5b8760208260051b8501011115612abc57600080fd5b602092830195509350612ad29186019050612a47565b90509250925092565b600080600060608486031215612af057600080fd5b8335612afb816129c4565b92506020840135612b0b816129c4565b929592945050506040919091013590565b60008083601f840112612b2e57600080fd5b50813567ffffffffffffffff811115612b4657600080fd5b602083019150836020828501011115612b5e57600080fd5b9250929050565b60008060008060408587031215612b7b57600080fd5b843567ffffffffffffffff80821115612b9357600080fd5b612b9f88838901612b1c565b90965094506020870135915080821115612bb857600080fd5b50612bc587828801612b1c565b95989497509550505050565b60008060408385031215612be457600080fd5b8235612bef816129c4565b9150612bfd60208401612a47565b90509250929050565b600080600060608486031215612c1b57600080fd5b505081359360208301359350604090920135919050565b600060208284031215612c4457600080fd5b6125cc82612a47565b600060208284031215612c5f57600080fd5b5035919050565b60008060408385031215612c7957600080fd5b8235612c84816129c4565b91506020830135612c94816129c4565b809150509250929050565b600181811c90821680612cb357607f821691505b602082108103612cd357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c8957610c89612d0e565b600082612d5857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201612d8557612d85612d0e565b5060010190565b80820180821115610c8957610c89612d0e565b81810381811115610c8957610c89612d0e565b634e487b7160e01b600052604160045260246000fd5b601f82111561144857600081815260208120601f850160051c81016020861015612def5750805b601f850160051c820191505b8181101561278b57828155600101612dfb565b67ffffffffffffffff831115612e2657612e26612db2565b612e3a83612e348354612c9f565b83612dc8565b6000601f841160018114612e6e5760008515612e565750838201355b600019600387901b1c1916600186901b178355611349565b600083815260209020601f19861690835b82811015612e9f5786850135825560209485019460019092019101612e7f565b5086821015612ebc5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600060208284031215612ee057600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060208284031215612f8157600080fd5b81516125cc816129c4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fdc5784516001600160a01b031683529383019391830191600101612fb7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561301257600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122095aa62b60e29cbe5e035c5e62a442a96ac2452087484833cb42db58686132dd764736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103e85760003560e01c80638da5cb5b11610208578063c804343211610118578063e086e5ec116100ab578063f2fde38b1161007a578063f2fde38b14610b4a578063f637434214610b6a578063f8b45b0514610b80578063fe575a8714610b96578063fe72b27a14610bc657600080fd5b8063e086e5ec14610af4578063e0dc354614610b09578063e2f4560514610b1e578063f11a24d314610b3457600080fd5b8063c9567bf9116100e7578063c9567bf914610a63578063d257b34f14610a78578063d85ba06314610a98578063dd62ed3e14610aae57600080fd5b8063c804343214610a09578063c876d0b914610a1e578063c8a4aef014610a38578063c8c8ebe414610a4d57600080fd5b8063a0d82dc51161019b578063b62496f51161016a578063b62496f514610965578063bbc0c74214610995578063c0246668146109b4578063c17b5b8c146109d4578063c3f93b01146109f457600080fd5b8063a0d82dc5146108f9578063a457c2d71461090f578063a4c82a001461092f578063a9059cbb1461094557600080fd5b806395d89b41116101d757806395d89b41146108a25780639c3b4fdc146108b75780639ec22c0e146108cd5780639fccce32146108e357600080fd5b80638da5cb5b1461082e5780638ea5220f1461084c578063921369131461086c578063924de9b71461088257600080fd5b8063313ce567116103035780636ac5eeee116102965780637514b675116102655780637514b675146107985780637571336a146107b857806375f0a874146107d85780637bce5a04146107f85780638095d5641461080e57600080fd5b80636ac5eeee146107185780636ddd17131461072d57806370a082311461074d578063715018a61461078357600080fd5b80634fbee193116102d25780634fbee1931461069457806356c8c7ae146106cd5780635882e1c1146106e25780636a486a8e1461070257600080fd5b8063313ce5671461060a578063395093511461062657806349bd5a5e146106465780634a62bb651461067a57600080fd5b8063184c16c51161037b57806323b872dd1161034a57806323b872dd146105a457806327c8f835146105c45780632c3e486c146105da5780632e82f1a0146105f057600080fd5b8063184c16c51461054c578063199ffc72146105625780631a8145bb146105785780631f3fed8f1461058e57600080fd5b806311e0cf38116103b757806311e0cf38146104a1578063130a2c3c146104c15780631694505e146104e157806318160ddd1461052d57600080fd5b806306fdde03146103f4578063095ea7b31461041f57806310d5de531461044f57806311a582c31461047f57600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50610409610be6565b6040516104169190612976565b60405180910390f35b34801561042b57600080fd5b5061043f61043a3660046129dc565b610c78565b6040519015158152602001610416565b34801561045b57600080fd5b5061043f61046a366004612a08565b60236020526000908152604090205460ff1681565b34801561048b57600080fd5b5061049f61049a366004612a25565b610c8f565b005b3480156104ad57600080fd5b5061049f6104bc366004612a08565b610df5565b3480156104cd57600080fd5b5061049f6104dc366004612a57565b610e41565b3480156104ed57600080fd5b506105157f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610416565b34801561053957600080fd5b506002545b604051908152602001610416565b34801561055857600080fd5b5061053e600f5481565b34801561056e57600080fd5b5061053e600b5481565b34801561058457600080fd5b5061053e601e5481565b34801561059a57600080fd5b5061053e601d5481565b3480156105b057600080fd5b5061043f6105bf366004612adb565b610ee2565b3480156105d057600080fd5b5061051561dead81565b3480156105e657600080fd5b5061053e600d5481565b3480156105fc57600080fd5b50600c5461043f9060ff1681565b34801561061657600080fd5b5060405160128152602001610416565b34801561063257600080fd5b5061043f6106413660046129dc565b610f4b565b34801561065257600080fd5b506105157f000000000000000000000000d025fb8b32b3ab2949d1fa3c8d20370663ae5eb681565b34801561068657600080fd5b5060115461043f9060ff1681565b3480156106a057600080fd5b5061043f6106af366004612a08565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156106d957600080fd5b50610409610f81565b3480156106ee57600080fd5b5061049f6106fd366004612a08565b61100f565b34801561070e57600080fd5b5061053e60195481565b34801561072457600080fd5b5061049f61105b565b34801561073957600080fd5b5060115461043f9062010000900460ff1681565b34801561075957600080fd5b5061053e610768366004612a08565b6001600160a01b031660009081526020819052604090205490565b34801561078f57600080fd5b5061049f611251565b3480156107a457600080fd5b5061049f6107b3366004612b65565b6112c5565b3480156107c457600080fd5b5061049f6107d3366004612bd1565b611350565b3480156107e457600080fd5b50600654610515906001600160a01b031681565b34801561080457600080fd5b5061053e60165481565b34801561081a57600080fd5b5061049f610829366004612c06565b6113a5565b34801561083a57600080fd5b506005546001600160a01b0316610515565b34801561085857600080fd5b50600754610515906001600160a01b031681565b34801561087857600080fd5b5061053e601a5481565b34801561088e57600080fd5b5061049f61089d366004612c32565b61144d565b3480156108ae57600080fd5b50610409611493565b3480156108c357600080fd5b5061053e60185481565b3480156108d957600080fd5b5061053e60105481565b3480156108ef57600080fd5b5061053e601f5481565b34801561090557600080fd5b5061053e601c5481565b34801561091b57600080fd5b5061043f61092a3660046129dc565b6114a2565b34801561093b57600080fd5b5061053e600e5481565b34801561095157600080fd5b5061043f6109603660046129dc565b6114f1565b34801561097157600080fd5b5061043f610980366004612a08565b60246020526000908152604090205460ff1681565b3480156109a157600080fd5b5060115461043f90610100900460ff1681565b3480156109c057600080fd5b5061049f6109cf366004612bd1565b6114fe565b3480156109e057600080fd5b5061049f6109ef366004612c06565b611553565b348015610a0057600080fd5b506104096115f6565b348015610a1557600080fd5b50610409611605565b348015610a2a57600080fd5b5060145461043f9060ff1681565b348015610a4457600080fd5b5061043f611612565b348015610a5957600080fd5b5061053e60085481565b348015610a6f57600080fd5b5061049f61165b565b348015610a8457600080fd5b5061043f610a93366004612c4d565b61169c565b348015610aa457600080fd5b5061053e60155481565b348015610aba57600080fd5b5061053e610ac9366004612c66565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b0057600080fd5b5061043f611761565b348015610b1557600080fd5b506104096117fa565b348015610b2a57600080fd5b5061053e60095481565b348015610b4057600080fd5b5061053e60175481565b348015610b5657600080fd5b5061049f610b65366004612a08565b611809565b348015610b7657600080fd5b5061053e601b5481565b348015610b8c57600080fd5b5061053e600a5481565b348015610ba257600080fd5b5061043f610bb1366004612a08565b60136020526000908152604090205460ff1681565b348015610bd257600080fd5b5061043f610be1366004612c4d565b6118f4565b606060038054610bf590612c9f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2190612c9f565b8015610c6e5780601f10610c4357610100808354040283529160200191610c6e565b820191906000526020600020905b815481529060010190602001808311610c5157829003601f168201915b5050505050905090565b6000610c85338484611b46565b5060015b92915050565b6005546001600160a01b03163314610cc25760405162461bcd60e51b8152600401610cb990612cd9565b60405180910390fd5b6001821015610d295760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b6064820152608401610cb9565b670de0b6b3a7640000606483610d3e60025490565b610d489190612d24565b610d529190612d3b565b610d5c9190612d3b565b6008556001811015610dbb5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610cb9565b670de0b6b3a7640000606482610dd060025490565b610dda9190612d24565b610de49190612d3b565b610dee9190612d3b565b600a555050565b6005546001600160a01b03163314610e1f5760405162461bcd60e51b8152600401610cb990612cd9565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e6b5760405162461bcd60e51b8152600401610cb990612cd9565b60005b82811015610edc578160136000868685818110610e8d57610e8d612d5d565b9050602002016020810190610ea29190612a08565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610ed481612d73565b915050610e6e565b50505050565b6000610eef848484611c6b565b610f418433610f3c85604051806060016040528060288152602001613052602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612533565b611b46565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c85918590610f3c908661256d565b60218054610f8e90612c9f565b80601f0160208091040260200160405190810160405280929190818152602001828054610fba90612c9f565b80156110075780601f10610fdc57610100808354040283529160200191611007565b820191906000526020600020905b815481529060010190602001808311610fea57829003601f168201915b505050505081565b6005546001600160a01b031633146110395760405162461bcd60e51b8152600401610cb990612cd9565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b3060009081526020819052604081205490506000601f54601d54601e546110829190612d8c565b61108c9190612d8c565b9050600082158061109b575081155b156110a557505050565b6009546110b3906014612d24565b8311156110cb576009546110c8906014612d24565b92505b6000600283601e54866110de9190612d24565b6110e89190612d3b565b6110f29190612d3b565b905060006111008286612d9f565b90504761110c826125d3565b60006111188247612d9f565b9050600086601d548361112b9190612d24565b6111359190612d3b565b9050600087601f54846111489190612d24565b6111529190612d3b565b90506000816111618486612d9f565b61116b9190612d9f565b6000601e819055601d819055601f8190556007546040519293506001600160a01b031691849181818185875af1925050503d80600081146111c8576040519150601f19603f3d011682016040523d82523d6000602084013e6111cd565b606091505b509098505086158015906111e15750600081115b156111f0576111f08782612793565b6006546040516001600160a01b03909116904790600081818185875af1925050503d806000811461123d576040519150601f19603f3d011682016040523d82523d6000602084013e611242565b606091505b50505050505050505050505050565b6005546001600160a01b0316331461127b5760405162461bcd60e51b8152600401610cb990612cd9565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461132e5760405162461bcd60e51b815260206004820152602660248201527f4f6e6c7920646576656c6f7065722063616e2061646a75737420736f6369616c604482015265206c696e6b7360d01b6064820152608401610cb9565b602061133b848683612e0e565b506021611349828483612e0e565b5050505050565b6005546001600160a01b0316331461137a5760405162461bcd60e51b8152600401610cb990612cd9565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113cf5760405162461bcd60e51b8152600401610cb990612cd9565b601683905560178290556018819055806113e98385612d8c565b6113f39190612d8c565b6015819055602810156114485760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610cb9565b505050565b6005546001600160a01b031633146114775760405162461bcd60e51b8152600401610cb990612cd9565b60118054911515620100000262ff000019909216919091179055565b606060048054610bf590612c9f565b6000610c853384610f3c8560405180606001604052806025815260200161307a602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612533565b6000610c85338484611c6b565b6005546001600160a01b031633146115285760405162461bcd60e51b8152600401610cb990612cd9565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461157d5760405162461bcd60e51b8152600401610cb990612cd9565b601a839055601b829055601c819055806115978385612d8c565b6115a19190612d8c565b6019819055603210156114485760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610cb9565b606060218054610bf590612c9f565b60208054610f8e90612c9f565b6005546000906001600160a01b0316331461163f5760405162461bcd60e51b8152600401610cb990612cd9565b506011805460ff19908116909155601480549091169055600190565b6005546001600160a01b031633146116855760405162461bcd60e51b8152600401610cb990612cd9565b6011805462ffff0019166201010017905542600e55565b6005546000906001600160a01b031633146116c95760405162461bcd60e51b8152600401610cb990612cd9565b60018211156117355760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610cb9565b60648261174160025490565b61174b9190612d24565b6117559190612d3b565b6009555060015b919050565b6005546000906001600160a01b0316331461178e5760405162461bcd60e51b8152600401610cb990612cd9565b60006117a26005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d80600081146117ec576040519150601f19603f3d011682016040523d82523d6000602084013e6117f1565b606091505b50909250505090565b606060208054610bf590612c9f565b6005546001600160a01b031633146118335760405162461bcd60e51b8152600401610cb990612cd9565b6001600160a01b0381166118985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cb9565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146119215760405162461bcd60e51b8152600401610cb990612cd9565b600f546010546119319190612d8c565b421161197f5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610cb9565b6103e88211156119e45760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610cb9565b426010556040516370a0823160e01b81526001600160a01b037f000000000000000000000000d025fb8b32b3ab2949d1fa3c8d20370663ae5eb616600482015260009030906370a0823190602401602060405180830381865afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a739190612ece565b90506000612710611a848584612d24565b611a8e9190612d3b565b90508015611ac357611ac37f000000000000000000000000d025fb8b32b3ab2949d1fa3c8d20370663ae5eb661dead8361286d565b60007f000000000000000000000000d025fb8b32b3ab2949d1fa3c8d20370663ae5eb69050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b50600198975050505050505050565b6001600160a01b038316611ba85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cb9565b6001600160a01b038216611c095760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cb9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c915760405162461bcd60e51b8152600401610cb990612ee7565b6001600160a01b038216611cb75760405162461bcd60e51b8152600401610cb990612f2c565b6001600160a01b03831660009081526013602052604090205460ff16158015611cf957506001600160a01b03821660009081526013602052604090205460ff16155b611d335760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610cb9565b80600003611d47576114488383600061286d565b60115460ff1615612204576005546001600160a01b03848116911614801590611d7e57506005546001600160a01b03838116911614155b8015611d9257506001600160a01b03821615155b8015611da957506001600160a01b03821661dead14155b8015611dbf5750600554600160a01b900460ff16155b1561220457601154610100900460ff16611e57576001600160a01b03831660009081526022602052604090205460ff1680611e1257506001600160a01b03821660009081526022602052604090205460ff165b611e575760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cb9565b60145460ff1615611f9e576005546001600160a01b03838116911614801590611eb257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611ef057507f000000000000000000000000d025fb8b32b3ab2949d1fa3c8d20370663ae5eb66001600160a01b0316826001600160a01b031614155b15611f9e57326000908152601260205260409020544311611f8b5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610cb9565b3260009081526012602052604090204390555b6001600160a01b03831660009081526024602052604090205460ff168015611fdf57506001600160a01b03821660009081526023602052604090205460ff16155b156120c3576008548111156120545760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610cb9565b600a546001600160a01b03831660009081526020819052604090205461207a9083612d8c565b11156120be5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cb9565b612204565b6001600160a01b03821660009081526024602052604090205460ff16801561210457506001600160a01b03831660009081526023602052604090205460ff16155b1561217a576008548111156120be5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610cb9565b6001600160a01b03821660009081526023602052604090205460ff1661220457600a546001600160a01b0383166000908152602081905260409020546121c09083612d8c565b11156122045760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cb9565b3060009081526020819052604090205460095481108015908190612230575060115462010000900460ff165b80156122465750600554600160a01b900460ff16155b801561226b57506001600160a01b03851660009081526024602052604090205460ff16155b801561229057506001600160a01b03851660009081526022602052604090205460ff16155b80156122b557506001600160a01b03841660009081526022602052604090205460ff16155b156122e3576005805460ff60a01b1916600160a01b1790556122d561105b565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526022602052604090205460ff600160a01b90920482161591168061233157506001600160a01b03851660009081526022602052604090205460ff165b1561233a575060005b6000811561251f576001600160a01b03861660009081526024602052604090205460ff16801561236c57506000601954115b15612424576064601954866123819190612d24565b61238b9190612d3b565b9050601954601b548261239e9190612d24565b6123a89190612d3b565b601e60008282546123b99190612d8c565b9091555050601954601c546123ce9083612d24565b6123d89190612d3b565b601f60008282546123e99190612d8c565b9091555050601954601a546123fe9083612d24565b6124089190612d3b565b601d60008282546124199190612d8c565b909155506125019050565b6001600160a01b03871660009081526024602052604090205460ff16801561244e57506000601554115b15612501576064601554866124639190612d24565b61246d9190612d3b565b9050601554601754826124809190612d24565b61248a9190612d3b565b601e600082825461249b9190612d8c565b90915550506015546018546124b09083612d24565b6124ba9190612d3b565b601f60008282546124cb9190612d8c565b90915550506015546016546124e09083612d24565b6124ea9190612d3b565b601d60008282546124fb9190612d8c565b90915550505b80156125125761251287308361286d565b61251c8186612d9f565b94505b61252a87878761286d565b50505050505050565b600081848411156125575760405162461bcd60e51b8152600401610cb99190612976565b5060006125648486612d9f565b95945050505050565b60008061257a8385612d8c565b9050838110156125cc5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cb9565b9392505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061260857612608612d5d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190612f6f565b816001815181106126bd576126bd612d5d565b60200260200101906001600160a01b031690816001600160a01b031681525050612708307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b46565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061275d908590600090869030904290600401612f8c565b600060405180830381600087803b15801561277757600080fd5b505af115801561278b573d6000803e3d6000fd5b505050505050565b6127be307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b46565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612848573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113499190612ffd565b6001600160a01b0383166128935760405162461bcd60e51b8152600401610cb990612ee7565b6001600160a01b0382166128b95760405162461bcd60e51b8152600401610cb990612f2c565b6128f68160405180606001604052806026815260200161302c602691396001600160a01b0386166000908152602081905260409020549190612533565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612925908261256d565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c5e565b600060208083528351808285015260005b818110156129a357858101830151858201604001528201612987565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146129d957600080fd5b50565b600080604083850312156129ef57600080fd5b82356129fa816129c4565b946020939093013593505050565b600060208284031215612a1a57600080fd5b81356125cc816129c4565b60008060408385031215612a3857600080fd5b50508035926020909101359150565b8035801515811461175c57600080fd5b600080600060408486031215612a6c57600080fd5b833567ffffffffffffffff80821115612a8457600080fd5b818601915086601f830112612a9857600080fd5b813581811115612aa757600080fd5b8760208260051b8501011115612abc57600080fd5b602092830195509350612ad29186019050612a47565b90509250925092565b600080600060608486031215612af057600080fd5b8335612afb816129c4565b92506020840135612b0b816129c4565b929592945050506040919091013590565b60008083601f840112612b2e57600080fd5b50813567ffffffffffffffff811115612b4657600080fd5b602083019150836020828501011115612b5e57600080fd5b9250929050565b60008060008060408587031215612b7b57600080fd5b843567ffffffffffffffff80821115612b9357600080fd5b612b9f88838901612b1c565b90965094506020870135915080821115612bb857600080fd5b50612bc587828801612b1c565b95989497509550505050565b60008060408385031215612be457600080fd5b8235612bef816129c4565b9150612bfd60208401612a47565b90509250929050565b600080600060608486031215612c1b57600080fd5b505081359360208301359350604090920135919050565b600060208284031215612c4457600080fd5b6125cc82612a47565b600060208284031215612c5f57600080fd5b5035919050565b60008060408385031215612c7957600080fd5b8235612c84816129c4565b91506020830135612c94816129c4565b809150509250929050565b600181811c90821680612cb357607f821691505b602082108103612cd357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c8957610c89612d0e565b600082612d5857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201612d8557612d85612d0e565b5060010190565b80820180821115610c8957610c89612d0e565b81810381811115610c8957610c89612d0e565b634e487b7160e01b600052604160045260246000fd5b601f82111561144857600081815260208120601f850160051c81016020861015612def5750805b601f850160051c820191505b8181101561278b57828155600101612dfb565b67ffffffffffffffff831115612e2657612e26612db2565b612e3a83612e348354612c9f565b83612dc8565b6000601f841160018114612e6e5760008515612e565750838201355b600019600387901b1c1916600186901b178355611349565b600083815260209020601f19861690835b82811015612e9f5786850135825560209485019460019092019101612e7f565b5086821015612ebc5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600060208284031215612ee057600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060208284031215612f8157600080fd5b81516125cc816129c4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fdc5784516001600160a01b031683529383019391830191600101612fb7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561301257600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122095aa62b60e29cbe5e035c5e62a442a96ac2452087484833cb42db58686132dd764736f6c63430008130033
Deployed Bytecode Sourcemap
22557:15854:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4877:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7044:169;;;;;;;;;;-1:-1:-1;7044:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;7044:169:0;1023:187:1;24282:64:0;;;;;;;;;;-1:-1:-1;24282:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27391:360;;;;;;;;;;-1:-1:-1;27391:360:0;;;;;:::i;:::-;;:::i;:::-;;29309:106;;;;;;;;;;-1:-1:-1;29309:106:0;;;;;:::i;:::-;;:::i;29556:205::-;;;;;;;;;;-1:-1:-1;29556:205:0;;;;;:::i;:::-;;:::i;22597:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2770:32:1;;;2752:51;;2740:2;2725:18;22597:51:0;2579:230:1;5997:108:0;;;;;;;;;;-1:-1:-1;6085:12:0;;5997:108;;;2960:25:1;;;2948:2;2933:18;5997:108:0;2814:177:1;23175:47:0;;;;;;;;;;;;;;;;22985:36;;;;;;;;;;;;;;;;24011:33;;;;;;;;;;;;;;;;23971;;;;;;;;;;;;;;;;7695:355;;;;;;;;;;-1:-1:-1;7695:355:0;;;;;:::i;:::-;;:::i;22700:53::-;;;;;;;;;;;;22746:6;22700:53;;23081:45;;;;;;;;;;;;;;;;23041:33;;;;;;;;;;-1:-1:-1;23041:33:0;;;;;;;;5839:93;;;;;;;;;;-1:-1:-1;5839:93:0;;5922:2;3807:36:1;;3795:2;3780:18;5839:93:0;3665:184:1;8459:218:0;;;;;;;;;;-1:-1:-1;8459:218:0;;;;;:::i;:::-;;:::i;22655:38::-;;;;;;;;;;;;;;;23273:33;;;;;;;;;;-1:-1:-1;23273:33:0;;;;;;;;29423:125;;;;;;;;;;-1:-1:-1;29423:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;29512:28:0;29488:4;29512:28;;;:19;:28;;;;;;;;;29423:125;24127:33;;;;;;;;;;;;;:::i;29161:136::-;;;;;;;;;;-1:-1:-1;29161:136:0;;;;;:::i;:::-;;:::i;23822:28::-;;;;;;;;;;;;;;;;35273:1522;;;;;;;;;;;;;:::i;23353:31::-;;;;;;;;;;-1:-1:-1;23353:31:0;;;;;;;;;;;6168:127;;;;;;;;;;-1:-1:-1;6168:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;6269:18:0;6242:7;6269:18;;;;;;;;;;;;6168:127;19342:148;;;;;;;;;;;;;:::i;37778:382::-;;;;;;;;;;-1:-1:-1;37778:382:0;;;;;:::i;:::-;;:::i;27759:144::-;;;;;;;;;;-1:-1:-1;27759:144:0;;;;;:::i;:::-;;:::i;22792:30::-;;;;;;;;;;-1:-1:-1;22792:30:0;;;;-1:-1:-1;;;;;22792:30:0;;;23711;;;;;;;;;;;;;;;;28116:369;;;;;;;;;;-1:-1:-1;28116:369:0;;;;;:::i;:::-;;:::i;18700:79::-;;;;;;;;;;-1:-1:-1;18765:6:0;;-1:-1:-1;;;;;18765:6:0;18700:79;;22829:24;;;;;;;;;;-1:-1:-1;22829:24:0;;;;-1:-1:-1;;;;;22829:24:0;;;23857:31;;;;;;;;;;;;;;;;28003:101;;;;;;;;;;-1:-1:-1;28003:101:0;;;;;:::i;:::-;;:::i;5096:104::-;;;;;;;;;;;;;:::i;23785:24::-;;;;;;;;;;;;;;;;23229:35;;;;;;;;;;;;;;;;24051:27;;;;;;;;;;;;;;;;23933:25;;;;;;;;;;;;;;;;9180:269;;;;;;;;;;-1:-1:-1;9180:269:0;;;;;:::i;:::-;;:::i;23133:29::-;;;;;;;;;;;;;;;;6508:175;;;;;;;;;;-1:-1:-1;6508:175:0;;;;;:::i;:::-;;:::i;24504:58::-;;;;;;;;;;-1:-1:-1;24504:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23313:33;;;;;;;;;;-1:-1:-1;23313:33:0;;;;;;;;;;;28883:132;;;;;;;;;;-1:-1:-1;28883:132:0;;;;;:::i;:::-;;:::i;28497:378::-;;;;;;;;;;-1:-1:-1;28497:378:0;;;;;:::i;:::-;;:::i;38292:114::-;;;;;;;;;;;;;:::i;24087:33::-;;;;;;;;;;;;;:::i;23629:39::-;;;;;;;;;;-1:-1:-1;23629:39:0;;;;;;;;26880:162;;;;;;;;;;;;;:::i;22866:35::-;;;;;;;;;;;;;;;;26671:153;;;;;;;;;;;;;:::i;27116:263::-;;;;;;;;;;-1:-1:-1;27116:263:0;;;;;:::i;:::-;;:::i;23677:27::-;;;;;;;;;;;;;;;;6746:151;;;;;;;;;;-1:-1:-1;6746:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6862:18:0;;;6835:7;6862:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6746:151;29769:164;;;;;;;;;;;;;:::i;38170:114::-;;;;;;;;;;;;;:::i;22908:33::-;;;;;;;;;;;;;;;;23748:30;;;;;;;;;;;;;;;;19645:244;;;;;;;;;;-1:-1:-1;19645:244:0;;;;;:::i;:::-;;:::i;23895:31::-;;;;;;;;;;;;;;;;22948:24;;;;;;;;;;;;;;;;23576:46;;;;;;;;;;-1:-1:-1;23576:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36803:902;;;;;;;;;;-1:-1:-1;36803:902:0;;;;;:::i;:::-;;:::i;4877:100::-;4931:13;4964:5;4957:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4877:100;:::o;7044:169::-;7127:4;7144:39;358:10;7167:7;7176:6;7144:8;:39::i;:::-;-1:-1:-1;7201:4:0;7044:169;;;;;:::o;27391:360::-;18912:6;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;;;;;;;;;27497:1:::1;27488:5;:10;;27480:68;;;::::0;-1:-1:-1;;;27480:68:0;;7285:2:1;27480:68:0::1;::::0;::::1;7267:21:1::0;7324:2;7304:18;;;7297:30;7363:34;7343:18;;;7336:62;-1:-1:-1;;;7414:18:1;;;7407:43;7467:19;;27480:68:0::1;7083:409:1::0;27480:68:0::1;27612:4;27607:3;27599:5;27583:13;6085:12:::0;;;5997:108;27583:13:::1;:21;;;;:::i;:::-;:27;;;;:::i;:::-;27582:34;;;;:::i;:::-;27559:20;:57:::0;27645:1:::1;27635:11:::0;::::1;;27627:58;;;::::0;-1:-1:-1;;;27627:58:0;;8226:2:1;27627:58:0::1;::::0;::::1;8208:21:1::0;8265:2;8245:18;;;8238:30;8304:34;8284:18;;;8277:62;-1:-1:-1;;;8355:18:1;;;8348:32;8397:19;;27627:58:0::1;8024:398:1::0;27627:58:0::1;27739:4;27734:3;27725:6;27709:13;6085:12:::0;;;5997:108;27709:13:::1;:22;;;;:::i;:::-;:28;;;;:::i;:::-;27708:35;;;;:::i;:::-;27696:9;:47:::0;-1:-1:-1;;27391:360:0:o;29309:106::-;18912:6;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;29386:9:::1;:21:::0;;-1:-1:-1;;;;;;29386:21:0::1;-1:-1:-1::0;;;;;29386:21:0;;;::::1;::::0;;;::::1;::::0;;29309:106::o;29556:205::-;18912:6;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;29660:9:::1;29656:98;29675:18:::0;;::::1;29656:98;;;29738:4;29710:13;:25;29724:7;;29732:1;29724:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29710:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29710:25:0;:32;;-1:-1:-1;;29710:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29695:3;::::1;::::0;::::1;:::i;:::-;;;;29656:98;;;;29556:205:::0;;;:::o;7695:355::-;7835:4;7852:36;7862:6;7870:9;7881:6;7852:9;:36::i;:::-;7899:121;7908:6;358:10;7930:89;7968:6;7930:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7930:19:0;;;;;;:11;:19;;;;;;;;358:10;7930:33;;;;;;;;;;:37;:89::i;:::-;7899:8;:121::i;:::-;-1:-1:-1;8038:4:0;7695:355;;;;;:::o;8459:218::-;358:10;8547:4;8596:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8596:34:0;;;;;;;;;;8547:4;;8564:83;;8587:7;;8596:50;;8635:10;8596:38;:50::i;24127:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29161:136::-;18912:6;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;29253:15:::1;:36:::0;;-1:-1:-1;;;;;;29253:36:0::1;-1:-1:-1::0;;;;;29253:36:0;;;::::1;::::0;;;::::1;::::0;;29161:136::o;35273:1522::-;35355:4;35311:23;6269:18;;;;;;;;;;;35311:50;;35372:25;35442:12;;35421:18;;35400;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;35372:82;-1:-1:-1;35465:12:0;35501:20;;;:46;;-1:-1:-1;35525:22:0;;35501:46;35498:60;;;35550:7;;;35273:1522::o;35498:60::-;35591:18;;:23;;35612:2;35591:23;:::i;:::-;35573:15;:41;35570:111;;;35646:18;;:23;;35667:2;35646:23;:::i;:::-;35628:41;;35570:111;35750:23;35835:1;35815:17;35794:18;;35776:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;35750:86;-1:-1:-1;35847:26:0;35876:33;35750:86;35876:15;:33;:::i;:::-;35847:62;-1:-1:-1;35958:21:0;35992:36;35847:62;35992:16;:36::i;:::-;36050:18;36071:41;36095:17;36071:21;:41;:::i;:::-;36050:62;;36133:23;36191:17;36172:18;;36159:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;36133:75;;36219:17;36265;36252:12;;36239:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;36219:63;-1:-1:-1;36303:23:0;36219:63;36329:28;36342:15;36329:10;:28;:::i;:::-;:40;;;;:::i;:::-;36411:1;36390:18;:22;;;36423:18;:22;;;36456:12;:16;;;36514:9;;36506:45;;36303:66;;-1:-1:-1;;;;;;36514:9:0;;36537;;36506:45;36411:1;36506:45;36537:9;36514;36506:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36493:58:0;;-1:-1:-1;;36575:19:0;;;;;:42;;;36616:1;36598:15;:19;36575:42;36572:119;;;36633:46;36646:15;36663;36633:12;:46::i;:::-;36732:15;;36724:63;;-1:-1:-1;;;;;36732:15:0;;;;36761:21;;36724:63;;;;36761:21;36732:15;36724:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;35273:1522:0:o;19342:148::-;18912:6;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;19433:6:::1;::::0;19412:40:::1;::::0;19449:1:::1;::::0;-1:-1:-1;;;;;19433:6:0::1;::::0;19412:40:::1;::::0;19449:1;;19412:40:::1;19463:6;:19:::0;;-1:-1:-1;;;;;;19463:19:0::1;::::0;;19342:148::o;37778:382::-;18765:6;;-1:-1:-1;;;;;18765:6:0;37951:10;:31;37929:119;;;;-1:-1:-1;;;37929:119:0;;9374:2:1;37929:119:0;;;9356:21:1;9413:2;9393:18;;;9386:30;9452:34;9432:18;;;9425:62;-1:-1:-1;;;9503:18:1;;;9496:36;9549:19;;37929:119:0;9172:402:1;37929:119:0;38061:19;:42;38083:20;;38061:19;:42;:::i;:::-;-1:-1:-1;38114:19:0;:42;38136:20;;38114:19;:42;:::i;:::-;;37778:382;;;;:::o;27759:144::-;18912:6;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27849:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;27849:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27759:144::o;28116:369::-;18912:6;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;28232:15:::1;:31:::0;;;28274:15:::1;:31:::0;;;28316:9:::1;:19:::0;;;28328:7;28361:33:::1;28292:13:::0;28250;28361:33:::1;:::i;:::-;:45;;;;:::i;:::-;28346:12;:60:::0;;;28441:2:::1;-1:-1:-1::0;28425:18:0::1;28417:60;;;::::0;-1:-1:-1;;;28417:60:0;;11971:2:1;28417:60:0::1;::::0;::::1;11953:21:1::0;12010:2;11990:18;;;11983:30;12049:31;12029:18;;;12022:59;12098:18;;28417:60:0::1;11769:353:1::0;28417:60:0::1;28116:369:::0;;;:::o;28003:101::-;18912:6;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;28075:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;28075:21:0;;::::1;::::0;;;::::1;::::0;;28003:101::o;5096:104::-;5152:13;5185:7;5178:14;;;;;:::i;9180:269::-;9273:4;9290:129;358:10;9313:7;9322:96;9361:15;9322:96;;;;;;;;;;;;;;;;;358:10;9322:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9322:34:0;;;;;;;;;;;;:38;:96::i;6508:175::-;6594:4;6611:42;358:10;6635:9;6646:6;6611:9;:42::i;28883:132::-;18912:6;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28968:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;28968:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28883:132::o;28497:378::-;18912:6;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;28614:16:::1;:32:::0;;;28657:16:::1;:32:::0;;;28700:10:::1;:20:::0;;;28713:7;28747:35:::1;28676:13:::0;28633;28747:35:::1;:::i;:::-;:48;;;;:::i;:::-;28731:13;:64:::0;;;28831:2:::1;-1:-1:-1::0;28814:19:0::1;28806:61;;;::::0;-1:-1:-1;;;28806:61:0;;11971:2:1;28806:61:0::1;::::0;::::1;11953:21:1::0;12010:2;11990:18;;;11983:30;12049:31;12029:18;;;12022:59;12098:18;;28806:61:0::1;11769:353:1::0;38292:114:0;38346:13;38379:19;38372:26;;;;;:::i;24087:33::-;;;;;;;:::i;26880:162::-;18912:6;;26935:4;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;-1:-1:-1;26951:14:0::1;:22:::0;;-1:-1:-1;;26951:22:0;;::::1;::::0;;;26984:20:::1;:28:::0;;;;::::1;::::0;;26951:22;26880:162;:::o;26671:153::-;18912:6;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;26724:13:::1;:20:::0;;-1:-1:-1;;26755:18:0;;;;;26801:15:::1;26784:14;:32:::0;26671:153::o;27116:263::-;18912:6;;27197:4;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;27233:1:::1;27220:9;:14;;27212:77;;;::::0;-1:-1:-1;;;27212:77:0;;12329:2:1;27212:77:0::1;::::0;::::1;12311:21:1::0;12368:2;12348:18;;;12341:30;12407:34;12387:18;;;12380:62;-1:-1:-1;;;12458:18:1;;;12451:48;12516:19;;27212:77:0::1;12127:414:1::0;27212:77:0::1;27348:3;27336:9;27320:13;6085:12:::0;;;5997:108;27320:13:::1;:25;;;;:::i;:::-;:31;;;;:::i;:::-;27299:18;:52:::0;-1:-1:-1;27368:4:0::1;18982:1;27116:263:::0;;;:::o;29769:164::-;18912:6;;29819:4;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;29836:12:::1;29854:7;18765:6:::0;;-1:-1:-1;;;;;18765:6:0;;18700:79;29854:7:::1;-1:-1:-1::0;;;;;29854:12:0::1;29874:21;29854:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29835:65:0;;-1:-1:-1;;;29769:164:0;:::o;38170:114::-;38224:13;38257:19;38250:26;;;;;:::i;19645:244::-;18912:6;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19734:22:0;::::1;19726:73;;;::::0;-1:-1:-1;;;19726:73:0;;12748:2:1;19726:73:0::1;::::0;::::1;12730:21:1::0;12787:2;12767:18;;;12760:30;12826:34;12806:18;;;12799:62;-1:-1:-1;;;12877:18:1;;;12870:36;12923:19;;19726:73:0::1;12546:402:1::0;19726:73:0::1;19836:6;::::0;19815:38:::1;::::0;-1:-1:-1;;;;;19815:38:0;;::::1;::::0;19836:6:::1;::::0;19815:38:::1;::::0;19836:6:::1;::::0;19815:38:::1;19864:6;:17:::0;;-1:-1:-1;;;;;;19864:17:0::1;-1:-1:-1::0;;;;;19864:17:0;;;::::1;::::0;;;::::1;::::0;;19645:244::o;36803:902::-;18912:6;;36887:4;;-1:-1:-1;;;;;18912:6:0;358:10;18912:22;18904:67;;;;-1:-1:-1;;;18904:67:0;;;;;;;:::i;:::-;36952:19:::1;;36929:20;;:42;;;;:::i;:::-;36911:15;:60;36903:106;;;::::0;-1:-1:-1;;;36903:106:0;;13155:2:1;36903:106:0::1;::::0;::::1;13137:21:1::0;;;13174:18;;;13167:30;13233:34;13213:18;;;13206:62;13285:18;;36903:106:0::1;12953:356:1::0;36903:106:0::1;37039:4;37028:7;:15;;37020:70;;;::::0;-1:-1:-1;;;37020:70:0;;13516:2:1;37020:70:0::1;::::0;::::1;13498:21:1::0;13555:2;13535:18;;;13528:30;13594:34;13574:18;;;13567:62;-1:-1:-1;;;13645:18:1;;;13638:40;13695:19;;37020:70:0::1;13314:406:1::0;37020:70:0::1;37124:15;37101:20;:38:::0;37233:29:::1;::::0;-1:-1:-1;;;37233:29:0;;-1:-1:-1;;;;;37248:13:0::1;2770:32:1::0;37233:29:0::1;::::0;::::1;2752:51:1::0;37202:28:0::1;::::0;37233:4:::1;::::0;:14:::1;::::0;2725:18:1;;37233:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37202:60:::0;-1:-1:-1;37320:20:0::1;37374:5;37343:30;37366:7:::0;37202:60;37343:30:::1;:::i;:::-;:36;;;;:::i;:::-;37320:59:::0;-1:-1:-1;37414:16:0;;37410:109:::1;;37446:61;37462:13;37485:6;37494:12;37446:15;:61::i;:::-;37602:19;37639:13;37602:51;;37664:4;-1:-1:-1::0;;;;;37664:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;37693:4:0::1;::::0;36803:902;-1:-1:-1;;;;;;;;36803:902:0:o;12366:380::-;-1:-1:-1;;;;;12502:19:0;;12494:68;;;;-1:-1:-1;;;12494:68:0;;14116:2:1;12494:68:0;;;14098:21:1;14155:2;14135:18;;;14128:30;14194:34;14174:18;;;14167:62;-1:-1:-1;;;14245:18:1;;;14238:34;14289:19;;12494:68:0;13914:400:1;12494:68:0;-1:-1:-1;;;;;12581:21:0;;12573:68;;;;-1:-1:-1;;;12573:68:0;;14521:2:1;12573:68:0;;;14503:21:1;14560:2;14540:18;;;14533:30;14599:34;14579:18;;;14572:62;-1:-1:-1;;;14650:18:1;;;14643:32;14692:19;;12573:68:0;14319:398:1;12573:68:0;-1:-1:-1;;;;;12654:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12706:32;;2960:25:1;;;12706:32:0;;2933:18:1;12706:32:0;;;;;;;;12366:380;;;:::o;29941:4180::-;-1:-1:-1;;;;;30073:18:0;;30065:68;;;;-1:-1:-1;;;30065:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30152:16:0;;30144:64;;;;-1:-1:-1;;;30144:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30228:19:0;;;;;;:13;:19;;;;;;;;30227:20;:42;;;;-1:-1:-1;;;;;;30252:17:0;;;;;;:13;:17;;;;;;;;30251:18;30227:42;30219:65;;;;-1:-1:-1;;;30219:65:0;;15734:2:1;30219:65:0;;;15716:21:1;15773:2;15753:18;;;15746:30;-1:-1:-1;;;15792:18:1;;;15785:41;15843:18;;30219:65:0;15532:335:1;30219:65:0;30315:6;30325:1;30315:11;30312:92;;30343:28;30359:4;30365:2;30369:1;30343:15;:28::i;30312:92::-;30427:14;;;;30424:1841;;;18765:6;;-1:-1:-1;;;;;30479:15:0;;;18765:6;;30479:15;;;;:49;;-1:-1:-1;18765:6:0;;-1:-1:-1;;;;;30515:13:0;;;18765:6;;30515:13;;30479:49;:86;;;;-1:-1:-1;;;;;;30549:16:0;;;;30479:86;:128;;;;-1:-1:-1;;;;;;30586:21:0;;30600:6;30586:21;;30479:128;:158;;;;-1:-1:-1;30629:8:0;;-1:-1:-1;;;30629:8:0;;;;30628:9;30479:158;30457:1797;;;30675:13;;;;;;;30671:148;;-1:-1:-1;;;;;30720:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;30749:23:0;;;;;;:19;:23;;;;;;;;30720:52;30712:87;;;;-1:-1:-1;;;30712:87:0;;16074:2:1;30712:87:0;;;16056:21:1;16113:2;16093:18;;;16086:30;-1:-1:-1;;;16132:18:1;;;16125:52;16194:18;;30712:87:0;15872:346:1;30712:87:0;30977:20;;;;30973:423;;;18765:6;;-1:-1:-1;;;;;31025:13:0;;;18765:6;;31025:13;;;;:47;;;31056:15;-1:-1:-1;;;;;31042:30:0;:2;-1:-1:-1;;;;;31042:30:0;;;31025:47;:79;;;;;31090:13;-1:-1:-1;;;;;31076:28:0;:2;-1:-1:-1;;;;;31076:28:0;;;31025:79;31021:356;;;31169:9;31140:39;;;;:28;:39;;;;;;31182:12;-1:-1:-1;31132:140:0;;;;-1:-1:-1;;;31132:140:0;;16425:2:1;31132:140:0;;;16407:21:1;16464:2;16444:18;;;16437:30;16503:34;16483:18;;;16476:62;16574:34;16554:18;;;16547:62;-1:-1:-1;;;16625:19:1;;;16618:40;16675:19;;31132:140:0;16223:477:1;31132:140:0;31328:9;31299:39;;;;:28;:39;;;;;31341:12;31299:54;;31021:356;-1:-1:-1;;;;;31465:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;31501:35:0;;;;;;:31;:35;;;;;;;;31500:36;31465:71;31461:778;;;31583:20;;31573:6;:30;;31565:96;;;;-1:-1:-1;;;31565:96:0;;16907:2:1;31565:96:0;;;16889:21:1;16946:2;16926:18;;;16919:30;16985:34;16965:18;;;16958:62;-1:-1:-1;;;17036:18:1;;;17029:51;17097:19;;31565:96:0;16705:417:1;31565:96:0;31722:9;;-1:-1:-1;;;;;6269:18:0;;6242:7;6269:18;;;;;;;;;;;31696:22;;:6;:22;:::i;:::-;:35;;31688:67;;;;-1:-1:-1;;;31688:67:0;;17329:2:1;31688:67:0;;;17311:21:1;17368:2;17348:18;;;17341:30;-1:-1:-1;;;17387:18:1;;;17380:49;17446:18;;31688:67:0;17127:343:1;31688:67:0;31461:778;;;-1:-1:-1;;;;;31849:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;31883:37:0;;;;;;:31;:37;;;;;;;;31882:38;31849:71;31845:394;;;31967:20;;31957:6;:30;;31949:97;;;;-1:-1:-1;;;31949:97:0;;17677:2:1;31949:97:0;;;17659:21:1;17716:2;17696:18;;;17689:30;17755:34;17735:18;;;17728:62;-1:-1:-1;;;17806:18:1;;;17799:52;17868:19;;31949:97:0;17475:418:1;31845:394:0;-1:-1:-1;;;;;32093:35:0;;;;;;:31;:35;;;;;;;;32089:150;;32186:9;;-1:-1:-1;;;;;6269:18:0;;6242:7;6269:18;;;;;;;;;;;32160:22;;:6;:22;:::i;:::-;:35;;32152:67;;;;-1:-1:-1;;;32152:67:0;;17329:2:1;32152:67:0;;;17311:21:1;17368:2;17348:18;;;17341:30;-1:-1:-1;;;17387:18:1;;;17380:49;17446:18;;32152:67:0;17127:343:1;32152:67:0;32328:4;32279:28;6269:18;;;;;;;;;;;32394;;32370:42;;;;;;;32443:35;;-1:-1:-1;32467:11:0;;;;;;;32443:35;:61;;;;-1:-1:-1;32496:8:0;;-1:-1:-1;;;32496:8:0;;;;32495:9;32443:61;:110;;;;-1:-1:-1;;;;;;32522:31:0;;;;;;:25;:31;;;;;;;;32521:32;32443:110;:153;;;;-1:-1:-1;;;;;;32571:25:0;;;;;;:19;:25;;;;;;;;32570:26;32443:153;:194;;;;-1:-1:-1;;;;;;32614:23:0;;;;;;:19;:23;;;;;;;;32613:24;32443:194;32425:338;;;32664:8;:15;;-1:-1:-1;;;;32664:15:0;-1:-1:-1;;;32664:15:0;;;32708:10;:8;:10::i;:::-;32735:8;:16;;-1:-1:-1;;;;32735:16:0;;;32425:338;32791:8;;-1:-1:-1;;;;;32900:25:0;;32775:12;32900:25;;;:19;:25;;;;;;32791:8;-1:-1:-1;;;32791:8:0;;;;;32790:9;;32900:25;;:52;;-1:-1:-1;;;;;;32929:23:0;;;;;;:19;:23;;;;;;;;32900:52;32897:99;;;-1:-1:-1;32979:5:0;32897:99;33016:12;33120:7;33117:951;;;-1:-1:-1;;;;;33171:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;33220:1;33204:13;;:17;33171:50;33167:732;;;33271:3;33257:13;;33248:6;:22;;;;:::i;:::-;:26;;;;:::i;:::-;33241:33;;33341:13;;33322:16;;33315:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;33293:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;33409:13:0;;33396:10;;33389:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;33373:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;33489:13:0;;33470:16;;33463:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;33441:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;33167:732:0;;-1:-1:-1;33167:732:0;;-1:-1:-1;;;;;33563:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;33613:1;33598:12;;:16;33563:51;33560:339;;;33661:3;33648:12;;33639:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;33632:32;;33727:12;;33709:15;;33702:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;33680:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;33793:12:0;;33781:9;;33774:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;33758:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;33871:12:0;;33853:15;;33846:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;33824:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;33560:339:0;33930:8;;33927:93;;33962:42;33978:4;33992;33999;33962:15;:42::i;:::-;34042:14;34052:4;34042:14;;:::i;:::-;;;33117:951;34080:33;34096:4;34102:2;34106:6;34080:15;:33::i;:::-;30054:4067;;;;29941:4180;;;:::o;14647:192::-;14733:7;14769:12;14761:6;;;;14753:29;;;;-1:-1:-1;;;14753:29:0;;;;;;;;:::i;:::-;-1:-1:-1;14793:9:0;14805:5;14809:1;14805;:5;:::i;:::-;14793:17;14647:192;-1:-1:-1;;;;;14647:192:0:o;13744:181::-;13802:7;;13834:5;13838:1;13834;:5;:::i;:::-;13822:17;;13863:1;13858;:6;;13850:46;;;;-1:-1:-1;;;13850:46:0;;18100:2:1;13850:46:0;;;18082:21:1;18139:2;18119:18;;;18112:30;18178:29;18158:18;;;18151:57;18225:18;;13850:46:0;17898:351:1;13850:46:0;13916:1;13744:181;-1:-1:-1;;;13744:181:0:o;34129:601::-;34281:16;;;34295:1;34281:16;;;;;;;;34257:21;;34281:16;;;;;;;;;;-1:-1:-1;34281:16:0;34257:40;;34326:4;34308;34313:1;34308:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;34308:23:0;;;-1:-1:-1;;;;;34308:23:0;;;;;34352:15;-1:-1:-1;;;;;34352:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34342:4;34347:1;34342:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;34342:32:0;;;-1:-1:-1;;;;;34342:32:0;;;;;34387:62;34404:4;34419:15;34437:11;34387:8;:62::i;:::-;34488:224;;-1:-1:-1;;;34488:224:0;;-1:-1:-1;;;;;34488:15:0;:66;;;;:224;;34569:11;;34595:1;;34639:4;;34666;;34686:15;;34488:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34184:546;34129:601;:::o;34748:517::-;34896:62;34913:4;34928:15;34946:11;34896:8;:62::i;:::-;35001:256;;-1:-1:-1;;;35001:256:0;;35073:4;35001:256;;;19836:34:1;19886:18;;;19879:34;;;35119:1:0;19929:18:1;;;19922:34;;;19972:18;;;19965:34;22746:6:0;20015:19:1;;;20008:44;35231:15:0;20068:19:1;;;20061:35;35001:15:0;-1:-1:-1;;;;;35001:31:0;;;;35040:9;;19770:19:1;;35001:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9939:573::-;-1:-1:-1;;;;;10079:20:0;;10071:70;;;;-1:-1:-1;;;10071:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10160:23:0;;10152:71;;;;-1:-1:-1;;;10152:71:0;;;;;;;:::i;:::-;10316;10338:6;10316:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10316:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;10296:17:0;;;:9;:17;;;;;;;;;;;:91;;;;10421:20;;;;;;;:32;;10446:6;10421:24;:32::i;:::-;-1:-1:-1;;;;;10398:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;10469:35;2960:25:1;;;10398:20:0;;10469:35;;;;;;2933:18:1;10469:35:0;2814:177:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1467:248::-;1535:6;1543;1596:2;1584:9;1575:7;1571:23;1567:32;1564:52;;;1612:1;1609;1602:12;1564:52;-1:-1:-1;;1635:23:1;;;1705:2;1690:18;;;1677:32;;-1:-1:-1;1467:248:1:o;1720:160::-;1785:20;;1841:13;;1834:21;1824:32;;1814:60;;1870:1;1867;1860:12;1885:689;1977:6;1985;1993;2046:2;2034:9;2025:7;2021:23;2017:32;2014:52;;;2062:1;2059;2052:12;2014:52;2102:9;2089:23;2131:18;2172:2;2164:6;2161:14;2158:34;;;2188:1;2185;2178:12;2158:34;2226:6;2215:9;2211:22;2201:32;;2271:7;2264:4;2260:2;2256:13;2252:27;2242:55;;2293:1;2290;2283:12;2242:55;2333:2;2320:16;2359:2;2351:6;2348:14;2345:34;;;2375:1;2372;2365:12;2345:34;2430:7;2423:4;2413:6;2410:1;2406:14;2402:2;2398:23;2394:34;2391:47;2388:67;;;2451:1;2448;2441:12;2388:67;2482:4;2474:13;;;;-1:-1:-1;2506:6:1;-1:-1:-1;2531:37:1;;2547:20;;;-1:-1:-1;2531:37:1;:::i;:::-;2521:47;;1885:689;;;;;:::o;2996:456::-;3073:6;3081;3089;3142:2;3130:9;3121:7;3117:23;3113:32;3110:52;;;3158:1;3155;3148:12;3110:52;3197:9;3184:23;3216:31;3241:5;3216:31;:::i;:::-;3266:5;-1:-1:-1;3323:2:1;3308:18;;3295:32;3336:33;3295:32;3336:33;:::i;:::-;2996:456;;3388:7;;-1:-1:-1;;;3442:2:1;3427:18;;;;3414:32;;2996:456::o;3854:348::-;3906:8;3916:6;3970:3;3963:4;3955:6;3951:17;3947:27;3937:55;;3988:1;3985;3978:12;3937:55;-1:-1:-1;4011:20:1;;4054:18;4043:30;;4040:50;;;4086:1;4083;4076:12;4040:50;4123:4;4115:6;4111:17;4099:29;;4175:3;4168:4;4159:6;4151;4147:19;4143:30;4140:39;4137:59;;;4192:1;4189;4182:12;4137:59;3854:348;;;;;:::o;4207:721::-;4299:6;4307;4315;4323;4376:2;4364:9;4355:7;4351:23;4347:32;4344:52;;;4392:1;4389;4382:12;4344:52;4432:9;4419:23;4461:18;4502:2;4494:6;4491:14;4488:34;;;4518:1;4515;4508:12;4488:34;4557:59;4608:7;4599:6;4588:9;4584:22;4557:59;:::i;:::-;4635:8;;-1:-1:-1;4531:85:1;-1:-1:-1;4723:2:1;4708:18;;4695:32;;-1:-1:-1;4739:16:1;;;4736:36;;;4768:1;4765;4758:12;4736:36;;4807:61;4860:7;4849:8;4838:9;4834:24;4807:61;:::i;:::-;4207:721;;;;-1:-1:-1;4887:8:1;-1:-1:-1;;;;4207:721:1:o;4933:315::-;4998:6;5006;5059:2;5047:9;5038:7;5034:23;5030:32;5027:52;;;5075:1;5072;5065:12;5027:52;5114:9;5101:23;5133:31;5158:5;5133:31;:::i;:::-;5183:5;-1:-1:-1;5207:35:1;5238:2;5223:18;;5207:35;:::i;:::-;5197:45;;4933:315;;;;;:::o;5253:316::-;5330:6;5338;5346;5399:2;5387:9;5378:7;5374:23;5370:32;5367:52;;;5415:1;5412;5405:12;5367:52;-1:-1:-1;;5438:23:1;;;5508:2;5493:18;;5480:32;;-1:-1:-1;5559:2:1;5544:18;;;5531:32;;5253:316;-1:-1:-1;5253:316:1:o;5574:180::-;5630:6;5683:2;5671:9;5662:7;5658:23;5654:32;5651:52;;;5699:1;5696;5689:12;5651:52;5722:26;5738:9;5722:26;:::i;5759:180::-;5818:6;5871:2;5859:9;5850:7;5846:23;5842:32;5839:52;;;5887:1;5884;5877:12;5839:52;-1:-1:-1;5910:23:1;;5759:180;-1:-1:-1;5759:180:1:o;5944:388::-;6012:6;6020;6073:2;6061:9;6052:7;6048:23;6044:32;6041:52;;;6089:1;6086;6079:12;6041:52;6128:9;6115:23;6147:31;6172:5;6147:31;:::i;:::-;6197:5;-1:-1:-1;6254:2:1;6239:18;;6226:32;6267:33;6226:32;6267:33;:::i;:::-;6319:7;6309:17;;;5944:388;;;;;:::o;6337:380::-;6416:1;6412:12;;;;6459;;;6480:61;;6534:4;6526:6;6522:17;6512:27;;6480:61;6587:2;6579:6;6576:14;6556:18;6553:38;6550:161;;6633:10;6628:3;6624:20;6621:1;6614:31;6668:4;6665:1;6658:15;6696:4;6693:1;6686:15;6550:161;;6337:380;;;:::o;6722:356::-;6924:2;6906:21;;;6943:18;;;6936:30;7002:34;6997:2;6982:18;;6975:62;7069:2;7054:18;;6722:356::o;7497:127::-;7558:10;7553:3;7549:20;7546:1;7539:31;7589:4;7586:1;7579:15;7613:4;7610:1;7603:15;7629:168;7702:9;;;7733;;7750:15;;;7744:22;;7730:37;7720:71;;7771:18;;:::i;7802:217::-;7842:1;7868;7858:132;;7912:10;7907:3;7903:20;7900:1;7893:31;7947:4;7944:1;7937:15;7975:4;7972:1;7965:15;7858:132;-1:-1:-1;8004:9:1;;7802:217::o;8427:127::-;8488:10;8483:3;8479:20;8476:1;8469:31;8519:4;8516:1;8509:15;8543:4;8540:1;8533:15;8559:135;8598:3;8619:17;;;8616:43;;8639:18;;:::i;:::-;-1:-1:-1;8686:1:1;8675:13;;8559:135::o;8699:125::-;8764:9;;;8785:10;;;8782:36;;;8798:18;;:::i;8829:128::-;8896:9;;;8917:11;;;8914:37;;;8931:18;;:::i;9579:127::-;9640:10;9635:3;9631:20;9628:1;9621:31;9671:4;9668:1;9661:15;9695:4;9692:1;9685:15;9837:545;9939:2;9934:3;9931:11;9928:448;;;9975:1;10000:5;9996:2;9989:17;10045:4;10041:2;10031:19;10115:2;10103:10;10099:19;10096:1;10092:27;10086:4;10082:38;10151:4;10139:10;10136:20;10133:47;;;-1:-1:-1;10174:4:1;10133:47;10229:2;10224:3;10220:12;10217:1;10213:20;10207:4;10203:31;10193:41;;10284:82;10302:2;10295:5;10292:13;10284:82;;;10347:17;;;10328:1;10317:13;10284:82;;10558:1206;10682:18;10677:3;10674:27;10671:53;;;10704:18;;:::i;:::-;10733:94;10823:3;10783:38;10815:4;10809:11;10783:38;:::i;:::-;10777:4;10733:94;:::i;:::-;10853:1;10878:2;10873:3;10870:11;10895:1;10890:616;;;;11550:1;11567:3;11564:93;;;-1:-1:-1;11623:19:1;;;11610:33;11564:93;-1:-1:-1;;10515:1:1;10511:11;;;10507:24;10503:29;10493:40;10539:1;10535:11;;;10490:57;11670:78;;10863:895;;10890:616;9784:1;9777:14;;;9821:4;9808:18;;-1:-1:-1;;10926:17:1;;;11027:9;11049:229;11063:7;11060:1;11057:14;11049:229;;;11152:19;;;11139:33;11124:49;;11259:4;11244:20;;;;11212:1;11200:14;;;;11079:12;11049:229;;;11053:3;11306;11297:7;11294:16;11291:159;;;11430:1;11426:6;11420:3;11414;11411:1;11407:11;11403:21;11399:34;11395:39;11382:9;11377:3;11373:19;11360:33;11356:79;11348:6;11341:95;11291:159;;;11493:1;11487:3;11484:1;11480:11;11476:19;11470:4;11463:33;10863:895;;10558:1206;;;:::o;13725:184::-;13795:6;13848:2;13836:9;13827:7;13823:23;13819:32;13816:52;;;13864:1;13861;13854:12;13816:52;-1:-1:-1;13887:16:1;;13725:184;-1:-1:-1;13725:184:1:o;14722:401::-;14924:2;14906:21;;;14963:2;14943:18;;;14936:30;15002:34;14997:2;14982:18;;14975:62;-1:-1:-1;;;15068:2:1;15053:18;;15046:35;15113:3;15098:19;;14722:401::o;15128:399::-;15330:2;15312:21;;;15369:2;15349:18;;;15342:30;15408:34;15403:2;15388:18;;15381:62;-1:-1:-1;;;15474:2:1;15459:18;;15452:33;15517:3;15502:19;;15128:399::o;18254:251::-;18324:6;18377:2;18365:9;18356:7;18352:23;18348:32;18345:52;;;18393:1;18390;18383:12;18345:52;18425:9;18419:16;18444:31;18469:5;18444:31;:::i;18510:980::-;18772:4;18820:3;18809:9;18805:19;18851:6;18840:9;18833:25;18877:2;18915:6;18910:2;18899:9;18895:18;18888:34;18958:3;18953:2;18942:9;18938:18;18931:31;18982:6;19017;19011:13;19048:6;19040;19033:22;19086:3;19075:9;19071:19;19064:26;;19125:2;19117:6;19113:15;19099:29;;19146:1;19156:195;19170:6;19167:1;19164:13;19156:195;;;19235:13;;-1:-1:-1;;;;;19231:39:1;19219:52;;19326:15;;;;19291:12;;;;19267:1;19185:9;19156:195;;;-1:-1:-1;;;;;;;19407:32:1;;;;19402:2;19387:18;;19380:60;-1:-1:-1;;;19471:3:1;19456:19;19449:35;19368:3;18510:980;-1:-1:-1;;;18510:980:1:o;20107:306::-;20195:6;20203;20211;20264:2;20252:9;20243:7;20239:23;20235:32;20232:52;;;20280:1;20277;20270:12;20232:52;20309:9;20303:16;20293:26;;20359:2;20348:9;20344:18;20338:25;20328:35;;20403:2;20392:9;20388:18;20382:25;20372:35;;20107:306;;;;;:::o
Swarm Source
ipfs://95aa62b60e29cbe5e035c5e62a442a96ac2452087484833cb42db58686132dd7
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.