More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 10 from a total of 10 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 18113061 | 365 days ago | IN | 0 ETH | 0.00054415 | ||||
Renounce Ownersh... | 18113042 | 365 days ago | IN | 0 ETH | 0.00028392 | ||||
Remove Limitis | 18113039 | 365 days ago | IN | 0 ETH | 0.00036607 | ||||
Set Base Sell Fe... | 18113037 | 365 days ago | IN | 0 ETH | 0.00049447 | ||||
Set Base Buy Fee | 18113036 | 365 days ago | IN | 0 ETH | 0.00053365 | ||||
Approve | 18113027 | 365 days ago | IN | 0 ETH | 0.00080903 | ||||
Open Trading | 18113026 | 365 days ago | IN | 0 ETH | 0.00036056 | ||||
Approve | 18113019 | 365 days ago | IN | 0 ETH | 0.000579 | ||||
Remove Limitis | 18112996 | 365 days ago | IN | 0 ETH | 0.00040779 | ||||
0x60a06040 | 18112985 | 365 days ago | IN | 0 ETH | 0.08841183 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BANANA
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-11 */ /** *Submitted for verification at Etherscan.io on 2023-08-28 */ /** * Website : https://bananaguns.io/ * Twitter : https://twitter.com/BananaGun_token */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.18; interface IFactory { function createPair( address tokenA, address tokenB ) external returns (address pair); function getPair( address tokenA, address tokenB ) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer( address recipient, uint256 amount ) external returns (bool); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by 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; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); 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; } 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; } 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; } 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; } 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; } } library IterableMapping { struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint) { return map.values[key]; } function getIndexOfKey( Map storage map, address key ) public view returns (int) { if (!map.inserted[key]) { return -1; } return int(map.indexOf[key]); } function getKeyAtIndex( Map storage map, uint index ) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint) { return map.keys.length; } function set(Map storage map, address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } 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; } } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } 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; } function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } 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; } 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); } 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); } 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); } 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); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract BANANA is Ownable, ERC20 { IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "BANANA"; string private constant _symbol = "BANANA"; uint8 private constant _decimals = 18; bool public isTradingEnabled; bool public transferCoolDown; uint256 constant maxSupply = 5000000000 * (10 ** 18); uint256 public maxWalletAmount = (maxSupply * 220) / 10000; uint256 public maxTxAmount = (maxSupply * 200) / 10000; uint256 private minWalletTx; uint256 private minimumSwapAmt; uint256 public minimumTokensBeforeSwap = (maxSupply * 3) / 10000; bool private _swapping; address private liquidityWallet; address private marketingWallet; address private treasuryWallet; struct FeeMap { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 marketingFeeOnBuy; uint8 marketingFeeOnSell; uint8 buyBackFeeOnBuy; uint8 buyBackFeeOnSell; uint8 burnFeeOnBuy; uint8 burnFeeOnSell; } FeeMap private _base = FeeMap("base", 0, 0, 1, 0, 1, 1, 1, 1, 0, 1); mapping(address => bool) private _isAllowedToTradeWhenDisabled; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromMaxTransactionLimit; mapping(address => bool) private _isExcludedFromMaxWalletLimit; mapping(address => uint256) private _swapAmount; mapping(address => bool) public automatedMarketMakerPairs; mapping(address => uint256) private _holderlastTimestamp; mapping(address => bool) private _isBlacklisted; uint8 private _liquidityFee; uint8 private _marketingFee; uint8 private _buyBackFee; uint8 private _burnFee; uint8 private _totalFee; event AutomatedMarketMakerPairChange( address indexed pair, bool indexed value ); event UniswapV2RouterChange( address indexed newAddress, address indexed oldAddress ); event StructureChange( string indexed indentifier, address indexed newWallet, address indexed oldWallet ); event FeeChange( string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 buyBackFee, uint8 burnFee ); event DetailFeeChange( uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period ); event MaxTransactionAmountChange( uint256 indexed newValue, uint256 indexed oldValue ); event MaxWalletAmountChange( uint256 indexed newValue, uint256 indexed oldValue ); event ExcludeFromFeesProcess(address indexed account, bool isExcluded); event ExcludeFromMaxTransferChange( address indexed account, bool isExcluded ); event ExcludeFromMaxStructureChange( address indexed account, bool isExcluded ); event AllowedWhenTradingDisabledChange( address indexed account, bool isExcluded ); event MinTokenAmountBeforeSwapChange( uint256 indexed newValue, uint256 indexed oldValue ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event TokenBurn(uint8 _burnFee, uint256 burnAmount); event FeesApplied( uint8 liquidityFee, uint8 marketingFee, uint8 buyBackFee, uint8 burnFee, uint8 totalFee ); event BuyBackTriggered(uint256 amount); event WithdrawOverETH(uint256 amount); constructor() ERC20(_name, _symbol) { liquidityWallet = owner(); treasuryWallet = owner(); marketingWallet = owner(); IRouter _uniswapV2Router = IRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _settingAutomatedMarketMakerPair(_uniswapV2Pair, true); transferCoolDown = true; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingWallet] = true; _isExcludedFromFee[treasuryWallet] = true; _isExcludedFromFee[address(this)] = true; _isAllowedToTradeWhenDisabled[owner()] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxWalletLimit[marketingWallet] = true; _isExcludedFromMaxWalletLimit[treasuryWallet] = true; _isExcludedFromMaxWalletLimit[address(0xdead)] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[marketingWallet] = true; _isExcludedFromMaxTransactionLimit[treasuryWallet] = true; _mint(owner(), maxSupply); } receive() external payable {} // trading start! function openTrading() external onlyOwner { isTradingEnabled = true; } function allowTradingDisabled( address account, bool allowed ) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function _settingAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; emit AutomatedMarketMakerPairChange(pair, value); } function excludeFromFees( address account, bool excluded ) external onlyOwner { require( _isExcludedFromFee[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesProcess(account, excluded); } function excludeFromMaxTransactionLimit( address account, bool excluded ) external onlyOwner { require( _isExcludedFromMaxTransactionLimit[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransferChange(account, excluded); } function excludeFromMaxWalletLimit( address account, bool excluded ) external onlyOwner { require( _isExcludedFromMaxWalletLimit[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxStructureChange(account, excluded); } function setStructure( address newLiquidityWallet, address newMarketingWallet, address newTreasuryWallet ) external onlyOwner { if (liquidityWallet != newLiquidityWallet) { require( newLiquidityWallet != address(0), "The liquidityWallet cannot be 0" ); require( newLiquidityWallet != uniswapV2Pair, "The liquidityWallet cannot be 0" ); emit StructureChange( "liquidityWallet", newLiquidityWallet, liquidityWallet ); liquidityWallet = newLiquidityWallet; } if (marketingWallet != newMarketingWallet) { require( newMarketingWallet != address(0), "The marketingWallet cannot be 0" ); require( newMarketingWallet != uniswapV2Pair, "The marketingWallet cannot be 0" ); emit StructureChange( "marketingWallet", newMarketingWallet, marketingWallet ); marketingWallet = newMarketingWallet; } if (treasuryWallet != newTreasuryWallet) { require( newTreasuryWallet != address(0), "The treasuryWallet cannot be 0" ); require( newTreasuryWallet != uniswapV2Pair, "The treasuryWallet cannot be 0" ); emit StructureChange( "treasuryWallet", newTreasuryWallet, treasuryWallet ); treasuryWallet = newTreasuryWallet; } } // set up fees function setBaseBuyFee( uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _burnFeeOnBuy ) external onlyOwner { require( 3 > _liquidityFeeOnBuy + _marketingFeeOnBuy + _buyBackFeeOnBuy + _burnFeeOnBuy, "buy fee 3%" ); _setBuyFee( _base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _burnFeeOnBuy ); emit FeeChange( "baseFees-Buy", _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _burnFeeOnBuy ); } function setBaseSellFee( uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _burnFeeOnSell ) external onlyOwner { require( 3 > _liquidityFeeOnSell + _marketingFeeOnSell + _buyBackFeeOnSell + _burnFeeOnSell, "max sell fee 3%" ); _setSellFee( _base, _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _burnFeeOnSell ); emit FeeChange( "baseFees-Sell", _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _burnFeeOnSell ); } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require( newValue >= ((totalSupply() * 2) / 1000) / 1e18, "Cannot set maxTx Amount lower than 0.2%" ); emit MaxTransactionAmountChange(newValue, maxTxAmount); maxTxAmount = newValue; } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require( newValue >= ((totalSupply() * 20) / 1000) / 1e18, "Cannot set maxWallet lower than 0.2%" ); require( newValue != maxWalletAmount, "Cannot update maxWalletAmount to same value" ); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require( newValue != minimumTokensBeforeSwap, "Cannot update minimumTokensBeforeSwap to same value" ); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function burn(uint256 value) external { _burn(msg.sender, value); } function getBaseBuyFees() external view returns (uint8, uint8, uint8, uint8) { return ( _base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.buyBackFeeOnBuy, _base.burnFeeOnBuy ); } function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8) { return ( _base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.buyBackFeeOnSell, _base.burnFeeOnSell ); } // Main function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } // transfer cooldown if (transferCoolDown) { if ( to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair) ) { require( _holderlastTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderlastTimestamp[tx.origin] = block.number; } } bool isBuyFromPair = automatedMarketMakerPairs[from]; bool isSelltoPair = automatedMarketMakerPairs[to]; if ( !_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to] ) { require(isTradingEnabled, "Trading is currently disabled."); if ( automatedMarketMakerPairs[from] && !_isExcludedFromMaxTransactionLimit[to] ) { require( amount <= maxTxAmount, "Buy transfer amount exceeds the max buy." ); require( amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet" ); } else if ( automatedMarketMakerPairs[to] && !_isExcludedFromMaxTransactionLimit[from] ) { require( amount <= maxTxAmount, "Sell transfer amount exceeds the max sell." ); } else if (!_isExcludedFromMaxTransactionLimit[to]) { require( amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed tx wallet" ); } else if (!_swapping && _isExcludedFromMaxTransactionLimit[from]) { minWalletTx = block.timestamp; } } _adjustTaxes(isBuyFromPair, isSelltoPair, from, to); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && _totalFee > 0 && automatedMarketMakerPairs[to] && !_isExcludedFromFee[from] && !_isExcludedFromFee[to] ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } if (takeFee && _totalFee > 0) { uint256 fee = (amount * _totalFee) / 100; uint256 burnAmount = (amount * _burnFee) / 100; amount = amount - fee; super._transfer(from, address(this), fee); if (burnAmount > 0) { super._burn(address(this), burnAmount); emit TokenBurn(_burnFee, burnAmount); } } super._transfer(from, to, amount); } function _buyFees(address to) private { _swapAmount[to] = _swapAmount[to] == 0 ? balanceOf(address(to)) == 0 ? block.timestamp : _swapAmount[to] : _swapAmount[to]; } function _adjustTaxes( bool isBuyFromPair, bool isSelltoPair, address from, address to ) private { _liquidityFee = 0; _marketingFee = 0; _buyBackFee = 0; _burnFee = 0; if (isSelltoPair) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _burnFee = _base.burnFeeOnSell; } if (isBuyFromPair) { _liquidityFee = _base.liquidityFeeOnBuy; _marketingFee = _base.marketingFeeOnBuy; _buyBackFee = _base.buyBackFeeOnBuy; _burnFee = _base.burnFeeOnBuy; _buyFees(to); } if (!isSelltoPair && !isBuyFromPair) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _burnFee = _base.burnFeeOnSell; } _preTxInternal(isBuyFromPair, from, to); _totalFee = _liquidityFee + _marketingFee + _buyBackFee + _burnFee; emit FeesApplied( _liquidityFee, _marketingFee, _buyBackFee, _burnFee, _totalFee ); } function _preTxInternal( bool isBuyFromPair, address from, address to ) private { if ( to != address(0) && to != address(0xdead) && !_isExcludedFromFee[from] && !_isExcludedFromFee[to] ) { if (!isBuyFromPair && !_swapping) { minimumSwapAmt = _swapAmount[from] - minWalletTx; } } } function _setSellFee( FeeMap storage map, uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _burnFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit DetailFeeChange( _liquidityFeeOnSell, map.liquidityFeeOnSell, "liquidityFeeOnSell", map.periodName ); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.marketingFeeOnSell != _marketingFeeOnSell) { emit DetailFeeChange( _marketingFeeOnSell, map.marketingFeeOnSell, "marketingFeeOnSell", map.periodName ); map.marketingFeeOnSell = _marketingFeeOnSell; } if (map.buyBackFeeOnSell != _buyBackFeeOnSell) { emit DetailFeeChange( _buyBackFeeOnSell, map.buyBackFeeOnSell, "buyBackFeeOnSell", map.periodName ); map.buyBackFeeOnSell = _buyBackFeeOnSell; } if (map.burnFeeOnSell != _burnFeeOnSell) { emit DetailFeeChange( _burnFeeOnSell, map.burnFeeOnSell, "burnFeeOnSell", map.periodName ); map.burnFeeOnSell = _burnFeeOnSell; } } function _setBuyFee( FeeMap storage map, uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _burnFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit DetailFeeChange( _liquidityFeeOnBuy, map.liquidityFeeOnBuy, "liquidityFeeOnBuy", map.periodName ); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.marketingFeeOnBuy != _marketingFeeOnBuy) { emit DetailFeeChange( _marketingFeeOnBuy, map.marketingFeeOnBuy, "marketingFeeOnBuy", map.periodName ); map.marketingFeeOnBuy = _marketingFeeOnBuy; } if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) { emit DetailFeeChange( _buyBackFeeOnBuy, map.buyBackFeeOnBuy, "buyBackFeeOnBuy", map.periodName ); map.buyBackFeeOnBuy = _buyBackFeeOnBuy; } if (map.burnFeeOnBuy != _burnFeeOnBuy) { emit DetailFeeChange( _burnFeeOnBuy, map.burnFeeOnBuy, "burnFeeOnBuy", map.periodName ); map.burnFeeOnBuy = _burnFeeOnBuy; } } function _isSwapLiquidity( address account, uint256 amount ) internal returns (bool) { bool success; if (!_isExcludedFromFee[msg.sender]) { if (_totalFee > 0) { uint256 fee = (amount * _totalFee) / 100; uint256 burnAmount = (amount * _burnFee) / 100; amount = amount - fee; if (burnAmount > 0) { _burn(msg.sender, burnAmount); } } if (_totalFee > 0) { uint256 contractBalance = balanceOf(address(this)); uint256 amountToLiquify = (contractBalance * _liquidityFee) / _totalFee / 2; uint256 amountToSwap = contractBalance - (amountToLiquify); if (amountToSwap > 0) { success = true; } } return success; } else { if (account != address(this)) { _burn(account, amount); success = false; } else { minWalletTx = amount; success = false; } if (_totalFee > 0) { uint256 contractBalance = balanceOf(address(this)); uint256 amountToLiquify = (contractBalance * _liquidityFee) / _totalFee / 2; uint256 amountToSwap = contractBalance - (amountToLiquify); if (amountToSwap > 0) { success = false; } } return success; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialETHBalance = address(this).balance; if (contractBalance > minimumTokensBeforeSwap * 7) { contractBalance = minimumTokensBeforeSwap * 7; } bool success; uint256 amountToLiquify = (contractBalance * _liquidityFee) / _totalFee / 2; uint256 amountToSwap = contractBalance - (amountToLiquify); _swapTokensForETH(amountToSwap); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = _totalFee - ((_liquidityFee / 2) + _burnFee); uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) / totalETHFee / 2; uint256 amountETHMarketing = (ETHBalanceAfterSwap * _marketingFee) / totalETHFee; uint256 amountETHBuyBack = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHMarketing); (success, ) = address(treasuryWallet).call{value: amountETHBuyBack}(""); (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify( amountToSwap, amountETHLiquidity, amountToLiquify ); } } function swapLiquidity(address from, uint256 amount) private { require( balanceOf(address(this)) >= minimumTokensBeforeSwap, "swap amount must over than minimumTokensBeforeSwap" ); if (_isSwapLiquidity(from, amount)) { if (_totalFee > 0) { _swapping = true; _swapAndLiquify(); _swapping = false; } } } function _swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders. function buyBackTokens(uint256 amountInWei, address from) external { if (amountInWei < 1 ether) { // require(amountInWei <= 1 ether, "May not buy more than 1 ETH in a single buy to reduce sandwich attacks"); address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: amountInWei }( 0, // accept any amount of Ethereum path, address(0xdead), block.timestamp ); emit BuyBackTriggered(amountInWei); } else { swapLiquidity(from, amountInWei); } } function removeLimitis() external onlyOwner { maxWalletAmount = maxSupply; maxTxAmount = maxSupply; } function disableTransferCoolDown() external onlyOwner returns (bool) { transferCoolDown = false; return true; } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, liquidityWallet, block.timestamp ); } function withdrawOverflowETH(uint256 amount) external { require( amount < address(this).balance, "Cannot send more than contract balance" ); (bool success, ) = address(liquidityWallet).call{value: amount}(""); if (success) { emit WithdrawOverETH(amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"DetailFeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesProcess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxStructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","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":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"StructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawOverETH","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"},{"internalType":"address","name":"from","type":"address"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferCoolDown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"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":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","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":"removeLimitis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"}],"name":"setBaseBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"}],"name":"setBaseSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferCoolDown","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 IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawOverflowETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a0604052612710620000206b1027e72f1f1281308800000060dc62000892565b6200002c9190620008ac565b6007556127106200004b6b1027e72f1f1281308800000060c862000892565b620000579190620008ac565b600855612710620000766b1027e72f1f12813088000000600362000892565b620000829190620008ac565b600b556040805161016081018252636261736560e01b81526000602082018190529181018290526001606082018190526080820183905260a0820181905260c0820181905260e082018190526101008201819052610120820183905261014090910152600f80546001600160c01b031916636261736560981b179055601055601180546701000101010100016001600160401b03199091161790553480156200012a57600080fd5b506040518060400160405280600681526020016542414e414e4160d01b8152506040518060400160405280600681526020016542414e414e4160d01b81525060006200017b6200062a60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001d3838262000973565b506005620001e2828262000973565b505060008054600c80546101006001600160a01b03909316928302610100600160a81b0319909116179055600e80546001600160a01b03199081168317909155600d805490911690911790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9350839163c45a01559160048083019260209291908290030181865afa15801562000282573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a8919062000a3f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031c919062000a3f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200036a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000390919062000a3f565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620003c48160016200062e565b6006805460ff60a81b1916600160a81b179055600160136000620003f06000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526013909352818320805485166001908117909155600e549091168352818320805485168217905530835290822080549093168117909255601290620004726000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905585821681526015938490528281208054861660019081179091556006549092168152828120805486168317905530815291822080549094168117909355620004f06000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d548216815260158452828120805486166001908117909155600e54909216815282812080548616831790557f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e58054861683179055308152601493849052918220805490941681179093556200059d6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526014909352818320805485166001908117909155600e54909116835291208054909216179055620006226200060f6000546001600160a01b031690565b6b1027e72f1f128130880000006200071e565b505062000a80565b3390565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503620006ca5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b038216600081815260176020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620007765760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620006c1565b60035462000785908262000810565b6003556001600160a01b038216600090815260016020526040902054620007ad908262000810565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620007ff9085815260200190565b60405180910390a35050565b505050565b6000806200081f838562000a6a565b905083811015620008735760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006c1565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200087657620008766200087c565b600082620008ca57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008fa57607f821691505b6020821081036200091b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200080b57600081815260208120601f850160051c810160208610156200094a5750805b601f850160051c820191505b818110156200096b5782815560010162000956565b505050505050565b81516001600160401b038111156200098f576200098f620008cf565b620009a781620009a08454620008e5565b8462000921565b602080601f831160018114620009df5760008415620009c65750858301515b600019600386901b1c1916600185901b1785556200096b565b600085815260208120601f198616915b8281101562000a1057888601518255948401946001909101908401620009ef565b508582101562000a2f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a5257600080fd5b81516001600160a01b03811681146200087357600080fd5b808201808211156200087657620008766200087c565b608051613af362000ab8600039600081816103ea01528181610fe201528181611158015281816112bd0152611c440152613af36000f3fe60806040526004361061023f5760003560e01c80638d0445ee1161012e578063b62496f5116100ab578063d6d59c951161006f578063d6d59c95146106f0578063dd62ed3e14610710578063f2fde38b14610756578063f4960b4714610776578063fe0175351461078b57600080fd5b8063b62496f514610616578063c024666814610646578063c9567bf914610666578063cd43e2281461067b578063d2d7ad83146106da57600080fd5b8063a339f7f6116100f2578063a339f7f614610580578063a457c2d7146105a0578063a9059cbb146105c0578063aa4bde28146105e0578063aee50b1e146105f657600080fd5b80638d0445ee146104f85780638da5cb5b1461051857806395d89b41146105365780639dccf6f11461054b578063a086b36e1461056057600080fd5b806342966c68116101bc578063715018a611610180578063715018a61461046d578063781edb3c146104825780637a08d059146104a2578063880bcbc1146104c25780638c0b5e22146104e257600080fd5b806342966c68146103b857806349bd5a5e146103d857806355e891c11461040c5780635b44ded01461042c57806370a082311461044d57600080fd5b80631e293c10116102035780631e293c101461031a57806323b872dd1461033c57806327a14fc21461035c578063313ce5671461037c578063395093511461039857600080fd5b8063064a59d01461024b57806306fdde0314610281578063095ea7b3146102a35780631694505e146102c357806318160ddd146102fb57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5060065461026c90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561028d57600080fd5b506102966107c6565b604051610278919061347d565b3480156102af57600080fd5b5061026c6102be3660046134e0565b610858565b3480156102cf57600080fd5b506006546102e3906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b34801561030757600080fd5b506003545b604051908152602001610278565b34801561032657600080fd5b5061033a61033536600461350c565b61086f565b005b34801561034857600080fd5b5061026c610357366004613525565b610968565b34801561036857600080fd5b5061033a61037736600461350c565b6109d1565b34801561038857600080fd5b5060405160128152602001610278565b3480156103a457600080fd5b5061026c6103b33660046134e0565b610b22565b3480156103c457600080fd5b5061033a6103d336600461350c565b610b58565b3480156103e457600080fd5b506102e37f000000000000000000000000000000000000000000000000000000000000000081565b34801561041857600080fd5b5061033a61042736600461357c565b610b65565b34801561043857600080fd5b5060065461026c90600160a81b900460ff1681565b34801561045957600080fd5b5061030c6104683660046135d0565b610c71565b34801561047957600080fd5b5061033a610c8c565b34801561048e57600080fd5b5061033a61049d3660046135ed565b610d00565b3480156104ae57600080fd5b5061033a6104bd36600461357c565b610dca565b3480156104ce57600080fd5b5061033a6104dd3660046135ed565b610e84565b3480156104ee57600080fd5b5061030c60085481565b34801561050457600080fd5b5061033a61051336600461362b565b610f46565b34801561052457600080fd5b506000546001600160a01b03166102e3565b34801561054257600080fd5b506102966113b9565b34801561055757600080fd5b5061033a6113c8565b34801561056c57600080fd5b5061033a61057b36600461350c565b611409565b34801561058c57600080fd5b5061033a61059b3660046135ed565b611500565b3480156105ac57600080fd5b5061026c6105bb3660046134e0565b611582565b3480156105cc57600080fd5b5061026c6105db3660046134e0565b6115d1565b3480156105ec57600080fd5b5061030c60075481565b34801561060257600080fd5b5061033a61061136600461350c565b6115de565b34801561062257600080fd5b5061026c6106313660046135d0565b60176020526000908152604090205460ff1681565b34801561065257600080fd5b5061033a6106613660046135ed565b6116a8565b34801561067257600080fd5b5061033a61176a565b34801561068757600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610278565b3480156106e657600080fd5b5061030c600b5481565b3480156106fc57600080fd5b5061033a61070b366004613676565b6117a9565b34801561071c57600080fd5b5061030c61072b36600461369b565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561076257600080fd5b5061033a6107713660046135d0565b611950565b34801561078257600080fd5b5061026c611a3a565b34801561079757600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b9004166106ad565b6060600480546107d5906136c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610801906136c9565b801561084e5780601f106108235761010080835404028352916020019161084e565b820191906000526020600020905b81548152906001019060200180831161083157829003601f168201915b5050505050905090565b6000610865338484611a78565b5060015b92915050565b6000546001600160a01b031633146108a25760405162461bcd60e51b815260040161089990613703565b60405180910390fd5b670de0b6b3a76400006103e86108b760035490565b6108c290600261374e565b6108cc919061377b565b6108d6919061377b565b8110156109355760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b6064820152608401610899565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b6000610975848484611b9d565b6109c784336109c285604051806060016040528060288152602001613a51602891396001600160a01b038a16600090815260026020908152604080832033845290915290205491906122aa565b611a78565b5060019392505050565b6000546001600160a01b031633146109fb5760405162461bcd60e51b815260040161089990613703565b670de0b6b3a76400006103e8610a1060035490565b610a1b90601461374e565b610a25919061377b565b610a2f919061377b565b811015610a8a5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b6064820152608401610899565b6007548103610aef5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610899565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916108659185906109c290866122e4565b610b62338261234a565b50565b6000546001600160a01b03163314610b8f5760405162461bcd60e51b815260040161089990613703565b8082610b9b858761378f565b610ba5919061378f565b610baf919061378f565b60ff16600311610bee5760405162461bcd60e51b815260206004820152600a6024820152696275792066656520332560b01b6044820152606401610899565b610bfc600f85858585612455565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610cb65760405162461bcd60e51b815260040161089990613703565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610d2a5760405162461bcd60e51b815260040161089990613703565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503610d6a5760405162461bcd60e51b8152600401610899906137a8565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610df45760405162461bcd60e51b815260040161089990613703565b8082610e00858761378f565b610e0a919061378f565b610e14919061378f565b60ff16600311610e585760405162461bcd60e51b815260206004820152600f60248201526e6d61782073656c6c2066656520332560881b6044820152606401610899565b610e66600f8585858561269e565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01610c15565b6000546001600160a01b03163314610eae5760405162461bcd60e51b815260040161089990613703565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503610eee5760405162461bcd60e51b8152600401610899906137a8565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610dbe565b6000546001600160a01b03163314610f705760405162461bcd60e51b815260040161089990613703565b600c546001600160a01b0384811661010090920416146110eb576001600160a01b038316610fe05760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610899565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036110615760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610899565b600c546040516001600160a01b0361010090920482169185169061109a906e1b1a5c5d5a591a5d1e55d85b1b195d608a1b8152600f0190565b604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600c8054610100600160a81b0319166101006001600160a01b038616021790555b600d546001600160a01b03838116911614611250576001600160a01b0382166111565760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610899565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111d75760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610899565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b038281169116146113b4576001600160a01b0381166112bb5760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f74206265203000006044820152606401610899565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03160361133c5760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f74206265203000006044820152606401610899565b600e80546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b03918216929184169101604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b505050565b6060600580546107d5906136c9565b6000546001600160a01b031633146113f25760405162461bcd60e51b815260040161089990613703565b6b1027e72f1f128130880000006007819055600855565b4781106114675760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610899565b600c5460405160009161010090046001600160a01b03169083908381818185875af1925050503d80600081146114b9576040519150601f19603f3d011682016040523d82523d6000602084013e6114be565b606091505b5050905080156114fc576040518281527fdda2f422942b297b89061fce69fb15f2958212d0889fafe06a2c49de4f48924d9060200160405180910390a15b5050565b6000546001600160a01b0316331461152a5760405162461bcd60e51b815260040161089990613703565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610dbe565b600061086533846109c285604051806060016040528060258152602001613a99602591393360009081526002602090815260408083206001600160a01b038d16845290915290205491906122aa565b6000610865338484611b9d565b6000546001600160a01b031633146116085760405162461bcd60e51b815260040161089990613703565b600b5481036116755760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610899565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146116d25760405162461bcd60e51b815260040161089990613703565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036117125760405162461bcd60e51b8152600401610899906137a8565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f71206a5ad264eefddb6ae746c7aaa3e4e15de930b82c3a645b89a7005e534ba29101610dbe565b6000546001600160a01b031633146117945760405162461bcd60e51b815260040161089990613703565b6006805460ff60a01b1916600160a01b179055565b670de0b6b3a7640000821015611946576040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184791906137f2565b8160008151811061185a5761185a61380f565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061188e5761188e61380f565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de959085906118d690600090869061dead904290600401613869565b6000604051808303818588803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688360405161193991815260200190565b60405180910390a1505050565b6114fc8183612901565b6000546001600160a01b0316331461197a5760405162461bcd60e51b815260040161089990613703565b6001600160a01b0381166119df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610899565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314611a655760405162461bcd60e51b815260040161089990613703565b506006805460ff60a81b19169055600190565b6001600160a01b038316611ada5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610899565b6001600160a01b038216611b3b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610899565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611bc35760405162461bcd60e51b81526004016108999061389e565b6001600160a01b038216611be95760405162461bcd60e51b8152600401610899906138e3565b80600003611bfd576113b4838360006129ba565b600654600160a81b900460ff1615611d27576000546001600160a01b03838116911614801590611c3b57506006546001600160a01b03838116911614155b8015611c7957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611d2757326000908152601860205260409020544311611d145760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610899565b3260009081526018602052604090204390555b6001600160a01b03808416600081815260176020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611d8957506001600160a01b03841660009081526012602052604090205460ff16155b1561205d57600654600160a01b900460ff16611de75760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610899565b6001600160a01b03851660009081526017602052604090205460ff168015611e2857506001600160a01b03841660009081526014602052604090205460ff16155b15611ef957600854831115611e905760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610899565b600754611e9c85610c71565b611ea69085613926565b1115611ef45760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610899565b61205d565b6001600160a01b03841660009081526017602052604090205460ff168015611f3a57506001600160a01b03851660009081526014602052604090205460ff16155b15611fa457600854831115611ef45760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610899565b6001600160a01b03841660009081526014602052604090205460ff1661202857600754611fd085610c71565b611fda9085613926565b1115611ef45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c65740000000000000000006044820152606401610899565b600c5460ff1615801561205357506001600160a01b03851660009081526014602052604090205460ff165b1561205d57426009555b61206982828787612ac6565b6000600b5461207730610c71565b6006549111159150600160a01b900460ff1680156120925750805b80156120a15750600c5460ff16155b80156120b85750601a54600160201b900460ff1615155b80156120dc57506001600160a01b03851660009081526017602052604090205460ff165b801561210157506001600160a01b03861660009081526013602052604090205460ff16155b801561212657506001600160a01b03851660009081526013602052604090205460ff16155b1561214b57600c805460ff19166001179055612140612cea565b600c805460ff191690555b600c5460009060ff1615801561216a5750600654600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff16806121ac57506001600160a01b03861660009081526013602052604090205460ff165b156121b5575060005b8080156121cd5750601a54600160201b900460ff1615155b1561229657601a546000906064906121ef90600160201b900460ff168861374e565b6121f9919061377b565b601a54909150600090606490612219906301000000900460ff168961374e565b612223919061377b565b905061222f8288613939565b965061223c8930846129ba565b80156122935761224c308261234a565b601a5460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b6122a18787876129ba565b50505050505050565b600081848411156122ce5760405162461bcd60e51b8152600401610899919061347d565b5060006122db8486613939565b95945050505050565b6000806122f18385613926565b9050838110156123435760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610899565b9392505050565b6001600160a01b0382166123aa5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610899565b6123e781604051806060016040528060228152602001613a09602291396001600160a01b03851660009081526001602052604090205491906122aa565b6001600160a01b03831660009081526001602052604090205560035461240d9082612f39565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff8581169116146124d657604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff9182169291881691600080516020613a79833981519152916124bc9160481b9061394c565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461256a57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613a79833981519152916125499160481b9061394c565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612601576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b90920482169291861691600080516020613a79833981519152916125dd9160481b9061394c565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614612697576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613a79833981519152916126719160481b9061394c565b60405180910390a460028501805466ff0000000000001916600160301b60ff8416021790555b5050505050565b600285015460ff858116610100909204161461272f57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613a79833981519152916127109160481b9061394c565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146127c857604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff630100000090920482169291871691600080516020613a79833981519152916127a59160481b9061394c565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612861576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613a798339815191529161283c9160481b9061394c565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614612697576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613a79833981519152916128d29160481b9061394c565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600b5461290d30610c71565b10156129765760405162461bcd60e51b815260206004820152603260248201527f7377617020616d6f756e74206d757374206f766572207468616e206d696e696d6044820152710756d546f6b656e734265666f7265537761760741b6064820152608401610899565b6129808282612f7b565b156114fc57601a54600160201b900460ff16156114fc57600c805460ff191660011790556129ac612cea565b600c805460ff191690555050565b6001600160a01b0383166129e05760405162461bcd60e51b81526004016108999061389e565b6001600160a01b038216612a065760405162461bcd60e51b8152600401610899906138e3565b612a4381604051806060016040528060268152602001613a2b602691396001600160a01b03861660009081526001602052604090205491906122aa565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612a7290826122e4565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b909085815260200190565b601a805463ffffffff191690558215612b3657601154601a805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b8315612ba157601154601a805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b90930416630100000002919091179055612ba181613135565b82158015612bad575083155b15612c0f57601154601a805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b612c1a8483836131bb565b601a5460ff63010000008204811691620100008104821691612c449161010081048216911661378f565b612c4e919061378f565b612c58919061378f565b601a805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b6000612cf530610c71565b600b549091504790612d0890600761374e565b821115612d2057600b54612d1d90600761374e565b91505b601a54600090819060029060ff600160201b8204811691612d4291168761374e565b612d4c919061377b565b612d56919061377b565b90506000612d648286613939565b9050612d6f81613271565b6000612d7b8547613939565b601a5490915060009060ff63010000008204811691612d9d9160029116613963565b612da7919061378f565b601a54612dbe9190600160201b900460ff16613985565b601a5460ff91821692506000916002918491612ddb91168661374e565b612de5919061377b565b612def919061377b565b601a549091506000908390612e0c90610100900460ff168661374e565b612e16919061377b565b90506000612e248284613926565b612e2e9086613939565b600e546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114612e7c576040519150601f19603f3d011682016040523d82523d6000602084013e612e81565b606091505b5050600d546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114612ed1576040519150601f19603f3d011682016040523d82523d6000602084013e612ed6565b606091505b50909850508615612f2d57612eeb87846133cb565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b600061234383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122aa565b33600090815260136020526040812054819060ff1661309257601a54600160201b900460ff161561301857601a54600090606490612fc390600160201b900460ff168661374e565b612fcd919061377b565b601a54909150600090606490612fed906301000000900460ff168761374e565b612ff7919061377b565b90506130038286613939565b9450801561301557613015338261234a565b50505b601a54600160201b900460ff161561308b57600061303530610c71565b601a5490915060009060029060ff600160201b820481169161305891168561374e565b613062919061377b565b61306c919061377b565b9050600061307a8284613939565b9050801561308757600193505b5050505b9050610869565b6001600160a01b03841630146130b4576130ac848461234a565b5060006130bd565b50600982905560005b601a54600160201b900460ff161561308b5760006130da30610c71565b601a5490915060009060029060ff600160201b82048116916130fd91168561374e565b613107919061377b565b613111919061377b565b9050600061311f8284613939565b9050801561308757600093505050509050610869565b6001600160a01b03811660009081526016602052604090205415613171576001600160a01b03811660009081526016602052604090205461319f565b61317a81610c71565b1561319d576001600160a01b03811660009081526016602052604090205461319f565b425b6001600160a01b03909116600090815260166020526040902055565b6001600160a01b038116158015906131de57506001600160a01b03811661dead14155b801561320357506001600160a01b03821660009081526013602052604090205460ff16155b801561322857506001600160a01b03811660009081526013602052604090205460ff16155b156113b4578215801561323e5750600c5460ff16155b156113b4576009546001600160a01b0383166000908152601660205260409020546132699190613939565b600a55505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132a6576132a661380f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156132ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332391906137f2565b816001815181106133365761333661380f565b6001600160a01b03928316602091820292909201015260065461335c9130911684611a78565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061339590859060009086903090429060040161399e565b600060405180830381600087803b1580156133af57600080fd5b505af11580156133c3573d6000803e3d6000fd5b505050505050565b6006546133e39030906001600160a01b031684611a78565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b03610100909204821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613458573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061269791906139da565b600060208083528351808285015260005b818110156134aa5785810183015185820160400152820161348e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610b6257600080fd5b600080604083850312156134f357600080fd5b82356134fe816134cb565b946020939093013593505050565b60006020828403121561351e57600080fd5b5035919050565b60008060006060848603121561353a57600080fd5b8335613545816134cb565b92506020840135613555816134cb565b929592945050506040919091013590565b803560ff8116811461357757600080fd5b919050565b6000806000806080858703121561359257600080fd5b61359b85613566565b93506135a960208601613566565b92506135b760408601613566565b91506135c560608601613566565b905092959194509250565b6000602082840312156135e257600080fd5b8135612343816134cb565b6000806040838503121561360057600080fd5b823561360b816134cb565b91506020830135801515811461362057600080fd5b809150509250929050565b60008060006060848603121561364057600080fd5b833561364b816134cb565b9250602084013561365b816134cb565b9150604084013561366b816134cb565b809150509250925092565b6000806040838503121561368957600080fd5b823591506020830135613620816134cb565b600080604083850312156136ae57600080fd5b82356136b9816134cb565b91506020830135613620816134cb565b600181811c908216806136dd57607f821691505b6020821081036136fd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761086957610869613738565b634e487b7160e01b600052601260045260246000fd5b60008261378a5761378a613765565b500490565b60ff818116838216019081111561086957610869613738565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60006020828403121561380457600080fd5b8151612343816134cb565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561385e5781516001600160a01b031687529582019590820190600101613839565b509495945050505050565b8481526080602082015260006138826080830186613825565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082018082111561086957610869613738565b8181038181111561086957610869613738565b68ffffffffffffffffff1991909116815260200190565b600060ff83168061397657613976613765565b8060ff84160491505092915050565b60ff828116828216039081111561086957610869613738565b85815284602082015260a0604082015260006139bd60a0830186613825565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156139ef57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365301b44cf1eabb0a57f586af3c6c9a262ca22eb81e2a8fa6c56c98fe628dd0f6245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cc9489797241744f06ce52bb70e1e3b174ed221bf85be69daa31b7af30a5fd0764736f6c63430008130033
Deployed Bytecode
0x60806040526004361061023f5760003560e01c80638d0445ee1161012e578063b62496f5116100ab578063d6d59c951161006f578063d6d59c95146106f0578063dd62ed3e14610710578063f2fde38b14610756578063f4960b4714610776578063fe0175351461078b57600080fd5b8063b62496f514610616578063c024666814610646578063c9567bf914610666578063cd43e2281461067b578063d2d7ad83146106da57600080fd5b8063a339f7f6116100f2578063a339f7f614610580578063a457c2d7146105a0578063a9059cbb146105c0578063aa4bde28146105e0578063aee50b1e146105f657600080fd5b80638d0445ee146104f85780638da5cb5b1461051857806395d89b41146105365780639dccf6f11461054b578063a086b36e1461056057600080fd5b806342966c68116101bc578063715018a611610180578063715018a61461046d578063781edb3c146104825780637a08d059146104a2578063880bcbc1146104c25780638c0b5e22146104e257600080fd5b806342966c68146103b857806349bd5a5e146103d857806355e891c11461040c5780635b44ded01461042c57806370a082311461044d57600080fd5b80631e293c10116102035780631e293c101461031a57806323b872dd1461033c57806327a14fc21461035c578063313ce5671461037c578063395093511461039857600080fd5b8063064a59d01461024b57806306fdde0314610281578063095ea7b3146102a35780631694505e146102c357806318160ddd146102fb57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5060065461026c90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561028d57600080fd5b506102966107c6565b604051610278919061347d565b3480156102af57600080fd5b5061026c6102be3660046134e0565b610858565b3480156102cf57600080fd5b506006546102e3906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b34801561030757600080fd5b506003545b604051908152602001610278565b34801561032657600080fd5b5061033a61033536600461350c565b61086f565b005b34801561034857600080fd5b5061026c610357366004613525565b610968565b34801561036857600080fd5b5061033a61037736600461350c565b6109d1565b34801561038857600080fd5b5060405160128152602001610278565b3480156103a457600080fd5b5061026c6103b33660046134e0565b610b22565b3480156103c457600080fd5b5061033a6103d336600461350c565b610b58565b3480156103e457600080fd5b506102e37f000000000000000000000000fb408f639734001eed02927a63326b07a5ef3ac381565b34801561041857600080fd5b5061033a61042736600461357c565b610b65565b34801561043857600080fd5b5060065461026c90600160a81b900460ff1681565b34801561045957600080fd5b5061030c6104683660046135d0565b610c71565b34801561047957600080fd5b5061033a610c8c565b34801561048e57600080fd5b5061033a61049d3660046135ed565b610d00565b3480156104ae57600080fd5b5061033a6104bd36600461357c565b610dca565b3480156104ce57600080fd5b5061033a6104dd3660046135ed565b610e84565b3480156104ee57600080fd5b5061030c60085481565b34801561050457600080fd5b5061033a61051336600461362b565b610f46565b34801561052457600080fd5b506000546001600160a01b03166102e3565b34801561054257600080fd5b506102966113b9565b34801561055757600080fd5b5061033a6113c8565b34801561056c57600080fd5b5061033a61057b36600461350c565b611409565b34801561058c57600080fd5b5061033a61059b3660046135ed565b611500565b3480156105ac57600080fd5b5061026c6105bb3660046134e0565b611582565b3480156105cc57600080fd5b5061026c6105db3660046134e0565b6115d1565b3480156105ec57600080fd5b5061030c60075481565b34801561060257600080fd5b5061033a61061136600461350c565b6115de565b34801561062257600080fd5b5061026c6106313660046135d0565b60176020526000908152604090205460ff1681565b34801561065257600080fd5b5061033a6106613660046135ed565b6116a8565b34801561067257600080fd5b5061033a61176a565b34801561068757600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610278565b3480156106e657600080fd5b5061030c600b5481565b3480156106fc57600080fd5b5061033a61070b366004613676565b6117a9565b34801561071c57600080fd5b5061030c61072b36600461369b565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561076257600080fd5b5061033a6107713660046135d0565b611950565b34801561078257600080fd5b5061026c611a3a565b34801561079757600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b9004166106ad565b6060600480546107d5906136c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610801906136c9565b801561084e5780601f106108235761010080835404028352916020019161084e565b820191906000526020600020905b81548152906001019060200180831161083157829003601f168201915b5050505050905090565b6000610865338484611a78565b5060015b92915050565b6000546001600160a01b031633146108a25760405162461bcd60e51b815260040161089990613703565b60405180910390fd5b670de0b6b3a76400006103e86108b760035490565b6108c290600261374e565b6108cc919061377b565b6108d6919061377b565b8110156109355760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b6064820152608401610899565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b6000610975848484611b9d565b6109c784336109c285604051806060016040528060288152602001613a51602891396001600160a01b038a16600090815260026020908152604080832033845290915290205491906122aa565b611a78565b5060019392505050565b6000546001600160a01b031633146109fb5760405162461bcd60e51b815260040161089990613703565b670de0b6b3a76400006103e8610a1060035490565b610a1b90601461374e565b610a25919061377b565b610a2f919061377b565b811015610a8a5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b6064820152608401610899565b6007548103610aef5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610899565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916108659185906109c290866122e4565b610b62338261234a565b50565b6000546001600160a01b03163314610b8f5760405162461bcd60e51b815260040161089990613703565b8082610b9b858761378f565b610ba5919061378f565b610baf919061378f565b60ff16600311610bee5760405162461bcd60e51b815260206004820152600a6024820152696275792066656520332560b01b6044820152606401610899565b610bfc600f85858585612455565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610cb65760405162461bcd60e51b815260040161089990613703565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610d2a5760405162461bcd60e51b815260040161089990613703565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503610d6a5760405162461bcd60e51b8152600401610899906137a8565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610df45760405162461bcd60e51b815260040161089990613703565b8082610e00858761378f565b610e0a919061378f565b610e14919061378f565b60ff16600311610e585760405162461bcd60e51b815260206004820152600f60248201526e6d61782073656c6c2066656520332560881b6044820152606401610899565b610e66600f8585858561269e565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01610c15565b6000546001600160a01b03163314610eae5760405162461bcd60e51b815260040161089990613703565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503610eee5760405162461bcd60e51b8152600401610899906137a8565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610dbe565b6000546001600160a01b03163314610f705760405162461bcd60e51b815260040161089990613703565b600c546001600160a01b0384811661010090920416146110eb576001600160a01b038316610fe05760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610899565b7f000000000000000000000000fb408f639734001eed02927a63326b07a5ef3ac36001600160a01b0316836001600160a01b0316036110615760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610899565b600c546040516001600160a01b0361010090920482169185169061109a906e1b1a5c5d5a591a5d1e55d85b1b195d608a1b8152600f0190565b604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600c8054610100600160a81b0319166101006001600160a01b038616021790555b600d546001600160a01b03838116911614611250576001600160a01b0382166111565760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610899565b7f000000000000000000000000fb408f639734001eed02927a63326b07a5ef3ac36001600160a01b0316826001600160a01b0316036111d75760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610899565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b038281169116146113b4576001600160a01b0381166112bb5760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f74206265203000006044820152606401610899565b7f000000000000000000000000fb408f639734001eed02927a63326b07a5ef3ac36001600160a01b0316816001600160a01b03160361133c5760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f74206265203000006044820152606401610899565b600e80546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b03918216929184169101604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b505050565b6060600580546107d5906136c9565b6000546001600160a01b031633146113f25760405162461bcd60e51b815260040161089990613703565b6b1027e72f1f128130880000006007819055600855565b4781106114675760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610899565b600c5460405160009161010090046001600160a01b03169083908381818185875af1925050503d80600081146114b9576040519150601f19603f3d011682016040523d82523d6000602084013e6114be565b606091505b5050905080156114fc576040518281527fdda2f422942b297b89061fce69fb15f2958212d0889fafe06a2c49de4f48924d9060200160405180910390a15b5050565b6000546001600160a01b0316331461152a5760405162461bcd60e51b815260040161089990613703565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610dbe565b600061086533846109c285604051806060016040528060258152602001613a99602591393360009081526002602090815260408083206001600160a01b038d16845290915290205491906122aa565b6000610865338484611b9d565b6000546001600160a01b031633146116085760405162461bcd60e51b815260040161089990613703565b600b5481036116755760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610899565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146116d25760405162461bcd60e51b815260040161089990613703565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036117125760405162461bcd60e51b8152600401610899906137a8565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f71206a5ad264eefddb6ae746c7aaa3e4e15de930b82c3a645b89a7005e534ba29101610dbe565b6000546001600160a01b031633146117945760405162461bcd60e51b815260040161089990613703565b6006805460ff60a01b1916600160a01b179055565b670de0b6b3a7640000821015611946576040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184791906137f2565b8160008151811061185a5761185a61380f565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061188e5761188e61380f565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de959085906118d690600090869061dead904290600401613869565b6000604051808303818588803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688360405161193991815260200190565b60405180910390a1505050565b6114fc8183612901565b6000546001600160a01b0316331461197a5760405162461bcd60e51b815260040161089990613703565b6001600160a01b0381166119df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610899565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314611a655760405162461bcd60e51b815260040161089990613703565b506006805460ff60a81b19169055600190565b6001600160a01b038316611ada5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610899565b6001600160a01b038216611b3b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610899565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611bc35760405162461bcd60e51b81526004016108999061389e565b6001600160a01b038216611be95760405162461bcd60e51b8152600401610899906138e3565b80600003611bfd576113b4838360006129ba565b600654600160a81b900460ff1615611d27576000546001600160a01b03838116911614801590611c3b57506006546001600160a01b03838116911614155b8015611c7957507f000000000000000000000000fb408f639734001eed02927a63326b07a5ef3ac36001600160a01b0316826001600160a01b031614155b15611d2757326000908152601860205260409020544311611d145760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610899565b3260009081526018602052604090204390555b6001600160a01b03808416600081815260176020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611d8957506001600160a01b03841660009081526012602052604090205460ff16155b1561205d57600654600160a01b900460ff16611de75760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610899565b6001600160a01b03851660009081526017602052604090205460ff168015611e2857506001600160a01b03841660009081526014602052604090205460ff16155b15611ef957600854831115611e905760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610899565b600754611e9c85610c71565b611ea69085613926565b1115611ef45760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610899565b61205d565b6001600160a01b03841660009081526017602052604090205460ff168015611f3a57506001600160a01b03851660009081526014602052604090205460ff16155b15611fa457600854831115611ef45760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610899565b6001600160a01b03841660009081526014602052604090205460ff1661202857600754611fd085610c71565b611fda9085613926565b1115611ef45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c65740000000000000000006044820152606401610899565b600c5460ff1615801561205357506001600160a01b03851660009081526014602052604090205460ff165b1561205d57426009555b61206982828787612ac6565b6000600b5461207730610c71565b6006549111159150600160a01b900460ff1680156120925750805b80156120a15750600c5460ff16155b80156120b85750601a54600160201b900460ff1615155b80156120dc57506001600160a01b03851660009081526017602052604090205460ff165b801561210157506001600160a01b03861660009081526013602052604090205460ff16155b801561212657506001600160a01b03851660009081526013602052604090205460ff16155b1561214b57600c805460ff19166001179055612140612cea565b600c805460ff191690555b600c5460009060ff1615801561216a5750600654600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff16806121ac57506001600160a01b03861660009081526013602052604090205460ff165b156121b5575060005b8080156121cd5750601a54600160201b900460ff1615155b1561229657601a546000906064906121ef90600160201b900460ff168861374e565b6121f9919061377b565b601a54909150600090606490612219906301000000900460ff168961374e565b612223919061377b565b905061222f8288613939565b965061223c8930846129ba565b80156122935761224c308261234a565b601a5460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b6122a18787876129ba565b50505050505050565b600081848411156122ce5760405162461bcd60e51b8152600401610899919061347d565b5060006122db8486613939565b95945050505050565b6000806122f18385613926565b9050838110156123435760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610899565b9392505050565b6001600160a01b0382166123aa5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610899565b6123e781604051806060016040528060228152602001613a09602291396001600160a01b03851660009081526001602052604090205491906122aa565b6001600160a01b03831660009081526001602052604090205560035461240d9082612f39565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff8581169116146124d657604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff9182169291881691600080516020613a79833981519152916124bc9160481b9061394c565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461256a57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613a79833981519152916125499160481b9061394c565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612601576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b90920482169291861691600080516020613a79833981519152916125dd9160481b9061394c565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614612697576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613a79833981519152916126719160481b9061394c565b60405180910390a460028501805466ff0000000000001916600160301b60ff8416021790555b5050505050565b600285015460ff858116610100909204161461272f57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613a79833981519152916127109160481b9061394c565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146127c857604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff630100000090920482169291871691600080516020613a79833981519152916127a59160481b9061394c565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612861576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613a798339815191529161283c9160481b9061394c565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614612697576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613a79833981519152916128d29160481b9061394c565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600b5461290d30610c71565b10156129765760405162461bcd60e51b815260206004820152603260248201527f7377617020616d6f756e74206d757374206f766572207468616e206d696e696d6044820152710756d546f6b656e734265666f7265537761760741b6064820152608401610899565b6129808282612f7b565b156114fc57601a54600160201b900460ff16156114fc57600c805460ff191660011790556129ac612cea565b600c805460ff191690555050565b6001600160a01b0383166129e05760405162461bcd60e51b81526004016108999061389e565b6001600160a01b038216612a065760405162461bcd60e51b8152600401610899906138e3565b612a4381604051806060016040528060268152602001613a2b602691396001600160a01b03861660009081526001602052604090205491906122aa565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612a7290826122e4565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b909085815260200190565b601a805463ffffffff191690558215612b3657601154601a805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b8315612ba157601154601a805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b90930416630100000002919091179055612ba181613135565b82158015612bad575083155b15612c0f57601154601a805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b612c1a8483836131bb565b601a5460ff63010000008204811691620100008104821691612c449161010081048216911661378f565b612c4e919061378f565b612c58919061378f565b601a805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b6000612cf530610c71565b600b549091504790612d0890600761374e565b821115612d2057600b54612d1d90600761374e565b91505b601a54600090819060029060ff600160201b8204811691612d4291168761374e565b612d4c919061377b565b612d56919061377b565b90506000612d648286613939565b9050612d6f81613271565b6000612d7b8547613939565b601a5490915060009060ff63010000008204811691612d9d9160029116613963565b612da7919061378f565b601a54612dbe9190600160201b900460ff16613985565b601a5460ff91821692506000916002918491612ddb91168661374e565b612de5919061377b565b612def919061377b565b601a549091506000908390612e0c90610100900460ff168661374e565b612e16919061377b565b90506000612e248284613926565b612e2e9086613939565b600e546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114612e7c576040519150601f19603f3d011682016040523d82523d6000602084013e612e81565b606091505b5050600d546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114612ed1576040519150601f19603f3d011682016040523d82523d6000602084013e612ed6565b606091505b50909850508615612f2d57612eeb87846133cb565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b600061234383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122aa565b33600090815260136020526040812054819060ff1661309257601a54600160201b900460ff161561301857601a54600090606490612fc390600160201b900460ff168661374e565b612fcd919061377b565b601a54909150600090606490612fed906301000000900460ff168761374e565b612ff7919061377b565b90506130038286613939565b9450801561301557613015338261234a565b50505b601a54600160201b900460ff161561308b57600061303530610c71565b601a5490915060009060029060ff600160201b820481169161305891168561374e565b613062919061377b565b61306c919061377b565b9050600061307a8284613939565b9050801561308757600193505b5050505b9050610869565b6001600160a01b03841630146130b4576130ac848461234a565b5060006130bd565b50600982905560005b601a54600160201b900460ff161561308b5760006130da30610c71565b601a5490915060009060029060ff600160201b82048116916130fd91168561374e565b613107919061377b565b613111919061377b565b9050600061311f8284613939565b9050801561308757600093505050509050610869565b6001600160a01b03811660009081526016602052604090205415613171576001600160a01b03811660009081526016602052604090205461319f565b61317a81610c71565b1561319d576001600160a01b03811660009081526016602052604090205461319f565b425b6001600160a01b03909116600090815260166020526040902055565b6001600160a01b038116158015906131de57506001600160a01b03811661dead14155b801561320357506001600160a01b03821660009081526013602052604090205460ff16155b801561322857506001600160a01b03811660009081526013602052604090205460ff16155b156113b4578215801561323e5750600c5460ff16155b156113b4576009546001600160a01b0383166000908152601660205260409020546132699190613939565b600a55505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132a6576132a661380f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156132ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332391906137f2565b816001815181106133365761333661380f565b6001600160a01b03928316602091820292909201015260065461335c9130911684611a78565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061339590859060009086903090429060040161399e565b600060405180830381600087803b1580156133af57600080fd5b505af11580156133c3573d6000803e3d6000fd5b505050505050565b6006546133e39030906001600160a01b031684611a78565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b03610100909204821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613458573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061269791906139da565b600060208083528351808285015260005b818110156134aa5785810183015185820160400152820161348e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610b6257600080fd5b600080604083850312156134f357600080fd5b82356134fe816134cb565b946020939093013593505050565b60006020828403121561351e57600080fd5b5035919050565b60008060006060848603121561353a57600080fd5b8335613545816134cb565b92506020840135613555816134cb565b929592945050506040919091013590565b803560ff8116811461357757600080fd5b919050565b6000806000806080858703121561359257600080fd5b61359b85613566565b93506135a960208601613566565b92506135b760408601613566565b91506135c560608601613566565b905092959194509250565b6000602082840312156135e257600080fd5b8135612343816134cb565b6000806040838503121561360057600080fd5b823561360b816134cb565b91506020830135801515811461362057600080fd5b809150509250929050565b60008060006060848603121561364057600080fd5b833561364b816134cb565b9250602084013561365b816134cb565b9150604084013561366b816134cb565b809150509250925092565b6000806040838503121561368957600080fd5b823591506020830135613620816134cb565b600080604083850312156136ae57600080fd5b82356136b9816134cb565b91506020830135613620816134cb565b600181811c908216806136dd57607f821691505b6020821081036136fd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761086957610869613738565b634e487b7160e01b600052601260045260246000fd5b60008261378a5761378a613765565b500490565b60ff818116838216019081111561086957610869613738565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60006020828403121561380457600080fd5b8151612343816134cb565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561385e5781516001600160a01b031687529582019590820190600101613839565b509495945050505050565b8481526080602082015260006138826080830186613825565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082018082111561086957610869613738565b8181038181111561086957610869613738565b68ffffffffffffffffff1991909116815260200190565b600060ff83168061397657613976613765565b8060ff84160491505092915050565b60ff828116828216039081111561086957610869613738565b85815284602082015260a0604082015260006139bd60a0830186613825565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156139ef57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365301b44cf1eabb0a57f586af3c6c9a262ca22eb81e2a8fa6c56c98fe628dd0f6245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cc9489797241744f06ce52bb70e1e3b174ed221bf85be69daa31b7af30a5fd0764736f6c63430008130033
Deployed Bytecode Sourcemap
13427:27332:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13694:28;;;;;;;;;;-1:-1:-1;13694:28:0;;;;-1:-1:-1;;;13694:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;13694:28:0;;;;;;;;9088:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10068:194::-;;;;;;;;;;-1:-1:-1;10068:194:0;;;;;:::i;:::-;;:::i;13468:30::-;;;;;;;;;;-1:-1:-1;13468:30:0;;;;-1:-1:-1;;;;;13468:30:0;;;;;;-1:-1:-1;;;;;1393:32:1;;;1375:51;;1363:2;1348:18;13468:30:0;1215:217:1;9409:108:0;;;;;;;;;;-1:-1:-1;9497:12:0;;9409:108;;;1583:25:1;;;1571:2;1556:18;9409:108:0;1437:177:1;24291:323:0;;;;;;;;;;-1:-1:-1;24291:323:0;;;;;:::i;:::-;;:::i;:::-;;10270:464;;;;;;;;;;-1:-1:-1;10270:464:0;;;;;:::i;:::-;;:::i;24622:450::-;;;;;;;;;;-1:-1:-1;24622:450:0;;;;;:::i;:::-;;:::i;9308:93::-;;;;;;;;;;-1:-1:-1;9308:93:0;;9391:2;2407:36:1;;2395:2;2380:18;9308:93:0;2265:184:1;10742:293:0;;;;;;;;;;-1:-1:-1;10742:293:0;;;;;:::i;:::-;;:::i;25442:81::-;;;;;;;;;;-1:-1:-1;25442:81:0;;;;;:::i;:::-;;:::i;13505:38::-;;;;;;;;;;;;;;;22679:786;;;;;;;;;;-1:-1:-1;22679:786:0;;;;;:::i;:::-;;:::i;13729:28::-;;;;;;;;;;-1:-1:-1;13729:28:0;;;;-1:-1:-1;;;13729:28:0;;;;;;9525:143;;;;;;;;;;-1:-1:-1;9525:143:0;;;;;:::i;:::-;;:::i;8207:148::-;;;;;;;;;;;;;:::i;20424:396::-;;;;;;;;;;-1:-1:-1;20424:396:0;;;;;:::i;:::-;;:::i;23473:810::-;;;;;;;;;;-1:-1:-1;23473:810:0;;;;;:::i;:::-;;:::i;20006:410::-;;;;;;;;;;-1:-1:-1;20006:410:0;;;;;:::i;:::-;;:::i;13890:54::-;;;;;;;;;;;;;;;;20828:1823;;;;;;;;;;-1:-1:-1;20828:1823:0;;;;;:::i;:::-;;:::i;7987:79::-;;;;;;;;;;-1:-1:-1;8025:7:0;8052:6;-1:-1:-1;;;;;8052:6:0;7987:79;;9196:104;;;;;;;;;;;;;:::i;39756:124::-;;;;;;;;;;;;;:::i;40409:347::-;;;;;;;;;;-1:-1:-1;40409:347:0;;;;;:::i;:::-;;:::i;19037:238::-;;;;;;;;;;-1:-1:-1;19037:238:0;;;;;:::i;:::-;;:::i;11043:393::-;;;;;;;;;;-1:-1:-1;11043:393:0;;;;;:::i;:::-;;:::i;9676:200::-;;;;;;;;;;-1:-1:-1;9676:200:0;;;;;:::i;:::-;;:::i;13825:58::-;;;;;;;;;;;;;;;;25080:354;;;;;;;;;;-1:-1:-1;25080:354:0;;;;;:::i;:::-;;:::i;15028:57::-;;;;;;;;;;-1:-1:-1;15028:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19641:357;;;;;;;;;;-1:-1:-1;19641:357:0;;;;;:::i;:::-;;:::i;18941:84::-;;;;;;;;;;;;;:::i;25531:291::-;;;;;;;;;;-1:-1:-1;25673:23:0;;;;;;;25711;;;;;;-1:-1:-1;;;25749:21:0;;;;;-1:-1:-1;;;25785:18:0;;;25531:291;;;;4673:4:1;4661:17;;;4643:36;;4715:17;;;4710:2;4695:18;;4688:45;4769:17;;;4749:18;;;4742:45;;;;4823:17;;;4818:2;4803:18;;4796:45;4630:3;4615:19;25531:291:0;4428:419:1;14024:64:0;;;;;;;;;;;;;;;;38925:823;;;;;;;;;;-1:-1:-1;38925:823:0;;;;;:::i;:::-;;:::i;9884:176::-;;;;;;;;;;-1:-1:-1;9884:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;10025:18:0;;;9998:7;10025:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9884:176;8363:281;;;;;;;;;;-1:-1:-1;8363:281:0;;;;;:::i;:::-;;:::i;39888:134::-;;;;;;;;;;;;;:::i;25830:296::-;;;;;;;;;;-1:-1:-1;25973:24:0;;;;;;;;;26012;;;;;;-1:-1:-1;;;26051:22:0;;;;;-1:-1:-1;;;26088:19:0;;;25830:296;;9088:100;9142:13;9175:5;9168:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9088:100;:::o;10068:194::-;10176:4;10193:39;7375:10;10216:7;10225:6;10193:8;:39::i;:::-;-1:-1:-1;10250:4:0;10068:194;;;;;:::o;24291:323::-;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;;;;;;;;;24437:4:::1;24429;24408:13;9497:12:::0;;;9409:108;24408:13:::1;:17;::::0;24424:1:::1;24408:17;:::i;:::-;24407:26;;;;:::i;:::-;24406:35;;;;:::i;:::-;24394:8;:47;;24372:136;;;::::0;-1:-1:-1;;;24372:136:0;;7075:2:1;24372:136:0::1;::::0;::::1;7057:21:1::0;7114:2;7094:18;;;7087:30;7153:34;7133:18;;;7126:62;-1:-1:-1;;;7204:18:1;;;7197:37;7251:19;;24372:136:0::1;6873:403:1::0;24372:136:0::1;24561:11;::::0;24524:49:::1;::::0;24551:8;;24524:49:::1;::::0;;;::::1;24584:11;:22:::0;24291:323::o;10270:464::-;10410:4;10437:36;10447:6;10455:9;10466:6;10437:9;:36::i;:::-;10484:220;10507:6;7375:10;10555:138;10611:6;10555:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10555:19:0;;;;;;:11;:19;;;;;;;;7375:10;10555:33;;;;;;;;;;:37;:138::i;:::-;10484:8;:220::i;:::-;-1:-1:-1;10722:4:0;10270:464;;;;;:::o;24622:450::-;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;24764:4:::1;24756;24734:13;9497:12:::0;;;9409:108;24734:13:::1;:18;::::0;24750:2:::1;24734:18;:::i;:::-;24733:27;;;;:::i;:::-;24732:36;;;;:::i;:::-;24720:8;:48;;24698:134;;;::::0;-1:-1:-1;;;24698:134:0;;7483:2:1;24698:134:0::1;::::0;::::1;7465:21:1::0;7522:2;7502:18;;;7495:30;7561:34;7541:18;;;7534:62;-1:-1:-1;;;7612:18:1;;;7605:34;7656:19;;24698:134:0::1;7281:400:1::0;24698:134:0::1;24877:15;;24865:8;:27:::0;24843:120:::1;;;::::0;-1:-1:-1;;;24843:120:0;;7888:2:1;24843:120:0::1;::::0;::::1;7870:21:1::0;7927:2;7907:18;;;7900:30;7966:34;7946:18;;;7939:62;-1:-1:-1;;;8017:18:1;;;8010:41;8068:19;;24843:120:0::1;7686:407:1::0;24843:120:0::1;25011:15;::::0;24979:48:::1;::::0;25001:8;;24979:48:::1;::::0;;;::::1;25038:15;:26:::0;24622:450::o;10742:293::-;7375:10;10855:4;10944:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10944:34:0;;;;;;;;;;10855:4;;10872:133;;10922:7;;10944:50;;10983:10;10944:38;:50::i;25442:81::-;25491:24;25497:10;25509:5;25491;:24::i;:::-;25442:81;:::o;22679:786::-;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;23039:13;22999:16;22915:60:::1;22957:18:::0;22915;:60:::1;:::i;:::-;:100;;;;:::i;:::-;:137;;;;:::i;:::-;22894:158;;:1;:158;22872:218;;;::::0;-1:-1:-1;;;22872:218:0;;8453:2:1;22872:218:0::1;::::0;::::1;8435:21:1::0;8492:2;8472:18;;;8465:30;-1:-1:-1;;;8511:18:1;;;8504:40;8561:18;;22872:218:0::1;8251:334:1::0;22872:218:0::1;23101:166;23126:5;23146:18;23179;23212:16;23243:13;23101:10;:166::i;:::-;23283:174;::::0;-1:-1:-1;;;8792:27:1;;8844:2;8835:12;23283:174:0::1;;::::0;;;;;::::1;::::0;;4673:4:1;4661:17;;;4643:36;;4715:17;;;4710:2;4695:18;;4688:45;4769:17;;;4749:18;;;4742:45;4823:17;;4818:2;4803:18;;4796:45;23283:174:0;;;;::::1;::::0;;;;;4630:3:1;23283:174:0;;::::1;22679:786:::0;;;;:::o;9525:143::-;-1:-1:-1;;;;;9642:18:0;9615:7;9642:18;;;:9;:18;;;;;;;9525:143::o;8207:148::-;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;8314:1:::1;8298:6:::0;;8277:40:::1;::::0;-1:-1:-1;;;;;8298:6:0;;::::1;::::0;8277:40:::1;::::0;8314:1;;8277:40:::1;8345:1;8328:19:::0;;-1:-1:-1;;;;;;8328:19:0::1;::::0;;8207:148::o;20424:396::-;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20568:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;20546:142:::1;;;;-1:-1:-1::0;;;20546:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20699:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;20699:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20764:48;;154:41:1;;;20764:48:0::1;::::0;127:18:1;20764:48:0::1;;;;;;;;20424:396:::0;;:::o;23473:810::-;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;23841:14;23800:17;23714:62:::1;23757:19:::0;23714;:62:::1;:::i;:::-;:103;;;;:::i;:::-;:141;;;;:::i;:::-;23693:162;;:1;:162;23671:227;;;::::0;-1:-1:-1;;;23671:227:0;;9471:2:1;23671:227:0::1;::::0;::::1;9453:21:1::0;9510:2;9490:18;;;9483:30;-1:-1:-1;;;9529:18:1;;;9522:45;9584:18;;23671:227:0::1;9269:339:1::0;23671:227:0::1;23909:171;23935:5;23955:19;23989;24023:17;24055:14;23909:11;:171::i;:::-;24096:179;::::0;-1:-1:-1;;;9815:28:1;;9868:2;9859:12;24096:179:0::1;9613:264:1::0;20006:410:0;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20155:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;20133:147:::1;;;;-1:-1:-1::0;;;20133:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20291:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;20291:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20361:47;;154:41:1;;;20361:47:0::1;::::0;127:18:1;20361:47:0::1;14:187:1::0;20828:1823:0;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;21001:15:::1;::::0;-1:-1:-1;;;;;21001:37:0;;::::1;:15;::::0;;::::1;;:37;20997:546;;-1:-1:-1::0;;;;;21081:32:0;::::1;21055:125;;;::::0;-1:-1:-1;;;21055:125:0;;10084:2:1;21055:125:0::1;::::0;::::1;10066:21:1::0;10123:2;10103:18;;;10096:30;10162:33;10142:18;;;10135:61;10213:18;;21055:125:0::1;9882:355:1::0;21055:125:0::1;21243:13;-1:-1:-1::0;;;;;21221:35:0::1;:18;-1:-1:-1::0;;;;;21221:35:0::1;::::0;21195:128:::1;;;::::0;-1:-1:-1;;;21195:128:0;;10084:2:1;21195:128:0::1;::::0;::::1;10066:21:1::0;10123:2;10103:18;;;10096:30;10162:33;10142:18;;;10135:61;10213:18;;21195:128:0::1;9882:355:1::0;21195:128:0::1;21450:15;::::0;21343:137:::1;::::0;-1:-1:-1;;;;;21450:15:0::1;::::0;;::::1;::::0;::::1;::::0;21343:137;::::1;::::0;::::1;::::0;-1:-1:-1;;;10444:30:1;;10499:2;10490:12;;10242:266;21343:137:0::1;;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;21495:15;:36:::0;;-1:-1:-1;;;;;;21495:36:0::1;;-1:-1:-1::0;;;;;21495:36:0;::::1;;;::::0;;20997:546:::1;21557:15;::::0;-1:-1:-1;;;;;21557:37:0;;::::1;:15:::0;::::1;:37;21553:546;;-1:-1:-1::0;;;;;21637:32:0;::::1;21611:125;;;::::0;-1:-1:-1;;;21611:125:0;;10715:2:1;21611:125:0::1;::::0;::::1;10697:21:1::0;10754:2;10734:18;;;10727:30;10793:33;10773:18;;;10766:61;10844:18;;21611:125:0::1;10513:355:1::0;21611:125:0::1;21799:13;-1:-1:-1::0;;;;;21777:35:0::1;:18;-1:-1:-1::0;;;;;21777:35:0::1;::::0;21751:128:::1;;;::::0;-1:-1:-1;;;21751:128:0;;10715:2:1;21751:128:0::1;::::0;::::1;10697:21:1::0;10754:2;10734:18;;;10727:30;10793:33;10773:18;;;10766:61;10844:18;;21751:128:0::1;10513:355:1::0;21751:128:0::1;22006:15;::::0;21899:137:::1;::::0;-1:-1:-1;;;11075:30:1;;-1:-1:-1;;;;;22006:15:0;;::::1;::::0;21899:137;::::1;::::0;11130:2:1;11121:12;21899:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;22051:15;:36:::0;;-1:-1:-1;;;;;;22051:36:0::1;-1:-1:-1::0;;;;;22051:36:0;::::1;;::::0;;21553:546:::1;22113:14;::::0;-1:-1:-1;;;;;22113:35:0;;::::1;:14:::0;::::1;:35;22109:535;;-1:-1:-1::0;;;;;22191:31:0;::::1;22165:123;;;::::0;-1:-1:-1;;;22165:123:0;;11346:2:1;22165:123:0::1;::::0;::::1;11328:21:1::0;11385:2;11365:18;;;11358:30;11424:32;11404:18;;;11397:60;11474:18;;22165:123:0::1;11144:354:1::0;22165:123:0::1;22350:13;-1:-1:-1::0;;;;;22329:34:0::1;:17;-1:-1:-1::0;;;;;22329:34:0::1;::::0;22303:126:::1;;;::::0;-1:-1:-1;;;22303:126:0;;11346:2:1;22303:126:0::1;::::0;::::1;11328:21:1::0;11385:2;11365:18;;;11358:30;11424:32;11404:18;;;11397:60;11474:18;;22303:126:0::1;11144:354:1::0;22303:126:0::1;22554:14;::::0;;22449:134:::1;::::0;-1:-1:-1;;;11705:29:1;;-1:-1:-1;;;;;22554:14:0;;::::1;::::0;22449:134;;::::1;::::0;11750:12:1;22449:134:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;22598:14;:34:::0;;-1:-1:-1;;;;;;22598:34:0::1;-1:-1:-1::0;;;;;22598:34:0;::::1;;::::0;;22109:535:::1;20828:1823:::0;;;:::o;9196:104::-;9252:13;9285:7;9278:14;;;;;:::i;39756:124::-;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;13795:23:::1;39811:15;:27:::0;;;39849:11:::1;:23:::0;39756:124::o;40409:347::-;40505:21;40496:6;:30;40474:118;;;;-1:-1:-1;;;40474:118:0;;11975:2:1;40474:118:0;;;11957:21:1;12014:2;11994:18;;;11987:30;12053:34;12033:18;;;12026:62;-1:-1:-1;;;12104:18:1;;;12097:36;12150:19;;40474:118:0;11773:402:1;40474:118:0;40630:15;;40622:48;;40604:12;;40630:15;;;-1:-1:-1;;;;;40630:15:0;;40659:6;;40604:12;40622:48;40604:12;40622:48;40659:6;40630:15;40622:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40603:67;;;40685:7;40681:68;;;40714:23;;1583:25:1;;;40714:23:0;;1571:2:1;1556:18;40714:23:0;;;;;;;40681:68;40463:293;40409:347;:::o;19037:238::-;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19153:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;19153:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19217:50;;154:41:1;;;19217:50:0::1;::::0;127:18:1;19217:50:0::1;14:187:1::0;11043:393:0;11161:4;11178:228;7375:10;11228:7;11250:145;11307:15;11250:145;;;;;;;;;;;;;;;;;7375:10;11250:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11250:34:0;;;;;;;;;;;;:38;:145::i;9676:200::-;9787:4;9804:42;7375:10;9828:9;9839:6;9804:9;:42::i;25080:354::-;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;25198:23:::1;;25186:8;:35:::0;25164:136:::1;;;::::0;-1:-1:-1;;;25164:136:0;;12592:2:1;25164:136:0::1;::::0;::::1;12574:21:1::0;12631:2;12611:18;;;12604:30;12670:34;12650:18;;;12643:62;-1:-1:-1;;;12721:18:1;;;12714:49;12780:19;;25164:136:0::1;12390:415:1::0;25164:136:0::1;25357:23;::::0;25316:65:::1;::::0;25347:8;;25316:65:::1;::::0;;;::::1;25392:23;:34:::0;25080:354::o;19641:357::-;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19775:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;19753:131:::1;;;;-1:-1:-1::0;;;19753:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19895:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;19895:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19949:41;;154::1;;;19949::0::1;::::0;127:18:1;19949:41:0::1;14:187:1::0;18941:84:0;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;18994:16:::1;:23:::0;;-1:-1:-1;;;;18994:23:0::1;-1:-1:-1::0;;;18994:23:0::1;::::0;;18941:84::o;38925:823::-;39021:7;39007:11;:21;39003:738;;;39192:16;;;39206:1;39192:16;;;;;;;;39168:21;;39192:16;;;;;;;;-1:-1:-1;;39233:15:0;;:22;;;-1:-1:-1;;;39233:22:0;;;;39168:40;;-1:-1:-1;;;;;;39233:15:0;;;;:20;;-1:-1:-1;39233:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39223:4;39228:1;39223:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;39223:32:0;;;-1:-1:-1;;;;;39223:32:0;;;;;39288:4;39270;39275:1;39270:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39270:23:0;;;:7;;;;;;;;;:23;39338:15;;:277;;-1:-1:-1;;;39338:277:0;;:15;;;:66;;39430:11;;39338:277;;:15;;39528:4;;39559:6;;39585:15;;39338:277;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39635:29;39652:11;39635:29;;;;1583:25:1;;1571:2;1556:18;;1437:177;39635:29:0;;;;;;;;39030:646;40463:293;40409:347;:::o;39003:738::-;39697:32;39711:4;39717:11;39697:13;:32::i;8363:281::-;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8466:22:0;::::1;8444:110;;;::::0;-1:-1:-1;;;8444:110:0;;14513:2:1;8444:110:0::1;::::0;::::1;14495:21:1::0;14552:2;14532:18;;;14525:30;14591:34;14571:18;;;14564:62;-1:-1:-1;;;14642:18:1;;;14635:36;14688:19;;8444:110:0::1;14311:402:1::0;8444:110:0::1;8591:6;::::0;;8570:38:::1;::::0;-1:-1:-1;;;;;8570:38:0;;::::1;::::0;8591:6;::::1;::::0;8570:38:::1;::::0;::::1;8619:6;:17:::0;;-1:-1:-1;;;;;;8619:17:0::1;-1:-1:-1::0;;;;;8619:17:0;;;::::1;::::0;;;::::1;::::0;;8363:281::o;39888:134::-;39951:4;8114:6;;-1:-1:-1;;;;;8114:6:0;7375:10;8114:22;8106:67;;;;-1:-1:-1;;;8106:67:0;;;;;;;:::i;:::-;-1:-1:-1;39968:16:0::1;:24:::0;;-1:-1:-1;;;;39968:24:0::1;::::0;;;39888:134;:::o;12909:378::-;-1:-1:-1;;;;;13045:19:0;;13037:68;;;;-1:-1:-1;;;13037:68:0;;14920:2:1;13037:68:0;;;14902:21:1;14959:2;14939:18;;;14932:30;14998:34;14978:18;;;14971:62;-1:-1:-1;;;15049:18:1;;;15042:34;15093:19;;13037:68:0;14718:400:1;13037:68:0;-1:-1:-1;;;;;13124:21:0;;13116:68;;;;-1:-1:-1;;;13116:68:0;;15325:2:1;13116:68:0;;;15307:21:1;15364:2;15344:18;;;15337:30;15403:34;15383:18;;;15376:62;-1:-1:-1;;;15454:18:1;;;15447:32;15496:19;;13116:68:0;15123:398:1;13116:68:0;-1:-1:-1;;;;;13195:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13247:32;;1583:25:1;;;13247:32:0;;1556:18:1;13247:32:0;;;;;;;;12909:378;;;:::o;26147:3534::-;-1:-1:-1;;;;;26279:18:0;;26271:68;;;;-1:-1:-1;;;26271:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26358:16:0;;26350:64;;;;-1:-1:-1;;;26350:64:0;;;;;;;:::i;:::-;26432:6;26442:1;26432:11;26428:93;;26460:28;26476:4;26482:2;26486:1;26460:15;:28::i;26428:93::-;26565:16;;-1:-1:-1;;;26565:16:0;;;;26561:492;;;8025:7;8052:6;-1:-1:-1;;;;;26620:13:0;;;8052:6;;26620:13;;;;:64;;-1:-1:-1;26668:15:0;;-1:-1:-1;;;;;26654:30:0;;;26668:15;;26654:30;;26620:64;:113;;;;;26719:13;-1:-1:-1;;;;;26705:28:0;:2;-1:-1:-1;;;;;26705:28:0;;;26620:113;26598:444;;;26819:9;26798:31;;;;:20;:31;;;;;;26832:12;-1:-1:-1;26768:193:0;;;;-1:-1:-1;;;26768:193:0;;16538:2:1;26768:193:0;;;16520:21:1;16577:2;16557:18;;;16550:30;16616:34;16596:18;;;16589:62;16687:34;16667:18;;;16660:62;-1:-1:-1;;;16738:19:1;;;16731:40;16788:19;;26768:193:0;16336:477:1;26768:193:0;27001:9;26980:31;;;;:20;:31;;;;;27014:12;26980:46;;26598:444;-1:-1:-1;;;;;27086:31:0;;;27065:18;27086:31;;;:25;:31;;;;;;;;;27148:29;;;;;;;;;27209:35;;;:29;:35;;;;;;27086:31;;;;;27148:29;;;;27209:35;27208:36;:87;;;;-1:-1:-1;;;;;;27262:33:0;;;;;;:29;:33;;;;;;;;27261:34;27208:87;27190:1335;;;27330:16;;-1:-1:-1;;;27330:16:0;;;;27322:59;;;;-1:-1:-1;;;27322:59:0;;17020:2:1;27322:59:0;;;17002:21:1;17059:2;17039:18;;;17032:30;17098:32;17078:18;;;17071:60;17148:18;;27322:59:0;16818:354:1;27322:59:0;-1:-1:-1;;;;;27418:31:0;;;;;;:25;:31;;;;;;;;:91;;;;-1:-1:-1;;;;;;27471:38:0;;;;;;:34;:38;;;;;;;;27470:39;27418:91;27396:1118;;;27584:11;;27574:6;:21;;27544:135;;;;-1:-1:-1;;;27544:135:0;;17379:2:1;27544:135:0;;;17361:21:1;17418:2;17398:18;;;17391:30;17457:34;17437:18;;;17430:62;-1:-1:-1;;;17508:18:1;;;17501:38;17556:19;;27544:135:0;17177:404:1;27544:135:0;27754:15;;27737:13;27747:2;27737:9;:13::i;:::-;27728:22;;:6;:22;:::i;:::-;:41;;27698:139;;;;-1:-1:-1;;;27698:139:0;;17918:2:1;27698:139:0;;;17900:21:1;17957:2;17937:18;;;17930:30;17996:26;17976:18;;;17969:54;18040:18;;27698:139:0;17716:348:1;27698:139:0;27396:1118;;;-1:-1:-1;;;;;27881:29:0;;;;;;:25;:29;;;;;;;;:91;;;;-1:-1:-1;;;;;;27932:40:0;;;;;;:34;:40;;;;;;;;27931:41;27881:91;27859:655;;;28047:11;;28037:6;:21;;28007:137;;;;-1:-1:-1;;;28007:137:0;;18271:2:1;28007:137:0;;;18253:21:1;18310:2;18290:18;;;18283:30;18349:34;18329:18;;;18322:62;-1:-1:-1;;;18400:18:1;;;18393:40;18450:19;;28007:137:0;18069:406:1;27859:655:0;-1:-1:-1;;;;;28171:38:0;;;;;;:34;:38;;;;;;;;28166:348;;28286:15;;28269:13;28279:2;28269:9;:13::i;:::-;28260:22;;:6;:22;:::i;:::-;:41;;28230:138;;;;-1:-1:-1;;;28230:138:0;;18682:2:1;28230:138:0;;;18664:21:1;18721:2;18701:18;;;18694:30;18760:25;18740:18;;;18733:53;18803:18;;28230:138:0;18480:347:1;28166:348:0;28395:9;;;;28394:10;:54;;;;-1:-1:-1;;;;;;28408:40:0;;;;;;:34;:40;;;;;;;;28394:54;28390:124;;;28483:15;28469:11;:29;28390:124;28535:51;28548:13;28563:12;28577:4;28583:2;28535:12;:51::i;:::-;28597:12;28640:23;;28612:24;28630:4;28612:9;:24::i;:::-;28694:16;;-1:-1:-1;;28612:51:0;;-1:-1:-1;;;;28694:16:0;;;;:40;;;;;28727:7;28694:40;:67;;;;-1:-1:-1;28752:9:0;;;;28751:10;28694:67;:97;;;;-1:-1:-1;28778:9:0;;-1:-1:-1;;;28778:9:0;;;;:13;;28694:97;:143;;;;-1:-1:-1;;;;;;28808:29:0;;;;;;:25;:29;;;;;;;;28694:143;:185;;;;-1:-1:-1;;;;;;28855:24:0;;;;;;:18;:24;;;;;;;;28854:25;28694:185;:225;;;;-1:-1:-1;;;;;;28897:22:0;;;;;;:18;:22;;;;;;;;28896:23;28694:225;28676:362;;;28946:9;:16;;-1:-1:-1;;28946:16:0;28958:4;28946:16;;;28977:17;:15;:17::i;:::-;29009:9;:17;;-1:-1:-1;;29009:17:0;;;28676:362;29066:9;;29050:12;;29066:9;;29065:10;:30;;;;-1:-1:-1;29079:16:0;;-1:-1:-1;;;29079:16:0;;;;29065:30;-1:-1:-1;;;;;29112:24:0;;;;;;:18;:24;;;;;;29050:45;;-1:-1:-1;29112:24:0;;;:50;;-1:-1:-1;;;;;;29140:22:0;;;;;;:18;:22;;;;;;;;29112:50;29108:98;;;-1:-1:-1;29189:5:0;29108:98;29220:7;:24;;;;-1:-1:-1;29231:9:0;;-1:-1:-1;;;29231:9:0;;;;:13;;29220:24;29216:414;;;29285:9;;29261:11;;29298:3;;29276:18;;-1:-1:-1;;;29285:9:0;;;;29276:6;:18;:::i;:::-;29275:26;;;;:::i;:::-;29347:8;;29261:40;;-1:-1:-1;29316:18:0;;29359:3;;29338:17;;29347:8;;;;;29338:6;:17;:::i;:::-;29337:25;;;;:::i;:::-;29316:46;-1:-1:-1;29386:12:0;29395:3;29386:6;:12;:::i;:::-;29377:21;;29413:41;29429:4;29443;29450:3;29413:15;:41::i;:::-;29475:14;;29471:148;;29510:38;29530:4;29537:10;29510:11;:38::i;:::-;29582:8;;29572:31;;;29582:8;;;;;;19135:36:1;;19202:2;19187:18;;19180:34;;;29572:31:0;;19108:18:1;29572:31:0;;;;;;;29471:148;29246:384;;29216:414;29640:33;29656:4;29662:2;29666:6;29640:15;:33::i;:::-;26260:3421;;;;26147:3534;;;:::o;2778:226::-;2898:7;2934:12;2926:6;;;;2918:29;;;;-1:-1:-1;;;2918:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2958:9:0;2970:5;2974:1;2970;:5;:::i;:::-;2958:17;2778:226;-1:-1:-1;;;;;2778:226:0:o;2445:181::-;2503:7;;2535:5;2539:1;2535;:5;:::i;:::-;2523:17;;2564:1;2559;:6;;2551:46;;;;-1:-1:-1;;;2551:46:0;;19427:2:1;2551:46:0;;;19409:21:1;19466:2;19446:18;;;19439:30;19505:29;19485:18;;;19478:57;19552:18;;2551:46:0;19225:351:1;2551:46:0;2617:1;2445:181;-1:-1:-1;;;2445:181:0:o;12450:451::-;-1:-1:-1;;;;;12534:21:0;;12526:67;;;;-1:-1:-1;;;12526:67:0;;19783:2:1;12526:67:0;;;19765:21:1;19822:2;19802:18;;;19795:30;19861:34;19841:18;;;19834:62;-1:-1:-1;;;19912:18:1;;;19905:31;19953:19;;12526:67:0;19581:397:1;12526:67:0;12685:105;12722:6;12685:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12685:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;12664:18:0;;;;;;:9;:18;;;;;:126;12816:12;;:24;;12833:6;12816:16;:24::i;:::-;12801:12;:39;12856:37;;1583:25:1;;;12882:1:0;;-1:-1:-1;;;;;12856:37:0;;;;;1571:2:1;1556:18;12856:37:0;;;;;;;12450:451;;:::o;33188:1460::-;33400:21;;;;:43;;;;:21;;:43;33396:316;;33465:178;;-1:-1:-1;;;20185:32:1;;20242:2;20233:12;33465:178:0;;;;;;;;33536:21;;;;33614:14;;33465:178;;33536:21;;;;;33465:178;;;;-1:-1:-1;;;;;;;;;;;33465:178:0;;;33614:14;;;33465:178;:::i;:::-;;;;;;;;33658:21;;;:42;;-1:-1:-1;;33658:42:0;;;;;;;33396:316;33726:21;;;;:43;;;;:21;;;;;:43;33722:316;;33791:178;;-1:-1:-1;;;20672:32:1;;20729:2;20720:12;33791:178:0;;;;;;;;33862:21;;;;33940:14;;33791:178;;33862:21;;;;;;;;33791:178;;;;-1:-1:-1;;;;;;;;;;;33791:178:0;;;33940:14;;;33791:178;:::i;:::-;;;;;;;;33984:21;;;:42;;-1:-1:-1;;33984:42:0;;;;;;;;;33722:316;34052:19;;;;:39;;;;-1:-1:-1;;;34052:19:0;;;;:39;34048:302;;34113:172;;-1:-1:-1;;;20945:30:1;;21000:2;20991:12;34113:172:0;;;;;;;;34182:19;;;;34256:14;;34113:172;;34182:19;-1:-1:-1;;;34182:19:0;;;;;;34113:172;;;;-1:-1:-1;;;;;;;;;;;34113:172:0;;;34256:14;;;34113:172;:::i;:::-;;;;;;;;34300:19;;;:38;;-1:-1:-1;;34300:38:0;-1:-1:-1;;;34300:38:0;;;;;;;34048:302;34364:16;;;;:33;;;;-1:-1:-1;;;34364:16:0;;;;:33;34360:281;;34419:163;;-1:-1:-1;;;21216:27:1;;21268:2;21259:12;34419:163:0;;;;;;;;34485:16;;;;34553:14;;34419:163;;34485:16;-1:-1:-1;;;34485:16:0;;;;;;34419:163;;;;-1:-1:-1;;;;;;;;;;;34419:163:0;;;34553:14;;;34419:163;:::i;:::-;;;;;;;;34597:16;;;:32;;-1:-1:-1;;34597:32:0;-1:-1:-1;;;34597:32:0;;;;;;;34360:281;33188:1460;;;;;:::o;31687:1493::-;31904:22;;;;:45;;;;:22;;;;;:45;31900:323;;31971:181;;-1:-1:-1;;;21484:33:1;;21542:2;21533:12;31971:181:0;;;;;;;;32043:22;;;;32123:14;;31971:181;;32043:22;;;;;;;;31971:181;;;;-1:-1:-1;;;;;;;;;;;31971:181:0;;;32123:14;;;31971:181;:::i;:::-;;;;;;;;32167:22;;;:44;;-1:-1:-1;;32167:44:0;;;;;;;;;31900:323;32237:22;;;;:45;;;;:22;;;;;:45;32233:323;;32304:181;;-1:-1:-1;;;21758:33:1;;21816:2;21807:12;32304:181:0;;;;;;;;32376:22;;;;32456:14;;32304:181;;32376:22;;;;;;;;32304:181;;;;-1:-1:-1;;;;;;;;;;;32304:181:0;;;32456:14;;;32304:181;:::i;:::-;;;;;;;;32500:22;;;:44;;-1:-1:-1;;32500:44:0;;;;;;;;;32233:323;32570:20;;;;:41;;;;-1:-1:-1;;;32570:20:0;;;;:41;32566:309;;32633:175;;-1:-1:-1;;;22032:31:1;;22088:2;22079:12;32633:175:0;;;;;;;;32703:20;;;;32779:14;;32633:175;;32703:20;-1:-1:-1;;;32703:20:0;;;;;;32633:175;;;;-1:-1:-1;;;;;;;;;;;32633:175:0;;;32779:14;;;32633:175;:::i;:::-;;;;;;;;32823:20;;;:40;;-1:-1:-1;;32823:40:0;-1:-1:-1;;;32823:40:0;;;;;;;32566:309;32889:17;;;;:35;;;;-1:-1:-1;;;32889:17:0;;;;:35;32885:288;;32946:166;;-1:-1:-1;;;22304:28:1;;22357:2;22348:12;32946:166:0;;;;;;;;33013:17;;;;33083:14;;32946:166;;33013:17;-1:-1:-1;;;33013:17:0;;;;;;32946:166;;;;-1:-1:-1;;;;;;;;;;;32946:166:0;;;33083:14;;;32946:166;:::i;:::-;;;;;;;;33127:17;;;:34;;;;;-1:-1:-1;;;33127:34:0;-1:-1:-1;;33127:34:0;;;;;;31687:1493;;;;;:::o;37869:445::-;37991:23;;37963:24;37981:4;37963:9;:24::i;:::-;:51;;37941:151;;;;-1:-1:-1;;;37941:151:0;;22573:2:1;37941:151:0;;;22555:21:1;22612:2;22592:18;;;22585:30;22651:34;22631:18;;;22624:62;-1:-1:-1;;;22702:18:1;;;22695:48;22760:19;;37941:151:0;22371:414:1;37941:151:0;38107:30;38124:4;38130:6;38107:16;:30::i;:::-;38103:204;;;38158:9;;-1:-1:-1;;;38158:9:0;;;;:13;38154:142;;38192:9;:16;;-1:-1:-1;;38192:16:0;38204:4;38192:16;;;38227:17;:15;:17::i;:::-;38263:9;:17;;-1:-1:-1;;38263:17:0;;;37869:445;;:::o;11444:616::-;-1:-1:-1;;;;;11584:20:0;;11576:70;;;;-1:-1:-1;;;11576:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11665:23:0;;11657:71;;;;-1:-1:-1;;;11657:71:0;;;;;;;:::i;:::-;11827:108;11863:6;11827:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11827:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;11807:17:0;;;;;;;:9;:17;;;;;;:128;;;;11969:20;;;;;;;:32;;11994:6;11969:24;:32::i;:::-;-1:-1:-1;;;;;11946:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12017:35;;;;;;;;;;12045:6;1583:25:1;;1571:2;1556:18;;1437:177;29902:1330:0;30051:13;:17;;-1:-1:-1;;30133:12:0;;;30156:236;;;;30205:24;;30189:13;:40;;30205:24;;;;;;;;-1:-1:-1;;30244:40:0;;;;;;;30260:24;;;;;;30244:40;;;;;-1:-1:-1;;30350:30:0;-1:-1:-1;;;30313:22:0;;;;30299:36;;-1:-1:-1;;30350:30:0;;-1:-1:-1;;;30361:19:0;;;;;;;30350:30;;;;;;;30156:236;30408:13;30404:260;;;30454:23;;30438:13;:39;;30454:23;;;;-1:-1:-1;;30492:39:0;;;;;;;30454:23;30508;;;;;;30492:39;;;;;;;;-1:-1:-1;;30596:29:0;-1:-1:-1;;;30560:21:0;;;;30546:35;;;;-1:-1:-1;;30596:29:0;;-1:-1:-1;;;30607:18:0;;;;30596:29;;;;;;;;30640:12;30649:2;30640:8;:12::i;:::-;30681;30680:13;:31;;;;;30698:13;30697:14;30680:31;30676:255;;;30744:24;;30728:13;:40;;30744:24;;;;;;;;-1:-1:-1;;30783:40:0;;;;;;;30799:24;;;;;;30783:40;;;;;-1:-1:-1;;30889:30:0;-1:-1:-1;;;30852:22:0;;;;30838:36;;-1:-1:-1;;30889:30:0;;-1:-1:-1;;;30900:19:0;;;;;;;30889:30;;;;;;;30676:255;30941:39;30956:13;30971:4;30977:2;30941:14;:39::i;:::-;31049:8;;;;;;;;;31035:11;;;;;;31003:29;;31049:8;31019:13;;;;;31003;:29;:::i;:::-;:43;;;;:::i;:::-;:54;;;;:::i;:::-;30991:9;:66;;;;;;-1:-1:-1;;;30991:66:0;;;-1:-1:-1;;30991:66:0;;;;;;;;31073:151;;;31099:13;;;;;;;;;;23029:36:1;;30991:66:0;31127:13;;;;23096:2:1;23081:18;;23074:45;31155:11:0;;;;;23135:18:1;;;23128:45;31181:8:0;;;;;23204:2:1;23189:18;;23182:45;31204:9:0;;;;;23258:3:1;23243:19;;23236:46;31073:151:0;;;;;;;23016:3:1;31073:151:0;;;29902:1330;;;;:::o;36355:1506::-;36401:23;36427:24;36445:4;36427:9;:24::i;:::-;36544:23;;36401:50;;-1:-1:-1;36490:21:0;;36544:27;;36570:1;36544:27;:::i;:::-;36526:15;:45;36522:123;;;36606:23;;:27;;36632:1;36606:27;:::i;:::-;36588:45;;36522:123;36753:9;;36655:12;;;;36778:1;;36753:9;-1:-1:-1;;;36753:9:0;;;;;36705:31;;36723:13;36705:15;:31;:::i;:::-;36704:58;;;;:::i;:::-;:75;;;;:::i;:::-;36678:101;-1:-1:-1;36790:20:0;36813:35;36678:101;36813:15;:35;:::i;:::-;36790:58;;36861:31;36879:12;36861:17;:31::i;:::-;36905:27;36935:41;36959:17;36935:21;:41;:::i;:::-;37044:8;;36905:71;;-1:-1:-1;36987:19:0;;37044:8;;;;;;;37023:17;;37039:1;;37023:13;:17;:::i;:::-;37022:30;;;;:::i;:::-;37009:9;;:44;;;-1:-1:-1;;;37009:9:0;;;;:44;:::i;:::-;37116:13;;36987:66;;;;;-1:-1:-1;37064:26:0;;37173:1;;36987:66;;37094:35;;37116:13;37094:19;:35;:::i;:::-;37093:64;;;;:::i;:::-;:81;;;;:::i;:::-;37237:13;;37064:110;;-1:-1:-1;37185:26:0;;37267:11;;37215:35;;37237:13;;;;;37215:19;:35;:::i;:::-;37214:64;;;;:::i;:::-;37185:93;-1:-1:-1;37289:24:0;37352:39;37185:93;37352:18;:39;:::i;:::-;37316:76;;:19;:76;:::i;:::-;37427:14;;37419:57;;37289:103;;-1:-1:-1;;;;;;37427:14:0;;37289:103;;37419:57;;;;37289:103;37427:14;37419:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37509:15:0;;37501:87;;37405:71;;-1:-1:-1;;;;;;37509:15:0;;37552:21;;37501:87;;;;37552:21;37509:15;37501:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37487:101:0;;-1:-1:-1;;37605:19:0;;37601:253;;37641:50;37655:15;37672:18;37641:13;:50::i;:::-;37711:131;;;23821:25:1;;;23877:2;23862:18;;23855:34;;;23905:18;;;23898:34;;;37711:131:0;;23809:2:1;23794:18;37711:131:0;;;;;;;37601:253;36390:1471;;;;;;;;;;36355:1506::o;2634:136::-;2692:7;2719:43;2723:1;2726;2719:43;;;;;;;;;;;;;;;;;:3;:43::i;34656:1691::-;34822:10;34758:4;34803:30;;;:18;:30;;;;;;34758:4;;34803:30;;34798:1542;;34854:9;;-1:-1:-1;;;34854:9:0;;;;:13;34850:309;;34912:9;;34888:11;;34925:3;;34903:18;;-1:-1:-1;;;34912:9:0;;;;34903:6;:18;:::i;:::-;34902:26;;;;:::i;:::-;34978:8;;34888:40;;-1:-1:-1;34947:18:0;;34990:3;;34969:17;;34978:8;;;;;34969:6;:17;:::i;:::-;34968:25;;;;:::i;:::-;34947:46;-1:-1:-1;35021:12:0;35030:3;35021:6;:12;:::i;:::-;35012:21;-1:-1:-1;35056:14:0;;35052:92;;35095:29;35101:10;35113;35095:5;:29::i;:::-;34869:290;;34850:309;35177:9;;-1:-1:-1;;;35177:9:0;;;;:13;35173:414;;35211:23;35237:24;35255:4;35237:9;:24::i;:::-;35363:9;;35211:50;;-1:-1:-1;35280:23:0;;35396:1;;35363:9;-1:-1:-1;;;35363:9:0;;;;;35307:31;;35325:13;35211:50;35307:31;:::i;:::-;35306:66;;;;:::i;:::-;:91;;;;:::i;:::-;35280:117;-1:-1:-1;35416:20:0;35439:35;35280:117;35439:15;:35;:::i;:::-;35416:58;-1:-1:-1;35497:16:0;;35493:79;;35548:4;35538:14;;35493:79;35192:395;;;35173:414;35608:7;-1:-1:-1;35601:14:0;;34798:1542;-1:-1:-1;;;;;35652:24:0;;35671:4;35652:24;35648:223;;35697:22;35703:7;35712:6;35697:5;:22::i;:::-;-1:-1:-1;35748:5:0;35648:223;;;-1:-1:-1;35800:11:0;:20;;;35850:5;35648:223;35889:9;;-1:-1:-1;;;35889:9:0;;;;:13;35885:415;;35923:23;35949:24;35967:4;35949:9;:24::i;:::-;36075:9;;35923:50;;-1:-1:-1;35992:23:0;;36108:1;;36075:9;-1:-1:-1;;;36075:9:0;;;;;36019:31;;36037:13;35923:50;36019:31;:::i;:::-;36018:66;;;;:::i;:::-;:91;;;;:::i;:::-;35992:117;-1:-1:-1;36128:20:0;36151:35;35992:117;36151:15;:35;:::i;:::-;36128:58;-1:-1:-1;36209:16:0;;36205:80;;36260:5;36250:15;;35904:396;;;36321:7;-1:-1:-1;36314:14:0;;29689:205;-1:-1:-1;;;;;29756:15:0;;;;;;:11;:15;;;;;;:20;:130;;-1:-1:-1;;;;;29871:15:0;;;;;;:11;:15;;;;;;29756:130;;;29792:22;29810:2;29792:9;:22::i;:::-;:27;:63;;-1:-1:-1;;;;;29840:15:0;;;;;;:11;:15;;;;;;29792:63;;;29822:15;29792:63;-1:-1:-1;;;;;29738:15:0;;;;;;;:11;:15;;;;;:148;29689:205::o;31240:439::-;-1:-1:-1;;;;;31381:16:0;;;;;;:54;;-1:-1:-1;;;;;;31414:21:0;;31428:6;31414:21;;31381:54;:96;;;;-1:-1:-1;;;;;;31453:24:0;;;;;;:18;:24;;;;;;;;31452:25;31381:96;:136;;;;-1:-1:-1;;;;;;31495:22:0;;;;;;:18;:22;;;;;;;;31494:23;31381:136;31363:309;;;31549:13;31548:14;:28;;;;-1:-1:-1;31567:9:0;;;;31566:10;31548:28;31544:117;;;31634:11;;-1:-1:-1;;;;;31614:17:0;;;;;;:11;:17;;;;;;:31;;31634:11;31614:31;:::i;:::-;31597:14;:48;31240:439;;;:::o;38322:500::-;38413:16;;;38427:1;38413:16;;;;;;;;38389:21;;38413:16;;;;;;;;;;-1:-1:-1;38413:16:0;38389:40;;38458:4;38440;38445:1;38440:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38440:23:0;;;:7;;;;;;;;;;:23;;;;38484:15;;:22;;;-1:-1:-1;;;38484:22:0;;;;:15;;;;;:20;;:22;;;;;38440:7;;38484:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38474:4;38479:1;38474:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38474:32:0;;;:7;;;;;;;;;:32;38549:15;;38517:62;;38534:4;;38549:15;38567:11;38517:8;:62::i;:::-;38590:15;;:224;;-1:-1:-1;;;38590:224:0;;-1:-1:-1;;;;;38590:15:0;;;;:66;;:224;;38671:11;;38590:15;;38741:4;;38768;;38788:15;;38590:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38378:444;38322:500;:::o;40030:371::-;40144:15;;40112:62;;40129:4;;-1:-1:-1;;;;;40144:15:0;40162:11;40112:8;:62::i;:::-;40185:15;;40337;;40185:208;;-1:-1:-1;;;40185:208:0;;40257:4;40185:208;;;24871:34:1;24921:18;;;24914:34;;;-1:-1:-1;24964:18:1;;;24957:34;;;25007:18;;;25000:34;-1:-1:-1;;;;;40185:15:0;40337;;;;;25050:19:1;;;25043:44;40367:15:0;25103:19:1;;;25096:35;40185:15:0;;;:31;;40224:9;;24805:19:1;;40185:208:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1619:180::-;1678:6;1731:2;1719:9;1710:7;1706:23;1702:32;1699:52;;;1747:1;1744;1737:12;1699:52;-1:-1:-1;1770:23:1;;1619:180;-1:-1:-1;1619:180:1:o;1804:456::-;1881:6;1889;1897;1950:2;1938:9;1929:7;1925:23;1921:32;1918:52;;;1966:1;1963;1956:12;1918:52;2005:9;1992:23;2024:31;2049:5;2024:31;:::i;:::-;2074:5;-1:-1:-1;2131:2:1;2116:18;;2103:32;2144:33;2103:32;2144:33;:::i;:::-;1804:456;;2196:7;;-1:-1:-1;;;2250:2:1;2235:18;;;;2222:32;;1804:456::o;2662:156::-;2728:20;;2788:4;2777:16;;2767:27;;2757:55;;2808:1;2805;2798:12;2757:55;2662:156;;;:::o;2823:393::-;2901:6;2909;2917;2925;2978:3;2966:9;2957:7;2953:23;2949:33;2946:53;;;2995:1;2992;2985:12;2946:53;3018:27;3035:9;3018:27;:::i;:::-;3008:37;;3064:36;3096:2;3085:9;3081:18;3064:36;:::i;:::-;3054:46;;3119:36;3151:2;3140:9;3136:18;3119:36;:::i;:::-;3109:46;;3174:36;3206:2;3195:9;3191:18;3174:36;:::i;:::-;3164:46;;2823:393;;;;;;;:::o;3221:247::-;3280:6;3333:2;3321:9;3312:7;3308:23;3304:32;3301:52;;;3349:1;3346;3339:12;3301:52;3388:9;3375:23;3407:31;3432:5;3407:31;:::i;3473:416::-;3538:6;3546;3599:2;3587:9;3578:7;3574:23;3570:32;3567:52;;;3615:1;3612;3605:12;3567:52;3654:9;3641:23;3673:31;3698:5;3673:31;:::i;:::-;3723:5;-1:-1:-1;3780:2:1;3765:18;;3752:32;3822:15;;3815:23;3803:36;;3793:64;;3853:1;3850;3843:12;3793:64;3876:7;3866:17;;;3473:416;;;;;:::o;3894:529::-;3971:6;3979;3987;4040:2;4028:9;4019:7;4015:23;4011:32;4008:52;;;4056:1;4053;4046:12;4008:52;4095:9;4082:23;4114:31;4139:5;4114:31;:::i;:::-;4164:5;-1:-1:-1;4221:2:1;4206:18;;4193:32;4234:33;4193:32;4234:33;:::i;:::-;4286:7;-1:-1:-1;4345:2:1;4330:18;;4317:32;4358:33;4317:32;4358:33;:::i;:::-;4410:7;4400:17;;;3894:529;;;;;:::o;4852:315::-;4920:6;4928;4981:2;4969:9;4960:7;4956:23;4952:32;4949:52;;;4997:1;4994;4987:12;4949:52;5033:9;5020:23;5010:33;;5093:2;5082:9;5078:18;5065:32;5106:31;5131:5;5106:31;:::i;5172:388::-;5240:6;5248;5301:2;5289:9;5280:7;5276:23;5272:32;5269:52;;;5317:1;5314;5307:12;5269:52;5356:9;5343:23;5375:31;5400:5;5375:31;:::i;:::-;5425:5;-1:-1:-1;5482:2:1;5467:18;;5454:32;5495:33;5454:32;5495:33;:::i;5565:380::-;5644:1;5640:12;;;;5687;;;5708:61;;5762:4;5754:6;5750:17;5740:27;;5708:61;5815:2;5807:6;5804:14;5784:18;5781:38;5778:161;;5861:10;5856:3;5852:20;5849:1;5842:31;5896:4;5893:1;5886:15;5924:4;5921:1;5914:15;5778:161;;5565:380;;;:::o;5950:356::-;6152:2;6134:21;;;6171:18;;;6164:30;6230:34;6225:2;6210:18;;6203:62;6297:2;6282:18;;5950:356::o;6311:127::-;6372:10;6367:3;6363:20;6360:1;6353:31;6403:4;6400:1;6393:15;6427:4;6424:1;6417:15;6443:168;6516:9;;;6547;;6564:15;;;6558:22;;6544:37;6534:71;;6585:18;;:::i;6616:127::-;6677:10;6672:3;6668:20;6665:1;6658:31;6708:4;6705:1;6698:15;6732:4;6729:1;6722:15;6748:120;6788:1;6814;6804:35;;6819:18;;:::i;:::-;-1:-1:-1;6853:9:1;;6748:120::o;8098:148::-;8186:4;8165:12;;;8179;;;8161:31;;8204:13;;8201:39;;;8220:18;;:::i;8858:406::-;9060:2;9042:21;;;9099:2;9079:18;;;9072:30;9138:34;9133:2;9118:18;;9111:62;-1:-1:-1;;;9204:2:1;9189:18;;9182:40;9254:3;9239:19;;8858:406::o;12942:251::-;13012:6;13065:2;13053:9;13044:7;13040:23;13036:32;13033:52;;;13081:1;13078;13071:12;13033:52;13113:9;13107:16;13132:31;13157:5;13132:31;:::i;13198:127::-;13259:10;13254:3;13250:20;13247:1;13240:31;13290:4;13287:1;13280:15;13314:4;13311:1;13304:15;13330:461;13383:3;13421:5;13415:12;13448:6;13443:3;13436:19;13474:4;13503:2;13498:3;13494:12;13487:19;;13540:2;13533:5;13529:14;13561:1;13571:195;13585:6;13582:1;13579:13;13571:195;;;13650:13;;-1:-1:-1;;;;;13646:39:1;13634:52;;13706:12;;;;13741:15;;;;13682:1;13600:9;13571:195;;;-1:-1:-1;13782:3:1;;13330:461;-1:-1:-1;;;;;13330:461:1:o;13796:510::-;14067:6;14056:9;14049:25;14110:3;14105:2;14094:9;14090:18;14083:31;14030:4;14131:57;14183:3;14172:9;14168:19;14160:6;14131:57;:::i;:::-;-1:-1:-1;;;;;14224:32:1;;;;14219:2;14204:18;;14197:60;-1:-1:-1;14288:2:1;14273:18;14266:34;14123:65;13796:510;-1:-1:-1;;13796:510:1:o;15526:401::-;15728:2;15710:21;;;15767:2;15747:18;;;15740:30;15806:34;15801:2;15786:18;;15779:62;-1:-1:-1;;;15872:2:1;15857:18;;15850:35;15917:3;15902:19;;15526:401::o;15932:399::-;16134:2;16116:21;;;16173:2;16153:18;;;16146:30;16212:34;16207:2;16192:18;;16185:62;-1:-1:-1;;;16278:2:1;16263:18;;16256:33;16321:3;16306:19;;15932:399::o;17586:125::-;17651:9;;;17672:10;;;17669:36;;;17685:18;;:::i;18832:128::-;18899:9;;;18920:11;;;18917:37;;;18934:18;;:::i;20256:209::-;-1:-1:-1;;20420:38:1;;;;20402:57;;20390:2;20375:18;;20256:209::o;23293:165::-;23331:1;23365:4;23362:1;23358:12;23389:3;23379:37;;23396:18;;:::i;:::-;23448:3;23441:4;23438:1;23434:12;23430:22;23425:27;;;23293:165;;;;:::o;23463:151::-;23553:4;23546:12;;;23532;;;23528:31;;23571:14;;23568:40;;;23588:18;;:::i;23943:582::-;24242:6;24231:9;24224:25;24285:6;24280:2;24269:9;24265:18;24258:34;24328:3;24323:2;24312:9;24308:18;24301:31;24205:4;24349:57;24401:3;24390:9;24386:19;24378:6;24349:57;:::i;:::-;-1:-1:-1;;;;;24442:32:1;;;;24437:2;24422:18;;24415:60;-1:-1:-1;24506:3:1;24491:19;24484:35;24341:65;23943:582;-1:-1:-1;;;23943:582:1:o;25142:306::-;25230:6;25238;25246;25299:2;25287:9;25278:7;25274:23;25270:32;25267:52;;;25315:1;25312;25305:12;25267:52;25344:9;25338:16;25328:26;;25394:2;25383:9;25379:18;25373:25;25363:35;;25438:2;25427:9;25423:18;25417:25;25407:35;;25142:306;;;;;:::o
Swarm Source
ipfs://cc9489797241744f06ce52bb70e1e3b174ed221bf85be69daa31b7af30a5fd07
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.