ERC-20
Overview
Max Total Supply
75,000,000 CLAW
Holders
57
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CLAW
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-29 */ /* https://clawfinance.com/ https://t.me/ClawFinanceETH */ // SPDX-License-Identifier: MIT pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0; pragma experimental ABIEncoderV2; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); 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); _afterTokenTransfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract CLAW is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); address public uniV2router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; bool private swapping; address public marketingWallet; address public developmentWallet; address public liquidityWallet; address public operationsWallet; uint256 public maxTransaction; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint public CurrentRound; uint256 public taxCollectedthisRound; uint RewardDistributionTime = 8 hours; bool public rewardsEnabled = false; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; bool public transferDelayEnabled = true; uint256 private launchBlock; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyOperationsFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellOperationsFee; uint256 public sellBurnFee; uint256 public tokensForMarketing; uint256 public tokensForOperations; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedmaxTransaction; mapping(address => bool) public automatedMarketMakerPairs; struct roundInfo{ bool bl; uint256 amt; } struct HoldersInfo { uint256 lastClaimRound; uint256 lastBuy; uint256 startHoldingTimestamp; mapping(uint256 => roundInfo) roundInfo; uint256 lastCalculatedRound; } struct RewardRound { uint256 startTime; uint256 endTime; uint256 totalCollectedTax; bool claimsEnabled; address[] modifiers; uint256 totalweightedBalance; } mapping(address => HoldersInfo) public holderInfo; mapping(uint256 => RewardRound) public rewardsRound; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event operationsWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("Claw Finance", "CLAW") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniV2router); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 25; uint256 _buyOperationsFee = 5; uint256 _sellMarketingFee = 35; uint256 _sellOperationsFee = 5; uint256 _sellBurnFee = 1; uint256 totalSupply = 75_000_000 * 1e18; maxTransaction = totalSupply * 2 / 100; // 2% max transaction at launch maxWallet = totalSupply * 2 / 100; // 2% max wallet at launch swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet buyMarketingFee = _buyMarketingFee; buyOperationsFee = _buyOperationsFee; buyTotalFees = buyMarketingFee+ buyOperationsFee; sellMarketingFee = _sellMarketingFee; sellOperationsFee = _sellOperationsFee; sellBurnFee = _sellBurnFee; sellTotalFees = sellMarketingFee + sellOperationsFee + sellBurnFee; marketingWallet = address (0xE7c68d7E8870B640358425FC7897eCB762a7267A); operationsWallet = address(0xd7BCDb62fCb0e1C4A1f16996a9430601b5615D5d); CurrentRound = 1; // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(msg.sender, totalSupply); } receive() external payable {} function enableTrading() external onlyOwner { require(!tradingActive, "Token launched"); tradingActive = true; launchBlock = block.number; swapEnabled = true; rewardsRound[CurrentRound].startTime = block.timestamp; rewardsEnabled = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxTransaction(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransaction lower than 0.1%" ); maxTransaction = newNum * (10**18); } function updateMaxWallet(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedmaxTransaction[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees( uint256 _marketingFee, uint256 _operationsFee ) external onlyOwner { buyMarketingFee = _marketingFee; buyOperationsFee = _operationsFee; buyTotalFees = buyMarketingFee + buyOperationsFee; require(buyTotalFees <= 50); } function updateSellFees( uint256 _marketingFee, uint256 _operationsFee, uint256 _burnFee ) external onlyOwner { sellMarketingFee = _marketingFee; sellOperationsFee = _operationsFee; sellBurnFee = _burnFee; sellTotalFees = sellMarketingFee + sellOperationsFee + sellBurnFee; require(sellTotalFees <= 50); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updatemarketingWallet(address newmarketingWallet) external onlyOwner { emit marketingWalletUpdated(newmarketingWallet, marketingWallet); marketingWallet = newmarketingWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function internalRoundDeets(address holder,uint _round) external view returns(roundInfo memory,address[] memory){ HoldersInfo storage info = holderInfo[holder]; return (info.roundInfo[_round],rewardsRound[_round].modifiers); } function forceStartNewRound() external { require(msg.sender == owner(), "Only owner can call this function"); checkandUpdateRound(true); } function updateTotalWeight(uint256 _round, uint256 _weight) external onlyOwner{ RewardRound storage round = rewardsRound[_round]; round.totalweightedBalance = _weight; } function updateisRewardEnabled(bool _enabled) external onlyOwner{ rewardsEnabled = _enabled; } function updateWeightedBalance(address holder,bool isSell) internal { if (!rewardsEnabled ) return; HoldersInfo storage info = holderInfo[holder]; RewardRound storage round = rewardsRound[CurrentRound]; uint256 weightedBalance; if (isSell){ if (!info.roundInfo[CurrentRound].bl ){ info.roundInfo[CurrentRound].bl = true; uint256 _temp_w= info.roundInfo[CurrentRound].amt; if (_temp_w == 0){ _temp_w = info.roundInfo[info.lastCalculatedRound].amt; } round.modifiers.push(holder); round.totalweightedBalance -= _temp_w; info.roundInfo[CurrentRound].amt = balanceOf(holder); info.lastCalculatedRound = CurrentRound; } }else{ if (!info.roundInfo[CurrentRound].bl){ uint256 timeHeld = block.timestamp - info.startHoldingTimestamp; weightedBalance = info.roundInfo[CurrentRound].amt; if (weightedBalance == 0){ weightedBalance = info.roundInfo[info.lastCalculatedRound].amt; } round.totalweightedBalance -= weightedBalance; weightedBalance = calculateWeightedBalance(balanceOf(holder), timeHeld); info.roundInfo[CurrentRound].amt = weightedBalance; round.totalweightedBalance += weightedBalance; info.lastCalculatedRound = CurrentRound; if (info.startHoldingTimestamp == 0) { info.startHoldingTimestamp = block.timestamp; } if (info.lastBuy == 0){ info.lastClaimRound = CurrentRound - 1; } info.lastBuy = block.timestamp; } } } function calculateWeightedBalance(uint256 balance, uint256 timeHeld) internal pure returns (uint256 weightedBalance) { if (timeHeld >= 60 days) return (balance * 200) / 100; // bonus 100% if (timeHeld >= 45 days) return (balance * 190) / 100; // bonus 90% if (timeHeld >= 30 days) return (balance * 180) / 100; // bonus 80% if (timeHeld >= 20 days) return (balance * 170) / 100; // bonus 70% if (timeHeld >= 12 days) return (balance * 160) / 100; // bonus 60% if (timeHeld >= 7 days) return (balance * 150) / 100; // bonus 50% if (timeHeld >= 4 days) return (balance * 140) / 100; // bonus 40% if (timeHeld >= 3 days) return (balance * 130) / 100; // bonus 30% if (timeHeld >= 2 days) return (balance * 120) / 100; // bonus 20% if (timeHeld >= 1 days) return (balance * 110) / 100; // bonus 10% if (timeHeld >= 12 hours) return (balance * 105) / 100; // bonus 5% return balance; } function checkandUpdateRound(bool _force) internal { if (!rewardsEnabled) return; RewardRound storage round = rewardsRound[CurrentRound]; // Use storage directly if (block.timestamp >= round.startTime + RewardDistributionTime || _force) { round.endTime = block.timestamp; round.claimsEnabled = true; round.totalCollectedTax = taxCollectedthisRound; taxCollectedthisRound = 0; RewardRound storage next_round = rewardsRound[CurrentRound + 1]; next_round.totalweightedBalance = round.totalweightedBalance; next_round.startTime = block.timestamp; for (uint256 i = 0; i < round.modifiers.length; i++) { address holder = round.modifiers[i]; HoldersInfo storage info = holderInfo[holder]; info.startHoldingTimestamp = block.timestamp; uint256 weight = balanceOf(holder); info.roundInfo[CurrentRound + 1].amt = weight; next_round.totalweightedBalance += weight; info.lastCalculatedRound = CurrentRound + 1; } delete round.modifiers; //release storage consumed by modifiers; CurrentRound++; } } function _claim(address _sender) internal { if (!rewardsEnabled ) return; rewardsEnabled = false; //protect from re-entrancy; checkandUpdateRound(false); HoldersInfo storage info = holderInfo[_sender]; if (info.lastClaimRound >= CurrentRound - 1 && info.lastClaimRound != 0) {rewardsEnabled = true;return;} uint256 totalreward = 0; for (uint256 i = info.lastClaimRound + 1; i < CurrentRound; i++) { roundInfo memory _roundInfo = info.roundInfo[i]; if (!_roundInfo.bl){ RewardRound storage round = rewardsRound[i]; if (!round.claimsEnabled){ break; } if (round.totalweightedBalance == 0) continue; uint256 _temp_weight; if (info.lastCalculatedRound < i){ _temp_weight = info.roundInfo[info.lastCalculatedRound].amt; }else{ _temp_weight = _roundInfo.amt; } uint256 reward = (_temp_weight * round.totalCollectedTax) / round.totalweightedBalance; if (info.lastCalculatedRound < i){ uint256 timeHeld = round.endTime - info.startHoldingTimestamp; uint256 _tempreward = reward; reward = calculateWeightedBalance(reward, timeHeld); if (reward >= round.totalCollectedTax) reward = _tempreward; if (round.totalCollectedTax > reward-_tempreward) round.totalCollectedTax -= (reward-_tempreward); else round.totalCollectedTax = 0; } totalreward += reward; } } if (totalreward > 0){ if (totalreward >= address(this).balance){ totalreward = address(this).balance*25/100; } _sender.call{value: totalreward}(""); } info.lastClaimRound = CurrentRound-1; rewardsEnabled = true; } function CalculateReward(address _user) public view returns (uint){ if (!rewardsEnabled ) return 0; HoldersInfo storage info = holderInfo[_user]; uint256 reward; uint256 totalReward; for (uint256 i = info.lastClaimRound + 1; i < CurrentRound; i++) { roundInfo memory _roundInfo = info.roundInfo[i]; if (!_roundInfo.bl){ RewardRound storage round = rewardsRound[i]; if (!round.claimsEnabled){ break; } uint256 _temp_weight; if (info.lastCalculatedRound < i){ _temp_weight = info.roundInfo[info.lastCalculatedRound].amt; }else{ _temp_weight = _roundInfo.amt; } reward = (_temp_weight * round.totalCollectedTax) / round.totalweightedBalance; if (info.lastCalculatedRound < i){ // Extra Calculation to maintain fairness uint256 timeHeld = round.endTime - info.startHoldingTimestamp; uint256 _tempreward = reward; reward = calculateWeightedBalance(reward, timeHeld); if (reward >= round.totalCollectedTax) reward = _tempreward; } totalReward += reward; } } return totalReward; } function Claim() external { _claim(msg.sender); updateWeightedBalance(msg.sender, false); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled) { if ( to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair) ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedmaxTransaction[to] ) { require( amount <= maxTransaction, "Buy transfer amount exceeds the maxTransaction." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedmaxTransaction[from] ) { require( amount <= maxTransaction, "Sell transfer amount exceeds the maxTransaction." ); } else if (!_isExcludedmaxTransaction[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees; tokensForOperations += (fees * sellOperationsFee) / sellTotalFees; super._transfer(from, deadAddress, (fees * sellBurnFee) / sellTotalFees); //burn } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees; tokensForOperations += (fees * buyOperationsFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } // sell and set reward to false super._transfer(from, to, amount); if ((from == address(this) || to == address(this)) || from == to ) return; if (automatedMarketMakerPairs[to]){ _claim(from); updateWeightedBalance(from, true); }else if (automatedMarketMakerPairs[from]){ _claim(to); updateWeightedBalance(to, false); }else{ _claim(from); updateWeightedBalance(from, true); updateWeightedBalance(to, false); } checkandUpdateRound(false); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function WithdrawETH(uint256 _amount) external { require(msg.sender == marketingWallet, "Only marketing wallet can call this function"); if (_amount == 0) { _amount = address(this).balance; } payable(msg.sender).transfer(_amount); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForMarketing + tokensForOperations; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 amountToSwapForETH = contractBalance; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarket = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); tokensForMarketing = 0; tokensForOperations = 0; (success, ) = address(marketingWallet).call{value: ethForMarket}(""); taxCollectedthisRound += (ethBalance - ethForMarket); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"operationsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"CalculateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"CurrentRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"WithdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceStartNewRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderInfo","outputs":[{"internalType":"uint256","name":"lastClaimRound","type":"uint256"},{"internalType":"uint256","name":"lastBuy","type":"uint256"},{"internalType":"uint256","name":"startHoldingTimestamp","type":"uint256"},{"internalType":"uint256","name":"lastCalculatedRound","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":"holder","type":"address"},{"internalType":"uint256","name":"_round","type":"uint256"}],"name":"internalRoundDeets","outputs":[{"components":[{"internalType":"bool","name":"bl","type":"bool"},{"internalType":"uint256","name":"amt","type":"uint256"}],"internalType":"struct CLAW.roundInfo","name":"","type":"tuple"},{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardsRound","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"totalCollectedTax","type":"uint256"},{"internalType":"bool","name":"claimsEnabled","type":"bool"},{"internalType":"uint256","name":"totalweightedBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"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":"taxCollectedthisRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniV2router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_round","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"name":"updateTotalWeight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateisRewardEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketingWallet","type":"address"}],"name":"updatemarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556170806010556011805463ffffffff19166101001790556013805460ff191660011790553480156200005b57600080fd5b50604080518082018252600c81526b436c61772046696e616e636560a01b602080830191825283518085019094526004845263434c415760e01b908401528151919291620000ac91600391620006be565b508051620000c2906004906020840190620006be565b505050620000df620000d96200040c60201b60201c565b62000410565b6006546001600160a01b0316620000f881600162000462565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000143573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000169919062000764565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dd919062000764565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200022b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000251919062000764565b6001600160a01b031660a08190526200026c90600162000462565b60a0516200027c906001620004dc565b6019600560238160016a3e09de2596099e2b0000006064620002a0826002620007ac565b620002ac9190620007ce565b600b556064620002be826002620007ac565b620002ca9190620007ce565b600d55612710620002dd826005620007ac565b620002e99190620007ce565b600c5560168690556017859055620003028587620007f1565b6015556019849055601a839055601b82905581620003218486620007f1565b6200032d9190620007f1565b601855600780546001600160a01b031990811673e7c68d7e8870b640358425fc7897ecb762a7267a17909155600a805490911673d7bcdb62fcb0e1c4a1f16996a9430601b5615d5d1790556001600e556200039c620003946005546001600160a01b031690565b60016200052f565b620003a93060016200052f565b620003b861dead60016200052f565b620003d7620003cf6005546001600160a01b031690565b600162000462565b620003e430600162000462565b620003f361dead600162000462565b620003ff3382620005d9565b5050505050505062000849565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004b15760405162461bcd60e51b8152602060048201819052602482015260008051602062003ecd83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200057a5760405162461bcd60e51b8152602060048201819052602482015260008051602062003ecd8339815191526044820152606401620004a8565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006315760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004a8565b8060026000828254620006459190620007f1565b90915550506001600160a01b0382166000908152602081905260408120805483929062000674908490620007f1565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620006cc906200080c565b90600052602060002090601f016020900481019282620006f057600085556200073b565b82601f106200070b57805160ff19168380011785556200073b565b828001600101855582156200073b579182015b828111156200073b5782518255916020019190600101906200071e565b50620007499291506200074d565b5090565b5b808211156200074957600081556001016200074e565b6000602082840312156200077757600080fd5b81516001600160a01b03811681146200078f57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620007c957620007c962000796565b500290565b600082620007ec57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000807576200080762000796565b500190565b600181811c908216806200082157607f821691505b602082108114156200084357634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161363462000899600039600081816105fa015281816113330152611e0401526000818161047801528181611dc601528181612fe9015281816130a201526130de01526136346000f3fe6080604052600436106103dd5760003560e01c80638da5cb5b116101fd578063c16cbd3211610118578063dd62ed3e116100ab578063eee32e461161007a578063eee32e4614610c13578063f2fde38b14610c29578063f8b45b0514610c49578063fb002c9714610c5f578063fd72e22a14610c7557600080fd5b8063dd62ed3e14610b72578063e1bc339414610bb8578063e2f4560514610be8578063e884f26014610bfe57600080fd5b8063c9f15293116100e7578063c9f1529314610afc578063d257b34f14610b1c578063d469801614610b3c578063d85ba06314610b5c57600080fd5b8063c16cbd3214610a7e578063c17b5b8c14610aac578063c3f70b5214610acc578063c876d0b914610ae257600080fd5b8063adb873bd11610190578063bec19c001161015f578063bec19c0014610a09578063bff7816914610a1e578063c024666814610a3e578063c04a541414610a5e57600080fd5b8063adb873bd14610984578063b4c732591461099a578063b62496f5146109ba578063bbc0c742146109e957600080fd5b806395d89b41116101cc57806395d89b411461090f5780639a7a23d614610924578063a457c2d714610944578063a9059cbb1461096457600080fd5b80638da5cb5b1461089b57806392136913146108b9578063924de9b7146108cf57806394effa14146108ef57600080fd5b80634a62bb65116102f85780636ddd17131161028b578063751039fc1161025a578063751039fc1461081b5780637571336a1461083057806375f0a874146108505780637bce5a04146108705780638a8c523c1461088657600080fd5b80636ddd1713146107af57806370a08231146107d0578063715018a6146107f057806374f724b21461080557600080fd5b80635d31c34d116102c75780635d31c34d146106a057806366ca9b83146107175780636a486a8e146107375780636d1d59a81461074d57600080fd5b80634a62bb651461061c5780634f77f6c01461063b5780634fbee193146106515780635a139dd41461068a57600080fd5b806323b872dd11610370578063377ad1271161033f578063377ad1271461058857806339509351146105a85780633ab2af5d146105c857806349bd5a5e146105e857600080fd5b806323b872dd1461052157806327c8f83514610541578063313ce567146105575780633158952e1461057357600080fd5b806318160ddd116103ac57806318160ddd146104b25780631c499ab0146104d15780631dafe16b146104f15780631f3fed8f1461050b57600080fd5b80630517d13d146103e957806306fdde031461040b578063095ea7b3146104365780631694505e1461046657600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b50610409610404366004613190565b610c95565b005b34801561041757600080fd5b50610420610d75565b60405161042d91906131a9565b60405180910390f35b34801561044257600080fd5b50610456610451366004613213565b610e07565b604051901515815260200161042d565b34801561047257600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161042d565b3480156104be57600080fd5b506002545b60405190815260200161042d565b3480156104dd57600080fd5b506104096104ec366004613190565b610e1e565b3480156104fd57600080fd5b506011546104569060ff1681565b34801561051757600080fd5b506104c3601c5481565b34801561052d57600080fd5b5061045661053c36600461323f565b610eef565b34801561054d57600080fd5b5061049a61dead81565b34801561056357600080fd5b506040516012815260200161042d565b34801561057f57600080fd5b50610409610f99565b34801561059457600080fd5b5060065461049a906001600160a01b031681565b3480156105b457600080fd5b506104566105c3366004613213565b610faf565b3480156105d457600080fd5b506104096105e3366004613280565b610feb565b3480156105f457600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561062857600080fd5b5060115461045690610100900460ff1681565b34801561064757600080fd5b506104c3601a5481565b34801561065d57600080fd5b5061045661066c3660046132a2565b6001600160a01b03166000908152601e602052604090205460ff1690565b34801561069657600080fd5b506104c360175481565b3480156106ac57600080fd5b506106ed6106bb366004613190565b6022602052600090815260409020805460018201546002830154600384015460059094015492939192909160ff169085565b6040805195865260208601949094529284019190915215156060830152608082015260a00161042d565b34801561072357600080fd5b50610409610732366004613280565b61102a565b34801561074357600080fd5b506104c360185481565b34801561075957600080fd5b5061078f6107683660046132a2565b60216020526000908152604090208054600182015460028301546004909301549192909184565b60408051948552602085019390935291830152606082015260800161042d565b3480156107bb57600080fd5b50601154610456906301000000900460ff1681565b3480156107dc57600080fd5b506104c36107eb3660046132a2565b61107e565b3480156107fc57600080fd5b50610409611099565b34801561081157600080fd5b506104c3600e5481565b34801561082757600080fd5b506104566110cd565b34801561083c57600080fd5b5061040961084b3660046132cf565b61110b565b34801561085c57600080fd5b5060075461049a906001600160a01b031681565b34801561087c57600080fd5b506104c360165481565b34801561089257600080fd5b50610409611160565b3480156108a757600080fd5b506005546001600160a01b031661049a565b3480156108c557600080fd5b506104c360195481565b3480156108db57600080fd5b506104096108ea366004613304565b61120c565b3480156108fb57600080fd5b5061040961090a366004613190565b611254565b34801561091b57600080fd5b506104206112f8565b34801561093057600080fd5b5061040961093f3660046132cf565b611307565b34801561095057600080fd5b5061045661095f366004613213565b6113e3565b34801561097057600080fd5b5061045661097f366004613213565b61147c565b34801561099057600080fd5b506104c3601b5481565b3480156109a657600080fd5b506104c36109b53660046132a2565b611489565b3480156109c657600080fd5b506104566109d53660046132a2565b602080526000908152604090205460ff1681565b3480156109f557600080fd5b506011546104569062010000900460ff1681565b348015610a1557600080fd5b506104096115f1565b348015610a2a57600080fd5b50610409610a393660046132a2565b61165f565b348015610a4a57600080fd5b50610409610a593660046132cf565b6116e6565b348015610a6a57600080fd5b5060085461049a906001600160a01b031681565b348015610a8a57600080fd5b50610a9e610a99366004613213565b61176f565b60405161042d929190613363565b348015610ab857600080fd5b50610409610ac7366004613391565b611838565b348015610ad857600080fd5b506104c3600b5481565b348015610aee57600080fd5b506013546104569060ff1681565b348015610b0857600080fd5b50610409610b17366004613304565b61189d565b348015610b2857600080fd5b50610456610b37366004613190565b6118da565b348015610b4857600080fd5b5060095461049a906001600160a01b031681565b348015610b6857600080fd5b506104c360155481565b348015610b7e57600080fd5b506104c3610b8d3660046133bd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610bc457600080fd5b50610456610bd33660046132a2565b601f6020526000908152604090205460ff1681565b348015610bf457600080fd5b506104c3600c5481565b348015610c0a57600080fd5b50610456611a31565b348015610c1f57600080fd5b506104c3600f5481565b348015610c3557600080fd5b50610409610c443660046132a2565b611a6e565b348015610c5557600080fd5b506104c3600d5481565b348015610c6b57600080fd5b506104c3601d5481565b348015610c8157600080fd5b50600a5461049a906001600160a01b031681565b6005546001600160a01b03163314610cc85760405162461bcd60e51b8152600401610cbf906133f6565b60405180910390fd5b670de0b6b3a76400006103e8610cdd60025490565b610ce8906001613441565b610cf29190613460565b610cfc9190613460565b811015610d5d5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610cbf565b610d6f81670de0b6b3a7640000613441565b600b5550565b606060038054610d8490613482565b80601f0160208091040260200160405190810160405280929190818152602001828054610db090613482565b8015610dfd5780601f10610dd257610100808354040283529160200191610dfd565b820191906000526020600020905b815481529060010190602001808311610de057829003601f168201915b5050505050905090565b6000610e14338484611b09565b5060015b92915050565b6005546001600160a01b03163314610e485760405162461bcd60e51b8152600401610cbf906133f6565b670de0b6b3a76400006103e8610e5d60025490565b610e68906005613441565b610e729190613460565b610e7c9190613460565b811015610ed75760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610cbf565b610ee981670de0b6b3a7640000613441565b600d5550565b6000610efc848484611c2d565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f815760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610cbf565b610f8e8533858403611b09565b506001949350505050565b610fa2336124f7565b610fad33600061278c565b565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e14918590610fe69086906134bd565b611b09565b6005546001600160a01b031633146110155760405162461bcd60e51b8152600401610cbf906133f6565b60009182526022602052604090912060050155565b6005546001600160a01b031633146110545760405162461bcd60e51b8152600401610cbf906133f6565b6016829055601781905561106881836134bd565b60158190556032101561107a57600080fd5b5050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146110c35760405162461bcd60e51b8152600401610cbf906133f6565b610fad60006129b7565b6005546000906001600160a01b031633146110fa5760405162461bcd60e51b8152600401610cbf906133f6565b506011805461ff0019169055600190565b6005546001600160a01b031633146111355760405162461bcd60e51b8152600401610cbf906133f6565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461118a5760405162461bcd60e51b8152600401610cbf906133f6565b60115462010000900460ff16156111d45760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b6044820152606401610cbf565b601180544360145563ffff000019166301010000178155600e546000908152602260205260409020429055805460ff19166001179055565b6005546001600160a01b031633146112365760405162461bcd60e51b8152600401610cbf906133f6565b6011805491151563010000000263ff00000019909216919091179055565b6007546001600160a01b031633146112c35760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c79206d61726b6574696e672077616c6c65742063616e2063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610cbf565b806112cb5750475b604051339082156108fc029083906000818181858888f1935050505015801561107a573d6000803e3d6000fd5b606060048054610d8490613482565b6005546001600160a01b031633146113315760405162461bcd60e51b8152600401610cbf906133f6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156113d95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cbf565b61107a8282612a09565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156114655760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cbf565b6114723385858403611b09565b5060019392505050565b6000610e14338484611c2d565b60115460009060ff1661149e57506000919050565b6001600160a01b03821660009081526021602052604081208054909190819081906114ca9060016134bd565b90505b600e548110156115e85760008181526003850160209081526040918290208251808401909352805460ff161515808452600190910154918301919091526115d5576000828152602260205260409020600381015460ff1661152f5750506115e8565b6000838760040154101561155c575060048601546000908152600387016020526040902060010154611563565b5060208201515b600582015460028301546115779083613441565b6115819190613460565b955083876004015410156115c6576000876002015483600101546115a591906134d5565b9050866115b28183612a5c565b9750836002015488106115c3578097505b50505b6115d086866134bd565b945050505b50806115e0816134ec565b9150506114cd565b50949350505050565b6005546001600160a01b031633146116555760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610cbf565b610fad6001612b72565b6005546001600160a01b031633146116895760405162461bcd60e51b8152600401610cbf906133f6565b6007546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117105760405162461bcd60e51b8152600401610cbf906133f6565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60408051808201909152600080825260208201526001600160a01b0383166000908152602160209081526040808320858452600381018352818420602284529382902082518084018452855460ff161515815260019095015485850152600401805483518186028101860190945280845260609592949293919283919083018282801561182557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611807575b5050505050905092509250509250929050565b6005546001600160a01b031633146118625760405162461bcd60e51b8152600401610cbf906133f6565b6019839055601a829055601b8190558061187c83856134bd565b61188691906134bd565b60188190556032101561189857600080fd5b505050565b6005546001600160a01b031633146118c75760405162461bcd60e51b8152600401610cbf906133f6565b6011805460ff1916911515919091179055565b6005546000906001600160a01b031633146119075760405162461bcd60e51b8152600401610cbf906133f6565b620186a061191460025490565b61191f906001613441565b6119299190613460565b8210156119965760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cbf565b6103e86119a260025490565b6119ad906005613441565b6119b79190613460565b821115611a235760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610cbf565b50600c81905560015b919050565b6005546000906001600160a01b03163314611a5e5760405162461bcd60e51b8152600401610cbf906133f6565b506013805460ff19169055600190565b6005546001600160a01b03163314611a985760405162461bcd60e51b8152600401610cbf906133f6565b6001600160a01b038116611afd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cbf565b611b06816129b7565b50565b6001600160a01b038316611b6b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cbf565b6001600160a01b038216611bcc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cbf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c535760405162461bcd60e51b8152600401610cbf90613507565b6001600160a01b038216611c795760405162461bcd60e51b8152600401610cbf9061354c565b80611c8a5761189883836000612d00565b601154610100900460ff161561211f576005546001600160a01b03848116911614801590611cc657506005546001600160a01b03838116911614155b8015611cda57506001600160a01b03821615155b8015611cf157506001600160a01b03821661dead14155b8015611d075750600654600160a01b900460ff16155b1561211f5760115462010000900460ff16611da0576001600160a01b0383166000908152601e602052604090205460ff1680611d5b57506001600160a01b0382166000908152601e602052604090205460ff165b611da05760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cbf565b60135460ff1615611ee7576005546001600160a01b03838116911614801590611dfb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611e3957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611ee757326000908152601260205260409020544311611ed45760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610cbf565b3260009081526012602052604090204390555b6001600160a01b038316600090815260208052604090205460ff168015611f2757506001600160a01b0382166000908152601f602052604090205460ff16155b15611ff557600b54811115611f965760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610cbf565b600d54611fa28361107e565b611fac90836134bd565b1115611ff05760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cbf565b61211f565b6001600160a01b038216600090815260208052604090205460ff16801561203557506001600160a01b0383166000908152601f602052604090205460ff16155b156120a557600b54811115611ff05760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610cbf565b6001600160a01b0382166000908152601f602052604090205460ff1661211f57600d546120d18361107e565b6120db90836134bd565b111561211f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cbf565b600061212a3061107e565b600c549091508110801590819061214a57506011546301000000900460ff165b80156121605750600654600160a01b900460ff16155b801561218457506001600160a01b038516600090815260208052604090205460ff16155b80156121a957506001600160a01b0385166000908152601e602052604090205460ff16155b80156121ce57506001600160a01b0384166000908152601e602052604090205460ff16155b156121fc576006805460ff60a01b1916600160a01b1790556121ee612e55565b6006805460ff60a01b191690555b6006546001600160a01b0386166000908152601e602052604090205460ff600160a01b90920482161591168061224a57506001600160a01b0385166000908152601e602052604090205460ff165b15612253575060005b60008115612404576001600160a01b038616600090815260208052604090205460ff16801561228457506000601854115b1561233a576122a960646122a360185488612f7390919063ffffffff16565b90612f86565b9050601854601954826122bc9190613441565b6122c69190613460565b601c60008282546122d791906134bd565b9091555050601854601a546122ec9083613441565b6122f69190613460565b601d600082825461230791906134bd565b925050819055506123358761dead601854601b54856123269190613441565b6123309190613460565b612d00565b6123e6565b6001600160a01b038716600090815260208052604090205460ff16801561236357506000601554115b156123e65761238260646122a360155488612f7390919063ffffffff16565b9050601554601654826123959190613441565b61239f9190613460565b601c60008282546123b091906134bd565b90915550506015546017546123c59083613441565b6123cf9190613460565b601d60008282546123e091906134bd565b90915550505b80156123f7576123f7873083612d00565b61240181866134d5565b94505b61240f878787612d00565b6001600160a01b03871630148061242e57506001600160a01b03861630145b8061244a5750856001600160a01b0316876001600160a01b0316145b156124585750505050505050565b6001600160a01b038616600090815260208052604090205460ff161561249157612481876124f7565b61248c87600161278c565b6124e4565b6001600160a01b038716600090815260208052604090205460ff16156124c5576124ba866124f7565b61248c86600061278c565b6124ce876124f7565b6124d987600161278c565b6124e486600061278c565b6124ee6000612b72565b50505050505050565b60115460ff166125045750565b6011805460ff191690556125186000612b72565b6001600160a01b0381166000908152602160205260409020600e5461253f906001906134d5565b81541080159061254f5750805415155b156125655750506011805460ff19166001179055565b805460009081906125779060016134bd565b90505b600e548110156126ef5760008181526003840160209081526040918290208251808401909352805460ff161515808452600190910154918301919091526126db576000828152602260205260409020600381015460ff166125dc5750506126ef565b60058101546125ec5750506126dd565b60008386600401541015612619575060048501546000908152600386016020526040902060010154612620565b5060208201515b600082600501548360020154836126379190613441565b6126419190613460565b905084876004015410156126cb5760008760020154846001015461266591906134d5565b9050816126728183612a5c565b925084600201548310612683578092505b61268d81846134d5565b856002015411156126c0576126a281846134d5565b8560020160008282546126b591906134d5565b909155506126c89050565b600060028601555b50505b6126d581876134bd565b95505050505b505b806126e7816134ec565b91505061257a565b5080156127695747811061271757606461270a476019613441565b6127149190613460565b90505b6040516001600160a01b038416908290600081818185875af1925050503d8060008114612760576040519150601f19603f3d011682016040523d82523d6000602084013e612765565b606091505b5050505b6001600e5461277891906134d5565b90915550506011805460ff19166001179055565b60115460ff1661279a575050565b6001600160a01b0382166000908152602160209081526040808320600e54845260229092528220909183156128a957600e54600090815260038401602052604090205460ff166128a457600e80546000908152600385016020526040808220805460ff1916600190811790915592548252902001548061282f5750600483015460009081526003840160205260409020600101545b6004830180546001810182556000918252602082200180546001600160a01b0319166001600160a01b0389161790556005840180548392906128729084906134d5565b9091555061288190508661107e565b600e80546000908152600387016020526040902060010191909155546004850155505b6129b0565b600e54600090815260038401602052604090205460ff166129b05760008360020154426128d691906134d5565b600e5460009081526003860160205260409020600101549250905081612912576004840154600090815260038501602052604090206001015491505b8183600501600082825461292691906134d5565b9091555061293e90506129388761107e565b82612a5c565b600e546000908152600386016020526040812060010182905560058501805492945084929091906129709084906134bd565b9091555050600e546004850155600284015461298d574260028501555b60018401546129a8576001600e546129a591906134d5565b84555b504260018401555b5050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000624f1a008210612a86576064612a758460c8613441565b612a7f9190613460565b9050610e18565b623b53808210612a9d576064612a758460be613441565b62278d008210612ab4576064612a758460b4613441565b621a5e008210612acb576064612a758460aa613441565b620fd2008210612ae2576064612a758460a0613441565b62093a808210612af9576064612a75846096613441565b620546008210612b10576064612a7584608c613441565b6203f4808210612b27576064612a75846082613441565b6202a3008210612b3e576064612a75846078613441565b620151808210612b55576064612a7584606e613441565b61a8c08210612b6b576064612a75846069613441565b5090919050565b60115460ff16612b7f5750565b600e5460009081526022602052604090206010548154612b9f91906134bd565b42101580612baa5750815b1561107a574260018083019190915560038201805460ff191682179055600f80546002840155600090819055600e5490916022918391612bea91906134bd565b8152602081019190915260400160009081206005808501549082015542815591505b6004830154811015612cd7576000836004018281548110612c2f57612c2f61358f565b60009182526020808320909101546001600160a01b031680835260219091526040822042600282015590925090612c658361107e565b905080826003016000600e546001612c7d91906134bd565b81526020019081526020016000206001018190555080856005016000828254612ca691906134bd565b9091555050600e54612cb99060016134bd565b82600401819055505050508080612ccf906134ec565b915050612c0c565b50612ce660048301600061315e565b600e8054906000612cf6836134ec565b9190505550505050565b6001600160a01b038316612d265760405162461bcd60e51b8152600401610cbf90613507565b6001600160a01b038216612d4c5760405162461bcd60e51b8152600401610cbf9061354c565b6001600160a01b03831660009081526020819052604090205481811015612dc45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cbf565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612dfb9084906134bd565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e4791815260200190565b60405180910390a350505050565b6000612e603061107e565b90506000601d54601c54612e7491906134bd565b90506000821580612e83575081155b15612e8d57505050565b600c54612e9b906014613441565b831115612eb357600c54612eb0906014613441565b92505b8247612ebe82612f92565b6000612eca4783613152565b90506000612ee7866122a3601c5485612f7390919063ffffffff16565b6000601c819055601d8190556007546040519293506001600160a01b031691839181818185875af1925050503d8060008114612f3f576040519150601f19603f3d011682016040523d82523d6000602084013e612f44565b606091505b50909550612f54905081836134d5565b600f6000828254612f6591906134bd565b909155505050505050505050565b6000612f7f8284613441565b9392505050565b6000612f7f8284613460565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fc757612fc761358f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613045573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306991906135a5565b8160018151811061307c5761307c61358f565b60200260200101906001600160a01b031690816001600160a01b0316815250506130c7307f000000000000000000000000000000000000000000000000000000000000000084611b09565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061311c9085906000908690309042906004016135c2565b600060405180830381600087803b15801561313657600080fd5b505af115801561314a573d6000803e3d6000fd5b505050505050565b6000612f7f82846134d5565b5080546000825590600052602060002090810190611b0691905b8082111561318c5760008155600101613178565b5090565b6000602082840312156131a257600080fd5b5035919050565b600060208083528351808285015260005b818110156131d6578581018301518582016040015282016131ba565b818111156131e8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611b0657600080fd5b6000806040838503121561322657600080fd5b8235613231816131fe565b946020939093013593505050565b60008060006060848603121561325457600080fd5b833561325f816131fe565b9250602084013561326f816131fe565b929592945050506040919091013590565b6000806040838503121561329357600080fd5b50508035926020909101359150565b6000602082840312156132b457600080fd5b8135612f7f816131fe565b80358015158114611a2c57600080fd5b600080604083850312156132e257600080fd5b82356132ed816131fe565b91506132fb602084016132bf565b90509250929050565b60006020828403121561331657600080fd5b612f7f826132bf565b600081518084526020808501945080840160005b838110156133585781516001600160a01b031687529582019590820190600101613333565b509495945050505050565b82511515815260208301516020820152606060408201526000613389606083018461331f565b949350505050565b6000806000606084860312156133a657600080fd5b505081359360208301359350604090920135919050565b600080604083850312156133d057600080fd5b82356133db816131fe565b915060208301356133eb816131fe565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561345b5761345b61342b565b500290565b60008261347d57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061349657607f821691505b602082108114156134b757634e487b7160e01b600052602260045260246000fd5b50919050565b600082198211156134d0576134d061342b565b500190565b6000828210156134e7576134e761342b565b500390565b60006000198214156135005761350061342b565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156135b757600080fd5b8151612f7f816131fe565b85815284602082015260a0604082015260006135e160a083018661331f565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122053c08ee1f8f0e13696aab902605c863868d3463eac9944755d45e32237b85c7f64736f6c634300080a00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103dd5760003560e01c80638da5cb5b116101fd578063c16cbd3211610118578063dd62ed3e116100ab578063eee32e461161007a578063eee32e4614610c13578063f2fde38b14610c29578063f8b45b0514610c49578063fb002c9714610c5f578063fd72e22a14610c7557600080fd5b8063dd62ed3e14610b72578063e1bc339414610bb8578063e2f4560514610be8578063e884f26014610bfe57600080fd5b8063c9f15293116100e7578063c9f1529314610afc578063d257b34f14610b1c578063d469801614610b3c578063d85ba06314610b5c57600080fd5b8063c16cbd3214610a7e578063c17b5b8c14610aac578063c3f70b5214610acc578063c876d0b914610ae257600080fd5b8063adb873bd11610190578063bec19c001161015f578063bec19c0014610a09578063bff7816914610a1e578063c024666814610a3e578063c04a541414610a5e57600080fd5b8063adb873bd14610984578063b4c732591461099a578063b62496f5146109ba578063bbc0c742146109e957600080fd5b806395d89b41116101cc57806395d89b411461090f5780639a7a23d614610924578063a457c2d714610944578063a9059cbb1461096457600080fd5b80638da5cb5b1461089b57806392136913146108b9578063924de9b7146108cf57806394effa14146108ef57600080fd5b80634a62bb65116102f85780636ddd17131161028b578063751039fc1161025a578063751039fc1461081b5780637571336a1461083057806375f0a874146108505780637bce5a04146108705780638a8c523c1461088657600080fd5b80636ddd1713146107af57806370a08231146107d0578063715018a6146107f057806374f724b21461080557600080fd5b80635d31c34d116102c75780635d31c34d146106a057806366ca9b83146107175780636a486a8e146107375780636d1d59a81461074d57600080fd5b80634a62bb651461061c5780634f77f6c01461063b5780634fbee193146106515780635a139dd41461068a57600080fd5b806323b872dd11610370578063377ad1271161033f578063377ad1271461058857806339509351146105a85780633ab2af5d146105c857806349bd5a5e146105e857600080fd5b806323b872dd1461052157806327c8f83514610541578063313ce567146105575780633158952e1461057357600080fd5b806318160ddd116103ac57806318160ddd146104b25780631c499ab0146104d15780631dafe16b146104f15780631f3fed8f1461050b57600080fd5b80630517d13d146103e957806306fdde031461040b578063095ea7b3146104365780631694505e1461046657600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b50610409610404366004613190565b610c95565b005b34801561041757600080fd5b50610420610d75565b60405161042d91906131a9565b60405180910390f35b34801561044257600080fd5b50610456610451366004613213565b610e07565b604051901515815260200161042d565b34801561047257600080fd5b5061049a7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161042d565b3480156104be57600080fd5b506002545b60405190815260200161042d565b3480156104dd57600080fd5b506104096104ec366004613190565b610e1e565b3480156104fd57600080fd5b506011546104569060ff1681565b34801561051757600080fd5b506104c3601c5481565b34801561052d57600080fd5b5061045661053c36600461323f565b610eef565b34801561054d57600080fd5b5061049a61dead81565b34801561056357600080fd5b506040516012815260200161042d565b34801561057f57600080fd5b50610409610f99565b34801561059457600080fd5b5060065461049a906001600160a01b031681565b3480156105b457600080fd5b506104566105c3366004613213565b610faf565b3480156105d457600080fd5b506104096105e3366004613280565b610feb565b3480156105f457600080fd5b5061049a7f000000000000000000000000f89918ab7bef698602f6e38cf24a6e33c4e6b60981565b34801561062857600080fd5b5060115461045690610100900460ff1681565b34801561064757600080fd5b506104c3601a5481565b34801561065d57600080fd5b5061045661066c3660046132a2565b6001600160a01b03166000908152601e602052604090205460ff1690565b34801561069657600080fd5b506104c360175481565b3480156106ac57600080fd5b506106ed6106bb366004613190565b6022602052600090815260409020805460018201546002830154600384015460059094015492939192909160ff169085565b6040805195865260208601949094529284019190915215156060830152608082015260a00161042d565b34801561072357600080fd5b50610409610732366004613280565b61102a565b34801561074357600080fd5b506104c360185481565b34801561075957600080fd5b5061078f6107683660046132a2565b60216020526000908152604090208054600182015460028301546004909301549192909184565b60408051948552602085019390935291830152606082015260800161042d565b3480156107bb57600080fd5b50601154610456906301000000900460ff1681565b3480156107dc57600080fd5b506104c36107eb3660046132a2565b61107e565b3480156107fc57600080fd5b50610409611099565b34801561081157600080fd5b506104c3600e5481565b34801561082757600080fd5b506104566110cd565b34801561083c57600080fd5b5061040961084b3660046132cf565b61110b565b34801561085c57600080fd5b5060075461049a906001600160a01b031681565b34801561087c57600080fd5b506104c360165481565b34801561089257600080fd5b50610409611160565b3480156108a757600080fd5b506005546001600160a01b031661049a565b3480156108c557600080fd5b506104c360195481565b3480156108db57600080fd5b506104096108ea366004613304565b61120c565b3480156108fb57600080fd5b5061040961090a366004613190565b611254565b34801561091b57600080fd5b506104206112f8565b34801561093057600080fd5b5061040961093f3660046132cf565b611307565b34801561095057600080fd5b5061045661095f366004613213565b6113e3565b34801561097057600080fd5b5061045661097f366004613213565b61147c565b34801561099057600080fd5b506104c3601b5481565b3480156109a657600080fd5b506104c36109b53660046132a2565b611489565b3480156109c657600080fd5b506104566109d53660046132a2565b602080526000908152604090205460ff1681565b3480156109f557600080fd5b506011546104569062010000900460ff1681565b348015610a1557600080fd5b506104096115f1565b348015610a2a57600080fd5b50610409610a393660046132a2565b61165f565b348015610a4a57600080fd5b50610409610a593660046132cf565b6116e6565b348015610a6a57600080fd5b5060085461049a906001600160a01b031681565b348015610a8a57600080fd5b50610a9e610a99366004613213565b61176f565b60405161042d929190613363565b348015610ab857600080fd5b50610409610ac7366004613391565b611838565b348015610ad857600080fd5b506104c3600b5481565b348015610aee57600080fd5b506013546104569060ff1681565b348015610b0857600080fd5b50610409610b17366004613304565b61189d565b348015610b2857600080fd5b50610456610b37366004613190565b6118da565b348015610b4857600080fd5b5060095461049a906001600160a01b031681565b348015610b6857600080fd5b506104c360155481565b348015610b7e57600080fd5b506104c3610b8d3660046133bd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610bc457600080fd5b50610456610bd33660046132a2565b601f6020526000908152604090205460ff1681565b348015610bf457600080fd5b506104c3600c5481565b348015610c0a57600080fd5b50610456611a31565b348015610c1f57600080fd5b506104c3600f5481565b348015610c3557600080fd5b50610409610c443660046132a2565b611a6e565b348015610c5557600080fd5b506104c3600d5481565b348015610c6b57600080fd5b506104c3601d5481565b348015610c8157600080fd5b50600a5461049a906001600160a01b031681565b6005546001600160a01b03163314610cc85760405162461bcd60e51b8152600401610cbf906133f6565b60405180910390fd5b670de0b6b3a76400006103e8610cdd60025490565b610ce8906001613441565b610cf29190613460565b610cfc9190613460565b811015610d5d5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610cbf565b610d6f81670de0b6b3a7640000613441565b600b5550565b606060038054610d8490613482565b80601f0160208091040260200160405190810160405280929190818152602001828054610db090613482565b8015610dfd5780601f10610dd257610100808354040283529160200191610dfd565b820191906000526020600020905b815481529060010190602001808311610de057829003601f168201915b5050505050905090565b6000610e14338484611b09565b5060015b92915050565b6005546001600160a01b03163314610e485760405162461bcd60e51b8152600401610cbf906133f6565b670de0b6b3a76400006103e8610e5d60025490565b610e68906005613441565b610e729190613460565b610e7c9190613460565b811015610ed75760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610cbf565b610ee981670de0b6b3a7640000613441565b600d5550565b6000610efc848484611c2d565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f815760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610cbf565b610f8e8533858403611b09565b506001949350505050565b610fa2336124f7565b610fad33600061278c565b565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e14918590610fe69086906134bd565b611b09565b6005546001600160a01b031633146110155760405162461bcd60e51b8152600401610cbf906133f6565b60009182526022602052604090912060050155565b6005546001600160a01b031633146110545760405162461bcd60e51b8152600401610cbf906133f6565b6016829055601781905561106881836134bd565b60158190556032101561107a57600080fd5b5050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146110c35760405162461bcd60e51b8152600401610cbf906133f6565b610fad60006129b7565b6005546000906001600160a01b031633146110fa5760405162461bcd60e51b8152600401610cbf906133f6565b506011805461ff0019169055600190565b6005546001600160a01b031633146111355760405162461bcd60e51b8152600401610cbf906133f6565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461118a5760405162461bcd60e51b8152600401610cbf906133f6565b60115462010000900460ff16156111d45760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b6044820152606401610cbf565b601180544360145563ffff000019166301010000178155600e546000908152602260205260409020429055805460ff19166001179055565b6005546001600160a01b031633146112365760405162461bcd60e51b8152600401610cbf906133f6565b6011805491151563010000000263ff00000019909216919091179055565b6007546001600160a01b031633146112c35760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c79206d61726b6574696e672077616c6c65742063616e2063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610cbf565b806112cb5750475b604051339082156108fc029083906000818181858888f1935050505015801561107a573d6000803e3d6000fd5b606060048054610d8490613482565b6005546001600160a01b031633146113315760405162461bcd60e51b8152600401610cbf906133f6565b7f000000000000000000000000f89918ab7bef698602f6e38cf24a6e33c4e6b6096001600160a01b0316826001600160a01b031614156113d95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cbf565b61107a8282612a09565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156114655760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cbf565b6114723385858403611b09565b5060019392505050565b6000610e14338484611c2d565b60115460009060ff1661149e57506000919050565b6001600160a01b03821660009081526021602052604081208054909190819081906114ca9060016134bd565b90505b600e548110156115e85760008181526003850160209081526040918290208251808401909352805460ff161515808452600190910154918301919091526115d5576000828152602260205260409020600381015460ff1661152f5750506115e8565b6000838760040154101561155c575060048601546000908152600387016020526040902060010154611563565b5060208201515b600582015460028301546115779083613441565b6115819190613460565b955083876004015410156115c6576000876002015483600101546115a591906134d5565b9050866115b28183612a5c565b9750836002015488106115c3578097505b50505b6115d086866134bd565b945050505b50806115e0816134ec565b9150506114cd565b50949350505050565b6005546001600160a01b031633146116555760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610cbf565b610fad6001612b72565b6005546001600160a01b031633146116895760405162461bcd60e51b8152600401610cbf906133f6565b6007546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117105760405162461bcd60e51b8152600401610cbf906133f6565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60408051808201909152600080825260208201526001600160a01b0383166000908152602160209081526040808320858452600381018352818420602284529382902082518084018452855460ff161515815260019095015485850152600401805483518186028101860190945280845260609592949293919283919083018282801561182557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611807575b5050505050905092509250509250929050565b6005546001600160a01b031633146118625760405162461bcd60e51b8152600401610cbf906133f6565b6019839055601a829055601b8190558061187c83856134bd565b61188691906134bd565b60188190556032101561189857600080fd5b505050565b6005546001600160a01b031633146118c75760405162461bcd60e51b8152600401610cbf906133f6565b6011805460ff1916911515919091179055565b6005546000906001600160a01b031633146119075760405162461bcd60e51b8152600401610cbf906133f6565b620186a061191460025490565b61191f906001613441565b6119299190613460565b8210156119965760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cbf565b6103e86119a260025490565b6119ad906005613441565b6119b79190613460565b821115611a235760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610cbf565b50600c81905560015b919050565b6005546000906001600160a01b03163314611a5e5760405162461bcd60e51b8152600401610cbf906133f6565b506013805460ff19169055600190565b6005546001600160a01b03163314611a985760405162461bcd60e51b8152600401610cbf906133f6565b6001600160a01b038116611afd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cbf565b611b06816129b7565b50565b6001600160a01b038316611b6b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cbf565b6001600160a01b038216611bcc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cbf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c535760405162461bcd60e51b8152600401610cbf90613507565b6001600160a01b038216611c795760405162461bcd60e51b8152600401610cbf9061354c565b80611c8a5761189883836000612d00565b601154610100900460ff161561211f576005546001600160a01b03848116911614801590611cc657506005546001600160a01b03838116911614155b8015611cda57506001600160a01b03821615155b8015611cf157506001600160a01b03821661dead14155b8015611d075750600654600160a01b900460ff16155b1561211f5760115462010000900460ff16611da0576001600160a01b0383166000908152601e602052604090205460ff1680611d5b57506001600160a01b0382166000908152601e602052604090205460ff165b611da05760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cbf565b60135460ff1615611ee7576005546001600160a01b03838116911614801590611dfb57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611e3957507f000000000000000000000000f89918ab7bef698602f6e38cf24a6e33c4e6b6096001600160a01b0316826001600160a01b031614155b15611ee757326000908152601260205260409020544311611ed45760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610cbf565b3260009081526012602052604090204390555b6001600160a01b038316600090815260208052604090205460ff168015611f2757506001600160a01b0382166000908152601f602052604090205460ff16155b15611ff557600b54811115611f965760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610cbf565b600d54611fa28361107e565b611fac90836134bd565b1115611ff05760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cbf565b61211f565b6001600160a01b038216600090815260208052604090205460ff16801561203557506001600160a01b0383166000908152601f602052604090205460ff16155b156120a557600b54811115611ff05760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610cbf565b6001600160a01b0382166000908152601f602052604090205460ff1661211f57600d546120d18361107e565b6120db90836134bd565b111561211f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cbf565b600061212a3061107e565b600c549091508110801590819061214a57506011546301000000900460ff165b80156121605750600654600160a01b900460ff16155b801561218457506001600160a01b038516600090815260208052604090205460ff16155b80156121a957506001600160a01b0385166000908152601e602052604090205460ff16155b80156121ce57506001600160a01b0384166000908152601e602052604090205460ff16155b156121fc576006805460ff60a01b1916600160a01b1790556121ee612e55565b6006805460ff60a01b191690555b6006546001600160a01b0386166000908152601e602052604090205460ff600160a01b90920482161591168061224a57506001600160a01b0385166000908152601e602052604090205460ff165b15612253575060005b60008115612404576001600160a01b038616600090815260208052604090205460ff16801561228457506000601854115b1561233a576122a960646122a360185488612f7390919063ffffffff16565b90612f86565b9050601854601954826122bc9190613441565b6122c69190613460565b601c60008282546122d791906134bd565b9091555050601854601a546122ec9083613441565b6122f69190613460565b601d600082825461230791906134bd565b925050819055506123358761dead601854601b54856123269190613441565b6123309190613460565b612d00565b6123e6565b6001600160a01b038716600090815260208052604090205460ff16801561236357506000601554115b156123e65761238260646122a360155488612f7390919063ffffffff16565b9050601554601654826123959190613441565b61239f9190613460565b601c60008282546123b091906134bd565b90915550506015546017546123c59083613441565b6123cf9190613460565b601d60008282546123e091906134bd565b90915550505b80156123f7576123f7873083612d00565b61240181866134d5565b94505b61240f878787612d00565b6001600160a01b03871630148061242e57506001600160a01b03861630145b8061244a5750856001600160a01b0316876001600160a01b0316145b156124585750505050505050565b6001600160a01b038616600090815260208052604090205460ff161561249157612481876124f7565b61248c87600161278c565b6124e4565b6001600160a01b038716600090815260208052604090205460ff16156124c5576124ba866124f7565b61248c86600061278c565b6124ce876124f7565b6124d987600161278c565b6124e486600061278c565b6124ee6000612b72565b50505050505050565b60115460ff166125045750565b6011805460ff191690556125186000612b72565b6001600160a01b0381166000908152602160205260409020600e5461253f906001906134d5565b81541080159061254f5750805415155b156125655750506011805460ff19166001179055565b805460009081906125779060016134bd565b90505b600e548110156126ef5760008181526003840160209081526040918290208251808401909352805460ff161515808452600190910154918301919091526126db576000828152602260205260409020600381015460ff166125dc5750506126ef565b60058101546125ec5750506126dd565b60008386600401541015612619575060048501546000908152600386016020526040902060010154612620565b5060208201515b600082600501548360020154836126379190613441565b6126419190613460565b905084876004015410156126cb5760008760020154846001015461266591906134d5565b9050816126728183612a5c565b925084600201548310612683578092505b61268d81846134d5565b856002015411156126c0576126a281846134d5565b8560020160008282546126b591906134d5565b909155506126c89050565b600060028601555b50505b6126d581876134bd565b95505050505b505b806126e7816134ec565b91505061257a565b5080156127695747811061271757606461270a476019613441565b6127149190613460565b90505b6040516001600160a01b038416908290600081818185875af1925050503d8060008114612760576040519150601f19603f3d011682016040523d82523d6000602084013e612765565b606091505b5050505b6001600e5461277891906134d5565b90915550506011805460ff19166001179055565b60115460ff1661279a575050565b6001600160a01b0382166000908152602160209081526040808320600e54845260229092528220909183156128a957600e54600090815260038401602052604090205460ff166128a457600e80546000908152600385016020526040808220805460ff1916600190811790915592548252902001548061282f5750600483015460009081526003840160205260409020600101545b6004830180546001810182556000918252602082200180546001600160a01b0319166001600160a01b0389161790556005840180548392906128729084906134d5565b9091555061288190508661107e565b600e80546000908152600387016020526040902060010191909155546004850155505b6129b0565b600e54600090815260038401602052604090205460ff166129b05760008360020154426128d691906134d5565b600e5460009081526003860160205260409020600101549250905081612912576004840154600090815260038501602052604090206001015491505b8183600501600082825461292691906134d5565b9091555061293e90506129388761107e565b82612a5c565b600e546000908152600386016020526040812060010182905560058501805492945084929091906129709084906134bd565b9091555050600e546004850155600284015461298d574260028501555b60018401546129a8576001600e546129a591906134d5565b84555b504260018401555b5050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000624f1a008210612a86576064612a758460c8613441565b612a7f9190613460565b9050610e18565b623b53808210612a9d576064612a758460be613441565b62278d008210612ab4576064612a758460b4613441565b621a5e008210612acb576064612a758460aa613441565b620fd2008210612ae2576064612a758460a0613441565b62093a808210612af9576064612a75846096613441565b620546008210612b10576064612a7584608c613441565b6203f4808210612b27576064612a75846082613441565b6202a3008210612b3e576064612a75846078613441565b620151808210612b55576064612a7584606e613441565b61a8c08210612b6b576064612a75846069613441565b5090919050565b60115460ff16612b7f5750565b600e5460009081526022602052604090206010548154612b9f91906134bd565b42101580612baa5750815b1561107a574260018083019190915560038201805460ff191682179055600f80546002840155600090819055600e5490916022918391612bea91906134bd565b8152602081019190915260400160009081206005808501549082015542815591505b6004830154811015612cd7576000836004018281548110612c2f57612c2f61358f565b60009182526020808320909101546001600160a01b031680835260219091526040822042600282015590925090612c658361107e565b905080826003016000600e546001612c7d91906134bd565b81526020019081526020016000206001018190555080856005016000828254612ca691906134bd565b9091555050600e54612cb99060016134bd565b82600401819055505050508080612ccf906134ec565b915050612c0c565b50612ce660048301600061315e565b600e8054906000612cf6836134ec565b9190505550505050565b6001600160a01b038316612d265760405162461bcd60e51b8152600401610cbf90613507565b6001600160a01b038216612d4c5760405162461bcd60e51b8152600401610cbf9061354c565b6001600160a01b03831660009081526020819052604090205481811015612dc45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cbf565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612dfb9084906134bd565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e4791815260200190565b60405180910390a350505050565b6000612e603061107e565b90506000601d54601c54612e7491906134bd565b90506000821580612e83575081155b15612e8d57505050565b600c54612e9b906014613441565b831115612eb357600c54612eb0906014613441565b92505b8247612ebe82612f92565b6000612eca4783613152565b90506000612ee7866122a3601c5485612f7390919063ffffffff16565b6000601c819055601d8190556007546040519293506001600160a01b031691839181818185875af1925050503d8060008114612f3f576040519150601f19603f3d011682016040523d82523d6000602084013e612f44565b606091505b50909550612f54905081836134d5565b600f6000828254612f6591906134bd565b909155505050505050505050565b6000612f7f8284613441565b9392505050565b6000612f7f8284613460565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fc757612fc761358f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613045573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306991906135a5565b8160018151811061307c5761307c61358f565b60200260200101906001600160a01b031690816001600160a01b0316815250506130c7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b09565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061311c9085906000908690309042906004016135c2565b600060405180830381600087803b15801561313657600080fd5b505af115801561314a573d6000803e3d6000fd5b505050505050565b6000612f7f82846134d5565b5080546000825590600052602060002090810190611b0691905b8082111561318c5760008155600101613178565b5090565b6000602082840312156131a257600080fd5b5035919050565b600060208083528351808285015260005b818110156131d6578581018301518582016040015282016131ba565b818111156131e8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611b0657600080fd5b6000806040838503121561322657600080fd5b8235613231816131fe565b946020939093013593505050565b60008060006060848603121561325457600080fd5b833561325f816131fe565b9250602084013561326f816131fe565b929592945050506040919091013590565b6000806040838503121561329357600080fd5b50508035926020909101359150565b6000602082840312156132b457600080fd5b8135612f7f816131fe565b80358015158114611a2c57600080fd5b600080604083850312156132e257600080fd5b82356132ed816131fe565b91506132fb602084016132bf565b90509250929050565b60006020828403121561331657600080fd5b612f7f826132bf565b600081518084526020808501945080840160005b838110156133585781516001600160a01b031687529582019590820190600101613333565b509495945050505050565b82511515815260208301516020820152606060408201526000613389606083018461331f565b949350505050565b6000806000606084860312156133a657600080fd5b505081359360208301359350604090920135919050565b600080604083850312156133d057600080fd5b82356133db816131fe565b915060208301356133eb816131fe565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561345b5761345b61342b565b500290565b60008261347d57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061349657607f821691505b602082108114156134b757634e487b7160e01b600052602260045260246000fd5b50919050565b600082198211156134d0576134d061342b565b500190565b6000828210156134e7576134e761342b565b500390565b60006000198214156135005761350061342b565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156135b757600080fd5b8151612f7f816131fe565b85815284602082015260a0604082015260006135e160a083018661331f565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122053c08ee1f8f0e13696aab902605c863868d3463eac9944755d45e32237b85c7f64736f6c634300080a0033
Deployed Bytecode Sourcemap
15072:24445:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21256:265;;;;;;;;;;-1:-1:-1;21256:265:0;;;;;:::i;:::-;;:::i;:::-;;2769:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3683:169;;;;;;;;;;-1:-1:-1;3683:169:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;3683:169:0;1257:187:1;15146:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1640:32:1;;;1622:51;;1610:2;1595:18;15146:51:0;1449:230:1;3090:108:0;;;;;;;;;;-1:-1:-1;3178:12:0;;3090:108;;;1830:25:1;;;1818:2;1803:18;3090:108:0;1684:177:1;21529:250:0;;;;;;;;;;-1:-1:-1;21529:250:0;;;;;:::i;:::-;;:::i;15799:34::-;;;;;;;;;;-1:-1:-1;15799:34:0;;;;;;;;16428:33;;;;;;;;;;;;;;;;3860:492;;;;;;;;;;-1:-1:-1;3860:492:0;;;;;:::i;:::-;;:::i;15249:53::-;;;;;;;;;;;;15295:6;15249:53;;2989:93;;;;;;;;;;-1:-1:-1;2989:93:0;;3072:2;2677:36:1;;2665:2;2650:18;2989:93:0;2535:184:1;32403:116:0;;;;;;;;;;;;;:::i;15309:71::-;;;;;;;;;;-1:-1:-1;15309:71:0;;;;-1:-1:-1;;;;;15309:71:0;;;4360:215;;;;;;;;;;-1:-1:-1;4360:215:0;;;;;:::i;:::-;;:::i;24336:192::-;;;;;;;;;;-1:-1:-1;24336:192:0;;;;;:::i;:::-;;:::i;15204:38::-;;;;;;;;;;;;;;;15842:33;;;;;;;;;;-1:-1:-1;15842:33:0;;;;;;;;;;;16354:32;;;;;;;;;;;;;;;;23776:126;;;;;;;;;;-1:-1:-1;23776:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23866:28:0;23842:4;23866:28;;;:19;:28;;;;;;;;;23776:126;16241:31;;;;;;;;;;;;;;;;17275:51;;;;;;;;;;-1:-1:-1;17275:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3482:25:1;;;3538:2;3523:18;;3516:34;;;;3566:18;;;3559:34;;;;3636:14;3629:22;3624:2;3609:18;;3602:50;3683:3;3668:19;;3661:35;3469:3;3454:19;17275:51:0;3229:473:1;22152:306:0;;;;;;;;;;-1:-1:-1;22152:306:0;;;;;:::i;:::-;;:::i;16281:28::-;;;;;;;;;;;;;;;;17219:49;;;;;;;;;;-1:-1:-1;17219:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3938:25:1;;;3994:2;3979:18;;3972:34;;;;4022:18;;;4015:34;4080:2;4065:18;;4058:34;3925:3;3910:19;17219:49:0;3707:391:1;15922:31:0;;;;;;;;;;-1:-1:-1;15922:31:0;;;;;;;;;;;3206:127;;;;;;;;;;-1:-1:-1;3206:127:0;;;;;:::i;:::-;;:::i;891:103::-;;;;;;;;;;;;;:::i;15681:24::-;;;;;;;;;;;;;;;;20364:121;;;;;;;;;;;;;:::i;21787:161::-;;;;;;;;;;-1:-1:-1;21787:161:0;;;;;:::i;:::-;;:::i;15419:30::-;;;;;;;;;;-1:-1:-1;15419:30:0;;;;-1:-1:-1;;;;;15419:30:0;;;16204;;;;;;;;;;;;;;;;20012:300;;;;;;;;;;;;;:::i;668:87::-;;;;;;;;;;-1:-1:-1;741:6:0;;-1:-1:-1;;;;;741:6:0;668:87;;16316:31;;;;;;;;;;;;;;;;22044:100;;;;;;;;;;-1:-1:-1;22044:100:0;;;;;:::i;:::-;;:::i;38180:287::-;;;;;;;;;;-1:-1:-1;38180:287:0;;;;;:::i;:::-;;:::i;2877:104::-;;;;;;;;;;;;;:::i;23052:304::-;;;;;;;;;;-1:-1:-1;23052:304:0;;;;;:::i;:::-;;:::i;4583:413::-;;;;;;;;;;-1:-1:-1;4583:413:0;;;;;:::i;:::-;;:::i;3341:175::-;;;;;;;;;;-1:-1:-1;3341:175:0;;;;;:::i;:::-;;:::i;16393:26::-;;;;;;;;;;;;;;;;30960:1435;;;;;;;;;;-1:-1:-1;30960:1435:0;;;;;:::i;:::-;;:::i;16636:57::-;;;;;;;;;;-1:-1:-1;16636:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15882:33;;;;;;;;;;-1:-1:-1;15882:33:0;;;;;;;;;;;24167:161;;;;;;;;;;;;;:::i;23560:208::-;;;;;;;;;;-1:-1:-1;23560:208:0;;;;;:::i;:::-;;:::i;22862:182::-;;;;;;;;;;-1:-1:-1;22862:182:0;;;;;:::i;:::-;;:::i;15456:32::-;;;;;;;;;;-1:-1:-1;15456:32:0;;;;-1:-1:-1;;;;;15456:32:0;;;23910:249;;;;;;;;;;-1:-1:-1;23910:249:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;22466:388::-;;;;;;;;;;-1:-1:-1;22466:388:0;;;;;:::i;:::-;;:::i;15572:29::-;;;;;;;;;;;;;;;;16088:39;;;;;;;;;;-1:-1:-1;16088:39:0;;;;;;;;24536:108;;;;;;;;;;-1:-1:-1;24536:108:0;;;;;:::i;:::-;;:::i;20751:497::-;;;;;;;;;;-1:-1:-1;20751:497:0;;;;;:::i;:::-;;:::i;15495:30::-;;;;;;;;;;-1:-1:-1;15495:30:0;;;;-1:-1:-1;;;;;15495:30:0;;;16170:27;;;;;;;;;;;;;;;;3524:151;;;;;;;;;;-1:-1:-1;3524:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3640:18:0;;;3613:7;3640:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3524:151;16570:57;;;;;;;;;;-1:-1:-1;16570:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15608:33;;;;;;;;;;;;;;;;20546:135;;;;;;;;;;;;;:::i;15712:36::-;;;;;;;;;;;;;;;;1002:201;;;;;;;;;;-1:-1:-1;1002:201:0;;;;;:::i;:::-;;:::i;15648:24::-;;;;;;;;;;;;;;;;16468:34;;;;;;;;;;;;;;;;15532:31;;;;;;;;;;-1:-1:-1;15532:31:0;;;;-1:-1:-1;;;;;15532:31:0;;;21256:265;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;;;;;;;;;21395:4:::1;21387;21366:13;3178:12:::0;;;3090:108;21366:13:::1;:17;::::0;21382:1:::1;21366:17;:::i;:::-;21365:26;;;;:::i;:::-;21364:35;;;;:::i;:::-;21354:6;:45;;21332:136;;;::::0;-1:-1:-1;;;21332:136:0;;7520:2:1;21332:136:0::1;::::0;::::1;7502:21:1::0;7559:2;7539:18;;;7532:30;7598:34;7578:18;;;7571:62;-1:-1:-1;;;7649:18:1;;;7642:39;7698:19;;21332:136:0::1;7318:405:1::0;21332:136:0::1;21496:17;:6:::0;21506::::1;21496:17;:::i;:::-;21479:14;:34:::0;-1:-1:-1;21256:265:0:o;2769:100::-;2823:13;2856:5;2849:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2769:100;:::o;3683:169::-;3766:4;3783:39;294:10;3806:7;3815:6;3783:8;:39::i;:::-;-1:-1:-1;3840:4:0;3683:169;;;;;:::o;21529:250::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;21663:4:::1;21655;21634:13;3178:12:::0;;;3090:108;21634:13:::1;:17;::::0;21650:1:::1;21634:17;:::i;:::-;21633:26;;;;:::i;:::-;21632:35;;;;:::i;:::-;21622:6;:45;;21600:131;;;::::0;-1:-1:-1;;;21600:131:0;;8315:2:1;21600:131:0::1;::::0;::::1;8297:21:1::0;8354:2;8334:18;;;8327:30;8393:34;8373:18;;;8366:62;-1:-1:-1;;;8444:18:1;;;8437:34;8488:19;;21600:131:0::1;8113:400:1::0;21600:131:0::1;21754:17;:6:::0;21764::::1;21754:17;:::i;:::-;21742:9;:29:::0;-1:-1:-1;21529:250:0:o;3860:492::-;4000:4;4017:36;4027:6;4035:9;4046:6;4017:9;:36::i;:::-;-1:-1:-1;;;;;4093:19:0;;4066:24;4093:19;;;:11;:19;;;;;;;;294:10;4093:33;;;;;;;;4145:26;;;;4137:79;;;;-1:-1:-1;;;4137:79:0;;8720:2:1;4137:79:0;;;8702:21:1;8759:2;8739:18;;;8732:30;8798:34;8778:18;;;8771:62;-1:-1:-1;;;8849:18:1;;;8842:38;8897:19;;4137:79:0;8518:404:1;4137:79:0;4252:57;4261:6;294:10;4302:6;4283:16;:25;4252:8;:57::i;:::-;-1:-1:-1;4340:4:0;;3860:492;-1:-1:-1;;;;3860:492:0:o;32403:116::-;32440:18;32447:10;32440:6;:18::i;:::-;32469:40;32491:10;32503:5;32469:21;:40::i;:::-;32403:116::o;4360:215::-;294:10;4448:4;4497:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4497:34:0;;;;;;;;;;4448:4;;4465:80;;4488:7;;4497:47;;4534:10;;4497:47;:::i;:::-;4465:8;:80::i;24336:192::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;24425:25:::1;24453:20:::0;;;:12:::1;:20;::::0;;;;;24484:26:::1;;:36:::0;24336:192::o;22152:306::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;22277:15:::1;:31:::0;;;22319:16:::1;:33:::0;;;22378:34:::1;22338:14:::0;22295:13;22378:34:::1;:::i;:::-;22363:12;:49:::0;;;22447:2:::1;-1:-1:-1::0;22431:18:0::1;22423:27;;;::::0;::::1;;22152:306:::0;;:::o;3206:127::-;-1:-1:-1;;;;;3307:18:0;3280:7;3307:18;;;;;;;;;;;;3206:127::o;891:103::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;956:30:::1;983:1;956:18;:30::i;20364:121::-:0;741:6;;20416:4;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;-1:-1:-1;20433:14:0::1;:22:::0;;-1:-1:-1;;20433:22:0::1;::::0;;:14:::1;20364:121:::0;:::o;21787:161::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21900:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;21900:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21787:161::o;20012:300::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;20076:13:::1;::::0;;;::::1;;;20075:14;20067:41;;;::::0;-1:-1:-1;;;20067:41:0;;9262:2:1;20067:41:0::1;::::0;::::1;9244:21:1::0;9301:2;9281:18;;;9274:30;-1:-1:-1;;;9320:18:1;;;9313:44;9374:18;;20067:41:0::1;9060:338:1::0;20067:41:0::1;20119:13;:20:::0;;20164:12:::1;20150:11;:26:::0;-1:-1:-1;;20187:18:0;;;;;20231:12:::1;::::0;-1:-1:-1;20218:26:0;;;:12:::1;:26;::::0;;;;20257:15:::1;20218:54:::0;;20283:21;;-1:-1:-1;;20283:21:0::1;-1:-1:-1::0;20283:21:0::1;::::0;;20012:300::o;22044:100::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;22115:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22115:21:0;;::::1;::::0;;;::::1;::::0;;22044:100::o;38180:287::-;38261:15;;-1:-1:-1;;;;;38261:15:0;38247:10;:29;38239:86;;;;-1:-1:-1;;;38239:86:0;;9605:2:1;38239:86:0;;;9587:21:1;9644:2;9624:18;;;9617:30;9683:34;9663:18;;;9656:62;-1:-1:-1;;;9734:18:1;;;9727:42;9786:19;;38239:86:0;9403:408:1;38239:86:0;38340:12;38336:76;;-1:-1:-1;38379:21:0;38336:76;38422:37;;38430:10;;38422:37;;;;;38451:7;;38422:37;;;;38451:7;38430:10;38422:37;;;;;;;;;;;;;;;;;;;2877:104;2933:13;2966:7;2959:14;;;;;:::i;23052:304::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;23196:13:::1;-1:-1:-1::0;;;;;23188:21:0::1;:4;-1:-1:-1::0;;;;;23188:21:0::1;;;23166:128;;;::::0;-1:-1:-1;;;23166:128:0;;10018:2:1;23166:128:0::1;::::0;::::1;10000:21:1::0;10057:2;10037:18;;;10030:30;10096:34;10076:18;;;10069:62;10167:27;10147:18;;;10140:55;10212:19;;23166:128:0::1;9816:421:1::0;23166:128:0::1;23307:41;23336:4;23342:5;23307:28;:41::i;4583:413::-:0;294:10;4676:4;4720:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4720:34:0;;;;;;;;;;4773:35;;;;4765:85;;;;-1:-1:-1;;;4765:85:0;;10444:2:1;4765:85:0;;;10426:21:1;10483:2;10463:18;;;10456:30;10522:34;10502:18;;;10495:62;-1:-1:-1;;;10573:18:1;;;10566:35;10618:19;;4765:85:0;10242:401:1;4765:85:0;4886:67;294:10;4909:7;4937:15;4918:16;:34;4886:8;:67::i;:::-;-1:-1:-1;4984:4:0;;4583:413;-1:-1:-1;;;4583:413:0:o;3341:175::-;3427:4;3444:42;294:10;3468:9;3479:6;3444:9;:42::i;30960:1435::-;31042:14;;31021:4;;31042:14;;31037:30;;-1:-1:-1;31066:1:0;;30960:1435;-1:-1:-1;30960:1435:0:o;31037:30::-;-1:-1:-1;;;;;31105:17:0;;31078:24;31105:17;;;:10;:17;;;;;31205:19;;31105:17;;31078:24;;;;;31205:23;;31227:1;31205:23;:::i;:::-;31193:35;;31188:1171;31234:12;;31230:1;:16;31188:1171;;;31268:27;31298:17;;;:14;;;:17;;;;;;;;;31268:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31330:1018;;31368:25;31396:15;;;:12;:15;;;;;31435:19;;;;;;31430:73;;31478:5;;;;31430:73;31521:20;31591:1;31564:4;:24;;;:28;31560:211;;;-1:-1:-1;31646:24:0;;;;31631:40;;;;:14;;;:40;;;;;:44;;;31560:211;;;-1:-1:-1;31737:14:0;;;;31560:211;31841:26;;;;31814:23;;;;31799:38;;:12;:38;:::i;:::-;31798:69;;;;:::i;:::-;31789:78;;31917:1;31890:4;:24;;;:28;31886:407;;;32005:16;32040:4;:26;;;32024:5;:13;;;:42;;;;:::i;:::-;32005:61;-1:-1:-1;32111:6:0;32149:42;32111:6;32005:61;32149:24;:42::i;:::-;32140:51;;32228:5;:23;;;32218:6;:33;32214:59;;32262:11;32253:20;;32214:59;31919:374;;31886:407;32311:21;32326:6;32311:21;;:::i;:::-;;;31349:999;;31330:1018;-1:-1:-1;31248:3:0;;;;:::i;:::-;;;;31188:1171;;;-1:-1:-1;32376:11:0;30960:1435;-1:-1:-1;;;;30960:1435:0:o;24167:161::-;741:6;;-1:-1:-1;;;;;741:6:0;24225:10;:21;24217:67;;;;-1:-1:-1;;;24217:67:0;;11120:2:1;24217:67:0;;;11102:21:1;11159:2;11139:18;;;11132:30;11198:34;11178:18;;;11171:62;-1:-1:-1;;;11249:18:1;;;11242:31;11290:19;;24217:67:0;10918:397:1;24217:67:0;24295:25;24315:4;24295:19;:25::i;23560:208::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;23697:15:::1;::::0;23654:59:::1;::::0;-1:-1:-1;;;;;23697:15:0;;::::1;::::0;23654:59;::::1;::::0;::::1;::::0;23697:15:::1;::::0;23654:59:::1;23724:15;:36:::0;;-1:-1:-1;;;;;;23724:36:0::1;-1:-1:-1::0;;;;;23724:36:0;;;::::1;::::0;;;::::1;::::0;;23560:208::o;22862:182::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22947:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22947:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23002:34;;1397:41:1;;;23002:34:0::1;::::0;1370:18:1;23002:34:0::1;;;;;;;22862:182:::0;;:::o;23910:249::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;24060:18:0;;24033:24;24060:18;;;:10;:18;;;;;;;;24097:22;;;:14;;;:22;;;;;24120:12;:20;;;;;;24089:62;;;;;;;;;;;;;;;;;;;;;;;;24120:30;;24089:62;;;;;;;;;;;;;;;;;24005:16;;24060:18;;24089:62;;24120:30;;;;24089:62;;;24120:30;24089:62;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24089:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23910:249;;;;;:::o;22466:388::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;22619:16:::1;:32:::0;;;22662:17:::1;:34:::0;;;22707:11:::1;:22:::0;;;22721:8;22756:36:::1;22682:14:::0;22638:13;22756:36:::1;:::i;:::-;:50;;;;:::i;:::-;22740:13;:66:::0;;;22842:2:::1;-1:-1:-1::0;22825:19:0::1;22817:28;;;::::0;::::1;;22466:388:::0;;;:::o;24536:108::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;24611:14:::1;:25:::0;;-1:-1:-1;;24611:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24536:108::o;20751:497::-;741:6;;20859:4;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;20938:6:::1;20917:13;3178:12:::0;;;3090:108;20917:13:::1;:17;::::0;20933:1:::1;20917:17;:::i;:::-;20916:28;;;;:::i;:::-;20903:9;:41;;20881:144;;;::::0;-1:-1:-1;;;20881:144:0;;11522:2:1;20881:144:0::1;::::0;::::1;11504:21:1::0;11561:2;11541:18;;;11534:30;11600:34;11580:18;;;11573:62;-1:-1:-1;;;11651:18:1;;;11644:51;11712:19;;20881:144:0::1;11320:417:1::0;20881:144:0::1;21093:4;21072:13;3178:12:::0;;;3090:108;21072:13:::1;:17;::::0;21088:1:::1;21072:17;:::i;:::-;21071:26;;;;:::i;:::-;21058:9;:39;;21036:141;;;::::0;-1:-1:-1;;;21036:141:0;;11944:2:1;21036:141:0::1;::::0;::::1;11926:21:1::0;11983:2;11963:18;;;11956:30;12022:34;12002:18;;;11995:62;-1:-1:-1;;;12073:18:1;;;12066:50;12133:19;;21036:141:0::1;11742:416:1::0;21036:141:0::1;-1:-1:-1::0;21188:18:0::1;:30:::0;;;21236:4:::1;874:1;20751:497:::0;;;:::o;20546:135::-;741:6;;20606:4;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;-1:-1:-1;20623:20:0::1;:28:::0;;-1:-1:-1;;20623:28:0::1;::::0;;;20546:135;:::o;1002:201::-;741:6;;-1:-1:-1;;;;;741:6:0;294:10;803:23;795:68;;;;-1:-1:-1;;;795:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1091:22:0;::::1;1083:73;;;::::0;-1:-1:-1;;;1083:73:0;;12365:2:1;1083:73:0::1;::::0;::::1;12347:21:1::0;12404:2;12384:18;;;12377:30;12443:34;12423:18;;;12416:62;-1:-1:-1;;;12494:18:1;;;12487:36;12540:19;;1083:73:0::1;12163:402:1::0;1083:73:0::1;1167:28;1186:8;1167:18;:28::i;:::-;1002:201:::0;:::o;6751:380::-;-1:-1:-1;;;;;6887:19:0;;6879:68;;;;-1:-1:-1;;;6879:68:0;;12772:2:1;6879:68:0;;;12754:21:1;12811:2;12791:18;;;12784:30;12850:34;12830:18;;;12823:62;-1:-1:-1;;;12901:18:1;;;12894:34;12945:19;;6879:68:0;12570:400:1;6879:68:0;-1:-1:-1;;;;;6966:21:0;;6958:68;;;;-1:-1:-1;;;6958:68:0;;13177:2:1;6958:68:0;;;13159:21:1;13216:2;13196:18;;;13189:30;13255:34;13235:18;;;13228:62;-1:-1:-1;;;13306:18:1;;;13299:32;13348:19;;6958:68:0;12975:398:1;6958:68:0;-1:-1:-1;;;;;7039:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7091:32;;1830:25:1;;;7091:32:0;;1803:18:1;7091:32:0;;;;;;;6751:380;;;:::o;32527:5046::-;-1:-1:-1;;;;;32659:18:0;;32651:68;;;;-1:-1:-1;;;32651:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32738:16:0;;32730:64;;;;-1:-1:-1;;;32730:64:0;;;;;;;:::i;:::-;32811:11;32807:93;;32839:28;32855:4;32861:2;32865:1;32839:15;:28::i;32807:93::-;32916:14;;;;;;;32912:2445;;;741:6;;-1:-1:-1;;;;;32969:15:0;;;741:6;;32969:15;;;;:49;;-1:-1:-1;741:6:0;;-1:-1:-1;;;;;33005:13:0;;;741:6;;33005:13;;32969:49;:86;;;;-1:-1:-1;;;;;;33039:16:0;;;;32969:86;:128;;;;-1:-1:-1;;;;;;33076:21:0;;33090:6;33076:21;;32969:128;:158;;;;-1:-1:-1;33119:8:0;;-1:-1:-1;;;33119:8:0;;;;33118:9;32969:158;32947:2399;;;33167:13;;;;;;;33162:223;;-1:-1:-1;;;;;33239:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;33268:23:0;;;;;;:19;:23;;;;;;;;33239:52;33205:160;;;;-1:-1:-1;;;33205:160:0;;14390:2:1;33205:160:0;;;14372:21:1;14429:2;14409:18;;;14402:30;-1:-1:-1;;;14448:18:1;;;14441:52;14510:18;;33205:160:0;14188:346:1;33205:160:0;33541:20;;;;33537:641;;;741:6;;-1:-1:-1;;;;;33616:13:0;;;741:6;;33616:13;;;;:72;;;33672:15;-1:-1:-1;;;;;33658:30:0;:2;-1:-1:-1;;;;;33658:30:0;;;33616:72;:129;;;;;33731:13;-1:-1:-1;;;;;33717:28:0;:2;-1:-1:-1;;;;;33717:28:0;;;33616:129;33586:573;;;33863:9;33834:39;;;;:28;:39;;;;;;33909:12;-1:-1:-1;33796:258:0;;;;-1:-1:-1;;;33796:258:0;;14741:2:1;33796:258:0;;;14723:21:1;14780:2;14760:18;;;14753:30;14819:34;14799:18;;;14792:62;14890:34;14870:18;;;14863:62;-1:-1:-1;;;14941:19:1;;;14934:40;14991:19;;33796:258:0;14539:477:1;33796:258:0;34110:9;34081:39;;;;:28;:39;;;;;34123:12;34081:54;;33586:573;-1:-1:-1;;;;;34252:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;34309:29:0;;;;;;:25;:29;;;;;;;;34308:30;34252:86;34226:1105;;;34425:14;;34415:6;:24;;34381:157;;;;-1:-1:-1;;;34381:157:0;;15223:2:1;34381:157:0;;;15205:21:1;15262:2;15242:18;;;15235:30;15301:34;15281:18;;;15274:62;-1:-1:-1;;;15352:18:1;;;15345:45;15407:19;;34381:157:0;15021:411:1;34381:157:0;34621:9;;34604:13;34614:2;34604:9;:13::i;:::-;34595:22;;:6;:22;:::i;:::-;:35;;34561:140;;;;-1:-1:-1;;;34561:140:0;;15639:2:1;34561:140:0;;;15621:21:1;15678:2;15658:18;;;15651:30;-1:-1:-1;;;15697:18:1;;;15690:49;15756:18;;34561:140:0;15437:343:1;34561:140:0;34226:1105;;;-1:-1:-1;;;;;34799:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;34854:31:0;;;;;;:25;:31;;;;;;;;34853:32;34799:86;34773:558;;;34972:14;;34962:6;:24;;34928:158;;;;-1:-1:-1;;;34928:158:0;;15987:2:1;34928:158:0;;;15969:21:1;16026:2;16006:18;;;15999:30;16065:34;16045:18;;;16038:62;-1:-1:-1;;;16116:18:1;;;16109:46;16172:19;;34928:158:0;15785:412:1;34773:558:0;-1:-1:-1;;;;;35117:29:0;;;;;;:25;:29;;;;;;;;35112:219;;35231:9;;35214:13;35224:2;35214:9;:13::i;:::-;35205:22;;:6;:22;:::i;:::-;:35;;35171:140;;;;-1:-1:-1;;;35171:140:0;;15639:2:1;35171:140:0;;;15621:21:1;15678:2;15658:18;;;15651:30;-1:-1:-1;;;15697:18:1;;;15690:49;15756:18;;35171:140:0;15437:343:1;35171:140:0;35369:28;35400:24;35418:4;35400:9;:24::i;:::-;35476:18;;35369:55;;-1:-1:-1;35452:42:0;;;;;;;35525:35;;-1:-1:-1;35549:11:0;;;;;;;35525:35;:61;;;;-1:-1:-1;35578:8:0;;-1:-1:-1;;;35578:8:0;;;;35577:9;35525:61;:110;;;;-1:-1:-1;;;;;;35604:31:0;;;;;;:25;:31;;;;;;;;35603:32;35525:110;:153;;;;-1:-1:-1;;;;;;35653:25:0;;;;;;:19;:25;;;;;;;;35652:26;35525:153;:194;;;;-1:-1:-1;;;;;;35696:23:0;;;;;;:19;:23;;;;;;;;35695:24;35525:194;35507:326;;;35746:8;:15;;-1:-1:-1;;;;35746:15:0;-1:-1:-1;;;35746:15:0;;;35778:10;:8;:10::i;:::-;35805:8;:16;;-1:-1:-1;;;;35805:16:0;;;35507:326;35861:8;;-1:-1:-1;;;;;35886:25:0;;35845:12;35886:25;;;:19;:25;;;;;;35861:8;-1:-1:-1;;;35861:8:0;;;;;35860:9;;35886:25;;:52;;-1:-1:-1;;;;;;35915:23:0;;;;;;:19;:23;;;;;;;;35886:52;35882:100;;;-1:-1:-1;35965:5:0;35882:100;35994:12;36035:7;36031:933;;;-1:-1:-1;;;;;36087:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;36136:1;36120:13;;:17;36087:50;36083:732;;;36165:34;36195:3;36165:25;36176:13;;36165:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;36158:41;;36268:13;;36248:16;;36241:4;:23;;;;:::i;:::-;36240:41;;;;:::i;:::-;36218:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;36352:13:0;;36331:17;;36324:24;;:4;:24;:::i;:::-;36323:42;;;;:::i;:::-;36300:19;;:65;;;;;;;:::i;:::-;;;;;;;;36384:72;36400:4;15295:6;36442:13;;36427:11;;36420:4;:18;;;;:::i;:::-;36419:36;;;;:::i;:::-;36384:15;:72::i;:::-;36083:732;;;-1:-1:-1;;;;;36525:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;36575:1;36560:12;;:16;36525:51;36521:294;;;36604:33;36633:3;36604:24;36615:12;;36604:6;:10;;:24;;;;:::i;:33::-;36597:40;;36705:12;;36686:15;;36679:4;:22;;;;:::i;:::-;36678:39;;;;:::i;:::-;36656:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;36787:12:0;;36767:16;;36760:23;;:4;:23;:::i;:::-;36759:40;;;;:::i;:::-;36736:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;36521:294:0;36835:8;;36831:91;;36864:42;36880:4;36894;36901;36864:15;:42::i;:::-;36938:14;36948:4;36938:14;;:::i;:::-;;;36031:933;37015:33;37031:4;37037:2;37041:6;37015:15;:33::i;:::-;-1:-1:-1;;;;;37064:21:0;;37080:4;37064:21;;:44;;-1:-1:-1;;;;;;37089:19:0;;37103:4;37089:19;37064:44;37063:60;;;;37121:2;-1:-1:-1;;;;;37113:10:0;:4;-1:-1:-1;;;;;37113:10:0;;37063:60;37059:74;;;37126:7;;;;32527:5046;;;:::o;37059:74::-;-1:-1:-1;;;;;37147:29:0;;;;;;:25;:29;;;;;;;;37143:384;;;37192:12;37199:4;37192:6;:12::i;:::-;37219:33;37241:4;37247;37219:21;:33::i;:::-;37143:384;;;-1:-1:-1;;;;;37273:31:0;;;;;;:25;:31;;;;;;;;37269:258;;;37320:10;37327:2;37320:6;:10::i;:::-;37345:32;37367:2;37371:5;37345:21;:32::i;37269:258::-;37408:12;37415:4;37408:6;:12::i;:::-;37435:33;37457:4;37463;37435:21;:33::i;:::-;37483:32;37505:2;37509:5;37483:21;:32::i;:::-;37539:26;37559:5;37539:19;:26::i;:::-;32640:4933;;;;32527:5046;;;:::o;28891:2061::-;28949:14;;;;28944:29;;28891:2061;:::o;28944:29::-;28983:14;:22;;-1:-1:-1;;28983:22:0;;;29044:26;29000:5;29044:19;:26::i;:::-;-1:-1:-1;;;;;29108:19:0;;29081:24;29108:19;;;:10;:19;;;;;29165:12;;:16;;29180:1;;29165:16;:::i;:::-;29142:19;;:39;;;;:67;;-1:-1:-1;29185:19:0;;:24;;29142:67;29138:104;;;-1:-1:-1;;29212:14:0;:21;;-1:-1:-1;;29212:21:0;29229:4;29212:21;;;28891:2061::o;29138:104::-;29303:19;;29252;;;;29303:23;;29325:1;29303:23;:::i;:::-;29291:35;;29286:1355;29332:12;;29328:1;:16;29286:1355;;;29366:27;29396:17;;;:14;;;:17;;;;;;;;;29366:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29428:1202;;29466:25;29494:15;;;:12;:15;;;;;29533:19;;;;;;29528:73;;29576:5;;;;29528:73;29623:26;;;;29619:45;;29656:8;;;;29619:45;29683:20;29753:1;29726:4;:24;;;:28;29722:211;;;-1:-1:-1;29808:24:0;;;;29793:40;;;;:14;;;:40;;;;;:44;;;29722:211;;;-1:-1:-1;29899:14:0;;;;29722:211;29951:14;30011:5;:26;;;29984:5;:23;;;29969:12;:38;;;;:::i;:::-;29968:69;;;;:::i;:::-;29951:86;;30087:1;30060:4;:24;;;:28;30056:519;;;30112:16;30147:4;:26;;;30131:5;:13;;;:42;;;;:::i;:::-;30112:61;-1:-1:-1;30218:6:0;30256:42;30218:6;30112:61;30256:24;:42::i;:::-;30247:51;;30335:5;:23;;;30325:6;:33;30321:59;;30369:11;30360:20;;30321:59;30433:18;30440:11;30433:6;:18;:::i;:::-;30407:5;:23;;;:44;30403:152;;;30481:18;30488:11;30481:6;:18;:::i;:::-;30453:5;:23;;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;30403:152:0;;-1:-1:-1;30403:152:0;;30554:1;30528:23;;;:27;30403:152;30089:486;;30056:519;30593:21;30608:6;30593:21;;:::i;:::-;;;29447:1183;;;29428:1202;29351:1290;29286:1355;29346:3;;;;:::i;:::-;;;;29286:1355;;;-1:-1:-1;30655:15:0;;30651:215;;30705:21;30690:11;:36;30686:118;;30785:3;30760:24;:21;30782:2;30760:24;:::i;:::-;:28;;;;:::i;:::-;30746:42;;30686:118;30818:36;;-1:-1:-1;;;;;30818:12:0;;;30838:11;;30818:36;;;;30838:11;30818:12;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30651:215;30911:1;30898:12;;:14;;;;:::i;:::-;30876:36;;;-1:-1:-1;;30923:14:0;:21;;-1:-1:-1;;30923:21:0;30940:4;30923:21;;;28891:2061::o;24652:1899::-;24736:14;;;;24731:29;;24652:1899;;:::o;24731:29::-;-1:-1:-1;;;;;24797:18:0;;24770:24;24797:18;;;:10;:18;;;;;;;;24867:12;;24854:26;;:12;:26;;;;;24797:18;;24925:1619;;;;24971:12;;24956:28;;;;:14;;;:28;;;;;:31;;;24951:543;;25023:12;;;25008:28;;;;:14;;;:28;;;;;;:38;;-1:-1:-1;;25008:38:0;25042:4;25008:38;;;;;;25097:12;;25082:28;;;;:32;;25137:12;25133:114;;-1:-1:-1;25198:24:0;;;;25183:40;;;;:14;;;:40;;;;;:44;;;25133:114;25265:15;;;:28;;;;;;;-1:-1:-1;25265:28:0;;;;;;;;;-1:-1:-1;;;;;;25265:28:0;-1:-1:-1;;;;;25265:28:0;;;;;25312:26;;;:37;;25342:7;;-1:-1:-1;25312:37:0;;25342:7;;25312:37;:::i;:::-;;;;-1:-1:-1;25403:17:0;;-1:-1:-1;25413:6:0;25403:9;:17::i;:::-;25383:12;;;25368:28;;;;:14;;;:28;;;;;:32;;:52;;;;25466:12;25439:24;;;:39;-1:-1:-1;24951:543:0;24925:1619;;;25544:12;;25529:28;;;;:14;;;:28;;;;;:31;;;25524:1009;;25580:16;25617:4;:26;;;25599:15;:44;;;;:::i;:::-;25695:12;;25680:28;;;;:14;;;:28;;;;;:32;;;;-1:-1:-1;25580:63:0;-1:-1:-1;25735:20:0;25731:130;;25812:24;;;;25797:40;;;;:14;;;:40;;;;;:44;;;;-1:-1:-1;25731:130:0;25909:15;25879:5;:26;;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;25961:53:0;;-1:-1:-1;25986:17:0;25996:6;25986:9;:17::i;:::-;26005:8;25961:24;:53::i;:::-;26048:12;;26033:28;;;;:14;;;:28;;;;;:32;;:50;;;26102:26;;;:45;;25943:71;;-1:-1:-1;25943:71:0;;26102:26;;26033:28;26102:45;;25943:71;;26102:45;:::i;:::-;;;;-1:-1:-1;;26193:12:0;;26166:24;;;:39;26228:26;;;;26224:124;;26313:15;26284:26;;;:44;26224:124;26370:12;;;;26366:103;;26448:1;26433:12;;:16;;;;:::i;:::-;26411:38;;26366:103;-1:-1:-1;26502:15:0;26487:12;;;:30;25524:1009;24720:1831;;;24652:1899;;:::o;1211:191::-;1304:6;;;-1:-1:-1;;;;;1321:17:0;;;-1:-1:-1;;;;;;1321:17:0;;;;;;;1354:40;;1304:6;;;1321:17;1304:6;;1354:40;;1285:16;;1354:40;1274:128;1211:191;:::o;23364:188::-;-1:-1:-1;;;;;23447:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;23447:39:0;;;;;;;;;;23504:40;;23447:39;;:31;23504:40;;;23364:188;;:::o;26559:1008::-;26666:23;26718:7;26706:8;:19;26702:53;;26752:3;26735:13;:7;26745:3;26735:13;:::i;:::-;26734:21;;;;:::i;:::-;26727:28;;;;26702:53;26796:7;26784:8;:19;26780:53;;26830:3;26813:13;:7;26823:3;26813:13;:::i;26780:53::-;26873:7;26861:8;:19;26857:53;;26907:3;26890:13;:7;26900:3;26890:13;:::i;26857:53::-;26950:7;26938:8;:19;26934:53;;26984:3;26967:13;:7;26977:3;26967:13;:::i;26934:53::-;27027:7;27015:8;:19;27011:53;;27061:3;27044:13;:7;27054:3;27044:13;:::i;27011:53::-;27104:6;27092:8;:18;27088:52;;27137:3;27120:13;:7;27130:3;27120:13;:::i;27088:52::-;27180:6;27168:8;:18;27164:52;;27213:3;27196:13;:7;27206:3;27196:13;:::i;27164:52::-;27256:6;27244:8;:18;27240:52;;27289:3;27272:13;:7;27282:3;27272:13;:::i;27240:52::-;27332:6;27320:8;:18;27316:52;;27365:3;27348:13;:7;27358:3;27348:13;:::i;27316:52::-;27408:6;27396:8;:18;27392:52;;27441:3;27424:13;:7;27434:3;27424:13;:::i;27392:52::-;27484:8;27472;:20;27468:54;;27519:3;27502:13;:7;27512:3;27502:13;:::i;27468:54::-;-1:-1:-1;27552:7:0;;26559:1008;-1:-1:-1;26559:1008:0:o;27575:1306::-;27642:14;;;;27637:28;;27575:1306;:::o;27637:28::-;27716:12;;27675:25;27703:26;;;:12;:26;;;;;27807:22;;27789:15;;:40;;27807:22;27789:40;:::i;:::-;27770:15;:59;;:69;;;;27833:6;27770:69;27766:1108;;;27872:15;27856:13;;;;:31;;;;27902:19;;;:26;;-1:-1:-1;;27902:26:0;;;;;27969:21;;;27943:23;;;:47;27902:19;28019:25;;;;28105:12;;27902:19;;28092:12;;27902:19;;28105:16;;:12;:16;:::i;:::-;28092:30;;;;;;;;;;;-1:-1:-1;28092:30:0;;;28171:26;;;;;28137:31;;;:60;28235:15;28212:38;;28092:30;-1:-1:-1;28265:489:0;28289:15;;;:22;28285:26;;28265:489;;;28337:14;28354:5;:15;;28370:1;28354:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28354:18:0;28418;;;:10;:18;;;;;;28484:15;28455:26;;;:44;28354:18;;-1:-1:-1;28418:18:0;28535:17;28354:18;28535:9;:17::i;:::-;28518:34;;28610:6;28571:4;:14;;:32;28586:12;;28601:1;28586:16;;;;:::i;:::-;28571:32;;;;;;;;;;;:36;;:45;;;;28670:6;28635:10;:31;;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;;28722:12:0;;:16;;28737:1;28722:16;:::i;:::-;28695:4;:24;;:43;;;;28318:436;;;28313:3;;;;;:::i;:::-;;;;28265:489;;;-1:-1:-1;28768:22:0;28775:15;;;;28768:22;:::i;:::-;28848:12;:14;;;:12;:14;;;:::i;:::-;;;;;;27841:1033;27626:1255;27575:1306;:::o;5004:733::-;-1:-1:-1;;;;;5144:20:0;;5136:70;;;;-1:-1:-1;;;5136:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5225:23:0;;5217:71;;;;-1:-1:-1;;;5217:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5385:17:0;;5361:21;5385:17;;;;;;;;;;;5421:23;;;;5413:74;;;;-1:-1:-1;;;5413:74:0;;16746:2:1;5413:74:0;;;16728:21:1;16785:2;16765:18;;;16758:30;16824:34;16804:18;;;16797:62;-1:-1:-1;;;16875:18:1;;;16868:36;16921:19;;5413:74:0;16544:402:1;5413:74:0;-1:-1:-1;;;;;5523:17:0;;;:9;:17;;;;;;;;;;;5543:22;;;5523:42;;5587:20;;;;;;;;:30;;5559:6;;5523:9;5587:30;;5559:6;;5587:30;:::i;:::-;;;;;;;;5652:9;-1:-1:-1;;;;;5635:35:0;5644:6;-1:-1:-1;;;;;5635:35:0;;5663:6;5635:35;;;;1830:25:1;;1818:2;1803:18;;1684:177;5635:35:0;;;;;;;;5125:612;5004:733;;;:::o;38475:1039::-;38514:23;38540:24;38558:4;38540:9;:24::i;:::-;38514:50;;38575:25;38637:19;;38603:18;;:53;;;;:::i;:::-;38575:81;-1:-1:-1;38667:12:0;38696:20;;;:46;;-1:-1:-1;38720:22:0;;38696:46;38692:85;;;38759:7;;;38475:1039::o;38692:85::-;38811:18;;:23;;38832:2;38811:23;:::i;:::-;38793:15;:41;38789:115;;;38869:18;;:23;;38890:2;38869:23;:::i;:::-;38851:41;;38789:115;38994:15;39050:21;39084:36;38994:15;39084:16;:36::i;:::-;39133:18;39154:44;:21;39180:17;39154:25;:44::i;:::-;39133:65;;39211:20;39234:57;39273:17;39234:34;39249:18;;39234:10;:14;;:34;;;;:::i;:57::-;39327:1;39306:18;:22;;;39339:19;:23;;;39397:15;;39389:54;;39211:80;;-1:-1:-1;;;;;;39397:15:0;;39211:80;;39389:54;39327:1;39389:54;39211:80;39397:15;39389:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39375:68:0;;-1:-1:-1;39480:25:0;;-1:-1:-1;39493:12:0;39480:10;:25;:::i;:::-;39454:21;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;38475:1039:0:o;8757:98::-;8815:7;8842:5;8846:1;8842;:5;:::i;:::-;8835:12;8757:98;-1:-1:-1;;;8757:98:0:o;8863:::-;8921:7;8948:5;8952:1;8948;:5;:::i;37581:589::-;37731:16;;;37745:1;37731:16;;;;;;;;37707:21;;37731:16;;;;;;;;;;-1:-1:-1;37731:16:0;37707:40;;37776:4;37758;37763:1;37758:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;37758:23:0;;;-1:-1:-1;;;;;37758:23:0;;;;;37802:15;-1:-1:-1;;;;;37802:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37792:4;37797:1;37792:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;37792:32:0;;;-1:-1:-1;;;;;37792:32:0;;;;;37837:62;37854:4;37869:15;37887:11;37837:8;:62::i;:::-;37938:224;;-1:-1:-1;;;37938:224:0;;-1:-1:-1;;;;;37938:15:0;:66;;;;:224;;38019:11;;38045:1;;38089:4;;38116;;38136:15;;37938:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37636:534;37581:589;:::o;8651:98::-;8709:7;8736:5;8740:1;8736;:5;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:597::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;637:6;634:1;631:13;628:91;;;707:1;702:2;693:6;682:9;678:22;674:31;667:42;628:91;-1:-1:-1;780:2:1;759:15;-1:-1:-1;;755:29:1;740:45;;;;787:2;736:54;;199:597;-1:-1:-1;;;199:597:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:315;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1866:456::-;1943:6;1951;1959;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2067:9;2054:23;2086:31;2111:5;2086:31;:::i;:::-;2136:5;-1:-1:-1;2193:2:1;2178:18;;2165:32;2206:33;2165:32;2206:33;:::i;:::-;1866:456;;2258:7;;-1:-1:-1;;;2312:2:1;2297:18;;;;2284:32;;1866:456::o;2724:248::-;2792:6;2800;2853:2;2841:9;2832:7;2828:23;2824:32;2821:52;;;2869:1;2866;2859:12;2821:52;-1:-1:-1;;2892:23:1;;;2962:2;2947:18;;;2934:32;;-1:-1:-1;2724:248:1:o;2977:247::-;3036:6;3089:2;3077:9;3068:7;3064:23;3060:32;3057:52;;;3105:1;3102;3095:12;3057:52;3144:9;3131:23;3163:31;3188:5;3163:31;:::i;4103:160::-;4168:20;;4224:13;;4217:21;4207:32;;4197:60;;4253:1;4250;4243:12;4268:315;4333:6;4341;4394:2;4382:9;4373:7;4369:23;4365:32;4362:52;;;4410:1;4407;4400:12;4362:52;4449:9;4436:23;4468:31;4493:5;4468:31;:::i;:::-;4518:5;-1:-1:-1;4542:35:1;4573:2;4558:18;;4542:35;:::i;:::-;4532:45;;4268:315;;;;;:::o;4588:180::-;4644:6;4697:2;4685:9;4676:7;4672:23;4668:32;4665:52;;;4713:1;4710;4703:12;4665:52;4736:26;4752:9;4736:26;:::i;4773:461::-;4826:3;4864:5;4858:12;4891:6;4886:3;4879:19;4917:4;4946:2;4941:3;4937:12;4930:19;;4983:2;4976:5;4972:14;5004:1;5014:195;5028:6;5025:1;5022:13;5014:195;;;5093:13;;-1:-1:-1;;;;;5089:39:1;5077:52;;5149:12;;;;5184:15;;;;5125:1;5043:9;5014:195;;;-1:-1:-1;5225:3:1;;4773:461;-1:-1:-1;;;;;4773:461:1:o;5239:472::-;5520:6;5514:13;5507:21;5500:29;5489:9;5482:48;5586:4;5578:6;5574:17;5568:24;5561:4;5550:9;5546:20;5539:54;5629:2;5624;5613:9;5609:18;5602:30;5463:4;5649:56;5701:2;5690:9;5686:18;5678:6;5649:56;:::i;:::-;5641:64;5239:472;-1:-1:-1;;;;5239:472:1:o;5716:316::-;5793:6;5801;5809;5862:2;5850:9;5841:7;5837:23;5833:32;5830:52;;;5878:1;5875;5868:12;5830:52;-1:-1:-1;;5901:23:1;;;5971:2;5956:18;;5943:32;;-1:-1:-1;6022:2:1;6007:18;;;5994:32;;5716:316;-1:-1:-1;5716:316:1:o;6037:388::-;6105:6;6113;6166:2;6154:9;6145:7;6141:23;6137:32;6134:52;;;6182:1;6179;6172:12;6134:52;6221:9;6208:23;6240:31;6265:5;6240:31;:::i;:::-;6290:5;-1:-1:-1;6347:2:1;6332:18;;6319:32;6360:33;6319:32;6360:33;:::i;:::-;6412:7;6402:17;;;6037:388;;;;;:::o;6430:356::-;6632:2;6614:21;;;6651:18;;;6644:30;6710:34;6705:2;6690:18;;6683:62;6777:2;6762:18;;6430:356::o;6791:127::-;6852:10;6847:3;6843:20;6840:1;6833:31;6883:4;6880:1;6873:15;6907:4;6904:1;6897:15;6923:168;6963:7;7029:1;7025;7021:6;7017:14;7014:1;7011:21;7006:1;6999:9;6992:17;6988:45;6985:71;;;7036:18;;:::i;:::-;-1:-1:-1;7076:9:1;;6923:168::o;7096:217::-;7136:1;7162;7152:132;;7206:10;7201:3;7197:20;7194:1;7187:31;7241:4;7238:1;7231:15;7269:4;7266:1;7259:15;7152:132;-1:-1:-1;7298:9:1;;7096:217::o;7728:380::-;7807:1;7803:12;;;;7850;;;7871:61;;7925:4;7917:6;7913:17;7903:27;;7871:61;7978:2;7970:6;7967:14;7947:18;7944:38;7941:161;;;8024:10;8019:3;8015:20;8012:1;8005:31;8059:4;8056:1;8049:15;8087:4;8084:1;8077:15;7941:161;;7728:380;;;:::o;8927:128::-;8967:3;8998:1;8994:6;8991:1;8988:13;8985:39;;;9004:18;;:::i;:::-;-1:-1:-1;9040:9:1;;8927:128::o;10648:125::-;10688:4;10716:1;10713;10710:8;10707:34;;;10721:18;;:::i;:::-;-1:-1:-1;10758:9:1;;10648:125::o;10778:135::-;10817:3;-1:-1:-1;;10838:17:1;;10835:43;;;10858:18;;:::i;:::-;-1:-1:-1;10905:1:1;10894:13;;10778:135::o;13378:401::-;13580:2;13562:21;;;13619:2;13599:18;;;13592:30;13658:34;13653:2;13638:18;;13631:62;-1:-1:-1;;;13724:2:1;13709:18;;13702:35;13769:3;13754:19;;13378:401::o;13784:399::-;13986:2;13968:21;;;14025:2;14005:18;;;13998:30;14064:34;14059:2;14044:18;;14037:62;-1:-1:-1;;;14130:2:1;14115:18;;14108:33;14173:3;14158:19;;13784:399::o;16412:127::-;16473:10;16468:3;16464:20;16461:1;16454:31;16504:4;16501:1;16494:15;16528:4;16525:1;16518:15;17083:251;17153:6;17206:2;17194:9;17185:7;17181:23;17177:32;17174:52;;;17222:1;17219;17212:12;17174:52;17254:9;17248:16;17273:31;17298:5;17273:31;:::i;17339:582::-;17638:6;17627:9;17620:25;17681:6;17676:2;17665:9;17661:18;17654:34;17724:3;17719:2;17708:9;17704:18;17697:31;17601:4;17745:57;17797:3;17786:9;17782:19;17774:6;17745:57;:::i;:::-;-1:-1:-1;;;;;17838:32:1;;;;17833:2;17818:18;;17811:60;-1:-1:-1;17902:3:1;17887:19;17880:35;17737:65;17339:582;-1:-1:-1;;;17339:582:1:o
Swarm Source
ipfs://53c08ee1f8f0e13696aab902605c863868d3463eac9944755d45e32237b85c7f
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.