Token sCROoge
Overview CRC20
Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
100,000,000 sCRO
Holders:
287 addresses
Contract:
Decimals:
9
Balance
365,000 sCROValue
$0.00
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
sCROoge
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-04-12 */ /** Welcome to sCROoge .▄▄ · ▄▄· ▄▄▄ ▄▄ • ▄▄▄ . ▐█ ▀. ▐█ ▌▪▀▄ █· ▄█▀▄ ▄█▀▄ ▐█ ▀ ▪▀▄.▀· ▄▀▀▀█▄██ ▄▄▐▀▀▄ ▐█▌.▐▌▐█▌.▐▌▄█ ▀█▄▐▀▀▪▄ ▐█▄▪▐█▐███▌▐█•█▌▐█▌.▐▌▐█▌.▐▌▐█▄▪▐█▐█▄▄▌ ▀▀▀▀ ·▀▀▀ .▀ ▀ ▀█▄▀▪ ▀█▄▀▪·▀▀▀▀ ▀▀▀ Telegram: https://t.me/scroogecronos Web: https://www.scrooge-cronos.finance TOKENOMICS: Supply: 100,000,000 tokens */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IUniRouterV1 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniRouterV2 is IUniRouterV1 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } 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 IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IDividendDistributor { function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; function claimDividend(address holder) external; } contract DividendDistributor is IDividendDistributor { using SafeMath for uint256; address _token; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } IUniRouterV2 router; address[] shareholders; mapping (address => uint256) shareholderIndexes; mapping (address => uint256) shareholderClaims; mapping (address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10 ** 36; uint256 public minPeriod = 1 hours; uint256 public minDistribution = 1; uint256 currentIndex; bool initialized; modifier initialization() { require(!initialized); _; initialized = true; } modifier onlyToken() { require(msg.sender == _token); _; } constructor (IUniRouterV2 _router) { router = _router; _token = msg.sender; } function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken { minPeriod = newMinPeriod; minDistribution = newMinDistribution; } function setShare(address shareholder, uint256 amount) external override onlyToken { if(shares[shareholder].amount > 0){ distributeDividend(shareholder); } if(amount > 0 && shares[shareholder].amount == 0){ addShareholder(shareholder); }else if(amount == 0 && shares[shareholder].amount > 0){ removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function deposit() external payable override onlyToken { totalDividends = totalDividends.add(msg.value); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(msg.value).div(totalShares)); } function process(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 iterations = 0; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if(shouldDistribute(shareholders[currentIndex])){ distributeDividend(shareholders[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function distributeDividend(address shareholder) internal { if(shares[shareholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(shareholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); (bool success, ) = payable(shareholder).call{value: amount, gas: 30000}(""); success = false; shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } } function claimDividend(address holder) external override { distributeDividend(holder); } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1]; shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder]; shareholders.pop(); } } abstract contract Auth { address internal owner; mapping (address => bool) internal authorizations; constructor(address _owner) { owner = _owner; authorizations[_owner] = true; } modifier onlyOwner() { require(isOwner(msg.sender), "!OWNER"); _; } modifier authorized() { require(isAuthorized(msg.sender), "!AUTHORIZED"); _; } function authorize(address adr) public onlyOwner { authorizations[adr] = true; } function unauthorize(address adr) public onlyOwner { authorizations[adr] = false; } function isOwner(address account) public view returns (bool) { return account == owner; } function isAuthorized(address adr) public view returns (bool) { return authorizations[adr]; } function transferOwnership(address payable adr) public onlyOwner { owner = adr; authorizations[adr] = true; emit OwnershipTransferred(adr); } event OwnershipTransferred(address owner); } contract sCROoge is IERC20, Auth { using SafeMath for uint256; using SafeERC20 for IERC20; string constant _name = "sCROoge"; string constant _symbol = "sCRO"; uint8 constant _decimals = 9; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; uint256 _totalSupply = 100000000 * (10 ** _decimals); uint256 public _maxTxAmount = 250000 * (10 ** _decimals); uint256 public _walletMax = 500000 * (10 ** _decimals); bool public restrictWhales = true; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) public isFeeExempt; mapping (address => bool) public isTxLimitExempt; mapping (address => bool) public isDividendExempt; mapping(address => bool) public isBot; uint256 public liquidityFee = 2; uint256 public liquidityFeeSell = 2; uint256 public marketingFee = 2; uint256 public marketingFeeSell = 2; uint256 public rewardsFee = 4; uint256 public rewardsFeeSell = 4; uint256 public developmentFee = 1; uint256 public developmentFeeSell = 1; uint256 public totalFee = 9; uint256 public totalFeeSell = 9; address public autoLiquidityReceiver = address(this); address public marketingWallet = 0x3E80223f8654f1c45bFe8A6Ff620C00737703792; address public developmentWallet = 0x3E80223f8654f1c45bFe8A6Ff620C00737703792; IUniRouterV2 public router; address public pair; uint256 public launchedAt; bool public tradingOpen = false; DividendDistributor public dividendDistributor; uint256 distributorGas = 500000; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public swapAndLiquifyByLimitOnly = false; uint256 public swapThreshold = 10 * (10 ** _decimals); uint256 public timeToWait = 6; event BlacklistedUser(address botAddress, bool indexed value); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () Auth(msg.sender) { IUniRouterV2 _router = IUniRouterV2(0x145677FC4d9b8F19B5D56d1820c48e0443049a30); router = _router; pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this)); _allowances[address(this)][address(router)] = type(uint256).max; dividendDistributor = new DividendDistributor(router); isFeeExempt[msg.sender] = true; isFeeExempt[address(this)] = true; isFeeExempt[DEAD] = true; isFeeExempt[marketingWallet] = true; isFeeExempt[developmentWallet] = true; isTxLimitExempt[msg.sender] = true; isTxLimitExempt[DEAD] = true; isTxLimitExempt[marketingWallet] = true; isTxLimitExempt[pair] = true; isDividendExempt[pair] = true; isDividendExempt[msg.sender] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; isDividendExempt[ZERO] = true; isDividendExempt[developmentWallet] = true; autoLiquidityReceiver = address(this); _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } receive() external payable { } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return _totalSupply; } function getOwner() external view returns (address) { return owner; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, type(uint256).max); } function launched() internal view returns (bool) { return launchedAt != 0; } function claim() public { dividendDistributor.claimDividend(msg.sender); } function launch() internal { launchedAt = block.timestamp; } function changeTxLimit(uint256 newLimit) external authorized { _maxTxAmount = newLimit; } function checkTxLimit(address sender, uint256 amount) internal view { require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); } function changeWalletLimit(uint256 newLimit) external authorized { _walletMax = newLimit; } function changeNoBigGuys(bool newValue) external authorized { restrictWhales = newValue; } function changeIsNoTax(address holder, bool exempt) external authorized { isFeeExempt[holder] = exempt; } function changeIsTxLimitExempt(address holder, bool exempt) external authorized { isTxLimitExempt[holder] = exempt; } function changeIsDividendExempt(address holder, bool exempt) external authorized { require(holder != address(this) && holder != pair); isDividendExempt[holder] = exempt; if(exempt){ dividendDistributor.setShare(holder, 0); }else{ dividendDistributor.setShare(holder, _balances[holder]); } } function changeFees(uint256 newLiqFee, uint256 newRewardFee, uint256 newMarketingFee, uint256 newdevelopmentFee) external authorized { require(newLiqFee <= 10, "LP Tax on buys can not be higher than 10%"); require(newMarketingFee <= 10, "Marketing Tax on buys can not be higher than 10%"); require(newdevelopmentFee <= 2, "development Tax on buys can not be higher than 2%"); require(newRewardFee >= 0, "Rewards Tax on buys can not be lower than 0%"); liquidityFee = newLiqFee; rewardsFee = newRewardFee; marketingFee = newMarketingFee; developmentFee = newdevelopmentFee; totalFee = liquidityFee.add(marketingFee).add(developmentFee).add(rewardsFee); } function changeFeesSell(uint256 newLiqFeeSell, uint256 newRewardFeeSell, uint256 newMarketingFeeSell, uint256 newdevelopmentFeeSell) external authorized { require(newLiqFeeSell <= 10, "LP Tax on sells can not be higher than 10%"); require(newMarketingFeeSell <= 10, "Marketing Tax on sells can not be higher than 10%"); require(newdevelopmentFeeSell <= 2, "development Tax on sells can not be higher than 2%"); require(newRewardFeeSell >= 0, "Rewards Tax on sells can not be lower than 0%"); liquidityFeeSell = newLiqFeeSell; rewardsFeeSell = newRewardFeeSell; marketingFeeSell = newMarketingFeeSell; developmentFeeSell = newdevelopmentFeeSell; totalFeeSell = liquidityFeeSell.add(marketingFeeSell).add(developmentFeeSell).add(rewardsFeeSell); } function changeFeeReceivers(address newLiquidityReceiver, address newMarketingWallet, address newdevelopmentWallet) external authorized { autoLiquidityReceiver = newLiquidityReceiver; marketingWallet = newMarketingWallet; developmentWallet = newdevelopmentWallet; } function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit, bool swapByLimitOnly) external authorized { swapAndLiquifyEnabled = enableSwapBack; swapThreshold = newSwapBackLimit; swapAndLiquifyByLimitOnly = swapByLimitOnly; } function changeDistributionCriteria(uint256 newinPeriod, uint256 newMinDistribution) external authorized { dividendDistributor.setDistributionCriteria(newinPeriod, newMinDistribution); } function changeDistributorSettings(uint256 gas) external authorized { require(gas < 750000); distributorGas = gas; } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if(_allowances[sender][msg.sender] != type(uint256).max){ _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance"); } return _transferFrom(sender, recipient, amount); } function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); } if(!authorizations[sender] && !authorizations[recipient]){ require(tradingOpen, "Trading not open yet"); } require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); } if(!launched() && recipient == pair) { require(_balances[sender] > 0); } if ((block.timestamp < launchedAt + timeToWait) && recipient != pair) { isBot[recipient] = true; emit BlacklistedUser(recipient, true); } //Exchange tokens _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); if(!isTxLimitExempt[recipient] && restrictWhales) { require(_balances[recipient].add(amount) <= _walletMax); } uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(finalAmount); // Dividend tracker if(!isDividendExempt[sender]) { try dividendDistributor.setShare(sender, _balances[sender]) {} catch {} } if(!isDividendExempt[recipient]) { try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {} } try dividendDistributor.process(distributorGas) {} catch {} emit Transfer(sender, recipient, finalAmount); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { uint256 feeApplicable = pair == recipient ? totalFeeSell : totalFee; if(isBot[recipient] == true) { feeApplicable = 99; } else if(isBot[sender] == true) { feeApplicable = 99; } uint256 feeAmount = amount.mul(feeApplicable).div(100); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function tradingStatus(bool newStatus) public onlyOwner { tradingOpen = newStatus; launch(); } // Blacklist or Unblacklist bots or sniper function blacklistSniper(address botAddress, bool isban) external onlyOwner { isBot[botAddress] = isban; } function swapBack() internal lockTheSwap { uint256 tokensToLiquify = _balances[address(this)]; uint256 amountToLiquify = tokensToLiquify.mul(liquidityFee).div(totalFee).div(2); uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountCRO = address(this).balance; uint256 totalCROFee = totalFee.sub(liquidityFee.div(2)); uint256 amountCROLiquidity = amountCRO.mul(liquidityFee).div(totalCROFee).div(2); uint256 amountCROReflection = amountCRO.mul(rewardsFee).div(totalCROFee); uint256 amountCROMarketing = amountCRO.sub(amountCROLiquidity).sub(amountCROReflection); try dividendDistributor.deposit{value: amountCROReflection}() {} catch {} uint256 developmentShare = amountCRO.mul(developmentFee).div(totalCROFee); uint256 marketingShare = amountCROMarketing.sub(developmentShare); (bool tmpSuccess,) = payable(marketingWallet).call{value: marketingShare, gas: 30000}(""); (bool tmpSuccess1,) = payable(developmentWallet).call{value: developmentShare, gas: 30000}(""); // only to supress warning msg tmpSuccess = false; tmpSuccess1 = false; if(amountToLiquify > 0){ router.addLiquidityETH{value: amountCROLiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(amountCROLiquidity, amountToLiquify); } } event AutoLiquify(uint256 amountCRO, uint256 amountBOG); } //BMac
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCRO","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"botAddress","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistedUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botAddress","type":"address"},{"internalType":"bool","name":"isban","type":"bool"}],"name":"blacklistSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"changeDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"changeDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityReceiver","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newdevelopmentWallet","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFee","type":"uint256"},{"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newdevelopmentFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFeeSell","type":"uint256"},{"internalType":"uint256","name":"newRewardFeeSell","type":"uint256"},{"internalType":"uint256","name":"newMarketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"newdevelopmentFeeSell","type":"uint256"}],"name":"changeFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsNoTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeNoBigGuys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"},{"internalType":"bool","name":"swapByLimitOnly","type":"bool"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"developmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniRouterV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"timeToWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeSell","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":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600280546001600160a01b031990811661dead17909155600380549091169055620000326009600a620005d8565b62000042906305f5e10062000699565b600455620000536009600a620005d8565b62000062906203d09062000699565b600555620000736009600a620005d8565b62000082906207a12062000699565b6006556007805460ff1990811660019081179092556002600e819055600f8190556010819055601155600460128190556013556014829055601591909155600960168190556017819055601880546001600160a01b03199081163017909155601980548216733e80223f8654f1c45bfe8a6ff620c00737703792908117909155601a8054909216179055601e80549092169091556207a120601f556020805462ffff0019166101001790556200013a90600a620005d8565b6200014790600a62000699565b60215560066022553480156200015c57600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155601b805473145677fc4d9b8f19b5d56d1820c48e0443049a30931683179055825163c45a015560e01b815292519192839263c45a015592600480840193919291829003018186803b158015620001e257600080fd5b505afa158015620001f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021d91906200055d565b6001600160a01b031663c9c65396601b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027a57600080fd5b505afa1580156200028f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b591906200055d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015620002fd57600080fd5b505af115801562000312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033891906200055d565b601c80546001600160a01b0319166001600160a01b03928316179055306000908152600960209081526040808320601b80548616855292529182902060001990555490519116906200038a906200054f565b6001600160a01b039091168152602001604051809103906000f080158015620003b7573d6000803e3d6000fd5b50601e8054610100600160a81b0319166101006001600160a01b0393841602179055336000818152600a60209081526040808320805460ff19908116600190811790925530808652838620805483168417905560028054891687528487208054841685179055601980548a1688528588208054851686179055601a80548b1689528689208054861687179055898952600b8852868920805486168717905582548b168952868920805486168717905590548a1688528588208054851686179055601c80548b1689528689208054861687179055548a168852600c8752858820805485168617905588885285882080548516861790558288528588208054851686179055905489168752848720805484168517905560035489168752848720805484168517905554909716855282852080549091169091179055601880546001600160a01b031916909517909455600454838352600882528483208190559351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620006d1565b610b3a8062002dd183390190565b6000602082840312156200057057600080fd5b81516001600160a01b03811681146200058857600080fd5b9392505050565b600181815b80851115620005d0578160001904821115620005b457620005b4620006bb565b80851615620005c257918102915b93841c939080029062000594565b509250929050565b60006200058860ff841683600082620005f45750600162000693565b81620006035750600062000693565b81600181146200061c5760028114620006275762000647565b600191505062000693565b60ff8411156200063b576200063b620006bb565b50506001821b62000693565b5060208310610133831016604e8410600b84101617156200066c575081810a62000693565b6200067883836200058f565b80600019048211156200068f576200068f620006bb565b0290505b92915050565b6000816000190483118215151615620006b657620006b6620006bb565b500290565b634e487b7160e01b600052601160045260246000fd5b6126f080620006e16000396000f3fe6080604052600436106103a65760003560e01c806370a08231116101e7578063bad3ea6a1161010d578063dd62ed3e116100a0578063f887ea401161006f578063f887ea4014610b01578063fabe628314610b21578063fe9fbb8014610b41578063ffb54a9914610b6157600080fd5b8063dd62ed3e14610a5b578063e2dd8ca014610aa1578063f0b37c0414610ac1578063f2fde38b14610ae157600080fd5b8063d829d3f8116100dc578063d829d3f8146109e5578063d920334e14610a05578063da00097d14610a25578063dbe1c4d514610a4557600080fd5b8063bad3ea6a1461096a578063bf56b3711461098f578063c04a5414146109a5578063ca33e64c146109c557600080fd5b80638b42507f11610185578063a8aa1b3111610154578063a8aa1b31146108ea578063a9059cbb1461090a578063a9f7864b1461092a578063b6a5d7de1461094a57600080fd5b80638b42507f1461086157806395d89b411461089157806398118cb4146108be578063a5f3d003146108d457600080fd5b80637d1db4a5116101c15780637d1db4a5146107f75780637db1342c1461080d578063807c2d9c1461082d578063893d20e81461084357600080fd5b806370a082311461076957806375f0a8741461079f578063773fcb5c146107d757600080fd5b8063313ce567116102cc57806344de2e4c1161026a578063531484161161023957806353148416146106fd578063571ac8b014610713578063650c4226146107335780636b67c4df1461075357600080fd5b806344de2e4c1461068f578063479f66d8146106a95780634a74bb02146106c95780634e71d92d146106e857600080fd5b80633bbac579116102a65780633bbac579146105df5780633f4218e01461060f5780634102eedc1461063f5780634355855a1461065f57600080fd5b8063313ce56714610583578063315dca291461059f57806334c70889146105bf57600080fd5b806313374e7a1161034457806323b872dd1161031357806323b872dd146105095780632b112e49146105295780632bb14e1d1461053e5780632f54bf6e1461055457600080fd5b806313374e7a146104b257806318160ddd146104c85780631bb61f06146104dd5780631df4ccfc146104f357600080fd5b8063095ea7b311610380578063095ea7b31461042a57806309ad803d1461045a5780630d2959801461047c5780631107b3a51461049c57600080fd5b806303898c17146103b25780630445b667146103db57806306fdde03146103f157600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c860135481565b6040519081526020015b60405180910390f35b3480156103e757600080fd5b506103c860215481565b3480156103fd57600080fd5b506040805180820190915260078152667343524f6f676560c81b60208201525b6040516103d291906124fe565b34801561043657600080fd5b5061044a6104453660046123e0565b610b7b565b60405190151581526020016103d2565b34801561046657600080fd5b5061047a6104753660046124cc565b610be7565b005b34801561048857600080fd5b5061047a61049736600461240c565b610d83565b3480156104a857600080fd5b506103c8600f5481565b3480156104be57600080fd5b506103c860115481565b3480156104d457600080fd5b506004546103c8565b3480156104e957600080fd5b506103c860155481565b3480156104ff57600080fd5b506103c860165481565b34801561051557600080fd5b5061044a61052436600461236a565b610dc5565b34801561053557600080fd5b506103c8610e87565b34801561054a57600080fd5b506103c860125481565b34801561056057600080fd5b5061044a61056f3660046122ac565b6000546001600160a01b0391821691161490565b34801561058f57600080fd5b50604051600981526020016103d2565b3480156105ab57600080fd5b5061047a6105ba36600461231f565b610ed9565b3480156105cb57600080fd5b5061047a6105da366004612427565b610f3d565b3480156105eb57600080fd5b5061044a6105fa3660046122ac565b600d6020526000908152604090205460ff1681565b34801561061b57600080fd5b5061044a61062a3660046122ac565b600a6020526000908152604090205460ff1681565b34801561064b57600080fd5b5061047a61065a3660046123ab565b610f98565b34801561066b57600080fd5b5061044a61067a3660046122ac565b600c6020526000908152604090205460ff1681565b34801561069b57600080fd5b5060075461044a9060ff1681565b3480156106b557600080fd5b5061047a6106c4366004612463565b610fe8565b3480156106d557600080fd5b5060205461044a90610100900460ff1681565b3480156106f457600080fd5b5061047a611021565b34801561070957600080fd5b506103c860175481565b34801561071f57600080fd5b5061044a61072e3660046122ac565b611084565b34801561073f57600080fd5b5061047a61074e3660046124cc565b611098565b34801561075f57600080fd5b506103c860105481565b34801561077557600080fd5b506103c86107843660046122ac565b6001600160a01b031660009081526008602052604090205490565b3480156107ab57600080fd5b506019546107bf906001600160a01b031681565b6040516001600160a01b0390911681526020016103d2565b3480156107e357600080fd5b5061047a6107f23660046123ab565b611222565b34801561080357600080fd5b506103c860055481565b34801561081957600080fd5b5061047a610828366004612463565b611363565b34801561083957600080fd5b506103c860065481565b34801561084f57600080fd5b506000546001600160a01b03166107bf565b34801561086d57600080fd5b5061044a61087c3660046122ac565b600b6020526000908152604090205460ff1681565b34801561089d57600080fd5b506040805180820190915260048152637343524f60e01b602082015261041d565b3480156108ca57600080fd5b506103c8600e5481565b3480156108e057600080fd5b506103c860145481565b3480156108f657600080fd5b50601c546107bf906001600160a01b031681565b34801561091657600080fd5b5061044a6109253660046123e0565b61138d565b34801561093657600080fd5b5061047a61094536600461247c565b61139a565b34801561095657600080fd5b5061047a6109653660046122ac565b6113fb565b34801561097657600080fd5b50601e546107bf9061010090046001600160a01b031681565b34801561099b57600080fd5b506103c8601d5481565b3480156109b157600080fd5b50601a546107bf906001600160a01b031681565b3480156109d157600080fd5b506018546107bf906001600160a01b031681565b3480156109f157600080fd5b5061047a610a0036600461240c565b61144c565b348015610a1157600080fd5b5061047a610a20366004612463565b611484565b348015610a3157600080fd5b5060205461044a9062010000900460ff1681565b348015610a5157600080fd5b506103c860225481565b348015610a6757600080fd5b506103c8610a763660046122e6565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610aad57600080fd5b5061047a610abc3660046123ab565b6114ae565b348015610acd57600080fd5b5061047a610adc3660046122ac565b611503565b348015610aed57600080fd5b5061047a610afc3660046122ac565b61154e565b348015610b0d57600080fd5b50601b546107bf906001600160a01b031681565b348015610b2d57600080fd5b5061047a610b3c3660046123ab565b6115e4565b348015610b4d57600080fd5b5061044a610b5c3660046122ac565b611634565b348015610b6d57600080fd5b50601e5461044a9060ff1681565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bd69086815260200190565b60405180910390a350600192915050565b610bf033611634565b610c155760405162461bcd60e51b8152600401610c0c90612573565b60405180910390fd5b600a841115610c795760405162461bcd60e51b815260206004820152602a60248201527f4c5020546178206f6e2073656c6c732063616e206e6f7420626520686967686560448201526972207468616e2031302560b01b6064820152608401610c0c565b600a821115610ce45760405162461bcd60e51b815260206004820152603160248201527f4d61726b6574696e6720546178206f6e2073656c6c732063616e206e6f7420626044820152706520686967686572207468616e2031302560781b6064820152608401610c0c565b6002811115610d505760405162461bcd60e51b815260206004820152603260248201527f646576656c6f706d656e7420546178206f6e2073656c6c732063616e206e6f7460448201527120626520686967686572207468616e20322560701b6064820152608401610c0c565b600f849055601383905560118290556015819055610d7a83610d7483818887611652565b90611652565b60175550505050565b6000546001600160a01b03163314610dad5760405162461bcd60e51b8152600401610c0c90612553565b601e805460ff191682151517905542601d5550565b50565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610e72576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610e4d91849061165e565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610e7d84848461168a565b90505b9392505050565b6003546001600160a01b0316600090815260086020526040812054610ed4906002546001600160a01b0316600090815260086020526040902054610ece9060045490611c0d565b90611c0d565b905090565b610ee233611634565b610efe5760405162461bcd60e51b8152600401610c0c90612573565b601880546001600160a01b039485166001600160a01b0319918216179091556019805493851693821693909317909255601a8054919093169116179055565b610f4633611634565b610f625760405162461bcd60e51b8152600401610c0c90612573565b60208054602193909355901515620100000262ff000019931515610100029390931662ffff001990921691909117919091179055565b610fa133611634565b610fbd5760405162461bcd60e51b8152600401610c0c90612573565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610ff133611634565b61100d5760405162461bcd60e51b8152600401610c0c90612573565b620b71b0811061101c57600080fd5b601f55565b601e54604051630afbf02f60e11b81523360048201526101009091046001600160a01b0316906315f7e05e90602401600060405180830381600087803b15801561106a57600080fd5b505af115801561107e573d6000803e3d6000fd5b50505050565b600061109282600019610b7b565b92915050565b6110a133611634565b6110bd5760405162461bcd60e51b8152600401610c0c90612573565b600a8411156111205760405162461bcd60e51b815260206004820152602960248201527f4c5020546178206f6e20627579732063616e206e6f7420626520686967686572604482015268207468616e2031302560b81b6064820152608401610c0c565b600a82111561118a5760405162461bcd60e51b815260206004820152603060248201527f4d61726b6574696e6720546178206f6e20627579732063616e206e6f7420626560448201526f20686967686572207468616e2031302560801b6064820152608401610c0c565b60028111156111f55760405162461bcd60e51b815260206004820152603160248201527f646576656c6f706d656e7420546178206f6e20627579732063616e206e6f7420604482015270626520686967686572207468616e20322560781b6064820152608401610c0c565b600e84905560128390556010829055601481905561121983610d7483818887611652565b60165550505050565b61122b33611634565b6112475760405162461bcd60e51b8152600401610c0c90612573565b6001600160a01b038216301480159061126e5750601c546001600160a01b03838116911614155b61127757600080fd5b6001600160a01b0382166000908152600c60205260409020805460ff1916821580159190911790915561131557601e54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152610100909204909116906314b6ca96906044015b600060405180830381600087803b1580156112f957600080fd5b505af115801561130d573d6000803e3d6000fd5b505050505050565b601e546001600160a01b0383811660008181526008602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca96906044016112df565b61136c33611634565b6113885760405162461bcd60e51b8152600401610c0c90612573565b600655565b6000610e8033848461168a565b6113a333611634565b6113bf5760405162461bcd60e51b8152600401610c0c90612573565b601e546040516316a4744b60e11b815260048101849052602481018390526101009091046001600160a01b031690632d48e896906044016112df565b6000546001600160a01b031633146114255760405162461bcd60e51b8152600401610c0c90612553565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61145533611634565b6114715760405162461bcd60e51b8152600401610c0c90612573565b6007805460ff1916911515919091179055565b61148d33611634565b6114a95760405162461bcd60e51b8152600401610c0c90612573565b600555565b6000546001600160a01b031633146114d85760405162461bcd60e51b8152600401610c0c90612553565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461152d5760405162461bcd60e51b8152600401610c0c90612553565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146115785760405162461bcd60e51b8152600401610c0c90612553565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6115ed33611634565b6116095760405162461bcd60e51b8152600401610c0c90612573565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000610e808284612609565b600081848411156116825760405162461bcd60e51b8152600401610c0c91906124fe565b505050900390565b60205460009060ff16156116aa576116a3848484611c19565b9050610e80565b6001600160a01b03841660009081526001602052604090205460ff161580156116ec57506001600160a01b03831660009081526001602052604090205460ff16155b1561173a57601e5460ff1661173a5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610c0c565b6005548211158061176357506001600160a01b0384166000908152600b602052604090205460ff165b6117a35760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c0c565b601c546001600160a01b031633148015906117c1575060205460ff16155b80156117d45750602054610100900460ff165b80156117f157506021543060009081526008602052604090205410155b156117fe576117fe611cff565b601d5415801561181b5750601c546001600160a01b038481169116145b15611842576001600160a01b03841660009081526008602052604090205461184257600080fd5b602254601d546118529190612609565b4210801561186e5750601c546001600160a01b03848116911614155b156118d0576001600160a01b0383166000818152600d6020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03871660009081526008909152919091205461192291849061165e565b6001600160a01b038086166000908152600860209081526040808320949094559186168152600b909152205460ff16158015611960575060075460ff165b15611996576006546001600160a01b03841660009081526008602052604090205461198b9084611652565b111561199657600080fd5b6001600160a01b0384166000908152600a602052604081205460ff161580156119d857506001600160a01b0384166000908152600a602052604090205460ff16155b6119e257826119ed565b6119ed858585612163565b6001600160a01b038516600090815260086020526040902054909150611a139082611652565b6001600160a01b038086166000908152600860209081526040808320949094559188168152600c909152205460ff16611abc57601e546001600160a01b0386811660008181526008602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b158015611aa957600080fd5b505af1925050508015611aba575060015b505b6001600160a01b0384166000908152600c602052604090205460ff16611b5257601e546001600160a01b0385811660008181526008602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b158015611b3f57600080fd5b505af1925050508015611b50575060015b505b601e54601f546040516001624d3b8760e01b0319815260048101919091526101009091046001600160a01b03169063ffb2c47990602401600060405180830381600087803b158015611ba357600080fd5b505af1925050508015611bb4575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bfa91815260200190565b60405180910390a3506001949350505050565b6000610e808284612662565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611c6a91849061165e565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611c999083611652565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ced9086815260200190565b60405180910390a35060019392505050565b6020805460ff1916600117815530600090815260089091526040812054601654600e54919291611d4091600291611d3a91908290879061227f565b9061228b565b90506000611d4e8383611c0d565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611d8857611d8861268f565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611ddc57600080fd5b505afa158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1491906122c9565b81600181518110611e2757611e2761268f565b6001600160a01b039283166020918202929092010152601b5460405163791ac94760e01b815291169063791ac94790611e6d908590600090869030904290600401612598565b600060405180830381600087803b158015611e8757600080fd5b505af1158015611e9b573d6000803e3d6000fd5b5050600e5447925060009150611ebf90611eb690600261228b565b60165490611c0d565b90506000611ee16002611d3a84611d3a600e548861227f90919063ffffffff16565b90506000611efe83611d3a6012548761227f90919063ffffffff16565b90506000611f1082610ece8786611c0d565b9050601e60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f6257600080fd5b505af193505050508015611f74575060015b506000611f9085611d3a6014548961227f90919063ffffffff16565b90506000611f9e8383611c0d565b6019546040519192506000916001600160a01b039091169061753090849084818181858888f193505050503d8060008114611ff5576040519150601f19603f3d011682016040523d82523d6000602084013e611ffa565b606091505b5050601a546040519192506000916001600160a01b039091169061753090869084818181858888f193505050503d8060008114612053576040519150601f19603f3d011682016040523d82523d6000602084013e612058565b606091505b5060009350839250508c15905061214a57601b5460185460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990899060c4016060604051808303818588803b1580156120d457600080fd5b505af11580156120e8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061210d919061249e565b505060408051898152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506020805460ff191690555050505050505050505050565b601c5460009081906001600160a01b0385811691161461218557601654612189565b6017545b6001600160a01b0385166000908152600d602052604090205490915060ff161515600114156121ba575060636121e4565b6001600160a01b0385166000908152600d602052604090205460ff161515600114156121e4575060635b60006121f56064611d3a868561227f565b306000908152600860205260409020549091506122129082611652565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122639085815260200190565b60405180910390a36122758482611c0d565b9695505050505050565b6000610e808284612643565b6000610e808284612621565b803580151581146122a757600080fd5b919050565b6000602082840312156122be57600080fd5b8135610e80816126a5565b6000602082840312156122db57600080fd5b8151610e80816126a5565b600080604083850312156122f957600080fd5b8235612304816126a5565b91506020830135612314816126a5565b809150509250929050565b60008060006060848603121561233457600080fd5b833561233f816126a5565b9250602084013561234f816126a5565b9150604084013561235f816126a5565b809150509250925092565b60008060006060848603121561237f57600080fd5b833561238a816126a5565b9250602084013561239a816126a5565b929592945050506040919091013590565b600080604083850312156123be57600080fd5b82356123c9816126a5565b91506123d760208401612297565b90509250929050565b600080604083850312156123f357600080fd5b82356123fe816126a5565b946020939093013593505050565b60006020828403121561241e57600080fd5b610e8082612297565b60008060006060848603121561243c57600080fd5b61244584612297565b92506020840135915061245a60408501612297565b90509250925092565b60006020828403121561247557600080fd5b5035919050565b6000806040838503121561248f57600080fd5b50508035926020909101359150565b6000806000606084860312156124b357600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156124e257600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b8181101561252b5785810183015185820160400152820161250f565b8181111561253d576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125e85784516001600160a01b0316835293830193918301916001016125c3565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561261c5761261c612679565b500190565b60008261263e57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561265d5761265d612679565b500290565b60008282101561267457612674612679565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610dc257600080fdfea264697066735822122004e1b1e780f7e661a2b85162c927314691d9c33ea9357299180d466c18f139ba64736f6c6343000807003360806040526ec097ce7bc90715b34b9f1000000000600a55610e10600b556001600c5534801561002e57600080fd5b50604051610b3a380380610b3a83398101604081905261004d9161007b565b600180546001600160a01b039092166001600160a01b031992831617905560008054909116331790556100ab565b60006020828403121561008d57600080fd5b81516001600160a01b03811681146100a457600080fd5b9392505050565b610a80806100ba6000396000f3fe6080604052600436106100dd5760003560e01c8063997664d71161007f578063e2d2e21911610059578063e2d2e2191461022e578063efca2eed14610244578063ffb2c4791461025a578063ffd49c841461027a57600080fd5b8063997664d7146101b9578063ce7c2ac2146101cf578063d0e30db01461022657600080fd5b806328fd3198116100bb57806328fd31981461014d5780632d48e8961461016d5780633a98ef391461018d5780634fab0ae8146101a357600080fd5b806311ce023d146100e257806314b6ca961461010b57806315f7e05e1461012d575b600080fd5b3480156100ee57600080fd5b506100f8600a5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610918565b610290565b005b34801561013957600080fd5b5061012b6101483660046108fd565b610408565b34801561015957600080fd5b506100f86101683660046108fd565b610414565b34801561017957600080fd5b5061012b61018836600461095b565b61049d565b34801561019957600080fd5b506100f860065481565b3480156101af57600080fd5b506100f8600c5481565b3480156101c557600080fd5b506100f860075481565b3480156101db57600080fd5b5061020b6101ea3660046108fd565b60056020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104bf565b34801561023a57600080fd5b506100f860095481565b34801561025057600080fd5b506100f860085481565b34801561026657600080fd5b5061012b610275366004610942565b610512565b34801561028657600080fd5b506100f8600b5481565b6000546001600160a01b031633146102a757600080fd5b6001600160a01b038216600090815260056020526040902054156102ce576102ce82610612565b6000811180156102f457506001600160a01b038216600090815260056020526040902054155b1561035a57600280546001600160a01b0384166000818152600360205260408120839055600183018455929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b031916909117905561038d565b8015801561037f57506001600160a01b03821660009081526005602052604090205415155b1561038d5761038d8261072d565b6001600160a01b0382166000908152600560205260409020546006546103be9183916103b891610842565b90610855565b6006556001600160a01b03821660009081526005602052604090208190556103e581610861565b6001600160a01b0390921660009081526005602052604090206001019190915550565b61041181610612565b50565b6001600160a01b03811660009081526005602052604081205461043957506000919050565b6001600160a01b03821660009081526005602052604081205461045b90610861565b6001600160a01b03841660009081526005602052604090206001015490915080821161048b575060009392505050565b6104958282610842565b949350505050565b6000546001600160a01b031633146104b457600080fd5b600b91909155600c55565b6000546001600160a01b031633146104d657600080fd5b6007546104e39034610855565b600755600654600a5461050d91610504916104fe9034610884565b90610890565b60095490610855565b600955565b6000546001600160a01b0316331461052957600080fd5b60025480610535575050565b60008060005a90505b848210801561054c57508383105b1561060b5783600d5410610560576000600d555b6105926002600d548154811061057857610578610a34565b6000918252602090912001546001600160a01b031661089c565b156105c9576105c96002600d54815481106105af576105af610a34565b6000918252602090912001546001600160a01b0316610612565b6105de6105d75a8390610842565b8390610855565b91505a600d805491925060006105f3836109ed565b91905055508280610603906109ed565b93505061053e565b5050505050565b6001600160a01b0381166000908152600560205260409020546106325750565b600061063d82610414565b90508015610729576008546106529082610855565b6008556040516000906001600160a01b0384169061753090849084818181858888f193505050503d80600081146106a5576040519150601f19603f3d011682016040523d82523d6000602084013e6106aa565b606091505b505050506001600160a01b038216600090815260046020908152604080832042905560059091528120600201546106e19083610855565b6001600160a01b038416600090815260056020526040902060028101919091555461070b90610861565b6001600160a01b038416600090815260056020526040902060010155505b5050565b6002805461073d906001906109d6565b8154811061074d5761074d610a34565b60009182526020808320909101546001600160a01b038481168452600390925260409092205460028054929093169291811061078b5761078b610a34565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600391829052604081205460028054919392916107d7906001906109d6565b815481106107e7576107e7610a34565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600280548061081d5761081d610a1e565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600061084e82846109d6565b9392505050565b600061084e828461097d565b600061087e600a546104fe6009548561088490919063ffffffff16565b92915050565b600061084e82846109b7565b600061084e8284610995565b600b546001600160a01b038216600090815260046020526040812054909142916108c6919061097d565b10801561087e5750600c546108da83610414565b1192915050565b80356001600160a01b03811681146108f857600080fd5b919050565b60006020828403121561090f57600080fd5b61084e826108e1565b6000806040838503121561092b57600080fd5b610934836108e1565b946020939093013593505050565b60006020828403121561095457600080fd5b5035919050565b6000806040838503121561096e57600080fd5b50508035926020909101359150565b6000821982111561099057610990610a08565b500190565b6000826109b257634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156109d1576109d1610a08565b500290565b6000828210156109e8576109e8610a08565b500390565b6000600019821415610a0157610a01610a08565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea26469706673582212200d814dd1104b2c241fa1621241074dac499f4cfaa2b0592f14c517a5bb8a88af64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106103a65760003560e01c806370a08231116101e7578063bad3ea6a1161010d578063dd62ed3e116100a0578063f887ea401161006f578063f887ea4014610b01578063fabe628314610b21578063fe9fbb8014610b41578063ffb54a9914610b6157600080fd5b8063dd62ed3e14610a5b578063e2dd8ca014610aa1578063f0b37c0414610ac1578063f2fde38b14610ae157600080fd5b8063d829d3f8116100dc578063d829d3f8146109e5578063d920334e14610a05578063da00097d14610a25578063dbe1c4d514610a4557600080fd5b8063bad3ea6a1461096a578063bf56b3711461098f578063c04a5414146109a5578063ca33e64c146109c557600080fd5b80638b42507f11610185578063a8aa1b3111610154578063a8aa1b31146108ea578063a9059cbb1461090a578063a9f7864b1461092a578063b6a5d7de1461094a57600080fd5b80638b42507f1461086157806395d89b411461089157806398118cb4146108be578063a5f3d003146108d457600080fd5b80637d1db4a5116101c15780637d1db4a5146107f75780637db1342c1461080d578063807c2d9c1461082d578063893d20e81461084357600080fd5b806370a082311461076957806375f0a8741461079f578063773fcb5c146107d757600080fd5b8063313ce567116102cc57806344de2e4c1161026a578063531484161161023957806353148416146106fd578063571ac8b014610713578063650c4226146107335780636b67c4df1461075357600080fd5b806344de2e4c1461068f578063479f66d8146106a95780634a74bb02146106c95780634e71d92d146106e857600080fd5b80633bbac579116102a65780633bbac579146105df5780633f4218e01461060f5780634102eedc1461063f5780634355855a1461065f57600080fd5b8063313ce56714610583578063315dca291461059f57806334c70889146105bf57600080fd5b806313374e7a1161034457806323b872dd1161031357806323b872dd146105095780632b112e49146105295780632bb14e1d1461053e5780632f54bf6e1461055457600080fd5b806313374e7a146104b257806318160ddd146104c85780631bb61f06146104dd5780631df4ccfc146104f357600080fd5b8063095ea7b311610380578063095ea7b31461042a57806309ad803d1461045a5780630d2959801461047c5780631107b3a51461049c57600080fd5b806303898c17146103b25780630445b667146103db57806306fdde03146103f157600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c860135481565b6040519081526020015b60405180910390f35b3480156103e757600080fd5b506103c860215481565b3480156103fd57600080fd5b506040805180820190915260078152667343524f6f676560c81b60208201525b6040516103d291906124fe565b34801561043657600080fd5b5061044a6104453660046123e0565b610b7b565b60405190151581526020016103d2565b34801561046657600080fd5b5061047a6104753660046124cc565b610be7565b005b34801561048857600080fd5b5061047a61049736600461240c565b610d83565b3480156104a857600080fd5b506103c8600f5481565b3480156104be57600080fd5b506103c860115481565b3480156104d457600080fd5b506004546103c8565b3480156104e957600080fd5b506103c860155481565b3480156104ff57600080fd5b506103c860165481565b34801561051557600080fd5b5061044a61052436600461236a565b610dc5565b34801561053557600080fd5b506103c8610e87565b34801561054a57600080fd5b506103c860125481565b34801561056057600080fd5b5061044a61056f3660046122ac565b6000546001600160a01b0391821691161490565b34801561058f57600080fd5b50604051600981526020016103d2565b3480156105ab57600080fd5b5061047a6105ba36600461231f565b610ed9565b3480156105cb57600080fd5b5061047a6105da366004612427565b610f3d565b3480156105eb57600080fd5b5061044a6105fa3660046122ac565b600d6020526000908152604090205460ff1681565b34801561061b57600080fd5b5061044a61062a3660046122ac565b600a6020526000908152604090205460ff1681565b34801561064b57600080fd5b5061047a61065a3660046123ab565b610f98565b34801561066b57600080fd5b5061044a61067a3660046122ac565b600c6020526000908152604090205460ff1681565b34801561069b57600080fd5b5060075461044a9060ff1681565b3480156106b557600080fd5b5061047a6106c4366004612463565b610fe8565b3480156106d557600080fd5b5060205461044a90610100900460ff1681565b3480156106f457600080fd5b5061047a611021565b34801561070957600080fd5b506103c860175481565b34801561071f57600080fd5b5061044a61072e3660046122ac565b611084565b34801561073f57600080fd5b5061047a61074e3660046124cc565b611098565b34801561075f57600080fd5b506103c860105481565b34801561077557600080fd5b506103c86107843660046122ac565b6001600160a01b031660009081526008602052604090205490565b3480156107ab57600080fd5b506019546107bf906001600160a01b031681565b6040516001600160a01b0390911681526020016103d2565b3480156107e357600080fd5b5061047a6107f23660046123ab565b611222565b34801561080357600080fd5b506103c860055481565b34801561081957600080fd5b5061047a610828366004612463565b611363565b34801561083957600080fd5b506103c860065481565b34801561084f57600080fd5b506000546001600160a01b03166107bf565b34801561086d57600080fd5b5061044a61087c3660046122ac565b600b6020526000908152604090205460ff1681565b34801561089d57600080fd5b506040805180820190915260048152637343524f60e01b602082015261041d565b3480156108ca57600080fd5b506103c8600e5481565b3480156108e057600080fd5b506103c860145481565b3480156108f657600080fd5b50601c546107bf906001600160a01b031681565b34801561091657600080fd5b5061044a6109253660046123e0565b61138d565b34801561093657600080fd5b5061047a61094536600461247c565b61139a565b34801561095657600080fd5b5061047a6109653660046122ac565b6113fb565b34801561097657600080fd5b50601e546107bf9061010090046001600160a01b031681565b34801561099b57600080fd5b506103c8601d5481565b3480156109b157600080fd5b50601a546107bf906001600160a01b031681565b3480156109d157600080fd5b506018546107bf906001600160a01b031681565b3480156109f157600080fd5b5061047a610a0036600461240c565b61144c565b348015610a1157600080fd5b5061047a610a20366004612463565b611484565b348015610a3157600080fd5b5060205461044a9062010000900460ff1681565b348015610a5157600080fd5b506103c860225481565b348015610a6757600080fd5b506103c8610a763660046122e6565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610aad57600080fd5b5061047a610abc3660046123ab565b6114ae565b348015610acd57600080fd5b5061047a610adc3660046122ac565b611503565b348015610aed57600080fd5b5061047a610afc3660046122ac565b61154e565b348015610b0d57600080fd5b50601b546107bf906001600160a01b031681565b348015610b2d57600080fd5b5061047a610b3c3660046123ab565b6115e4565b348015610b4d57600080fd5b5061044a610b5c3660046122ac565b611634565b348015610b6d57600080fd5b50601e5461044a9060ff1681565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bd69086815260200190565b60405180910390a350600192915050565b610bf033611634565b610c155760405162461bcd60e51b8152600401610c0c90612573565b60405180910390fd5b600a841115610c795760405162461bcd60e51b815260206004820152602a60248201527f4c5020546178206f6e2073656c6c732063616e206e6f7420626520686967686560448201526972207468616e2031302560b01b6064820152608401610c0c565b600a821115610ce45760405162461bcd60e51b815260206004820152603160248201527f4d61726b6574696e6720546178206f6e2073656c6c732063616e206e6f7420626044820152706520686967686572207468616e2031302560781b6064820152608401610c0c565b6002811115610d505760405162461bcd60e51b815260206004820152603260248201527f646576656c6f706d656e7420546178206f6e2073656c6c732063616e206e6f7460448201527120626520686967686572207468616e20322560701b6064820152608401610c0c565b600f849055601383905560118290556015819055610d7a83610d7483818887611652565b90611652565b60175550505050565b6000546001600160a01b03163314610dad5760405162461bcd60e51b8152600401610c0c90612553565b601e805460ff191682151517905542601d5550565b50565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610e72576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610e4d91849061165e565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610e7d84848461168a565b90505b9392505050565b6003546001600160a01b0316600090815260086020526040812054610ed4906002546001600160a01b0316600090815260086020526040902054610ece9060045490611c0d565b90611c0d565b905090565b610ee233611634565b610efe5760405162461bcd60e51b8152600401610c0c90612573565b601880546001600160a01b039485166001600160a01b0319918216179091556019805493851693821693909317909255601a8054919093169116179055565b610f4633611634565b610f625760405162461bcd60e51b8152600401610c0c90612573565b60208054602193909355901515620100000262ff000019931515610100029390931662ffff001990921691909117919091179055565b610fa133611634565b610fbd5760405162461bcd60e51b8152600401610c0c90612573565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610ff133611634565b61100d5760405162461bcd60e51b8152600401610c0c90612573565b620b71b0811061101c57600080fd5b601f55565b601e54604051630afbf02f60e11b81523360048201526101009091046001600160a01b0316906315f7e05e90602401600060405180830381600087803b15801561106a57600080fd5b505af115801561107e573d6000803e3d6000fd5b50505050565b600061109282600019610b7b565b92915050565b6110a133611634565b6110bd5760405162461bcd60e51b8152600401610c0c90612573565b600a8411156111205760405162461bcd60e51b815260206004820152602960248201527f4c5020546178206f6e20627579732063616e206e6f7420626520686967686572604482015268207468616e2031302560b81b6064820152608401610c0c565b600a82111561118a5760405162461bcd60e51b815260206004820152603060248201527f4d61726b6574696e6720546178206f6e20627579732063616e206e6f7420626560448201526f20686967686572207468616e2031302560801b6064820152608401610c0c565b60028111156111f55760405162461bcd60e51b815260206004820152603160248201527f646576656c6f706d656e7420546178206f6e20627579732063616e206e6f7420604482015270626520686967686572207468616e20322560781b6064820152608401610c0c565b600e84905560128390556010829055601481905561121983610d7483818887611652565b60165550505050565b61122b33611634565b6112475760405162461bcd60e51b8152600401610c0c90612573565b6001600160a01b038216301480159061126e5750601c546001600160a01b03838116911614155b61127757600080fd5b6001600160a01b0382166000908152600c60205260409020805460ff1916821580159190911790915561131557601e54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152610100909204909116906314b6ca96906044015b600060405180830381600087803b1580156112f957600080fd5b505af115801561130d573d6000803e3d6000fd5b505050505050565b601e546001600160a01b0383811660008181526008602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca96906044016112df565b61136c33611634565b6113885760405162461bcd60e51b8152600401610c0c90612573565b600655565b6000610e8033848461168a565b6113a333611634565b6113bf5760405162461bcd60e51b8152600401610c0c90612573565b601e546040516316a4744b60e11b815260048101849052602481018390526101009091046001600160a01b031690632d48e896906044016112df565b6000546001600160a01b031633146114255760405162461bcd60e51b8152600401610c0c90612553565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61145533611634565b6114715760405162461bcd60e51b8152600401610c0c90612573565b6007805460ff1916911515919091179055565b61148d33611634565b6114a95760405162461bcd60e51b8152600401610c0c90612573565b600555565b6000546001600160a01b031633146114d85760405162461bcd60e51b8152600401610c0c90612553565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461152d5760405162461bcd60e51b8152600401610c0c90612553565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146115785760405162461bcd60e51b8152600401610c0c90612553565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6115ed33611634565b6116095760405162461bcd60e51b8152600401610c0c90612573565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000610e808284612609565b600081848411156116825760405162461bcd60e51b8152600401610c0c91906124fe565b505050900390565b60205460009060ff16156116aa576116a3848484611c19565b9050610e80565b6001600160a01b03841660009081526001602052604090205460ff161580156116ec57506001600160a01b03831660009081526001602052604090205460ff16155b1561173a57601e5460ff1661173a5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610c0c565b6005548211158061176357506001600160a01b0384166000908152600b602052604090205460ff165b6117a35760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c0c565b601c546001600160a01b031633148015906117c1575060205460ff16155b80156117d45750602054610100900460ff165b80156117f157506021543060009081526008602052604090205410155b156117fe576117fe611cff565b601d5415801561181b5750601c546001600160a01b038481169116145b15611842576001600160a01b03841660009081526008602052604090205461184257600080fd5b602254601d546118529190612609565b4210801561186e5750601c546001600160a01b03848116911614155b156118d0576001600160a01b0383166000818152600d6020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03871660009081526008909152919091205461192291849061165e565b6001600160a01b038086166000908152600860209081526040808320949094559186168152600b909152205460ff16158015611960575060075460ff165b15611996576006546001600160a01b03841660009081526008602052604090205461198b9084611652565b111561199657600080fd5b6001600160a01b0384166000908152600a602052604081205460ff161580156119d857506001600160a01b0384166000908152600a602052604090205460ff16155b6119e257826119ed565b6119ed858585612163565b6001600160a01b038516600090815260086020526040902054909150611a139082611652565b6001600160a01b038086166000908152600860209081526040808320949094559188168152600c909152205460ff16611abc57601e546001600160a01b0386811660008181526008602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b158015611aa957600080fd5b505af1925050508015611aba575060015b505b6001600160a01b0384166000908152600c602052604090205460ff16611b5257601e546001600160a01b0385811660008181526008602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b158015611b3f57600080fd5b505af1925050508015611b50575060015b505b601e54601f546040516001624d3b8760e01b0319815260048101919091526101009091046001600160a01b03169063ffb2c47990602401600060405180830381600087803b158015611ba357600080fd5b505af1925050508015611bb4575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bfa91815260200190565b60405180910390a3506001949350505050565b6000610e808284612662565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611c6a91849061165e565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611c999083611652565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ced9086815260200190565b60405180910390a35060019392505050565b6020805460ff1916600117815530600090815260089091526040812054601654600e54919291611d4091600291611d3a91908290879061227f565b9061228b565b90506000611d4e8383611c0d565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611d8857611d8861268f565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611ddc57600080fd5b505afa158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1491906122c9565b81600181518110611e2757611e2761268f565b6001600160a01b039283166020918202929092010152601b5460405163791ac94760e01b815291169063791ac94790611e6d908590600090869030904290600401612598565b600060405180830381600087803b158015611e8757600080fd5b505af1158015611e9b573d6000803e3d6000fd5b5050600e5447925060009150611ebf90611eb690600261228b565b60165490611c0d565b90506000611ee16002611d3a84611d3a600e548861227f90919063ffffffff16565b90506000611efe83611d3a6012548761227f90919063ffffffff16565b90506000611f1082610ece8786611c0d565b9050601e60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f6257600080fd5b505af193505050508015611f74575060015b506000611f9085611d3a6014548961227f90919063ffffffff16565b90506000611f9e8383611c0d565b6019546040519192506000916001600160a01b039091169061753090849084818181858888f193505050503d8060008114611ff5576040519150601f19603f3d011682016040523d82523d6000602084013e611ffa565b606091505b5050601a546040519192506000916001600160a01b039091169061753090869084818181858888f193505050503d8060008114612053576040519150601f19603f3d011682016040523d82523d6000602084013e612058565b606091505b5060009350839250508c15905061214a57601b5460185460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990899060c4016060604051808303818588803b1580156120d457600080fd5b505af11580156120e8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061210d919061249e565b505060408051898152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506020805460ff191690555050505050505050505050565b601c5460009081906001600160a01b0385811691161461218557601654612189565b6017545b6001600160a01b0385166000908152600d602052604090205490915060ff161515600114156121ba575060636121e4565b6001600160a01b0385166000908152600d602052604090205460ff161515600114156121e4575060635b60006121f56064611d3a868561227f565b306000908152600860205260409020549091506122129082611652565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122639085815260200190565b60405180910390a36122758482611c0d565b9695505050505050565b6000610e808284612643565b6000610e808284612621565b803580151581146122a757600080fd5b919050565b6000602082840312156122be57600080fd5b8135610e80816126a5565b6000602082840312156122db57600080fd5b8151610e80816126a5565b600080604083850312156122f957600080fd5b8235612304816126a5565b91506020830135612314816126a5565b809150509250929050565b60008060006060848603121561233457600080fd5b833561233f816126a5565b9250602084013561234f816126a5565b9150604084013561235f816126a5565b809150509250925092565b60008060006060848603121561237f57600080fd5b833561238a816126a5565b9250602084013561239a816126a5565b929592945050506040919091013590565b600080604083850312156123be57600080fd5b82356123c9816126a5565b91506123d760208401612297565b90509250929050565b600080604083850312156123f357600080fd5b82356123fe816126a5565b946020939093013593505050565b60006020828403121561241e57600080fd5b610e8082612297565b60008060006060848603121561243c57600080fd5b61244584612297565b92506020840135915061245a60408501612297565b90509250925092565b60006020828403121561247557600080fd5b5035919050565b6000806040838503121561248f57600080fd5b50508035926020909101359150565b6000806000606084860312156124b357600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156124e257600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b8181101561252b5785810183015185820160400152820161250f565b8181111561253d576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125e85784516001600160a01b0316835293830193918301916001016125c3565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561261c5761261c612679565b500190565b60008261263e57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561265d5761265d612679565b500290565b60008282101561267457612674612679565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610dc257600080fdfea264697066735822122004e1b1e780f7e661a2b85162c927314691d9c33ea9357299180d466c18f139ba64736f6c63430008070033
Deployed ByteCode Sourcemap
21004:14155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22118:33;;;;;;;;;;;;;;;;;;;12525:25:1;;;12513:2;12498:18;22118:33:0;;;;;;;;22902:53;;;;;;;;;;;;;;;;24455:71;;;;;;;;;;-1:-1:-1;24518:5:0;;;;;;;;;;;;-1:-1:-1;;;24518:5:0;;;;24455:71;;;;;;;:::i;25266:216::-;;;;;;;;;;-1:-1:-1;25266:216:0;;;;;:::i;:::-;;:::i;:::-;;;6597:14:1;;6590:22;6572:41;;6560:2;6545:18;25266:216:0;6432:187:1;27805:835:0;;;;;;;;;;-1:-1:-1;27805:835:0;;;;;:::i;:::-;;:::i;:::-;;32867:117;;;;;;;;;;-1:-1:-1;32867:117:0;;;;;:::i;:::-;;:::i;21956:35::-;;;;;;;;;;;;;;;;22038;;;;;;;;;;;;;;;;24692:88;;;;;;;;;;-1:-1:-1;24765:12:0;;24692:88;;22200:37;;;;;;;;;;;;;;;;22246:27;;;;;;;;;;;;;;;;29756:370;;;;;;;;;;-1:-1:-1;29756:370:0;;;;;:::i;:::-;;:::i;24864:142::-;;;;;;;;;;;;;:::i;22082:29::-;;;;;;;;;;;;;;;;20548:103;;;;;;;;;;-1:-1:-1;20548:103:0;;;;;:::i;:::-;20603:4;20638:5;-1:-1:-1;;;;;20627:16:0;;;20638:5;;20627:16;;20548:103;24614:72;;;;;;;;;;-1:-1:-1;24614:72:0;;21224:1;13941:36:1;;13929:2;13914:18;24614:72:0;13799:184:1;28648:297:0;;;;;;;;;;-1:-1:-1;28648:297:0;;;;;:::i;:::-;;:::i;28953:276::-;;;;;;;;;;-1:-1:-1;28953:276:0;;;;;:::i;:::-;;:::i;21872:37::-;;;;;;;;;;-1:-1:-1;21872:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21708:44;;;;;;;;;;-1:-1:-1;21708:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26410:119;;;;;;;;;;-1:-1:-1;26410:119:0;;;;;:::i;:::-;;:::i;21814:49::-;;;;;;;;;;-1:-1:-1;21814:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21551:33;;;;;;;;;;-1:-1:-1;21551:33:0;;;;;;;;29445:139;;;;;;;;;;-1:-1:-1;29445:139:0;;;;;:::i;:::-;;:::i;22801:40::-;;;;;;;;;;-1:-1:-1;22801:40:0;;;;;;;;;;;25718:92;;;;;;;;;;;;;:::i;22280:31::-;;;;;;;;;;;;;;;;25490:122;;;;;;;;;;-1:-1:-1;25490:122:0;;;;;:::i;:::-;;:::i;27052:745::-;;;;;;;;;;-1:-1:-1;27052:745:0;;;;;:::i;:::-;;:::i;22000:31::-;;;;;;;;;;;;;;;;25014:105;;;;;;;;;;-1:-1:-1;25014:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;25098:18:0;25080:7;25098:18;;;:9;:18;;;;;;;25014:105;22379:75;;;;;;;;;;-1:-1:-1;22379:75:0;;;;-1:-1:-1;;;;;22379:75:0;;;;;;-1:-1:-1;;;;;4994:32:1;;;4976:51;;4964:2;4949:18;22379:75:0;4830:203:1;26676:368:0;;;;;;;;;;-1:-1:-1;26676:368:0;;;;;:::i;:::-;;:::i;21425:56::-;;;;;;;;;;;;;;;;26185:106;;;;;;;;;;-1:-1:-1;26185:106:0;;;;;:::i;:::-;;:::i;21488:54::-;;;;;;;;;;;;;;;;24786:70;;;;;;;;;;-1:-1:-1;24830:7:0;24848:5;-1:-1:-1;;;;;24848:5:0;24786:70;;21759:48;;;;;;;;;;-1:-1:-1;21759:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24532:76;;;;;;;;;;-1:-1:-1;24598:7:0;;;;;;;;;;;;-1:-1:-1;;;24598:7:0;;;;24532:76;;21918:31;;;;;;;;;;;;;;;;22160:33;;;;;;;;;;;;;;;;22580:19;;;;;;;;;;-1:-1:-1;22580:19:0;;;;-1:-1:-1;;;;;22580:19:0;;;29592:156;;;;;;;;;;-1:-1:-1;29592:156:0;;;;;:::i;:::-;;:::i;29237:200::-;;;;;;;;;;-1:-1:-1;29237:200:0;;;;;:::i;:::-;;:::i;20341:94::-;;;;;;;;;;-1:-1:-1;20341:94:0;;;;;:::i;:::-;;:::i;22680:46::-;;;;;;;;;;-1:-1:-1;22680:46:0;;;;;;;-1:-1:-1;;;;;22680:46:0;;;22608:25;;;;;;;;;;;;;;;;22461:77;;;;;;;;;;-1:-1:-1;22461:77:0;;;;-1:-1:-1;;;;;22461:77:0;;;22320:52;;;;;;;;;;-1:-1:-1;22320:52:0;;;;-1:-1:-1;;;;;22320:52:0;;;26299:103;;;;;;;;;;-1:-1:-1;26299:103:0;;;;;:::i;:::-;;:::i;25900:::-;;;;;;;;;;-1:-1:-1;25900:103:0;;;;;:::i;:::-;;:::i;22848:45::-;;;;;;;;;;-1:-1:-1;22848:45:0;;;;;;;;;;;22964:29;;;;;;;;;;;;;;;;25125:133;;;;;;;;;;-1:-1:-1;25125:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;25227:19:0;;;25209:7;25227:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;25125:133;33040:120;;;;;;;;;;-1:-1:-1;33040:120:0;;;;;:::i;:::-;;:::i;20443:97::-;;;;;;;;;;-1:-1:-1;20443:97:0;;;;;:::i;:::-;;:::i;20774:173::-;;;;;;;;;;-1:-1:-1;20774:173:0;;;;;:::i;:::-;;:::i;22547:26::-;;;;;;;;;;-1:-1:-1;22547:26:0;;;;-1:-1:-1;;;;;22547:26:0;;;26537:131;;;;;;;;;;-1:-1:-1;26537:131:0;;;;;:::i;:::-;;:::i;20659:107::-;;;;;;;;;;-1:-1:-1;20659:107:0;;;;;:::i;:::-;;:::i;22640:31::-;;;;;;;;;;-1:-1:-1;22640:31:0;;;;;;;;25266:216;25370:10;25341:4;25358:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;25358:32:0;;;;;;;;;;:41;;;25415:37;25341:4;;25358:32;;25415:37;;;;25393:6;12525:25:1;;12513:2;12498:18;;12379:177;25415:37:0;;;;;;;;-1:-1:-1;25470:4:0;25266:216;;;;:::o;27805:835::-;20282:24;20295:10;20282:12;:24::i;:::-;20274:48;;;;-1:-1:-1;;;20274:48:0;;;;;;;:::i;:::-;;;;;;;;;27994:2:::1;27977:13;:19;;27969:74;;;::::0;-1:-1:-1;;;27969:74:0;;9070:2:1;27969:74:0::1;::::0;::::1;9052:21:1::0;9109:2;9089:18;;;9082:30;9148:34;9128:18;;;9121:62;-1:-1:-1;;;9199:18:1;;;9192:40;9249:19;;27969:74:0::1;8868:406:1::0;27969:74:0::1;28085:2;28062:19;:25;;28054:87;;;::::0;-1:-1:-1;;;28054:87:0;;9830:2:1;28054:87:0::1;::::0;::::1;9812:21:1::0;9869:2;9849:18;;;9842:30;9908:34;9888:18;;;9881:62;-1:-1:-1;;;9959:18:1;;;9952:47;10016:19;;28054:87:0::1;9628:413:1::0;28054:87:0::1;28185:1;28160:21;:26;;28152:89;;;::::0;-1:-1:-1;;;28152:89:0;;11405:2:1;28152:89:0::1;::::0;::::1;11387:21:1::0;11444:2;11424:18;;;11417:30;11483:34;11463:18;;;11456:62;-1:-1:-1;;;11534:18:1;;;11527:48;11592:19;;28152:89:0::1;11203:414:1::0;28152:89:0::1;28344:16;:32:::0;;;28387:14:::1;:33:::0;;;28431:16:::1;:38:::0;;;28480:18:::1;:42:::0;;;28550:82:::1;28404:16:::0;28550:62:::1;28501:21:::0;28550:62;28363:13;28450:19;28550:20:::1;:38::i;:::-;:42:::0;::::1;:62::i;:82::-;28535:12;:97:::0;-1:-1:-1;;;;27805:835:0:o;32867:117::-;20603:4;20638:5;-1:-1:-1;;;;;20638:5:0;20200:10;20627:16;20184:38;;;;-1:-1:-1;;;20184:38:0;;;;;;;:::i;:::-;32934:11:::1;:23:::0;;-1:-1:-1;;32934:23:0::1;::::0;::::1;;;::::0;;25869:15;25856:10;:28;32867:117;:::o;32968:8::-:1;32867:117:::0;:::o;29756:370::-;-1:-1:-1;;;;;29878:19:0;;29856:4;29878:19;;;:11;:19;;;;;;;;29898:10;29878:31;;;;;;;;-1:-1:-1;;29878:52:0;29875:186;;29980:69;;;;;;;;;;;-1:-1:-1;;;29980:69:0;;;;;;;;-1:-1:-1;;;;;29980:19:0;;-1:-1:-1;29980:19:0;;;:11;:19;;;;;30000:10;29980:31;;;;;;;;;;:69;;30016:6;;29980:35;:69::i;:::-;-1:-1:-1;;;;;29946:19:0;;;;;;:11;:19;;;;;;;;29966:10;29946:31;;;;;;;:103;29875:186;30078:40;30092:6;30100:9;30111:6;30078:13;:40::i;:::-;30071:47;;29756:370;;;;;;:::o;24864:142::-;24992:4;;-1:-1:-1;;;;;24992:4:0;24917:7;25098:18;;;:9;:18;;;;;;24944:54;;24971:4;;-1:-1:-1;;;;;24971:4:0;25080:7;25098:18;;;:9;:18;;;;;;24944:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;24937:61;;24864:142;:::o;28648:297::-;20282:24;20295:10;20282:12;:24::i;:::-;20274:48;;;;-1:-1:-1;;;20274:48:0;;;;;;;:::i;:::-;28795:21:::1;:44:::0;;-1:-1:-1;;;;;28795:44:0;;::::1;-1:-1:-1::0;;;;;;28795:44:0;;::::1;;::::0;;;28850:15:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;28897:17:::1;:40:::0;;;;;::::1;::::0;::::1;;::::0;;28648:297::o;28953:276::-;20282:24;20295:10;20282:12;:24::i;:::-;20274:48;;;;-1:-1:-1;;;20274:48:0;;;;;;;:::i;:::-;29085:21:::1;:39:::0;;29135:13:::1;:32:::0;;;;29178:43;::::1;;::::0;::::1;-1:-1:-1::0;;29085:39:0;::::1;;;;29178:43:::0;;;;-1:-1:-1;;29178:43:0;;;;;;;;;;::::1;::::0;;28953:276::o;26410:119::-;20282:24;20295:10;20282:12;:24::i;:::-;20274:48;;;;-1:-1:-1;;;20274:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26493:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;26493:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26410:119::o;29445:139::-;20282:24;20295:10;20282:12;:24::i;:::-;20274:48;;;;-1:-1:-1;;;20274:48:0;;;;;;;:::i;:::-;29538:6:::1;29532:3;:12;29524:21;;;::::0;::::1;;29556:14;:20:::0;29445:139::o;25718:92::-;25753:19;;:45;;-1:-1:-1;;;25753:45:0;;25787:10;25753:45;;;4976:51:1;25753:19:0;;;;-1:-1:-1;;;;;25753:19:0;;:33;;4949:18:1;;25753:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25718:92::o;25490:122::-;25545:4;25569:35;25577:7;-1:-1:-1;;25569:7:0;:35::i;:::-;25562:42;25490:122;-1:-1:-1;;25490:122:0:o;27052:745::-;20282:24;20295:10;20282:12;:24::i;:::-;20274:48;;;;-1:-1:-1;;;20274:48:0;;;;;;;:::i;:::-;27219:2:::1;27206:9;:15;;27198:69;;;::::0;-1:-1:-1;;;27198:69:0;;10248:2:1;27198:69:0::1;::::0;::::1;10230:21:1::0;10287:2;10267:18;;;10260:30;10326:34;10306:18;;;10299:62;-1:-1:-1;;;10377:18:1;;;10370:39;10426:19;;27198:69:0::1;10046:405:1::0;27198:69:0::1;27305:2;27286:15;:21;;27278:82;;;::::0;-1:-1:-1;;;27278:82:0;;11824:2:1;27278:82:0::1;::::0;::::1;11806:21:1::0;11863:2;11843:18;;;11836:30;11902:34;11882:18;;;11875:62;-1:-1:-1;;;11953:18:1;;;11946:46;12009:19;;27278:82:0::1;11622:412:1::0;27278:82:0::1;27400:1;27379:17;:22;;27371:84;;;::::0;-1:-1:-1;;;27371:84:0;;7892:2:1;27371:84:0::1;::::0;::::1;7874:21:1::0;7931:2;7911:18;;;7904:30;7970:34;7950:18;;;7943:62;-1:-1:-1;;;8021:18:1;;;8014:47;8078:19;;27371:84:0::1;7690:413:1::0;27371:84:0::1;27553:12;:24:::0;;;27588:10:::1;:25:::0;;;27624:12:::1;:30:::0;;;27665:14:::1;:34:::0;;;27723:66:::1;27601:12:::0;27723:50:::1;27682:17:::0;27723:50;27568:9;27639:15;27723:16:::1;:30::i;:66::-;27712:8;:77:::0;-1:-1:-1;;;;27052:745:0:o;26676:368::-;20282:24;20295:10;20282:12;:24::i;:::-;20274:48;;;;-1:-1:-1;;;20274:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26776:23:0;::::1;26794:4;26776:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;26813:4:0::1;::::0;-1:-1:-1;;;;;26803:14:0;;::::1;26813:4:::0;::::1;26803:14;;26776:41;26768:50;;;::::0;::::1;;-1:-1:-1::0;;;;;26829:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;26829:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;26875:162:::1;;26900:19;::::0;:39:::1;::::0;-1:-1:-1;;;26900:39:0;;-1:-1:-1;;;;;5454:32:1;;;26900:39:0::1;::::0;::::1;5436:51:1::0;26937:1:0::1;5503:18:1::0;;;5496:34;26900:19:0::1;::::0;;::::1;::::0;;::::1;::::0;:28:::1;::::0;5409:18:1;;26900:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26676:368:::0;;:::o;26875:162::-:1;26970:19;::::0;-1:-1:-1;;;;;27007:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;;26970:55;;-1:-1:-1;;;26970:55:0;;::::1;::::0;::::1;5436:51:1::0;;;;5503:18;;;5496:34;26970:19:0::1;::::0;;::::1;;::::0;:28:::1;::::0;5409:18:1;;26970:55:0::1;5254:282:1::0;26185:106:0;20282:24;20295:10;20282:12;:24::i;:::-;20274:48;;;;-1:-1:-1;;;20274:48:0;;;;;;;:::i;:::-;26261:10:::1;:22:::0;26185:106::o;29592:156::-;29672:4;29696:44;29710:10;29722:9;29733:6;29696:13;:44::i;29237:200::-;20282:24;20295:10;20282:12;:24::i;:::-;20274:48;;;;-1:-1:-1;;;20274:48:0;;;;;;;:::i;:::-;29353:19:::1;::::0;:76:::1;::::0;-1:-1:-1;;;29353:76:0;;::::1;::::0;::::1;13720:25:1::0;;;13761:18;;;13754:34;;;29353:19:0::1;::::0;;::::1;-1:-1:-1::0;;;;;29353:19:0::1;::::0;:43:::1;::::0;13693:18:1;;29353:76:0::1;13546:248:1::0;20341:94:0;20603:4;20638:5;-1:-1:-1;;;;;20638:5:0;20200:10;20627:16;20184:38;;;;-1:-1:-1;;;20184:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20401:19:0::1;;::::0;;;20423:4:::1;20401:19;::::0;;;;;;;:26;;-1:-1:-1;;20401:26:0::1;::::0;;::::1;::::0;;20341:94::o;26299:103::-;20282:24;20295:10;20282:12;:24::i;:::-;20274:48;;;;-1:-1:-1;;;20274:48:0;;;;;;;:::i;:::-;26369:14:::1;:25:::0;;-1:-1:-1;;26369:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26299:103::o;25900:::-;20282:24;20295:10;20282:12;:24::i;:::-;20274:48;;;;-1:-1:-1;;;20274:48:0;;;;;;;:::i;:::-;25972:12:::1;:23:::0;25900:103::o;33040:120::-;20603:4;20638:5;-1:-1:-1;;;;;20638:5:0;20200:10;20627:16;20184:38;;;;-1:-1:-1;;;20184:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33127:17:0;;;::::1;;::::0;;;:5:::1;:17;::::0;;;;:25;;-1:-1:-1;;33127:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33040:120::o;20443:97::-;20603:4;20638:5;-1:-1:-1;;;;;20638:5:0;20200:10;20627:16;20184:38;;;;-1:-1:-1;;;20184:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20505:19:0::1;20527:5;20505:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;20505:27:0::1;::::0;;20443:97::o;20774:173::-;20603:4;20638:5;-1:-1:-1;;;;;20638:5:0;20200:10;20627:16;20184:38;;;;-1:-1:-1;;;20184:38:0;;;;;;;:::i;:::-;20850:5:::1;:11:::0;;-1:-1:-1;;;;;;20850:11:0::1;-1:-1:-1::0;;;;;20850:11:0;::::1;::::0;;::::1;::::0;;20872:19;;;-1:-1:-1;20872:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;20872:26:0::1;::::0;;::::1;::::0;;;20914:25;;4976:51:1;;;20914:25:0::1;::::0;4949:18:1;20914:25:0::1;;;;;;;20774:173:::0;:::o;26537:131::-;20282:24;20295:10;20282:12;:24::i;:::-;20274:48;;;;-1:-1:-1;;;20274:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26628:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;26628:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26537:131::o;20659:107::-;-1:-1:-1;;;;;20739:19:0;20715:4;20739:19;;;:14;:19;;;;;;;;;20659:107::o;13089:98::-;13147:7;13174:5;13178:1;13174;:5;:::i;13619:240::-;13739:7;13800:12;13792:6;;;;13784:29;;;;-1:-1:-1;;;13784:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;13835:5:0;;;13619:240::o;30134:1787::-;30248:16;;30226:4;;30248:16;;30245:73;;;30274:41;30289:6;30297:9;30308:6;30274:14;:41::i;:::-;30267:48;;;;30245:73;-1:-1:-1;;;;;30334:22:0;;;;;;:14;:22;;;;;;;;30333:23;:53;;;;-1:-1:-1;;;;;;30361:25:0;;;;;;:14;:25;;;;;;;;30360:26;30333:53;30330:128;;;30410:11;;;;30402:44;;;;-1:-1:-1;;;30402:44:0;;9481:2:1;30402:44:0;;;9463:21:1;9520:2;9500:18;;;9493:30;-1:-1:-1;;;9539:18:1;;;9532:50;9599:18;;30402:44:0;9279:344:1;30402:44:0;30488:12;;30478:6;:22;;:49;;;-1:-1:-1;;;;;;30504:23:0;;;;;;:15;:23;;;;;;;;30478:49;30470:79;;;;-1:-1:-1;;;30470:79:0;;8310:2:1;30470:79:0;;;8292:21:1;8349:2;8329:18;;;8322:30;-1:-1:-1;;;8368:18:1;;;8361:47;8425:18;;30470:79:0;8108:341:1;30470:79:0;30579:4;;-1:-1:-1;;;;;30579:4:0;30565:10;:18;;;;:39;;-1:-1:-1;30588:16:0;;;;30587:17;30565:39;:64;;;;-1:-1:-1;30608:21:0;;;;;;;30565:64;:109;;;;-1:-1:-1;30661:13:0;;30651:4;30633:24;;;;:9;:24;;;;;;:41;;30565:109;30562:128;;;30677:10;:8;:10::i;:::-;25687;;:15;;;30705:32;;-1:-1:-1;30733:4:0;;-1:-1:-1;;;;;30720:17:0;;;30733:4;;30720:17;30705:32;30702:96;;;-1:-1:-1;;;;;30762:17:0;;30782:1;30762:17;;;:9;:17;;;;;;30754:30;;;;;;30846:10;;30833;;:23;;;;:::i;:::-;30815:15;:41;30814:64;;;;-1:-1:-1;30874:4:0;;-1:-1:-1;;;;;30861:17:0;;;30874:4;;30861:17;;30814:64;30810:172;;;-1:-1:-1;;;;;30895:16:0;;;;;;:5;:16;;;;;;;;;:23;;-1:-1:-1;;30895:23:0;30914:4;30895:23;;;;;;30938:32;;4976:51:1;;;30914:4:0;;30938:32;;4949:18:1;30938:32:0;;;;;;;30810:172;31041:53;;;;;;;;;;;-1:-1:-1;;;31041:53:0;;;;;;;;-1:-1:-1;;;;;31041:17:0;;-1:-1:-1;31041:17:0;;;:9;:17;;;;;;;;:53;;31063:6;;31041:21;:53::i;:::-;-1:-1:-1;;;;;31021:17:0;;;;;;;:9;:17;;;;;;;;:73;;;;31111:26;;;;;:15;:26;;;;;;;31110:27;:45;;;;-1:-1:-1;31141:14:0;;;;31110:45;31107:141;;;31225:10;;-1:-1:-1;;;;;31189:20:0;;;;;;:9;:20;;;;;;:32;;31214:6;31189:24;:32::i;:::-;:46;;31181:55;;;;;;-1:-1:-1;;;;;31283:19:0;;31260;31283;;;:11;:19;;;;;;;;31282:20;:47;;;;-1:-1:-1;;;;;;31307:22:0;;;;;;:11;:22;;;;;;;;31306:23;31282:47;:93;;31369:6;31282:93;;;31332:34;31340:6;31348:9;31359:6;31332:7;:34::i;:::-;-1:-1:-1;;;;;31409:20:0;;;;;;:9;:20;;;;;;31260:115;;-1:-1:-1;31409:37:0;;31260:115;31409:24;:37::i;:::-;-1:-1:-1;;;;;31386:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;31492:24;;;;;:16;:24;;;;;;;31488:127;;31537:19;;-1:-1:-1;;;;;31574:17:0;;;;;;;:9;:17;;;;;;;;31537:55;;-1:-1:-1;;;31537:55:0;;;;;5436:51:1;;;;5503:18;;;5496:34;31537:19:0;;;;;;:28;;5409:18:1;;31537:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31533:71;;-1:-1:-1;;;;;31631:27:0;;;;;;:16;:27;;;;;;;;31627:136;;31679:19;;-1:-1:-1;;;;;31719:20:0;;;;;;;:9;:20;;;;;;;;31679:61;;-1:-1:-1;;;31679:61:0;;;;;5436:51:1;;;;5503:18;;;5496:34;31679:19:0;;;;;;:28;;5409:18:1;;31679:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31675:77;;31779:19;;31807:14;;31779:43;;-1:-1:-1;;;;;;31779:43:0;;;;;12525:25:1;;;;31779:19:0;;;;-1:-1:-1;;;;;31779:19:0;;:27;;12498:18:1;;31779:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31775:59;31868:9;-1:-1:-1;;;;;31851:40:0;31860:6;-1:-1:-1;;;;;31851:40:0;;31879:11;31851:40;;;;12525:25:1;;12513:2;12498:18;;12379:177;31851:40:0;;;;;;;;-1:-1:-1;31909:4:0;;30134:1787;-1:-1:-1;;;;30134:1787:0:o;13195:98::-;13253:7;13280:5;13284:1;13280;:5;:::i;31929:330::-;32059:53;;;;;;;;;;;-1:-1:-1;;;32059:53:0;;;;;;;;-1:-1:-1;;;;;32059:17:0;;32022:4;32059:17;;;:9;:17;;;;;;;:53;;32081:6;;32059:21;:53::i;:::-;-1:-1:-1;;;;;32039:17:0;;;;;;;:9;:17;;;;;;:73;;;;32146:20;;;;;;;:32;;32171:6;32146:24;:32::i;:::-;-1:-1:-1;;;;;32123:20:0;;;;;;;:9;:20;;;;;;;:55;;;;32194:35;;;;;;;;;;32222:6;12525:25:1;;12513:2;12498:18;;12379:177;32194:35:0;;;;;;;;-1:-1:-1;32247:4:0;31929:330;;;;;:::o;33168:1922::-;23104:16;:23;;-1:-1:-1;;23104:23:0;23123:4;23104:23;;;33266:4:::1;23104:16:::0;33248:24;;;:9:::1;:24:::0;;;;;;;33347:8:::1;::::0;33329:12:::1;::::0;33248:24;;23104:16;33309:54:::1;::::0;33361:1:::1;::::0;33309:47:::1;::::0;33347:8;33309:47;;33248:24;;33309:19:::1;:33::i;:::-;:37:::0;::::1;:47::i;:54::-;33283:80:::0;-1:-1:-1;33374:20:0::1;33397:36;:15:::0;33283:80;33397:19:::1;:36::i;:::-;33470:16;::::0;;33484:1:::1;33470:16:::0;;;;;::::1;::::0;;33374:59;;-1:-1:-1;33446:21:0::1;::::0;33470:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33470:16:0::1;33446:40;;33515:4;33497;33502:1;33497:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33497:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;33541:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;33541:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;33497:7;;33541:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33531:4;33536:1;33531:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33531:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;33567:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;33567:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;33639:12;;33567:6:::1;::::0;33682:4;;33709::::1;::::0;33729:15:::1;::::0;33567:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33857:12:0::1;::::0;33788:21:::1;::::0;-1:-1:-1;33768:17:0::1;::::0;-1:-1:-1;33844:33:0::1;::::0;33857:19:::1;::::0;33874:1:::1;33857:16;:19::i;:::-;33844:8;::::0;;:12:::1;:33::i;:::-;33822:55;;33890:26;33919:51;33968:1;33919:44;33951:11;33919:27;33933:12;;33919:9;:13;;:27;;;;:::i;:51::-;33890:80;;33981:27;34011:42;34041:11;34011:25;34025:10;;34011:9;:13;;:25;;;;:::i;:42::-;33981:72:::0;-1:-1:-1;34064:26:0::1;34093:58;33981:72:::0;34093:33:::1;:9:::0;34107:18;34093:13:::1;:33::i;:58::-;34064:87;;34168:19;;;;;;;;;-1:-1:-1::0;;;;;34168:19:0::1;-1:-1:-1::0;;;;;34168:27:0::1;;34203:19;34168:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;34164:73:::0;34249:24:::1;34276:46;34310:11;34276:29;34290:14;;34276:9;:13;;:29;;;;:::i;:46::-;34249:73:::0;-1:-1:-1;34333:22:0::1;34358:40;:18:::0;34249:73;34358:22:::1;:40::i;:::-;34442:15;::::0;34434:68:::1;::::0;34333:65;;-1:-1:-1;34414:15:0::1;::::0;-1:-1:-1;;;;;34442:15:0;;::::1;::::0;34492:5:::1;::::0;34333:65;;34414:15;34434:68;34414:15;34434:68;34333:65;34442:15;34492:5;34434:68:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;34543:17:0::1;::::0;34535:72:::1;::::0;34413:89;;-1:-1:-1;34514:16:0::1;::::0;-1:-1:-1;;;;;34543:17:0;;::::1;::::0;34597:5:::1;::::0;34574:16;;34514;34535:72;34514:16;34535:72;34574:16;34543:17;34597:5;34535:72:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;34673:5:0::1;::::0;-1:-1:-1;34673:5:0;;-1:-1:-1;;34724:19:0;;;-1:-1:-1;34721:362:0::1;;34759:6;::::0;34933:21:::1;::::0;34759:244:::1;::::0;-1:-1:-1;;;34759:244:0;;34835:4:::1;34759:244;::::0;::::1;6161:34:1::0;6211:18;;;6204:34;;;34759:6:0::1;6254:18:1::0;;;6247:34;;;6297:18;;;6290:34;-1:-1:-1;;;;;34933:21:0;;::::1;6340:19:1::0;;;6333:44;34973:15:0::1;6393:19:1::0;;;6386:35;34759:6:0;::::1;::::0;:22:::1;::::0;34789:18;;6095:19:1;;34759:244:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;35023:48:0::1;::::0;;13720:25:1;;;13776:2;13761:18;;13754:34;;;35023:48:0::1;::::0;-1:-1:-1;13693:18:1;35023:48:0::1;;;;;;;34721:362;-1:-1:-1::0;;23150:16:0;:24;;-1:-1:-1;;23150:24:0;;;-1:-1:-1;;;;;;;;;;;33168:1922:0:o;32267:592::-;32399:4;;32353:7;;;;-1:-1:-1;;;;;32399:17:0;;;:4;;:17;:43;;32434:8;;32399:43;;;32419:12;;32399:43;-1:-1:-1;;;;;32456:16:0;;;;;;:5;:16;;;;;;32375:67;;-1:-1:-1;32456:16:0;;:24;;:16;:24;32453:156;;;-1:-1:-1;32511:2:0;32453:156;;;-1:-1:-1;;;;;32543:13:0;;;;;;:5;:13;;;;;;;;:21;;:13;:21;32540:69;;;-1:-1:-1;32595:2:0;32540:69;32619:17;32639:34;32669:3;32639:25;:6;32650:13;32639:10;:25::i;:34::-;32731:4;32713:24;;;;:9;:24;;;;;;32619:54;;-1:-1:-1;32713:39:0;;32619:54;32713:28;:39::i;:::-;32704:4;32686:24;;;;:9;:24;;;;;;;:66;;;;32768:42;;-1:-1:-1;;;;;32768:42:0;;;;;;;32800:9;12525:25:1;;12513:2;12498:18;;12379:177;32768:42:0;;;;;;;;32830:21;:6;32841:9;32830:10;:21::i;:::-;32823:28;32267:592;-1:-1:-1;;;;;;32267:592:0:o;13301:98::-;13359:7;13386:5;13390:1;13386;:5;:::i;13407:98::-;13465:7;13492:5;13496:1;13492;:5;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;947:388::-;1015:6;1023;1076:2;1064:9;1055:7;1051:23;1047:32;1044:52;;;1092:1;1089;1082:12;1044:52;1131:9;1118:23;1150:31;1175:5;1150:31;:::i;:::-;1200:5;-1:-1:-1;1257:2:1;1242:18;;1229:32;1270:33;1229:32;1270:33;:::i;:::-;1322:7;1312:17;;;947:388;;;;;:::o;1340:529::-;1417:6;1425;1433;1486:2;1474:9;1465:7;1461:23;1457:32;1454:52;;;1502:1;1499;1492:12;1454:52;1541:9;1528:23;1560:31;1585:5;1560:31;:::i;:::-;1610:5;-1:-1:-1;1667:2:1;1652:18;;1639:32;1680:33;1639:32;1680:33;:::i;:::-;1732:7;-1:-1:-1;1791:2:1;1776:18;;1763:32;1804:33;1763:32;1804:33;:::i;:::-;1856:7;1846:17;;;1340:529;;;;;:::o;1874:456::-;1951:6;1959;1967;2020:2;2008:9;1999:7;1995:23;1991:32;1988:52;;;2036:1;2033;2026:12;1988:52;2075:9;2062:23;2094:31;2119:5;2094:31;:::i;:::-;2144:5;-1:-1:-1;2201:2:1;2186:18;;2173:32;2214:33;2173:32;2214:33;:::i;:::-;1874:456;;2266:7;;-1:-1:-1;;;2320:2:1;2305:18;;;;2292:32;;1874:456::o;2335:315::-;2400:6;2408;2461:2;2449:9;2440:7;2436:23;2432:32;2429:52;;;2477:1;2474;2467:12;2429:52;2516:9;2503:23;2535:31;2560:5;2535:31;:::i;:::-;2585:5;-1:-1:-1;2609:35:1;2640:2;2625:18;;2609:35;:::i;:::-;2599:45;;2335:315;;;;;:::o;2655:::-;2723:6;2731;2784:2;2772:9;2763:7;2759:23;2755:32;2752:52;;;2800:1;2797;2790:12;2752:52;2839:9;2826:23;2858:31;2883:5;2858:31;:::i;:::-;2908:5;2960:2;2945:18;;;;2932:32;;-1:-1:-1;;;2655:315:1:o;2975:180::-;3031:6;3084:2;3072:9;3063:7;3059:23;3055:32;3052:52;;;3100:1;3097;3090:12;3052:52;3123:26;3139:9;3123:26;:::i;3160:316::-;3231:6;3239;3247;3300:2;3288:9;3279:7;3275:23;3271:32;3268:52;;;3316:1;3313;3306:12;3268:52;3339:26;3355:9;3339:26;:::i;:::-;3329:36;;3412:2;3401:9;3397:18;3384:32;3374:42;;3435:35;3466:2;3455:9;3451:18;3435:35;:::i;:::-;3425:45;;3160:316;;;;;:::o;3481:180::-;3540:6;3593:2;3581:9;3572:7;3568:23;3564:32;3561:52;;;3609:1;3606;3599:12;3561:52;-1:-1:-1;3632:23:1;;3481:180;-1:-1:-1;3481:180:1:o;3666:248::-;3734:6;3742;3795:2;3783:9;3774:7;3770:23;3766:32;3763:52;;;3811:1;3808;3801:12;3763:52;-1:-1:-1;;3834:23:1;;;3904:2;3889:18;;;3876:32;;-1:-1:-1;3666:248:1:o;3919:306::-;4007:6;4015;4023;4076:2;4064:9;4055:7;4051:23;4047:32;4044:52;;;4092:1;4089;4082:12;4044:52;4121:9;4115:16;4105:26;;4171:2;4160:9;4156:18;4150:25;4140:35;;4215:2;4204:9;4200:18;4194:25;4184:35;;3919:306;;;;;:::o;4230:385::-;4316:6;4324;4332;4340;4393:3;4381:9;4372:7;4368:23;4364:33;4361:53;;;4410:1;4407;4400:12;4361:53;-1:-1:-1;;4433:23:1;;;4503:2;4488:18;;4475:32;;-1:-1:-1;4554:2:1;4539:18;;4526:32;;4605:2;4590:18;4577:32;;-1:-1:-1;4230:385:1;-1:-1:-1;4230:385:1:o;7088:597::-;7200:4;7229:2;7258;7247:9;7240:21;7290:6;7284:13;7333:6;7328:2;7317:9;7313:18;7306:34;7358:1;7368:140;7382:6;7379:1;7376:13;7368:140;;;7477:14;;;7473:23;;7467:30;7443:17;;;7462:2;7439:26;7432:66;7397:10;;7368:140;;;7526:6;7523:1;7520:13;7517:91;;;7596:1;7591:2;7582:6;7571:9;7567:22;7563:31;7556:42;7517:91;-1:-1:-1;7669:2:1;7648:15;-1:-1:-1;;7644:29:1;7629:45;;;;7676:2;7625:54;;7088:597;-1:-1:-1;;;7088:597:1:o;10456:329::-;10658:2;10640:21;;;10697:1;10677:18;;;10670:29;-1:-1:-1;;;10730:2:1;10715:18;;10708:36;10776:2;10761:18;;10456:329::o;12039:335::-;12241:2;12223:21;;;12280:2;12260:18;;;12253:30;-1:-1:-1;;;12314:2:1;12299:18;;12292:41;12365:2;12350:18;;12039:335::o;12561:980::-;12823:4;12871:3;12860:9;12856:19;12902:6;12891:9;12884:25;12928:2;12966:6;12961:2;12950:9;12946:18;12939:34;13009:3;13004:2;12993:9;12989:18;12982:31;13033:6;13068;13062:13;13099:6;13091;13084:22;13137:3;13126:9;13122:19;13115:26;;13176:2;13168:6;13164:15;13150:29;;13197:1;13207:195;13221:6;13218:1;13215:13;13207:195;;;13286:13;;-1:-1:-1;;;;;13282:39:1;13270:52;;13377:15;;;;13342:12;;;;13318:1;13236:9;13207:195;;;-1:-1:-1;;;;;;;13458:32:1;;;;13453:2;13438:18;;13431:60;-1:-1:-1;;;13522:3:1;13507:19;13500:35;13419:3;12561:980;-1:-1:-1;;;12561:980:1:o;13988:128::-;14028:3;14059:1;14055:6;14052:1;14049:13;14046:39;;;14065:18;;:::i;:::-;-1:-1:-1;14101:9:1;;13988:128::o;14121:217::-;14161:1;14187;14177:132;;14231:10;14226:3;14222:20;14219:1;14212:31;14266:4;14263:1;14256:15;14294:4;14291:1;14284:15;14177:132;-1:-1:-1;14323:9:1;;14121:217::o;14343:168::-;14383:7;14449:1;14445;14441:6;14437:14;14434:1;14431:21;14426:1;14419:9;14412:17;14408:45;14405:71;;;14456:18;;:::i;:::-;-1:-1:-1;14496:9:1;;14343:168::o;14516:125::-;14556:4;14584:1;14581;14578:8;14575:34;;;14589:18;;:::i;:::-;-1:-1:-1;14626:9:1;;14516:125::o;14646:127::-;14707:10;14702:3;14698:20;14695:1;14688:31;14738:4;14735:1;14728:15;14762:4;14759:1;14752:15;14778:127;14839:10;14834:3;14830:20;14827:1;14820:31;14870:4;14867:1;14860:15;14894:4;14891:1;14884:15;15042:131;-1:-1:-1;;;;;15117:31:1;;15107:42;;15097:70;;15163:1;15160;15153:12
Swarm Source
ipfs://0d814dd1104b2c241fa1621241074dac499f4cfaa2b0592f14c517a5bb8a88af