ERC-20
Overview
Max Total Supply
30,000,000 Bangtan
Holders
15
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
282,240 BangtanValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Bangtan
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-17 */ /** So BTS enlisting for military service first one is Jin and then other members will follows according to their schedule, and BTS will be back as a group in 2025 In BTS WE TRUST WE WILL WAIT FOR YOU BTS BANGTAN IN 2025 I'M NOT GOING ANYWHWRE 😭😭 I'M SO PROUD OF MY BOYS https://twitter.com/Jiyaa98/status/1581907309243924480?s=20&t=fBpYlXkoMmtmqy2TpmN68Q BTS for life */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.4; 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; } } library EnumerableSet { struct Set { bytes32[] _values; mapping(bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; set._values[toDeleteIndex] = lastValue; set._indexes[lastValue] = valueIndex; } set._values.pop(); delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // AddressSet struct AddressSet { Set _inner; } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20 { 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: 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() external virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH); } interface IDexFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IDexPair { function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } contract Bangtan is ERC20, Ownable { using EnumerableSet for EnumerableSet.AddressSet; uint256 public maxBuyAmount; uint256 public maxSellAmount; uint256 public maxWalletAmount; EnumerableSet.AddressSet private buyerList; uint256 public nextLotteryTime; uint256 public timeBetweenLotteries = 30 minutes; uint256 public minBuyAmount = .1 ether; bool public minBuyEnforced = true; uint256 public percentForLottery = 100; bool public lotteryEnabled = false; uint256 public lastBurnTimestamp; IDexRouter public dexRouter; address public lpPair; bool private swapping; uint256 public swapTokensAtAmount; address operationsAddress; uint256 public tradingActiveBlock = 0; // 0 means trading is not active uint256 public blockForPenaltyEnd; mapping (address => bool) public restrictedWallet; uint256 public botsCaught; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; uint256 public buyTotalFees; uint256 public buyOperationsFee; uint256 public buyLiquidityFee; uint256 public buyLotteryFee; uint256 public sellTotalFees; uint256 public sellOperationsFee; uint256 public sellLiquidityFee; uint256 public sellLotteryFee; uint256 public tokensForOperations; uint256 public tokensForLiquidity; uint256 public tokensForLottery; uint256 public FEE_DENOMINATOR = 10000; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) public _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 RemovedLimits(); 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 MaxTransactionExclusion(address _address, bool excluded); event BuyBackTriggered(uint256 amount); event OwnerForcedSwapBack(uint256 timestamp); event CaughtBot(address sniper); event TransferForeignToken(address token, uint256 amount); event LotteryTriggered(uint256 indexed amount, address indexed wallet); constructor() ERC20("Bangtan", "Bangtan") { IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); dexRouter = _dexRouter; operationsAddress = address(0xFf5Bcf53160B63F2eB21C16f235Fc4F290c53B53); // create pair lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH()); _excludeFromMaxTransaction(address(lpPair), true); _setAutomatedMarketMakerPair(address(lpPair), true); uint256 totalSupply = 3 * 1e7 * 1e18; maxBuyAmount = totalSupply * 20 / 1000; maxSellAmount = totalSupply * 20 / 1000; maxWalletAmount = totalSupply * 2 / 100; swapTokensAtAmount = totalSupply * 25 / 100000; buyOperationsFee = 200; buyLiquidityFee = 200; buyLotteryFee = 0; buyTotalFees = buyOperationsFee + buyLiquidityFee + buyLotteryFee; sellOperationsFee = 200; sellLiquidityFee = 200; sellLotteryFee = 0; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellLotteryFee; _excludeFromMaxTransaction(msg.sender, true); _excludeFromMaxTransaction(operationsAddress, true); _excludeFromMaxTransaction(address(this), true); _excludeFromMaxTransaction(address(0xdead), true); _excludeFromMaxTransaction(address(dexRouter), true); excludeFromFees(msg.sender, true); excludeFromFees(operationsAddress, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(dexRouter), true); _createInitialSupply(msg.sender, totalSupply); } receive() external payable {} function isWalletLotteryEligible(address account) external view returns (bool){ return buyerList.contains(account); } function enableTrading(uint256 blocksForPenalty) external onlyOwner { require(blockForPenaltyEnd == 0); tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty; nextLotteryTime = block.timestamp + timeBetweenLotteries; emit EnabledTrading(); } // remove limits after token is stable function removeLimits() external onlyOwner { limitsInEffect = false; emit RemovedLimits(); } function updateTradingActive(bool active) external onlyOwner { tradingActive = active; } function setLotteryEnabled(bool enabled) external onlyOwner { lotteryEnabled = enabled; } function manageRestrictedWallets(address[] calldata wallets, bool restricted) external onlyOwner { for(uint256 i = 0; i < wallets.length; i++){ restrictedWallet[wallets[i]] = restricted; } } function updateMaxBuyAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals())); maxBuyAmount = newNum * (10 ** decimals()); emit UpdatedMaxBuyAmount(maxBuyAmount); } function updateMaxSellAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals())); maxSellAmount = newNum * (10 ** decimals()); emit UpdatedMaxSellAmount(maxSellAmount); } function updateMaxWallet(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals())); maxWalletAmount = newNum * (10 ** decimals()); emit UpdatedMaxWalletAmount(maxWalletAmount); } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner { require(newAmount >= totalSupply() * 1 / 100000); require(newAmount <= totalSupply() * 1 / 1000); swapTokensAtAmount = newAmount; } function _excludeFromMaxTransaction(address updAds, bool isExcluded) private { _isExcludedMaxTransactionAmount[updAds] = isExcluded; emit MaxTransactionExclusion(updAds, isExcluded); } function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner { require(wallets.length == amountsInTokens.length); require(wallets.length < 600); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input. for(uint256 i = 0; i < wallets.length; i++){ super._transfer(msg.sender, wallets[i], amountsInTokens[i]); } } 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 _lotteryFee) external onlyOwner { buyOperationsFee = _operationsFee; buyLiquidityFee = _liquidityFee; buyLotteryFee = _lotteryFee; buyTotalFees = buyOperationsFee + buyLiquidityFee + buyLotteryFee; require(buyTotalFees <= 1000, "Must keep fees at 15% or less"); } function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _lotteryFee) external onlyOwner { sellOperationsFee = _operationsFee; sellLiquidityFee = _liquidityFee; sellLotteryFee = _lotteryFee; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellLotteryFee; require(sellTotalFees <= 9900, "Must keep fees at 20% or less"); } 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, "ERC20: transfer must be greater than 0"); if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } if(!earlyBuyPenaltyInEffect() && blockForPenaltyEnd > 0){ require(!restrictedWallet[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(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){ //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxBuyAmount); require(amount + balanceOf(to) <= maxWalletAmount); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxSellAmount); } else if (!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWalletAmount); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { swapping = true; swapBack(); swapping = false; } if(lotteryEnabled){ if(block.timestamp >= nextLotteryTime && address(this).balance >= 0.25 ether && buyerList.length() > 1){ payoutRewards(to); } else { gasBurn(); } } 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 + 5 >= block.number)) && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[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(!restrictedWallet[to]){ restrictedWallet[to] = true; botsCaught += 1; emit CaughtBot(to); } fees = amount * buyTotalFees / FEE_DENOMINATOR; tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForOperations += fees * buyOperationsFee / buyTotalFees; tokensForLottery += fees * buyLotteryFee / buyTotalFees; } // on sell else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount * sellTotalFees / FEE_DENOMINATOR; tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForOperations += fees * sellOperationsFee / sellTotalFees; tokensForLottery += fees * sellLotteryFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount * buyTotalFees / FEE_DENOMINATOR; tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForOperations += fees * buyOperationsFee / buyTotalFees; tokensForLottery += fees * buyLotteryFee / buyTotalFees; if(!minBuyEnforced || amount > getPurchaseAmount()){ if(!buyerList.contains(to)){ buyerList.add(to); } } } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); if(buyerList.contains(from) && takeFee){ buyerList.remove(from); } } function earlyBuyPenaltyInEffect() public view returns (bool){ return block.number < blockForPenaltyEnd; } // the purpose of this function is to fix Metamask gas estimation issues so it always consumes a similar amount of gas whether there is a payout or not. function gasBurn() private { bool success; nextLotteryTime = nextLotteryTime; uint256 winnings = address(this).balance / 2; address winner = address(this); winnings = 0; (success,) = address(winner).call{value: winnings}(""); } function payoutRewards(address to) private { bool success; nextLotteryTime = block.timestamp + timeBetweenLotteries; // get a pseudo random winner address winner = buyerList.at(random(0, buyerList.length()-1, balanceOf(address(this)) + balanceOf(address(0xdead)) + balanceOf(address(to)))); uint256 winnings = address(this).balance * percentForLottery / 100; (success,) = address(winner).call{value: winnings}(""); if(success){ emit LotteryTriggered(winnings, winner); } } function random(uint256 from, uint256 to, uint256 salty) private view returns (uint256) { uint256 seed = uint256( keccak256( abi.encodePacked( block.timestamp + block.difficulty + ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (block.timestamp)) + block.gaslimit + ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (block.timestamp)) + block.number + salty ) ) ); return seed % (to - from) + from; } function updateLotteryTimeCooldown(uint256 timeInMinutes) external onlyOwner { require(timeInMinutes >= 1 && timeInMinutes <= 1440); timeBetweenLotteries = timeInMinutes * 1 minutes; } function updatePercentForLottery(uint256 percent) external onlyOwner { require(percent >= 10 && percent <= 100); percentForLottery = percent; } function updateMinBuyToTriggerReward(uint256 minBuy) external onlyOwner { require(minBuy > 0); minBuyAmount = minBuy; } function setMinBuyEnforced(bool enforced) external onlyOwner { minBuyEnforced = enforced; } 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(this), block.timestamp ); } function splitAndBurnLiquidity(uint256 percent) external onlyOwner { require(percent <=50); require(lastBurnTimestamp <= block.timestamp - 1 hours); lastBurnTimestamp = block.timestamp; uint256 lpBalance = IERC20(lpPair).balanceOf(address(this)); uint256 tokenBalance = balanceOf(address(this)); uint256 lpAmount = lpBalance * percent / 100; uint256 initialEthBalance = address(this).balance; // 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 address(this), block.timestamp ); uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance; if(deltaTokenBalance > 0){ super._transfer(address(this), address(0xdead), deltaTokenBalance); } uint256 deltaEthBalance = address(this).balance - initialEthBalance; if(deltaEthBalance > 0){ buyBackTokens(deltaEthBalance); } } function buyBackTokens(uint256 amountInWei) internal { address[] memory path = new address[](2); path[0] = dexRouter.WETH(); path[1] = address(this); dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}( 0, path, address(0xdead), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForLottery; 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; uint256 initialBalance = address(this).balance; swapTokensForEth(contractBalance - liquidityTokens); uint256 ethBalance = address(this).balance - initialBalance; uint256 ethForLiquidity = ethBalance; uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2)); uint256 ethForLottery = ethBalance * tokensForLottery / (totalTokensToSwap - (tokensForLiquidity/2)); ethForLiquidity -= ethForOperations + ethForLottery; tokensForLiquidity = 0; tokensForOperations = 0; tokensForLottery = 0; if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); } if(ethForOperations > 0){ (success,) = address(operationsAddress).call{value: ethForOperations}(""); } // remaining tokens stay for Lottery } function getPurchaseAmount() public view returns (uint256){ address[] memory path = new address[](2); path[0] = dexRouter.WETH(); path[1] = address(this); uint256[] memory amounts = new uint256[](2); amounts = dexRouter.getAmountsOut(minBuyAmount, path); return amounts[1]; } function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) { require(_token != address(0)); require(_token != address(this)); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(_to, _contractBalance); emit TransferForeignToken(_token, _contractBalance); } // withdraw ETH if stuck function withdrawStuckETH() external onlyOwner { bool success; (success,) = address(owner()).call{value: address(this).balance}(""); } function setOperationsAddress(address _operationsAddress) external onlyOwner { require(_operationsAddress != address(0)); operationsAddress = payable(_operationsAddress); } // 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtBot","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":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"LotteryTriggered","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":[],"name":"RemovedLimits","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":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"},{"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","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":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLotteryFee","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":"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":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPurchaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWalletLotteryEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBurnTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"manageRestrictedWallets","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":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextLotteryTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLottery","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"restrictedWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLotteryFee","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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLotteryEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enforced","type":"bool"}],"name":"setMinBuyEnforced","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"splitAndBurnLiquidity","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":"timeBetweenLotteries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLottery","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":"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":[{"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":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_lotteryFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInMinutes","type":"uint256"}],"name":"updateLotteryTimeCooldown","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":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minBuy","type":"uint256"}],"name":"updateMinBuyToTriggerReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"updatePercentForLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_lotteryFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"updateTradingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052610708600c5567016345785d8a0000600d55600e8054600160ff1991821681179092556064600f556010805490911690556000601655601a805462ffffff191690911790556127106026553480156200005c57600080fd5b506040805180820182526007808252662130b733ba30b760c91b6020808401828152855180870190965292855284015281519192916200009f9160039162000749565b508051620000b590600490602084019062000749565b5050506000620000ca620004d260201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601280546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d9081179092556015805490911673ff5bcf53160b63f2eb21c16f235fc4f290c53b531790556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b1580156200019a57600080fd5b505afa158015620001af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d59190620007ef565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021e57600080fd5b505afa15801562000233573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002599190620007ef565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002a257600080fd5b505af1158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd9190620007ef565b601380546001600160a01b0319166001600160a01b0392909216918217905562000309906001620004d6565b60135462000322906001600160a01b0316600162000539565b6a18d0bf423c03d8de0000006103e86200033e8260146200085b565b6200034a91906200083a565b6006556103e86200035d8260146200085b565b6200036991906200083a565b60075560646200037b8260026200085b565b6200038791906200083a565b600855620186a06200039b8260196200085b565b620003a791906200083a565b60145560c8601c819055601d8190556000601e81905590620003ca90806200081f565b620003d691906200081f565b601b5560c8602081905560218190556000602281905590620003f990806200081f565b6200040591906200081f565b601f5562000415336001620004d6565b6015546200042e906001600160a01b03166001620004d6565b6200043b306001620004d6565b6200044a61dead6001620004d6565b60125462000463906001600160a01b03166001620004d6565b62000470336001620005a5565b60155462000489906001600160a01b03166001620005a5565b62000496306001620005a5565b620004a561dead6001620005a5565b601254620004be906001600160a01b03166001620005a5565b620004ca338262000664565b5050620008d0565b3390565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055620005698282620004d6565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006bc5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a20746f20746865207a65726f20616464726573730000000000006044820152606401620005fc565b8060026000828254620006d091906200081f565b90915550506001600160a01b03821660009081526020819052604081208054839290620006ff9084906200081f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b82805462000757906200087d565b90600052602060002090601f0160209004810192826200077b5760008555620007c6565b82601f106200079657805160ff1916838001178555620007c6565b82800160010185558215620007c6579182015b82811115620007c6578251825591602001919060010190620007a9565b50620007d4929150620007d8565b5090565b5b80821115620007d45760008155600101620007d9565b60006020828403121562000801578081fd5b81516001600160a01b038116811462000818578182fd5b9392505050565b60008219821115620008355762000835620008ba565b500190565b6000826200085657634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615620008785762000878620008ba565b500290565b600181811c908216806200089257607f821691505b60208210811415620008b457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6142eb80620008e06000396000f3fe60806040526004361061044b5760003560e01c80638366e79a11610234578063d257b34f1161012e578063ee40166e116100b6578063f63743421161007a578063f637434214610ca1578063f66bf22914610cb7578063fb002c9714610ccd578063fbe8d4b714610ce3578063fd63914414610cfd57600080fd5b8063ee40166e14610c20578063f11a24d314610c36578063f2fde38b14610c4c578063f498cceb14610c6c578063f5648a4f14610c8c57600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610b5e578063dc8ba8e614610b7e578063dd62ed3e14610b94578063e0bf7fd114610bda578063e2f4560514610c0a57600080fd5b8063d257b34f14610af2578063d73792a914610b12578063d85ba06314610b28578063da4f80e014610b3e57600080fd5b8063a9059cbb116101bc578063b62496f511610180578063b62496f514610a4d578063bbc0c74214610a7d578063c024666814610a9c578063c17b5b8c14610abc578063cd38890914610adc57600080fd5b8063a9059cbb146109cb578063a96444ed146109eb578063aa4bde2814610a01578063aba80fe814610a17578063ac8e332814610a2d57600080fd5b80638da5cb5b116102035780638da5cb5b1461094257806395d89b41146109605780639a7a23d614610975578063a457c2d714610995578063a62068ce146109b557600080fd5b80638366e79a146108d75780638671cb86146108f757806388e765ff146109175780638b28cd191461092d57600080fd5b80634f77f6c0116103455780636b0a894c116102cd5780637571336a116102915780637571336a1461084157806376af4d44146108615780637b20fd90146108775780638095d5641461089757806382aa7c68146108b757600080fd5b80636b0a894c146107c15780636ddd1713146107d757806370a08231146107f7578063715018a614610817578063751039fc1461082c57600080fd5b8063599035661161031457806359903566146107455780635a139dd41461076557806366d602ae1461077b5780636a486a8e146107915780636a63ce88146107a757600080fd5b80634f77f6c0146106d357806350e838e5146106e957806351f205e41461071957806358a6d5311461072e57600080fd5b80632583de65116103d3578063395093511161039757806339509351146106435780633d3d937d14610663578063452ed4f114610679578063499b8394146106995780634a62bb65146106b957600080fd5b80632583de65146105b1578063285b9747146105d15780632be32b61146105f1578063313ce5671461061157806334908e561461062d57600080fd5b806318160ddd1161041a57806318160ddd1461051a5780631a8145bb146105395780631c499ab01461054f5780632307b4411461057157806323b872dd1461059157600080fd5b806306fdde03146104575780630758d92414610482578063095ea7b3146104ba57806310d5de53146104ea57600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610d1d565b6040516104799190613ed1565b60405180910390f35b34801561048e57600080fd5b506012546104a2906001600160a01b031681565b6040516001600160a01b039091168152602001610479565b3480156104c657600080fd5b506104da6104d5366004613b39565b610daf565b6040519015158152602001610479565b3480156104f657600080fd5b506104da610505366004613a5c565b60286020526000908152604090205460ff1681565b34801561052657600080fd5b506002545b604051908152602001610479565b34801561054557600080fd5b5061052b60245481565b34801561055b57600080fd5b5061056f61056a366004613d73565b610dc6565b005b34801561057d57600080fd5b5061056f61058c366004613be5565b610e8d565b34801561059d57600080fd5b506104da6105ac366004613acc565b610f50565b3480156105bd57600080fd5b5061056f6105cc366004613d3b565b610ffa565b3480156105dd57600080fd5b5061056f6105ec366004613d3b565b611037565b3480156105fd57600080fd5b5061056f61060c366004613d73565b611074565b34801561061d57600080fd5b5060405160128152602001610479565b34801561063957600080fd5b5061052b60225481565b34801561064f57600080fd5b506104da61065e366004613b39565b61112c565b34801561066f57600080fd5b5061052b60115481565b34801561068557600080fd5b506013546104a2906001600160a01b031681565b3480156106a557600080fd5b5061056f6106b4366004613a5c565b611168565b3480156106c557600080fd5b50601a546104da9060ff1681565b3480156106df57600080fd5b5061052b60205481565b3480156106f557600080fd5b506104da610704366004613a5c565b60186020526000908152604090205460ff1681565b34801561072557600080fd5b5061056f6111c7565b34801561073a57600080fd5b5060175443106104da565b34801561075157600080fd5b5061056f610760366004613d73565b6112d0565b34801561077157600080fd5b5061052b601c5481565b34801561078757600080fd5b5061052b60075481565b34801561079d57600080fd5b5061052b601f5481565b3480156107b357600080fd5b506010546104da9060ff1681565b3480156107cd57600080fd5b5061052b60195481565b3480156107e357600080fd5b50601a546104da9062010000900460ff1681565b34801561080357600080fd5b5061052b610812366004613a5c565b61131a565b34801561082357600080fd5b5061056f611335565b34801561083857600080fd5b5061056f6113a9565b34801561084d57600080fd5b5061056f61085c366004613b0c565b611408565b34801561086d57600080fd5b5061052b600b5481565b34801561088357600080fd5b5061056f610892366004613d73565b6114d0565b3480156108a357600080fd5b5061056f6108b2366004613dc6565b611527565b3480156108c357600080fd5b5061056f6108d2366004613d73565b6115cb565b3480156108e357600080fd5b506104da6108f2366004613a94565b611663565b34801561090357600080fd5b5061056f610912366004613d73565b611805565b34801561092357600080fd5b5061052b60065481565b34801561093957600080fd5b5061052b611a6a565b34801561094e57600080fd5b506005546001600160a01b03166104a2565b34801561096c57600080fd5b5061046c611c63565b34801561098157600080fd5b5061056f610990366004613b0c565b611c72565b3480156109a157600080fd5b506104da6109b0366004613b39565b611d66565b3480156109c157600080fd5b5061052b60175481565b3480156109d757600080fd5b506104da6109e6366004613b39565b611dff565b3480156109f757600080fd5b5061052b60255481565b348015610a0d57600080fd5b5061052b60085481565b348015610a2357600080fd5b5061052b600c5481565b348015610a3957600080fd5b5061056f610a48366004613b64565b611e0c565b348015610a5957600080fd5b506104da610a68366004613a5c565b60296020526000908152604090205460ff1681565b348015610a8957600080fd5b50601a546104da90610100900460ff1681565b348015610aa857600080fd5b5061056f610ab7366004613b0c565b611ebb565b348015610ac857600080fd5b5061056f610ad7366004613dc6565b611f44565b348015610ae857600080fd5b5061052b601e5481565b348015610afe57600080fd5b5061056f610b0d366004613d73565b611fe8565b348015610b1e57600080fd5b5061052b60265481565b348015610b3457600080fd5b5061052b601b5481565b348015610b4a57600080fd5b5061056f610b59366004613d3b565b612072565b348015610b6a57600080fd5b5061056f610b79366004613d73565b6120b6565b348015610b8a57600080fd5b5061052b600f5481565b348015610ba057600080fd5b5061052b610baf366004613a94565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be657600080fd5b506104da610bf5366004613a5c565b60276020526000908152604090205460ff1681565b348015610c1657600080fd5b5061052b60145481565b348015610c2c57600080fd5b5061052b60165481565b348015610c4257600080fd5b5061052b601d5481565b348015610c5857600080fd5b5061056f610c67366004613a5c565b61216e565b348015610c7857600080fd5b5061056f610c87366004613d73565b612259565b348015610c9857600080fd5b5061056f612295565b348015610cad57600080fd5b5061052b60215481565b348015610cc357600080fd5b5061052b600d5481565b348015610cd957600080fd5b5061052b60235481565b348015610cef57600080fd5b50600e546104da9060ff1681565b348015610d0957600080fd5b506104da610d18366004613a5c565b61231d565b606060038054610d2c906141e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d58906141e3565b8015610da55780601f10610d7a57610100808354040283529160200191610da5565b820191906000526020600020905b815481529060010190602001808311610d8857829003601f168201915b5050505050905090565b6000610dbc33848461232a565b5060015b92915050565b6005546001600160a01b03163314610df95760405162461bcd60e51b8152600401610df090613f67565b60405180910390fd5b610e056012600a614102565b6064610e1060025490565b610e1b9060016141ad565b610e2591906140ab565b610e2f91906140ab565b811015610e3b57600080fd5b610e476012600a614102565b610e5190826141ad565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610df090613f67565b8051825114610ec557600080fd5b610258825110610ed457600080fd5b60005b8251811015610f4b57610f3933848381518110610f0457634e487b7160e01b600052603260045260246000fd5b6020026020010151848481518110610f2c57634e487b7160e01b600052603260045260246000fd5b602002602001015161244e565b80610f438161421e565b915050610ed7565b505050565b6000610f5d8484846125a3565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fe25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610df0565b610fef853385840361232a565b506001949350505050565b6005546001600160a01b031633146110245760405162461bcd60e51b8152600401610df090613f67565b6010805460ff1916911515919091179055565b6005546001600160a01b031633146110615760405162461bcd60e51b8152600401610df090613f67565b600e805460ff1916911515919091179055565b6005546001600160a01b0316331461109e5760405162461bcd60e51b8152600401610df090613f67565b6110aa6012600a614102565b6103e86110b660025490565b6110c19060016141ad565b6110cb91906140ab565b6110d591906140ab565b8110156110e157600080fd5b6110ed6012600a614102565b6110f790826141ad565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610e82565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dbc918590611163908690614093565b61232a565b6005546001600160a01b031633146111925760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0381166111a557600080fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111f15760405162461bcd60e51b8152600401610df090613f67565b6014546111fd3061131a565b1015611273576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610df0565b6013805460ff60a01b1916600160a01b17905561128e612f3e565b6013805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112fa5760405162461bcd60e51b8152600401610df090613f67565b600a811015801561130c575060648111155b61131557600080fd5b600f55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461135f5760405162461bcd60e51b8152600401610df090613f67565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113d35760405162461bcd60e51b8152600401610df090613f67565b601a805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114325760405162461bcd60e51b8152600401610df090613f67565b806114a5576013546001600160a01b03838116911614156114a55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610df0565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114fa5760405162461bcd60e51b8152600401610df090613f67565b6001811015801561150d57506105a08111155b61151657600080fd5b61152181603c6141ad565b600c5550565b6005546001600160a01b031633146115515760405162461bcd60e51b8152600401610df090613f67565b601c839055601d829055601e8190558061156b8385614093565b6115759190614093565b601b8190556103e81015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146115f55760405162461bcd60e51b8152600401610df090613f67565b6017541561160257600080fd5b601a805462ffff00191662010100179055436016819055611624908290614093565b601755600c546116349042614093565b600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146116905760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0383166116a357600080fd5b6001600160a01b0383163014156116b957600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156116fb57600080fd5b505afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190613d8b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561178157600080fd5b505af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190613d57565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461182f5760405162461bcd60e51b8152600401610df090613f67565b603281111561183d57600080fd5b611849610e10426141cc565b601154111561185757600080fd5b426011556013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561189f57600080fd5b505afa1580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d79190613d8b565b905060006118e43061131a565b9050600060646118f485856141ad565b6118fe91906140ab565b60135460125460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b390604401602060405180830381600087803b15801561195357600080fd5b505af1158015611967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198b9190613d57565b50601254604051629d473b60e21b81526001600160a01b03909116906302751cec906119c69030908690600190819084904290600401613e61565b6040805180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a179190613da3565b5050600083611a253061131a565b611a2f91906141cc565b90508015611a4457611a443061dead8361244e565b6000611a5083476141cc565b90508015611a6157611a618161310a565b50505050505050565b604080516002808252606082018352600092839291906020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611ad357600080fd5b505afa158015611ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0b9190613a78565b81600081518110611b2c57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611b6e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050601254600d5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611bdd918690600401613fe1565b60006040518083038186803b158015611bf557600080fd5b505afa158015611c09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c319190810190613ca8565b905080600181518110611c5457634e487b7160e01b600052603260045260246000fd5b60200260200101519250505090565b606060048054610d2c906141e3565b6005546001600160a01b03163314611c9c5760405162461bcd60e51b8152600401610df090613f67565b6013546001600160a01b0383811691161415611d205760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610df0565b611d2a828261327f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611de85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610df0565b611df5338585840361232a565b5060019392505050565b6000610dbc3384846125a3565b6005546001600160a01b03163314611e365760405162461bcd60e51b8152600401610df090613f67565b60005b82811015611eb5578160186000868685818110611e6657634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611e7b9190613a5c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611ead8161421e565b915050611e39565b50505050565b6005546001600160a01b03163314611ee55760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611f6e5760405162461bcd60e51b8152600401610df090613f67565b60208390556021829055602281905580611f888385614093565b611f929190614093565b601f8190556126ac1015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146120125760405162461bcd60e51b8152600401610df090613f67565b620186a061201f60025490565b61202a9060016141ad565b61203491906140ab565b81101561204057600080fd5b6103e861204c60025490565b6120579060016141ad565b61206191906140ab565b81111561206d57600080fd5b601455565b6005546001600160a01b0316331461209c5760405162461bcd60e51b8152600401610df090613f67565b601a80549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146120e05760405162461bcd60e51b8152600401610df090613f67565b6120ec6012600a614102565b6103e86120f860025490565b6121039060016141ad565b61210d91906140ab565b61211791906140ab565b81101561212357600080fd5b61212f6012600a614102565b61213990826141ad565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e82565b6005546001600160a01b031633146121985760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0381166121fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122835760405162461bcd60e51b8152600401610df090613f67565b6000811161229057600080fd5b600d55565b6005546001600160a01b031633146122bf5760405162461bcd60e51b8152600401610df090613f67565b60006122d36005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611eb5576040519150601f19603f3d011682016040523d82523d6000602084013e611eb5565b6000610dc06009836132ad565b6001600160a01b03831661238c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610df0565b6001600160a01b0382166123ed5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610df0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124745760405162461bcd60e51b8152600401610df090613f9c565b6001600160a01b03821661249a5760405162461bcd60e51b8152600401610df090613f24565b6001600160a01b038316600090815260208190526040902054818110156125125760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610df0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612549908490614093565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161259591815260200190565b60405180910390a350505050565b6001600160a01b0383166125c95760405162461bcd60e51b8152600401610df090613f9c565b6001600160a01b0382166125ef5760405162461bcd60e51b8152600401610df090613f24565b6000811161264e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610df0565b601a54610100900460ff166126e1576001600160a01b03831660009081526027602052604090205460ff168061269c57506001600160a01b03821660009081526027602052604090205460ff165b6126e15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610df0565b60175443101580156126f557506000601754115b156127c5576001600160a01b03831660009081526018602052604090205460ff16158061272f57506005546001600160a01b038381169116145b8061274457506001600160a01b03821661dead145b6127c55760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610df0565b601a5460ff1615612987576005546001600160a01b038481169116148015906127fc57506005546001600160a01b03838116911614155b801561281057506001600160a01b03821615155b801561282757506001600160a01b03821661dead14155b801561284c57506001600160a01b03831660009081526027602052604090205460ff16155b801561287157506001600160a01b03821660009081526027602052604090205460ff16155b15612987576001600160a01b03831660009081526029602052604090205460ff1680156128b757506001600160a01b03821660009081526028602052604090205460ff16155b156128f1576006548111156128cb57600080fd5b6008546128d78361131a565b6128e19083614093565b11156128ec57600080fd5b612987565b6001600160a01b03821660009081526029602052604090205460ff16801561293257506001600160a01b03831660009081526028602052604090205460ff16155b15612946576007548111156128ec57600080fd5b6001600160a01b03821660009081526028602052604090205460ff16612987576008546129728361131a565b61297c9083614093565b111561298757600080fd5b60006129923061131a565b601454909150811080159081906129b15750601a5462010000900460ff165b80156129c75750601354600160a01b900460ff16155b80156129ec57506001600160a01b03851660009081526029602052604090205460ff16155b8015612a1157506001600160a01b03851660009081526027602052604090205460ff16155b8015612a3657506001600160a01b03841660009081526027602052604090205460ff16155b15612a64576013805460ff60a01b1916600160a01b179055612a56612f3e565b6013805460ff60a01b191690555b60105460ff1615612ab957600b544210158015612a8957506703782dace9d900004710155b8015612a9e57506001612a9c60096132d2565b115b15612ab157612aac846132dc565b612ab9565b612ab9613403565b6001600160a01b03851660009081526027602052604090205460019060ff1680612afb57506001600160a01b03851660009081526027602052604090205460ff165b15612b04575060005b60008115612f0557601754431080612b4a5750670c7d713b49da0000600654612b2d91906141cc565b8510158015612b4a5750436017546005612b479190614093565b10155b8015612b6e57506001600160a01b03871660009081526029602052604090205460ff165b8015612b9357506001600160a01b03861660009081526029602052604090205460ff16155b8015612ba157506000601b54115b15612d16576017544310612bc857600160066000828254612bc291906141cc565b90915550505b6001600160a01b03861660009081526018602052604090205460ff16612c63576001600160a01b0386166000908152601860205260408120805460ff191660019081179091556019805491929091612c21908490614093565b90915550506040516001600160a01b03871681527fc69d77aec5786ffcf6525c771a49f6299726bb8f4a25ae2723602cd7a28fc1dd9060200160405180910390a15b602654601b54612c7390876141ad565b612c7d91906140ab565b9050601b54601d5482612c9091906141ad565b612c9a91906140ab565b60246000828254612cab9190614093565b9091555050601b54601c54612cc090836141ad565b612cca91906140ab565b60236000828254612cdb9190614093565b9091555050601b54601e54612cf090836141ad565b612cfa91906140ab565b60256000828254612d0b9190614093565b90915550612ee79050565b6001600160a01b03861660009081526029602052604090205460ff168015612d4057506000601f54115b15612dd257602654601f54612d5590876141ad565b612d5f91906140ab565b9050601f5460215482612d7291906141ad565b612d7c91906140ab565b60246000828254612d8d9190614093565b9091555050601f54602054612da290836141ad565b612dac91906140ab565b60236000828254612dbd9190614093565b9091555050601f54602254612cf090836141ad565b6001600160a01b03871660009081526029602052604090205460ff168015612dfc57506000601b54115b15612ee757602654601b54612e1190876141ad565b612e1b91906140ab565b9050601b54601d5482612e2e91906141ad565b612e3891906140ab565b60246000828254612e499190614093565b9091555050601b54601c54612e5e90836141ad565b612e6891906140ab565b60236000828254612e799190614093565b9091555050601b54601e54612e8e90836141ad565b612e9891906140ab565b60256000828254612ea99190614093565b9091555050600e5460ff161580612ec65750612ec3611a6a565b85115b15612ee757612ed66009876132ad565b612ee757612ee5600987613464565b505b8015612ef857612ef887308361244e565b612f0281866141cc565b94505b612f1087878761244e565b612f1b6009886132ad565b8015612f245750815b15611a6157612f34600988613479565b5050505050505050565b6000612f493061131a565b90506000602554602354602454612f609190614093565b612f6a9190614093565b9050811580612f77575080155b15612f80575050565b601454612f8e90600a6141ad565b821115612fa657601454612fa390600a6141ad565b91505b60008060028360245486612fba91906141ad565b612fc491906140ab565b612fce91906140ab565b905047612fe3612fde83876141cc565b61348e565b6000612fef82476141cc565b905060008190506000600260245461300791906140ab565b61301190886141cc565b60235461301e90856141ad565b61302891906140ab565b90506000600260245461303b91906140ab565b61304590896141cc565b60255461305290866141ad565b61305c91906140ab565b90506130688183614093565b61307290846141cc565b600060248190556023819055602555925085158015906130925750600083115b156130a1576130a1868461360b565b81156130ff576015546040516001600160a01b03909116908390600081818185875af1925050503d80600081146130f4576040519150601f19603f3d011682016040523d82523d6000602084013e6130f9565b606091505b50909750505b505050505050505050565b6040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561316f57600080fd5b505afa158015613183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a79190613a78565b816000815181106131c857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061320a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125460405163b6f9de9560e01b815291169063b6f9de9590849061325290600090869061dead904290600401613e9c565b6000604051808303818588803b15801561326b57600080fd5b505af1158015611a61573d6000803e3d6000fd5b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611d2a82826136b9565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000610dc0825490565b6000600c54426132ec9190614093565b600b55600061334c61334482600161330460096132d2565b61330e91906141cc565b6133178761131a565b61332261dead61131a565b61332b3061131a565b6133359190614093565b61333f9190614093565b61371c565b60099061383d565b905060006064600f544761336091906141ad565b61336a91906140ab565b9050816001600160a01b03168160405160006040518083038185875af1925050503d80600081146133b7576040519150601f19603f3d011682016040523d82523d6000602084013e6133bc565b606091505b50909350508215611eb5576040516001600160a01b0383169082907fbd73dd3a978f545a338a5be0f5f49671a6a8dd2c5d8ba117281ff20ad917c93b90600090a350505050565b6000806134116002476140ab565b50506040516000903090819083908181818181875af1925050503d8060008114613457576040519150601f19603f3d011682016040523d82523d6000602084013e61345c565b606091505b505050505050565b60006132cb836001600160a01b038416613849565b60006132cb836001600160a01b038416613898565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106134d157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561352557600080fd5b505afa158015613539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355d9190613a78565b8160018151811061357e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526012546135a4913091168461232a565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac947906135dd908590600090869030904290600401614002565b600060405180830381600087803b1580156135f757600080fd5b505af115801561345c573d6000803e3d6000fd5b6012546136239030906001600160a01b03168461232a565b60125460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906136609030908790600090819084904290600401613e61565b6060604051808303818588803b15801561367957600080fd5b505af115801561368d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136b29190613df1565b5050505050565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c61376891906140ab565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c6137ad91906140ab565b6137b74442614093565b6137c19190614093565b6137cb9190614093565b6137d59190614093565b6137df9190614093565b6137e99190614093565b6040516020016137fb91815260200190565b60408051601f19818403018152919052805160209091012090508461382081866141cc565b61382a9083614239565b6138349190614093565b95945050505050565b60006132cb83836139b5565b600081815260018301602052604081205461389057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc0565b506000610dc0565b600081815260018301602052604081205480156139ab5760006138bc6001836141cc565b85549091506000906138d0906001906141cc565b90508181146139515760008660000182815481106138fe57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061392f57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b855486908061397057634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dc0565b6000915050610dc0565b60008260000182815481106139da57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600082601f8301126139fd578081fd5b81356020613a12613a0d8361406f565b61403e565b80838252828201915082860187848660051b8901011115613a31578586fd5b855b85811015613a4f57813584529284019290840190600101613a33565b5090979650505050505050565b600060208284031215613a6d578081fd5b81356132cb8161428f565b600060208284031215613a89578081fd5b81516132cb8161428f565b60008060408385031215613aa6578081fd5b8235613ab18161428f565b91506020830135613ac18161428f565b809150509250929050565b600080600060608486031215613ae0578081fd5b8335613aeb8161428f565b92506020840135613afb8161428f565b929592945050506040919091013590565b60008060408385031215613b1e578182fd5b8235613b298161428f565b91506020830135613ac1816142a7565b60008060408385031215613b4b578182fd5b8235613b568161428f565b946020939093013593505050565b600080600060408486031215613b78578283fd5b833567ffffffffffffffff80821115613b8f578485fd5b818601915086601f830112613ba2578485fd5b813581811115613bb0578586fd5b8760208260051b8501011115613bc4578586fd5b60209283019550935050840135613bda816142a7565b809150509250925092565b60008060408385031215613bf7578182fd5b823567ffffffffffffffff80821115613c0e578384fd5b818501915085601f830112613c21578384fd5b81356020613c31613a0d8361406f565b8083825282820191508286018a848660051b8901011115613c50578889fd5b8896505b84871015613c7b578035613c678161428f565b835260019690960195918301918301613c54565b5096505086013592505080821115613c91578283fd5b50613c9e858286016139ed565b9150509250929050565b60006020808385031215613cba578182fd5b825167ffffffffffffffff811115613cd0578283fd5b8301601f81018513613ce0578283fd5b8051613cee613a0d8261406f565b80828252848201915084840188868560051b8701011115613d0d578687fd5b8694505b83851015613d2f578051835260019490940193918501918501613d11565b50979650505050505050565b600060208284031215613d4c578081fd5b81356132cb816142a7565b600060208284031215613d68578081fd5b81516132cb816142a7565b600060208284031215613d84578081fd5b5035919050565b600060208284031215613d9c578081fd5b5051919050565b60008060408385031215613db5578182fd5b505080516020909101519092909150565b600080600060608486031215613dda578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e05578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015613e565781516001600160a01b031687529582019590820190600101613e31565b509495945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b848152608060208201526000613eb56080830186613e1e565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015613efd57858101830151858201604001528201613ee1565b81811115613f0e5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b828152604060208201526000613ffa6040830184613e1e565b949350505050565b85815284602082015260a06040820152600061402160a0830186613e1e565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561406757614067614279565b604052919050565b600067ffffffffffffffff82111561408957614089614279565b5060051b60200190565b600082198211156140a6576140a661424d565b500190565b6000826140ba576140ba614263565b500490565b600181815b808511156140fa5781600019048211156140e0576140e061424d565b808516156140ed57918102915b93841c93908002906140c4565b509250929050565b60006132cb60ff84168360008261411b57506001610dc0565b8161412857506000610dc0565b816001811461413e576002811461414857614164565b6001915050610dc0565b60ff8411156141595761415961424d565b50506001821b610dc0565b5060208310610133831016604e8410600b8410161715614187575081810a610dc0565b61419183836140bf565b80600019048211156141a5576141a561424d565b029392505050565b60008160001904831182151516156141c7576141c761424d565b500290565b6000828210156141de576141de61424d565b500390565b600181811c908216806141f757607f821691505b6020821081141561421857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156142325761423261424d565b5060010190565b60008261424857614248614263565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146142a457600080fd5b50565b80151581146142a457600080fdfea26469706673582212205cc9b07c47e251e7db657c98c49a2c5fdfe7e49ad462cf9a0b46f5dc63f83fc464736f6c63430008040033
Deployed Bytecode
0x60806040526004361061044b5760003560e01c80638366e79a11610234578063d257b34f1161012e578063ee40166e116100b6578063f63743421161007a578063f637434214610ca1578063f66bf22914610cb7578063fb002c9714610ccd578063fbe8d4b714610ce3578063fd63914414610cfd57600080fd5b8063ee40166e14610c20578063f11a24d314610c36578063f2fde38b14610c4c578063f498cceb14610c6c578063f5648a4f14610c8c57600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610b5e578063dc8ba8e614610b7e578063dd62ed3e14610b94578063e0bf7fd114610bda578063e2f4560514610c0a57600080fd5b8063d257b34f14610af2578063d73792a914610b12578063d85ba06314610b28578063da4f80e014610b3e57600080fd5b8063a9059cbb116101bc578063b62496f511610180578063b62496f514610a4d578063bbc0c74214610a7d578063c024666814610a9c578063c17b5b8c14610abc578063cd38890914610adc57600080fd5b8063a9059cbb146109cb578063a96444ed146109eb578063aa4bde2814610a01578063aba80fe814610a17578063ac8e332814610a2d57600080fd5b80638da5cb5b116102035780638da5cb5b1461094257806395d89b41146109605780639a7a23d614610975578063a457c2d714610995578063a62068ce146109b557600080fd5b80638366e79a146108d75780638671cb86146108f757806388e765ff146109175780638b28cd191461092d57600080fd5b80634f77f6c0116103455780636b0a894c116102cd5780637571336a116102915780637571336a1461084157806376af4d44146108615780637b20fd90146108775780638095d5641461089757806382aa7c68146108b757600080fd5b80636b0a894c146107c15780636ddd1713146107d757806370a08231146107f7578063715018a614610817578063751039fc1461082c57600080fd5b8063599035661161031457806359903566146107455780635a139dd41461076557806366d602ae1461077b5780636a486a8e146107915780636a63ce88146107a757600080fd5b80634f77f6c0146106d357806350e838e5146106e957806351f205e41461071957806358a6d5311461072e57600080fd5b80632583de65116103d3578063395093511161039757806339509351146106435780633d3d937d14610663578063452ed4f114610679578063499b8394146106995780634a62bb65146106b957600080fd5b80632583de65146105b1578063285b9747146105d15780632be32b61146105f1578063313ce5671461061157806334908e561461062d57600080fd5b806318160ddd1161041a57806318160ddd1461051a5780631a8145bb146105395780631c499ab01461054f5780632307b4411461057157806323b872dd1461059157600080fd5b806306fdde03146104575780630758d92414610482578063095ea7b3146104ba57806310d5de53146104ea57600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610d1d565b6040516104799190613ed1565b60405180910390f35b34801561048e57600080fd5b506012546104a2906001600160a01b031681565b6040516001600160a01b039091168152602001610479565b3480156104c657600080fd5b506104da6104d5366004613b39565b610daf565b6040519015158152602001610479565b3480156104f657600080fd5b506104da610505366004613a5c565b60286020526000908152604090205460ff1681565b34801561052657600080fd5b506002545b604051908152602001610479565b34801561054557600080fd5b5061052b60245481565b34801561055b57600080fd5b5061056f61056a366004613d73565b610dc6565b005b34801561057d57600080fd5b5061056f61058c366004613be5565b610e8d565b34801561059d57600080fd5b506104da6105ac366004613acc565b610f50565b3480156105bd57600080fd5b5061056f6105cc366004613d3b565b610ffa565b3480156105dd57600080fd5b5061056f6105ec366004613d3b565b611037565b3480156105fd57600080fd5b5061056f61060c366004613d73565b611074565b34801561061d57600080fd5b5060405160128152602001610479565b34801561063957600080fd5b5061052b60225481565b34801561064f57600080fd5b506104da61065e366004613b39565b61112c565b34801561066f57600080fd5b5061052b60115481565b34801561068557600080fd5b506013546104a2906001600160a01b031681565b3480156106a557600080fd5b5061056f6106b4366004613a5c565b611168565b3480156106c557600080fd5b50601a546104da9060ff1681565b3480156106df57600080fd5b5061052b60205481565b3480156106f557600080fd5b506104da610704366004613a5c565b60186020526000908152604090205460ff1681565b34801561072557600080fd5b5061056f6111c7565b34801561073a57600080fd5b5060175443106104da565b34801561075157600080fd5b5061056f610760366004613d73565b6112d0565b34801561077157600080fd5b5061052b601c5481565b34801561078757600080fd5b5061052b60075481565b34801561079d57600080fd5b5061052b601f5481565b3480156107b357600080fd5b506010546104da9060ff1681565b3480156107cd57600080fd5b5061052b60195481565b3480156107e357600080fd5b50601a546104da9062010000900460ff1681565b34801561080357600080fd5b5061052b610812366004613a5c565b61131a565b34801561082357600080fd5b5061056f611335565b34801561083857600080fd5b5061056f6113a9565b34801561084d57600080fd5b5061056f61085c366004613b0c565b611408565b34801561086d57600080fd5b5061052b600b5481565b34801561088357600080fd5b5061056f610892366004613d73565b6114d0565b3480156108a357600080fd5b5061056f6108b2366004613dc6565b611527565b3480156108c357600080fd5b5061056f6108d2366004613d73565b6115cb565b3480156108e357600080fd5b506104da6108f2366004613a94565b611663565b34801561090357600080fd5b5061056f610912366004613d73565b611805565b34801561092357600080fd5b5061052b60065481565b34801561093957600080fd5b5061052b611a6a565b34801561094e57600080fd5b506005546001600160a01b03166104a2565b34801561096c57600080fd5b5061046c611c63565b34801561098157600080fd5b5061056f610990366004613b0c565b611c72565b3480156109a157600080fd5b506104da6109b0366004613b39565b611d66565b3480156109c157600080fd5b5061052b60175481565b3480156109d757600080fd5b506104da6109e6366004613b39565b611dff565b3480156109f757600080fd5b5061052b60255481565b348015610a0d57600080fd5b5061052b60085481565b348015610a2357600080fd5b5061052b600c5481565b348015610a3957600080fd5b5061056f610a48366004613b64565b611e0c565b348015610a5957600080fd5b506104da610a68366004613a5c565b60296020526000908152604090205460ff1681565b348015610a8957600080fd5b50601a546104da90610100900460ff1681565b348015610aa857600080fd5b5061056f610ab7366004613b0c565b611ebb565b348015610ac857600080fd5b5061056f610ad7366004613dc6565b611f44565b348015610ae857600080fd5b5061052b601e5481565b348015610afe57600080fd5b5061056f610b0d366004613d73565b611fe8565b348015610b1e57600080fd5b5061052b60265481565b348015610b3457600080fd5b5061052b601b5481565b348015610b4a57600080fd5b5061056f610b59366004613d3b565b612072565b348015610b6a57600080fd5b5061056f610b79366004613d73565b6120b6565b348015610b8a57600080fd5b5061052b600f5481565b348015610ba057600080fd5b5061052b610baf366004613a94565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be657600080fd5b506104da610bf5366004613a5c565b60276020526000908152604090205460ff1681565b348015610c1657600080fd5b5061052b60145481565b348015610c2c57600080fd5b5061052b60165481565b348015610c4257600080fd5b5061052b601d5481565b348015610c5857600080fd5b5061056f610c67366004613a5c565b61216e565b348015610c7857600080fd5b5061056f610c87366004613d73565b612259565b348015610c9857600080fd5b5061056f612295565b348015610cad57600080fd5b5061052b60215481565b348015610cc357600080fd5b5061052b600d5481565b348015610cd957600080fd5b5061052b60235481565b348015610cef57600080fd5b50600e546104da9060ff1681565b348015610d0957600080fd5b506104da610d18366004613a5c565b61231d565b606060038054610d2c906141e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d58906141e3565b8015610da55780601f10610d7a57610100808354040283529160200191610da5565b820191906000526020600020905b815481529060010190602001808311610d8857829003601f168201915b5050505050905090565b6000610dbc33848461232a565b5060015b92915050565b6005546001600160a01b03163314610df95760405162461bcd60e51b8152600401610df090613f67565b60405180910390fd5b610e056012600a614102565b6064610e1060025490565b610e1b9060016141ad565b610e2591906140ab565b610e2f91906140ab565b811015610e3b57600080fd5b610e476012600a614102565b610e5190826141ad565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610df090613f67565b8051825114610ec557600080fd5b610258825110610ed457600080fd5b60005b8251811015610f4b57610f3933848381518110610f0457634e487b7160e01b600052603260045260246000fd5b6020026020010151848481518110610f2c57634e487b7160e01b600052603260045260246000fd5b602002602001015161244e565b80610f438161421e565b915050610ed7565b505050565b6000610f5d8484846125a3565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fe25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610df0565b610fef853385840361232a565b506001949350505050565b6005546001600160a01b031633146110245760405162461bcd60e51b8152600401610df090613f67565b6010805460ff1916911515919091179055565b6005546001600160a01b031633146110615760405162461bcd60e51b8152600401610df090613f67565b600e805460ff1916911515919091179055565b6005546001600160a01b0316331461109e5760405162461bcd60e51b8152600401610df090613f67565b6110aa6012600a614102565b6103e86110b660025490565b6110c19060016141ad565b6110cb91906140ab565b6110d591906140ab565b8110156110e157600080fd5b6110ed6012600a614102565b6110f790826141ad565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610e82565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dbc918590611163908690614093565b61232a565b6005546001600160a01b031633146111925760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0381166111a557600080fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111f15760405162461bcd60e51b8152600401610df090613f67565b6014546111fd3061131a565b1015611273576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610df0565b6013805460ff60a01b1916600160a01b17905561128e612f3e565b6013805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112fa5760405162461bcd60e51b8152600401610df090613f67565b600a811015801561130c575060648111155b61131557600080fd5b600f55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461135f5760405162461bcd60e51b8152600401610df090613f67565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113d35760405162461bcd60e51b8152600401610df090613f67565b601a805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114325760405162461bcd60e51b8152600401610df090613f67565b806114a5576013546001600160a01b03838116911614156114a55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610df0565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114fa5760405162461bcd60e51b8152600401610df090613f67565b6001811015801561150d57506105a08111155b61151657600080fd5b61152181603c6141ad565b600c5550565b6005546001600160a01b031633146115515760405162461bcd60e51b8152600401610df090613f67565b601c839055601d829055601e8190558061156b8385614093565b6115759190614093565b601b8190556103e81015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146115f55760405162461bcd60e51b8152600401610df090613f67565b6017541561160257600080fd5b601a805462ffff00191662010100179055436016819055611624908290614093565b601755600c546116349042614093565b600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146116905760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0383166116a357600080fd5b6001600160a01b0383163014156116b957600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156116fb57600080fd5b505afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190613d8b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561178157600080fd5b505af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190613d57565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461182f5760405162461bcd60e51b8152600401610df090613f67565b603281111561183d57600080fd5b611849610e10426141cc565b601154111561185757600080fd5b426011556013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561189f57600080fd5b505afa1580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d79190613d8b565b905060006118e43061131a565b9050600060646118f485856141ad565b6118fe91906140ab565b60135460125460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b390604401602060405180830381600087803b15801561195357600080fd5b505af1158015611967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198b9190613d57565b50601254604051629d473b60e21b81526001600160a01b03909116906302751cec906119c69030908690600190819084904290600401613e61565b6040805180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a179190613da3565b5050600083611a253061131a565b611a2f91906141cc565b90508015611a4457611a443061dead8361244e565b6000611a5083476141cc565b90508015611a6157611a618161310a565b50505050505050565b604080516002808252606082018352600092839291906020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611ad357600080fd5b505afa158015611ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0b9190613a78565b81600081518110611b2c57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611b6e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050601254600d5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611bdd918690600401613fe1565b60006040518083038186803b158015611bf557600080fd5b505afa158015611c09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c319190810190613ca8565b905080600181518110611c5457634e487b7160e01b600052603260045260246000fd5b60200260200101519250505090565b606060048054610d2c906141e3565b6005546001600160a01b03163314611c9c5760405162461bcd60e51b8152600401610df090613f67565b6013546001600160a01b0383811691161415611d205760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610df0565b611d2a828261327f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611de85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610df0565b611df5338585840361232a565b5060019392505050565b6000610dbc3384846125a3565b6005546001600160a01b03163314611e365760405162461bcd60e51b8152600401610df090613f67565b60005b82811015611eb5578160186000868685818110611e6657634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611e7b9190613a5c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611ead8161421e565b915050611e39565b50505050565b6005546001600160a01b03163314611ee55760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611f6e5760405162461bcd60e51b8152600401610df090613f67565b60208390556021829055602281905580611f888385614093565b611f929190614093565b601f8190556126ac1015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146120125760405162461bcd60e51b8152600401610df090613f67565b620186a061201f60025490565b61202a9060016141ad565b61203491906140ab565b81101561204057600080fd5b6103e861204c60025490565b6120579060016141ad565b61206191906140ab565b81111561206d57600080fd5b601455565b6005546001600160a01b0316331461209c5760405162461bcd60e51b8152600401610df090613f67565b601a80549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146120e05760405162461bcd60e51b8152600401610df090613f67565b6120ec6012600a614102565b6103e86120f860025490565b6121039060016141ad565b61210d91906140ab565b61211791906140ab565b81101561212357600080fd5b61212f6012600a614102565b61213990826141ad565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e82565b6005546001600160a01b031633146121985760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0381166121fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122835760405162461bcd60e51b8152600401610df090613f67565b6000811161229057600080fd5b600d55565b6005546001600160a01b031633146122bf5760405162461bcd60e51b8152600401610df090613f67565b60006122d36005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611eb5576040519150601f19603f3d011682016040523d82523d6000602084013e611eb5565b6000610dc06009836132ad565b6001600160a01b03831661238c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610df0565b6001600160a01b0382166123ed5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610df0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124745760405162461bcd60e51b8152600401610df090613f9c565b6001600160a01b03821661249a5760405162461bcd60e51b8152600401610df090613f24565b6001600160a01b038316600090815260208190526040902054818110156125125760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610df0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612549908490614093565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161259591815260200190565b60405180910390a350505050565b6001600160a01b0383166125c95760405162461bcd60e51b8152600401610df090613f9c565b6001600160a01b0382166125ef5760405162461bcd60e51b8152600401610df090613f24565b6000811161264e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610df0565b601a54610100900460ff166126e1576001600160a01b03831660009081526027602052604090205460ff168061269c57506001600160a01b03821660009081526027602052604090205460ff165b6126e15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610df0565b60175443101580156126f557506000601754115b156127c5576001600160a01b03831660009081526018602052604090205460ff16158061272f57506005546001600160a01b038381169116145b8061274457506001600160a01b03821661dead145b6127c55760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610df0565b601a5460ff1615612987576005546001600160a01b038481169116148015906127fc57506005546001600160a01b03838116911614155b801561281057506001600160a01b03821615155b801561282757506001600160a01b03821661dead14155b801561284c57506001600160a01b03831660009081526027602052604090205460ff16155b801561287157506001600160a01b03821660009081526027602052604090205460ff16155b15612987576001600160a01b03831660009081526029602052604090205460ff1680156128b757506001600160a01b03821660009081526028602052604090205460ff16155b156128f1576006548111156128cb57600080fd5b6008546128d78361131a565b6128e19083614093565b11156128ec57600080fd5b612987565b6001600160a01b03821660009081526029602052604090205460ff16801561293257506001600160a01b03831660009081526028602052604090205460ff16155b15612946576007548111156128ec57600080fd5b6001600160a01b03821660009081526028602052604090205460ff16612987576008546129728361131a565b61297c9083614093565b111561298757600080fd5b60006129923061131a565b601454909150811080159081906129b15750601a5462010000900460ff165b80156129c75750601354600160a01b900460ff16155b80156129ec57506001600160a01b03851660009081526029602052604090205460ff16155b8015612a1157506001600160a01b03851660009081526027602052604090205460ff16155b8015612a3657506001600160a01b03841660009081526027602052604090205460ff16155b15612a64576013805460ff60a01b1916600160a01b179055612a56612f3e565b6013805460ff60a01b191690555b60105460ff1615612ab957600b544210158015612a8957506703782dace9d900004710155b8015612a9e57506001612a9c60096132d2565b115b15612ab157612aac846132dc565b612ab9565b612ab9613403565b6001600160a01b03851660009081526027602052604090205460019060ff1680612afb57506001600160a01b03851660009081526027602052604090205460ff165b15612b04575060005b60008115612f0557601754431080612b4a5750670c7d713b49da0000600654612b2d91906141cc565b8510158015612b4a5750436017546005612b479190614093565b10155b8015612b6e57506001600160a01b03871660009081526029602052604090205460ff165b8015612b9357506001600160a01b03861660009081526029602052604090205460ff16155b8015612ba157506000601b54115b15612d16576017544310612bc857600160066000828254612bc291906141cc565b90915550505b6001600160a01b03861660009081526018602052604090205460ff16612c63576001600160a01b0386166000908152601860205260408120805460ff191660019081179091556019805491929091612c21908490614093565b90915550506040516001600160a01b03871681527fc69d77aec5786ffcf6525c771a49f6299726bb8f4a25ae2723602cd7a28fc1dd9060200160405180910390a15b602654601b54612c7390876141ad565b612c7d91906140ab565b9050601b54601d5482612c9091906141ad565b612c9a91906140ab565b60246000828254612cab9190614093565b9091555050601b54601c54612cc090836141ad565b612cca91906140ab565b60236000828254612cdb9190614093565b9091555050601b54601e54612cf090836141ad565b612cfa91906140ab565b60256000828254612d0b9190614093565b90915550612ee79050565b6001600160a01b03861660009081526029602052604090205460ff168015612d4057506000601f54115b15612dd257602654601f54612d5590876141ad565b612d5f91906140ab565b9050601f5460215482612d7291906141ad565b612d7c91906140ab565b60246000828254612d8d9190614093565b9091555050601f54602054612da290836141ad565b612dac91906140ab565b60236000828254612dbd9190614093565b9091555050601f54602254612cf090836141ad565b6001600160a01b03871660009081526029602052604090205460ff168015612dfc57506000601b54115b15612ee757602654601b54612e1190876141ad565b612e1b91906140ab565b9050601b54601d5482612e2e91906141ad565b612e3891906140ab565b60246000828254612e499190614093565b9091555050601b54601c54612e5e90836141ad565b612e6891906140ab565b60236000828254612e799190614093565b9091555050601b54601e54612e8e90836141ad565b612e9891906140ab565b60256000828254612ea99190614093565b9091555050600e5460ff161580612ec65750612ec3611a6a565b85115b15612ee757612ed66009876132ad565b612ee757612ee5600987613464565b505b8015612ef857612ef887308361244e565b612f0281866141cc565b94505b612f1087878761244e565b612f1b6009886132ad565b8015612f245750815b15611a6157612f34600988613479565b5050505050505050565b6000612f493061131a565b90506000602554602354602454612f609190614093565b612f6a9190614093565b9050811580612f77575080155b15612f80575050565b601454612f8e90600a6141ad565b821115612fa657601454612fa390600a6141ad565b91505b60008060028360245486612fba91906141ad565b612fc491906140ab565b612fce91906140ab565b905047612fe3612fde83876141cc565b61348e565b6000612fef82476141cc565b905060008190506000600260245461300791906140ab565b61301190886141cc565b60235461301e90856141ad565b61302891906140ab565b90506000600260245461303b91906140ab565b61304590896141cc565b60255461305290866141ad565b61305c91906140ab565b90506130688183614093565b61307290846141cc565b600060248190556023819055602555925085158015906130925750600083115b156130a1576130a1868461360b565b81156130ff576015546040516001600160a01b03909116908390600081818185875af1925050503d80600081146130f4576040519150601f19603f3d011682016040523d82523d6000602084013e6130f9565b606091505b50909750505b505050505050505050565b6040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561316f57600080fd5b505afa158015613183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a79190613a78565b816000815181106131c857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061320a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125460405163b6f9de9560e01b815291169063b6f9de9590849061325290600090869061dead904290600401613e9c565b6000604051808303818588803b15801561326b57600080fd5b505af1158015611a61573d6000803e3d6000fd5b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611d2a82826136b9565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000610dc0825490565b6000600c54426132ec9190614093565b600b55600061334c61334482600161330460096132d2565b61330e91906141cc565b6133178761131a565b61332261dead61131a565b61332b3061131a565b6133359190614093565b61333f9190614093565b61371c565b60099061383d565b905060006064600f544761336091906141ad565b61336a91906140ab565b9050816001600160a01b03168160405160006040518083038185875af1925050503d80600081146133b7576040519150601f19603f3d011682016040523d82523d6000602084013e6133bc565b606091505b50909350508215611eb5576040516001600160a01b0383169082907fbd73dd3a978f545a338a5be0f5f49671a6a8dd2c5d8ba117281ff20ad917c93b90600090a350505050565b6000806134116002476140ab565b50506040516000903090819083908181818181875af1925050503d8060008114613457576040519150601f19603f3d011682016040523d82523d6000602084013e61345c565b606091505b505050505050565b60006132cb836001600160a01b038416613849565b60006132cb836001600160a01b038416613898565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106134d157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561352557600080fd5b505afa158015613539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355d9190613a78565b8160018151811061357e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526012546135a4913091168461232a565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac947906135dd908590600090869030904290600401614002565b600060405180830381600087803b1580156135f757600080fd5b505af115801561345c573d6000803e3d6000fd5b6012546136239030906001600160a01b03168461232a565b60125460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906136609030908790600090819084904290600401613e61565b6060604051808303818588803b15801561367957600080fd5b505af115801561368d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136b29190613df1565b5050505050565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c61376891906140ab565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c6137ad91906140ab565b6137b74442614093565b6137c19190614093565b6137cb9190614093565b6137d59190614093565b6137df9190614093565b6137e99190614093565b6040516020016137fb91815260200190565b60408051601f19818403018152919052805160209091012090508461382081866141cc565b61382a9083614239565b6138349190614093565b95945050505050565b60006132cb83836139b5565b600081815260018301602052604081205461389057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc0565b506000610dc0565b600081815260018301602052604081205480156139ab5760006138bc6001836141cc565b85549091506000906138d0906001906141cc565b90508181146139515760008660000182815481106138fe57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061392f57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b855486908061397057634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dc0565b6000915050610dc0565b60008260000182815481106139da57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600082601f8301126139fd578081fd5b81356020613a12613a0d8361406f565b61403e565b80838252828201915082860187848660051b8901011115613a31578586fd5b855b85811015613a4f57813584529284019290840190600101613a33565b5090979650505050505050565b600060208284031215613a6d578081fd5b81356132cb8161428f565b600060208284031215613a89578081fd5b81516132cb8161428f565b60008060408385031215613aa6578081fd5b8235613ab18161428f565b91506020830135613ac18161428f565b809150509250929050565b600080600060608486031215613ae0578081fd5b8335613aeb8161428f565b92506020840135613afb8161428f565b929592945050506040919091013590565b60008060408385031215613b1e578182fd5b8235613b298161428f565b91506020830135613ac1816142a7565b60008060408385031215613b4b578182fd5b8235613b568161428f565b946020939093013593505050565b600080600060408486031215613b78578283fd5b833567ffffffffffffffff80821115613b8f578485fd5b818601915086601f830112613ba2578485fd5b813581811115613bb0578586fd5b8760208260051b8501011115613bc4578586fd5b60209283019550935050840135613bda816142a7565b809150509250925092565b60008060408385031215613bf7578182fd5b823567ffffffffffffffff80821115613c0e578384fd5b818501915085601f830112613c21578384fd5b81356020613c31613a0d8361406f565b8083825282820191508286018a848660051b8901011115613c50578889fd5b8896505b84871015613c7b578035613c678161428f565b835260019690960195918301918301613c54565b5096505086013592505080821115613c91578283fd5b50613c9e858286016139ed565b9150509250929050565b60006020808385031215613cba578182fd5b825167ffffffffffffffff811115613cd0578283fd5b8301601f81018513613ce0578283fd5b8051613cee613a0d8261406f565b80828252848201915084840188868560051b8701011115613d0d578687fd5b8694505b83851015613d2f578051835260019490940193918501918501613d11565b50979650505050505050565b600060208284031215613d4c578081fd5b81356132cb816142a7565b600060208284031215613d68578081fd5b81516132cb816142a7565b600060208284031215613d84578081fd5b5035919050565b600060208284031215613d9c578081fd5b5051919050565b60008060408385031215613db5578182fd5b505080516020909101519092909150565b600080600060608486031215613dda578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e05578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015613e565781516001600160a01b031687529582019590820190600101613e31565b509495945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b848152608060208201526000613eb56080830186613e1e565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015613efd57858101830151858201604001528201613ee1565b81811115613f0e5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b828152604060208201526000613ffa6040830184613e1e565b949350505050565b85815284602082015260a06040820152600061402160a0830186613e1e565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561406757614067614279565b604052919050565b600067ffffffffffffffff82111561408957614089614279565b5060051b60200190565b600082198211156140a6576140a661424d565b500190565b6000826140ba576140ba614263565b500490565b600181815b808511156140fa5781600019048211156140e0576140e061424d565b808516156140ed57918102915b93841c93908002906140c4565b509250929050565b60006132cb60ff84168360008261411b57506001610dc0565b8161412857506000610dc0565b816001811461413e576002811461414857614164565b6001915050610dc0565b60ff8411156141595761415961424d565b50506001821b610dc0565b5060208310610133831016604e8410600b8410161715614187575081810a610dc0565b61419183836140bf565b80600019048211156141a5576141a561424d565b029392505050565b60008160001904831182151516156141c7576141c761424d565b500290565b6000828210156141de576141de61424d565b500390565b600181811c908216806141f757607f821691505b6020821081141561421857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156142325761423261424d565b5060010190565b60008261424857614248614263565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146142a457600080fd5b50565b80151581146142a457600080fdfea26469706673582212205cc9b07c47e251e7db657c98c49a2c5fdfe7e49ad462cf9a0b46f5dc63f83fc464736f6c63430008040033
Deployed Bytecode Sourcemap
12853:22729:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5105:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13417:27;;;;;;;;;;-1:-1:-1;13417:27:0;;;;-1:-1:-1;;;;;13417:27:0;;;;;;-1:-1:-1;;;;;9209:32:1;;;9191:51;;9179:2;9164:18;13417:27:0;9146:102:1;6019:169:0;;;;;;;;;;-1:-1:-1;6019:169:0;;;;;:::i;:::-;;:::i;:::-;;;11210:14:1;;11203:22;11185:41;;11173:2;11158:18;6019:169:0;11140:92:1;14524:64:0;;;;;;;;;;-1:-1:-1;14524:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5426:108;;;;;;;;;;-1:-1:-1;5514:12:0;;5426:108;;;19561:25:1;;;19549:2;19534:18;5426:108:0;19516:76:1;14253:33:0;;;;;;;;;;;;;;;;19116:255;;;;;;;;;;-1:-1:-1;19116:255:0;;;;;:::i;:::-;;:::i;:::-;;19901:450;;;;;;;;;;-1:-1:-1;19901:450:0;;;;;:::i;:::-;;:::i;6196:492::-;;;;;;;;;;-1:-1:-1;6196:492:0;;;;;:::i;:::-;;:::i;18243:103::-;;;;;;;;;;-1:-1:-1;18243:103:0;;;;;:::i;:::-;;:::i;29630:105::-;;;;;;;;;;-1:-1:-1;29630:105:0;;;;;:::i;:::-;;:::i;18592:250::-;;;;;;;;;;-1:-1:-1;18592:250:0;;;;;:::i;:::-;;:::i;5325:93::-;;;;;;;;;;-1:-1:-1;5325:93:0;;5408:2;20663:36:1;;20651:2;20636:18;5325:93:0;20618:87:1;14174:29:0;;;;;;;;;;;;;;;;6696:215;;;;;;;;;;-1:-1:-1;6696:215:0;;;;;:::i;:::-;;:::i;13376:32::-;;;;;;;;;;;;;;;;13451:21;;;;;;;;;;-1:-1:-1;13451:21:0;;;;-1:-1:-1;;;;;13451:21:0;;;35020:195;;;;;;;;;;-1:-1:-1;35020:195:0;;;;;:::i;:::-;;:::i;13792:33::-;;;;;;;;;;-1:-1:-1;13792:33:0;;;;;;;;14097:32;;;;;;;;;;;;;;;;13702:49;;;;;;;;;;-1:-1:-1;13702:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35267:312;;;;;;;;;;;;;:::i;27297:120::-;;;;;;;;;;-1:-1:-1;27391:18:0;;27376:12;:33;27297:120;;29306:166;;;;;;;;;;-1:-1:-1;29306:166:0;;;;;:::i;:::-;;:::i;13950:31::-;;;;;;;;;;;;;;;;12988:28;;;;;;;;;;;;;;;;14062;;;;;;;;;;;;;;;;13333:34;;;;;;;;;;-1:-1:-1;13333:34:0;;;;;;;;13758:25;;;;;;;;;;;;;;;;13872:31;;;;;;;;;;-1:-1:-1;13872:31:0;;;;;;;;;;;5542:127;;;;;;;;;;-1:-1:-1;5542:127:0;;;;;:::i;:::-;;:::i;9181:150::-;;;;;;;;;;;;;:::i;18010:115::-;;;;;;;;;;;;;:::i;20363:260::-;;;;;;;;;;-1:-1:-1;20363:260:0;;;;;:::i;:::-;;:::i;13111:30::-;;;;;;;;;;;;;;;;29091:207;;;;;;;;;;-1:-1:-1;29091:207:0;;;;;:::i;:::-;;:::i;21190:391::-;;;;;;;;;;-1:-1:-1;21190:391:0;;;;;:::i;:::-;;:::i;17563:::-;;;;;;;;;;-1:-1:-1;17563:391:0;;;;;:::i;:::-;;:::i;34423:394::-;;;;;;;;;;-1:-1:-1;34423:394:0;;;;;:::i;:::-;;:::i;30845:1254::-;;;;;;;;;;-1:-1:-1;30845:1254:0;;;;;:::i;:::-;;:::i;12954:27::-;;;;;;;;;;;;;;;;34071:344;;;;;;;;;;;;;:::i;8967:79::-;;;;;;;;;;-1:-1:-1;9032:6:0;;-1:-1:-1;;;;;9032:6:0;8967:79;;5213:104;;;;;;;;;;;;;:::i;20631:295::-;;;;;;;;;;-1:-1:-1;20631:295:0;;;;;:::i;:::-;;:::i;6919:413::-;;;;;;;;;;-1:-1:-1;6919:413:0;;;;;:::i;:::-;;:::i;13662:33::-;;;;;;;;;;;;;;;;5677:175;;;;;;;;;;-1:-1:-1;5677:175:0;;;;;:::i;:::-;;:::i;14293:31::-;;;;;;;;;;;;;;;;13023:30;;;;;;;;;;;;;;;;13148:48;;;;;;;;;;;;;;;;18354:226;;;;;;;;;;-1:-1:-1;18354:226:0;;;;;:::i;:::-;;:::i;14746:58::-;;;;;;;;;;-1:-1:-1;14746:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13832:33;;;;;;;;;;-1:-1:-1;13832:33:0;;;;;;;;;;;21997:182;;;;;;;;;;-1:-1:-1;21997:182:0;;;;;:::i;:::-;;:::i;21589:400::-;;;;;;;;;;-1:-1:-1;21589:400:0;;;;;:::i;:::-;;:::i;14025:28::-;;;;;;;;;;;;;;;;19441:233;;;;;;;;;;-1:-1:-1;19441:233:0;;;;;:::i;:::-;;:::i;14333:38::-;;;;;;;;;;;;;;;;13916:27;;;;;;;;;;;;;;;;18133:102;;;;;;;;;;-1:-1:-1;18133:102:0;;;;;:::i;:::-;;:::i;18854:254::-;;;;;;;;;;-1:-1:-1;18854:254:0;;;;;:::i;:::-;;:::i;13288:38::-;;;;;;;;;;;;;;;;5860:151;;;;;;;;;;-1:-1:-1;5860:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5976:18:0;;;5949:7;5976:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5860:151;14465:52;;;;;;;;;;-1:-1:-1;14465:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13509:33;;;;;;;;;;;;;;;;13585:37;;;;;;;;;;;;;;;;13988:30;;;;;;;;;;;;;;;;9339:244;;;;;;;;;;-1:-1:-1;9339:244:0;;;;;:::i;:::-;;:::i;29480:142::-;;;;;;;;;;-1:-1:-1;29480:142:0;;;;;:::i;:::-;;:::i;34855:157::-;;;;;;;;;;;;;:::i;14136:31::-;;;;;;;;;;;;;;;;13203:38;;;;;;;;;;;;;;;;14212:34;;;;;;;;;;;;;;;;13248:33;;;;;;;;;;-1:-1:-1;13248:33:0;;;;;;;;17420:131;;;;;;;;;;-1:-1:-1;17420:131:0;;;;;:::i;:::-;;:::i;5105:100::-;5159:13;5192:5;5185:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5105:100;:::o;6019:169::-;6102:4;6119:39;631:10;6142:7;6151:6;6119:8;:39::i;:::-;-1:-1:-1;6176:4:0;6019:169;;;;;:::o;19116:255::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;;;;;;;;;19234:16:::1;5408:2:::0;19234::::1;:16;:::i;:::-;19226:3;19206:13;5514:12:::0;;;5426:108;19206:13:::1;:17;::::0;19222:1:::1;19206:17;:::i;:::-;:23;;;;:::i;:::-;19205:46;;;;:::i;:::-;19195:6;:56;;19187:65;;;::::0;::::1;;19291:16;5408:2:::0;19291::::1;:16;:::i;:::-;19281:27;::::0;:6;:27:::1;:::i;:::-;19263:15;:45:::0;;;19324:39:::1;::::0;19561:25:1;;;19324:39:0::1;::::0;19549:2:1;19534:18;19324:39:0::1;;;;;;;;19116:255:::0;:::o;19901:450::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;20043:15:::1;:22;20025:7;:14;:40;20017:49;;;::::0;::::1;;20102:3;20085:7;:14;:20;20077:29;;;::::0;::::1;;20219:9;20215:129;20238:7;:14;20234:1;:18;20215:129;;;20273:59;20289:10;20301:7;20309:1;20301:10;;;;;;-1:-1:-1::0;;;20301:10:0::1;;;;;;;;;;;;;;;20313:15;20329:1;20313:18;;;;;;-1:-1:-1::0;;;20313:18:0::1;;;;;;;;;;;;;;;20273:15;:59::i;:::-;20254:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20215:129;;;;19901:450:::0;;:::o;6196:492::-;6336:4;6353:36;6363:6;6371:9;6382:6;6353:9;:36::i;:::-;-1:-1:-1;;;;;6429:19:0;;6402:24;6429:19;;;:11;:19;;;;;;;;631:10;6429:33;;;;;;;;6481:26;;;;6473:79;;;;-1:-1:-1;;;6473:79:0;;17151:2:1;6473:79:0;;;17133:21:1;17190:2;17170:18;;;17163:30;17229:34;17209:18;;;17202:62;-1:-1:-1;;;17280:18:1;;;17273:38;17328:19;;6473:79:0;17123:230:1;6473:79:0;6588:57;6597:6;631:10;6638:6;6619:16;:25;6588:8;:57::i;:::-;-1:-1:-1;6676:4:0;;6196:492;-1:-1:-1;;;;6196:492:0:o;18243:103::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;18314:14:::1;:24:::0;;-1:-1:-1;;18314:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18243:103::o;29630:105::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;29702:14:::1;:25:::0;;-1:-1:-1;;29702:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29630:105::o;18592:250::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;18714:16:::1;5408:2:::0;18714::::1;:16;:::i;:::-;18705:4;18685:13;5514:12:::0;;;5426:108;18685:13:::1;:17;::::0;18701:1:::1;18685:17;:::i;:::-;:24;;;;:::i;:::-;18684:47;;;;:::i;:::-;18674:6;:57;;18666:66;;;::::0;::::1;;18768:16;5408:2:::0;18768::::1;:16;:::i;:::-;18758:27;::::0;:6;:27:::1;:::i;:::-;18743:12;:42:::0;;;18801:33:::1;::::0;19561:25:1;;;18801:33:0::1;::::0;19549:2:1;19534:18;18801:33:0::1;19516:76:1::0;6696:215:0;631:10;6784:4;6833:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6833:34:0;;;;;;;;;;6784:4;;6801:80;;6824:7;;6833:47;;6870:10;;6833:47;:::i;:::-;6801:8;:80::i;35020:195::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35116:32:0;::::1;35108:41;;;::::0;::::1;;35160:17;:47:::0;;-1:-1:-1;;;;;;35160:47:0::1;-1:-1:-1::0;;;;;35160:47:0;;;::::1;::::0;;;::::1;::::0;;35020:195::o;35267:312::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;35358:18:::1;;35330:24;35348:4;35330:9;:24::i;:::-;:46;;35322:123;;;::::0;;-1:-1:-1;;;35322:123:0;;16360:2:1;35322:123:0::1;::::0;::::1;16342:21:1::0;16379:18;;;16372:30;;;;16438:34;16418:18;;;16411:62;16509:34;16489:18;;;16482:62;16561:19;;35322:123:0::1;16332:254:1::0;35322:123:0::1;35456:8;:15:::0;;-1:-1:-1;;;;35456:15:0::1;-1:-1:-1::0;;;35456:15:0::1;::::0;;35482:10:::1;:8;:10::i;:::-;35503:8;:16:::0;;-1:-1:-1;;;;35503:16:0::1;::::0;;35535:36:::1;::::0;35555:15:::1;19561:25:1::0;;35535:36:0::1;::::0;19549:2:1;19534:18;35535:36:0::1;;;;;;;35267:312::o:0;29306:166::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;29405:2:::1;29394:7;:13;;:31;;;;;29422:3;29411:7;:14;;29394:31;29386:40;;;::::0;::::1;;29437:17;:27:::0;29306:166::o;5542:127::-;-1:-1:-1;;;;;5643:18:0;5616:7;5643:18;;;;;;;;;;;;5542:127::o;9181:150::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;9274:6:::1;::::0;9253:40:::1;::::0;9290:1:::1;::::0;-1:-1:-1;;;;;9274:6:0::1;::::0;9253:40:::1;::::0;9290:1;;9253:40:::1;9304:6;:19:::0;;-1:-1:-1;;;;;;9304:19:0::1;::::0;;9181:150::o;18010:115::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;18064:14:::1;:22:::0;;-1:-1:-1;;18064:22:0::1;::::0;;18102:15:::1;::::0;::::1;::::0;18081:5:::1;::::0;18102:15:::1;18010:115::o:0;20363:260::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;20459:4:::1;20455:104;;20497:6;::::0;-1:-1:-1;;;;;20487:16:0;;::::1;20497:6:::0;::::1;20487:16;;20479:68;;;::::0;-1:-1:-1;;;20479:68:0;;14712:2:1;20479:68:0::1;::::0;::::1;14694:21:1::0;14751:2;14731:18;;;14724:30;14790:34;14770:18;;;14763:62;-1:-1:-1;;;14841:18:1;;;14834:37;14888:19;;20479:68:0::1;14684:229:1::0;20479:68:0::1;-1:-1:-1::0;;;;;20569:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20569:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20363:260::o;29091:207::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;29204:1:::1;29187:13;:18;;:43;;;;;29226:4;29209:13;:21;;29187:43;29179:52;;;::::0;::::1;;29265:25;:13:::0;29281:9:::1;29265:25;:::i;:::-;29242:20;:48:::0;-1:-1:-1;29091:207:0:o;21190:391::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;21311:16:::1;:33:::0;;;21355:15:::1;:31:::0;;;21397:13:::1;:27:::0;;;21413:11;21450:34:::1;21373:13:::0;21330:14;21450:34:::1;:::i;:::-;:50;;;;:::i;:::-;21435:12;:65:::0;;;21535:4:::1;-1:-1:-1::0;21519:20:0::1;21511:62;;;::::0;-1:-1:-1;;;21511:62:0;;13193:2:1;21511:62:0::1;::::0;::::1;13175:21:1::0;13232:2;13212:18;;;13205:30;13271:31;13251:18;;;13244:59;13320:18;;21511:62:0::1;13165:179:1::0;17563:391:0;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;17650:18:::1;::::0;:23;17642:32:::1;;;::::0;::::1;;17685:13;:20:::0;;-1:-1:-1;;17716:18:0;;;;;17766:12:::1;17745:18;:33:::0;;;17810:37:::1;::::0;17831:16;;17810:37:::1;:::i;:::-;17789:18;:58:::0;17894:20:::1;::::0;17876:38:::1;::::0;:15:::1;:38;:::i;:::-;17858:15;:56:::0;17930:16:::1;::::0;::::1;::::0;;;::::1;17563:391:::0;:::o;34423:394::-;9094:6;;34510:10;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34541:20:0;::::1;34533:29;;;::::0;::::1;;-1:-1:-1::0;;;;;34581:23:0;::::1;34599:4;34581:23;;34573:32;;;::::0;::::1;;34643:39;::::0;-1:-1:-1;;;34643:39:0;;34676:4:::1;34643:39;::::0;::::1;9191:51:1::0;34616:24:0::1;::::0;-1:-1:-1;;;;;34643:24:0;::::1;::::0;::::1;::::0;9164:18:1;;34643:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34701:46;::::0;-1:-1:-1;;;34701:46:0;;-1:-1:-1;;;;;9734:32:1;;;34701:46:0::1;::::0;::::1;9716:51:1::0;9783:18;;;9776:34;;;34616:66:0;;-1:-1:-1;34701:23:0;;::::1;::::0;::::1;::::0;9689:18:1;;34701:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34763;::::0;;-1:-1:-1;;;;;9734:32:1;;9716:51;;9798:2;9783:18;;9776:34;;;34693:54:0;;-1:-1:-1;34763:46:0::1;::::0;9689:18:1;34763:46:0::1;;;;;;;9164:1;34423:394:::0;;;;:::o;30845:1254::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;30941:2:::1;30931:7;:12;;30923:21;;;::::0;::::1;;30984:25;31002:7;30984:15;:25;:::i;:::-;30963:17;;:46;;30955:55;;;::::0;::::1;;31041:15;31021:17;:35:::0;31094:6:::1;::::0;31087:39:::1;::::0;-1:-1:-1;;;31087:39:0;;31120:4:::1;31087:39;::::0;::::1;9191:51:1::0;31067:17:0::1;::::0;-1:-1:-1;;;;;31094:6:0::1;::::0;31087:24:::1;::::0;9164:18:1;;31087:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31067:59;;31137:20;31160:24;31178:4;31160:9;:24::i;:::-;31137:47:::0;-1:-1:-1;31195:16:0::1;31236:3;31214:19;31226:7:::0;31214:9;:19:::1;:::i;:::-;:25;;;;:::i;:::-;31386:6;::::0;31410:9:::1;::::0;31379:52:::1;::::0;-1:-1:-1;;;31379:52:0;;-1:-1:-1;;;;;31410:9:0;;::::1;31379:52;::::0;::::1;9716:51:1::0;9783:18;;;9776:34;;;31195:44:0;;-1:-1:-1;31278:21:0::1;::::0;31386:6;::::1;::::0;31379:22:::1;::::0;9689:18:1;;31379:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;31477:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;31477:234:0;;-1:-1:-1;;;;;31477:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;31528:4:::1;::::0;31548:8;;31477:9;;;;31528:4;;31685:15:::1;::::0;31477:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31724:25;31779:12;31752:24;31770:4;31752:9;:24::i;:::-;:39;;;;:::i;:::-;31724:67:::0;-1:-1:-1;31805:21:0;;31802:118:::1;;31842:66;31866:4;31881:6;31890:17;31842:15;:66::i;:::-;31932:23;31958:41;31982:17:::0;31958:21:::1;:41;:::i;:::-;31932:67:::0;-1:-1:-1;32015:19:0;;32012:80:::1;;32050:30;32064:15;32050:13;:30::i;:::-;9164:1;;;;;;30845:1254:::0;:::o;34071:344::-;34164:16;;;34178:1;34164:16;;;;;;;;34121:7;;;;34164:16;34178:1;34164:16;;;;;;;;-1:-1:-1;;34201:9:0;;:16;;;-1:-1:-1;;;34201:16:0;;;;34140:40;;-1:-1:-1;;;;;;34201:9:0;;;;:14;;-1:-1:-1;34201:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34191:4;34196:1;34191:7;;;;;;-1:-1:-1;;;34191:7:0;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;34191:26:0;;;-1:-1:-1;;;;;34191:26:0;;;;;34246:4;34228;34233:1;34228:7;;;;;;-1:-1:-1;;;34228:7:0;;;;;;;;;-1:-1:-1;;;;;34228:23:0;;;;:7;;;;;;;;;;:23;34299:16;;;34313:1;34299:16;;;;;;;;34272:24;;34299:16;;34313:1;;34299:16;;;;;;;;;-1:-1:-1;;34336:9:0;;34360:12;;34336:43;;-1:-1:-1;;;34336:43:0;;34272;;-1:-1:-1;;;;;;34336:9:0;;;;:23;;:43;;34374:4;;34336:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34336:43:0;;;;;;;;;;;;:::i;:::-;34326:53;;34397:7;34405:1;34397:10;;;;;;-1:-1:-1;;;34397:10:0;;;;;;;;;;;;;;;34390:17;;;;34071:344;:::o;5213:104::-;5269:13;5302:7;5295:14;;;;;:::i;20631:295::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;20740:6:::1;::::0;-1:-1:-1;;;;;20732:14:0;;::::1;20740:6:::0;::::1;20732:14;;20724:84;;;::::0;-1:-1:-1;;;20724:84:0;;15120:2:1;20724:84:0::1;::::0;::::1;15102:21:1::0;15159:2;15139:18;;;15132:30;15198:34;15178:18;;;15171:62;15269:27;15249:18;;;15242:55;15314:19;;20724:84:0::1;15092:247:1::0;20724:84:0::1;20821:41;20850:4;20856:5;20821:28;:41::i;:::-;20878:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;20878:40:0;::::1;::::0;::::1;::::0;;;::::1;20631:295:::0;;:::o;6919:413::-;631:10;7012:4;7056:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7056:34:0;;;;;;;;;;7109:35;;;;7101:85;;;;-1:-1:-1;;;7101:85:0;;19211:2:1;7101:85:0;;;19193:21:1;19250:2;19230:18;;;19223:30;19289:34;19269:18;;;19262:62;-1:-1:-1;;;19340:18:1;;;19333:35;19385:19;;7101:85:0;19183:227:1;7101:85:0;7222:67;631:10;7245:7;7273:15;7254:16;:34;7222:8;:67::i;:::-;-1:-1:-1;7320:4:0;;6919:413;-1:-1:-1;;;6919:413:0:o;5677:175::-;5763:4;5780:42;631:10;5804:9;5815:6;5780:9;:42::i;18354:226::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;18466:9:::1;18462:111;18481:18:::0;;::::1;18462:111;;;18551:10;18520:16;:28;18537:7;;18545:1;18537:10;;;;;-1:-1:-1::0;;;18537:10:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18520:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18520:28:0;:41;;-1:-1:-1;;18520:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18501:3;::::1;::::0;::::1;:::i;:::-;;;;18462:111;;;;18354:226:::0;;;:::o;21997:182::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22082:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22082:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22137:34;;11185:41:1;;;22137:34:0::1;::::0;11158:18:1;22137:34:0::1;;;;;;;21997:182:::0;;:::o;21589:400::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;21711:17:::1;:34:::0;;;21756:16:::1;:32:::0;;;21799:14:::1;:28:::0;;;21816:11;21854:36:::1;21775:13:::0;21731:14;21854:36:::1;:::i;:::-;:53;;;;:::i;:::-;21838:13;:69:::0;;;21943:4:::1;-1:-1:-1::0;21926:21:0::1;21918:63;;;::::0;-1:-1:-1;;;21918:63:0;;16793:2:1;21918:63:0::1;::::0;::::1;16775:21:1::0;16832:2;16812:18;;;16805:30;16871:31;16851:18;;;16844:59;16920:18;;21918:63:0::1;16765:179:1::0;19441:233:0;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;19564:6:::1;19544:13;5514:12:::0;;;5426:108;19544:13:::1;:17;::::0;19560:1:::1;19544:17;:::i;:::-;:26;;;;:::i;:::-;19531:9;:39;;19523:48;;;::::0;::::1;;19622:4;19602:13;5514:12:::0;;;5426:108;19602:13:::1;:17;::::0;19618:1:::1;19602:17;:::i;:::-;:24;;;;:::i;:::-;19589:9;:37;;19581:46;;;::::0;::::1;;19637:18;:30:::0;19441:233::o;18133:102::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;18205:13:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;18205:22:0;;::::1;::::0;;;::::1;::::0;;18133:102::o;18854:254::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;18977:16:::1;5408:2:::0;18977::::1;:16;:::i;:::-;18968:4;18948:13;5514:12:::0;;;5426:108;18948:13:::1;:17;::::0;18964:1:::1;18948:17;:::i;:::-;:24;;;;:::i;:::-;18947:47;;;;:::i;:::-;18937:6;:57;;18929:66;;;::::0;::::1;;19032:16;5408:2:::0;19032::::1;:16;:::i;:::-;19022:27;::::0;:6;:27:::1;:::i;:::-;19006:13;:43:::0;;;19065:35:::1;::::0;19561:25:1;;;19065:35:0::1;::::0;19549:2:1;19534:18;19065:35:0::1;19516:76:1::0;9339:244:0;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9428:22:0;::::1;9420:73;;;::::0;-1:-1:-1;;;9420:73:0;;13902:2:1;9420:73:0::1;::::0;::::1;13884:21:1::0;13941:2;13921:18;;;13914:30;13980:34;13960:18;;;13953:62;-1:-1:-1;;;14031:18:1;;;14024:36;14077:19;;9420:73:0::1;13874:228:1::0;9420:73:0::1;9530:6;::::0;9509:38:::1;::::0;-1:-1:-1;;;;;9509:38:0;;::::1;::::0;9530:6:::1;::::0;9509:38:::1;::::0;9530:6:::1;::::0;9509:38:::1;9558:6;:17:::0;;-1:-1:-1;;;;;;9558:17:0::1;-1:-1:-1::0;;;;;9558:17:0;;;::::1;::::0;;;::::1;::::0;;9339:244::o;29480:142::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;29580:1:::1;29571:6;:10;29563:19;;;::::0;::::1;;29593:12;:21:::0;29480:142::o;34855:157::-;9094:6;;-1:-1:-1;;;;;9094:6:0;631:10;9094:22;9086:67;;;;-1:-1:-1;;;9086:67:0;;;;;;;:::i;:::-;34913:12:::1;34957:7;9032:6:::0;;-1:-1:-1;;;;;9032:6:0;;8967:79;34957:7:::1;-1:-1:-1::0;;;;;34949:21:0::1;34978;34949:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17420:131:::0;17493:4;17516:27;:9;17535:7;17516:18;:27::i;8256:380::-;-1:-1:-1;;;;;8392:19:0;;8384:68;;;;-1:-1:-1;;;8384:68:0;;18806:2:1;8384:68:0;;;18788:21:1;18845:2;18825:18;;;18818:30;18884:34;18864:18;;;18857:62;-1:-1:-1;;;18935:18:1;;;18928:34;18979:19;;8384:68:0;18778:226:1;8384:68:0;-1:-1:-1;;;;;8471:21:0;;8463:68;;;;-1:-1:-1;;;8463:68:0;;14309:2:1;8463:68:0;;;14291:21:1;14348:2;14328:18;;;14321:30;14387:34;14367:18;;;14360:62;-1:-1:-1;;;14438:18:1;;;14431:32;14480:19;;8463:68:0;14281:224:1;8463:68:0;-1:-1:-1;;;;;8544:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8596:32;;19561:25:1;;;8596:32:0;;19534:18:1;8596:32:0;;;;;;;8256:380;;;:::o;7340:614::-;-1:-1:-1;;;;;7480:20:0;;7472:70;;;;-1:-1:-1;;;7472:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7561:23:0;;7553:71;;;;-1:-1:-1;;;7553:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7661:17:0;;7637:21;7661:17;;;;;;;;;;;7697:23;;;;7689:74;;;;-1:-1:-1;;;7689:74:0;;15953:2:1;7689:74:0;;;15935:21:1;15992:2;15972:18;;;15965:30;16031:34;16011:18;;;16004:62;-1:-1:-1;;;16082:18:1;;;16075:36;16128:19;;7689:74:0;15925:228:1;7689:74:0;-1:-1:-1;;;;;7799:17:0;;;:9;:17;;;;;;;;;;;7819:22;;;7799:42;;7863:20;;;;;;;;:30;;7835:6;;7799:9;7863:30;;7835:6;;7863:30;:::i;:::-;;;;;;;;7928:9;-1:-1:-1;;;;;7911:35:0;7920:6;-1:-1:-1;;;;;7911:35:0;;7939:6;7911:35;;;;19561:25:1;;19549:2;19534:18;;19516:76;7911:35:0;;;;;;;;7340:614;;;;:::o;22187:5102::-;-1:-1:-1;;;;;22287:18:0;;22279:68;;;;-1:-1:-1;;;22279:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22366:16:0;;22358:64;;;;-1:-1:-1;;;22358:64:0;;;;;;;:::i;:::-;22450:1;22441:6;:10;22433:61;;;;-1:-1:-1;;;22433:61:0;;15546:2:1;22433:61:0;;;15528:21:1;15585:2;15565:18;;;15558:30;15624:34;15604:18;;;15597:62;-1:-1:-1;;;15675:18:1;;;15668:36;15721:19;;22433:61:0;15518:228:1;22433:61:0;22519:13;;;;;;;22515:132;;-1:-1:-1;;;;;22556:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22585:23:0;;;;;;:19;:23;;;;;;;;22556:52;22548:87;;;;-1:-1:-1;;;22548:87:0;;13551:2:1;22548:87:0;;;13533:21:1;13590:2;13570:18;;;13563:30;-1:-1:-1;;;13609:18:1;;;13602:52;13671:18;;22548:87:0;13523:172:1;22548:87:0;27391:18;;27376:12;:33;22662:26;:52;;;;;22713:1;22692:18;;:22;22662:52;22659:231;;;-1:-1:-1;;;;;22739:22:0;;;;;;:16;:22;;;;;;;;22738:23;;:40;;-1:-1:-1;9032:6:0;;-1:-1:-1;;;;;22765:13:0;;;9032:6;;22765:13;22738:40;:65;;;-1:-1:-1;;;;;;22782:21:0;;22796:6;22782:21;22738:65;22730:148;;;;-1:-1:-1;;;22730:148:0;;17921:2:1;22730:148:0;;;17903:21:1;17960:2;17940:18;;;17933:30;17999:34;17979:18;;;17972:62;18070:34;18050:18;;;18043:62;-1:-1:-1;;;18121:19:1;;;18114:37;18168:19;;22730:148:0;17893:300:1;22730:148:0;22913:14;;;;22910:878;;;9032:6;;-1:-1:-1;;;;;22947:15:0;;;9032:6;;22947:15;;;;:32;;-1:-1:-1;9032:6:0;;-1:-1:-1;;;;;22966:13:0;;;9032:6;;22966:13;;22947:32;:52;;;;-1:-1:-1;;;;;;22983:16:0;;;;22947:52;:77;;;;-1:-1:-1;;;;;;23003:21:0;;23017:6;23003:21;;22947:77;:107;;;;-1:-1:-1;;;;;;23029:25:0;;;;;;:19;:25;;;;;;;;23028:26;22947:107;:135;;;;-1:-1:-1;;;;;;23059:23:0;;;;;;:19;:23;;;;;;;;23058:24;22947:135;22943:834;;;-1:-1:-1;;;;;23167:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;23203:35:0;;;;;;:31;:35;;;;;;;;23202:36;23167:71;23163:599;;;23285:12;;23275:6;:22;;23267:31;;;;;;23359:15;;23342:13;23352:2;23342:9;:13::i;:::-;23333:22;;:6;:22;:::i;:::-;:41;;23325:50;;;;;;23163:599;;;-1:-1:-1;;;;;23452:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;23486:37:0;;;;;;:31;:37;;;;;;;;23485:38;23452:71;23448:314;;;23570:13;;23560:6;:23;;23552:32;;;;;23448:314;-1:-1:-1;;;;;23633:35:0;;;;;;:31;:35;;;;;;;;23628:134;;23726:15;;23709:13;23719:2;23709:9;:13::i;:::-;23700:22;;:6;:22;:::i;:::-;:41;;23692:50;;;;;;23800:28;23831:24;23849:4;23831:9;:24::i;:::-;23915:18;;23800:55;;-1:-1:-1;23891:42:0;;;;;;;23949:22;;-1:-1:-1;23960:11:0;;;;;;;23949:22;:35;;;;-1:-1:-1;23976:8:0;;-1:-1:-1;;;23976:8:0;;;;23975:9;23949:35;:71;;;;-1:-1:-1;;;;;;23989:31:0;;;;;;:25;:31;;;;;;;;23988:32;23949:71;:101;;;;-1:-1:-1;;;;;;24025:25:0;;;;;;:19;:25;;;;;;;;24024:26;23949:101;:129;;;;-1:-1:-1;;;;;;24055:23:0;;;;;;:19;:23;;;;;;;;24054:24;23949:129;23946:232;;;24095:8;:15;;-1:-1:-1;;;;24095:15:0;-1:-1:-1;;;24095:15:0;;;24125:10;:8;:10::i;:::-;24150:8;:16;;-1:-1:-1;;;;24150:16:0;;;23946:232;24193:14;;;;24190:262;;;24245:15;;24226;:34;;:73;;;;;24289:10;24264:21;:35;;24226:73;:99;;;;;24324:1;24303:18;:9;:16;:18::i;:::-;:22;24226:99;24223:218;;;24345:17;24359:2;24345:13;:17::i;:::-;24223:218;;;24416:9;:7;:9::i;:::-;-1:-1:-1;;;;;24582:25:0;;24464:12;24582:25;;;:19;:25;;;;;;24479:4;;24582:25;;;:52;;-1:-1:-1;;;;;;24611:23:0;;;;;;:19;:23;;;;;;;;24582:52;24579:99;;;-1:-1:-1;24661:5:0;24579:99;24698:12;24802:7;24799:2337;;;27391:18;;27376:12;:33;24865:106;;;;24920:8;24905:12;;:23;;;;:::i;:::-;24895:6;:33;;:75;;;;;24958:12;24932:18;;24953:1;24932:22;;;;:::i;:::-;:38;;24895:75;24864:143;;;;-1:-1:-1;;;;;;24976:31:0;;;;;;:25;:31;;;;;;;;24864:143;:177;;;;-1:-1:-1;;;;;;25012:29:0;;;;;;:25;:29;;;;;;;;25011:30;24864:177;:197;;;;;25060:1;25045:12;;:16;24864:197;24861:2106;;;27391:18;;27376:12;:33;25099:330;;25408:1;25392:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;25099:330:0;-1:-1:-1;;;;;25453:20:0;;;;;;:16;:20;;;;;;;;25449:174;;-1:-1:-1;;;;;25497:20:0;;;;;;:16;:20;;;;;:27;;-1:-1:-1;;25497:27:0;25520:4;25497:27;;;;;;25547:10;:15;;25520:4;;25547:10;;:15;;25520:4;;25547:15;:::i;:::-;;;;-1:-1:-1;;25590:13:0;;-1:-1:-1;;;;;9209:32:1;;9191:51;;25590:13:0;;9179:2:1;9164:18;25590:13:0;;;;;;;25449:174;25674:15;;25659:12;;25650:21;;:6;:21;:::i;:::-;:39;;;;:::i;:::-;25643:46;;25752:12;;25734:15;;25727:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;25705:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25832:12:0;;25813:16;;25806:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;25783:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25906:12:0;;25890:13;;25883:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;25863:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;24861:2106:0;;-1:-1:-1;24861:2106:0;;-1:-1:-1;;;;;25983:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;26032:1;26016:13;;:17;25983:50;25979:988;;;26085:15;;26069:13;;26060:22;;:6;:22;:::i;:::-;:40;;;;:::i;:::-;26053:47;;26167:13;;26148:16;;26141:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26119:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26249:13:0;;26229:17;;26222:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;26199:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;26325:13:0;;26308:14;;26301:21;;:4;:21;:::i;25979:988::-;-1:-1:-1;;;;;26401:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26451:1;26436:12;;:16;26401:51;26398:569;;;26501:15;;26486:12;;26477:21;;:6;:21;:::i;:::-;:39;;;;:::i;:::-;26470:46;;26579:12;;26561:15;;26554:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26532:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26659:12:0;;26640:16;;26633:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;26610:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26733:12:0;;26717:13;;26710:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;26690:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;26768:14:0;;;;26767:15;;:47;;;26795:19;:17;:19::i;:::-;26786:6;:28;26767:47;26764:188;;;26842:22;:9;26861:2;26842:18;:22::i;:::-;26838:95;;26892:17;:9;26906:2;26892:13;:17::i;:::-;;26838:95;26998:8;;26995:93;;27030:42;27046:4;27060;27067;27030:15;:42::i;:::-;27110:14;27120:4;27110:14;;:::i;:::-;;;24799:2337;27148:33;27164:4;27170:2;27174:6;27148:15;:33::i;:::-;27197:24;:9;27216:4;27197:18;:24::i;:::-;:35;;;;;27225:7;27197:35;27194:88;;;27248:22;:9;27265:4;27248:16;:22::i;:::-;;22187:5102;;;;;;;:::o;32497:1566::-;32538:23;32564:24;32582:4;32564:9;:24::i;:::-;32538:50;;32599:25;32670:16;;32648:19;;32627:18;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;32599:87;-1:-1:-1;32710:20:0;;;:46;;-1:-1:-1;32734:22:0;;32710:46;32707:60;;;32759:7;;32497:1566::o;32707:60::-;32800:18;;:23;;32821:2;32800:23;:::i;:::-;32782:15;:41;32779:113;;;32857:18;;:23;;32878:2;32857:23;:::i;:::-;32839:41;;32779:113;32904:12;32986:23;33071:1;33051:17;33030:18;;33012:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;32986:86;-1:-1:-1;33118:21:0;33150:51;33167:33;32986:86;33167:15;:33;:::i;:::-;33150:16;:51::i;:::-;33222:18;33243:38;33267:14;33243:21;:38;:::i;:::-;33222:59;;33292:23;33318:10;33292:36;;33341:24;33444:1;33425:18;;:20;;;;:::i;:::-;33404:42;;:17;:42;:::i;:::-;33381:19;;33368:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;33341:106;;33458:21;33555:1;33536:18;;:20;;;;:::i;:::-;33515:42;;:17;:42;:::i;:::-;33495:16;;33482:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;33458:100;-1:-1:-1;33590:32:0;33458:100;33590:16;:32;:::i;:::-;33571:51;;;;:::i;:::-;33668:1;33647:18;:22;;;33680:19;:23;;;33714:16;:20;33571:51;-1:-1:-1;33758:19:0;;;;;:42;;;33799:1;33781:15;:19;33758:42;33755:119;;;33816:46;33829:15;33846;33816:12;:46::i;:::-;33889:20;;33886:124;;33946:17;;33938:60;;-1:-1:-1;;;;;33946:17:0;;;;33977:16;;33938:60;;;;33977:16;33946:17;33938:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33925:73:0;;-1:-1:-1;;33886:124:0;32497:1566;;;;;;;;;:::o;32107:382::-;32195:16;;;32209:1;32195:16;;;;;;;;32171:21;;32195:16;;;;;;;;-1:-1:-1;;32232:9:0;;:16;;;-1:-1:-1;;;32232:16:0;;;;32171:40;;-1:-1:-1;;;;;;32232:9:0;;;;:14;;-1:-1:-1;32232:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32222:4;32227:1;32222:7;;;;;;-1:-1:-1;;;32222:7:0;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;32222:26:0;;;-1:-1:-1;;;;;32222:26:0;;;;;32277:4;32259;32264:1;32259:7;;;;;;-1:-1:-1;;;32259:7:0;;;;;;;;;-1:-1:-1;;;;;32259:23:0;;;:7;;;;;;;;;:23;32295:9;;:186;;-1:-1:-1;;;32295:186:0;;:9;;;:60;;32363:11;;32295:186;;:9;;32406:4;;32433:6;;32455:15;;32295:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20934:248;-1:-1:-1;;;;;21017:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;21017:39:0;;;;;;;21077;21017:31;:39;21077:26;:39::i;2995:167::-;-1:-1:-1;;;;;3129:23:0;;3075:4;2109:19;;;:12;;;:19;;;;;;:24;;3099:55;3092:62;2995:167;-1:-1:-1;;;2995:167:0:o;3248:117::-;3311:7;3338:19;3346:3;2232:18;;2149:109;27881:562;27935:12;27994:20;;27976:15;:38;;;;:::i;:::-;27958:15;:56;28064:14;28081:125;28094:111;28064:14;28123:1;28104:18;:9;:16;:18::i;:::-;:20;;;;:::i;:::-;28182:22;28200:2;28182:9;:22::i;:::-;28153:26;28171:6;28153:9;:26::i;:::-;28126:24;28144:4;28126:9;:24::i;:::-;:53;;;;:::i;:::-;:78;;;;:::i;:::-;28094:6;:111::i;:::-;28081:9;;:12;:125::i;:::-;28064:142;;28217:16;28280:3;28260:17;;28236:21;:41;;;;:::i;:::-;:47;;;;:::i;:::-;28217:66;;28315:6;-1:-1:-1;;;;;28307:20:0;28335:8;28307:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28294:54:0;;-1:-1:-1;;28359:77:0;;;;28390:34;;-1:-1:-1;;;;;28390:34:0;;;28407:8;;28390:34;;;;;27881:562;;;;:::o;27583:286::-;27621:12;;27707:25;27731:1;27707:21;:25;:::i;:::-;-1:-1:-1;;27820:41:0;;27743:14;;27768:4;;;;27743:14;;;27820:41;27743:14;27820:41;27743:14;27768:4;27820:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27583:286:0:o;2591:152::-;2661:4;2685:50;2690:3;-1:-1:-1;;;;;2710:23:0;;2685:4;:50::i;2751:158::-;2824:4;2848:53;2856:3;-1:-1:-1;;;;;2876:23:0;;2848:7;:53::i;29745:573::-;29897:16;;;29911:1;29897:16;;;;;;;;29873:21;;29897:16;;;;;;;;;;-1:-1:-1;29897:16:0;29873:40;;29942:4;29924;29929:1;29924:7;;;;;;-1:-1:-1;;;29924:7:0;;;;;;;;;-1:-1:-1;;;;;29924:23:0;;;:7;;;;;;;;;;:23;;;;29968:9;;:16;;;-1:-1:-1;;;29968:16:0;;;;:9;;;;;:14;;:16;;;;;29924:7;;29968:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29958:4;29963:1;29958:7;;;;;;-1:-1:-1;;;29958:7:0;;;;;;;;;-1:-1:-1;;;;;29958:26:0;;;:7;;;;;;;;;:26;30029:9;;29997:56;;30014:4;;30029:9;30041:11;29997:8;:56::i;:::-;30092:9;;:218;;-1:-1:-1;;;30092:218:0;;-1:-1:-1;;;;;30092:9:0;;;;:60;;:218;;30167:11;;30092:9;;30237:4;;30264;;30284:15;;30092:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30330:507;30510:9;;30478:56;;30495:4;;-1:-1:-1;;;;;30510:9:0;30522:11;30478:8;:56::i;:::-;30577:9;;:252;;-1:-1:-1;;;30577:252:0;;-1:-1:-1;;;;;30577:9:0;;;;:25;;30610:9;;30577:252;;30643:4;;30663:11;;30577:9;;;;30643:4;;30803:15;;30577:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30330:507;;:::o;19686:207::-;-1:-1:-1;;;;;19774:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;19774:52:0;;;;;;;;;;19842:43;;9421:51:1;;;9488:18;;;9481:50;19842:43:0;;9394:18:1;19842:43:0;;;;;;;19686:207;;:::o;28451:632::-;28870:28;;-1:-1:-1;;28887:10:0;8313:2:1;8309:15;8305:53;28870:28:0;;;8293:66:1;28530:7:0;;;;28982:5;;28946:12;;28905:15;;8375:12:1;;28870:28:0;;;;;;;;;;;;28860:39;;;;;;28852:48;;28851:70;;;;:::i;:::-;28732:32;;-1:-1:-1;;28749:14:0;8313:2:1;8309:15;8305:53;28732:32:0;;;8293:66:1;28812:14:0;;28771:15;;8375:12:1;;28732:32:0;;;;;;;;;;;;28722:43;;;;;;28714:52;;28713:74;;;;:::i;:::-;28654:34;28672:16;28654:15;:34;:::i;:::-;:134;;;;:::i;:::-;:172;;;;:::i;:::-;:268;;;;:::i;:::-;:304;;;;:::i;:::-;:333;;;;:::i;:::-;28615:391;;;;;;8987:19:1;;9031:2;9022:12;;8977:63;28615:391:0;;;;-1:-1:-1;;28615:391:0;;;;;;;;;28587:434;;28615:391;28587:434;;;;;-1:-1:-1;29071:4:0;29058:9;29071:4;29058:2;:9;:::i;:::-;29050:18;;:4;:18;:::i;:::-;:25;;;;:::i;:::-;29043:32;28451:632;-1:-1:-1;;;;;28451:632:0:o;3373:158::-;3447:7;3498:22;3502:3;3514:5;3498:3;:22::i;1032:291::-;1095:4;2109:19;;;:12;;;:19;;;;;;1112:204;;-1:-1:-1;1155:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;1215:18;;1193:19;;;:12;;;:19;;;;;;:40;;;;1248:11;;1112:204;-1:-1:-1;1299:5:0;1292:12;;1331:673;1397:4;1435:19;;;:12;;;:19;;;;;;1471:15;;1467:530;;1503:21;1527:14;1540:1;1527:10;:14;:::i;:::-;1576:18;;1503:38;;-1:-1:-1;1556:17:0;;1576:22;;1597:1;;1576:22;:::i;:::-;1556:42;;1632:13;1619:9;:26;1615:221;;1666:17;1686:3;:11;;1698:9;1686:22;;;;;;-1:-1:-1;;;1686:22:0;;;;;;;;;;;;;;;;;1666:42;;1756:9;1727:3;:11;;1739:13;1727:26;;;;;;-1:-1:-1;;;1727:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;1784:23;;;:12;;;:23;;;;;:36;;;1615:221;1852:17;;:3;;:17;;;-1:-1:-1;;;1852:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;1893:3;:12;;:19;1906:5;1893:19;;;;;;;;;;;1886:26;;;1936:4;1929:11;;;;;;;1467:530;1980:5;1973:12;;;;;2266:120;2333:7;2360:3;:11;;2372:5;2360:18;;;;;;-1:-1:-1;;;2360:18:0;;;;;;;;;;;;;;;;;2353:25;;2266:120;;;;:::o;14:693:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;315:3;339:2;334:3;327:15;367:2;362:3;358:12;351:19;;402:2;394:6;390:15;454:3;449:2;443;440:1;436:10;428:6;424:23;420:32;417:41;414:2;;;475:5;468;461:20;414:2;501:5;515:163;529:2;526:1;523:9;515:163;;;586:17;;574:30;;624:12;;;;656;;;;547:1;540:9;515:163;;;-1:-1:-1;696:5:1;;78:629;-1:-1:-1;;;;;;;78:629:1:o;712:257::-;771:6;824:2;812:9;803:7;799:23;795:32;792:2;;;845:6;837;830:22;792:2;889:9;876:23;908:31;933:5;908:31;:::i;974:261::-;1044:6;1097:2;1085:9;1076:7;1072:23;1068:32;1065:2;;;1118:6;1110;1103:22;1065:2;1155:9;1149:16;1174:31;1199:5;1174:31;:::i;1240:398::-;1308:6;1316;1369:2;1357:9;1348:7;1344:23;1340:32;1337:2;;;1390:6;1382;1375:22;1337:2;1434:9;1421:23;1453:31;1478:5;1453:31;:::i;:::-;1503:5;-1:-1:-1;1560:2:1;1545:18;;1532:32;1573:33;1532:32;1573:33;:::i;:::-;1625:7;1615:17;;;1327:311;;;;;:::o;1643:466::-;1720:6;1728;1736;1789:2;1777:9;1768:7;1764:23;1760:32;1757:2;;;1810:6;1802;1795:22;1757:2;1854:9;1841:23;1873:31;1898:5;1873:31;:::i;:::-;1923:5;-1:-1:-1;1980:2:1;1965:18;;1952:32;1993:33;1952:32;1993:33;:::i;:::-;1747:362;;2045:7;;-1:-1:-1;;;2099:2:1;2084:18;;;;2071:32;;1747:362::o;2114:392::-;2179:6;2187;2240:2;2228:9;2219:7;2215:23;2211:32;2208:2;;;2261:6;2253;2246:22;2208:2;2305:9;2292:23;2324:31;2349:5;2324:31;:::i;:::-;2374:5;-1:-1:-1;2431:2:1;2416:18;;2403:32;2444:30;2403:32;2444:30;:::i;2511:325::-;2579:6;2587;2640:2;2628:9;2619:7;2615:23;2611:32;2608:2;;;2661:6;2653;2646:22;2608:2;2705:9;2692:23;2724:31;2749:5;2724:31;:::i;:::-;2774:5;2826:2;2811:18;;;;2798:32;;-1:-1:-1;;;2598:238:1:o;2841:800::-;2933:6;2941;2949;3002:2;2990:9;2981:7;2977:23;2973:32;2970:2;;;3023:6;3015;3008:22;2970:2;3068:9;3055:23;3097:18;3138:2;3130:6;3127:14;3124:2;;;3159:6;3151;3144:22;3124:2;3202:6;3191:9;3187:22;3177:32;;3247:7;3240:4;3236:2;3232:13;3228:27;3218:2;;3274:6;3266;3259:22;3218:2;3319;3306:16;3345:2;3337:6;3334:14;3331:2;;;3366:6;3358;3351:22;3331:2;3426:7;3419:4;3409:6;3406:1;3402:14;3398:2;3394:23;3390:34;3387:47;3384:2;;;3452:6;3444;3437:22;3384:2;3488:4;3480:13;;;;-1:-1:-1;3512:6:1;-1:-1:-1;;3553:20:1;;3540:34;3583:28;3540:34;3583:28;:::i;:::-;3630:5;3620:15;;;2960:681;;;;;:::o;3646:1281::-;3764:6;3772;3825:2;3813:9;3804:7;3800:23;3796:32;3793:2;;;3846:6;3838;3831:22;3793:2;3891:9;3878:23;3920:18;3961:2;3953:6;3950:14;3947:2;;;3982:6;3974;3967:22;3947:2;4025:6;4014:9;4010:22;4000:32;;4070:7;4063:4;4059:2;4055:13;4051:27;4041:2;;4097:6;4089;4082:22;4041:2;4138;4125:16;4160:4;4184:60;4200:43;4240:2;4200:43;:::i;4184:60::-;4266:3;4290:2;4285:3;4278:15;4318:2;4313:3;4309:12;4302:19;;4349:2;4345;4341:11;4397:7;4392:2;4386;4383:1;4379:10;4375:2;4371:19;4367:28;4364:41;4361:2;;;4423:6;4415;4408:22;4361:2;4450:6;4441:15;;4465:238;4479:2;4476:1;4473:9;4465:238;;;4550:3;4537:17;4567:31;4592:5;4567:31;:::i;:::-;4611:18;;4497:1;4490:9;;;;;4649:12;;;;4681;;4465:238;;;-1:-1:-1;4722:5:1;-1:-1:-1;;4765:18:1;;4752:32;;-1:-1:-1;;4796:16:1;;;4793:2;;;4830:6;4822;4815:22;4793:2;;4858:63;4913:7;4902:8;4891:9;4887:24;4858:63;:::i;:::-;4848:73;;;3783:1144;;;;;:::o;4932:937::-;5027:6;5058:2;5101;5089:9;5080:7;5076:23;5072:32;5069:2;;;5122:6;5114;5107:22;5069:2;5160:9;5154:16;5193:18;5185:6;5182:30;5179:2;;;5230:6;5222;5215:22;5179:2;5258:22;;5311:4;5303:13;;5299:27;-1:-1:-1;5289:2:1;;5345:6;5337;5330:22;5289:2;5379;5373:9;5402:60;5418:43;5458:2;5418:43;:::i;5402:60::-;5484:3;5508:2;5503:3;5496:15;5536:2;5531:3;5527:12;5520:19;;5567:2;5563;5559:11;5615:7;5610:2;5604;5601:1;5597:10;5593:2;5589:19;5585:28;5582:41;5579:2;;;5641:6;5633;5626:22;5579:2;5668:6;5659:15;;5683:156;5697:2;5694:1;5691:9;5683:156;;;5754:10;;5742:23;;5715:1;5708:9;;;;;5785:12;;;;5817;;5683:156;;;-1:-1:-1;5858:5:1;5038:831;-1:-1:-1;;;;;;;5038:831:1:o;5874:251::-;5930:6;5983:2;5971:9;5962:7;5958:23;5954:32;5951:2;;;6004:6;5996;5989:22;5951:2;6048:9;6035:23;6067:28;6089:5;6067:28;:::i;6130:255::-;6197:6;6250:2;6238:9;6229:7;6225:23;6221:32;6218:2;;;6271:6;6263;6256:22;6218:2;6308:9;6302:16;6327:28;6349:5;6327:28;:::i;6390:190::-;6449:6;6502:2;6490:9;6481:7;6477:23;6473:32;6470:2;;;6523:6;6515;6508:22;6470:2;-1:-1:-1;6551:23:1;;6460:120;-1:-1:-1;6460:120:1:o;6585:194::-;6655:6;6708:2;6696:9;6687:7;6683:23;6679:32;6676:2;;;6729:6;6721;6714:22;6676:2;-1:-1:-1;6757:16:1;;6666:113;-1:-1:-1;6666:113:1:o;6784:255::-;6863:6;6871;6924:2;6912:9;6903:7;6899:23;6895:32;6892:2;;;6945:6;6937;6930:22;6892:2;-1:-1:-1;;6973:16:1;;7029:2;7014:18;;;7008:25;6973:16;;7008:25;;-1:-1:-1;6882:157:1:o;7044:326::-;7121:6;7129;7137;7190:2;7178:9;7169:7;7165:23;7161:32;7158:2;;;7211:6;7203;7196:22;7158:2;-1:-1:-1;;7239:23:1;;;7309:2;7294:18;;7281:32;;-1:-1:-1;7360:2:1;7345:18;;;7332:32;;7148:222;-1:-1:-1;7148:222:1:o;7375:316::-;7463:6;7471;7479;7532:2;7520:9;7511:7;7507:23;7503:32;7500:2;;;7553:6;7545;7538:22;7500:2;7587:9;7581:16;7571:26;;7637:2;7626:9;7622:18;7616:25;7606:35;;7681:2;7670:9;7666:18;7660:25;7650:35;;7490:201;;;;;:::o;7696:463::-;7749:3;7787:5;7781:12;7814:6;7809:3;7802:19;7840:4;7869:2;7864:3;7860:12;7853:19;;7906:2;7899:5;7895:14;7927:3;7939:195;7953:6;7950:1;7947:13;7939:195;;;8018:13;;-1:-1:-1;;;;;8014:39:1;8002:52;;8074:12;;;;8109:15;;;;8050:1;7968:9;7939:195;;;-1:-1:-1;8150:3:1;;7757:402;-1:-1:-1;;;;;7757:402:1:o;9821:607::-;-1:-1:-1;;;;;10180:15:1;;;10162:34;;10227:2;10212:18;;10205:34;;;;10270:2;10255:18;;10248:34;;;;10313:2;10298:18;;10291:34;;;;10362:15;;;10356:3;10341:19;;10334:44;10142:3;10394:19;;10387:35;;;;10111:3;10096:19;;10078:350::o;11464:510::-;11735:6;11724:9;11717:25;11778:3;11773:2;11762:9;11758:18;11751:31;11698:4;11799:57;11851:3;11840:9;11836:19;11828:6;11799:57;:::i;:::-;-1:-1:-1;;;;;11892:32:1;;;;11887:2;11872:18;;11865:60;-1:-1:-1;11956:2:1;11941:18;11934:34;11791:65;11707:267;-1:-1:-1;;11707:267:1:o;11979:603::-;12091:4;12120:2;12149;12138:9;12131:21;12181:6;12175:13;12224:6;12219:2;12208:9;12204:18;12197:34;12249:4;12262:140;12276:6;12273:1;12270:13;12262:140;;;12371:14;;;12367:23;;12361:30;12337:17;;;12356:2;12333:26;12326:66;12291:10;;12262:140;;;12420:6;12417:1;12414:13;12411:2;;;12490:4;12485:2;12476:6;12465:9;12461:22;12457:31;12450:45;12411:2;-1:-1:-1;12566:2:1;12545:15;-1:-1:-1;;12541:29:1;12526:45;;;;12573:2;12522:54;;12100:482;-1:-1:-1;;;12100:482:1:o;12587:399::-;12789:2;12771:21;;;12828:2;12808:18;;;12801:30;12867:34;12862:2;12847:18;;12840:62;-1:-1:-1;;;12933:2:1;12918:18;;12911:33;12976:3;12961:19;;12761:225::o;17358:356::-;17560:2;17542:21;;;17579:18;;;17572:30;17638:34;17633:2;17618:18;;17611:62;17705:2;17690:18;;17532:182::o;18198:401::-;18400:2;18382:21;;;18439:2;18419:18;;;18412:30;18478:34;18473:2;18458:18;;18451:62;-1:-1:-1;;;18544:2:1;18529:18;;18522:35;18589:3;18574:19;;18372:227::o;19597:332::-;19804:6;19793:9;19786:25;19847:2;19842;19831:9;19827:18;19820:30;19767:4;19867:56;19919:2;19908:9;19904:18;19896:6;19867:56;:::i;:::-;19859:64;19776:153;-1:-1:-1;;;;19776:153:1:o;19934:582::-;20233:6;20222:9;20215:25;20276:6;20271:2;20260:9;20256:18;20249:34;20319:3;20314:2;20303:9;20299:18;20292:31;20196:4;20340:57;20392:3;20381:9;20377:19;20369:6;20340:57;:::i;:::-;-1:-1:-1;;;;;20433:32:1;;;;20428:2;20413:18;;20406:60;-1:-1:-1;20497:3:1;20482:19;20475:35;20332:65;20205:311;-1:-1:-1;;;20205:311:1:o;20710:275::-;20781:2;20775:9;20846:2;20827:13;;-1:-1:-1;;20823:27:1;20811:40;;20881:18;20866:34;;20902:22;;;20863:62;20860:2;;;20928:18;;:::i;:::-;20964:2;20957:22;20755:230;;-1:-1:-1;20755:230:1:o;20990:183::-;21050:4;21083:18;21075:6;21072:30;21069:2;;;21105:18;;:::i;:::-;-1:-1:-1;21150:1:1;21146:14;21162:4;21142:25;;21059:114::o;21178:128::-;21218:3;21249:1;21245:6;21242:1;21239:13;21236:2;;;21255:18;;:::i;:::-;-1:-1:-1;21291:9:1;;21226:80::o;21311:120::-;21351:1;21377;21367:2;;21382:18;;:::i;:::-;-1:-1:-1;21416:9:1;;21357:74::o;21436:422::-;21525:1;21568:5;21525:1;21582:270;21603:7;21593:8;21590:21;21582:270;;;21662:4;21658:1;21654:6;21650:17;21644:4;21641:27;21638:2;;;21671:18;;:::i;:::-;21721:7;21711:8;21707:22;21704:2;;;21741:16;;;;21704:2;21820:22;;;;21780:15;;;;21582:270;;;21586:3;21500:358;;;;;:::o;21863:140::-;21921:5;21950:47;21991:4;21981:8;21977:19;21971:4;22057:5;22087:8;22077:2;;-1:-1:-1;22128:1:1;22142:5;;22077:2;22176:4;22166:2;;-1:-1:-1;22213:1:1;22227:5;;22166:2;22258:4;22276:1;22271:59;;;;22344:1;22339:130;;;;22251:218;;22271:59;22301:1;22292:10;;22315:5;;;22339:130;22376:3;22366:8;22363:17;22360:2;;;22383:18;;:::i;:::-;-1:-1:-1;;22439:1:1;22425:16;;22454:5;;22251:218;;22553:2;22543:8;22540:16;22534:3;22528:4;22525:13;22521:36;22515:2;22505:8;22502:16;22497:2;22491:4;22488:12;22484:35;22481:77;22478:2;;;-1:-1:-1;22590:19:1;;;22622:5;;22478:2;22669:34;22694:8;22688:4;22669:34;:::i;:::-;22739:6;22735:1;22731:6;22727:19;22718:7;22715:32;22712:2;;;22750:18;;:::i;:::-;22788:20;;22067:747;-1:-1:-1;;;22067:747:1:o;22819:168::-;22859:7;22925:1;22921;22917:6;22913:14;22910:1;22907:21;22902:1;22895:9;22888:17;22884:45;22881:2;;;22932:18;;:::i;:::-;-1:-1:-1;22972:9:1;;22871:116::o;22992:125::-;23032:4;23060:1;23057;23054:8;23051:2;;;23065:18;;:::i;:::-;-1:-1:-1;23102:9:1;;23041:76::o;23122:380::-;23201:1;23197:12;;;;23244;;;23265:2;;23319:4;23311:6;23307:17;23297:27;;23265:2;23372;23364:6;23361:14;23341:18;23338:38;23335:2;;;23418:10;23413:3;23409:20;23406:1;23399:31;23453:4;23450:1;23443:15;23481:4;23478:1;23471:15;23335:2;;23177:325;;;:::o;23507:135::-;23546:3;-1:-1:-1;;23567:17:1;;23564:2;;;23587:18;;:::i;:::-;-1:-1:-1;23634:1:1;23623:13;;23554:88::o;23647:112::-;23679:1;23705;23695:2;;23710:18;;:::i;:::-;-1:-1:-1;23744:9:1;;23685:74::o;23764:127::-;23825:10;23820:3;23816:20;23813:1;23806:31;23856:4;23853:1;23846:15;23880:4;23877:1;23870:15;23896:127;23957:10;23952:3;23948:20;23945:1;23938:31;23988:4;23985:1;23978:15;24012:4;24009:1;24002:15;24028:127;24089:10;24084:3;24080:20;24077:1;24070:31;24120:4;24117:1;24110:15;24144:4;24141:1;24134:15;24160:131;-1:-1:-1;;;;;24235:31:1;;24225:42;;24215:2;;24281:1;24278;24271:12;24215:2;24205:86;:::o;24296:118::-;24382:5;24375:13;24368:21;24361:5;24358:32;24348:2;;24404:1;24401;24394:12
Swarm Source
ipfs://5cc9b07c47e251e7db657c98c49a2c5fdfe7e49ad462cf9a0b46f5dc63f83fc4
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.