ERC-20
MEME
Overview
Max Total Supply
47,000,000,000 USA
Holders
225 (0.00%)
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xbF5Baf6F...cC0bde51f The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
USA
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-05-22 */ // SPDX-License-Identifier: MIT // Telegram: https://t.me/takeamericabackUSA // Twitter: https://x.com/tab_usa_47 // Website: https://Takeamericabacktoken.com // pragma solidity 0.8.20; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { 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); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } 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"); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _createInitialSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, 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); } } 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(bool confirmRenounce) external virtual onlyOwner { require(confirmRenounce, "Please confirm renounce!"); 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; } } interface ILpPair { function sync() external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); } interface IDexFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract USA is ERC20, Ownable { uint256 public maxBuyAmount; uint256 public maxSellAmount; uint256 public maxWallet; IDexRouter public dexRouter; address public lpPair; bool private swapping; uint256 public swapTokensAtAmount; address public operationsAddress; address public treasuryAddress; uint256 public tradingActiveBlock = 0; // 0 means trading is not active uint256 public blockForPenaltyEnd; mapping(address => bool) public boughtEarly; address[] public earlyBuyers; uint256 public botsCaught; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyOperationsFee; uint256 public buyLiquidityFee; uint256 public buyTreasuryFee; uint256 private originalSellOperationsFee; uint256 private originalSellLiquidityFee; uint256 private originalSellTreasuryFee; uint256 public sellTotalFees; uint256 public sellOperationsFee; uint256 public sellLiquidityFee; uint256 public sellTreasuryFee; uint256 public tokensForOperations; uint256 public tokensForLiquidity; uint256 public tokensForTreasury; bool public sellingEnabled = true; bool public highTaxModeEnabled = true; bool public markBotsEnabled = true; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event EnabledTrading(); event ExcludeFromFees(address indexed account, bool isExcluded); event UpdatedMaxBuyAmount(uint256 newAmount); event UpdatedMaxSellAmount(uint256 newAmount); event UpdatedMaxWalletAmount(uint256 newAmount); event UpdatedOperationsAddress(address indexed newWallet); event UpdatedTreasuryAddress(address indexed newWallet); event MaxTransactionExclusion(address _address, bool excluded); event OwnerForcedSwapBack(uint256 timestamp); event CaughtEarlyBuyer(address sniper); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event TransferForeignToken(address token, uint256 amount); event UpdatedPrivateMaxSell(uint256 amount); event EnabledSelling(); event DisabledHighTaxModeForever(); constructor() payable ERC20("Take America Back", "USA") { address newOwner = msg.sender; address _dexRouter; if (block.chainid == 1) { _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2 } else if (block.chainid == 5) { _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: GOERLI } else { revert("Chain not configured"); } // initialize router dexRouter = IDexRouter(_dexRouter); // create pair lpPair = IDexFactory(dexRouter.factory()).createPair( address(this), dexRouter.WETH() ); _excludeFromMaxTransaction(address(lpPair), true); _setAutomatedMarketMakerPair(address(lpPair), true); uint256 totalSupply = 47000 * 1e6 * 1e18; // 47 Bill maxBuyAmount = (totalSupply * 2) / 100; // 2% maxSellAmount = (totalSupply * 1) / 100; // 1% maxWallet = (totalSupply * 2) / 100; // 2% swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 % buyOperationsFee = 0; buyLiquidityFee = 0; buyTreasuryFee = 2; // Trump donation buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee; originalSellOperationsFee = 0; originalSellLiquidityFee = 0; originalSellTreasuryFee = 2; // Trump donation sellOperationsFee = 0; sellLiquidityFee = 0; sellTreasuryFee = 2; // Trump donation sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee; operationsAddress = address(msg.sender); treasuryAddress = address(0x9Bb055c739b5E7d35762B56B1C87976E965C0995); // Trump donation (auto-disperse) _excludeFromMaxTransaction(newOwner, true); _excludeFromMaxTransaction(address(this), true); _excludeFromMaxTransaction(address(0xdead), true); _excludeFromMaxTransaction(address(operationsAddress), true); _excludeFromMaxTransaction(address(treasuryAddress), true); _excludeFromMaxTransaction(address(dexRouter), true); _excludeFromMaxTransaction( address(0xe3bA38B58176C15F77f28AFcC0397d7e71d1a9a1), true ); // Deployer _excludeFromMaxTransaction( address(0x30DF14547A058c93e97D18C81886C3D29007b789), true ); // Marketing excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(operationsAddress), true); excludeFromFees(address(treasuryAddress), true); excludeFromFees(address(dexRouter), true); excludeFromFees( address(0xe3bA38B58176C15F77f28AFcC0397d7e71d1a9a1), true ); // Deployer excludeFromFees( address(0x30DF14547A058c93e97D18C81886C3D29007b789), true ); // Marketing _createInitialSupply(address(this), (totalSupply * 80) / 100); // Tokens for liquidity _createInitialSupply( address(0xCE65F8F94bC51E3ad8677DDe41eb60BdCCEA2CaF), (totalSupply * 6) / 100 ); // Marketing _createInitialSupply( address(0x42c254cd1f4F7Edcf9ec6333A614963Fc65C549D), (totalSupply * 2) / 100 ); // CEX/MM _createInitialSupply( address(0x8723276b67B6bad55Ac085B33C6EddB5d84Db59E), (totalSupply * 2) / 100 ); // CEX/MM _createInitialSupply( address(0x94845333028B1204Fbe14E1278Fd4Adde46B22ce), (totalSupply * 10) / 100 ); // Trump Wallet transferOwnership(newOwner); } receive() external payable {} function enableTrading(uint256 blocksForPenalty) external onlyOwner { require(!tradingActive, "Cannot reenable trading"); require( blocksForPenalty <= 10, "Cannot make penalty blocks more than 10" ); tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty; emit EnabledTrading(); } function getEarlyBuyers() external view returns (address[] memory) { return earlyBuyers; } function markBoughtEarly(address wallet) external onlyOwner { require( markBotsEnabled, "Mark bot functionality has been disabled forever!" ); require(!boughtEarly[wallet], "Wallet is already flagged."); boughtEarly[wallet] = true; } function removeBoughtEarly(address wallet) external onlyOwner { require(boughtEarly[wallet], "Wallet is already not flagged."); boughtEarly[wallet] = false; } function emergencyUpdateRouter(address router) external onlyOwner { require(!tradingActive, "Cannot update after trading is functional"); dexRouter = IDexRouter(router); } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner { transferDelayEnabled = false; } function updateMaxBuyAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set max buy amount lower than 0.5%" ); require( newNum <= ((totalSupply() * 2) / 100) / 1e18, "Cannot set buy sell amount higher than 2%" ); maxBuyAmount = newNum * (10**18); emit UpdatedMaxBuyAmount(maxBuyAmount); } function updateMaxSellAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set max sell amount lower than 0.5%" ); require( newNum <= ((totalSupply() * 2) / 100) / 1e18, "Cannot set max sell amount higher than 2%" ); maxSellAmount = newNum * (10**18); emit UpdatedMaxSellAmount(maxSellAmount); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set max wallet amount lower than 0.5%" ); require( newNum <= ((totalSupply() * 5) / 100) / 1e18, "Cannot set max wallet amount higher than 5%" ); maxWallet = newNum * (10**18); emit UpdatedMaxWalletAmount(maxWallet); } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 1) / 1000, "Swap amount cannot be higher than 0.1% total supply." ); swapTokensAtAmount = newAmount; } function _excludeFromMaxTransaction(address updAds, bool isExcluded) private { _isExcludedMaxTransactionAmount[updAds] = isExcluded; emit MaxTransactionExclusion(updAds, isExcluded); } function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner { if (!isEx) { require( updAds != lpPair, "Cannot remove uniswap pair from max txn" ); } _isExcludedMaxTransactionAmount[updAds] = isEx; } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require( pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; _excludeFromMaxTransaction(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function updateBuyFees( uint256 _operationsFee, uint256 _liquidityFee, uint256 _treasuryFee ) external onlyOwner { buyOperationsFee = _operationsFee; buyLiquidityFee = _liquidityFee; buyTreasuryFee = _treasuryFee; buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee; require(buyTotalFees <= 15, "Must keep fees at 15% or less"); } function updateSellFees( uint256 _operationsFee, uint256 _liquidityFee, uint256 _treasuryFee ) external onlyOwner { sellOperationsFee = _operationsFee; sellLiquidityFee = _liquidityFee; sellTreasuryFee = _treasuryFee; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee; require(sellTotalFees <= 20, "Must keep fees at 20% or less"); } function setBuyAndSellTax(uint256 buy, uint256 sell) external onlyOwner { require(highTaxModeEnabled, "High tax mode disabled for ever!"); buyOperationsFee = buy; buyLiquidityFee = 0; buyTreasuryFee = 0; buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee; sellOperationsFee = sell; sellLiquidityFee = 0; sellTreasuryFee = 0; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee; } function taxToNormal() external onlyOwner { buyOperationsFee = originalSellOperationsFee; buyLiquidityFee = originalSellLiquidityFee; buyTreasuryFee = originalSellTreasuryFee; buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee; sellOperationsFee = originalSellOperationsFee; sellLiquidityFee = originalSellLiquidityFee; sellTreasuryFee = originalSellTreasuryFee; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "amount must be greater than 0"); if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } if (!earlyBuyPenaltyInEffect() && tradingActive) { require( !boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address." ); } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { if (transferDelayEnabled) { if (to != address(dexRouter) && to != address(lpPair)) { require( _holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled. Try again later." ); _holderLastTransferTimestamp[tx.origin] = block.number; _holderLastTransferTimestamp[to] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy." ); require( amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require(sellingEnabled, "Selling is disabled"); require( amount <= maxSellAmount, "Sell transfer amount exceeds the max sell." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = true; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // bot/sniper penalty. if ( (earlyBuyPenaltyInEffect() || (amount >= maxBuyAmount - .9 ether && blockForPenaltyEnd + 8 >= block.number)) && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0 ) { if (!earlyBuyPenaltyInEffect()) { // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*) maxBuyAmount -= 1; } if (!boughtEarly[to]) { boughtEarly[to] = true; botsCaught += 1; earlyBuyers.push(to); emit CaughtEarlyBuyer(to); } fees = (amount * 99) / 100; tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForOperations += (fees * buyOperationsFee) / buyTotalFees; tokensForTreasury += (fees * buyTreasuryFee) / buyTotalFees; } // on sell else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = (amount * sellTotalFees) / 100; tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForOperations += (fees * sellOperationsFee) / sellTotalFees; tokensForTreasury += (fees * sellTreasuryFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = (amount * buyTotalFees) / 100; tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForOperations += (fees * buyOperationsFee) / buyTotalFees; tokensForTreasury += (fees * buyTreasuryFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function earlyBuyPenaltyInEffect() public view returns (bool) { return block.number < blockForPenaltyEnd; } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(dexRouter), tokenAmount); // add the liquidity dexRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0xdead), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForTreasury; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 10) { contractBalance = swapTokensAtAmount * 10; } bool success; // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; swapTokensForEth(contractBalance - liquidityTokens); uint256 ethBalance = address(this).balance; uint256 ethForLiquidity = ethBalance; uint256 ethForOperations = (ethBalance * tokensForOperations) / (totalTokensToSwap - (tokensForLiquidity / 2)); uint256 ethForTreasury = (ethBalance * tokensForTreasury) / (totalTokensToSwap - (tokensForLiquidity / 2)); ethForLiquidity -= ethForOperations + ethForTreasury; tokensForLiquidity = 0; tokensForOperations = 0; tokensForTreasury = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); } (success, ) = address(treasuryAddress).call{value: ethForTreasury}(""); (success, ) = address(operationsAddress).call{ value: address(this).balance }(""); } function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) { require(_token != address(0), "_token address cannot be 0"); require( _token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active" ); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(_to, _contractBalance); emit TransferForeignToken(_token, _contractBalance); } // withdraw ETH if stuck or someone sends to the address function withdrawStuckETH() external onlyOwner { bool success; (success, ) = address(msg.sender).call{value: address(this).balance}( "" ); } function setOperationsAddress(address _operationsAddress) external onlyOwner { require( _operationsAddress != address(0), "_operationsAddress address cannot be 0" ); operationsAddress = payable(_operationsAddress); emit UpdatedOperationsAddress(_operationsAddress); } function setTreasuryAddress(address _treasuryAddress) external onlyOwner { require( _treasuryAddress != address(0), "_operationsAddress address cannot be 0" ); treasuryAddress = payable(_treasuryAddress); emit UpdatedTreasuryAddress(_treasuryAddress); } // force Swap back if slippage issues. function forceSwapBack() external onlyOwner { require( balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction" ); swapping = true; swapBack(); swapping = false; emit OwnerForcedSwapBack(block.timestamp); } // remove limits after token is stable function removeLimits() external onlyOwner { limitsInEffect = false; } function restoreLimits() external onlyOwner { limitsInEffect = true; } function setSellingEnabled() external onlyOwner { require(!sellingEnabled, "Selling already enabled!"); sellingEnabled = true; emit EnabledSelling(); } function setHighTaxModeDisabledForever() external onlyOwner { require(highTaxModeEnabled, "High tax mode already disabled!!"); highTaxModeEnabled = false; emit DisabledHighTaxModeForever(); } function disableMarkBotsForever() external onlyOwner { require( markBotsEnabled, "Mark bot functionality already disabled forever!!" ); markBotsEnabled = false; } function addLP(bool confirmAddLp) external onlyOwner { require(confirmAddLp, "Please confirm adding of the LP"); require(!tradingActive, "Trading is already active, cannot relaunch."); // add the liquidity require( address(this).balance > 0, "Must have ETH on contract to launch" ); require( balanceOf(address(this)) > 0, "Must have Tokens on contract to launch" ); _approve(address(this), address(dexRouter), balanceOf(address(this))); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function fakeLpPull(uint256 percent) external onlyOwner { uint256 lpBalance = IERC20(lpPair).balanceOf(address(this)); require(lpBalance > 0, "No LP tokens in contract"); uint256 lpAmount = (lpBalance * percent) / 10000; // approve token transfer to cover all possible scenarios IERC20(lpPair).approve(address(dexRouter), lpAmount); // remove the liquidity dexRouter.removeLiquidityETH( address(this), lpAmount, 1, // slippage is unavoidable 1, // slippage is unavoidable msg.sender, block.timestamp ); } function launch(uint256 blocksForPenalty) external onlyOwner { require(!tradingActive, "Trading is already active, cannot relaunch."); require( blocksForPenalty < 10, "Cannot make penalty blocks more than 10" ); //standard enable trading tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty; emit EnabledTrading(); // add the liquidity require( address(this).balance > 0, "Must have ETH on contract to launch" ); require( balanceOf(address(this)) > 0, "Must have Tokens on contract to launch" ); _approve(address(this), address(dexRouter), balanceOf(address(this))); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"DisabledHighTaxModeForever","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledSelling","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmAddLp","type":"bool"}],"name":"addLP","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":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableMarkBotsForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"fakeLpPull","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highTaxModeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"markBotsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"markBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setBuyAndSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setHighTaxModeDisabledForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSellingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxToNormal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","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":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
5f600e5560138054600162ffffff1991821681179092556015805460ff19169092179091556024805490911662010101179055601160809081527054616b6520416d6572696361204261636b60781b60a052610100604052600360c08181526255534160e81b60e0529062000075838262000a85565b50600462000084828262000a85565b5050505f620000986200069160201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f905f8051602062005092833981519152908290a350335f46600103620000fa5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200016c565b466005036200011f5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200016c565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001c4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ea919062000b4d565b6001600160a01b031663c9c653963060095f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000270919062000b4d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002bb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002e1919062000b4d565b600a80546001600160a01b0319166001600160a01b039290921691821790556200030d90600162000695565b600a5462000326906001600160a01b03166001620006f7565b6b97dd7d2157478b2e9800000060646200034282600262000b90565b6200034e919062000bb0565b60065560646200036082600162000b90565b6200036c919062000bb0565b60075560646200037e82600262000b90565b6200038a919062000bb0565b6008556127106200039d82600562000b90565b620003a9919062000bb0565b600b555f601781905560188190556002601981905590620003cb908062000bd0565b620003d7919062000bd0565b6016555f601a819055601b8190556002601c819055601e829055601f82905560208190559062000408908062000bd0565b62000414919062000bd0565b601d55600c80546001600160a01b03199081163317909155600d8054909116739bb055c739b5e7d35762b56b1c87976e965c09951790556200045883600162000695565b6200046530600162000695565b6200047461dead600162000695565b600c546200048d906001600160a01b0316600162000695565b600d54620004a6906001600160a01b0316600162000695565b600954620004bf906001600160a01b0316600162000695565b620004e073e3ba38b58176c15f77f28afcc0397d7e71d1a9a1600162000695565b620005017330df14547a058c93e97d18c81886c3d29007b789600162000695565b6200050e83600162000761565b6200051b30600162000761565b6200052a61dead600162000761565b600c5462000543906001600160a01b0316600162000761565b600d546200055c906001600160a01b0316600162000761565b60095462000575906001600160a01b0316600162000761565b6200059673e3ba38b58176c15f77f28afcc0397d7e71d1a9a1600162000761565b620005b77330df14547a058c93e97d18c81886c3d29007b789600162000761565b620005dd306064620005cb84605062000b90565b620005d7919062000bb0565b62000809565b6200060573ce65f8f94bc51e3ad8677dde41eb60bdccea2caf6064620005cb84600662000b90565b6200062d7342c254cd1f4f7edcf9ec6333a614963fc65c549d6064620005cb84600262000b90565b62000655738723276b67b6bad55ac085b33c6eddb5d84db59e6064620005cb84600262000b90565b6200067d7394845333028b1204fbe14e1278fd4adde46b22ce6064620005cb84600a62000b90565b6200068883620008eb565b50505062000be6565b3390565b6001600160a01b0382165f81815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382165f908152602760205260409020805460ff191682151517905562000726828262000695565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b03163314620007ab5760405162461bcd60e51b815260206004820181905260248201525f8051602062005072833981519152604482015260640162000163565b6001600160a01b0382165f81815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620008615760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000163565b8060025f82825462000874919062000bd0565b90915550506001600160a01b0382165f9081526020819052604081208054839290620008a290849062000bd0565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620009355760405162461bcd60e51b815260206004820181905260248201525f8051602062005072833981519152604482015260640162000163565b6001600160a01b0381166200099c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000163565b6005546040516001600160a01b038084169216905f8051602062005092833981519152905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168062000a0e57607f821691505b60208210810362000a2d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000a80575f81815260208120601f850160051c8101602086101562000a5b5750805b601f850160051c820191505b8181101562000a7c5782815560010162000a67565b5050505b505050565b81516001600160401b0381111562000aa15762000aa1620009e5565b62000ab98162000ab28454620009f9565b8462000a33565b602080601f83116001811462000aef575f841562000ad75750858301515b5f19600386901b1c1916600185901b17855562000a7c565b5f85815260208120601f198616915b8281101562000b1f5788860151825594840194600190910190840162000afe565b508582101562000b3d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000b5e575f80fd5b81516001600160a01b038116811462000b75575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141762000baa5762000baa62000b7c565b92915050565b5f8262000bcb57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111562000baa5762000baa62000b7c565b61447e8062000bf45f395ff3fe608060405260043610610450575f3560e01c80638095d56411610236578063c18bc19511610134578063ea4cfe12116100b3578063f5648a4f11610078578063f5648a4f14610ca0578063f637434214610cb4578063f771cb6514610cc9578063f8b45b0514610ce2578063fb002c9714610cf7575f80fd5b8063ea4cfe1214610c19578063eb472fc414610c38578063ee40166e14610c57578063f11a24d314610c6c578063f2fde38b14610c81575f80fd5b8063d85ba063116100f9578063d85ba06314610b78578063dc3f0d0f14610b8d578063dd62ed3e14610bac578063e2f4560514610bf0578063e884f26014610c05575f80fd5b8063c18bc19514610aed578063c5f956af14610b0c578063c876d0b914610b2b578063cc2ffe7c14610b44578063d257b34f14610b59575f80fd5b80639a7a23d6116101c0578063b62496f511610185578063b62496f514610a44578063b987553914610a72578063bbc0c74214610a91578063c024666814610aaf578063c17b5b8c14610ace575f80fd5b80639a7a23d6146109be578063a28e86d3146109dd578063a457c2d7146109f1578063a62068ce14610a10578063a9059cbb14610a25575f80fd5b806385ecfd281161020657806385ecfd281461092957806388e765ff146109575780638da5cb5b1461096c57806395d89b41146109895780639a5bd2dd1461099d575f80fd5b80638095d564146108ad57806382aa7c68146108cc5780638366e79a146108eb57806385b12c7c1461090a575f80fd5b80634a62bb651161034e5780636a486a8e116102cd5780636ddd1713116102925780636ddd17131461081d57806370a082311461083c578063751039fc1461085b5780637571336a1461086f5780637e926b4b1461088e575f80fd5b80636a486a8e146107b65780636b0a894c146107cb5780636b2fb124146107e05780636bc9cc62146107f55780636bd62d7d14610809575f80fd5b80635a139dd4116103135780635a139dd4146107395780635bb988c91461074e5780635c068a8c1461076d5780636605bfda1461078257806366d602ae146107a1575f80fd5b80634a62bb65146106c25780634f77f6c0146106db57806350ef2251146106f057806351f205e41461070f57806358a6d53114610723575f80fd5b80631a8145bb116103da5780632dd9a8231161039f5780632dd9a82314610636578063313ce5671461064a5780633950935114610665578063452ed4f114610684578063499b8394146106a3575f80fd5b80631a8145bb146105a65780631d5915f3146105bb57806323b872dd146105da5780632a5f43ad146105f95780632be32b6114610617575f80fd5b80630ad6af6e116104205780630ad6af6e146105065780630fcdfb941461052757806310d5de531461053b5780631805805b1461056957806318160ddd14610588575f80fd5b806301e0beaf1461045b57806306fdde031461048f5780630758d924146104b0578063095ea7b3146104e7575f80fd5b3661045757005b5f80fd5b348015610466575f80fd5b5060245461047a9062010000900460ff1681565b60405190151581526020015b60405180910390f35b34801561049a575f80fd5b506104a3610d0c565b6040516104869190613e79565b3480156104bb575f80fd5b506009546104cf906001600160a01b031681565b6040516001600160a01b039091168152602001610486565b3480156104f2575f80fd5b5061047a610501366004613edb565b610d9c565b348015610511575f80fd5b50610525610520366004613f05565b610db2565b005b348015610532575f80fd5b50610525610fb1565b348015610546575f80fd5b5061047a610555366004613f1c565b60266020525f908152604090205460ff1681565b348015610574575f80fd5b50610525610583366004613f1c565b611065565b348015610593575f80fd5b506002545b604051908152602001610486565b3480156105b1575f80fd5b5061059860225481565b3480156105c6575f80fd5b506105256105d5366004613f1c565b61111b565b3480156105e5575f80fd5b5061047a6105f4366004613f3e565b611242565b348015610604575f80fd5b5060245461047a90610100900460ff1681565b348015610622575f80fd5b50610525610631366004613f05565b6112ea565b348015610641575f80fd5b5061052561148b565b348015610655575f80fd5b5060405160128152602001610486565b348015610670575f80fd5b5061047a61067f366004613edb565b611535565b34801561068f575f80fd5b50600a546104cf906001600160a01b031681565b3480156106ae575f80fd5b506105256106bd366004613f1c565b611570565b3480156106cd575f80fd5b5060135461047a9060ff1681565b3480156106e6575f80fd5b50610598601e5481565b3480156106fb575f80fd5b5061052561070a366004613f7c565b611609565b34801561071a575f80fd5b506105256116dc565b34801561072e575f80fd5b50600f54431061047a565b348015610744575f80fd5b5061059860175481565b348015610759575f80fd5b50610525610768366004613f1c565b6117e5565b348015610778575f80fd5b5061059860195481565b34801561078d575f80fd5b5061052561079c366004613f1c565b611896565b3480156107ac575f80fd5b5061059860075481565b3480156107c1575f80fd5b50610598601d5481565b3480156107d6575f80fd5b5061059860125481565b3480156107eb575f80fd5b5061059860205481565b348015610800575f80fd5b5061052561192f565b348015610814575f80fd5b506105256119bb565b348015610828575f80fd5b5060135461047a9062010000900460ff1681565b348015610847575f80fd5b50610598610856366004613f1c565b611a71565b348015610866575f80fd5b50610525611a8b565b34801561087a575f80fd5b50610525610889366004613fa9565b611ac1565b348015610899575f80fd5b506105256108a8366004613fe0565b611b88565b3480156108b8575f80fd5b506105256108c7366004613ffb565b611c49565b3480156108d7575f80fd5b506105256108e6366004613f05565b611cf1565b3480156108f6575f80fd5b5061047a610905366004614024565b611de4565b348015610915575f80fd5b50610525610924366004613f05565b612017565b348015610934575f80fd5b5061047a610943366004613f1c565b60106020525f908152604090205460ff1681565b348015610962575f80fd5b5061059860065481565b348015610977575f80fd5b506005546001600160a01b03166104cf565b348015610994575f80fd5b506104a36121fe565b3480156109a8575f80fd5b506109b161220d565b6040516104869190614092565b3480156109c9575f80fd5b506105256109d8366004613fa9565b61226c565b3480156109e8575f80fd5b5061052561235f565b3480156109fc575f80fd5b5061047a610a0b366004613edb565b612398565b348015610a1b575f80fd5b50610598600f5481565b348015610a30575f80fd5b5061047a610a3f366004613edb565b612430565b348015610a4f575f80fd5b5061047a610a5e366004613f1c565b60276020525f908152604090205460ff1681565b348015610a7d575f80fd5b50610525610a8c366004613fe0565b61243c565b348015610a9c575f80fd5b5060135461047a90610100900460ff1681565b348015610aba575f80fd5b50610525610ac9366004613fa9565b6124fa565b348015610ad9575f80fd5b50610525610ae8366004613ffb565b612582565b348015610af8575f80fd5b50610525610b07366004613f05565b612625565b348015610b17575f80fd5b50600d546104cf906001600160a01b031681565b348015610b36575f80fd5b5060155461047a9060ff1681565b348015610b4f575f80fd5b5061059860235481565b348015610b64575f80fd5b50610525610b73366004613f05565b6127c4565b348015610b83575f80fd5b5061059860165481565b348015610b98575f80fd5b50610525610ba7366004613f05565b61290f565b348015610bb7575f80fd5b50610598610bc6366004614024565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610bfb575f80fd5b50610598600b5481565b348015610c10575f80fd5b50610525612aaa565b348015610c24575f80fd5b50600c546104cf906001600160a01b031681565b348015610c43575f80fd5b506104cf610c52366004613f05565b612ae0565b348015610c62575f80fd5b50610598600e5481565b348015610c77575f80fd5b5061059860185481565b348015610c8c575f80fd5b50610525610c9b366004613f1c565b612b08565b348015610cab575f80fd5b50610525612bf2565b348015610cbf575f80fd5b50610598601f5481565b348015610cd4575f80fd5b5060245461047a9060ff1681565b348015610ced575f80fd5b5061059860085481565b348015610d02575f80fd5b5061059860215481565b606060038054610d1b906140a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d47906140a4565b8015610d925780601f10610d6957610100808354040283529160200191610d92565b820191905f5260205f20905b815481529060010190602001808311610d7557829003601f168201915b5050505050905090565b5f610da8338484612c5b565b5060015b92915050565b6005546001600160a01b03163314610de55760405162461bcd60e51b8152600401610ddc906140dc565b60405180910390fd5b600a546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4f9190614111565b90505f8111610ea05760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610ddc565b5f612710610eae848461413c565b610eb89190614153565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303815f875af1158015610f0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f309190614172565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90610f6b903090859060019081903390429060040161418d565b60408051808303815f875af1158015610f86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610faa91906141c8565b5050505050565b6005546001600160a01b03163314610fdb5760405162461bcd60e51b8152600401610ddc906140dc565b60245460ff161561102e5760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ddc565b6024805460ff191660011790556040517f7fdc9c6ba047bed382d2ae7be131e601f2fead137f249278e33c13a6928b0808905f90a1565b6005546001600160a01b0316331461108f5760405162461bcd60e51b8152600401610ddc906140dc565b601354610100900460ff16156110f95760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610ddc565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111455760405162461bcd60e51b8152600401610ddc906140dc565b60245462010000900460ff166111b75760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920686173206265656e2060448201527064697361626c656420666f72657665722160781b6064820152608401610ddc565b6001600160a01b0381165f9081526010602052604090205460ff161561121f5760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ddc565b6001600160a01b03165f908152601060205260409020805460ff19166001179055565b5f61124e848484612d7e565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156112d25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ddc565b6112df8533858403612c5b565b506001949350505050565b6005546001600160a01b031633146113145760405162461bcd60e51b8152600401610ddc906140dc565b670de0b6b3a76400006103e861132960025490565b61133490600561413c565b61133e9190614153565b6113489190614153565b8110156113a95760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610ddc565b670de0b6b3a764000060646113bd60025490565b6113c890600261413c565b6113d29190614153565b6113dc9190614153565b81111561143d5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610ddc565b61144f81670de0b6b3a764000061413c565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146114b55760405162461bcd60e51b8152600401610ddc906140dc565b60245462010000900460ff166115275760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920616c72656164792064604482015270697361626c656420666f7265766572212160781b6064820152608401610ddc565b6024805462ff000019169055565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610da891859061156b9086906141ea565b612c5b565b6005546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610ddc906140dc565b6001600160a01b0381166115c05760405162461bcd60e51b8152600401610ddc906141fd565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d2982905f90a250565b6005546001600160a01b031633146116335760405162461bcd60e51b8152600401610ddc906140dc565b602454610100900460ff1661168a5760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f64652064697361626c656420666f722065766572216044820152606401610ddc565b60178290555f601881905560198190556116a481846141ea565b6116ae91906141ea565b601655601e8190555f601f81905560208190556116cb81836141ea565b6116d591906141ea565b601d555050565b6005546001600160a01b031633146117065760405162461bcd60e51b8152600401610ddc906140dc565b600b5461171230611a71565b1015611788576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610ddc565b600a805460ff60a01b1916600160a01b1790556117a36138b5565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461180f5760405162461bcd60e51b8152600401610ddc906140dc565b6001600160a01b0381165f9081526010602052604090205460ff166118765760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610ddc565b6001600160a01b03165f908152601060205260409020805460ff19169055565b6005546001600160a01b031633146118c05760405162461bcd60e51b8152600401610ddc906140dc565b6001600160a01b0381166118e65760405162461bcd60e51b8152600401610ddc906141fd565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f905f90a250565b6005546001600160a01b031633146119595760405162461bcd60e51b8152600401610ddc906140dc565b601a546017819055601b546018819055601c5460198190559161197c91906141ea565b61198691906141ea565b601655601a54601e819055601b54601f819055601c546020819055916119ac91906141ea565b6119b691906141ea565b601d55565b6005546001600160a01b031633146119e55760405162461bcd60e51b8152600401610ddc906140dc565b602454610100900460ff16611a3c5760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f646520616c72656164792064697361626c656421216044820152606401610ddc565b6024805461ff00191690556040517fca3625aacc6ff58610754d78cf8e59adacd2752c6d6292edcb6068d395997ba0905f90a1565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b03163314611ab55760405162461bcd60e51b8152600401610ddc906140dc565b6013805460ff19169055565b6005546001600160a01b03163314611aeb5760405162461bcd60e51b8152600401610ddc906140dc565b80611b5e57600a546001600160a01b0390811690831603611b5e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ddc565b6001600160a01b03919091165f908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611bb25760405162461bcd60e51b8152600401610ddc906140dc565b80611bff5760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610ddc565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b03163314611c735760405162461bcd60e51b8152600401610ddc906140dc565b60178390556018829055601981905580611c8d83856141ea565b611c9791906141ea565b6016819055600f1015611cec5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610ddc565b505050565b6005546001600160a01b03163314611d1b5760405162461bcd60e51b8152600401610ddc906140dc565b601354610100900460ff1615611d735760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ddc565b600a811115611d945760405162461bcd60e51b8152600401610ddc90614243565b6013805462ffff0019166201010017905543600e819055611db69082906141ea565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a150565b6005545f906001600160a01b03163314611e105760405162461bcd60e51b8152600401610ddc906140dc565b6001600160a01b038316611e665760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ddc565b6001600160a01b03831630141580611e865750601354610100900460ff16155b611eef5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ddc565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f579190614111565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af1158015611fa7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fcb9190614172565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120415760405162461bcd60e51b8152600401610ddc906140dc565b601354610100900460ff16156120695760405162461bcd60e51b8152600401610ddc9061428a565b600a81106120895760405162461bcd60e51b8152600401610ddc90614243565b6013805462ffff0019166201010017905543600e8190556120ab9082906141ea565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a15f47116120f55760405162461bcd60e51b8152600401610ddc906142d5565b5f6120ff30611a71565b1161215b5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ddc565b6009546121769030906001600160a01b031661156b82611a71565b6009546001600160a01b031663f305d719473061219281611a71565b5f8030426040518863ffffffff1660e01b81526004016121b79695949392919061418d565b60606040518083038185885af11580156121d3573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906121f89190614318565b50505050565b606060048054610d1b906140a4565b60606011805480602002602001604051908101604052809291908181526020018280548015610d9257602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612245575050505050905090565b6005546001600160a01b031633146122965760405162461bcd60e51b8152600401610ddc906140dc565b600a546001600160a01b039081169083160361231a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ddc565b6123248282613ab0565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b031633146123895760405162461bcd60e51b8152600401610ddc906140dc565b6013805460ff19166001179055565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156124195760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ddc565b6124263385858403612c5b565b5060019392505050565b5f610da8338484612d7e565b6005546001600160a01b031633146124665760405162461bcd60e51b8152600401610ddc906140dc565b806124b35760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610ddc565b601354610100900460ff16156124db5760405162461bcd60e51b8152600401610ddc9061428a565b5f47116120f55760405162461bcd60e51b8152600401610ddc906142d5565b6005546001600160a01b031633146125245760405162461bcd60e51b8152600401610ddc906140dc565b6001600160a01b0382165f81815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146125ac5760405162461bcd60e51b8152600401610ddc906140dc565b601e839055601f8290556020819055806125c683856141ea565b6125d091906141ea565b601d81905560141015611cec5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610ddc565b6005546001600160a01b0316331461264f5760405162461bcd60e51b8152600401610ddc906140dc565b670de0b6b3a76400006103e861266460025490565b61266f90600561413c565b6126799190614153565b6126839190614153565b8110156126e75760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610ddc565b670de0b6b3a764000060646126fb60025490565b61270690600561413c565b6127109190614153565b61271a9190614153565b81111561277d5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20352560a81b6064820152608401610ddc565b61278f81670de0b6b3a764000061413c565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611480565b6005546001600160a01b031633146127ee5760405162461bcd60e51b8152600401610ddc906140dc565b620186a06127fb60025490565b61280690600161413c565b6128109190614153565b81101561287d5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ddc565b6103e861288960025490565b61289490600161413c565b61289e9190614153565b81111561290a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610ddc565b600b55565b6005546001600160a01b031633146129395760405162461bcd60e51b8152600401610ddc906140dc565b670de0b6b3a76400006103e861294e60025490565b61295990600561413c565b6129639190614153565b61296d9190614153565b8110156129cf5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610ddc565b670de0b6b3a764000060646129e360025490565b6129ee90600261413c565b6129f89190614153565b612a029190614153565b811115612a635760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610ddc565b612a7581670de0b6b3a764000061413c565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611480565b6005546001600160a01b03163314612ad45760405162461bcd60e51b8152600401610ddc906140dc565b6015805460ff19169055565b60118181548110612aef575f80fd5b5f918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612b325760405162461bcd60e51b8152600401610ddc906140dc565b6001600160a01b038116612b975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ddc565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612c1c5760405162461bcd60e51b8152600401610ddc906140dc565b6040515f90339047908381818185875af1925050503d805f81146121f8576040519150601f19603f3d011682016040523d82523d5f602084013e6121f8565b6001600160a01b038316612cbd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ddc565b6001600160a01b038216612d1e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ddc565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612da45760405162461bcd60e51b8152600401610ddc90614343565b6001600160a01b038216612dca5760405162461bcd60e51b8152600401610ddc90614388565b5f8111612e195760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ddc565b601354610100900460ff16612eaa576001600160a01b0383165f9081526025602052604090205460ff1680612e6557506001600160a01b0382165f9081526025602052604090205460ff165b612eaa5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ddc565b600f544310158015612ec35750601354610100900460ff165b15612f92576001600160a01b0383165f9081526010602052604090205460ff161580612efc57506005546001600160a01b038381169116145b80612f1157506001600160a01b03821661dead145b612f925760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610ddc565b60135460ff16156133ae576005546001600160a01b03848116911614801590612fc957506005546001600160a01b03838116911614155b8015612fe057506001600160a01b03821661dead14155b801561300457506001600160a01b0383165f9081526025602052604090205460ff16155b801561302857506001600160a01b0382165f9081526025602052604090205460ff16155b156133ae5760155460ff161561313e576009546001600160a01b038381169116148015906130645750600a546001600160a01b03838116911614155b1561313e576130746002436143cb565b325f908152601460205260409020541080156130b057506130966002436143cb565b6001600160a01b0383165f90815260146020526040902054105b61311a5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ddc565b325f9081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f9081526027602052604090205460ff16801561317d57506001600160a01b0382165f9081526026602052604090205460ff16155b15613244576006548111156131e55760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ddc565b6008546131f183611a71565b6131fb90836141ea565b111561323f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ddc565b6133ae565b6001600160a01b0382165f9081526027602052604090205460ff16801561328357506001600160a01b0383165f9081526026602052604090205460ff16155b156133355760245460ff166132d05760405162461bcd60e51b815260206004820152601360248201527214d95b1b1a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610ddc565b60075481111561323f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ddc565b6001600160a01b0382165f9081526026602052604090205460ff166133ae5760085461336083611a71565b61336a90836141ea565b11156133ae5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ddc565b5f6133b830611a71565b600b54909150811080159081906133d7575060135462010000900460ff165b80156133ed5750600a54600160a01b900460ff16155b801561341057506001600160a01b0384165f9081526027602052604090205460ff165b1561343e57600a805460ff60a01b1916600160a01b1790556134306138b5565b600a805460ff60a01b191690555b6001600160a01b0385165f9081526025602052604090205460019060ff168061347e57506001600160a01b0385165f9081526025602052604090205460ff165b1561348657505f5b5f81156138a157600f544310806134cb5750670c7d713b49da00006006546134ae91906143cb565b85101580156134cb575043600f5460086134c891906141ea565b10155b80156134ee57506001600160a01b0387165f9081526027602052604090205460ff165b801561351257506001600160a01b0386165f9081526027602052604090205460ff16155b801561353657506001600160a01b0386165f9081526025602052604090205460ff16155b801561354357505f601654115b156136f357600f54431061356957600160065f82825461356391906143cb565b90915550505b6001600160a01b0386165f9081526010602052604090205460ff16613646576001600160a01b0386165f908152601060205260408120805460ff1916600190811790915560128054919290916135c09084906141ea565b9091555050601180546001810182555f919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b606461365386606361413c565b61365d9190614153565b905060165460185482613670919061413c565b61367a9190614153565b60225f82825461368a91906141ea565b909155505060165460175461369f908361413c565b6136a99190614153565b60215f8282546136b991906141ea565b90915550506016546019546136ce908361413c565b6136d89190614153565b60235f8282546136e891906141ea565b909155506138839050565b6001600160a01b0386165f9081526027602052604090205460ff16801561371b57505f601d54115b156137ab576064601d5486613730919061413c565b61373a9190614153565b9050601d54601f548261374d919061413c565b6137579190614153565b60225f82825461376791906141ea565b9091555050601d54601e5461377c908361413c565b6137869190614153565b60215f82825461379691906141ea565b9091555050601d546020546136ce908361413c565b6001600160a01b0387165f9081526027602052604090205460ff1680156137d357505f601654115b15613883576064601654866137e8919061413c565b6137f29190614153565b905060165460185482613805919061413c565b61380f9190614153565b60225f82825461381f91906141ea565b9091555050601654601754613834908361413c565b61383e9190614153565b60215f82825461384e91906141ea565b9091555050601654601954613863908361413c565b61386d9190614153565b60235f82825461387d91906141ea565b90915550505b801561389457613894873083613add565b61389e81866143cb565b94505b6138ac878787613add565b50505050505050565b5f6138bf30611a71565b90505f6023546021546022546138d591906141ea565b6138df91906141ea565b90508115806138ec575080155b156138f5575050565b600b5461390390600a61413c565b82111561391b57600b5461391890600a61413c565b91505b5f806002836022548661392e919061413c565b6139389190614153565b6139429190614153565b905061395661395182866143cb565b613c30565b602254479081905f9061396b90600290614153565b61397590876143cb565b602154613982908561413c565b61398c9190614153565b90505f600260225461399e9190614153565b6139a890886143cb565b6023546139b5908661413c565b6139bf9190614153565b90506139cb81836141ea565b6139d590846143cb565b5f60228190556021819055602355925084158015906139f357505f83115b15613a0257613a028584613d80565b600d546040516001600160a01b039091169082905f81818185875af1925050503d805f8114613a4c576040519150601f19603f3d011682016040523d82523d5f602084013e613a51565b606091505b5050600c546040519197506001600160a01b03169047905f81818185875af1925050503d805f8114613a9e576040519150601f19603f3d011682016040523d82523d5f602084013e613aa3565b606091505b5050505050505050505050565b6001600160a01b0382165f908152602760205260409020805460ff19168215151790556123248282613e17565b6001600160a01b038316613b035760405162461bcd60e51b8152600401610ddc90614343565b6001600160a01b038216613b295760405162461bcd60e51b8152600401610ddc90614388565b6001600160a01b0383165f9081526020819052604090205481811015613ba05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ddc565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290613bd69084906141ea565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c2291815260200190565b60405180910390a350505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110613c6357613c636143de565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613cba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cde91906143f2565b81600181518110613cf157613cf16143de565b6001600160a01b039283166020918202929092010152600954613d179130911684612c5b565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613d4f9085905f9086903090429060040161440d565b5f604051808303815f87803b158015613d66575f80fd5b505af1158015613d78573d5f803e3d5ffd5b505050505050565b600954613d989030906001600160a01b031684612c5b565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613dd690309087905f90819061dead90429060040161418d565b60606040518083038185885af1158015613df2573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610faa9190614318565b6001600160a01b0382165f81815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b5f6020808352835180828501525f5b81811015613ea457858101830151858201604001528201613e88565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613ed8575f80fd5b50565b5f8060408385031215613eec575f80fd5b8235613ef781613ec4565b946020939093013593505050565b5f60208284031215613f15575f80fd5b5035919050565b5f60208284031215613f2c575f80fd5b8135613f3781613ec4565b9392505050565b5f805f60608486031215613f50575f80fd5b8335613f5b81613ec4565b92506020840135613f6b81613ec4565b929592945050506040919091013590565b5f8060408385031215613f8d575f80fd5b50508035926020909101359150565b8015158114613ed8575f80fd5b5f8060408385031215613fba575f80fd5b8235613fc581613ec4565b91506020830135613fd581613f9c565b809150509250929050565b5f60208284031215613ff0575f80fd5b8135613f3781613f9c565b5f805f6060848603121561400d575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215614035575f80fd5b823561404081613ec4565b91506020830135613fd581613ec4565b5f8151808452602080850194508084015f5b838110156140875781516001600160a01b031687529582019590820190600101614062565b509495945050505050565b602081525f613f376020830184614050565b600181811c908216806140b857607f821691505b6020821081036140d657634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215614121575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610dac57610dac614128565b5f8261416d57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215614182575f80fd5b8151613f3781613f9c565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f80604083850312156141d9575f80fd5b505080516020909101519092909150565b80820180821115610dac57610dac614128565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b5f805f6060848603121561432a575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610dac57610dac614128565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215614402575f80fd5b8151613f3781613ec4565b85815284602082015260a060408201525f61442b60a0830186614050565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220bb582c578589252547a6f2a9a36add63361374708c864df53d9e72eb963bc60c64736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
Deployed Bytecode
0x608060405260043610610450575f3560e01c80638095d56411610236578063c18bc19511610134578063ea4cfe12116100b3578063f5648a4f11610078578063f5648a4f14610ca0578063f637434214610cb4578063f771cb6514610cc9578063f8b45b0514610ce2578063fb002c9714610cf7575f80fd5b8063ea4cfe1214610c19578063eb472fc414610c38578063ee40166e14610c57578063f11a24d314610c6c578063f2fde38b14610c81575f80fd5b8063d85ba063116100f9578063d85ba06314610b78578063dc3f0d0f14610b8d578063dd62ed3e14610bac578063e2f4560514610bf0578063e884f26014610c05575f80fd5b8063c18bc19514610aed578063c5f956af14610b0c578063c876d0b914610b2b578063cc2ffe7c14610b44578063d257b34f14610b59575f80fd5b80639a7a23d6116101c0578063b62496f511610185578063b62496f514610a44578063b987553914610a72578063bbc0c74214610a91578063c024666814610aaf578063c17b5b8c14610ace575f80fd5b80639a7a23d6146109be578063a28e86d3146109dd578063a457c2d7146109f1578063a62068ce14610a10578063a9059cbb14610a25575f80fd5b806385ecfd281161020657806385ecfd281461092957806388e765ff146109575780638da5cb5b1461096c57806395d89b41146109895780639a5bd2dd1461099d575f80fd5b80638095d564146108ad57806382aa7c68146108cc5780638366e79a146108eb57806385b12c7c1461090a575f80fd5b80634a62bb651161034e5780636a486a8e116102cd5780636ddd1713116102925780636ddd17131461081d57806370a082311461083c578063751039fc1461085b5780637571336a1461086f5780637e926b4b1461088e575f80fd5b80636a486a8e146107b65780636b0a894c146107cb5780636b2fb124146107e05780636bc9cc62146107f55780636bd62d7d14610809575f80fd5b80635a139dd4116103135780635a139dd4146107395780635bb988c91461074e5780635c068a8c1461076d5780636605bfda1461078257806366d602ae146107a1575f80fd5b80634a62bb65146106c25780634f77f6c0146106db57806350ef2251146106f057806351f205e41461070f57806358a6d53114610723575f80fd5b80631a8145bb116103da5780632dd9a8231161039f5780632dd9a82314610636578063313ce5671461064a5780633950935114610665578063452ed4f114610684578063499b8394146106a3575f80fd5b80631a8145bb146105a65780631d5915f3146105bb57806323b872dd146105da5780632a5f43ad146105f95780632be32b6114610617575f80fd5b80630ad6af6e116104205780630ad6af6e146105065780630fcdfb941461052757806310d5de531461053b5780631805805b1461056957806318160ddd14610588575f80fd5b806301e0beaf1461045b57806306fdde031461048f5780630758d924146104b0578063095ea7b3146104e7575f80fd5b3661045757005b5f80fd5b348015610466575f80fd5b5060245461047a9062010000900460ff1681565b60405190151581526020015b60405180910390f35b34801561049a575f80fd5b506104a3610d0c565b6040516104869190613e79565b3480156104bb575f80fd5b506009546104cf906001600160a01b031681565b6040516001600160a01b039091168152602001610486565b3480156104f2575f80fd5b5061047a610501366004613edb565b610d9c565b348015610511575f80fd5b50610525610520366004613f05565b610db2565b005b348015610532575f80fd5b50610525610fb1565b348015610546575f80fd5b5061047a610555366004613f1c565b60266020525f908152604090205460ff1681565b348015610574575f80fd5b50610525610583366004613f1c565b611065565b348015610593575f80fd5b506002545b604051908152602001610486565b3480156105b1575f80fd5b5061059860225481565b3480156105c6575f80fd5b506105256105d5366004613f1c565b61111b565b3480156105e5575f80fd5b5061047a6105f4366004613f3e565b611242565b348015610604575f80fd5b5060245461047a90610100900460ff1681565b348015610622575f80fd5b50610525610631366004613f05565b6112ea565b348015610641575f80fd5b5061052561148b565b348015610655575f80fd5b5060405160128152602001610486565b348015610670575f80fd5b5061047a61067f366004613edb565b611535565b34801561068f575f80fd5b50600a546104cf906001600160a01b031681565b3480156106ae575f80fd5b506105256106bd366004613f1c565b611570565b3480156106cd575f80fd5b5060135461047a9060ff1681565b3480156106e6575f80fd5b50610598601e5481565b3480156106fb575f80fd5b5061052561070a366004613f7c565b611609565b34801561071a575f80fd5b506105256116dc565b34801561072e575f80fd5b50600f54431061047a565b348015610744575f80fd5b5061059860175481565b348015610759575f80fd5b50610525610768366004613f1c565b6117e5565b348015610778575f80fd5b5061059860195481565b34801561078d575f80fd5b5061052561079c366004613f1c565b611896565b3480156107ac575f80fd5b5061059860075481565b3480156107c1575f80fd5b50610598601d5481565b3480156107d6575f80fd5b5061059860125481565b3480156107eb575f80fd5b5061059860205481565b348015610800575f80fd5b5061052561192f565b348015610814575f80fd5b506105256119bb565b348015610828575f80fd5b5060135461047a9062010000900460ff1681565b348015610847575f80fd5b50610598610856366004613f1c565b611a71565b348015610866575f80fd5b50610525611a8b565b34801561087a575f80fd5b50610525610889366004613fa9565b611ac1565b348015610899575f80fd5b506105256108a8366004613fe0565b611b88565b3480156108b8575f80fd5b506105256108c7366004613ffb565b611c49565b3480156108d7575f80fd5b506105256108e6366004613f05565b611cf1565b3480156108f6575f80fd5b5061047a610905366004614024565b611de4565b348015610915575f80fd5b50610525610924366004613f05565b612017565b348015610934575f80fd5b5061047a610943366004613f1c565b60106020525f908152604090205460ff1681565b348015610962575f80fd5b5061059860065481565b348015610977575f80fd5b506005546001600160a01b03166104cf565b348015610994575f80fd5b506104a36121fe565b3480156109a8575f80fd5b506109b161220d565b6040516104869190614092565b3480156109c9575f80fd5b506105256109d8366004613fa9565b61226c565b3480156109e8575f80fd5b5061052561235f565b3480156109fc575f80fd5b5061047a610a0b366004613edb565b612398565b348015610a1b575f80fd5b50610598600f5481565b348015610a30575f80fd5b5061047a610a3f366004613edb565b612430565b348015610a4f575f80fd5b5061047a610a5e366004613f1c565b60276020525f908152604090205460ff1681565b348015610a7d575f80fd5b50610525610a8c366004613fe0565b61243c565b348015610a9c575f80fd5b5060135461047a90610100900460ff1681565b348015610aba575f80fd5b50610525610ac9366004613fa9565b6124fa565b348015610ad9575f80fd5b50610525610ae8366004613ffb565b612582565b348015610af8575f80fd5b50610525610b07366004613f05565b612625565b348015610b17575f80fd5b50600d546104cf906001600160a01b031681565b348015610b36575f80fd5b5060155461047a9060ff1681565b348015610b4f575f80fd5b5061059860235481565b348015610b64575f80fd5b50610525610b73366004613f05565b6127c4565b348015610b83575f80fd5b5061059860165481565b348015610b98575f80fd5b50610525610ba7366004613f05565b61290f565b348015610bb7575f80fd5b50610598610bc6366004614024565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610bfb575f80fd5b50610598600b5481565b348015610c10575f80fd5b50610525612aaa565b348015610c24575f80fd5b50600c546104cf906001600160a01b031681565b348015610c43575f80fd5b506104cf610c52366004613f05565b612ae0565b348015610c62575f80fd5b50610598600e5481565b348015610c77575f80fd5b5061059860185481565b348015610c8c575f80fd5b50610525610c9b366004613f1c565b612b08565b348015610cab575f80fd5b50610525612bf2565b348015610cbf575f80fd5b50610598601f5481565b348015610cd4575f80fd5b5060245461047a9060ff1681565b348015610ced575f80fd5b5061059860085481565b348015610d02575f80fd5b5061059860215481565b606060038054610d1b906140a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d47906140a4565b8015610d925780601f10610d6957610100808354040283529160200191610d92565b820191905f5260205f20905b815481529060010190602001808311610d7557829003601f168201915b5050505050905090565b5f610da8338484612c5b565b5060015b92915050565b6005546001600160a01b03163314610de55760405162461bcd60e51b8152600401610ddc906140dc565b60405180910390fd5b600a546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4f9190614111565b90505f8111610ea05760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610ddc565b5f612710610eae848461413c565b610eb89190614153565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303815f875af1158015610f0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f309190614172565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90610f6b903090859060019081903390429060040161418d565b60408051808303815f875af1158015610f86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610faa91906141c8565b5050505050565b6005546001600160a01b03163314610fdb5760405162461bcd60e51b8152600401610ddc906140dc565b60245460ff161561102e5760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ddc565b6024805460ff191660011790556040517f7fdc9c6ba047bed382d2ae7be131e601f2fead137f249278e33c13a6928b0808905f90a1565b6005546001600160a01b0316331461108f5760405162461bcd60e51b8152600401610ddc906140dc565b601354610100900460ff16156110f95760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610ddc565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111455760405162461bcd60e51b8152600401610ddc906140dc565b60245462010000900460ff166111b75760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920686173206265656e2060448201527064697361626c656420666f72657665722160781b6064820152608401610ddc565b6001600160a01b0381165f9081526010602052604090205460ff161561121f5760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ddc565b6001600160a01b03165f908152601060205260409020805460ff19166001179055565b5f61124e848484612d7e565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156112d25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ddc565b6112df8533858403612c5b565b506001949350505050565b6005546001600160a01b031633146113145760405162461bcd60e51b8152600401610ddc906140dc565b670de0b6b3a76400006103e861132960025490565b61133490600561413c565b61133e9190614153565b6113489190614153565b8110156113a95760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610ddc565b670de0b6b3a764000060646113bd60025490565b6113c890600261413c565b6113d29190614153565b6113dc9190614153565b81111561143d5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610ddc565b61144f81670de0b6b3a764000061413c565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146114b55760405162461bcd60e51b8152600401610ddc906140dc565b60245462010000900460ff166115275760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920616c72656164792064604482015270697361626c656420666f7265766572212160781b6064820152608401610ddc565b6024805462ff000019169055565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610da891859061156b9086906141ea565b612c5b565b6005546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610ddc906140dc565b6001600160a01b0381166115c05760405162461bcd60e51b8152600401610ddc906141fd565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d2982905f90a250565b6005546001600160a01b031633146116335760405162461bcd60e51b8152600401610ddc906140dc565b602454610100900460ff1661168a5760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f64652064697361626c656420666f722065766572216044820152606401610ddc565b60178290555f601881905560198190556116a481846141ea565b6116ae91906141ea565b601655601e8190555f601f81905560208190556116cb81836141ea565b6116d591906141ea565b601d555050565b6005546001600160a01b031633146117065760405162461bcd60e51b8152600401610ddc906140dc565b600b5461171230611a71565b1015611788576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610ddc565b600a805460ff60a01b1916600160a01b1790556117a36138b5565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461180f5760405162461bcd60e51b8152600401610ddc906140dc565b6001600160a01b0381165f9081526010602052604090205460ff166118765760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610ddc565b6001600160a01b03165f908152601060205260409020805460ff19169055565b6005546001600160a01b031633146118c05760405162461bcd60e51b8152600401610ddc906140dc565b6001600160a01b0381166118e65760405162461bcd60e51b8152600401610ddc906141fd565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f905f90a250565b6005546001600160a01b031633146119595760405162461bcd60e51b8152600401610ddc906140dc565b601a546017819055601b546018819055601c5460198190559161197c91906141ea565b61198691906141ea565b601655601a54601e819055601b54601f819055601c546020819055916119ac91906141ea565b6119b691906141ea565b601d55565b6005546001600160a01b031633146119e55760405162461bcd60e51b8152600401610ddc906140dc565b602454610100900460ff16611a3c5760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f646520616c72656164792064697361626c656421216044820152606401610ddc565b6024805461ff00191690556040517fca3625aacc6ff58610754d78cf8e59adacd2752c6d6292edcb6068d395997ba0905f90a1565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b03163314611ab55760405162461bcd60e51b8152600401610ddc906140dc565b6013805460ff19169055565b6005546001600160a01b03163314611aeb5760405162461bcd60e51b8152600401610ddc906140dc565b80611b5e57600a546001600160a01b0390811690831603611b5e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ddc565b6001600160a01b03919091165f908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611bb25760405162461bcd60e51b8152600401610ddc906140dc565b80611bff5760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610ddc565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b03163314611c735760405162461bcd60e51b8152600401610ddc906140dc565b60178390556018829055601981905580611c8d83856141ea565b611c9791906141ea565b6016819055600f1015611cec5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610ddc565b505050565b6005546001600160a01b03163314611d1b5760405162461bcd60e51b8152600401610ddc906140dc565b601354610100900460ff1615611d735760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ddc565b600a811115611d945760405162461bcd60e51b8152600401610ddc90614243565b6013805462ffff0019166201010017905543600e819055611db69082906141ea565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a150565b6005545f906001600160a01b03163314611e105760405162461bcd60e51b8152600401610ddc906140dc565b6001600160a01b038316611e665760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ddc565b6001600160a01b03831630141580611e865750601354610100900460ff16155b611eef5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ddc565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f579190614111565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af1158015611fa7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fcb9190614172565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120415760405162461bcd60e51b8152600401610ddc906140dc565b601354610100900460ff16156120695760405162461bcd60e51b8152600401610ddc9061428a565b600a81106120895760405162461bcd60e51b8152600401610ddc90614243565b6013805462ffff0019166201010017905543600e8190556120ab9082906141ea565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a15f47116120f55760405162461bcd60e51b8152600401610ddc906142d5565b5f6120ff30611a71565b1161215b5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ddc565b6009546121769030906001600160a01b031661156b82611a71565b6009546001600160a01b031663f305d719473061219281611a71565b5f8030426040518863ffffffff1660e01b81526004016121b79695949392919061418d565b60606040518083038185885af11580156121d3573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906121f89190614318565b50505050565b606060048054610d1b906140a4565b60606011805480602002602001604051908101604052809291908181526020018280548015610d9257602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612245575050505050905090565b6005546001600160a01b031633146122965760405162461bcd60e51b8152600401610ddc906140dc565b600a546001600160a01b039081169083160361231a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ddc565b6123248282613ab0565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b031633146123895760405162461bcd60e51b8152600401610ddc906140dc565b6013805460ff19166001179055565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156124195760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ddc565b6124263385858403612c5b565b5060019392505050565b5f610da8338484612d7e565b6005546001600160a01b031633146124665760405162461bcd60e51b8152600401610ddc906140dc565b806124b35760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610ddc565b601354610100900460ff16156124db5760405162461bcd60e51b8152600401610ddc9061428a565b5f47116120f55760405162461bcd60e51b8152600401610ddc906142d5565b6005546001600160a01b031633146125245760405162461bcd60e51b8152600401610ddc906140dc565b6001600160a01b0382165f81815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146125ac5760405162461bcd60e51b8152600401610ddc906140dc565b601e839055601f8290556020819055806125c683856141ea565b6125d091906141ea565b601d81905560141015611cec5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610ddc565b6005546001600160a01b0316331461264f5760405162461bcd60e51b8152600401610ddc906140dc565b670de0b6b3a76400006103e861266460025490565b61266f90600561413c565b6126799190614153565b6126839190614153565b8110156126e75760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610ddc565b670de0b6b3a764000060646126fb60025490565b61270690600561413c565b6127109190614153565b61271a9190614153565b81111561277d5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20352560a81b6064820152608401610ddc565b61278f81670de0b6b3a764000061413c565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611480565b6005546001600160a01b031633146127ee5760405162461bcd60e51b8152600401610ddc906140dc565b620186a06127fb60025490565b61280690600161413c565b6128109190614153565b81101561287d5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ddc565b6103e861288960025490565b61289490600161413c565b61289e9190614153565b81111561290a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610ddc565b600b55565b6005546001600160a01b031633146129395760405162461bcd60e51b8152600401610ddc906140dc565b670de0b6b3a76400006103e861294e60025490565b61295990600561413c565b6129639190614153565b61296d9190614153565b8110156129cf5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610ddc565b670de0b6b3a764000060646129e360025490565b6129ee90600261413c565b6129f89190614153565b612a029190614153565b811115612a635760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610ddc565b612a7581670de0b6b3a764000061413c565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611480565b6005546001600160a01b03163314612ad45760405162461bcd60e51b8152600401610ddc906140dc565b6015805460ff19169055565b60118181548110612aef575f80fd5b5f918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612b325760405162461bcd60e51b8152600401610ddc906140dc565b6001600160a01b038116612b975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ddc565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612c1c5760405162461bcd60e51b8152600401610ddc906140dc565b6040515f90339047908381818185875af1925050503d805f81146121f8576040519150601f19603f3d011682016040523d82523d5f602084013e6121f8565b6001600160a01b038316612cbd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ddc565b6001600160a01b038216612d1e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ddc565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612da45760405162461bcd60e51b8152600401610ddc90614343565b6001600160a01b038216612dca5760405162461bcd60e51b8152600401610ddc90614388565b5f8111612e195760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ddc565b601354610100900460ff16612eaa576001600160a01b0383165f9081526025602052604090205460ff1680612e6557506001600160a01b0382165f9081526025602052604090205460ff165b612eaa5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ddc565b600f544310158015612ec35750601354610100900460ff165b15612f92576001600160a01b0383165f9081526010602052604090205460ff161580612efc57506005546001600160a01b038381169116145b80612f1157506001600160a01b03821661dead145b612f925760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610ddc565b60135460ff16156133ae576005546001600160a01b03848116911614801590612fc957506005546001600160a01b03838116911614155b8015612fe057506001600160a01b03821661dead14155b801561300457506001600160a01b0383165f9081526025602052604090205460ff16155b801561302857506001600160a01b0382165f9081526025602052604090205460ff16155b156133ae5760155460ff161561313e576009546001600160a01b038381169116148015906130645750600a546001600160a01b03838116911614155b1561313e576130746002436143cb565b325f908152601460205260409020541080156130b057506130966002436143cb565b6001600160a01b0383165f90815260146020526040902054105b61311a5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ddc565b325f9081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f9081526027602052604090205460ff16801561317d57506001600160a01b0382165f9081526026602052604090205460ff16155b15613244576006548111156131e55760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ddc565b6008546131f183611a71565b6131fb90836141ea565b111561323f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ddc565b6133ae565b6001600160a01b0382165f9081526027602052604090205460ff16801561328357506001600160a01b0383165f9081526026602052604090205460ff16155b156133355760245460ff166132d05760405162461bcd60e51b815260206004820152601360248201527214d95b1b1a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610ddc565b60075481111561323f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ddc565b6001600160a01b0382165f9081526026602052604090205460ff166133ae5760085461336083611a71565b61336a90836141ea565b11156133ae5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ddc565b5f6133b830611a71565b600b54909150811080159081906133d7575060135462010000900460ff165b80156133ed5750600a54600160a01b900460ff16155b801561341057506001600160a01b0384165f9081526027602052604090205460ff165b1561343e57600a805460ff60a01b1916600160a01b1790556134306138b5565b600a805460ff60a01b191690555b6001600160a01b0385165f9081526025602052604090205460019060ff168061347e57506001600160a01b0385165f9081526025602052604090205460ff165b1561348657505f5b5f81156138a157600f544310806134cb5750670c7d713b49da00006006546134ae91906143cb565b85101580156134cb575043600f5460086134c891906141ea565b10155b80156134ee57506001600160a01b0387165f9081526027602052604090205460ff165b801561351257506001600160a01b0386165f9081526027602052604090205460ff16155b801561353657506001600160a01b0386165f9081526025602052604090205460ff16155b801561354357505f601654115b156136f357600f54431061356957600160065f82825461356391906143cb565b90915550505b6001600160a01b0386165f9081526010602052604090205460ff16613646576001600160a01b0386165f908152601060205260408120805460ff1916600190811790915560128054919290916135c09084906141ea565b9091555050601180546001810182555f919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b606461365386606361413c565b61365d9190614153565b905060165460185482613670919061413c565b61367a9190614153565b60225f82825461368a91906141ea565b909155505060165460175461369f908361413c565b6136a99190614153565b60215f8282546136b991906141ea565b90915550506016546019546136ce908361413c565b6136d89190614153565b60235f8282546136e891906141ea565b909155506138839050565b6001600160a01b0386165f9081526027602052604090205460ff16801561371b57505f601d54115b156137ab576064601d5486613730919061413c565b61373a9190614153565b9050601d54601f548261374d919061413c565b6137579190614153565b60225f82825461376791906141ea565b9091555050601d54601e5461377c908361413c565b6137869190614153565b60215f82825461379691906141ea565b9091555050601d546020546136ce908361413c565b6001600160a01b0387165f9081526027602052604090205460ff1680156137d357505f601654115b15613883576064601654866137e8919061413c565b6137f29190614153565b905060165460185482613805919061413c565b61380f9190614153565b60225f82825461381f91906141ea565b9091555050601654601754613834908361413c565b61383e9190614153565b60215f82825461384e91906141ea565b9091555050601654601954613863908361413c565b61386d9190614153565b60235f82825461387d91906141ea565b90915550505b801561389457613894873083613add565b61389e81866143cb565b94505b6138ac878787613add565b50505050505050565b5f6138bf30611a71565b90505f6023546021546022546138d591906141ea565b6138df91906141ea565b90508115806138ec575080155b156138f5575050565b600b5461390390600a61413c565b82111561391b57600b5461391890600a61413c565b91505b5f806002836022548661392e919061413c565b6139389190614153565b6139429190614153565b905061395661395182866143cb565b613c30565b602254479081905f9061396b90600290614153565b61397590876143cb565b602154613982908561413c565b61398c9190614153565b90505f600260225461399e9190614153565b6139a890886143cb565b6023546139b5908661413c565b6139bf9190614153565b90506139cb81836141ea565b6139d590846143cb565b5f60228190556021819055602355925084158015906139f357505f83115b15613a0257613a028584613d80565b600d546040516001600160a01b039091169082905f81818185875af1925050503d805f8114613a4c576040519150601f19603f3d011682016040523d82523d5f602084013e613a51565b606091505b5050600c546040519197506001600160a01b03169047905f81818185875af1925050503d805f8114613a9e576040519150601f19603f3d011682016040523d82523d5f602084013e613aa3565b606091505b5050505050505050505050565b6001600160a01b0382165f908152602760205260409020805460ff19168215151790556123248282613e17565b6001600160a01b038316613b035760405162461bcd60e51b8152600401610ddc90614343565b6001600160a01b038216613b295760405162461bcd60e51b8152600401610ddc90614388565b6001600160a01b0383165f9081526020819052604090205481811015613ba05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ddc565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290613bd69084906141ea565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c2291815260200190565b60405180910390a350505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110613c6357613c636143de565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613cba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cde91906143f2565b81600181518110613cf157613cf16143de565b6001600160a01b039283166020918202929092010152600954613d179130911684612c5b565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613d4f9085905f9086903090429060040161440d565b5f604051808303815f87803b158015613d66575f80fd5b505af1158015613d78573d5f803e3d5ffd5b505050505050565b600954613d989030906001600160a01b031684612c5b565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613dd690309087905f90819061dead90429060040161418d565b60606040518083038185885af1158015613df2573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610faa9190614318565b6001600160a01b0382165f81815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b5f6020808352835180828501525f5b81811015613ea457858101830151858201604001528201613e88565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613ed8575f80fd5b50565b5f8060408385031215613eec575f80fd5b8235613ef781613ec4565b946020939093013593505050565b5f60208284031215613f15575f80fd5b5035919050565b5f60208284031215613f2c575f80fd5b8135613f3781613ec4565b9392505050565b5f805f60608486031215613f50575f80fd5b8335613f5b81613ec4565b92506020840135613f6b81613ec4565b929592945050506040919091013590565b5f8060408385031215613f8d575f80fd5b50508035926020909101359150565b8015158114613ed8575f80fd5b5f8060408385031215613fba575f80fd5b8235613fc581613ec4565b91506020830135613fd581613f9c565b809150509250929050565b5f60208284031215613ff0575f80fd5b8135613f3781613f9c565b5f805f6060848603121561400d575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215614035575f80fd5b823561404081613ec4565b91506020830135613fd581613ec4565b5f8151808452602080850194508084015f5b838110156140875781516001600160a01b031687529582019590820190600101614062565b509495945050505050565b602081525f613f376020830184614050565b600181811c908216806140b857607f821691505b6020821081036140d657634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215614121575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610dac57610dac614128565b5f8261416d57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215614182575f80fd5b8151613f3781613f9c565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f80604083850312156141d9575f80fd5b505080516020909101519092909150565b80820180821115610dac57610dac614128565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b5f805f6060848603121561432a575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610dac57610dac614128565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215614402575f80fd5b8151613f3781613ec4565b85815284602082015260a060408201525f61442b60a0830186614050565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220bb582c578589252547a6f2a9a36add63361374708c864df53d9e72eb963bc60c64736f6c63430008140033
Deployed Bytecode Sourcemap
10832:27988:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12411:34;;;;;;;;;;-1:-1:-1;12411:34:0;;;;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;12411:34:0;;;;;;;;4184:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10972:27::-;;;;;;;;;;-1:-1:-1;10972:27:0;;;;-1:-1:-1;;;;;10972:27:0;;;;;;-1:-1:-1;;;;;941:32:1;;;923:51;;911:2;896:18;10972:27:0;759:221:1;5239:210:0;;;;;;;;;;-1:-1:-1;5239:210:0;;;;;:::i;:::-;;:::i;36977:667::-;;;;;;;;;;-1:-1:-1;36977:667:0;;;;;:::i;:::-;;:::i;:::-;;35452:185;;;;;;;;;;;;;:::i;12594:63::-;;;;;;;;;;-1:-1:-1;12594:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18805:194;;;;;;;;;;-1:-1:-1;18805:194:0;;;;;:::i;:::-;;:::i;4505:108::-;;;;;;;;;;-1:-1:-1;4593:12:0;;4505:108;;;2024:25:1;;;2012:2;1997:18;4505:108:0;1878:177:1;12248:33:0;;;;;;;;;;;;;;;;18308:300;;;;;;;;;;-1:-1:-1;18308:300:0;;;;;:::i;:::-;;:::i;5457:529::-;;;;;;;;;;-1:-1:-1;5457:529:0;;;;;:::i;:::-;;:::i;12367:37::-;;;;;;;;;;-1:-1:-1;12367:37:0;;;;;;;;;;;19166:456;;;;;;;;;;-1:-1:-1;19166:456:0;;;;;:::i;:::-;;:::i;35878:222::-;;;;;;;;;;;;;:::i;4404:93::-;;;;;;;;;;-1:-1:-1;4404:93:0;;4487:2;2663:36:1;;2651:2;2636:18;4404:93:0;2521:184:1;5994:297:0;;;;;;;;;;-1:-1:-1;5994:297:0;;;;;:::i;:::-;;:::i;11006:21::-;;;;;;;;;;-1:-1:-1;11006:21:0;;;;-1:-1:-1;;;;;11006:21:0;;;34130:357;;;;;;;;;;-1:-1:-1;34130:357:0;;;;;:::i;:::-;;:::i;11420:33::-;;;;;;;;;;-1:-1:-1;11420:33:0;;;;;;;;12091:32;;;;;;;;;;;;;;;;23121:504;;;;;;;;;;-1:-1:-1;23121:504:0;;;;;:::i;:::-;;:::i;34867:349::-;;;;;;;;;;;;;:::i;30492:121::-;;;;;;;;;;-1:-1:-1;30587:18:0;;30572:12;:33;30492:121;;11800:31;;;;;;;;;;;;;;;;18616:181;;;;;;;;;;-1:-1:-1;18616:181:0;;;;;:::i;:::-;;:::i;11875:29::-;;;;;;;;;;;;;;;;34495:320;;;;;;;;;;-1:-1:-1;34495:320:0;;;;;:::i;:::-;;:::i;10904:28::-;;;;;;;;;;;;;;;;12056;;;;;;;;;;;;;;;;11386:25;;;;;;;;;;;;;;;;12168:30;;;;;;;;;;;;;;;;23633:531;;;;;;;;;;;;;:::i;35645:225::-;;;;;;;;;;;;;:::i;11500:31::-;;;;;;;;;;-1:-1:-1;11500:31:0;;;;;;;;;;;4621:177;;;;;;;;;;-1:-1:-1;4621:177:0;;;;;:::i;:::-;;:::i;35268:84::-;;;;;;;;;;;;;:::i;21295:334::-;;;;;;;;;;-1:-1:-1;21295:334:0;;;;;:::i;:::-;;:::i;8715:265::-;;;;;;;;;;-1:-1:-1;8715:265:0;;;;;:::i;:::-;;:::i;22242:427::-;;;;;;;;;;-1:-1:-1;22242:427:0;;;;;:::i;:::-;;:::i;17724:464::-;;;;;;;;;;-1:-1:-1;17724:464:0;;;;;:::i;:::-;;:::i;33300:567::-;;;;;;;;;;-1:-1:-1;33300:567:0;;;;;:::i;:::-;;:::i;37652:1165::-;;;;;;;;;;-1:-1:-1;37652:1165:0;;;;;:::i;:::-;;:::i;11301:43::-;;;;;;;;;;-1:-1:-1;11301:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10870:27;;;;;;;;;;;;;;;;8501:79;;;;;;;;;;-1:-1:-1;8566:6:0;;-1:-1:-1;;;;;8566:6:0;8501:79;;4292:104;;;;;;;;;;;;;:::i;18196:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21637:353::-;;;;;;;;;;-1:-1:-1;21637:353:0;;;;;:::i;:::-;;:::i;35360:84::-;;;;;;;;;;;;;:::i;6299:482::-;;;;;;;;;;-1:-1:-1;6299:482:0;;;;;:::i;:::-;;:::i;11261:33::-;;;;;;;;;;;;;;;;4806:216;;;;;;;;;;-1:-1:-1;4806:216:0;;;;;:::i;:::-;;:::i;12815:57::-;;;;;;;;;;-1:-1:-1;12815:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36108:861;;;;;;;;;;-1:-1:-1;36108:861:0;;;;;:::i;:::-;;:::i;11460:33::-;;;;;;;;;;-1:-1:-1;11460:33:0;;;;;;;;;;;24172:182;;;;;;;;;;-1:-1:-1;24172:182:0;;;;;:::i;:::-;;:::i;22677:436::-;;;;;;;;;;-1:-1:-1;22677:436:0;;;;;:::i;:::-;;:::i;20099:461::-;;;;;;;;;;-1:-1:-1;20099:461:0;;;;;:::i;:::-;;:::i;11145:30::-;;;;;;;;;;-1:-1:-1;11145:30:0;;;;-1:-1:-1;;;;;11145:30:0;;;11718:39;;;;;;;;;;-1:-1:-1;11718:39:0;;;;;;;;12288:32;;;;;;;;;;;;;;;;20630:428;;;;;;;;;;-1:-1:-1;20630:428:0;;;;;:::i;:::-;;:::i;11766:27::-;;;;;;;;;;;;;;;;19630:461;;;;;;;;;;-1:-1:-1;19630:461:0;;;;;:::i;:::-;;:::i;5030:201::-;;;;;;;;;;-1:-1:-1;5030:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5196:18:0;;;5164:7;5196:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5030:201;11064:33;;;;;;;;;;;;;;;;19060:98;;;;;;;;;;;;;:::i;11106:32::-;;;;;;;;;;-1:-1:-1;11106:32:0;;;;-1:-1:-1;;;;;11106:32:0;;;11351:28;;;;;;;;;;-1:-1:-1;11351:28:0;;;;;:::i;:::-;;:::i;11184:37::-;;;;;;;;;;;;;;;;11838:30;;;;;;;;;;;;;;;;8988:281;;;;;;;;;;-1:-1:-1;8988:281:0;;;;;:::i;:::-;;:::i;33937:185::-;;;;;;;;;;;;;:::i;12130:31::-;;;;;;;;;;;;;;;;12327:33;;;;;;;;;;-1:-1:-1;12327:33:0;;;;;;;;10939:24;;;;;;;;;;;;;;;;12207:34;;;;;;;;;;;;;;;;4184:100;4238:13;4271:5;4264:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4184:100;:::o;5239:210::-;5358:4;5380:39;334:10;5403:7;5412:6;5380:8;:39::i;:::-;-1:-1:-1;5437:4:0;5239:210;;;;;:::o;36977:667::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;;;;;;;;;37071:6:::1;::::0;37064:39:::1;::::0;-1:-1:-1;;;37064:39:0;;37097:4:::1;37064:39;::::0;::::1;923:51:1::0;37044:17:0::1;::::0;-1:-1:-1;;;;;37071:6:0::1;::::0;37064:24:::1;::::0;896:18:1;;37064:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37044:59;;37136:1;37124:9;:13;37116:50;;;::::0;-1:-1:-1;;;37116:50:0;;6510:2:1;37116:50:0::1;::::0;::::1;6492:21:1::0;6549:2;6529:18;;;6522:30;6588:26;6568:18;;;6561:54;6632:18;;37116:50:0::1;6308:348:1::0;37116:50:0::1;37179:16;37222:5;37199:19;37211:7:::0;37199:9;:19:::1;:::i;:::-;37198:29;;;;:::i;:::-;37314:6;::::0;37338:9:::1;::::0;37307:52:::1;::::0;-1:-1:-1;;;37307:52:0;;-1:-1:-1;;;;;37338:9:0;;::::1;37307:52;::::0;::::1;7362:51:1::0;7429:18;;;7422:34;;;37179:48:0;;-1:-1:-1;37314:6:0::1;::::0;37307:22:::1;::::0;7335:18:1;;37307:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;37405:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;37405:231:0;;-1:-1:-1;;;;;37405:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;37456:4:::1;::::0;37476:8;;37405:9;;;;37585:10:::1;::::0;37610:15:::1;::::0;37405:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37033:611;;36977:667:::0;:::o;35452:185::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;35520:14:::1;::::0;::::1;;35519:15;35511:52;;;::::0;-1:-1:-1;;;35511:52:0;;8781:2:1;35511:52:0::1;::::0;::::1;8763:21:1::0;8820:2;8800:18;;;8793:30;8859:26;8839:18;;;8832:54;8903:18;;35511:52:0::1;8579:348:1::0;35511:52:0::1;35576:14;:21:::0;;-1:-1:-1;;35576:21:0::1;35593:4;35576:21;::::0;;35613:16:::1;::::0;::::1;::::0;35576:14:::1;::::0;35613:16:::1;35452:185::o:0;18805:194::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;18891:13:::1;::::0;::::1;::::0;::::1;;;18890:14;18882:68;;;::::0;-1:-1:-1;;;18882:68:0;;9134:2:1;18882:68:0::1;::::0;::::1;9116:21:1::0;9173:2;9153:18;;;9146:30;9212:34;9192:18;;;9185:62;-1:-1:-1;;;9263:18:1;;;9256:39;9312:19;;18882:68:0::1;8932:405:1::0;18882:68:0::1;18961:9;:30:::0;;-1:-1:-1;;;;;;18961:30:0::1;-1:-1:-1::0;;;;;18961:30:0;;;::::1;::::0;;;::::1;::::0;;18805:194::o;18308:300::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;18401:15:::1;::::0;;;::::1;;;18379:114;;;::::0;-1:-1:-1;;;18379:114:0;;9544:2:1;18379:114:0::1;::::0;::::1;9526:21:1::0;9583:2;9563:18;;;9556:30;9622:34;9602:18;;;9595:62;-1:-1:-1;;;9673:18:1;;;9666:47;9730:19;;18379:114:0::1;9342:413:1::0;18379:114:0::1;-1:-1:-1::0;;;;;18513:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;18512:20;18504:59;;;::::0;-1:-1:-1;;;18504:59:0;;9962:2:1;18504:59:0::1;::::0;::::1;9944:21:1::0;10001:2;9981:18;;;9974:30;10040:28;10020:18;;;10013:56;10086:18;;18504:59:0::1;9760:350:1::0;18504:59:0::1;-1:-1:-1::0;;;;;18574:19:0::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;18574:26:0::1;18596:4;18574:26;::::0;;18308:300::o;5457:529::-;5597:4;5614:36;5624:6;5632:9;5643:6;5614:9;:36::i;:::-;-1:-1:-1;;;;;5690:19:0;;5663:24;5690:19;;;:11;:19;;;;;;;;334:10;5690:33;;;;;;;;5756:26;;;;5734:116;;;;-1:-1:-1;;;5734:116:0;;10317:2:1;5734:116:0;;;10299:21:1;10356:2;10336:18;;;10329:30;10395:34;10375:18;;;10368:62;-1:-1:-1;;;10446:18:1;;;10439:38;10494:19;;5734:116:0;10115:404:1;5734:116:0;5886:57;5895:6;334:10;5936:6;5917:16;:25;5886:8;:57::i;:::-;-1:-1:-1;5974:4:0;;5457:529;-1:-1:-1;;;;5457:529:0:o;19166:456::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;19303:4:::1;19295;19274:13;4593:12:::0;;;4505:108;19274:13:::1;:17;::::0;19290:1:::1;19274:17;:::i;:::-;19273:26;;;;:::i;:::-;19272:35;;;;:::i;:::-;19262:6;:45;;19240:136;;;::::0;-1:-1:-1;;;19240:136:0;;10726:2:1;19240:136:0::1;::::0;::::1;10708:21:1::0;10765:2;10745:18;;;10738:30;10804:34;10784:18;;;10777:62;-1:-1:-1;;;10855:18:1;;;10848:39;10904:19;;19240:136:0::1;10524:405:1::0;19240:136:0::1;19449:4;19442:3;19421:13;4593:12:::0;;;4505:108;19421:13:::1;:17;::::0;19437:1:::1;19421:17;:::i;:::-;19420:25;;;;:::i;:::-;19419:34;;;;:::i;:::-;19409:6;:44;;19387:135;;;::::0;-1:-1:-1;;;19387:135:0;;11136:2:1;19387:135:0::1;::::0;::::1;11118:21:1::0;11175:2;11155:18;;;11148:30;11214:34;11194:18;;;11187:62;-1:-1:-1;;;11265:18:1;;;11258:39;11314:19;;19387:135:0::1;10934:405:1::0;19387:135:0::1;19548:17;:6:::0;19558::::1;19548:17;:::i;:::-;19533:12;:32:::0;;;19581:33:::1;::::0;2024:25:1;;;19581:33:0::1;::::0;2012:2:1;1997:18;19581:33:0::1;;;;;;;;19166:456:::0;:::o;35878:222::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;35964:15:::1;::::0;;;::::1;;;35942:114;;;::::0;-1:-1:-1;;;35942:114:0;;11546:2:1;35942:114:0::1;::::0;::::1;11528:21:1::0;11585:2;11565:18;;;11558:30;11624:34;11604:18;;;11597:62;-1:-1:-1;;;11675:18:1;;;11668:47;11732:19;;35942:114:0::1;11344:413:1::0;35942:114:0::1;36069:15;:23:::0;;-1:-1:-1;;36069:23:0::1;::::0;;35878:222::o;5994:297::-;334:10;6109:4;6203:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6203:34:0;;;;;;;;;;6109:4;;6131:130;;6181:7;;6203:47;;6240:10;;6203:47;:::i;:::-;6131:8;:130::i;34130:357::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34263:32:0;::::1;34241:120;;;;-1:-1:-1::0;;;34241:120:0::1;;;;;;;:::i;:::-;34372:17;:47:::0;;-1:-1:-1;;;;;;34372:47:0::1;-1:-1:-1::0;;;;;34372:47:0;::::1;::::0;;::::1;::::0;;;34435:44:::1;::::0;::::1;::::0;-1:-1:-1;;34435:44:0::1;34130:357:::0;:::o;23121:504::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;23212:18:::1;::::0;::::1;::::0;::::1;;;23204:63;;;::::0;-1:-1:-1;;;23204:63:0;;12501:2:1;23204:63:0::1;::::0;::::1;12483:21:1::0;;;12520:18;;;12513:30;12579:34;12559:18;;;12552:62;12631:18;;23204:63:0::1;12299:356:1::0;23204:63:0::1;23280:16;:22:::0;;;23331:1:::1;23313:15;:19:::0;;;23343:14:::1;:18:::0;;;23387:34:::1;23331:1:::0;23299:3;23387:34:::1;:::i;:::-;:51;;;;:::i;:::-;23372:12;:66:::0;23451:17:::1;:24:::0;;;-1:-1:-1;23486:16:0::1;:20:::0;;;23517:15:::1;:19:::0;;;23563:36:::1;-1:-1:-1::0;23471:4:0;23563:36:::1;:::i;:::-;:54;;;;:::i;:::-;23547:13;:70:::0;-1:-1:-1;;23121:504:0:o;34867:349::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;34972:18:::1;;34944:24;34962:4;34944:9;:24::i;:::-;:46;;34922:160;;;::::0;;-1:-1:-1;;;34922:160:0;;12862:2:1;34922:160:0::1;::::0;::::1;12844:21:1::0;12881:18;;;12874:30;;;;12940:34;12920:18;;;12913:62;13011:34;12991:18;;;12984:62;13063:19;;34922:160:0::1;12660:428:1::0;34922:160:0::1;35093:8;:15:::0;;-1:-1:-1;;;;35093:15:0::1;-1:-1:-1::0;;;35093:15:0::1;::::0;;35119:10:::1;:8;:10::i;:::-;35140:8;:16:::0;;-1:-1:-1;;;;35140:16:0::1;::::0;;35172:36:::1;::::0;35192:15:::1;2024:25:1::0;;35172:36:0::1;::::0;2012:2:1;1997:18;35172:36:0::1;;;;;;;34867:349::o:0;18616:181::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18697:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;18689:62;;;::::0;-1:-1:-1;;;18689:62:0;;13295:2:1;18689:62:0::1;::::0;::::1;13277:21:1::0;13334:2;13314:18;;;13307:30;13373:32;13353:18;;;13346:60;13423:18;;18689:62:0::1;13093:354:1::0;18689:62:0::1;-1:-1:-1::0;;;;;18762:19:0::1;18784:5;18762:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;18762:27:0::1;::::0;;18616:181::o;34495:320::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34601:30:0;::::1;34579:118;;;;-1:-1:-1::0;;;34579:118:0::1;;;;;;;:::i;:::-;34708:15;:43:::0;;-1:-1:-1;;;;;;34708:43:0::1;-1:-1:-1::0;;;;;34708:43:0;::::1;::::0;;::::1;::::0;;;34767:40:::1;::::0;::::1;::::0;-1:-1:-1;;34767:40:0::1;34495:320:::0;:::o;23633:531::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;23705:25:::1;::::0;23686:16:::1;:44:::0;;;23759:24:::1;::::0;23741:15:::1;:42:::0;;;23811:23:::1;::::0;23794:14:::1;:40:::0;;;23811:23;23860:34:::1;::::0;23759:24;23860:34:::1;:::i;:::-;:51;;;;:::i;:::-;23845:12;:66:::0;23944:25:::1;::::0;23924:17:::1;:45:::0;;;23999:24:::1;::::0;23980:16:::1;:43:::0;;;24052:23:::1;::::0;24034:15:::1;:41:::0;;;24052:23;24102:36:::1;::::0;23999:24;24102:36:::1;:::i;:::-;:54;;;;:::i;:::-;24086:13;:70:::0;23633:531::o;35645:225::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;35724:18:::1;::::0;::::1;::::0;::::1;;;35716:63;;;::::0;-1:-1:-1;;;35716:63:0;;13654:2:1;35716:63:0::1;::::0;::::1;13636:21:1::0;;;13673:18;;;13666:30;13732:34;13712:18;;;13705:62;13784:18;;35716:63:0::1;13452:356:1::0;35716:63:0::1;35792:18;:26:::0;;-1:-1:-1;;35792:26:0::1;::::0;;35834:28:::1;::::0;::::1;::::0;35813:5:::1;::::0;35834:28:::1;35645:225::o:0;4621:177::-;-1:-1:-1;;;;;4772:18:0;4740:7;4772:18;;;;;;;;;;;;4621:177::o;35268:84::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;35322:14:::1;:22:::0;;-1:-1:-1;;35322:22:0::1;::::0;;35268:84::o;21295:334::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;21415:4:::1;21410:155;;21472:6;::::0;-1:-1:-1;;;;;21472:6:0;;::::1;21462:16:::0;;::::1;::::0;21436:117:::1;;;::::0;-1:-1:-1;;;21436:117:0;;14015:2:1;21436:117:0::1;::::0;::::1;13997:21:1::0;14054:2;14034:18;;;14027:30;14093:34;14073:18;;;14066:62;-1:-1:-1;;;14144:18:1;;;14137:37;14191:19;;21436:117:0::1;13813:403:1::0;21436:117:0::1;-1:-1:-1::0;;;;;21575:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;21575:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21295:334::o;8715:265::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;8842:15:::1;8834:52;;;::::0;-1:-1:-1;;;8834:52:0;;14423:2:1;8834:52:0::1;::::0;::::1;14405:21:1::0;14462:2;14442:18;;;14435:30;14501:26;14481:18;;;14474:54;14545:18;;8834:52:0::1;14221:348:1::0;8834:52:0::1;8923:6;::::0;8902:40:::1;::::0;8939:1:::1;::::0;-1:-1:-1;;;;;8923:6:0::1;::::0;8902:40:::1;::::0;8939:1;;8902:40:::1;-1:-1:-1::0;8953:6:0::1;:19:::0;;-1:-1:-1;;;;;;8953:19:0::1;::::0;;8715:265::o;22242:427::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;22398:16:::1;:33:::0;;;22442:15:::1;:31:::0;;;22484:14:::1;:29:::0;;;22501:12;22539:34:::1;22460:13:::0;22417:14;22539:34:::1;:::i;:::-;:51;;;;:::i;:::-;22524:12;:66:::0;;;22625:2:::1;-1:-1:-1::0;22609:18:0::1;22601:60;;;::::0;-1:-1:-1;;;22601:60:0;;14776:2:1;22601:60:0::1;::::0;::::1;14758:21:1::0;14815:2;14795:18;;;14788:30;14854:31;14834:18;;;14827:59;14903:18;;22601:60:0::1;14574:353:1::0;22601:60:0::1;22242:427:::0;;;:::o;17724:464::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;17812:13:::1;::::0;::::1;::::0;::::1;;;17811:14;17803:50;;;::::0;-1:-1:-1;;;17803:50:0;;15134:2:1;17803:50:0::1;::::0;::::1;15116:21:1::0;15173:2;15153:18;;;15146:30;15212:25;15192:18;;;15185:53;15255:18;;17803:50:0::1;14932:347:1::0;17803:50:0::1;17906:2;17886:16;:22;;17864:111;;;;-1:-1:-1::0;;;17864:111:0::1;;;;;;;:::i;:::-;17986:13;:20:::0;;-1:-1:-1;;18017:18:0;;;;;18067:12:::1;18046:18;:33:::0;;;18111:37:::1;::::0;18132:16;;18111:37:::1;:::i;:::-;18090:18;:58:::0;18164:16:::1;::::0;::::1;::::0;;;::::1;17724:464:::0;:::o;33300:567::-;8628:6;;33414:10;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33450:20:0;::::1;33442:59;;;::::0;-1:-1:-1;;;33442:59:0;;15894:2:1;33442:59:0::1;::::0;::::1;15876:21:1::0;15933:2;15913:18;;;15906:30;15972:28;15952:18;;;15945:56;16018:18;;33442:59:0::1;15692:350:1::0;33442:59:0::1;-1:-1:-1::0;;;;;33534:23:0;::::1;33552:4;33534:23;;::::0;:41:::1;;-1:-1:-1::0;33562:13:0::1;::::0;::::1;::::0;::::1;;;33561:14;33534:41;33512:143;;;::::0;-1:-1:-1;;;33512:143:0;;16249:2:1;33512:143:0::1;::::0;::::1;16231:21:1::0;16288:2;16268:18;;;16261:30;16327:34;16307:18;;;16300:62;-1:-1:-1;;;16378:18:1;;;16371:50;16438:19;;33512:143:0::1;16047:416:1::0;33512:143:0::1;33693:39;::::0;-1:-1:-1;;;33693:39:0;;33726:4:::1;33693:39;::::0;::::1;923:51:1::0;33666:24:0::1;::::0;-1:-1:-1;;;;;33693:24:0;::::1;::::0;::::1;::::0;896:18:1;;33693:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33751:46;::::0;-1:-1:-1;;;33751:46:0;;-1:-1:-1;;;;;7380:32:1;;;33751:46:0::1;::::0;::::1;7362:51:1::0;7429:18;;;7422:34;;;33666:66:0;;-1:-1:-1;33751:23:0;;::::1;::::0;::::1;::::0;7335:18:1;;33751:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33813;::::0;;-1:-1:-1;;;;;7380:32:1;;7362:51;;7444:2;7429:18;;7422:34;;;33743:54:0;;-1:-1:-1;33813:46:0::1;::::0;7335:18:1;33813:46:0::1;;;;;;;33431:436;33300:567:::0;;;;:::o;37652:1165::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;37733:13:::1;::::0;::::1;::::0;::::1;;;37732:14;37724:70;;;;-1:-1:-1::0;;;37724:70:0::1;;;;;;;:::i;:::-;37846:2;37827:16;:21;37805:110;;;;-1:-1:-1::0;;;37805:110:0::1;;;;;;;:::i;:::-;37963:13;:20:::0;;-1:-1:-1;;37994:18:0;;;;;38044:12:::1;38023:18;:33:::0;;;38088:37:::1;::::0;38109:16;;38088:37:::1;:::i;:::-;38067:18;:58:::0;38141:16:::1;::::0;::::1;::::0;;;::::1;38246:1;38222:21;:25;38200:110;;;;-1:-1:-1::0;;;38200:110:0::1;;;;;;;:::i;:::-;38370:1;38343:24;38361:4;38343:9;:24::i;:::-;:28;38321:116;;;::::0;-1:-1:-1;;;38321:116:0;;17486:2:1;38321:116:0::1;::::0;::::1;17468:21:1::0;17525:2;17505:18;;;17498:30;17564:34;17544:18;;;17537:62;-1:-1:-1;;;17615:18:1;;;17608:36;17661:19;;38321:116:0::1;17284:402:1::0;38321:116:0::1;38482:9;::::0;38450:69:::1;::::0;38467:4:::1;::::0;-1:-1:-1;;;;;38482:9:0::1;38494:24;38467:4:::0;38494:9:::1;:24::i;38450:69::-;38532:9;::::0;-1:-1:-1;;;;;38532:9:0::1;:25;38565:21;38610:4;38630:24;38610:4:::0;38630:9:::1;:24::i;:::-;38669:1;38712::::0;38763:4:::1;38783:15;38532:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37652:1165:::0;:::o;4292:104::-;4348:13;4381:7;4374:14;;;;;:::i;18196:104::-;18245:16;18281:11;18274:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18274:18:0;;;;;;;;;;;;;;;;;;;;;;18196:104;:::o;21637:353::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;21783:6:::1;::::0;-1:-1:-1;;;;;21783:6:0;;::::1;21775:14:::0;;::::1;::::0;21753:121:::1;;;::::0;-1:-1:-1;;;21753:121:0;;18816:2:1;21753:121:0::1;::::0;::::1;18798:21:1::0;18855:2;18835:18;;;18828:30;18894:34;18874:18;;;18867:62;18965:27;18945:18;;;18938:55;19010:19;;21753:121:0::1;18614:421:1::0;21753:121:0::1;21885:41;21914:4;21920:5;21885:28;:41::i;:::-;21942:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;21942:40:0;::::1;::::0;::::1;::::0;;;::::1;21637:353:::0;;:::o;35360:84::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;35415:14:::1;:21:::0;;-1:-1:-1;;35415:21:0::1;35432:4;35415:21;::::0;;35360:84::o;6299:482::-;334:10;6419:4;6468:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6468:34:0;;;;;;;;;;6535:35;;;;6513:122;;;;-1:-1:-1;;;6513:122:0;;19242:2:1;6513:122:0;;;19224:21:1;19281:2;19261:18;;;19254:30;19320:34;19300:18;;;19293:62;-1:-1:-1;;;19371:18:1;;;19364:35;19416:19;;6513:122:0;19040:401:1;6513:122:0;6671:67;334:10;6694:7;6722:15;6703:16;:34;6671:8;:67::i;:::-;-1:-1:-1;6769:4:0;;6299:482;-1:-1:-1;;;6299:482:0:o;4806:216::-;4928:4;4950:42;334:10;4974:9;4985:6;4950:9;:42::i;36108:861::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;36180:12:::1;36172:56;;;::::0;-1:-1:-1;;;36172:56:0;;19648:2:1;36172:56:0::1;::::0;::::1;19630:21:1::0;19687:2;19667:18;;;19660:30;19726:33;19706:18;;;19699:61;19777:18;;36172:56:0::1;19446:355:1::0;36172:56:0::1;36248:13;::::0;::::1;::::0;::::1;;;36247:14;36239:70;;;;-1:-1:-1::0;;;36239:70:0::1;;;;;;;:::i;:::-;36398:1;36374:21;:25;36352:110;;;;-1:-1:-1::0;;;36352:110:0::1;;;;;;;:::i;24172:182::-:0;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24257:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;24257:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24312:34;;154:41:1;;;24312:34:0::1;::::0;127:18:1;24312:34:0::1;;;;;;;24172:182:::0;;:::o;22677:436::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;22834:17:::1;:34:::0;;;22879:16:::1;:32:::0;;;22922:15:::1;:30:::0;;;22940:12;22979:36:::1;22898:13:::0;22854:14;22979:36:::1;:::i;:::-;:54;;;;:::i;:::-;22963:13;:70:::0;;;23069:2:::1;-1:-1:-1::0;23052:19:0::1;23044:61;;;::::0;-1:-1:-1;;;23044:61:0;;20008:2:1;23044:61:0::1;::::0;::::1;19990:21:1::0;20047:2;20027:18;;;20020:30;20086:31;20066:18;;;20059:59;20135:18;;23044:61:0::1;19806:353:1::0;20099:461:0;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;20239:4:::1;20231;20210:13;4593:12:::0;;;4505:108;20210:13:::1;:17;::::0;20226:1:::1;20210:17;:::i;:::-;20209:26;;;;:::i;:::-;20208:35;;;;:::i;:::-;20198:6;:45;;20176:139;;;::::0;-1:-1:-1;;;20176:139:0;;20366:2:1;20176:139:0::1;::::0;::::1;20348:21:1::0;20405:2;20385:18;;;20378:30;20444:34;20424:18;;;20417:62;-1:-1:-1;;;20495:18:1;;;20488:42;20547:19;;20176:139:0::1;20164:408:1::0;20176:139:0::1;20388:4;20381:3;20360:13;4593:12:::0;;;4505:108;20360:13:::1;:17;::::0;20376:1:::1;20360:17;:::i;:::-;20359:25;;;;:::i;:::-;20358:34;;;;:::i;:::-;20348:6;:44;;20326:137;;;::::0;-1:-1:-1;;;20326:137:0;;20779:2:1;20326:137:0::1;::::0;::::1;20761:21:1::0;20818:2;20798:18;;;20791:30;20857:34;20837:18;;;20830:62;-1:-1:-1;;;20908:18:1;;;20901:41;20959:19;;20326:137:0::1;20577:407:1::0;20326:137:0::1;20486:17;:6:::0;20496::::1;20486:17;:::i;:::-;20474:9;:29:::0;;;20519:33:::1;::::0;2024:25:1;;;20519:33:0::1;::::0;2012:2:1;1997:18;20519:33:0::1;1878:177:1::0;20630:428:0;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;20770:6:::1;20749:13;4593:12:::0;;;4505:108;20749:13:::1;:17;::::0;20765:1:::1;20749:17;:::i;:::-;20748:28;;;;:::i;:::-;20735:9;:41;;20713:144;;;::::0;-1:-1:-1;;;20713:144:0;;21191:2:1;20713:144:0::1;::::0;::::1;21173:21:1::0;21230:2;21210:18;;;21203:30;21269:34;21249:18;;;21242:62;-1:-1:-1;;;21320:18:1;;;21313:51;21381:19;;20713:144:0::1;20989:417:1::0;20713:144:0::1;20925:4;20904:13;4593:12:::0;;;4505:108;20904:13:::1;:17;::::0;20920:1:::1;20904:17;:::i;:::-;20903:26;;;;:::i;:::-;20890:9;:39;;20868:141;;;::::0;-1:-1:-1;;;20868:141:0;;21613:2:1;20868:141:0::1;::::0;::::1;21595:21:1::0;21652:2;21632:18;;;21625:30;21691:34;21671:18;;;21664:62;-1:-1:-1;;;21742:18:1;;;21735:50;21802:19;;20868:141:0::1;21411:416:1::0;20868:141:0::1;21020:18;:30:::0;20630:428::o;19630:461::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;19768:4:::1;19760;19739:13;4593:12:::0;;;4505:108;19739:13:::1;:17;::::0;19755:1:::1;19739:17;:::i;:::-;19738:26;;;;:::i;:::-;19737:35;;;;:::i;:::-;19727:6;:45;;19705:137;;;::::0;-1:-1:-1;;;19705:137:0;;22034:2:1;19705:137:0::1;::::0;::::1;22016:21:1::0;22073:2;22053:18;;;22046:30;22112:34;22092:18;;;22085:62;-1:-1:-1;;;22163:18:1;;;22156:40;22213:19;;19705:137:0::1;21832:406:1::0;19705:137:0::1;19915:4;19908:3;19887:13;4593:12:::0;;;4505:108;19887:13:::1;:17;::::0;19903:1:::1;19887:17;:::i;:::-;19886:25;;;;:::i;:::-;19885:34;;;;:::i;:::-;19875:6;:44;;19853:135;;;::::0;-1:-1:-1;;;19853:135:0;;22445:2:1;19853:135:0::1;::::0;::::1;22427:21:1::0;22484:2;22464:18;;;22457:30;22523:34;22503:18;;;22496:62;-1:-1:-1;;;22574:18:1;;;22567:39;22623:19;;19853:135:0::1;22243:405:1::0;19853:135:0::1;20015:17;:6:::0;20025::::1;20015:17;:::i;:::-;19999:13;:33:::0;;;20048:35:::1;::::0;2024:25:1;;;20048:35:0::1;::::0;2012:2:1;1997:18;20048:35:0::1;1878:177:1::0;19060:98:0;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;19122:20:::1;:28:::0;;-1:-1:-1;;19122:28:0::1;::::0;;19060:98::o;11351:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11351:28:0;;-1:-1:-1;11351:28:0;:::o;8988:281::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9091:22:0;::::1;9069:110;;;::::0;-1:-1:-1;;;9069:110:0;;22855:2:1;9069:110:0::1;::::0;::::1;22837:21:1::0;22894:2;22874:18;;;22867:30;22933:34;22913:18;;;22906:62;-1:-1:-1;;;22984:18:1;;;22977:36;23030:19;;9069:110:0::1;22653:402:1::0;9069:110:0::1;9216:6;::::0;9195:38:::1;::::0;-1:-1:-1;;;;;9195:38:0;;::::1;::::0;9216:6:::1;::::0;9195:38:::1;::::0;9216:6:::1;::::0;9195:38:::1;9244:6;:17:::0;;-1:-1:-1;;;;;;9244:17:0::1;-1:-1:-1::0;;;;;9244:17:0;;;::::1;::::0;;;::::1;::::0;;8988:281::o;33937:185::-;8628:6;;-1:-1:-1;;;;;8628:6:0;334:10;8628:22;8620:67;;;;-1:-1:-1;;;8620:67:0;;;;;;;:::i;:::-;34032:82:::1;::::0;33995:12:::1;::::0;34040:10:::1;::::0;34064:21:::1;::::0;33995:12;34032:82;33995:12;34032:82;34064:21;34040:10;34032:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7770:380:::0;-1:-1:-1;;;;;7906:19:0;;7898:68;;;;-1:-1:-1;;;7898:68:0;;23472:2:1;7898:68:0;;;23454:21:1;23511:2;23491:18;;;23484:30;23550:34;23530:18;;;23523:62;-1:-1:-1;;;23601:18:1;;;23594:34;23645:19;;7898:68:0;23270:400:1;7898:68:0;-1:-1:-1;;;;;7985:21:0;;7977:68;;;;-1:-1:-1;;;7977:68:0;;23877:2:1;7977:68:0;;;23859:21:1;23916:2;23896:18;;;23889:30;23955:34;23935:18;;;23928:62;-1:-1:-1;;;24006:18:1;;;23999:32;24048:19;;7977:68:0;23675:398:1;7977:68:0;-1:-1:-1;;;;;8058:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8110:32;;2024:25:1;;;8110:32:0;;1997:18:1;8110:32:0;;;;;;;7770:380;;;:::o;24362:6122::-;-1:-1:-1;;;;;24494:18:0;;24486:68;;;;-1:-1:-1;;;24486:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24573:16:0;;24565:64;;;;-1:-1:-1;;;24565:64:0;;;;;;;:::i;:::-;24657:1;24648:6;:10;24640:52;;;;-1:-1:-1;;;24640:52:0;;25090:2:1;24640:52:0;;;25072:21:1;25129:2;25109:18;;;25102:30;25168:31;25148:18;;;25141:59;25217:18;;24640:52:0;24888:353:1;24640:52:0;24710:13;;;;;;;24705:183;;-1:-1:-1;;;;;24766:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24795:23:0;;;;;;:19;:23;;;;;;;;24766:52;24740:136;;;;-1:-1:-1;;;24740:136:0;;25448:2:1;24740:136:0;;;25430:21:1;25487:2;25467:18;;;25460:30;-1:-1:-1;;;25506:18:1;;;25499:52;25568:18;;24740:136:0;25246:346:1;24740:136:0;30587:18;;30572:12;:33;24904:26;:43;;;;-1:-1:-1;24934:13:0;;;;;;;24904:43;24900:268;;;-1:-1:-1;;;;;24991:17:0;;;;;;:11;:17;;;;;;;;24990:18;;:35;;-1:-1:-1;8566:6:0;;-1:-1:-1;;;;;25012:13:0;;;8566:6;;25012:13;24990:35;:60;;;-1:-1:-1;;;;;;25029:21:0;;25043:6;25029:21;24990:60;24964:192;;;;-1:-1:-1;;;24964:192:0;;25799:2:1;24964:192:0;;;25781:21:1;25838:2;25818:18;;;25811:30;25877:34;25857:18;;;25850:62;25948:34;25928:18;;;25921:62;-1:-1:-1;;;25999:19:1;;;25992:37;26046:19;;24964:192:0;25597:474:1;24964:192:0;25184:14;;;;25180:2217;;;8566:6;;-1:-1:-1;;;;;25237:15:0;;;8566:6;;25237:15;;;;:49;;-1:-1:-1;8566:6:0;;-1:-1:-1;;;;;25273:13:0;;;8566:6;;25273:13;;25237:49;:91;;;;-1:-1:-1;;;;;;25307:21:0;;25321:6;25307:21;;25237:91;:138;;;;-1:-1:-1;;;;;;25350:25:0;;;;;;:19;:25;;;;;;;;25349:26;25237:138;:183;;;;-1:-1:-1;;;;;;25397:23:0;;;;;;:19;:23;;;;;;;;25396:24;25237:183;25215:2171;;;25459:20;;;;25455:692;;;25522:9;;-1:-1:-1;;;;;25508:24:0;;;25522:9;;25508:24;;;;:49;;-1:-1:-1;25550:6:0;;-1:-1:-1;;;;;25536:21:0;;;25550:6;;25536:21;;25508:49;25504:624;;;25699:16;25714:1;25699:12;:16;:::i;:::-;25653:9;25624:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;25820:16:0;25835:1;25820:12;:16;:::i;:::-;-1:-1:-1;;;;;25752:32:0;;;;;;:28;:32;;;;;;:84;25624:212;25586:363;;;;-1:-1:-1;;;25586:363:0;;26411:2:1;25586:363:0;;;26393:21:1;26450:2;26430:18;;;26423:30;26489:34;26469:18;;;26462:62;-1:-1:-1;;;26540:18:1;;;26533:51;26601:19;;25586:363:0;26209:417:1;25586:363:0;26005:9;25976:39;;;;:28;:39;;;;;;26018:12;25976:54;;;;-1:-1:-1;;;;;26057:32:0;;;;;;:47;25504:624;-1:-1:-1;;;;;26221:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;26278:35:0;;;;;;:31;:35;;;;;;;;26277:36;26221:92;26195:1176;;;26400:12;;26390:6;:22;;26356:148;;;;-1:-1:-1;;;26356:148:0;;26833:2:1;26356:148:0;;;26815:21:1;26872:2;26852:18;;;26845:30;26911:34;26891:18;;;26884:62;-1:-1:-1;;;26962:18:1;;;26955:38;27010:19;;26356:148:0;26631:404:1;26356:148:0;26587:9;;26570:13;26580:2;26570:9;:13::i;:::-;26561:22;;:6;:22;:::i;:::-;:35;;26527:140;;;;-1:-1:-1;;;26527:140:0;;27242:2:1;26527:140:0;;;27224:21:1;27281:2;27261:18;;;27254:30;-1:-1:-1;;;27300:18:1;;;27293:49;27359:18;;26527:140:0;27040:343:1;26527:140:0;26195:1176;;;-1:-1:-1;;;;;26765:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;26820:37:0;;;;;;:31;:37;;;;;;;;26819:38;26765:92;26739:632;;;26908:14;;;;26900:46;;;;-1:-1:-1;;;26900:46:0;;27590:2:1;26900:46:0;;;27572:21:1;27629:2;27609:18;;;27602:30;-1:-1:-1;;;27648:18:1;;;27641:49;27707:18;;26900:46:0;27388:343:1;26900:46:0;27013:13;;27003:6;:23;;26969:151;;;;-1:-1:-1;;;26969:151:0;;27938:2:1;26969:151:0;;;27920:21:1;27977:2;27957:18;;;27950:30;28016:34;27996:18;;;27989:62;-1:-1:-1;;;28067:18:1;;;28060:40;28117:19;;26969:151:0;27736:406:1;26739:632:0;-1:-1:-1;;;;;27151:35:0;;;;;;:31;:35;;;;;;;;27146:225;;27271:9;;27254:13;27264:2;27254:9;:13::i;:::-;27245:22;;:6;:22;:::i;:::-;:35;;27211:140;;;;-1:-1:-1;;;27211:140:0;;27242:2:1;27211:140:0;;;27224:21:1;27281:2;27261:18;;;27254:30;-1:-1:-1;;;27300:18:1;;;27293:49;27359:18;;27211:140:0;27040:343:1;27211:140:0;27409:28;27440:24;27458:4;27440:9;:24::i;:::-;27516:18;;27409:55;;-1:-1:-1;27492:42:0;;;;;;;27565:22;;-1:-1:-1;27576:11:0;;;;;;;27565:22;:35;;;;-1:-1:-1;27592:8:0;;-1:-1:-1;;;27592:8:0;;;;27591:9;27565:35;:68;;;;-1:-1:-1;;;;;;27604:29:0;;;;;;:25;:29;;;;;;;;27565:68;27547:196;;;27660:8;:15;;-1:-1:-1;;;;27660:15:0;-1:-1:-1;;;27660:15:0;;;27690:10;:8;:10::i;:::-;27715:8;:16;;-1:-1:-1;;;;27715:16:0;;;27547:196;-1:-1:-1;;;;;27874:25:0;;27755:12;27874:25;;;:19;:25;;;;;;27770:4;;27874:25;;;:52;;-1:-1:-1;;;;;;27903:23:0;;;;;;:19;:23;;;;;;;;27874:52;27870:100;;;-1:-1:-1;27953:5:0;27870:100;27982:12;28087:7;28083:2348;;;30587:18;;30572:12;:33;28170:152;;;;28246:8;28231:12;;:23;;;;:::i;:::-;28221:6;:33;;:100;;;;;28309:12;28283:18;;28304:1;28283:22;;;;:::i;:::-;:38;;28221:100;28169:206;;;;-1:-1:-1;;;;;;28344:31:0;;;;;;:25;:31;;;;;;;;28169:206;:257;;;;-1:-1:-1;;;;;;28397:29:0;;;;;;:25;:29;;;;;;;;28396:30;28169:257;:302;;;;-1:-1:-1;;;;;;28448:23:0;;;;;;:19;:23;;;;;;;;28447:24;28169:302;:339;;;;;28507:1;28492:12;;:16;28169:339;28147:2135;;;30587:18;;30572:12;:33;28543:332;;28854:1;28838:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;28543:332:0;-1:-1:-1;;;;;28900:15:0;;;;;;:11;:15;;;;;;;;28895:216;;-1:-1:-1;;;;;28940:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;28940:22:0;28958:4;28940:22;;;;;;28985:10;:15;;28958:4;;28985:10;;:15;;28958:4;;28985:15;:::i;:::-;;;;-1:-1:-1;;29023:11:0;:20;;;;;;;-1:-1:-1;29023:20:0;;;;;;;;-1:-1:-1;;;;;;29023:20:0;-1:-1:-1;;;;;29023:20:0;;;;;;;;29071;;923:51:1;;;29071:20:0;;911:2:1;896:18;29071:20:0;;;;;;;28895:216;29154:3;29139:11;:6;29148:2;29139:11;:::i;:::-;29138:19;;;;:::i;:::-;29131:26;;29225:12;;29206:15;;29199:4;:22;;;;:::i;:::-;29198:39;;;;:::i;:::-;29176:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29307:12:0;;29287:16;;29280:23;;:4;:23;:::i;:::-;29279:40;;;;:::i;:::-;29256:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29385:12:0;;29367:14;;29360:21;;:4;:21;:::i;:::-;29359:38;;;;:::i;:::-;29338:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;28147:2135:0;;-1:-1:-1;28147:2135:0;;-1:-1:-1;;;;;29460:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;29509:1;29493:13;;:17;29460:50;29456:826;;;29565:3;29548:13;;29539:6;:22;;;;:::i;:::-;29538:30;;;;:::i;:::-;29531:37;;29637:13;;29617:16;;29610:4;:23;;;;:::i;:::-;29609:41;;;;:::i;:::-;29587:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29763:13:0;;29721:17;;29714:24;;:4;:24;:::i;:::-;29713:63;;;;:::i;:::-;29669:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;29843:13:0;;29824:15;;29817:22;;:4;:22;:::i;29456:826::-;-1:-1:-1;;;;;29918:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;29968:1;29953:12;;:16;29918:51;29914:368;;;30023:3;30007:12;;29998:6;:21;;;;:::i;:::-;29997:29;;;;:::i;:::-;29990:36;;30094:12;;30075:15;;30068:4;:22;;;;:::i;:::-;30067:39;;;;:::i;:::-;30045:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;30176:12:0;;30156:16;;30149:23;;:4;:23;:::i;:::-;30148:40;;;;:::i;:::-;30125:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30254:12:0;;30236:14;;30229:21;;:4;:21;:::i;:::-;30228:38;;;;:::i;:::-;30207:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29914:368:0;30302:8;;30298:91;;30331:42;30347:4;30361;30368;30331:15;:42::i;:::-;30405:14;30415:4;30405:14;;:::i;:::-;;;28083:2348;30443:33;30459:4;30465:2;30469:6;30443:15;:33::i;:::-;24475:6009;;;;24362:6122;;;:::o;31717:1575::-;31756:23;31782:24;31800:4;31782:9;:24::i;:::-;31756:50;;31817:25;31914:17;;31879:19;;31845:18;;:53;;;;:::i;:::-;:86;;;;:::i;:::-;31817:114;-1:-1:-1;31948:20:0;;;:46;;-1:-1:-1;31972:22:0;;31948:46;31944:85;;;32011:7;;31717:1575::o;31944:85::-;32063:18;;:23;;32084:2;32063:23;:::i;:::-;32045:15;:41;32041:115;;;32121:18;;:23;;32142:2;32121:23;:::i;:::-;32103:41;;32041:115;32168:12;32242:23;32355:1;32322:17;32287:18;;32269:15;:36;;;;:::i;:::-;32268:71;;;;:::i;:::-;:88;;;;:::i;:::-;32242:114;-1:-1:-1;32369:51:0;32386:33;32242:114;32386:15;:33;:::i;:::-;32369:16;:51::i;:::-;32634:18;;32454:21;;;;32433:18;;32634:22;;32655:1;;32634:22;:::i;:::-;32613:44;;:17;:44;:::i;:::-;32576:19;;32563:32;;:10;:32;:::i;:::-;32562:96;;;;:::i;:::-;32535:123;;32669:22;32785:1;32764:18;;:22;;;;:::i;:::-;32743:44;;:17;:44;:::i;:::-;32708:17;;32695:30;;:10;:30;:::i;:::-;32694:94;;;;:::i;:::-;32669:119;-1:-1:-1;32820:33:0;32669:119;32820:16;:33;:::i;:::-;32801:52;;;;:::i;:::-;32887:1;32866:18;:22;;;32899:19;:23;;;32933:17;:21;32801:52;-1:-1:-1;32971:19:0;;;;;:42;;;33012:1;32994:15;:19;32971:42;32967:121;;;33030:46;33043:15;33060;33030:12;:46::i;:::-;33122:15;;33114:56;;-1:-1:-1;;;;;33122:15:0;;;;33151:14;;33114:56;;;;33151:14;33122:15;33114:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33203:17:0;;33195:89;;33100:70;;-1:-1:-1;;;;;;33203:17:0;;33248:21;;33195:89;;;;33248:21;33203:17;33195:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31717:1575:0:o;21998:236::-;-1:-1:-1;;;;;22081:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;22081:39:0;;;;;;;22131;22081:31;:39;22131:26;:39::i;6789:651::-;-1:-1:-1;;;;;6929:20:0;;6921:70;;;;-1:-1:-1;;;6921:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7010:23:0;;7002:71;;;;-1:-1:-1;;;7002:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7110:17:0;;7086:21;7110:17;;;;;;;;;;;7160:23;;;;7138:111;;;;-1:-1:-1;;;7138:111:0;;28349:2:1;7138:111:0;;;28331:21:1;28388:2;28368:18;;;28361:30;28427:34;28407:18;;;28400:62;-1:-1:-1;;;28478:18:1;;;28471:36;28524:19;;7138:111:0;28147:402:1;7138:111:0;-1:-1:-1;;;;;7285:17:0;;;:9;:17;;;;;;;;;;;7305:22;;;7285:42;;7349:20;;;;;;;;:30;;7321:6;;7285:9;7349:30;;7321:6;;7349:30;:::i;:::-;;;;;;;;7414:9;-1:-1:-1;;;;;7397:35:0;7406:6;-1:-1:-1;;;;;7397:35:0;;7425:6;7397:35;;;;2024:25:1;;2012:2;1997:18;;1878:177;7397:35:0;;;;;;;;6910:530;6789:651;;;:::o;30621:571::-;30771:16;;;30785:1;30771:16;;;;;;;;30747:21;;30771:16;;;;;;;;;;-1:-1:-1;30771:16:0;30747:40;;30816:4;30798;30803:1;30798:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30798:23:0;;;:7;;;;;;;;;;:23;;;;30842:9;;:16;;;-1:-1:-1;;;30842:16:0;;;;:9;;;;;:14;;:16;;;;;30798:7;;30842:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30832:4;30837:1;30832:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30832:26:0;;;:7;;;;;;;;;:26;30903:9;;30871:56;;30888:4;;30903:9;30915:11;30871:8;:56::i;:::-;30966:9;;:218;;-1:-1:-1;;;30966:218:0;;-1:-1:-1;;;;;30966:9:0;;;;:60;;:218;;31041:11;;30966:9;;31111:4;;31138;;31158:15;;30966:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30676:516;30621:571;:::o;31200:509::-;31380:9;;31348:56;;31365:4;;-1:-1:-1;;;;;31380:9:0;31392:11;31348:8;:56::i;:::-;31447:9;;:254;;-1:-1:-1;;;31447:254:0;;-1:-1:-1;;;;;31447:9:0;;;;:25;;31480:9;;31447:254;;31513:4;;31533:11;;31447:9;;;;31653:6;;31675:15;;31447:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21066:221::-;-1:-1:-1;;;;;21168:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;21168:52:0;;;;;;;;;;21236:43;;29829:51:1;;;29896:18;;;29889:50;21236:43:0;;29802:18:1;21236:43:0;;;;;;;21066:221;;:::o;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;985:131::-;-1:-1:-1;;;;;1060:31:1;;1050:42;;1040:70;;1106:1;1103;1096:12;1040:70;985:131;:::o;1121:315::-;1189:6;1197;1250:2;1238:9;1229:7;1225:23;1221:32;1218:52;;;1266:1;1263;1256:12;1218:52;1305:9;1292:23;1324:31;1349:5;1324:31;:::i;:::-;1374:5;1426:2;1411:18;;;;1398:32;;-1:-1:-1;;;1121:315:1:o;1441:180::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;-1:-1:-1;1592:23:1;;1441:180;-1:-1:-1;1441:180:1:o;1626:247::-;1685:6;1738:2;1726:9;1717:7;1713:23;1709:32;1706:52;;;1754:1;1751;1744:12;1706:52;1793:9;1780:23;1812:31;1837:5;1812:31;:::i;:::-;1862:5;1626:247;-1:-1:-1;;;1626:247:1:o;2060:456::-;2137:6;2145;2153;2206:2;2194:9;2185:7;2181:23;2177:32;2174:52;;;2222:1;2219;2212:12;2174:52;2261:9;2248:23;2280:31;2305:5;2280:31;:::i;:::-;2330:5;-1:-1:-1;2387:2:1;2372:18;;2359:32;2400:33;2359:32;2400:33;:::i;:::-;2060:456;;2452:7;;-1:-1:-1;;;2506:2:1;2491:18;;;;2478:32;;2060:456::o;2918:248::-;2986:6;2994;3047:2;3035:9;3026:7;3022:23;3018:32;3015:52;;;3063:1;3060;3053:12;3015:52;-1:-1:-1;;3086:23:1;;;3156:2;3141:18;;;3128:32;;-1:-1:-1;2918:248:1:o;3171:118::-;3257:5;3250:13;3243:21;3236:5;3233:32;3223:60;;3279:1;3276;3269:12;3294:382;3359:6;3367;3420:2;3408:9;3399:7;3395:23;3391:32;3388:52;;;3436:1;3433;3426:12;3388:52;3475:9;3462:23;3494:31;3519:5;3494:31;:::i;:::-;3544:5;-1:-1:-1;3601:2:1;3586:18;;3573:32;3614:30;3573:32;3614:30;:::i;:::-;3663:7;3653:17;;;3294:382;;;;;:::o;3681:241::-;3737:6;3790:2;3778:9;3769:7;3765:23;3761:32;3758:52;;;3806:1;3803;3796:12;3758:52;3845:9;3832:23;3864:28;3886:5;3864:28;:::i;3927:316::-;4004:6;4012;4020;4073:2;4061:9;4052:7;4048:23;4044:32;4041:52;;;4089:1;4086;4079:12;4041:52;-1:-1:-1;;4112:23:1;;;4182:2;4167:18;;4154:32;;-1:-1:-1;4233:2:1;4218:18;;;4205:32;;3927:316;-1:-1:-1;3927:316:1:o;4248:388::-;4316:6;4324;4377:2;4365:9;4356:7;4352:23;4348:32;4345:52;;;4393:1;4390;4383:12;4345:52;4432:9;4419:23;4451:31;4476:5;4451:31;:::i;:::-;4501:5;-1:-1:-1;4558:2:1;4543:18;;4530:32;4571:33;4530:32;4571:33;:::i;4641:461::-;4694:3;4732:5;4726:12;4759:6;4754:3;4747:19;4785:4;4814:2;4809:3;4805:12;4798:19;;4851:2;4844:5;4840:14;4872:1;4882:195;4896:6;4893:1;4890:13;4882:195;;;4961:13;;-1:-1:-1;;;;;4957:39:1;4945:52;;5017:12;;;;5052:15;;;;4993:1;4911:9;4882:195;;;-1:-1:-1;5093:3:1;;4641:461;-1:-1:-1;;;;;4641:461:1:o;5107:261::-;5286:2;5275:9;5268:21;5249:4;5306:56;5358:2;5347:9;5343:18;5335:6;5306:56;:::i;5373:380::-;5452:1;5448:12;;;;5495;;;5516:61;;5570:4;5562:6;5558:17;5548:27;;5516:61;5623:2;5615:6;5612:14;5592:18;5589:38;5586:161;;5669:10;5664:3;5660:20;5657:1;5650:31;5704:4;5701:1;5694:15;5732:4;5729:1;5722:15;5586:161;;5373:380;;;:::o;5758:356::-;5960:2;5942:21;;;5979:18;;;5972:30;6038:34;6033:2;6018:18;;6011:62;6105:2;6090:18;;5758:356::o;6119:184::-;6189:6;6242:2;6230:9;6221:7;6217:23;6213:32;6210:52;;;6258:1;6255;6248:12;6210:52;-1:-1:-1;6281:16:1;;6119:184;-1:-1:-1;6119:184:1:o;6661:127::-;6722:10;6717:3;6713:20;6710:1;6703:31;6753:4;6750:1;6743:15;6777:4;6774:1;6767:15;6793:168;6866:9;;;6897;;6914:15;;;6908:22;;6894:37;6884:71;;6935:18;;:::i;6966:217::-;7006:1;7032;7022:132;;7076:10;7071:3;7067:20;7064:1;7057:31;7111:4;7108:1;7101:15;7139:4;7136:1;7129:15;7022:132;-1:-1:-1;7168:9:1;;6966:217::o;7467:245::-;7534:6;7587:2;7575:9;7566:7;7562:23;7558:32;7555:52;;;7603:1;7600;7593:12;7555:52;7635:9;7629:16;7654:28;7676:5;7654:28;:::i;7717:607::-;-1:-1:-1;;;;;8076:15:1;;;8058:34;;8123:2;8108:18;;8101:34;;;;8166:2;8151:18;;8144:34;;;;8209:2;8194:18;;8187:34;;;;8258:15;;;8252:3;8237:19;;8230:44;8038:3;8290:19;;8283:35;;;;8007:3;7992:19;;7717:607::o;8329:245::-;8408:6;8416;8469:2;8457:9;8448:7;8444:23;8440:32;8437:52;;;8485:1;8482;8475:12;8437:52;-1:-1:-1;;8508:16:1;;8564:2;8549:18;;;8543:25;8508:16;;8543:25;;-1:-1:-1;8329:245:1:o;11762:125::-;11827:9;;;11848:10;;;11845:36;;;11861:18;;:::i;11892:402::-;12094:2;12076:21;;;12133:2;12113:18;;;12106:30;12172:34;12167:2;12152:18;;12145:62;-1:-1:-1;;;12238:2:1;12223:18;;12216:36;12284:3;12269:19;;11892:402::o;15284:403::-;15486:2;15468:21;;;15525:2;15505:18;;;15498:30;15564:34;15559:2;15544:18;;15537:62;-1:-1:-1;;;15630:2:1;15615:18;;15608:37;15677:3;15662:19;;15284:403::o;16468:407::-;16670:2;16652:21;;;16709:2;16689:18;;;16682:30;16748:34;16743:2;16728:18;;16721:62;-1:-1:-1;;;16814:2:1;16799:18;;16792:41;16865:3;16850:19;;16468:407::o;16880:399::-;17082:2;17064:21;;;17121:2;17101:18;;;17094:30;17160:34;17155:2;17140:18;;17133:62;-1:-1:-1;;;17226:2:1;17211:18;;17204:33;17269:3;17254:19;;16880:399::o;18303:306::-;18391:6;18399;18407;18460:2;18448:9;18439:7;18435:23;18431:32;18428:52;;;18476:1;18473;18466:12;18428:52;18505:9;18499:16;18489:26;;18555:2;18544:9;18540:18;18534:25;18524:35;;18599:2;18588:9;18584:18;18578:25;18568:35;;18303:306;;;;;:::o;24078:401::-;24280:2;24262:21;;;24319:2;24299:18;;;24292:30;24358:34;24353:2;24338:18;;24331:62;-1:-1:-1;;;24424:2:1;24409:18;;24402:35;24469:3;24454:19;;24078:401::o;24484:399::-;24686:2;24668:21;;;24725:2;24705:18;;;24698:30;24764:34;24759:2;24744:18;;24737:62;-1:-1:-1;;;24830:2:1;24815:18;;24808:33;24873:3;24858:19;;24484:399::o;26076:128::-;26143:9;;;26164:11;;;26161:37;;;26178:18;;:::i;28686:127::-;28747:10;28742:3;28738:20;28735:1;28728:31;28778:4;28775:1;28768:15;28802:4;28799:1;28792:15;28818:251;28888:6;28941:2;28929:9;28920:7;28916:23;28912:32;28909:52;;;28957:1;28954;28947:12;28909:52;28989:9;28983:16;29008:31;29033:5;29008:31;:::i;29074:582::-;29373:6;29362:9;29355:25;29416:6;29411:2;29400:9;29396:18;29389:34;29459:3;29454:2;29443:9;29439:18;29432:31;29336:4;29480:57;29532:3;29521:9;29517:19;29509:6;29480:57;:::i;:::-;-1:-1:-1;;;;;29573:32:1;;;;29568:2;29553:18;;29546:60;-1:-1:-1;29637:3:1;29622:19;29615:35;29472:65;29074:582;-1:-1:-1;;;29074:582:1:o
Swarm Source
ipfs://bb582c578589252547a6f2a9a36add63361374708c864df53d9e72eb963bc60c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.