More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 103 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 91029118 | 708 days ago | IN | 0 ETH | 0.00024444 | ||||
Approve | 79203937 | 743 days ago | IN | 0 ETH | 0.00004694 | ||||
Approve | 79166425 | 743 days ago | IN | 0 ETH | 0.00003937 | ||||
Approve | 79131855 | 743 days ago | IN | 0 ETH | 0.00005093 | ||||
Set Buy Tx Limit... | 79129723 | 743 days ago | IN | 0 ETH | 0.00004147 | ||||
Set Sell Tx Limi... | 79129626 | 743 days ago | IN | 0 ETH | 0.00004132 | ||||
Set Sell Tx Limi... | 79129615 | 743 days ago | IN | 0 ETH | 0.0000416 | ||||
Set Fee Receiver... | 79129354 | 743 days ago | IN | 0 ETH | 0.00005894 | ||||
Approve | 79128374 | 743 days ago | IN | 0 ETH | 0.00005047 | ||||
Approve | 79128145 | 743 days ago | IN | 0 ETH | 0.00004839 | ||||
Set Buy Fees | 79127231 | 743 days ago | IN | 0 ETH | 0.0000677 | ||||
Set Sell Fees | 79126826 | 743 days ago | IN | 0 ETH | 0.00006794 | ||||
Transfer | 79126201 | 743 days ago | IN | 0 ETH | 0.00010034 | ||||
Approve | 79126063 | 743 days ago | IN | 0 ETH | 0.00004474 | ||||
Transfer | 79126017 | 743 days ago | IN | 0 ETH | 0.00010217 | ||||
Transfer | 79125767 | 743 days ago | IN | 0 ETH | 0.00010217 | ||||
Approve | 79112170 | 743 days ago | IN | 0 ETH | 0.00004707 | ||||
Approve | 79094906 | 743 days ago | IN | 0 ETH | 0.00005117 | ||||
Approve | 79093251 | 743 days ago | IN | 0 ETH | 0.0000489 | ||||
Approve | 79090832 | 743 days ago | IN | 0 ETH | 0.00004717 | ||||
Approve | 79090651 | 743 days ago | IN | 0 ETH | 0.00004717 | ||||
Approve | 79090207 | 743 days ago | IN | 0 ETH | 0.00005198 | ||||
Approve | 79090068 | 743 days ago | IN | 0 ETH | 0.00005273 | ||||
Approve | 79089400 | 743 days ago | IN | 0 ETH | 0.00005172 | ||||
Approve | 79089311 | 743 days ago | IN | 0 ETH | 0.00005169 |
Latest 7 internal transactions
Advanced mode:
Loading...
Loading
Contract Name:
LUCID_Protocol
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2023-04-10 */ /** *Submitted for verification at Arbiscan on 2023-03-18 ╔╗─────────╔╗───────╔╗─────────╔╗ ║║─────────║║──────╔╝╚╗────────║║ ║║╔╗╔╦══╦╦═╝╠══╦═╦═╩╗╔╬══╦══╦══╣║ ║║║║║║╔═╬╣╔╗║╔╗║╔╣╔╗║║║╔╗║╔═╣╔╗║║ ║╚╣╚╝║╚═╣║╚╝║╚╝║║║╚╝║╚╣╚╝║╚═╣╚╝║╚╗ ╚═╩══╩══╩╩══╣╔═╩╝╚══╩═╩══╩══╩══╩═╝ ────────────║║ ────────────╚╝ TG: https://t.me/lucidprotocol */ //SPDX-License-Identifier: MIT pragma solidity ^0.8.5; /** * Standard SafeMath, stripped down to just add/sub/mul/div */ library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } } /** * BEP20 standard interface. */ interface IBEP20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); 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); } /** * Allows for contract ownership for multiple adressess */ abstract contract Auth { address internal owner; mapping (address => bool) internal authorizations; constructor(address _owner) { owner = _owner; authorizations[_owner] = true; } /** * Function modifier to require caller to be contract owner */ modifier onlyOwner() { require(isOwner(msg.sender), "!OWNER"); _; } /** * Function modifier to require caller to be authorized */ modifier authorized() { require(isAuthorized(msg.sender), "!AUTHORIZED"); _; } /** * Authorize address. Owner only */ function authorize(address account) public onlyOwner { authorizations[account] = true; } /** * Remove address authorization. Owner only */ function unauthorize(address account) public onlyOwner { authorizations[account] = false; } /** * Check if address is owner */ function isOwner(address account) public view returns (bool) { return account == owner; } /** * Return address authorization status */ function isAuthorized(address account) public view returns (bool) { return authorizations[account]; } /** * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized */ function transferOwnership(address payable account) public onlyOwner { owner = account; authorizations[account] = true; emit OwnershipTransferred(account); } event OwnershipTransferred(address owner); } /* Standard IDEXFactory */ interface IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } /* Standard IDEXRouter */ interface IDEXRouter { 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 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 for the DividendDistributor */ interface IDividendDistributor { function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external; function setRewardToken (IBEP20 _ARB) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; } /* Our DividendDistributor contract responsible for distributing the earn token */ contract DividendDistributor is IDividendDistributor { using SafeMath for uint256; address _token; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } // EARN IBEP20 public ARB = IBEP20(0x912CE59144191C1204E64559FE8253a0e49E6548); address WETH = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1; IDEXRouter 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 = 60 * 60; uint256 public minDistribution = 1 * (10 ** 12); uint256 currentIndex; bool initialized; modifier initialization() { require(!initialized); _; initialized = true; } modifier onlyToken() { require(msg.sender == _token); _; } constructor (address _router) { router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); _token = msg.sender; } //New function to set the Reward function setRewardToken (IBEP20 _ARB) external override onlyToken { ARB = IBEP20(_ARB); } function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken { minPeriod = _minPeriod; minDistribution = _minDistribution; } 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 { uint256 balanceBefore = ARB.balanceOf(address(this)); address[] memory path = new address[](2); path[0] = WETH; path[1] = address(ARB); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}( 0, path, address(this), block.timestamp ); uint256 amount = ARB.balanceOf(address(this)).sub(balanceBefore); totalDividends = totalDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } function process(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; 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); ARB.transfer(shareholder, amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } } function claimDividend(address shareholder) external onlyToken{ distributeDividend(shareholder); } 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(); } } /* Token contract */ contract LUCID_Protocol is IBEP20, Auth { using SafeMath for uint256; // Addresses address ARB = 0x912CE59144191C1204E64559FE8253a0e49E6548; address WETH = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; address TOKENDISTRIBUTOR; // These are owner by default address public autoLiquidityReceiver; address public marketingFeeReceiver; address public ttmFeeReceiver; // Name and symbol string constant _name = "LUCID Protocol"; string constant _symbol = "$LUCID"; uint8 constant _decimals = 18; // Total supply uint256 _totalSupply = 10000 * (10 ** _decimals); // Max wallet and TX uint256 public _maxBuyTxAmount = _totalSupply * 200 / 100; // 2% uint256 public _maxSellTxAmount = _totalSupply * 200 / 100; // 2% uint256 public _maxWalletToken = ( _totalSupply * 200 ) / 100; // 2% // Mappings mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) isFeeExempt; mapping (address => bool) isTxLimitExempt; mapping (address => bool) isTimelockExempt; mapping (address => bool) isDividendExempt; // Buy Fees uint256 liquidityFeeBuy = 1000; uint256 ttmFeeBuy = 1000; uint256 reflectionFeeBuy = 1000; uint256 marketingFeeBuy = 1000; uint256 totalFeeBuy = 4000; // Sell fees uint256 liquidityFeeSell = 1000; uint256 ttmFeeSell = 1000; uint256 reflectionFeeSell = 1000; uint256 marketingFeeSell = 1000; uint256 totalFeeSell = 4000; // Fee variables uint256 liquidityFee; uint256 ttmFee; uint256 reflectionFee; uint256 marketingFee; uint256 totalFee; uint256 feeDenominator = 10000; // Sell amount of tokens when a sell takes place uint256 public swapThreshold = _totalSupply * 20 / 100; // 0.2% of supply // Liquidity uint256 targetLiquidity = 40; uint256 targetLiquidityDenominator = 100; DividendDistributor distributor; uint256 distributorGas = 500000; // Cooldown & timer functionality // NOTE: Solidity uses Unix timestamp so 1 is 1 second. bool public buyCooldownEnabled = true; uint8 public cooldownTimerInterval = 5; mapping (address => uint) private cooldownTimer; // Other variables IDEXRouter public router; address public pair; uint256 public launchedAt; bool public tradingOpen = false; bool public swapEnabled = true; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } /* Token constructor */ constructor () Auth(msg.sender) { router = IDEXRouter(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); pair = IDEXFactory(router.factory()).createPair(WETH, address(this)); _allowances[address(this)][address(router)] = type(uint256).max; distributor = new DividendDistributor(address(router)); // Should be the owner wallet/token distributor TOKENDISTRIBUTOR = msg.sender; address _presaler = msg.sender; isFeeExempt[_presaler] = true; isTxLimitExempt[_presaler] = true; // No timelock for these people isTimelockExempt[msg.sender] = true; isTimelockExempt[DEAD] = true; isTimelockExempt[address(this)] = true; // Exempt from dividend isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; // Set the marketing and liq receiver to the owner as default autoLiquidityReceiver = msg.sender; marketingFeeReceiver = 0xaDAe55835FBa8cA28d2F0276C6F2C17AEDab31AC; ttmFeeReceiver = 0xabc69593fF23914db004389eb21dB9761D236C88; _balances[_presaler] = _totalSupply; emit Transfer(address(0), _presaler, _totalSupply); } receive() external payable { } function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure override returns (uint8) { return _decimals; } function symbol() external pure override returns (string memory) { return _symbol; } function name() external pure override returns (string memory) { return _name; } function getOwner() external view override returns (address) { return owner; } 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 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); } // setting the max wallet in percentages // NOTE: 1% = 100 function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() { _maxWalletToken = _totalSupply.mul(maxWallPercent).div(10000); } // Set the tokendistributor, exempt for everything and able to SEND before launch. function setTokenDistributor(address _tokenDistributor) external authorized{ TOKENDISTRIBUTOR = _tokenDistributor; isFeeExempt[_tokenDistributor] = true; isTxLimitExempt[_tokenDistributor] = true; isTimelockExempt[_tokenDistributor] = true; } // Main transfer function function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { if(inSwap){ return _basicTransfer(sender, recipient, amount); } // Check if trading is enabled if(!authorizations[sender] && !authorizations[recipient] && TOKENDISTRIBUTOR != sender){ require(tradingOpen,"Trading not enabled yet"); } // Check if buying or selling bool isSell = recipient == pair; // Set buy or sell fees setCorrectFees(isSell); // Check max wallet checkMaxWallet(sender, recipient, amount); // Buycooldown checkBuyCooldown(sender, recipient); // Checks maxTx checkTxLimit(sender, amount, recipient, isSell); // Check if we should do the swapback if(shouldSwapBack()){ swapBack(); } //Exchange tokens _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount) : amount; _balances[recipient] = _balances[recipient].add(amountReceived); // Dividend tracker if(!isDividendExempt[sender]) { try distributor.setShare(sender, _balances[sender]) {} catch {} } if(!isDividendExempt[recipient]) { try distributor.setShare(recipient, _balances[recipient]) {} catch {} } try distributor.process(distributorGas) {} catch {} emit Transfer(sender, recipient, amountReceived); return true; } // Do a normal transfer 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; } // Set the correct fees for buying or selling function setCorrectFees(bool isSell) internal { if(isSell){ liquidityFee = liquidityFeeSell; ttmFee = ttmFeeSell; reflectionFee = reflectionFeeSell; marketingFee = marketingFeeSell; totalFee = totalFeeSell; } else { liquidityFee = liquidityFeeBuy; ttmFee = ttmFeeBuy; reflectionFee = reflectionFeeBuy; marketingFee = marketingFeeBuy; totalFee = totalFeeBuy; } } // Check for maxTX function checkTxLimit(address sender, uint256 amount, address recipient, bool isSell) internal view { if (recipient != owner){ if(isSell){ require(amount <= _maxSellTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded"); } else { require(amount <= _maxBuyTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded"); } } } // Check buy cooldown function checkBuyCooldown(address sender, address recipient) internal { if (sender == pair && buyCooldownEnabled && !isTimelockExempt[recipient]) { require(cooldownTimer[recipient] < block.timestamp,"Please wait between two buys"); cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval; } } // Check maxWallet function checkMaxWallet(address sender, address recipient, uint256 amount) internal view { if (!authorizations[sender] && !isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && recipient != owner && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver && recipient != ttmFeeReceiver){ uint256 heldTokens = balanceOf(recipient); require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much."); } } // Check if sender is not feeExempt function shouldTakeFee(address sender) internal view returns (bool) { return !isFeeExempt[sender]; } // Take the normal total Fee function takeFee(address sender, uint256 amount) internal returns (uint256) { uint256 feeAmount = amount.mul(totalFee).div(feeDenominator); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } // Check if we should sell tokens function shouldSwapBack() internal view returns (bool) { return msg.sender != pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold; } // switch Trading function tradingStatus(bool _status) public onlyOwner { tradingOpen = _status; } // Enable cooldown between trades function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner { buyCooldownEnabled = _status; cooldownTimerInterval = _interval; } // Main swapback to sell tokens for WETH function swapBack() internal swapping { uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee; uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2); uint256 amountToSwap = swapThreshold.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; uint256 balanceBefore = address(this).balance; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountWETH = address(this).balance.sub(balanceBefore); uint256 totalWETHFee = totalFee.sub(dynamicLiquidityFee.div(2)); uint256 amountWETHLiquidity = amountWETH.mul(dynamicLiquidityFee).div(totalWETHFee).div(2); uint256 amountWETHReflection = amountWETH.mul(reflectionFee).div(totalWETHFee); uint256 amountWETHMarketing = amountWETH.mul(marketingFee).div(totalWETHFee); uint256 amountWETHttm = amountWETH.mul(ttmFee).div(totalWETHFee); try distributor.deposit{value: amountWETHReflection}() {} catch {} (bool successMarketing, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountWETHMarketing, gas: 30000}(""); (bool successttm, /* bytes memory data */) = payable(ttmFeeReceiver).call{value: amountWETHttm, gas: 30000}(""); require(successMarketing, "marketing receiver rejected ETH transfer"); require(successttm, "ttm receiver rejected ETH transfer"); if(amountToLiquify > 0){ router.addLiquidityETH{value: amountWETHLiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(amountWETHLiquidity, amountToLiquify); } } // Buy amount of tokens with WETH from the contract function buyTokens(uint256 amount, address to) internal swapping { address[] memory path = new address[](2); path[0] = WETH; path[1] = address(this); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, path, to, block.timestamp ); } // Check when the token is launched function launched() internal view returns (bool) { return launchedAt != 0; } // Set the launchedAt to token launch function launch() internal { launchedAt = block.number; } // Set max buy TX function setBuyTxLimitInPercent(uint256 maxBuyTxPercent) external onlyOwner { _maxBuyTxAmount = _totalSupply.mul(maxBuyTxPercent).div(10000); } // Set max sell TX function setSellTxLimitInPercent(uint256 maxSellTxPercent) external onlyOwner { _maxSellTxAmount = _totalSupply.mul(maxSellTxPercent).div(10000); } // Exempt from dividend function setIsDividendExempt(address holder, bool exempt) external authorized { require(holder != address(this) && holder != pair); isDividendExempt[holder] = exempt; if(exempt){ distributor.setShare(holder, 0); }else{ distributor.setShare(holder, _balances[holder]); } } // Exempt from fee function setIsFeeExempt(address holder, bool exempt) external authorized { isFeeExempt[holder] = exempt; } // Exempt from max TX function setIsTxLimitExempt(address holder, bool exempt) external authorized { isTxLimitExempt[holder] = exempt; } // Exempt from buy CD function setIsTimelockExempt(address holder, bool exempt) external authorized { isTimelockExempt[holder] = exempt; } function setFullWhitelist(address holder, bool exempt) external authorized { isTxLimitExempt[holder] = exempt; isFeeExempt[holder] = exempt; isTimelockExempt[holder] = exempt; } // Set our buy fees function setBuyFees(uint256 _liquidityFeeBuy, uint256 _ttmFeeBuy, uint256 _reflectionFeeBuy, uint256 _marketingFeeBuy, uint256 _feeDenominator) external onlyOwner { liquidityFeeBuy = _liquidityFeeBuy; ttmFeeBuy = _ttmFeeBuy; reflectionFeeBuy = _reflectionFeeBuy; marketingFeeBuy = _marketingFeeBuy; totalFeeBuy = _liquidityFeeBuy.add(_ttmFeeBuy).add(_reflectionFeeBuy).add(_marketingFeeBuy); feeDenominator = _feeDenominator; } // Set our sell fees function setSellFees(uint256 _liquidityFeeSell, uint256 _ttmFeeSell, uint256 _reflectionFeeSell, uint256 _marketingFeeSell, uint256 _feeDenominator) external onlyOwner { liquidityFeeSell = _liquidityFeeSell; ttmFeeSell = _ttmFeeSell; reflectionFeeSell = _reflectionFeeSell; marketingFeeSell = _marketingFeeSell; totalFeeSell = _liquidityFeeSell.add(_ttmFeeSell).add(_reflectionFeeSell).add(_marketingFeeSell); feeDenominator = _feeDenominator; } // Set the marketing and liquidity receivers function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _ttmFeeReceiver) external authorized { autoLiquidityReceiver = _autoLiquidityReceiver; marketingFeeReceiver = _marketingFeeReceiver; ttmFeeReceiver = _ttmFeeReceiver; } // Set swapBack settings function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized { swapEnabled = _enabled; swapThreshold = _totalSupply * _amount / 10000; } // Set target liquidity function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized { targetLiquidity = _target; targetLiquidityDenominator = _denominator; } // Save spare ETH from CA function manualSend() external authorized { uint256 contractETHBalance = address(this).balance; payable(autoLiquidityReceiver).transfer(contractETHBalance); } // Set criteria for auto distribution function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized { distributor.setDistributionCriteria(_minPeriod, _minDistribution); } // Let people claim there dividend function claimDividend() external { distributor.claimDividend(msg.sender); } //New function to set the Reward function setRewardToken(IBEP20 _ARB) external authorized { distributor.setRewardToken(_ARB); } // Check how much earnings are unpaid function getUnpaidEarnings(address shareholder) public view returns (uint256) { return distributor.getUnpaidEarnings(shareholder); } // Set gas for distributor function setDistributorSettings(uint256 gas) external authorized { require(gas < 750000); distributorGas = gas; } // Get the circulatingSupply function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } // Get the liquidity backing function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply()); } // Get if we are over liquified or not function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) { return getLiquidityBacking(accuracy) > target; } event AutoLiquify(uint256 amountWETH, uint256 amountBOG); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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":"amountWETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","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":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","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":"account","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":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","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":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","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":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","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":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_ttmFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyTxPercent","type":"uint256"}],"name":"setBuyTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_ttmFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFullWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IBEP20","name":"_ARB","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_ttmFeeSell","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellTxPercent","type":"uint256"}],"name":"setSellTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenDistributor","type":"address"}],"name":"setTokenDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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":"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":"_status","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":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ttmFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600280546001600160a01b031990811673912ce59144191c1204e64559fe8253a0e49e6548179091556003805482167382af49447d8a07e3bd95bd0d56f35241523fbab117905560048054821661dead1790556005805490911690556200006e6012600a620005a4565b6200007c90612710620005bc565b600a556064600a5460c8620000929190620005bc565b6200009e9190620005d6565b600b556064600a5460c8620000b49190620005bc565b620000c09190620005d6565b600c556064600a5460c8620000d69190620005bc565b620000e29190620005d6565b600d556103e86014556103e86015556103e86016556103e8601755610fa06018556103e86019556103e8601a556103e8601b556103e8601c55610fa0601d556127106023556064600a5460146200013a9190620005bc565b620001469190620005d6565b6024556028602581905560646026556207a12090556029805461050161ffff1991821617909155602e80549091166101001790553480156200018757600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155602b8054731b02da8cb0d097eb8d57a175b88c7d8b47997506931683179055825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620005f9565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac9190620005f9565b602c80546001600160a01b0319166001600160a01b03928316179055306000908152600f60209081526040808320602b8054861685529252918290206000199055549051911690620002fe9062000481565b6001600160a01b039091168152602001604051809103906000f0801580156200032b573d6000803e3d6000fd5b50602780546001600160a01b039283166001600160a01b031991821617909155600680548216339081179091556000818152601060209081526040808320805460ff19908116600190811790925560118452828520805482168317905560128452828520805482168317905560048054891686528386208054831684179055308087528487208054841685179055602c548a168752601386528487208054841685179055865283862080548316841790555490971684528184208054909716179095556007805485168417905560088054851673adae55835fba8ca28d2f0276c6f2c17aedab31ac1790556009805490941673abc69593ff23914db004389eb21db9761d236c8817909355600a54828252600e84528482208190559351938452909283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000624565b6110d0806200314683390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004e6578160001904821115620004ca57620004ca6200048f565b80851615620004d857918102915b93841c9390800290620004aa565b509250929050565b600082620004ff575060016200059e565b816200050e575060006200059e565b8160018114620005275760028114620005325762000552565b60019150506200059e565b60ff8411156200054657620005466200048f565b50506001821b6200059e565b5060208310610133831016604e8410600b841016171562000577575081810a6200059e565b620005838383620004a5565b80600019048211156200059a576200059a6200048f565b0290505b92915050565b6000620005b560ff841683620004ee565b9392505050565b80820281158282048414176200059e576200059e6200048f565b600082620005f457634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200060c57600080fd5b81516001600160a01b0381168114620005b557600080fd5b612b1280620006346000396000f3fe6080604052600436106103545760003560e01c806382bf293c116101c6578063d7c01032116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610a11578063f887ea4014610a31578063fe9fbb8014610a51578063ffb54a9914610a7157600080fd5b8063f2fde38b146109bc578063f4293890146109dc578063f708a64f146109f157600080fd5b8063df4a76c5116100d1578063df4a76c514610947578063e96fada214610967578063f0b37c0414610987578063f0fc6bca146109a757600080fd5b8063d7c01032146108c1578063dd62ed3e146108e1578063df20fd491461092757600080fd5b8063a9059cbb11610164578063c1cf53c41161013e578063c1cf53c41461084b578063ca33e64c1461086b578063cf4be3941461088b578063d51ed1c8146108a157600080fd5b8063a9059cbb146107f5578063b6a5d7de14610815578063bf56b3711461083557600080fd5b806395d89b41116101a057806395d89b41146107665780639d1944f514610795578063a6b06a27146107b5578063a8aa1b31146107d557600080fd5b806382bf293c14610708578063893d20e8146107285780638aee81271461074657600080fd5b8063313ce567116102a0578063658d4b7f1161023e57806370d6948b1161021857806370d6948b1461067b578063722b62ad146106b357806378109e54146106d25780637affa29b146106e857600080fd5b8063658d4b7f146106065780636ddd17131461062657806370a082311461064557600080fd5b806347a28b791161027a57806347a28b791461058c57806350db71fb146105ac578063571ac8b0146105cc578063617fe0ed146105ec57600080fd5b8063313ce56714610534578063334773271461055657806338280e6b1461056c57600080fd5b8063201e79911161030d5780632b112e49116102e75780632b112e49146104b05780632d48e896146104c55780632d594567146104e55780632f54bf6e1461050557600080fd5b8063201e79911461045057806323b872dd1461047057806328fd31981461049057600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103c95780630d295980146103f95780631161ae391461041b57806318160ddd1461043b57600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660245481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5060408051808201909152600e81526d131550d25108141c9bdd1bd8dbdb60921b60208201525b60405161038091906126ba565b3480156103d557600080fd5b506103e96103e436600461271d565b610a8b565b6040519015158152602001610380565b34801561040557600080fd5b5061041961041436600461275e565b610af8565b005b34801561042757600080fd5b506103e9610436366004612779565b610b3e565b34801561044757600080fd5b50600a54610376565b34801561045c57600080fd5b5061041961046b366004612779565b610b52565b34801561047c57600080fd5b506103e961048b36600461279b565b610b82565b34801561049c57600080fd5b506103766104ab3660046127dc565b610c44565b3480156104bc57600080fd5b50610376610cb3565b3480156104d157600080fd5b506104196104e0366004612779565b610d05565b3480156104f157600080fd5b506104196105003660046127f9565b610d94565b34801561051157600080fd5b506103e96105203660046127dc565b6000546001600160a01b0391821691161490565b34801561054057600080fd5b5060125b60405160ff9091168152602001610380565b34801561056257600080fd5b50610376600b5481565b34801561057857600080fd5b506104196105873660046127dc565b610de5565b34801561059857600080fd5b506104196105a7366004612836565b610e6c565b3480156105b857600080fd5b506104196105c7366004612871565b610ecc565b3480156105d857600080fd5b506103e96105e73660046127dc565b610f1c565b3480156105f857600080fd5b506029546103e99060ff1681565b34801561061257600080fd5b50610419610621366004612871565b610f2a565b34801561063257600080fd5b50602e546103e990610100900460ff1681565b34801561065157600080fd5b506103766106603660046127dc565b6001600160a01b03166000908152600e602052604090205490565b34801561068757600080fd5b5060095461069b906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b3480156106bf57600080fd5b5060295461054490610100900460ff1681565b3480156106de57600080fd5b50610376600d5481565b3480156106f457600080fd5b506104196107033660046128a6565b610f7a565b34801561071457600080fd5b506104196107233660046128a6565b610fcb565b34801561073457600080fd5b506000546001600160a01b031661069b565b34801561075257600080fd5b506104196107613660046127dc565b611016565b34801561077257600080fd5b5060408051808201909152600681526509131550d25160d21b60208201526103bc565b3480156107a157600080fd5b506104196107b03660046128a6565b61109d565b3480156107c157600080fd5b506104196107d0366004612871565b6110d6565b3480156107e157600080fd5b50602c5461069b906001600160a01b031681565b34801561080157600080fd5b506103e961081036600461271d565b611148565b34801561082157600080fd5b506104196108303660046127dc565b611155565b34801561084157600080fd5b50610376602d5481565b34801561085757600080fd5b50610419610866366004612836565b6111a6565b34801561087757600080fd5b5060075461069b906001600160a01b031681565b34801561089757600080fd5b50610376600c5481565b3480156108ad57600080fd5b506103766108bc3660046128a6565b611200565b3480156108cd57600080fd5b506104196108dc3660046128bf565b61123e565b3480156108ed57600080fd5b506103766108fc36600461290a565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b34801561093357600080fd5b50610419610942366004612938565b6112a2565b34801561095357600080fd5b506104196109623660046128a6565b6112fd565b34801561097357600080fd5b5060085461069b906001600160a01b031681565b34801561099357600080fd5b506104196109a23660046127dc565b611348565b3480156109b357600080fd5b50610419611393565b3480156109c857600080fd5b506104196109d73660046127dc565b6113f2565b3480156109e857600080fd5b50610419611488565b3480156109fd57600080fd5b50610419610a0c366004612871565b6114eb565b348015610a1d57600080fd5b50610419610a2c366004612871565b6115ef565b348015610a3d57600080fd5b50602b5461069b906001600160a01b031681565b348015610a5d57600080fd5b506103e9610a6c3660046127dc565b61163f565b348015610a7d57600080fd5b50602e546103e99060ff1681565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ae69086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b2b5760405162461bcd60e51b8152600401610b2290612954565b60405180910390fd5b602e805460ff1916911515919091179055565b600082610b4a83611200565b119392505050565b610b5b3361163f565b610b775760405162461bcd60e51b8152600401610b2290612974565b602591909155602655565b6001600160a01b0383166000908152600f6020908152604080832033845290915281205460001914610c2f576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f82528381203382529091529190912054610c0a91849061165d565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b610c3a848484611697565b90505b9392505050565b60275460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa158015610c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af29190612999565b6005546001600160a01b03166000908152600e6020526040812054610d00906004546001600160a01b03166000908152600e6020526040902054610cfa90600a5490611a69565b90611a69565b905090565b610d0e3361163f565b610d2a5760405162461bcd60e51b8152600401610b2290612974565b6027546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610d7857600080fd5b505af1158015610d8c573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610dbe5760405162461bcd60e51b8152600401610b2290612954565b6029805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610dee3361163f565b610e0a5760405162461bcd60e51b8152600401610b2290612974565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152601060209081526040808320805460ff1990811660019081179092556011845282852080548216831790556012909352922080549091169091179055565b6000546001600160a01b03163314610e965760405162461bcd60e51b8152600401610b2290612954565b6014859055601584905560168390556017829055610ec082610eba85818989611aab565b90611aab565b60185560235550505050565b610ed53361163f565b610ef15760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000610af282600019610a8b565b610f333361163f565b610f4f5760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fa45760405162461bcd60e51b8152600401610b2290612954565b610fc5612710610fbf83600a54611b0a90919063ffffffff16565b90611b8c565b600b5550565b6000546001600160a01b03163314610ff55760405162461bcd60e51b8152600401610b2290612954565b611010612710610fbf83600a54611b0a90919063ffffffff16565b600d5550565b61101f3361163f565b61103b5760405162461bcd60e51b8152600401610b2290612974565b602754604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b15801561108257600080fd5b505af1158015611096573d6000803e3d6000fd5b5050505050565b6110a63361163f565b6110c25760405162461bcd60e51b8152600401610b2290612974565b620b71b081106110d157600080fd5b602855565b6110df3361163f565b6110fb5760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b039091166000908152601160209081526040808320805494151560ff19958616811790915560108352818420805486168217905560129092529091208054909216179055565b6000610c3d338484611697565b6000546001600160a01b0316331461117f5760405162461bcd60e51b8152600401610b2290612954565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b031633146111d05760405162461bcd60e51b8152600401610b2290612954565b6019859055601a849055601b839055601c8290556111f482610eba85818989611aab565b601d5560235550505050565b6000610af261120d610cb3565b602c546001600160a01b03166000908152600e6020526040902054610fbf90611237906002611b0a565b8590611b0a565b6112473361163f565b6112635760405162461bcd60e51b8152600401610b2290612974565b600780546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560098054919093169116179055565b6112ab3361163f565b6112c75760405162461bcd60e51b8152600401610b2290612974565b602e805461ff00191661010084151502179055600a54612710906112ec9083906129c8565b6112f691906129df565b6024555050565b6000546001600160a01b031633146113275760405162461bcd60e51b8152600401610b2290612954565b611342612710610fbf83600a54611b0a90919063ffffffff16565b600c5550565b6000546001600160a01b031633146113725760405162461bcd60e51b8152600401610b2290612954565b6001600160a01b03166000908152600160205260409020805460ff19169055565b602754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b1580156113d857600080fd5b505af11580156113ec573d6000803e3d6000fd5b50505050565b6000546001600160a01b0316331461141c5760405162461bcd60e51b8152600401610b2290612954565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6114913361163f565b6114ad5760405162461bcd60e51b8152600401610b2290612974565b60075460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156114e7573d6000803e3d6000fd5b5050565b6114f43361163f565b6115105760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03821630148015906115375750602c546001600160a01b03838116911614155b61154057600080fd5b6001600160a01b0382166000908152601360205260409020805460ff191682158015919091179091556115a657602754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610d5e565b6027546001600160a01b038381166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610d5e565b6115f83361163f565b6116145760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b600081848411156116815760405162461bcd60e51b8152600401610b2291906126ba565b50600061168e8486612a01565b95945050505050565b602e5460009062010000900460ff16156116bd576116b6848484611bce565b9050610c3d565b6001600160a01b03841660009081526001602052604090205460ff161580156116ff57506001600160a01b03831660009081526001602052604090205460ff16155b801561171957506006546001600160a01b03858116911614155b1561177057602e5460ff166117705760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b22565b602c546001600160a01b0384811691161461178a81611cb4565b611795858585611cfd565b61179f8585611eb9565b6117ab85848684611f9b565b6117b36120d3565b156117c0576117c061212d565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0388166000908152600e909152919091205461181291859061165d565b6001600160a01b0386166000908152600e6020908152604080832093909355601090529081205460ff16156118475783611851565b61185186856125e6565b6001600160a01b0386166000908152600e60205260409020549091506118779082611aab565b6001600160a01b038087166000908152600e602090815260408083209490945591891681526013909152205460ff1661191b576027546001600160a01b038781166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561190857600080fd5b505af1925050508015611919575060015b505b6001600160a01b03851660009081526013602052604090205460ff166119ac576027546001600160a01b038681166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561199957600080fd5b505af19250505080156119aa575060015b505b6027546028546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916119e49160040190815260200190565b600060405180830381600087803b1580156119fe57600080fd5b505af1925050508015611a0f575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a5591815260200190565b60405180910390a350600195945050505050565b6000610c3d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061165d565b600080611ab88385612a14565b905083811015610c3d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b22565b600082600003611b1c57506000610af2565b6000611b2883856129c8565b905082611b3585836129df565b14610c3d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b22565b6000610c3d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061268c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600e90915291822054611c1f91849061165d565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054611c4e9083611aab565b6001600160a01b038085166000818152600e602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ca29086815260200190565b60405180910390a35060019392505050565b8015611cdb57601954601e55601a54601f55601b54602055601c54602155601d5460225550565b601454601e55601554601f556016546020556017546021556018546022555b50565b6001600160a01b03831660009081526001602052604090205460ff16158015611d3f57506001600160a01b03831660009081526011602052604090205460ff16155b8015611d6457506001600160a01b03821660009081526011602052604090205460ff16155b8015611d7e57506000546001600160a01b03838116911614155b8015611d9357506001600160a01b0382163014155b8015611dad57506004546001600160a01b03838116911614155b8015611dc75750602c546001600160a01b03838116911614155b8015611de157506008546001600160a01b03838116911614155b8015611dfb57506007546001600160a01b03838116911614155b8015611e1557506009546001600160a01b03838116911614155b15611eb4576001600160a01b0382166000908152600e6020526040902054600d54611e408383612a14565b11156113ec5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b22565b505050565b602c546001600160a01b038381169116148015611ed8575060295460ff165b8015611efd57506001600160a01b03811660009081526012602052604090205460ff16155b156114e7576001600160a01b0381166000908152602a60205260409020544211611f695760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610b22565b602954611f7e90610100900460ff1642612a14565b6001600160a01b0382166000908152602a60205260409020555050565b6000546001600160a01b038381169116146113ec57801561204757600c5483111580611fdf57506001600160a01b03841660009081526011602052604090205460ff165b8061200257506001600160a01b03821660009081526011602052604090205460ff165b6120425760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b22565b6113ec565b600b548311158061207057506001600160a01b03841660009081526011602052604090205460ff165b8061209357506001600160a01b03821660009081526011602052604090205460ff165b6113ec5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b22565b602c546000906001600160a01b031633148015906120fa5750602e5462010000900460ff16155b801561210d5750602e54610100900460ff165b8015610d00575050602454306000908152600e6020526040902054101590565b602e805462ff000019166201000017905560255460265460009161215091610b3e565b61215c57601e5461215f565b60005b905060006121836002610fbf602254610fbf86602454611b0a90919063ffffffff16565b9050600061219c82602454611a6990919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106121d6576121d6612a27565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061220757612207612a27565b6001600160a01b039283166020918202929092010152602b5460405163791ac94760e01b81524792919091169063791ac94790612251908690600090879030904290600401612a3d565b600060405180830381600087803b15801561226b57600080fd5b505af115801561227f573d6000803e3d6000fd5b5050505060006122988247611a6990919063ffffffff16565b905060006122b36122aa886002611b8c565b60225490611a69565b905060006122c86002610fbf8481878d611b0a565b905060006122e583610fbf60205487611b0a90919063ffffffff16565b9050600061230284610fbf60215488611b0a90919063ffffffff16565b9050600061231f85610fbf601f5489611b0a90919063ffffffff16565b9050602760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561237157600080fd5b505af193505050508015612383575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d80600081146123d6576040519150601f19603f3d011682016040523d82523d6000602084013e6123db565b606091505b50506009546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612434576040519150601f19603f3d011682016040523d82523d6000602084013e612439565b606091505b505090508161249b5760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610b22565b806124f35760405162461bcd60e51b815260206004820152602260248201527f74746d2072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610b22565b8b156125cb57602b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015612569573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061258e9190612aae565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602e805462ff0000191690555050505050505050505050565b600080612604602354610fbf60225486611b0a90919063ffffffff16565b306000908152600e60205260409020549091506126219082611aab565b306000818152600e6020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126729085815260200190565b60405180910390a36126848382611a69565b949350505050565b600081836126ad5760405162461bcd60e51b8152600401610b2291906126ba565b50600061168e84866129df565b600060208083528351808285015260005b818110156126e7578581018301518582016040015282016126cb565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611cfa57600080fd5b6000806040838503121561273057600080fd5b823561273b81612708565b946020939093013593505050565b8035801515811461275957600080fd5b919050565b60006020828403121561277057600080fd5b610c3d82612749565b6000806040838503121561278c57600080fd5b50508035926020909101359150565b6000806000606084860312156127b057600080fd5b83356127bb81612708565b925060208401356127cb81612708565b929592945050506040919091013590565b6000602082840312156127ee57600080fd5b8135610c3d81612708565b6000806040838503121561280c57600080fd5b61281583612749565b9150602083013560ff8116811461282b57600080fd5b809150509250929050565b600080600080600060a0868803121561284e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561288457600080fd5b823561288f81612708565b915061289d60208401612749565b90509250929050565b6000602082840312156128b857600080fd5b5035919050565b6000806000606084860312156128d457600080fd5b83356128df81612708565b925060208401356128ef81612708565b915060408401356128ff81612708565b809150509250925092565b6000806040838503121561291d57600080fd5b823561292881612708565b9150602083013561282b81612708565b6000806040838503121561294b57600080fd5b61273b83612749565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b6000602082840312156129ab57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610af257610af26129b2565b6000826129fc57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610af257610af26129b2565b80820180821115610af257610af26129b2565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a8d5784516001600160a01b031683529383019391830191600101612a68565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ac357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205f490c9f3edcf94cc26d3e39dc98eb5c923dd54bf3bb17c5e1ddedb8be17b8d164736f6c634300081100336080604052600180546001600160a01b031990811673912ce59144191c1204e64559fe8253a0e49e654817909155600280549091167382af49447d8a07e3bd95bd0d56f35241523fbab11790556ec097ce7bc90715b34b9f1000000000600c55610e10600d5564e8d4a51000600e5534801561007a57600080fd5b506040516110d03803806110d0833981016040819052610099916100f3565b6001600160a01b0381166100c157731b02da8cb0d097eb8d57a175b88c7d8b479975066100c3565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610123565b60006020828403121561010557600080fd5b81516001600160a01b038116811461011c57600080fd5b9392505050565b610f9e806101326000396000f3fe6080604052600436106100f35760003560e01c80638aee81271161008a578063e2d2e21911610059578063e2d2e2191461029c578063efca2eed146102b2578063ffb2c479146102c8578063ffd49c84146102e857600080fd5b80638aee812714610207578063997664d714610227578063ce7c2ac21461023d578063d0e30db01461029457600080fd5b80632d48e896116100c65780632d48e896146101835780633a98ef39146101a35780634fab0ae8146101b957806364a285fd146101cf57600080fd5b806311ce023d146100f857806314b6ca961461012157806315f7e05e1461014357806328fd319814610163575b600080fd5b34801561010457600080fd5b5061010e600c5481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c366004610d37565b6102fe565b005b34801561014f57600080fd5b5061014161015e366004610d63565b610476565b34801561016f57600080fd5b5061010e61017e366004610d63565b610499565b34801561018f57600080fd5b5061014161019e366004610d80565b610524565b3480156101af57600080fd5b5061010e60085481565b3480156101c557600080fd5b5061010e600e5481565b3480156101db57600080fd5b506001546101ef906001600160a01b031681565b6040516001600160a01b039091168152602001610118565b34801561021357600080fd5b50610141610222366004610d63565b610546565b34801561023357600080fd5b5061010e60095481565b34801561024957600080fd5b50610279610258366004610d63565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b61014161057f565b3480156102a857600080fd5b5061010e600b5481565b3480156102be57600080fd5b5061010e600a5481565b3480156102d457600080fd5b506101416102e3366004610da2565b6107ae565b3480156102f457600080fd5b5061010e600d5481565b6000546001600160a01b0316331461031557600080fd5b6001600160a01b0382166000908152600760205260409020541561033c5761033c826108b2565b60008111801561036257506001600160a01b038216600090815260076020526040902054155b156103c857600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b03191690911790556103fb565b801580156103ed57506001600160a01b03821660009081526007602052604090205415155b156103fb576103fb826109d0565b6001600160a01b03821660009081526007602052604090205460085461042c91839161042691610ae5565b90610b30565b6008556001600160a01b038216600090815260076020526040902081905561045381610b94565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6000546001600160a01b0316331461048d57600080fd5b610496816108b2565b50565b6001600160a01b03811660009081526007602052604081205481036104c057506000919050565b6001600160a01b0382166000908152600760205260408120546104e290610b94565b6001600160a01b038416600090815260076020526040902060010154909150808211610512575060009392505050565b61051c8282610ae5565b949350505050565b6000546001600160a01b0316331461053b57600080fd5b600d91909155600e55565b6000546001600160a01b0316331461055d57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461059657600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156105df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106039190610dbb565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061064957610649610dd4565b6001600160a01b039283166020918202929092010152600180548351921691839190811061067957610679610dd4565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906106bf90600090869030904290600401610dea565b6000604051808303818588803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061076c93508692506001600160a01b03909116906370a0823190602401602060405180830381865afa158015610742573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107669190610dbb565b90610ae5565b60095490915061077c9082610b30565b600955600854600c546107a69161079d916107979085610bb1565b90610c33565b600b5490610b30565b600b55505050565b6000546001600160a01b031633146107c557600080fd5b60045460008190036107d5575050565b6000805a905060005b84831080156107ec57508381105b156108ab5783600f5410610800576000600f555b6108326004600f548154811061081857610818610dd4565b6000918252602090912001546001600160a01b0316610c75565b15610869576108696004600f548154811061084f5761084f610dd4565b6000918252602090912001546001600160a01b03166108b2565b61087e6108775a8490610ae5565b8490610b30565b92505a600f8054919350600061089383610e6a565b919050555080806108a390610e6a565b9150506107de565b5050505050565b6001600160a01b03811660009081526007602052604081205490036108d45750565b60006108df82610499565b905080156109cc57600a546108f49082610b30565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af115801561094a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096e9190610e83565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109a29082610b30565b6001600160a01b038316600090815260076020526040902060028101919091555461045390610b94565b5050565b600480546109e090600190610ea5565b815481106109f0576109f0610dd4565b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610a2e57610a2e610dd4565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610a7a90600190610ea5565b81548110610a8a57610a8a610dd4565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610ac057610ac0610eb8565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b2783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610cba565b90505b92915050565b600080610b3d8385610ece565b905083811015610b275760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610b2a600c54610797600b5485610bb190919063ffffffff16565b600082600003610bc357506000610b2a565b6000610bcf8385610ee1565b905082610bdc8583610ef8565b14610b275760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b8b565b6000610b2783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610cf4565b600d546001600160a01b03821660009081526006602052604081205490914291610c9f9190610ece565b108015610b2a5750600e54610cb383610499565b1192915050565b60008184841115610cde5760405162461bcd60e51b8152600401610b8b9190610f1a565b506000610ceb8486610ea5565b95945050505050565b60008183610d155760405162461bcd60e51b8152600401610b8b9190610f1a565b506000610ceb8486610ef8565b6001600160a01b038116811461049657600080fd5b60008060408385031215610d4a57600080fd5b8235610d5581610d22565b946020939093013593505050565b600060208284031215610d7557600080fd5b8135610b2781610d22565b60008060408385031215610d9357600080fd5b50508035926020909101359150565b600060208284031215610db457600080fd5b5035919050565b600060208284031215610dcd57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610e345784516001600160a01b031683529383019391830191600101610e0f565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b600060018201610e7c57610e7c610e54565b5060010190565b600060208284031215610e9557600080fd5b81518015158114610b2757600080fd5b81810381811115610b2a57610b2a610e54565b634e487b7160e01b600052603160045260246000fd5b80820180821115610b2a57610b2a610e54565b8082028115828204841417610b2a57610b2a610e54565b600082610f1557634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610f4757858101830151858201604001528201610f2b565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220d9ac963b644cdfdd0c752782590471da9afc5a7f5d6fff8a37fed82160ca378d64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103545760003560e01c806382bf293c116101c6578063d7c01032116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610a11578063f887ea4014610a31578063fe9fbb8014610a51578063ffb54a9914610a7157600080fd5b8063f2fde38b146109bc578063f4293890146109dc578063f708a64f146109f157600080fd5b8063df4a76c5116100d1578063df4a76c514610947578063e96fada214610967578063f0b37c0414610987578063f0fc6bca146109a757600080fd5b8063d7c01032146108c1578063dd62ed3e146108e1578063df20fd491461092757600080fd5b8063a9059cbb11610164578063c1cf53c41161013e578063c1cf53c41461084b578063ca33e64c1461086b578063cf4be3941461088b578063d51ed1c8146108a157600080fd5b8063a9059cbb146107f5578063b6a5d7de14610815578063bf56b3711461083557600080fd5b806395d89b41116101a057806395d89b41146107665780639d1944f514610795578063a6b06a27146107b5578063a8aa1b31146107d557600080fd5b806382bf293c14610708578063893d20e8146107285780638aee81271461074657600080fd5b8063313ce567116102a0578063658d4b7f1161023e57806370d6948b1161021857806370d6948b1461067b578063722b62ad146106b357806378109e54146106d25780637affa29b146106e857600080fd5b8063658d4b7f146106065780636ddd17131461062657806370a082311461064557600080fd5b806347a28b791161027a57806347a28b791461058c57806350db71fb146105ac578063571ac8b0146105cc578063617fe0ed146105ec57600080fd5b8063313ce56714610534578063334773271461055657806338280e6b1461056c57600080fd5b8063201e79911161030d5780632b112e49116102e75780632b112e49146104b05780632d48e896146104c55780632d594567146104e55780632f54bf6e1461050557600080fd5b8063201e79911461045057806323b872dd1461047057806328fd31981461049057600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103c95780630d295980146103f95780631161ae391461041b57806318160ddd1461043b57600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660245481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5060408051808201909152600e81526d131550d25108141c9bdd1bd8dbdb60921b60208201525b60405161038091906126ba565b3480156103d557600080fd5b506103e96103e436600461271d565b610a8b565b6040519015158152602001610380565b34801561040557600080fd5b5061041961041436600461275e565b610af8565b005b34801561042757600080fd5b506103e9610436366004612779565b610b3e565b34801561044757600080fd5b50600a54610376565b34801561045c57600080fd5b5061041961046b366004612779565b610b52565b34801561047c57600080fd5b506103e961048b36600461279b565b610b82565b34801561049c57600080fd5b506103766104ab3660046127dc565b610c44565b3480156104bc57600080fd5b50610376610cb3565b3480156104d157600080fd5b506104196104e0366004612779565b610d05565b3480156104f157600080fd5b506104196105003660046127f9565b610d94565b34801561051157600080fd5b506103e96105203660046127dc565b6000546001600160a01b0391821691161490565b34801561054057600080fd5b5060125b60405160ff9091168152602001610380565b34801561056257600080fd5b50610376600b5481565b34801561057857600080fd5b506104196105873660046127dc565b610de5565b34801561059857600080fd5b506104196105a7366004612836565b610e6c565b3480156105b857600080fd5b506104196105c7366004612871565b610ecc565b3480156105d857600080fd5b506103e96105e73660046127dc565b610f1c565b3480156105f857600080fd5b506029546103e99060ff1681565b34801561061257600080fd5b50610419610621366004612871565b610f2a565b34801561063257600080fd5b50602e546103e990610100900460ff1681565b34801561065157600080fd5b506103766106603660046127dc565b6001600160a01b03166000908152600e602052604090205490565b34801561068757600080fd5b5060095461069b906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b3480156106bf57600080fd5b5060295461054490610100900460ff1681565b3480156106de57600080fd5b50610376600d5481565b3480156106f457600080fd5b506104196107033660046128a6565b610f7a565b34801561071457600080fd5b506104196107233660046128a6565b610fcb565b34801561073457600080fd5b506000546001600160a01b031661069b565b34801561075257600080fd5b506104196107613660046127dc565b611016565b34801561077257600080fd5b5060408051808201909152600681526509131550d25160d21b60208201526103bc565b3480156107a157600080fd5b506104196107b03660046128a6565b61109d565b3480156107c157600080fd5b506104196107d0366004612871565b6110d6565b3480156107e157600080fd5b50602c5461069b906001600160a01b031681565b34801561080157600080fd5b506103e961081036600461271d565b611148565b34801561082157600080fd5b506104196108303660046127dc565b611155565b34801561084157600080fd5b50610376602d5481565b34801561085757600080fd5b50610419610866366004612836565b6111a6565b34801561087757600080fd5b5060075461069b906001600160a01b031681565b34801561089757600080fd5b50610376600c5481565b3480156108ad57600080fd5b506103766108bc3660046128a6565b611200565b3480156108cd57600080fd5b506104196108dc3660046128bf565b61123e565b3480156108ed57600080fd5b506103766108fc36600461290a565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b34801561093357600080fd5b50610419610942366004612938565b6112a2565b34801561095357600080fd5b506104196109623660046128a6565b6112fd565b34801561097357600080fd5b5060085461069b906001600160a01b031681565b34801561099357600080fd5b506104196109a23660046127dc565b611348565b3480156109b357600080fd5b50610419611393565b3480156109c857600080fd5b506104196109d73660046127dc565b6113f2565b3480156109e857600080fd5b50610419611488565b3480156109fd57600080fd5b50610419610a0c366004612871565b6114eb565b348015610a1d57600080fd5b50610419610a2c366004612871565b6115ef565b348015610a3d57600080fd5b50602b5461069b906001600160a01b031681565b348015610a5d57600080fd5b506103e9610a6c3660046127dc565b61163f565b348015610a7d57600080fd5b50602e546103e99060ff1681565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ae69086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b2b5760405162461bcd60e51b8152600401610b2290612954565b60405180910390fd5b602e805460ff1916911515919091179055565b600082610b4a83611200565b119392505050565b610b5b3361163f565b610b775760405162461bcd60e51b8152600401610b2290612974565b602591909155602655565b6001600160a01b0383166000908152600f6020908152604080832033845290915281205460001914610c2f576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f82528381203382529091529190912054610c0a91849061165d565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b610c3a848484611697565b90505b9392505050565b60275460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa158015610c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af29190612999565b6005546001600160a01b03166000908152600e6020526040812054610d00906004546001600160a01b03166000908152600e6020526040902054610cfa90600a5490611a69565b90611a69565b905090565b610d0e3361163f565b610d2a5760405162461bcd60e51b8152600401610b2290612974565b6027546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610d7857600080fd5b505af1158015610d8c573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610dbe5760405162461bcd60e51b8152600401610b2290612954565b6029805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610dee3361163f565b610e0a5760405162461bcd60e51b8152600401610b2290612974565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152601060209081526040808320805460ff1990811660019081179092556011845282852080548216831790556012909352922080549091169091179055565b6000546001600160a01b03163314610e965760405162461bcd60e51b8152600401610b2290612954565b6014859055601584905560168390556017829055610ec082610eba85818989611aab565b90611aab565b60185560235550505050565b610ed53361163f565b610ef15760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000610af282600019610a8b565b610f333361163f565b610f4f5760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fa45760405162461bcd60e51b8152600401610b2290612954565b610fc5612710610fbf83600a54611b0a90919063ffffffff16565b90611b8c565b600b5550565b6000546001600160a01b03163314610ff55760405162461bcd60e51b8152600401610b2290612954565b611010612710610fbf83600a54611b0a90919063ffffffff16565b600d5550565b61101f3361163f565b61103b5760405162461bcd60e51b8152600401610b2290612974565b602754604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b15801561108257600080fd5b505af1158015611096573d6000803e3d6000fd5b5050505050565b6110a63361163f565b6110c25760405162461bcd60e51b8152600401610b2290612974565b620b71b081106110d157600080fd5b602855565b6110df3361163f565b6110fb5760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b039091166000908152601160209081526040808320805494151560ff19958616811790915560108352818420805486168217905560129092529091208054909216179055565b6000610c3d338484611697565b6000546001600160a01b0316331461117f5760405162461bcd60e51b8152600401610b2290612954565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b031633146111d05760405162461bcd60e51b8152600401610b2290612954565b6019859055601a849055601b839055601c8290556111f482610eba85818989611aab565b601d5560235550505050565b6000610af261120d610cb3565b602c546001600160a01b03166000908152600e6020526040902054610fbf90611237906002611b0a565b8590611b0a565b6112473361163f565b6112635760405162461bcd60e51b8152600401610b2290612974565b600780546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560098054919093169116179055565b6112ab3361163f565b6112c75760405162461bcd60e51b8152600401610b2290612974565b602e805461ff00191661010084151502179055600a54612710906112ec9083906129c8565b6112f691906129df565b6024555050565b6000546001600160a01b031633146113275760405162461bcd60e51b8152600401610b2290612954565b611342612710610fbf83600a54611b0a90919063ffffffff16565b600c5550565b6000546001600160a01b031633146113725760405162461bcd60e51b8152600401610b2290612954565b6001600160a01b03166000908152600160205260409020805460ff19169055565b602754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b1580156113d857600080fd5b505af11580156113ec573d6000803e3d6000fd5b50505050565b6000546001600160a01b0316331461141c5760405162461bcd60e51b8152600401610b2290612954565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6114913361163f565b6114ad5760405162461bcd60e51b8152600401610b2290612974565b60075460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156114e7573d6000803e3d6000fd5b5050565b6114f43361163f565b6115105760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03821630148015906115375750602c546001600160a01b03838116911614155b61154057600080fd5b6001600160a01b0382166000908152601360205260409020805460ff191682158015919091179091556115a657602754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610d5e565b6027546001600160a01b038381166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610d5e565b6115f83361163f565b6116145760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b600081848411156116815760405162461bcd60e51b8152600401610b2291906126ba565b50600061168e8486612a01565b95945050505050565b602e5460009062010000900460ff16156116bd576116b6848484611bce565b9050610c3d565b6001600160a01b03841660009081526001602052604090205460ff161580156116ff57506001600160a01b03831660009081526001602052604090205460ff16155b801561171957506006546001600160a01b03858116911614155b1561177057602e5460ff166117705760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b22565b602c546001600160a01b0384811691161461178a81611cb4565b611795858585611cfd565b61179f8585611eb9565b6117ab85848684611f9b565b6117b36120d3565b156117c0576117c061212d565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0388166000908152600e909152919091205461181291859061165d565b6001600160a01b0386166000908152600e6020908152604080832093909355601090529081205460ff16156118475783611851565b61185186856125e6565b6001600160a01b0386166000908152600e60205260409020549091506118779082611aab565b6001600160a01b038087166000908152600e602090815260408083209490945591891681526013909152205460ff1661191b576027546001600160a01b038781166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561190857600080fd5b505af1925050508015611919575060015b505b6001600160a01b03851660009081526013602052604090205460ff166119ac576027546001600160a01b038681166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561199957600080fd5b505af19250505080156119aa575060015b505b6027546028546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916119e49160040190815260200190565b600060405180830381600087803b1580156119fe57600080fd5b505af1925050508015611a0f575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a5591815260200190565b60405180910390a350600195945050505050565b6000610c3d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061165d565b600080611ab88385612a14565b905083811015610c3d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b22565b600082600003611b1c57506000610af2565b6000611b2883856129c8565b905082611b3585836129df565b14610c3d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b22565b6000610c3d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061268c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600e90915291822054611c1f91849061165d565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054611c4e9083611aab565b6001600160a01b038085166000818152600e602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ca29086815260200190565b60405180910390a35060019392505050565b8015611cdb57601954601e55601a54601f55601b54602055601c54602155601d5460225550565b601454601e55601554601f556016546020556017546021556018546022555b50565b6001600160a01b03831660009081526001602052604090205460ff16158015611d3f57506001600160a01b03831660009081526011602052604090205460ff16155b8015611d6457506001600160a01b03821660009081526011602052604090205460ff16155b8015611d7e57506000546001600160a01b03838116911614155b8015611d9357506001600160a01b0382163014155b8015611dad57506004546001600160a01b03838116911614155b8015611dc75750602c546001600160a01b03838116911614155b8015611de157506008546001600160a01b03838116911614155b8015611dfb57506007546001600160a01b03838116911614155b8015611e1557506009546001600160a01b03838116911614155b15611eb4576001600160a01b0382166000908152600e6020526040902054600d54611e408383612a14565b11156113ec5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b22565b505050565b602c546001600160a01b038381169116148015611ed8575060295460ff165b8015611efd57506001600160a01b03811660009081526012602052604090205460ff16155b156114e7576001600160a01b0381166000908152602a60205260409020544211611f695760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610b22565b602954611f7e90610100900460ff1642612a14565b6001600160a01b0382166000908152602a60205260409020555050565b6000546001600160a01b038381169116146113ec57801561204757600c5483111580611fdf57506001600160a01b03841660009081526011602052604090205460ff165b8061200257506001600160a01b03821660009081526011602052604090205460ff165b6120425760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b22565b6113ec565b600b548311158061207057506001600160a01b03841660009081526011602052604090205460ff165b8061209357506001600160a01b03821660009081526011602052604090205460ff165b6113ec5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b22565b602c546000906001600160a01b031633148015906120fa5750602e5462010000900460ff16155b801561210d5750602e54610100900460ff165b8015610d00575050602454306000908152600e6020526040902054101590565b602e805462ff000019166201000017905560255460265460009161215091610b3e565b61215c57601e5461215f565b60005b905060006121836002610fbf602254610fbf86602454611b0a90919063ffffffff16565b9050600061219c82602454611a6990919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106121d6576121d6612a27565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061220757612207612a27565b6001600160a01b039283166020918202929092010152602b5460405163791ac94760e01b81524792919091169063791ac94790612251908690600090879030904290600401612a3d565b600060405180830381600087803b15801561226b57600080fd5b505af115801561227f573d6000803e3d6000fd5b5050505060006122988247611a6990919063ffffffff16565b905060006122b36122aa886002611b8c565b60225490611a69565b905060006122c86002610fbf8481878d611b0a565b905060006122e583610fbf60205487611b0a90919063ffffffff16565b9050600061230284610fbf60215488611b0a90919063ffffffff16565b9050600061231f85610fbf601f5489611b0a90919063ffffffff16565b9050602760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561237157600080fd5b505af193505050508015612383575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d80600081146123d6576040519150601f19603f3d011682016040523d82523d6000602084013e6123db565b606091505b50506009546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612434576040519150601f19603f3d011682016040523d82523d6000602084013e612439565b606091505b505090508161249b5760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610b22565b806124f35760405162461bcd60e51b815260206004820152602260248201527f74746d2072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610b22565b8b156125cb57602b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015612569573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061258e9190612aae565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602e805462ff0000191690555050505050505050505050565b600080612604602354610fbf60225486611b0a90919063ffffffff16565b306000908152600e60205260409020549091506126219082611aab565b306000818152600e6020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126729085815260200190565b60405180910390a36126848382611a69565b949350505050565b600081836126ad5760405162461bcd60e51b8152600401610b2291906126ba565b50600061168e84866129df565b600060208083528351808285015260005b818110156126e7578581018301518582016040015282016126cb565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611cfa57600080fd5b6000806040838503121561273057600080fd5b823561273b81612708565b946020939093013593505050565b8035801515811461275957600080fd5b919050565b60006020828403121561277057600080fd5b610c3d82612749565b6000806040838503121561278c57600080fd5b50508035926020909101359150565b6000806000606084860312156127b057600080fd5b83356127bb81612708565b925060208401356127cb81612708565b929592945050506040919091013590565b6000602082840312156127ee57600080fd5b8135610c3d81612708565b6000806040838503121561280c57600080fd5b61281583612749565b9150602083013560ff8116811461282b57600080fd5b809150509250929050565b600080600080600060a0868803121561284e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561288457600080fd5b823561288f81612708565b915061289d60208401612749565b90509250929050565b6000602082840312156128b857600080fd5b5035919050565b6000806000606084860312156128d457600080fd5b83356128df81612708565b925060208401356128ef81612708565b915060408401356128ff81612708565b809150509250925092565b6000806040838503121561291d57600080fd5b823561292881612708565b9150602083013561282b81612708565b6000806040838503121561294b57600080fd5b61273b83612749565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b6000602082840312156129ab57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610af257610af26129b2565b6000826129fc57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610af257610af26129b2565b80820180821115610af257610af26129b2565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a8d5784516001600160a01b031683529383019391830191600101612a68565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ac357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205f490c9f3edcf94cc26d3e39dc98eb5c923dd54bf3bb17c5e1ddedb8be17b8d164736f6c63430008110033
Deployed Bytecode Sourcemap
12831:19555:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14820:54;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;14820:54:0;;;;;;;;17248:80;;;;;;;;;;-1:-1:-1;17320:5:0;;;;;;;;;;;;-1:-1:-1;;;17320:5:0;;;;17248:80;;;;;;;:::i;17670:216::-;;;;;;;;;;-1:-1:-1;17670:216:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;17670:216:0;1205:187:1;24137:94:0;;;;;;;;;;-1:-1:-1;24137:94:0;;;;;:::i;:::-;;:::i;:::-;;32158:150;;;;;;;;;;-1:-1:-1;32158:150:0;;;;;:::i;:::-;;:::i;16978:88::-;;;;;;;;;;-1:-1:-1;17051:12:0;;16978:88;;30394:183;;;;;;;;;;-1:-1:-1;30394:183:0;;;;;:::i;:::-;;:::i;18188:370::-;;;;;;;;;;-1:-1:-1;18188:370:0;;;;;:::i;:::-;;:::i;31386:146::-;;;;;;;;;;-1:-1:-1;31386:146:0;;;;;:::i;:::-;;:::i;31755:142::-;;;;;;;;;;;;;:::i;30852:183::-;;;;;;;;;;-1:-1:-1;30852:183:0;;;;;:::i;:::-;;:::i;24278:164::-;;;;;;;;;;-1:-1:-1;24278:164:0;;;;;:::i;:::-;;:::i;4228:103::-;;;;;;;;;;-1:-1:-1;4228:103:0;;;;;:::i;:::-;4283:4;4318:5;-1:-1:-1;;;;;4307:16:0;;;4318:5;;4307:16;;4228:103;17072:80;;;;;;;;;;-1:-1:-1;13523:2:0;17072:80;;;3227:4:1;3215:17;;;3197:36;;3185:2;3170:18;17072:80:0;3055:184:1;13638:57:0;;;;;;;;;;;;;;;;18888:283;;;;;;;;;;-1:-1:-1;18888:283:0;;;;;:::i;:::-;;:::i;28751:486::-;;;;;;;;;;-1:-1:-1;28751:486:0;;;;;:::i;:::-;;:::i;28369:130::-;;;;;;;;;;-1:-1:-1;28369:130:0;;;;;:::i;:::-;;:::i;17894:122::-;;;;;;;;;;-1:-1:-1;17894:122:0;;;;;:::i;:::-;;:::i;15181:37::-;;;;;;;;;;-1:-1:-1;15181:37:0;;;;;;;;28051:120;;;;;;;;;;-1:-1:-1;28051:120:0;;;;;:::i;:::-;;:::i;15477:30::-;;;;;;;;;;-1:-1:-1;15477:30:0;;;;;;;;;;;17418:105;;;;;;;;;;-1:-1:-1;17418:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17502:18:0;17484:7;17502:18;;;:9;:18;;;;;;;17418:105;13348:29;;;;;;;;;;-1:-1:-1;13348:29:0;;;;-1:-1:-1;;;;;13348:29:0;;;;;;-1:-1:-1;;;;;4187:32:1;;;4169:51;;4157:2;4142:18;13348:29:0;4023:203:1;15225:38:0;;;;;;;;;;-1:-1:-1;15225:38:0;;;;;;;;;;;13779:61;;;;;;;;;;;;;;;;27284:157;;;;;;;;;;-1:-1:-1;27284:157:0;;;;;:::i;:::-;;:::i;18636:156::-;;;;;;;;;;-1:-1:-1;18636:156:0;;;;;:::i;:::-;;:::i;17334:78::-;;;;;;;;;;-1:-1:-1;17386:7:0;17404:5;-1:-1:-1;;;;;17404:5:0;17334:78;;31223:108;;;;;;;;;;-1:-1:-1;31223:108:0;;;;;:::i;:::-;;:::i;17158:84::-;;;;;;;;;;-1:-1:-1;17232:7:0;;;;;;;;;;;;-1:-1:-1;;;17232:7:0;;;;17158:84;;31573:136;;;;;;;;;;-1:-1:-1;31573:136:0;;;;;:::i;:::-;;:::i;28507:209::-;;;;;;;;;;-1:-1:-1;28507:209:0;;;;;:::i;:::-;;:::i;15381:19::-;;;;;;;;;;-1:-1:-1;15381:19:0;;;;-1:-1:-1;;;;;15381:19:0;;;18024:156;;;;;;;;;;-1:-1:-1;18024:156:0;;;;;:::i;:::-;;:::i;3886:102::-;;;;;;;;;;-1:-1:-1;3886:102:0;;;;;:::i;:::-;;:::i;15407:25::-;;;;;;;;;;;;;;;;29271:506;;;;;;;;;;-1:-1:-1;29271:506:0;;;;;:::i;:::-;;:::i;13263:36::-;;;;;;;;;;-1:-1:-1;13263:36:0;;;;-1:-1:-1;;;;;13263:36:0;;;13708:58;;;;;;;;;;;;;;;;31939:167;;;;;;;;;;-1:-1:-1;31939:167:0;;;;;:::i;:::-;;:::i;29835:296::-;;;;;;;;;;-1:-1:-1;29835:296:0;;;;;:::i;:::-;;:::i;17529:133::-;;;;;;;;;;-1:-1:-1;17529:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17631:19:0;;;17613:7;17631:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17529:133;30177:180;;;;;;;;;;-1:-1:-1;30177:180:0;;;;;:::i;:::-;;:::i;27474:161::-;;;;;;;;;;-1:-1:-1;27474:161:0;;;;;:::i;:::-;;:::i;13306:35::-;;;;;;;;;;-1:-1:-1;13306:35:0;;;;-1:-1:-1;;;;;13306:35:0;;;4063:105;;;;;;;;;;-1:-1:-1;4063:105:0;;;;;:::i;:::-;;:::i;31087:90::-;;;;;;;;;;;;;:::i;4635:189::-;;;;;;;;;;-1:-1:-1;4635:189:0;;;;;:::i;:::-;;:::i;30616:181::-;;;;;;;;;;;;;:::i;27672:347::-;;;;;;;;;;-1:-1:-1;27672:347:0;;;;;:::i;:::-;;:::i;28206:128::-;;;;;;;;;;-1:-1:-1;28206:128:0;;;;;:::i;:::-;;:::i;15350:24::-;;;;;;;;;;-1:-1:-1;15350:24:0;;;;-1:-1:-1;;;;;15350:24:0;;;4401:115;;;;;;;;;;-1:-1:-1;4401:115:0;;;;;:::i;:::-;;:::i;15439:31::-;;;;;;;;;;-1:-1:-1;15439:31:0;;;;;;;;17670:216;17774:10;17745:4;17762:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17762:32:0;;;;;;;;;;:41;;;17819:37;17745:4;;17762:32;;17819:37;;;;17797:6;160:25:1;;148:2;133:18;;14:177;17819:37:0;;;;;;;;-1:-1:-1;17874:4:0;17670:216;;;;;:::o;24137:94::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;;;;;;;;;24202:11:::1;:21:::0;;-1:-1:-1;;24202:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24137:94::o;32158:150::-;32238:4;32294:6;32262:29;32282:8;32262:19;:29::i;:::-;:38;;32158:150;-1:-1:-1;;;32158:150:0:o;30394:183::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;30492:15:::1;:25:::0;;;;30528:26:::1;:41:::0;30394:183::o;18188:370::-;-1:-1:-1;;;;;18308:19:0;;18288:4;18308:19;;;:11;:19;;;;;;;;18328:10;18308:31;;;;;;;;-1:-1:-1;;18308:52:0;18305:186;;18410:69;;;;;;;;;;;-1:-1:-1;;;18410:69:0;;;;;;;;-1:-1:-1;;;;;18410:19:0;;-1:-1:-1;18410:19:0;;;:11;:19;;;;;18430:10;18410:31;;;;;;;;;;:69;;18446:6;;18410:35;:69::i;:::-;-1:-1:-1;;;;;18376:19:0;;;;;;:11;:19;;;;;;;;18396:10;18376:31;;;;;;;:103;18305:186;18510:40;18524:6;18532:9;18543:6;18510:13;:40::i;:::-;18503:47;;18188:370;;;;;;:::o;31386:146::-;31482:11;;:42;;-1:-1:-1;;;31482:42:0;;-1:-1:-1;;;;;4187:32:1;;;31482:42:0;;;4169:51:1;31455:7:0;;31482:11;;:29;;4142:18:1;;31482:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31755:142::-;31883:4;;-1:-1:-1;;;;;31883:4:0;31808:7;17502:18;;;:9;:18;;;;;;31835:54;;31862:4;;-1:-1:-1;;;;;31862:4:0;17484:7;17502:18;;;:9;:18;;;;;;31835:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;31828:61;;31755:142;:::o;30852:183::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;30962:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;30962:65:0;;::::1;::::0;::::1;7385:25:1::0;;;7426:18;;;7419:34;;;-1:-1:-1;;;;;30962:11:0;;::::1;::::0;:35:::1;::::0;7358:18:1;;30962:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30852:183:::0;;:::o;24278:164::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;24362:18:::1;:28:::0;;-1:-1:-1;;24401:33:0;24362:28;::::1;;-1:-1:-1::0;;24401:33:0;;;;;24362:28:::1;;24401:33:::0;;;::::1;::::0;;;::::1;;::::0;;24278:164::o;18888:283::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;18974:16:::1;:36:::0;;-1:-1:-1;;;;;18974:36:0;;::::1;-1:-1:-1::0;;;;;;18974:36:0;;::::1;::::0;::::1;::::0;;:16:::1;19021:30:::0;;;:11:::1;:30;::::0;;;;;;;:37;;-1:-1:-1;;19021:37:0;;::::1;18974:36:::0;19021:37;;::::1;::::0;;;19069:15:::1;:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;19121:16:::1;:35:::0;;;;;:42;;;;::::1;::::0;;::::1;::::0;;18888:283::o;28751:486::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;28925:15:::1;:34:::0;;;28970:9:::1;:22:::0;;;29003:16:::1;:36:::0;;;29050:15:::1;:34:::0;;;29109:77:::1;29068:16:::0;29109:55:::1;29022:17:::0;29109:55;28943:16;28982:10;29109:20:::1;:32::i;:::-;:36:::0;::::1;:55::i;:77::-;29095:11;:91:::0;29197:14:::1;:32:::0;-1:-1:-1;;;;28751:486:0:o;28369:130::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28458:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;28458:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28369:130::o;17894:122::-;17949:4;17973:35;17981:7;-1:-1:-1;;17973:7:0;:35::i;28051:120::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28135:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;28135:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28051:120::o;27284:157::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;27389:44:::1;27427:5;27389:33;27406:15;27389:12;;:16;;:33;;;;:::i;:::-;:37:::0;::::1;:44::i;:::-;27371:15;:62:::0;-1:-1:-1;27284:157:0:o;18636:156::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;18739:43:::1;18776:5;18739:32;18756:14;18739:12;;:16;;:32;;;;:::i;:43::-;18721:15;:61:::0;-1:-1:-1;18636:156:0:o;31223:108::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;31291:11:::1;::::0;:32:::1;::::0;-1:-1:-1;;;31291:32:0;;-1:-1:-1;;;;;4187:32:1;;;31291::0::1;::::0;::::1;4169:51:1::0;31291:11:0;;::::1;::::0;:26:::1;::::0;4142:18:1;;31291:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31223:108:::0;:::o;31573:136::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;31663:6:::1;31657:3;:12;31649:21;;;::::0;::::1;;31681:14;:20:::0;31573:136::o;28507:209::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28593:23:0;;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:32;;;::::1;;-1:-1:-1::0;;28593:32:0;;::::1;::::0;::::1;::::0;;;28636:11:::1;:19:::0;;;;;:28;;;::::1;::::0;::::1;::::0;;28675:16:::1;:24:::0;;;;;;:33;;;;::::1;;::::0;;28507:209::o;18024:156::-;18104:4;18128:44;18142:10;18154:9;18165:6;18128:13;:44::i;3886:102::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3950:23:0::1;;::::0;;;3976:4:::1;3950:23;::::0;;;;;;;:30;;-1:-1:-1;;3950:30:0::1;::::0;;::::1;::::0;;3886:102::o;29271:506::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;29450:16:::1;:36:::0;;;29497:10:::1;:24:::0;;;29532:17:::1;:38:::0;;;29581:16:::1;:36:::0;;;29645:81:::1;29600:17:::0;29645:58:::1;29552:18:::0;29645:58;29469:17;29510:11;29645:21:::1;:34::i;:81::-;29630:12;:96:::0;29737:14:::1;:32:::0;-1:-1:-1;;;;29271:506:0:o;31939:167::-;32007:7;32034:64;32075:22;:20;:22::i;:::-;32057:4;;-1:-1:-1;;;;;32057:4:0;17484:7;17502:18;;;:9;:18;;;;;;32034:36;;32047:22;;32067:1;32047:19;:22::i;:::-;32034:8;;:12;:36::i;29835:296::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;29979:21:::1;:46:::0;;-1:-1:-1;;;;;29979:46:0;;::::1;-1:-1:-1::0;;;;;;29979:46:0;;::::1;;::::0;;;30036:20:::1;:44:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;30091:14:::1;:32:::0;;;;;::::1;::::0;::::1;;::::0;;29835:296::o;30177:180::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;30269:11:::1;:22:::0;;-1:-1:-1;;30269:22:0::1;;::::0;::::1;;;;::::0;;30318:12:::1;::::0;30343:5:::1;::::0;30318:22:::1;::::0;30333:7;;30318:22:::1;:::i;:::-;:30;;;;:::i;:::-;30302:13;:46:::0;-1:-1:-1;;30177:180:0:o;27474:161::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;27582:45:::1;27621:5;27582:34;27599:16;27582:12;;:16;;:34;;;;:::i;:45::-;27563:16;:64:::0;-1:-1:-1;27474:161:0:o;4063:105::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4129:23:0::1;4155:5;4129:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;4129:31:0::1;::::0;;4063:105::o;31087:90::-;31132:11;;:37;;-1:-1:-1;;;31132:37:0;;31158:10;31132:37;;;4169:51:1;-1:-1:-1;;;;;31132:11:0;;;;:25;;4142:18:1;;31132:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31087:90::o;4635:189::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;4715:5:::1;:15:::0;;-1:-1:-1;;;;;;4715:15:0::1;-1:-1:-1::0;;;;;4715:15:0;::::1;::::0;;::::1;::::0;;4741:23;;;-1:-1:-1;4741:23:0::1;::::0;;;;;;;;:30;;-1:-1:-1;;4741:30:0::1;::::0;;::::1;::::0;;;4787:29;;4169:51:1;;;4787:29:0::1;::::0;4142:18:1;4787:29:0::1;;;;;;;4635:189:::0;:::o;30616:181::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;30738:21:::1;::::0;30730:59:::1;::::0;30698:21:::1;::::0;-1:-1:-1;;;;;30738:21:0::1;::::0;30730:59;::::1;;;::::0;30698:21;;30669:26:::1;30730:59:::0;30669:26;30730:59;30698:21;30738;30730:59;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30658:139;30616:181::o:0;27672:347::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27769:23:0;::::1;27787:4;27769:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;27806:4:0::1;::::0;-1:-1:-1;;;;;27796:14:0;;::::1;27806:4:::0;::::1;27796:14;;27769:41;27761:50;;;::::0;::::1;;-1:-1:-1::0;;;;;27822:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;27822:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;27866:146:::1;;27891:11;::::0;:31:::1;::::0;-1:-1:-1;;;27891:31:0;;-1:-1:-1;;;;;8629:32:1;;;27891:31:0::1;::::0;::::1;8611:51:1::0;27891:11:0::1;8678:18:1::0;;;8671:34;27891:11:0;;::::1;::::0;:20:::1;::::0;8584:18:1;;27891:31:0::1;8429:282:1::0;27866:146:0::1;27953:11;::::0;-1:-1:-1;;;;;27982:17:0;;::::1;27953:11;27982:17:::0;;;:9:::1;:17;::::0;;;;;;;27953:47;;-1:-1:-1;;;27953:47:0;;::::1;::::0;::::1;8611:51:1::0;;;;8678:18;;;8671:34;27953:11:0;::::1;::::0;:20:::1;::::0;8584:18:1;;27953:47:0::1;8429:282:1::0;28206:128:0;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28294:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;28294:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28206:128::o;4401:115::-;-1:-1:-1;;;;;4485:23:0;4461:4;4485:23;;;:14;:23;;;;;;;;;4401:115::o;1288:192::-;1374:7;1410:12;1402:6;;;;1394:29;;;;-1:-1:-1;;;1394:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1434:9:0;1446:5;1450:1;1446;:5;:::i;:::-;1434:17;1288:192;-1:-1:-1;;;;;1288:192:0:o;19210:1609::-;19322:6;;19302:4;;19322:6;;;;;19319:63;;;19338:41;19353:6;19361:9;19372:6;19338:14;:41::i;:::-;19331:48;;;;19319:63;-1:-1:-1;;;;;19438:22:0;;;;;;:14;:22;;;;;;;;19437:23;:53;;;;-1:-1:-1;;;;;;19465:25:0;;;;;;:14;:25;;;;;;;;19464:26;19437:53;:83;;;;-1:-1:-1;19494:16:0;;-1:-1:-1;;;;;19494:26:0;;;:16;;:26;;19437:83;19434:160;;;19544:11;;;;19536:46;;;;-1:-1:-1;;;19536:46:0;;9330:2:1;19536:46:0;;;9312:21:1;9369:2;9349:18;;;9342:30;9408:25;9388:18;;;9381:53;9451:18;;19536:46:0;9128:347:1;19536:46:0;19672:4;;-1:-1:-1;;;;;19659:17:0;;;19672:4;;19659:17;19723:22;19659:17;19723:14;:22::i;:::-;19787:41;19802:6;19810:9;19821:6;19787:14;:41::i;:::-;19869:35;19886:6;19894:9;19869:16;:35::i;:::-;19942:47;19955:6;19963;19971:9;19982:6;19942:12;:47::i;:::-;20052:16;:14;:16::i;:::-;20049:35;;;20071:10;:8;:10::i;:::-;20143:53;;;;;;;;;;;-1:-1:-1;;;20143:53:0;;;;;;;;-1:-1:-1;;;;;20143:17:0;;-1:-1:-1;20143:17:0;;;:9;:17;;;;;;;;:53;;20165:6;;20143:21;:53::i;:::-;-1:-1:-1;;;;;20123:17:0;;;;;;:9;:17;;;;;;;;:73;;;;23460:11;:19;;;;;;;;23459:20;20234:56;;20284:6;20234:56;;;20258:23;20266:6;20274;20258:7;:23::i;:::-;-1:-1:-1;;;;;20324:20:0;;;;;;:9;:20;;;;;;20209:81;;-1:-1:-1;20324:40:0;;20209:81;20324:24;:40::i;:::-;-1:-1:-1;;;;;20301:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;20410:24;;;;;:16;:24;;;;;;;20406:119;;20455:11;;-1:-1:-1;;;;;20484:17:0;;;20455:11;20484:17;;;:9;:17;;;;;;;;20455:47;;-1:-1:-1;;;20455:47:0;;;;;8611:51:1;;;;8678:18;;;8671:34;20455:11:0;;;:20;;8584:18:1;;20455:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20451:63;;-1:-1:-1;;;;;20541:27:0;;;;;;:16;:27;;;;;;;;20537:129;;20589:11;;-1:-1:-1;;;;;20621:20:0;;;20589:11;20621:20;;;:9;:20;;;;;;;;20589:53;;-1:-1:-1;;;20589:53:0;;;;;8611:51:1;;;;8678:18;;;8671:34;20589:11:0;;;:20;;8584:18:1;;20589:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20585:69;;20682:11;;20702:14;;20682:35;;-1:-1:-1;;;;;;20682:35:0;;-1:-1:-1;;;;;20682:11:0;;;;:19;;:35;;;;160:25:1;;;148:2;133:18;;14:177;20682:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20678:51;20763:9;-1:-1:-1;;;;;20746:43:0;20755:6;-1:-1:-1;;;;;20746:43:0;;20774:14;20746:43;;;;160:25:1;;148:2;133:18;;14:177;20746:43:0;;;;;;;;-1:-1:-1;20807:4:0;;19210:1609;-1:-1:-1;;;;;19210:1609:0:o;1146:136::-;1204:7;1231:43;1235:1;1238;1231:43;;;;;;;;;;;;;;;;;:3;:43::i;959:181::-;1017:7;;1049:5;1053:1;1049;:5;:::i;:::-;1037:17;;1078:1;1073;:6;;1065:46;;;;-1:-1:-1;;;1065:46:0;;9812:2:1;1065:46:0;;;9794:21:1;9851:2;9831:18;;;9824:30;9890:29;9870:18;;;9863:57;9937:18;;1065:46:0;9610:351:1;1486:250:0;1544:7;1568:1;1573;1568:6;1564:47;;-1:-1:-1;1598:1:0;1591:8;;1564:47;1623:9;1635:5;1639:1;1635;:5;:::i;:::-;1623:17;-1:-1:-1;1668:1:0;1659:5;1663:1;1623:17;1659:5;:::i;:::-;:10;1651:56;;;;-1:-1:-1;;;1651:56:0;;10168:2:1;1651:56:0;;;10150:21:1;10207:2;10187:18;;;10180:30;10246:34;10226:18;;;10219:62;-1:-1:-1;;;10297:18:1;;;10290:31;10338:19;;1651:56:0;9966:397:1;1742:132:0;1800:7;1827:39;1831:1;1834;1827:39;;;;;;;;;;;;;;;;;:3;:39::i;20856:330::-;20986:53;;;;;;;;;;;-1:-1:-1;;;20986:53:0;;;;;;;;-1:-1:-1;;;;;20986:17:0;;20949:4;20986:17;;;:9;:17;;;;;;;:53;;21008:6;;20986:21;:53::i;:::-;-1:-1:-1;;;;;20966:17:0;;;;;;;:9;:17;;;;;;:73;;;;21073:20;;;;;;;:32;;21098:6;21073:24;:32::i;:::-;-1:-1:-1;;;;;21050:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21121:35;;;;;;;;;;21149:6;160:25:1;;148:2;133:18;;14:177;21121:35:0;;;;;;;;-1:-1:-1;21174:4:0;20856:330;;;;;:::o;21245:523::-;21305:6;21302:459;;;21342:16;;21327:12;:31;21382:10;;21373:6;:19;21423:17;;21407:13;:33;21470:16;;21455:12;:31;21512:12;;21501:8;:23;21245:523;:::o;21302:459::-;21572:15;;21557:12;:30;21611:9;;21602:6;:18;21651:16;;21635:13;:32;21697:15;;21682:12;:30;21738:11;;21727:8;:22;21302:459;21245:523;:::o;22723:601::-;-1:-1:-1;;;;;22828:22:0;;;;;;:14;:22;;;;;;;;22827:23;:51;;;;-1:-1:-1;;;;;;22855:23:0;;;;;;:15;:23;;;;;;;;22854:24;22827:51;:82;;;;-1:-1:-1;;;;;;22883:26:0;;;;;;:15;:26;;;;;;;;22882:27;22827:82;:104;;;;-1:-1:-1;22926:5:0;;-1:-1:-1;;;;;22913:18:0;;;22926:5;;22913:18;;22827:104;:134;;;;-1:-1:-1;;;;;;22935:26:0;;22956:4;22935:26;;22827:134;:165;;;;-1:-1:-1;22987:4:0;;-1:-1:-1;;;;;22966:26:0;;;22987:4;;22966:26;;22827:165;:186;;;;-1:-1:-1;23009:4:0;;-1:-1:-1;;;;;22996:17:0;;;23009:4;;22996:17;;22827:186;:223;;;;-1:-1:-1;23030:20:0;;-1:-1:-1;;;;;23017:33:0;;;23030:20;;23017:33;;22827:223;:261;;;;-1:-1:-1;23067:21:0;;-1:-1:-1;;;;;23054:34:0;;;23067:21;;23054:34;;22827:261;:292;;;;-1:-1:-1;23105:14:0;;-1:-1:-1;;;;;23092:27:0;;;23105:14;;23092:27;;22827:292;22823:494;;;-1:-1:-1;;;;;17502:18:0;;23135;17502;;;:9;:18;;;;;;23224:15;;23200:19;23213:6;17502:18;23200:19;:::i;:::-;23199:40;;23191:114;;;;-1:-1:-1;;;23191:114:0;;10570:2:1;23191:114:0;;;10552:21:1;10609:2;10589:18;;;10582:30;10648:34;10628:18;;;10621:62;10719:32;10699:18;;;10692:60;10769:19;;23191:114:0;10368:426:1;22823:494:0;22723:601;;;:::o;22313:378::-;22408:4;;-1:-1:-1;;;;;22398:14:0;;;22408:4;;22398:14;:49;;;;-1:-1:-1;22429:18:0;;;;22398:49;:94;;;;-1:-1:-1;;;;;;22465:27:0;;;;;;:16;:27;;;;;;;;22464:28;22398:94;22394:290;;;-1:-1:-1;;;;;22517:24:0;;;;;;:13;:24;;;;;;22544:15;-1:-1:-1;22509:82:0;;;;-1:-1:-1;;;22509:82:0;;11001:2:1;22509:82:0;;;10983:21:1;11040:2;11020:18;;;11013:30;11079;11059:18;;;11052:58;11127:18;;22509:82:0;10799:352:1;22509:82:0;22651:21;;22633:39;;22651:21;;;;;22633:15;:39;:::i;:::-;-1:-1:-1;;;;;22606:24:0;;;;;;:13;:24;;;;;:66;22313:378;;:::o;21800:478::-;21928:5;;-1:-1:-1;;;;;21915:18:0;;;21928:5;;21915:18;21911:360;;21952:6;21949:311;;;21996:16;;21986:6;:26;;:53;;;-1:-1:-1;;;;;;22016:23:0;;;;;;:15;:23;;;;;;;;21986:53;:83;;;-1:-1:-1;;;;;;22043:26:0;;;;;;:15;:26;;;;;;;;21986:83;21978:113;;;;-1:-1:-1;;;21978:113:0;;11358:2:1;21978:113:0;;;11340:21:1;11397:2;11377:18;;;11370:30;-1:-1:-1;;;11416:18:1;;;11409:47;11473:18;;21978:113:0;11156:341:1;21978:113:0;21949:311;;;22150:15;;22140:6;:25;;:52;;;-1:-1:-1;;;;;;22169:23:0;;;;;;:15;:23;;;;;;;;22140:52;:82;;;-1:-1:-1;;;;;;22196:26:0;;;;;;:15;:26;;;;;;;;22140:82;22132:112;;;;-1:-1:-1;;;22132:112:0;;11358:2:1;22132:112:0;;;11340:21:1;11397:2;11377:18;;;11370:30;-1:-1:-1;;;11416:18:1;;;11409:47;11473:18;;22132:112:0;11156:341:1;23909:197:0;23996:4;;23958;;-1:-1:-1;;;;;23996:4:0;23982:10;:18;;;;:38;;-1:-1:-1;24014:6:0;;;;;;;24013:7;23982:38;:62;;;;-1:-1:-1;24033:11:0;;;;;;;23982:62;:116;;;;-1:-1:-1;;24085:13:0;;24075:4;24057:24;;;;:9;:24;;;;;;:41;;;23909:197::o;24496:2067::-;15554:6;:13;;-1:-1:-1;;15554:13:0;;;;;24591:15:::1;::::0;24608:26:::1;::::0;15554:13;;24575:60:::1;::::0;:15:::1;:60::i;:::-;:79;;24642:12;;24575:79;;;24638:1;24575:79;24545:109;;24665:23;24691:59;24748:1;24691:52;24734:8;;24691:38;24709:19;24691:13;;:17;;:38;;;;:::i;:59::-;24665:85;;24761:20;24784:34;24802:15;24784:13;;:17;;:34;;;;:::i;:::-;24855:16;::::0;;24869:1:::1;24855:16:::0;;;;;::::1;::::0;;24761:57;;-1:-1:-1;24831:21:0::1;::::0;24855:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24855:16:0::1;24831:40;;24900:4;24882;24887:1;24882:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24882:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24926:4:::1;::::0;24916:7;;24926:4;::::1;::::0;24916;;24926;;24916:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;24916:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;25001:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;25001:188:0;;24967:21:::1;::::0;25001:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;25073:12;;24943:21:::1;::::0;25116:4;;25143::::1;::::0;25163:15:::1;::::0;25001:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25200:18;25221:40;25247:13;25221:21;:25;;:40;;;;:::i;:::-;25200:61:::0;-1:-1:-1;25272:20:0::1;25295:40;25308:26;:19:::0;25332:1:::1;25308:23;:26::i;:::-;25295:8;::::0;;:12:::1;:40::i;:::-;25272:63:::0;-1:-1:-1;25346:27:0::1;25376:60;25434:1;25376:53;25272:63:::0;25376:53;:10;25391:19;25376:14:::1;:35::i;:60::-;25346:90;;25447:28;25478:47;25512:12;25478:29;25493:13;;25478:10;:14;;:29;;;;:::i;:47::-;25447:78;;25536:27;25566:46;25599:12;25566:28;25581:12;;25566:10;:14;;:28;;;;:::i;:46::-;25536:76;;25623:21;25647:40;25674:12;25647:22;25662:6;;25647:10;:14;;:22;;;;:::i;:40::-;25623:64;;25707:11;;;;;;;;;-1:-1:-1::0;;;;;25707:11:0::1;-1:-1:-1::0;;;;;25707:19:0::1;;25734:20;25707:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;25838:20:0::1;::::0;25830:78:::1;::::0;25780:21:::1;::::0;-1:-1:-1;;;;;25838:20:0::1;::::0;25898:5:::1;::::0;25872:19;;25780:21;25830:78;25780:21;25830:78;25872:19;25838:20;25898:5;25830:78:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;25972:14:0::1;::::0;25964:66:::1;::::0;25779:129;;-1:-1:-1;25920:15:0::1;::::0;-1:-1:-1;;;;;25972:14:0;;::::1;::::0;26020:5:::1;::::0;26000:13;;25920:15;25964:66;25920:15;25964:66;26000:13;25972:14;26020:5;25964:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25919:111;;;26050:16;26042:69;;;::::0;-1:-1:-1;;;26042:69:0;;13163:2:1;26042:69:0::1;::::0;::::1;13145:21:1::0;13202:2;13182:18;;;13175:30;13241:34;13221:18;;;13214:62;-1:-1:-1;;;13292:18:1;;;13285:38;13340:19;;26042:69:0::1;12961:404:1::0;26042:69:0::1;26130:10;26122:57;;;::::0;-1:-1:-1;;;26122:57:0;;13572:2:1;26122:57:0::1;::::0;::::1;13554:21:1::0;13611:2;13591:18;;;13584:30;13650:34;13630:18;;;13623:62;-1:-1:-1;;;13701:18:1;;;13694:32;13743:19;;26122:57:0::1;13370:398:1::0;26122:57:0::1;26195:19:::0;;26192:364:::1;;26230:6;::::0;26405:21:::1;::::0;26230:245:::1;::::0;-1:-1:-1;;;26230:245:0;;26307:4:::1;26230:245;::::0;::::1;14114:34:1::0;14164:18;;;14157:34;;;26230:6:0::1;14207:18:1::0;;;14200:34;;;14250:18;;;14243:34;-1:-1:-1;;;;;26405:21:0;;::::1;14293:19:1::0;;;14286:44;26445:15:0::1;14346:19:1::0;;;14339:35;26230:6:0;::::1;::::0;:22:::1;::::0;26260:19;;14048::1;;26230:245:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26495:49:0::1;::::0;;7385:25:1;;;7441:2;7426:18;;7419:34;;;26495:49:0::1;::::0;-1:-1:-1;7358:18:1;26495:49:0::1;;;;;;;26192:364;-1:-1:-1::0;;15572:6:0;:14;;-1:-1:-1;;15572:14:0;;;-1:-1:-1;;;;;;;;;;;24496:2067:0:o;23529:333::-;23596:7;23616:17;23636:40;23661:14;;23636:20;23647:8;;23636:6;:10;;:20;;;;:::i;:40::-;23734:4;23716:24;;;;:9;:24;;;;;;23616:60;;-1:-1:-1;23716:39:0;;23616:60;23716:28;:39::i;:::-;23707:4;23689:24;;;;:9;:24;;;;;;;:66;;;;23771:42;;-1:-1:-1;;;;;23771:42:0;;;;;;;23803:9;160:25:1;;148:2;133:18;;14:177;23771:42:0;;;;;;;;23833:21;:6;23844:9;23833:10;:21::i;:::-;23826:28;23529:333;-1:-1:-1;;;;23529:333:0:o;1880:345::-;1966:7;2068:12;2061:5;2053:28;;;;-1:-1:-1;;;2053:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2092:9:0;2104:5;2108:1;2104;:5;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:160::-;1462:20;;1518:13;;1511:21;1501:32;;1491:60;;1547:1;1544;1537:12;1491:60;1397:160;;;:::o;1562:180::-;1618:6;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1710:26;1726:9;1710:26;:::i;1747:248::-;1815:6;1823;1876:2;1864:9;1855:7;1851:23;1847:32;1844:52;;;1892:1;1889;1882:12;1844:52;-1:-1:-1;;1915:23:1;;;1985:2;1970:18;;;1957:32;;-1:-1:-1;1747:248:1:o;2000:456::-;2077:6;2085;2093;2146:2;2134:9;2125:7;2121:23;2117:32;2114:52;;;2162:1;2159;2152:12;2114:52;2201:9;2188:23;2220:31;2245:5;2220:31;:::i;:::-;2270:5;-1:-1:-1;2327:2:1;2312:18;;2299:32;2340:33;2299:32;2340:33;:::i;:::-;2000:456;;2392:7;;-1:-1:-1;;;2446:2:1;2431:18;;;;2418:32;;2000:456::o;2461:247::-;2520:6;2573:2;2561:9;2552:7;2548:23;2544:32;2541:52;;;2589:1;2586;2579:12;2541:52;2628:9;2615:23;2647:31;2672:5;2647:31;:::i;2713:337::-;2776:6;2784;2837:2;2825:9;2816:7;2812:23;2808:32;2805:52;;;2853:1;2850;2843:12;2805:52;2876:26;2892:9;2876:26;:::i;:::-;2866:36;;2952:2;2941:9;2937:18;2924:32;2996:4;2989:5;2985:16;2978:5;2975:27;2965:55;;3016:1;3013;3006:12;2965:55;3039:5;3029:15;;;2713:337;;;;;:::o;3244:454::-;3339:6;3347;3355;3363;3371;3424:3;3412:9;3403:7;3399:23;3395:33;3392:53;;;3441:1;3438;3431:12;3392:53;-1:-1:-1;;3464:23:1;;;3534:2;3519:18;;3506:32;;-1:-1:-1;3585:2:1;3570:18;;3557:32;;3636:2;3621:18;;3608:32;;-1:-1:-1;3687:3:1;3672:19;3659:33;;-1:-1:-1;3244:454:1;-1:-1:-1;3244:454:1:o;3703:315::-;3768:6;3776;3829:2;3817:9;3808:7;3804:23;3800:32;3797:52;;;3845:1;3842;3835:12;3797:52;3884:9;3871:23;3903:31;3928:5;3903:31;:::i;:::-;3953:5;-1:-1:-1;3977:35:1;4008:2;3993:18;;3977:35;:::i;:::-;3967:45;;3703:315;;;;;:::o;4231:180::-;4290:6;4343:2;4331:9;4322:7;4318:23;4314:32;4311:52;;;4359:1;4356;4349:12;4311:52;-1:-1:-1;4382:23:1;;4231:180;-1:-1:-1;4231:180:1:o;4682:529::-;4759:6;4767;4775;4828:2;4816:9;4807:7;4803:23;4799:32;4796:52;;;4844:1;4841;4834:12;4796:52;4883:9;4870:23;4902:31;4927:5;4902:31;:::i;:::-;4952:5;-1:-1:-1;5009:2:1;4994:18;;4981:32;5022:33;4981:32;5022:33;:::i;:::-;5074:7;-1:-1:-1;5133:2:1;5118:18;;5105:32;5146:33;5105:32;5146:33;:::i;:::-;5198:7;5188:17;;;4682:529;;;;;:::o;5216:388::-;5284:6;5292;5345:2;5333:9;5324:7;5320:23;5316:32;5313:52;;;5361:1;5358;5351:12;5313:52;5400:9;5387:23;5419:31;5444:5;5419:31;:::i;:::-;5469:5;-1:-1:-1;5526:2:1;5511:18;;5498:32;5539:33;5498:32;5539:33;:::i;5609:248::-;5674:6;5682;5735:2;5723:9;5714:7;5710:23;5706:32;5703:52;;;5751:1;5748;5741:12;5703:52;5774:26;5790:9;5774:26;:::i;6348:329::-;6550:2;6532:21;;;6589:1;6569:18;;;6562:29;-1:-1:-1;;;6622:2:1;6607:18;;6600:36;6668:2;6653:18;;6348:329::o;6682:335::-;6884:2;6866:21;;;6923:2;6903:18;;;6896:30;-1:-1:-1;;;6957:2:1;6942:18;;6935:41;7008:2;6993:18;;6682:335::o;7022:184::-;7092:6;7145:2;7133:9;7124:7;7120:23;7116:32;7113:52;;;7161:1;7158;7151:12;7113:52;-1:-1:-1;7184:16:1;;7022:184;-1:-1:-1;7022:184:1:o;7686:127::-;7747:10;7742:3;7738:20;7735:1;7728:31;7778:4;7775:1;7768:15;7802:4;7799:1;7792:15;7818:168;7891:9;;;7922;;7939:15;;;7933:22;;7919:37;7909:71;;7960:18;;:::i;7991:217::-;8031:1;8057;8047:132;;8101:10;8096:3;8092:20;8089:1;8082:31;8136:4;8133:1;8126:15;8164:4;8161:1;8154:15;8047:132;-1:-1:-1;8193:9:1;;7991:217::o;8995:128::-;9062:9;;;9083:11;;;9080:37;;;9097:18;;:::i;9480:125::-;9545:9;;;9566:10;;;9563:36;;;9579:18;;:::i;11634:127::-;11695:10;11690:3;11686:20;11683:1;11676:31;11726:4;11723:1;11716:15;11750:4;11747:1;11740:15;11766:980;12028:4;12076:3;12065:9;12061:19;12107:6;12096:9;12089:25;12133:2;12171:6;12166:2;12155:9;12151:18;12144:34;12214:3;12209:2;12198:9;12194:18;12187:31;12238:6;12273;12267:13;12304:6;12296;12289:22;12342:3;12331:9;12327:19;12320:26;;12381:2;12373:6;12369:15;12355:29;;12402:1;12412:195;12426:6;12423:1;12420:13;12412:195;;;12491:13;;-1:-1:-1;;;;;12487:39:1;12475:52;;12582:15;;;;12547:12;;;;12523:1;12441:9;12412:195;;;-1:-1:-1;;;;;;;12663:32:1;;;;12658:2;12643:18;;12636:60;-1:-1:-1;;;12727:3:1;12712:19;12705:35;12624:3;11766:980;-1:-1:-1;;;11766:980:1:o;14385:306::-;14473:6;14481;14489;14542:2;14530:9;14521:7;14517:23;14513:32;14510:52;;;14558:1;14555;14548:12;14510:52;14587:9;14581:16;14571:26;;14637:2;14626:9;14622:18;14616:25;14606:35;;14681:2;14670:9;14666:18;14660:25;14650:35;;14385:306;;;;;:::o
Swarm Source
ipfs://d9ac963b644cdfdd0c752782590471da9afc5a7f5d6fff8a37fed82160ca378d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ARB | 100.00% | $1,787.12 | 0.00000466 | $0.008329 |
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.