Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 118 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 11943174 | 1427 days ago | IN | 0 ETH | 0.00831101 | ||||
Withdraw | 11856387 | 1441 days ago | IN | 0 ETH | 0.02117948 | ||||
Withdraw | 11733045 | 1460 days ago | IN | 0 ETH | 0.00926744 | ||||
Partial Reward | 11700888 | 1465 days ago | IN | 0 ETH | 0.00358691 | ||||
Withdraw | 11678604 | 1468 days ago | IN | 0 ETH | 0.01441381 | ||||
Withdraw | 11669399 | 1469 days ago | IN | 0 ETH | 0.010317 | ||||
Withdraw | 11651725 | 1472 days ago | IN | 0 ETH | 0.01723637 | ||||
Unlock | 11639801 | 1474 days ago | IN | 0 ETH | 0.01789198 | ||||
Partial Reward | 11636423 | 1475 days ago | IN | 0 ETH | 0.00498962 | ||||
Withdraw | 11612224 | 1478 days ago | IN | 0 ETH | 0.00977523 | ||||
Withdraw | 11600262 | 1480 days ago | IN | 0 ETH | 0.00911365 | ||||
Withdraw | 11597024 | 1481 days ago | IN | 0 ETH | 0.01540842 | ||||
Withdraw | 11596210 | 1481 days ago | IN | 0 ETH | 0.01685936 | ||||
Withdraw | 11596046 | 1481 days ago | IN | 0 ETH | 0.01829102 | ||||
Withdraw | 11595960 | 1481 days ago | IN | 0 ETH | 0.02630729 | ||||
Withdraw | 11595950 | 1481 days ago | IN | 0 ETH | 0.01256238 | ||||
Withdraw | 11594708 | 1481 days ago | IN | 0 ETH | 0.01453705 | ||||
Partial Reward | 11591599 | 1481 days ago | IN | 0 ETH | 0.0098864 | ||||
Partial Reward | 11590991 | 1482 days ago | IN | 0 ETH | 0.00634814 | ||||
Partial Reward | 11577964 | 1484 days ago | IN | 0 ETH | 0.00433167 | ||||
Partial Reward | 11577963 | 1484 days ago | IN | 0 ETH | 0.00433097 | ||||
Partial Reward | 11517560 | 1493 days ago | IN | 0 ETH | 0.00373775 | ||||
Partial Reward | 11506283 | 1494 days ago | IN | 0 ETH | 0.00403677 | ||||
Partial Reward | 11506283 | 1494 days ago | IN | 0 ETH | 0.00403612 | ||||
Partial Reward | 11504421 | 1495 days ago | IN | 0 ETH | 0.00622234 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
11180390 | 1545 days ago | 4.30725698 ETH | ||||
11175251 | 1545 days ago | 1.91100178 ETH | ||||
11168240 | 1546 days ago | 0.72536266 ETH | ||||
11156008 | 1548 days ago | 0.5887338 ETH | ||||
11154006 | 1549 days ago | 3.81533995 ETH | ||||
11129998 | 1552 days ago | 8.69633437 ETH | ||||
11126243 | 1553 days ago | 9.29957528 ETH | ||||
11094367 | 1558 days ago | 11.09050215 ETH | ||||
11073094 | 1561 days ago | 13.29304829 ETH | ||||
11068861 | 1562 days ago | 0.14538284 ETH | ||||
11063648 | 1562 days ago | 4.80126989 ETH | ||||
11063540 | 1562 days ago | 1.12489896 ETH | ||||
11056018 | 1564 days ago | 17.42634547 ETH | ||||
11020201 | 1569 days ago | 5.36524285 ETH | ||||
11020174 | 1569 days ago | 1.41956071 ETH | ||||
11020167 | 1569 days ago | 5.5466706 ETH | ||||
11020167 | 1569 days ago | 4.12710989 ETH | ||||
11020037 | 1569 days ago | 3.51529014 ETH | ||||
11019955 | 1569 days ago | 8.6778874 ETH | ||||
11019883 | 1569 days ago | 8.33694315 ETH | ||||
11019878 | 1569 days ago | 8.33694315 ETH | ||||
11019875 | 1569 days ago | 8.33694315 ETH | ||||
11019068 | 1569 days ago | 7.84948831 ETH | ||||
11018964 | 1569 days ago | 23.99439436 ETH | ||||
11018864 | 1569 days ago | 1.41070253 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x7767e32A...5df440971 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
LiquidityMining
Compiler Version
v0.7.0+commit.9e61f92b
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-05 */ //SPDX-License-Identifier: MIT pragma solidity ^0.7.0; contract LiquidityMining { address private constant UNISWAP_V2_FACTORY = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; address private constant UNISWAP_V2_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address private WETH_ADDRESS = IUniswapV2Router(UNISWAP_V2_ROUTER).WETH(); address[] private TOKENS; mapping(uint256 => uint256) private _totalPoolAmount; uint256[] private TIME_WINDOWS; uint256[] private REWARD_MULTIPLIERS; uint256[] private REWARD_DIVIDERS; uint256[] private REWARD_SPLIT_TRANCHES; address private _doubleProxy; address private _mainTokenAddress; address private _rewardTokenAddress; struct StakeInfo { address sender; uint256 poolPosition; uint256 firstAmount; uint256 secondAmount; uint256 poolAmount; uint256 reward; uint256 endBlock; uint256[] partialRewardBlockTimes; uint256 splittedReward; } uint256 private _startBlock; uint256 private _endBlock; mapping(uint256 => mapping(uint256 => StakeInfo)) private _stakeInfo; mapping(uint256 => uint256) private _stakeInfoLength; event Staked(address indexed sender, uint256 indexed tier, uint256 indexed poolPosition, uint256 firstAmount, uint256 secondAmount, uint256 poolAmount, uint256 reward, uint256 endBlock, uint256[] partialRewardBlockTimes, uint256 splittedReward); event Withdrawn(address sender, address indexed receiver, uint256 indexed tier, uint256 indexed poolPosition, uint256 firstAmount, uint256 secondAmount, uint256 poolAmount, uint256 reward); event PartialWithdrawn(address sender, address indexed receiver, uint256 indexed tier, uint256 reward); event Unlocked(address indexed receiver, uint256 indexed tier, uint256 position, uint256 indexed poolPosition, uint256 firstAmount, uint256 secondAmount, uint256 poolAmount, uint256 reward); event Flushed(address indexed receiver, uint256 indexed tier, uint256 position, uint256 indexed poolPosition, uint256 firstAmount, uint256 secondAmount, uint256 poolAmount, uint256 reward); constructor(address mainTokenAddress, address rewardTokenAddress, uint256 startBlock, uint256 endBlock, address doubleProxy, address[] memory tokens, uint256[] memory timeWindows, uint256[] memory rewardMultipliers, uint256[] memory rewardDividers, uint256[] memory rewardSplitTranches) { _mainTokenAddress = mainTokenAddress; _rewardTokenAddress = rewardTokenAddress; _startBlock = startBlock; _endBlock = endBlock; _doubleProxy = doubleProxy; _initArrays(tokens, timeWindows, rewardMultipliers, rewardDividers, rewardSplitTranches); } function _initArrays(address[] memory tokens, uint256[] memory timeWindows, uint256[] memory rewardMultipliers, uint256[] memory rewardDividers, uint256[] memory rewardSplitTranches) private { for(uint256 i = 0; i < tokens.length; i++) { TOKENS.push(tokens[i]); } assert(timeWindows.length == rewardMultipliers.length && rewardMultipliers.length == rewardDividers.length && rewardDividers.length == rewardSplitTranches.length); for(uint256 i = 0; i < timeWindows.length; i++) { TIME_WINDOWS.push(timeWindows[i]); } for(uint256 i = 0; i < rewardMultipliers.length; i++) { REWARD_MULTIPLIERS.push(rewardMultipliers[i]); } for(uint256 i = 0; i < rewardDividers.length; i++) { REWARD_DIVIDERS.push(rewardDividers[i]); } for(uint256 i = 0; i < rewardSplitTranches.length; i++) { REWARD_SPLIT_TRANCHES.push(rewardSplitTranches[i]); } } function doubleProxy() public view returns(address) { return _doubleProxy; } function tokenAddress() public view returns(address) { return _mainTokenAddress; } function rewardTokenAddress() public view returns(address) { return _rewardTokenAddress; } function tokens() public view returns(address[] memory) { return TOKENS; } function tierData() public view returns(uint256[] memory, uint256[] memory, uint256[] memory, uint256[] memory) { return (TIME_WINDOWS, REWARD_MULTIPLIERS, REWARD_DIVIDERS, REWARD_SPLIT_TRANCHES); } function startBlock() public view returns(uint256) { return _startBlock; } function endBlock() public view returns(uint256) { return _endBlock; } function totalPoolAmount(uint256 poolPosition) public view returns(uint256) { return _totalPoolAmount[poolPosition]; } function setDoubleProxy(address newDoubleProxy) public { require(IMVDFunctionalitiesManager(IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getMVDFunctionalitiesManagerAddress()).isAuthorizedFunctionality(msg.sender), "Unauthorized Action!"); _doubleProxy = newDoubleProxy; } function stake(uint256 tier, uint256 poolPosition, uint256 originalFirstAmount, uint256 firstAmountMin, uint256 value, uint256 secondAmountMin) public payable { require(block.number >= _startBlock, "Staking is still not available"); require(block.number < _endBlock, "Staking has reached end block"); require(poolPosition < TOKENS.length, "Unknown Pool"); require(tier < TIME_WINDOWS.length, "Unknown tier"); require(originalFirstAmount > 0, "First amount must be greater than 0"); uint256 originalSecondAmount = TOKENS[poolPosition] == WETH_ADDRESS ? msg.value : value; require(originalSecondAmount > 0, "Second amount must be greater than 0"); IMVDProxy proxy = IMVDProxy(IDoubleProxy(_doubleProxy).proxy()); _transferTokensAndCheckAllowance(_mainTokenAddress, originalFirstAmount); _transferTokensAndCheckAllowance(TOKENS[poolPosition], originalSecondAmount); address secondToken = TOKENS[poolPosition]; (uint256 firstAmount, uint256 secondAmount, uint256 poolAmount) = _createPoolToken(originalFirstAmount, firstAmountMin, originalSecondAmount, secondAmountMin, _mainTokenAddress, secondToken); _totalPoolAmount[poolPosition] += poolAmount; (uint256 minCap,, uint256 remainingToStake) = getStakingInfo(tier); require(firstAmount >= minCap, "Amount to stake is less than the current min cap"); require(firstAmount <= remainingToStake, "Amount to stake must be less than the current remaining one"); calculateRewardAndAddStakingPosition(tier, poolPosition, firstAmount, secondAmount, poolAmount, proxy); } function getStakingInfo(uint256 tier) public view returns(uint256 minCap, uint256 hardCap, uint256 remainingToStake) { (minCap, hardCap) = getStakingCap(tier); remainingToStake = hardCap; uint256 length = _stakeInfoLength[tier]; for(uint256 i = 0; i < length; i++) { if(_stakeInfo[tier][i].endBlock > block.number) { remainingToStake -= _stakeInfo[tier][i].firstAmount; } } } function getStakingCap(uint256 tier) public view returns(uint256, uint256) { IStateHolder stateHolder = IStateHolder(IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getStateHolderAddress()); string memory tierString = _toString(tier); string memory addressString = _toLowerCase(_toString(address(this))); return ( stateHolder.getUint256(string(abi.encodePacked("staking.", addressString, ".tiers[", tierString, "].minCap"))), stateHolder.getUint256(string(abi.encodePacked("staking.", addressString, ".tiers[", tierString, "].hardCap"))) ); } function _transferTokensAndCheckAllowance(address tokenAddr, uint256 value) private { if(tokenAddr == WETH_ADDRESS) { return; } IERC20 token = IERC20(tokenAddr); token.transferFrom(msg.sender, address(this), value); if(token.allowance(address(this), UNISWAP_V2_ROUTER) <= value) { token.approve(UNISWAP_V2_ROUTER, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); } } function _createPoolToken(uint256 originalFirstAmount, uint256 firstAmountMin, uint256 originalSecondAmount, uint256 secondAmountMin, address firstToken, address secondToken) private returns(uint256 firstAmount, uint256 secondAmount, uint256 poolAmount) { if(secondToken == WETH_ADDRESS) { (firstAmount, secondAmount, poolAmount) = IUniswapV2Router(UNISWAP_V2_ROUTER).addLiquidityETH{value: originalSecondAmount}( firstToken, originalFirstAmount, firstAmountMin, secondAmountMin, address(this), block.timestamp + 1000 ); } else { (firstAmount, secondAmount, poolAmount) = IUniswapV2Router(UNISWAP_V2_ROUTER).addLiquidity( firstToken, secondToken, originalFirstAmount, originalSecondAmount, firstAmountMin, secondAmountMin, address(this), block.timestamp + 1000 ); } if(firstAmount < originalFirstAmount) { IERC20(firstToken).transfer(msg.sender, originalFirstAmount - firstAmount); } if(secondAmount < originalSecondAmount) { if(secondToken == WETH_ADDRESS) { payable(msg.sender).transfer(originalSecondAmount - secondAmount); } else { IERC20(secondToken).transfer(msg.sender, originalSecondAmount - secondAmount); } } } function calculateRewardAndAddStakingPosition(uint256 tier, uint256 poolPosition, uint256 firstAmount, uint256 secondAmount, uint256 poolAmount, IMVDProxy proxy) private { uint256 partialRewardSingleBlockTime = TIME_WINDOWS[tier] / REWARD_SPLIT_TRANCHES[tier]; uint256[] memory partialRewardBlockTimes = new uint256[](REWARD_SPLIT_TRANCHES[tier]); if(partialRewardBlockTimes.length > 0) { partialRewardBlockTimes[0] = block.number + partialRewardSingleBlockTime; for(uint256 i = 1; i < partialRewardBlockTimes.length; i++) { partialRewardBlockTimes[i] = partialRewardBlockTimes[i - 1] + partialRewardSingleBlockTime; } } uint256 reward = firstAmount * REWARD_MULTIPLIERS[tier] / REWARD_DIVIDERS[tier]; StakeInfo memory stakeInfo = StakeInfo(msg.sender, poolPosition, firstAmount, secondAmount, poolAmount, reward, block.number + TIME_WINDOWS[tier], partialRewardBlockTimes, reward / REWARD_SPLIT_TRANCHES[tier]); _add(tier, stakeInfo); proxy.submit("liquidityMiningTransfer", abi.encode(address(0), 0, reward, _rewardTokenAddress)); emit Staked(msg.sender, tier, poolPosition, firstAmount, secondAmount, poolAmount, reward, stakeInfo.endBlock, partialRewardBlockTimes, stakeInfo.splittedReward); } function _add(uint256 tier, StakeInfo memory element) private returns(uint256, uint256) { _stakeInfo[tier][_stakeInfoLength[tier]] = element; _stakeInfoLength[tier] = _stakeInfoLength[tier] + 1; return (element.reward, element.endBlock); } function _remove(uint256 tier, uint256 i) private { if(_stakeInfoLength[tier] <= i) { return; } _stakeInfoLength[tier] = _stakeInfoLength[tier] - 1; if(_stakeInfoLength[tier] > i) { _stakeInfo[tier][i] = _stakeInfo[tier][_stakeInfoLength[tier]]; } delete _stakeInfo[tier][_stakeInfoLength[tier]]; } function length(uint256 tier) public view returns(uint256) { return _stakeInfoLength[tier]; } function stakeInfo(uint256 tier, uint256 position) public view returns( address, uint256, uint256, uint256, uint256, uint256, uint256, uint256[] memory, uint256 ) { StakeInfo memory tierStakeInfo = _stakeInfo[tier][position]; return( tierStakeInfo.sender, tierStakeInfo.poolPosition, tierStakeInfo.firstAmount, tierStakeInfo.secondAmount, tierStakeInfo.poolAmount, tierStakeInfo.reward, tierStakeInfo.endBlock, tierStakeInfo.partialRewardBlockTimes, tierStakeInfo.splittedReward ); } function partialReward(uint256 tier, uint256 position) public { StakeInfo memory tierStakeInfo = _stakeInfo[tier][position]; require(tierStakeInfo.sender != address(0), "Unknown Position!"); if(block.number >= tierStakeInfo.endBlock) { return withdraw(tier, position); } require(tierStakeInfo.reward > 0, "No more reward for this staking position"); uint256 reward = 0; for(uint256 i = 0; i < tierStakeInfo.partialRewardBlockTimes.length; i++) { if(tierStakeInfo.partialRewardBlockTimes[i] > 0 && block.number >= tierStakeInfo.partialRewardBlockTimes[i]) { reward += tierStakeInfo.splittedReward; tierStakeInfo.partialRewardBlockTimes[i] = 0; } } reward = reward > tierStakeInfo.reward ? tierStakeInfo.reward : reward; require(reward > 0, "No reward to redeem"); IERC20 token = IERC20(_rewardTokenAddress); token.transfer(tierStakeInfo.sender, reward); tierStakeInfo.reward = tierStakeInfo.reward - reward; _stakeInfo[tier][position] = tierStakeInfo; emit PartialWithdrawn(msg.sender, tierStakeInfo.sender, tier, reward); } function withdraw(uint256 tier, uint256 position) public { StakeInfo memory tierStakeInfo = _stakeInfo[tier][position]; require(tierStakeInfo.sender != address(0), "Unknown Position!"); require(block.number >= tierStakeInfo.endBlock, "Cannot actually withdraw this position"); IERC20 token = IERC20(_rewardTokenAddress); if(tierStakeInfo.reward > 0) { token.transfer(tierStakeInfo.sender, tierStakeInfo.reward); } token = IERC20(IUniswapV2Factory(UNISWAP_V2_FACTORY).getPair(_mainTokenAddress, TOKENS[tierStakeInfo.poolPosition])); token.transfer(tierStakeInfo.sender, tierStakeInfo.poolAmount); _totalPoolAmount[tierStakeInfo.poolPosition] = _totalPoolAmount[tierStakeInfo.poolPosition] - tierStakeInfo.poolAmount; emit Withdrawn(msg.sender, tierStakeInfo.sender, tier, tierStakeInfo.poolPosition, tierStakeInfo.firstAmount, tierStakeInfo.secondAmount, tierStakeInfo.poolAmount, tierStakeInfo.reward); _remove(tier, position); } function unlock(uint256 tier, uint256 position) public { StakeInfo memory tierStakeInfo = _stakeInfo[tier][position]; require(tierStakeInfo.sender != address(0), "Unknown Position!"); require(msg.sender == tierStakeInfo.sender, "Unlock can be done only by position owner"); if(block.number >= tierStakeInfo.endBlock) { return withdraw(tier, position); } IMVDProxy proxy = IMVDProxy(IDoubleProxy(_doubleProxy).proxy()); address walletAddress = proxy.getMVDWalletAddress(); uint256 reward = 0; for(uint256 i = 0; i < tierStakeInfo.partialRewardBlockTimes.length; i++) { if(tierStakeInfo.partialRewardBlockTimes[i] == 0) { reward += tierStakeInfo.splittedReward; } } IERC20 token = IERC20(_rewardTokenAddress); if(reward > 0) { token.transferFrom(tierStakeInfo.sender, walletAddress, reward); } token.transfer(walletAddress, tierStakeInfo.reward); token = IERC20(IUniswapV2Factory(UNISWAP_V2_FACTORY).getPair(_mainTokenAddress, TOKENS[tierStakeInfo.poolPosition])); token.transfer(tierStakeInfo.sender, tierStakeInfo.poolAmount); _totalPoolAmount[tierStakeInfo.poolPosition] = _totalPoolAmount[tierStakeInfo.poolPosition] - tierStakeInfo.poolAmount; emit Unlocked(tierStakeInfo.sender, tier, position, tierStakeInfo.poolPosition, tierStakeInfo.firstAmount, tierStakeInfo.secondAmount, tierStakeInfo.poolAmount, tierStakeInfo.reward + reward); _remove(tier, position); } function flushToDFO(uint256 tier, uint256 position) public { StakeInfo memory tierStakeInfo = _stakeInfo[tier][position]; require(tierStakeInfo.sender != address(0), "Unknown Position!"); require(msg.sender == tierStakeInfo.sender, "Flush can be done only by position owner"); IMVDProxy proxy = IMVDProxy(IDoubleProxy(_doubleProxy).proxy()); address walletAddress = proxy.getMVDWalletAddress(); uint256 reward = 0; for(uint256 i = 0; i < tierStakeInfo.partialRewardBlockTimes.length; i++) { if(tierStakeInfo.partialRewardBlockTimes[i] > 0 && block.number >= tierStakeInfo.partialRewardBlockTimes[i]) { reward += tierStakeInfo.splittedReward; tierStakeInfo.partialRewardBlockTimes[i] = 0; } } reward = reward > tierStakeInfo.reward ? tierStakeInfo.reward : reward; IERC20 token = IERC20(_rewardTokenAddress); if(reward > 0) { token.transfer(tierStakeInfo.sender, reward); } if(tierStakeInfo.reward - reward > 0) { token.transfer(walletAddress, tierStakeInfo.reward - reward); } token = IERC20(IUniswapV2Factory(UNISWAP_V2_FACTORY).getPair(_mainTokenAddress, TOKENS[tierStakeInfo.poolPosition])); token.transfer(walletAddress, tierStakeInfo.poolAmount); _totalPoolAmount[tierStakeInfo.poolPosition] = _totalPoolAmount[tierStakeInfo.poolPosition] - tierStakeInfo.poolAmount; emit Flushed(tierStakeInfo.sender, tier, position, tierStakeInfo.poolPosition, tierStakeInfo.firstAmount, tierStakeInfo.secondAmount, tierStakeInfo.poolAmount, tierStakeInfo.reward + reward); _remove(tier, position); } function _toString(uint _i) private pure returns(string memory) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (_i != 0) { bstr[k--] = byte(uint8(48 + _i % 10)); _i /= 10; } return string(bstr); } function _toString(address _addr) private pure returns(string memory) { bytes32 value = bytes32(uint256(_addr)); bytes memory alphabet = "0123456789abcdef"; bytes memory str = new bytes(42); str[0] = '0'; str[1] = 'x'; for (uint i = 0; i < 20; i++) { str[2+i*2] = alphabet[uint(uint8(value[i + 12] >> 4))]; str[3+i*2] = alphabet[uint(uint8(value[i + 12] & 0x0f))]; } return string(str); } function _toLowerCase(string memory str) private pure returns(string memory) { bytes memory bStr = bytes(str); for (uint i = 0; i < bStr.length; i++) { bStr[i] = bStr[i] >= 0x41 && bStr[i] <= 0x5A ? bytes1(uint8(bStr[i]) + 0x20) : bStr[i]; } return string(bStr); } } interface IMVDProxy { function getStateHolderAddress() external view returns(address); function getMVDWalletAddress() external view returns(address); function getMVDFunctionalitiesManagerAddress() external view returns(address); function submit(string calldata codeName, bytes calldata data) external payable returns(bytes memory returnData); } interface IStateHolder { function setUint256(string calldata name, uint256 value) external returns(uint256); function getUint256(string calldata name) external view returns(uint256); function getBool(string calldata varName) external view returns (bool); function clear(string calldata varName) external returns(string memory oldDataType, bytes memory oldVal); } interface IMVDFunctionalitiesManager { function isAuthorizedFunctionality(address functionality) external view returns(bool); } interface IERC20 { function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transfer(address recipient, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); } interface IUniswapV2Router { 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); } interface IUniswapV2Factory { function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IDoubleProxy { function proxy() external view returns(address); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"mainTokenAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"address","name":"doubleProxy","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"timeWindows","type":"uint256[]"},{"internalType":"uint256[]","name":"rewardMultipliers","type":"uint256[]"},{"internalType":"uint256[]","name":"rewardDividers","type":"uint256[]"},{"internalType":"uint256[]","name":"rewardSplitTranches","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"tier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"position","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"poolPosition","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"firstAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"secondAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Flushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"tier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"PartialWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tier","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"poolPosition","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"firstAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"secondAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"partialRewardBlockTimes","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"splittedReward","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"tier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"position","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"poolPosition","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"firstAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"secondAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Unlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"tier","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"poolPosition","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"firstAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"secondAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"doubleProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"}],"name":"flushToDFO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"getStakingCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"getStakingInfo","outputs":[{"internalType":"uint256","name":"minCap","type":"uint256"},{"internalType":"uint256","name":"hardCap","type":"uint256"},{"internalType":"uint256","name":"remainingToStake","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"length","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"}],"name":"partialReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDoubleProxy","type":"address"}],"name":"setDoubleProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"uint256","name":"poolPosition","type":"uint256"},{"internalType":"uint256","name":"originalFirstAmount","type":"uint256"},{"internalType":"uint256","name":"firstAmountMin","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"secondAmountMin","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"}],"name":"stakeInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tierData","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokens","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolPosition","type":"uint256"}],"name":"totalPoolAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x6080604052600436106101095760003560e01c80639d63848a11610095578063cbd99d0311610064578063cbd99d03146104ed578063dd58d9d514610520578063e9c4aa6a14610563578063f39d3c49146105ab578063fdd56605146105db57610109565b80639d63848a146104195780639d76ea581461047e578063a6b8c16a14610493578063aa8b99d2146104c357610109565b806348cd4cb1116100dc57806348cd4cb1146101c25780634eb9b592146101d7578063590c2a8b146101ec5780635bfadb24146102b15780635de3326c146102e157610109565b8063083c63231461010e578063125f9e3314610135578063167e478114610166578063441a3e7014610190575b600080fd5b34801561011a57600080fd5b50610123610616565b60408051918252519081900360200190f35b34801561014157600080fd5b5061014a61061c565b604080516001600160a01b039092168252519081900360200190f35b34801561017257600080fd5b506101236004803603602081101561018957600080fd5b503561062b565b34801561019c57600080fd5b506101c0600480360360408110156101b357600080fd5b5080359060200135610640565b005b3480156101ce57600080fd5b50610123610a44565b3480156101e357600080fd5b5061014a610a4a565b3480156101f857600080fd5b5061021c6004803603604081101561020f57600080fd5b5080359060200135610a59565b604051808a6001600160a01b0316815260200189815260200188815260200187815260200186815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561029557818101518382015260200161027d565b505050509050019a505050505050505050505060405180910390f35b3480156102bd57600080fd5b506101c0600480360360408110156102d457600080fd5b5080359060200135610b8c565b3480156102ed57600080fd5b506102f6611187565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b8381101561034257818101518382015260200161032a565b50505050905001858103845288818151815260200191508051906020019060200280838360005b83811015610381578181015183820152602001610369565b50505050905001858103835287818151815260200191508051906020019060200280838360005b838110156103c05781810151838201526020016103a8565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156103ff5781810151838201526020016103e7565b505050509050019850505050505050505060405180910390f35b34801561042557600080fd5b5061042e6112eb565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561046a578181015183820152602001610452565b505050509050019250505060405180910390f35b34801561048a57600080fd5b5061014a61134d565b34801561049f57600080fd5b506101c0600480360360408110156104b657600080fd5b508035906020013561135c565b3480156104cf57600080fd5b50610123600480360360208110156104e657600080fd5b503561199a565b3480156104f957600080fd5b506101c06004803603602081101561051057600080fd5b50356001600160a01b03166119ac565b34801561052c57600080fd5b5061054a6004803603602081101561054357600080fd5b5035611b72565b6040805192835260208301919091528051918290030190f35b34801561056f57600080fd5b5061058d6004803603602081101561058657600080fd5b503561200c565b60408051938452602084019290925282820152519081900360600190f35b3480156105b757600080fd5b506101c0600480360360408110156105ce57600080fd5b5080359060200135612092565b6101c0600480360360c08110156105f157600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612472565b600b5490565b6009546001600160a01b031690565b6000818152600260205260409020545b919050565b6106486136da565b6000838152600c6020908152604080832085845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e0860193929083018282801561070157602002820191906000526020600020905b8154815260200190600101908083116106ed575b50505091835250506008919091015460209091015280519091506001600160a01b0316610769576040805162461bcd60e51b8152602060048201526011602482015270556e6b6e6f776e20506f736974696f6e2160781b604482015290519081900360640190fd5b8060c001514310156107ac5760405162461bcd60e51b81526004018080602001828103825260268152602001806138a56026913960400191505060405180910390fd5b60095460a08201516001600160a01b03909116901561085157806001600160a01b031663a9059cbb83600001518460a001516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b505050506040513d602081101561084e57600080fd5b50505b600854602083015160018054735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9363e6a43905936001600160a01b039091169291811061088e57fe5b60009182526020918290200154604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909116602484015251604480840193829003018186803b1580156108e457600080fd5b505afa1580156108f8573d6000803e3d6000fd5b505050506040513d602081101561090e57600080fd5b5051825160808401516040805163a9059cbb60e01b81526001600160a01b0393841660048201526024810192909252519293509083169163a9059cbb916044808201926020929091908290030181600087803b15801561096d57600080fd5b505af1158015610981573d6000803e3d6000fd5b505050506040513d602081101561099757600080fd5b50506080808301805160208581018051600090815260028352604080822054835183529181902094909103909355518651838801516060808a0151965160a0808c01518851338152978801949094528688019890985290850152958301959095529151919388936001600160a01b03909116927fec4d7fc8319e44dfa849ab87f565622b9cf848ce9959568c3066615ce9e2ef149281900390910190a4610a3e8484612826565b50505050565b600a5490565b6007546001600160a01b031690565b600080600080600080600060606000610a706136da565b60008c8152600c602090815260408083208e845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e08601939290830182828015610b2957602002820191906000526020600020905b815481526020019060010190808311610b15575b505050505081526020016008820154815250509050806000015181602001518260400151836060015184608001518560a001518660c001518760e00151886101000151995099509950995099509950995099509950509295985092959850929598565b610b946136da565b6000838152600c6020908152604080832085845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e08601939290830182828015610c4d57602002820191906000526020600020905b815481526020019060010190808311610c39575b50505091835250506008919091015460209091015280519091506001600160a01b0316610cb5576040805162461bcd60e51b8152602060048201526011602482015270556e6b6e6f776e20506f736974696f6e2160781b604482015290519081900360640190fd5b80516001600160a01b03163314610cfd5760405162461bcd60e51b815260040180806020018281038252602981526020018061387c6029913960400191505060405180910390fd5b8060c001514310610d1857610d128383610640565b50611183565b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b158015610d5d57600080fd5b505afa158015610d71573d6000803e3d6000fd5b505050506040513d6020811015610d8757600080fd5b5051604080516331c6903d60e01b815290519192506000916001600160a01b038416916331c6903d916004808301926020929190829003018186803b158015610dcf57600080fd5b505afa158015610de3573d6000803e3d6000fd5b505050506040513d6020811015610df957600080fd5b505190506000805b8460e0015151811015610e41578460e001518181518110610e1e57fe5b602002602001015160001415610e3957846101000151820191505b600101610e01565b506009546001600160a01b03168115610ede578451604080516323b872dd60e01b81526001600160a01b0392831660048201528583166024820152604481018590529051918316916323b872dd916064808201926020929091908290030181600087803b158015610eb157600080fd5b505af1158015610ec5573d6000803e3d6000fd5b505050506040513d6020811015610edb57600080fd5b50505b806001600160a01b031663a9059cbb848760a001516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610f3957600080fd5b505af1158015610f4d573d6000803e3d6000fd5b505050506040513d6020811015610f6357600080fd5b5050600854602086015160018054735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9363e6a43905936001600160a01b0390911692918110610fa257fe5b60009182526020918290200154604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909116602484015251604480840193829003018186803b158015610ff857600080fd5b505afa15801561100c573d6000803e3d6000fd5b505050506040513d602081101561102257600080fd5b5051855160808701516040805163a9059cbb60e01b81526001600160a01b0393841660048201526024810192909252519293509083169163a9059cbb916044808201926020929091908290030181600087803b15801561108157600080fd5b505af1158015611095573d6000803e3d6000fd5b505050506040513d60208110156110ab57600080fd5b81019080805190602001909291905050505084608001516002600087602001518152602001908152602001600020540360026000876020015181526020019081526020016000208190555084602001518786600001516001600160a01b03167f7cbd9649881e2e080f1eebfe980ccc4f8c52dcff4cc4b94ba7fd3831a4208aa58989604001518a606001518b60800151898d60a0015101604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a461117d8787612826565b50505050505b5050565b6060806060806003600460056006838054806020026020016040519081016040528092919081815260200182805480156111e057602002820191906000526020600020905b8154815260200190600101908083116111cc575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561123257602002820191906000526020600020905b81548152602001906001019080831161121e575b505050505092508180548060200260200160405190810160405280929190818152602001828054801561128457602002820191906000526020600020905b815481526020019060010190808311611270575b50505050509150808054806020026020016040519081016040528092919081815260200182805480156112d657602002820191906000526020600020905b8154815260200190600101908083116112c2575b50505050509050935093509350935090919293565b6060600180548060200260200160405190810160405280929190818152602001828054801561134357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611325575b5050505050905090565b6008546001600160a01b031690565b6113646136da565b6000838152600c6020908152604080832085845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e0860193929083018282801561141d57602002820191906000526020600020905b815481526020019060010190808311611409575b50505091835250506008919091015460209091015280519091506001600160a01b0316611485576040805162461bcd60e51b8152602060048201526011602482015270556e6b6e6f776e20506f736974696f6e2160781b604482015290519081900360640190fd5b80516001600160a01b031633146114cd5760405162461bcd60e51b815260040180806020018281038252602881526020018061382c6028913960400191505060405180910390fd5b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b15801561151257600080fd5b505afa158015611526573d6000803e3d6000fd5b505050506040513d602081101561153c57600080fd5b5051604080516331c6903d60e01b815290519192506000916001600160a01b038416916331c6903d916004808301926020929190829003018186803b15801561158457600080fd5b505afa158015611598573d6000803e3d6000fd5b505050506040513d60208110156115ae57600080fd5b505190506000805b8460e00151518110156116375760008560e0015182815181106115d557fe5b602002602001015111801561160157508460e0015181815181106115f557fe5b60200260200101514310155b1561162f578461010001518201915060008560e00151828151811061162257fe5b6020026020010181815250505b6001016115b6565b508360a001518111611649578061164f565b8360a001515b6009549091506001600160a01b031681156116ec57806001600160a01b031663a9059cbb8660000151846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156116bf57600080fd5b505af11580156116d3573d6000803e3d6000fd5b505050506040513d60208110156116e957600080fd5b50505b60a08501518290031561178357806001600160a01b031663a9059cbb84848860a00151036040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561175657600080fd5b505af115801561176a573d6000803e3d6000fd5b505050506040513d602081101561178057600080fd5b50505b600854602086015160018054735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9363e6a43905936001600160a01b03909116929181106117c057fe5b60009182526020918290200154604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909116602484015251604480840193829003018186803b15801561181657600080fd5b505afa15801561182a573d6000803e3d6000fd5b505050506040513d602081101561184057600080fd5b505160808601516040805163a9059cbb60e01b81526001600160a01b038781166004830152602482019390935290519293509083169163a9059cbb916044808201926020929091908290030181600087803b15801561189e57600080fd5b505af11580156118b2573d6000803e3d6000fd5b505050506040513d60208110156118c857600080fd5b81019080805190602001909291905050505084608001516002600087602001518152602001908152602001600020540360026000876020015181526020019081526020016000208190555084602001518786600001516001600160a01b03167fcd8847f12db1ff729f1b63807b063a343f7180ebc4045920aa25434447bdd14a8989604001518a606001518b60800151898d60a0015101604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a461117d8787612826565b6000908152600d602052604090205490565b600760009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156119fa57600080fd5b505afa158015611a0e573d6000803e3d6000fd5b505050506040513d6020811015611a2457600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b158015611a6857600080fd5b505afa158015611a7c573d6000803e3d6000fd5b505050506040513d6020811015611a9257600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b158015611adc57600080fd5b505afa158015611af0573d6000803e3d6000fd5b505050506040513d6020811015611b0657600080fd5b5051611b50576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000600760009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015611bc557600080fd5b505afa158015611bd9573d6000803e3d6000fd5b505050506040513d6020811015611bef57600080fd5b50516040805163ba83c16f60e01b815290516001600160a01b039092169163ba83c16f91600480820192602092909190829003018186803b158015611c3357600080fd5b505afa158015611c47573d6000803e3d6000fd5b505050506040513d6020811015611c5d57600080fd5b505190506060611c6c85612970565b90506060611c81611c7c30612a48565b612bbb565b9050826001600160a01b0316630bb687e3828460405160200180806739ba30b5b4b7339760c11b81525060080183805190602001908083835b60208310611cd95780518252601f199092019160209182019101611cba565b51815160209384036101000a6000190180199092169116179052662e74696572735b60c81b919093019081528451600790910192850191508083835b60208310611d345780518252601f199092019160209182019101611d15565b6001836020036101000a038019825116818451168082178552505050505050905001806705d2e6d696e4361760c41b815250600801925050506040516020818303038152906040526040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611dc8578181015183820152602001611db0565b50505050905090810190601f168015611df55780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611e1257600080fd5b505afa158015611e26573d6000803e3d6000fd5b505050506040513d6020811015611e3c57600080fd5b50516040516739ba30b5b4b7339760c11b602082810191825284516001600160a01b03881693630bb687e39387938993919260280191908501908083835b60208310611e995780518252601f199092019160209182019101611e7a565b51815160209384036101000a6000190180199092169116179052662e74696572735b60c81b919093019081528451600790910192850191508083835b60208310611ef45780518252601f199092019160209182019101611ed5565b6001836020036101000a038019825116818451168082178552505050505050905001806805d2e686172644361760bc1b815250600901925050506040516020818303038152906040526040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f89578181015183820152602001611f71565b50505050905090810190601f168015611fb65780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611fd357600080fd5b505afa158015611fe7573d6000803e3d6000fd5b505050506040513d6020811015611ffd57600080fd5b50519095509350505050915091565b600080600061201a84611b72565b6000868152600d60205260408120549295509093508392505b81811015612089576000868152600c60209081526040808320848452909152902060060154431015612081576000868152600c60209081526040808320848452909152902060020154909203915b600101612033565b50509193909250565b61209a6136da565b6000838152600c6020908152604080832085845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e0860193929083018282801561215357602002820191906000526020600020905b81548152602001906001019080831161213f575b50505091835250506008919091015460209091015280519091506001600160a01b03166121bb576040805162461bcd60e51b8152602060048201526011602482015270556e6b6e6f776e20506f736974696f6e2160781b604482015290519081900360640190fd5b8060c0015143106121d057610d128383610640565b60008160a00151116122135760405162461bcd60e51b81526004018080602001828103825260288152602001806138546028913960400191505060405180910390fd5b6000805b8260e00151518110156122985760008360e00151828151811061223657fe5b602002602001015111801561226257508260e00151818151811061225657fe5b60200260200101514310155b15612290578261010001518201915060008360e00151828151811061228357fe5b6020026020010181815250505b600101612217565b508160a0015181116122aa57806122b0565b8160a001515b9050600081116122fd576040805162461bcd60e51b81526020600482015260136024820152724e6f2072657761726420746f2072656465656d60681b604482015290519081900360640190fd5b60095482516040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519190921691829163a9059cbb916044808201926020929091908290030181600087803b15801561235857600080fd5b505af115801561236c573d6000803e3d6000fd5b505050506040513d602081101561238257600080fd5b505060a08301805183900381526000868152600c60209081526040808320888452825291829020865181546001600160a01b0319166001600160a01b0390911617815581870151600182015591860151600283015560608601516003830155608086015160048301559151600582015560c0850151600682015560e08501518051869361241692600785019291019061372f565b50610100919091015160089091015582516040805133815260208101859052815188936001600160a01b0316927f5777300364834e2d145b85cee28a0d45c4be04f1c7c24116ec72a6b5c839631b928290030190a35050505050565b600a544310156124c9576040805162461bcd60e51b815260206004820152601e60248201527f5374616b696e67206973207374696c6c206e6f7420617661696c61626c650000604482015290519081900360640190fd5b600b54431061251f576040805162461bcd60e51b815260206004820152601d60248201527f5374616b696e6720686173207265616368656420656e6420626c6f636b000000604482015290519081900360640190fd5b6001548510612564576040805162461bcd60e51b815260206004820152600c60248201526b155b9adb9bdddb88141bdbdb60a21b604482015290519081900360640190fd5b60035486106125a9576040805162461bcd60e51b815260206004820152600c60248201526b2ab735b737bbb7103a34b2b960a11b604482015290519081900360640190fd5b600084116125e85760405162461bcd60e51b81526004018080602001828103825260238152602001806138cb6023913960400191505060405180910390fd5b60008054600180546001600160a01b03909216918890811061260657fe5b6000918252602090912001546001600160a01b0316146126265782612628565b345b9050600081116126695760405162461bcd60e51b815260040180806020018281038252602481526020018061391e6024913960400191505060405180910390fd5b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b1580156126ae57600080fd5b505afa1580156126c2573d6000803e3d6000fd5b505050506040513d60208110156126d857600080fd5b50516008549091506126f3906001600160a01b031687612c8d565b61271e6001888154811061270357fe5b6000918252602090912001546001600160a01b031683612c8d565b60006001888154811061272d57fe5b60009182526020822001546008546001600160a01b0391821693508291829161275f918c918c918a918c911689612e56565b60008e81526002602052604081208054830190559295509093509150806127858e61200c565b9250509150818510156127c95760405162461bcd60e51b81526004018080602001828103825260308152602001806138ee6030913960400191505060405180910390fd5b808511156128085760405162461bcd60e51b815260040180806020018281038252603b8152602001806137f1603b913960400191505060405180910390fd5b6128168e8e8787878c61316b565b5050505050505050505050505050565b6000828152600d6020526040902054811061284057611183565b6000828152600d60205260409020805460001901908190558110156128fc576000828152600c60209081526040808320600d83528184205484529091528082208383529120815481546001600160a01b0319166001600160a01b03909116178155600180830154908201556002808301549082015560038083015490820155600480830154908201556005808301549082015560068083015490820155600780830180546128f1928401919061377a565b506008918201549101555b6000828152600c60209081526040808320600d8352818420548452909152812080546001600160a01b03191681556001810182905560028101829055600381018290556004810182905560058101829055600681018290559061296260078301826137ba565b600882016000905550505050565b60608161299557506040805180820190915260018152600360fc1b602082015261063b565b8160005b81156129ad57600101600a82049150612999565b60608167ffffffffffffffff811180156129c657600080fd5b506040519080825280601f01601f1916602001820160405280156129f1576020820181803683370190505b50905060001982015b8515612a3f57600a860660300160f81b82828060019003935081518110612a1d57fe5b60200101906001600160f81b031916908160001a905350600a860495506129fa565b50949350505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180368337019050509050600360fc1b81600081518110612aac57fe5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612ad557fe5b60200101906001600160f81b031916908160001a90535060005b6014811015612a3f578260048583600c0160208110612b0a57fe5b1a60f81b6001600160f81b031916901c60f81c60ff1681518110612b2a57fe5b602001015160f81c60f81b828260020260020181518110612b4757fe5b60200101906001600160f81b031916908160001a905350828482600c0160208110612b6e57fe5b825191901a600f16908110612b7f57fe5b602001015160f81c60f81b828260020260030181518110612b9c57fe5b60200101906001600160f81b031916908160001a905350600101612aef565b60608160005b8151811015612c8657604160f81b828281518110612bdb57fe5b01602001516001600160f81b03191610801590612c165750605a60f81b828281518110612c0457fe5b01602001516001600160f81b03191611155b612c3a57818181518110612c2657fe5b01602001516001600160f81b031916612c5b565b818181518110612c4657fe5b602001015160f81c60f81b60f81c60200160f81b5b828281518110612c6757fe5b60200101906001600160f81b031916908160001a905350600101612bc1565b5092915050565b6000546001600160a01b0383811691161415612ca857611183565b604080516323b872dd60e01b815233600482015230602482015260448101839052905183916001600160a01b038316916323b872dd916064808201926020929091908290030181600087803b158015612d0057600080fd5b505af1158015612d14573d6000803e3d6000fd5b505050506040513d6020811015612d2a57600080fd5b505060408051636eb1769f60e11b8152306004820152737a250d5630b4cf539739df2c5dacb4c659f2488d6024820152905183916001600160a01b0384169163dd62ed3e91604480820192602092909190829003018186803b158015612d8f57600080fd5b505afa158015612da3573d6000803e3d6000fd5b505050506040513d6020811015612db957600080fd5b505111612e51576040805163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d6004820152600019602482015290516001600160a01b0383169163095ea7b39160448083019260209291908290030181600087803b158015612e2457600080fd5b505af1158015612e38573d6000803e3d6000fd5b505050506040513d6020811015612e4e57600080fd5b50505b505050565b60008054819081906001600160a01b0385811691161415612f3a576040805163f305d71960e01b81526001600160a01b0387166004820152602481018b9052604481018a9052606481018890523060848201526103e8420160a48201529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163f305d719918a9160c48082019260609290919082900301818588803b158015612ef457600080fd5b505af1158015612f08573d6000803e3d6000fd5b50505050506040513d6060811015612f1f57600080fd5b5080516020820151604090920151909450909250905061300b565b6040805162e8e33760e81b81526001600160a01b03878116600483015286166024820152604481018b905260648101899052608481018a905260a481018890523060c48201526103e8420160e48201529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163e8e33700916101048083019260609291908290030181600087803b158015612fca57600080fd5b505af1158015612fde573d6000803e3d6000fd5b505050506040513d6060811015612ff457600080fd5b508051602082015160409092015190945090925090505b88831015613090576040805163a9059cbb60e01b8152336004820152848b03602482015290516001600160a01b0387169163a9059cbb9160448083019260209291908290030181600087803b15801561306357600080fd5b505af1158015613077573d6000803e3d6000fd5b505050506040513d602081101561308d57600080fd5b50505b8682101561315f576000546001600160a01b03858116911614156130e257604051339083890380156108fc02916000818181858888f193505050501580156130dc573d6000803e3d6000fd5b5061315f565b6040805163a9059cbb60e01b8152336004820152838903602482015290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b15801561313257600080fd5b505af1158015613146573d6000803e3d6000fd5b505050506040513d602081101561315c57600080fd5b50505b96509650969350505050565b60006006878154811061317a57fe5b90600052602060002001546003888154811061319257fe5b9060005260206000200154816131a457fe5b0490506060600688815481106131b657fe5b906000526020600020015467ffffffffffffffff811180156131d757600080fd5b50604051908082528060200260200182016040528015613201578160200160208202803683370190505b5080519091501561326d578143018160008151811061321c57fe5b602090810291909101015260015b815181101561326b578282600183038151811061324357fe5b60200260200101510182828151811061325857fe5b602090810291909101015260010161322a565b505b60006005898154811061327c57fe5b906000526020600020015460048a8154811061329457fe5b90600052602060002001548802816132a857fe5b0490506132b36136da565b604051806101200160405280336001600160a01b031681526020018a815260200189815260200188815260200187815260200183815260200160038c815481106132f957fe5b90600052602060002001544301815260200184815260200160068c8154811061331e57fe5b9060005260206000200154848161333157fe5b04905290506133408a8261360f565b50506009546040805160006020808301829052828401829052606083018790526001600160a01b0394851660808085019190915284518085038201815260a08501808752639e813f1f60e01b905260a48501958652601760e48601527f6c69717569646974794d696e696e675472616e7366657200000000000000000061010486015260c4850191825280516101248601528051968c1696639e813f1f9691959194859461014490930192870191908190849084905b8381101561340e5781810151838201526020016133f6565b50505050905090810190601f16801561343b5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561349857600080fd5b81019080805160405193929190846401000000008211156134b857600080fd5b9083019060208201858111156134cd57600080fd5b82516401000000008111828201881017156134e757600080fd5b82525081516020918201929091019080838360005b838110156135145781810151838201526020016134fc565b50505050905090810190601f1680156135415780820380516001836020036101000a031916815260200191505b5060405250505050888a336001600160a01b03167f904bffde498b5f8b9c482208599445964bca8e5fe0837abba34df545d09aed428b8b8b888860c001518b8a61010001516040518088815260200187815260200186815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156135ea5781810151838201526020016135d2565b505050509050019850505050505050505060405180910390a450505050505050505050565b6000828152600c60209081526040808320600d83528184205484528252808320845181546001600160a01b0319166001600160a01b03909116178155848301516001820155908401516002820155606084015160038201556080840151600482015560a0840151600582015560c0840151600682015560e0840151805184938693926136a4926007850192919091019061372f565b50610100919091015160089091015550506000918252600d60205260409091208054600101905560a081015160c0909101519091565b60405180610120016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081525090565b82805482825590600052602060002090810192821561376a579160200282015b8281111561376a57825182559160200191906001019061374f565b506137769291506137db565b5090565b82805482825590600052602060002090810192821561376a5760005260206000209182015b8281111561376a57825482559160010191906001019061379f565b50805460008255906000526020600020908101906137d891906137db565b50565b5b8082111561377657600081556001016137dc56fe416d6f756e7420746f207374616b65206d757374206265206c657373207468616e207468652063757272656e742072656d61696e696e67206f6e65466c7573682063616e20626520646f6e65206f6e6c7920627920706f736974696f6e206f776e65724e6f206d6f72652072657761726420666f722074686973207374616b696e6720706f736974696f6e556e6c6f636b2063616e20626520646f6e65206f6e6c7920627920706f736974696f6e206f776e657243616e6e6f742061637475616c6c79207769746864726177207468697320706f736974696f6e466972737420616d6f756e74206d7573742062652067726561746572207468616e2030416d6f756e7420746f207374616b65206973206c657373207468616e207468652063757272656e74206d696e206361705365636f6e6420616d6f756e74206d7573742062652067726561746572207468616e2030a264697066735822122026a912235e77b97974fbbb034d20e13040d614f71fe7068d99cd5e45fa405efb64736f6c63430007000033
Deployed Bytecode Sourcemap
61:19729:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4580:84;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4056:104;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;4056:104:0;;;;;;;;;;;;;;4672:132;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4672:132:0;;:::i;14060:1046::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14060:1046:0;;;;;;;:::i;:::-;;4484:88;;;;;;;;;;;;;:::i;3854:90::-;;;;;;;;;;;;;:::i;12090:718::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12090:718:0;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;12090:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15114:1611;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15114:1611:0;;;;;;;:::i;4264:212::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4168:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3952:96;;;;;;;;;;;;;:::i;16733:1752::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16733:1752:0;;;;;;;:::i;11975:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11975:107:0;;:::i;4812:296::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4812:296:0;-1:-1:-1;;;;;4812:296:0;;:::i;7283:616::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7283:616:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6807:468;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6807:468:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;12816:1236;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12816:1236:0;;;;;;;:::i;5116:1683::-;;;;;;;;;;;;;;;;-1:-1:-1;5116:1683:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4580:84::-;4647:9;;4580:84;:::o;4056:104::-;4133:19;;-1:-1:-1;;;;;4133:19:0;4056:104;:::o;4672:132::-;4739:7;4766:30;;;:16;:30;;;;;;4672:132;;;;:::o;14060:1046::-;14128:30;;:::i;:::-;14161:16;;;;:10;:16;;;;;;;;:26;;;;;;;;;14128:59;;;;;;;;;-1:-1:-1;;;;;14128:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14161:26;;14128:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14128:59:0;;;-1:-1:-1;;14128:59:0;;;;;;;;;;;14206:20;;14128:59;;-1:-1:-1;;;;;;14206:34:0;14198:64;;;;;-1:-1:-1;;;14198:64:0;;;;;;;;;;;;-1:-1:-1;;;14198:64:0;;;;;;;;;;;;;;;14297:13;:22;;;14281:12;:38;;14273:89;;;;-1:-1:-1;;;14273:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14395:19;;14429:20;;;;-1:-1:-1;;;;;14395:19:0;;;;14429:24;14426:114;;14470:5;-1:-1:-1;;;;;14470:14:0;;14485:13;:20;;;14507:13;:20;;;14470:58;;;;;;;;;;;;;-1:-1:-1;;;;;14470:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14426:114:0;14611:17;;14637:26;;;;14611:17;14630:34;;141:42;;14565:45;;-1:-1:-1;;;;;14611:17:0;;;;;14630:34;;;;;;;;;;;;;;;;;14565:100;;;-1:-1:-1;;;;;;14565:100:0;;;;;;;-1:-1:-1;;;;;14565:100:0;;;;;;;14630:34;;;;14565:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14565:100:0;14692:20;;14714:24;;;;14677:62;;;-1:-1:-1;;;14677:62:0;;-1:-1:-1;;;;;14677:62:0;;;;;;;;;;;;;;;14565:100;;-1:-1:-1;14677:14:0;;;;;;:62;;;;;14565:100;;14677:62;;;;;;;;14692:20;14677:14;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14844:24:0;;;;;;14677:62;14814:26;;;;;14797:44;;;;:16;:44;;;;;;;14767:26;;14750:44;;;;;;14797:71;;;;14750:118;;;14934:26;14906:20;;14962:25;;;;14989:26;;;;;15017:24;;15043:20;;;;;14884:180;;14894:10;14884:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14934:26;;14928:4;;-1:-1:-1;;;;;14884:180:0;;;;;;;;;;;;;;15075:23;15083:4;15089:8;15075:7;:23::i;:::-;14060:1046;;;;:::o;4484:88::-;4553:11;;4484:88;:::o;3854:90::-;3924:12;;-1:-1:-1;;;;;3924:12:0;3854:90;:::o;12090:718::-;12171:7;12189;12207;12225;12243;12261;12279;12297:16;12324:7;12350:30;;:::i;:::-;12383:16;;;;:10;:16;;;;;;;;:26;;;;;;;;;12350:59;;;;;;;;;-1:-1:-1;;;;;12350:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12383:26;;12350:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12441:13;:20;;;12476:13;:26;;;12517:13;:25;;;12557:13;:26;;;12598:13;:24;;;12637:13;:20;;;12672:13;:22;;;12709:13;:37;;;12761:13;:28;;;12420:380;;;;;;;;;;;;;;;;;;;12090:718;;;;;;;;;;;:::o;15114:1611::-;15180:30;;:::i;:::-;15213:16;;;;:10;:16;;;;;;;;:26;;;;;;;;;15180:59;;;;;;;;;-1:-1:-1;;;;;15180:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15213:26;;15180:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15180:59:0;;;-1:-1:-1;;15180:59:0;;;;;;;;;;;15258:20;;15180:59;;-1:-1:-1;;;;;;15258:34:0;15250:64;;;;;-1:-1:-1;;;15250:64:0;;;;;;;;;;;;-1:-1:-1;;;15250:64:0;;;;;;;;;;;;;;;15347:20;;-1:-1:-1;;;;;15333:34:0;:10;:34;15325:88;;;;-1:-1:-1;;;15325:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15443:13;:22;;;15427:12;:38;15424:101;;15489:24;15498:4;15504:8;15489;:24::i;:::-;15482:31;;;15424:101;15576:12;;15563:34;;;-1:-1:-1;;;15563:34:0;;;;15535:15;;-1:-1:-1;;;;;15576:12:0;;15563:32;;:34;;;;;;;;;;;;;;15576:12;15563:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15563:34:0;15633:27;;;-1:-1:-1;;;15633:27:0;;;;15563:34;;-1:-1:-1;15609:21:0;;-1:-1:-1;;;;;15633:25:0;;;;;:27;;;;;15563:34;;15633:27;;;;;;;:25;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15633:27:0;;-1:-1:-1;15671:14:0;;15700:223;15723:13;:37;;;:44;15719:1;:48;15700:223;;;15792:13;:37;;;15830:1;15792:40;;;;;;;;;;;;;;15836:1;15792:45;15789:123;;;15868:13;:28;;;15858:38;;;;15789:123;15769:3;;15700:223;;;-1:-1:-1;15955:19:0;;-1:-1:-1;;;;;15955:19:0;15989:10;;15986:105;;16035:20;;16016:63;;;-1:-1:-1;;;16016:63:0;;-1:-1:-1;;;;;16016:63:0;;;;;;;;;;;;;;;;;;;;;;:18;;;;;;:63;;;;;;;;;;;;;;;16035:20;16016:18;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15986:105:0;16101:5;-1:-1:-1;;;;;16101:14:0;;16116:13;16131;:20;;;16101:51;;;;;;;;;;;;;-1:-1:-1;;;;;16101:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16224:17:0;;16101:51;16250:26;;;16224:17;16243:34;;141:42;;16178:45;;-1:-1:-1;;;;;16224:17:0;;;;;16243:34;;;;;;;;;;;;;;;;;16178:100;;;-1:-1:-1;;;;;;16178:100:0;;;;;;;-1:-1:-1;;;;;16178:100:0;;;;;;;16243:34;;;;16178:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16178:100:0;16305:20;;16327:24;;;;16290:62;;;-1:-1:-1;;;16290:62:0;;-1:-1:-1;;;;;16290:62:0;;;;;;;;;;;;;;;16178:100;;-1:-1:-1;16290:14:0;;;;;;:62;;;;;16178:100;;16290:62;;;;;;;;16305:20;16290:14;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16457:13;:24;;;16410:16;:44;16427:13;:26;;;16410:44;;;;;;;;;;;;:71;16363:16;:44;16380:13;:26;;;16363:44;;;;;;;;;;;:118;;;;16544:13;:26;;;16528:4;16506:13;:20;;;-1:-1:-1;;;;;16497:186:0;;16534:8;16572:13;:25;;;16599:13;:26;;;16627:13;:24;;;16676:6;16653:13;:20;;;:29;16497:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16694:23;16702:4;16708:8;16694:7;:23::i;:::-;15114:1611;;;;;;;;:::o;4264:212::-;4304:16;4322;4340;4358;4395:12;4409:18;4429:15;4446:21;4387:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4264:212;;;;:::o;4168:88::-;4206:16;4242:6;4235:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4235:13:0;;;;;;;;;;;;;;;;;;;;;;;4168:88;:::o;3952:96::-;4023:17;;-1:-1:-1;;;;;4023:17:0;3952:96;:::o;16733:1752::-;16803:30;;:::i;:::-;16836:16;;;;:10;:16;;;;;;;;:26;;;;;;;;;16803:59;;;;;;;;;-1:-1:-1;;;;;16803:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16836:26;;16803:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16803:59:0;;;-1:-1:-1;;16803:59:0;;;;;;;;;;;16881:20;;16803:59;;-1:-1:-1;;;;;;16881:34:0;16873:64;;;;;-1:-1:-1;;;16873:64:0;;;;;;;;;;;;-1:-1:-1;;;16873:64:0;;;;;;;;;;;;;;;16970:20;;-1:-1:-1;;;;;16956:34:0;:10;:34;16948:87;;;;-1:-1:-1;;;16948:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17087:12;;17074:34;;;-1:-1:-1;;;17074:34:0;;;;17046:15;;-1:-1:-1;;;;;17087:12:0;;17074:32;;:34;;;;;;;;;;;;;;17087:12;17074:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17074:34:0;17144:27;;;-1:-1:-1;;;17144:27:0;;;;17074:34;;-1:-1:-1;17120:21:0;;-1:-1:-1;;;;;17144:25:0;;;;;:27;;;;;17074:34;;17144:27;;;;;;;:25;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17144:27:0;;-1:-1:-1;17182:14:0;;17211:345;17234:13;:37;;;:44;17230:1;:48;17211:345;;;17346:1;17303:13;:37;;;17341:1;17303:40;;;;;;;;;;;;;;:44;:104;;;;;17367:13;:37;;;17405:1;17367:40;;;;;;;;;;;;;;17351:12;:56;;17303:104;17300:245;;;17438:13;:28;;;17428:38;;;;17528:1;17485:13;:37;;;17523:1;17485:40;;;;;;;;;;;;;:44;;;;;17300:245;17280:3;;17211:345;;;;17584:13;:20;;;17575:6;:29;:61;;17630:6;17575:61;;;17607:13;:20;;;17575:61;17669:19;;17566:70;;-1:-1:-1;;;;;;17669:19:0;17703:10;;17700:86;;17730:5;-1:-1:-1;;;;;17730:14:0;;17745:13;:20;;;17767:6;17730:44;;;;;;;;;;;;;-1:-1:-1;;;;;17730:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17700:86:0;17799:20;;;;:29;;;:33;17796:125;;17849:5;-1:-1:-1;;;;;17849:14:0;;17864:13;17902:6;17879:13;:20;;;:29;17849:60;;;;;;;;;;;;;-1:-1:-1;;;;;17849:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17796:125:0;17992:17;;18018:26;;;;17992:17;18011:34;;141:42;;17946:45;;-1:-1:-1;;;;;17992:17:0;;;;;18011:34;;;;;;;;;;;;;;;;;17946:100;;;-1:-1:-1;;;;;;17946:100:0;;;;;;;-1:-1:-1;;;;;17946:100:0;;;;;;;18011:34;;;;17946:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17946:100:0;18088:24;;;;18058:55;;;-1:-1:-1;;;18058:55:0;;-1:-1:-1;;;;;18058:55:0;;;;;;;;;;;;;;;;17946:100;;-1:-1:-1;18058:14:0;;;;;;:55;;;;;17946:100;;18058:55;;;;;;;;-1:-1:-1;18058:14:0;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18218:13;:24;;;18171:16;:44;18188:13;:26;;;18171:44;;;;;;;;;;;;:71;18124:16;:44;18141:13;:26;;;18124:44;;;;;;;;;;;:118;;;;18304:13;:26;;;18288:4;18266:13;:20;;;-1:-1:-1;;;;;18258:185:0;;18294:8;18332:13;:25;;;18359:13;:26;;;18387:13;:24;;;18436:6;18413:13;:20;;;:29;18258:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18454:23;18462:4;18468:8;18454:7;:23::i;11975:107::-;12025:7;12052:22;;;:16;:22;;;;;;;11975:107::o;4812:296::-;4936:12;;;;;;;;;-1:-1:-1;;;;;4936:12:0;-1:-1:-1;;;;;4923:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4923:34:0;4913:83;;;-1:-1:-1;;;4913:83:0;;;;-1:-1:-1;;;;;4913:81:0;;;;;;:83;;;;;4923:34;;4913:83;;;;;;;;:81;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4913:83:0;4886:149;;;-1:-1:-1;;;4886:149:0;;5024:10;4886:149;;;;;;-1:-1:-1;;;;;4886:137:0;;;;;;:149;;;;;4913:83;;4886:149;;;;;;;;:137;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4886:149:0;4878:182;;;;;-1:-1:-1;;;4878:182:0;;;;;;;;;;;;-1:-1:-1;;;4878:182:0;;;;;;;;;;;;;;;5071:12;:29;;-1:-1:-1;;;;;;5071:29:0;-1:-1:-1;;;;;5071:29:0;;;;;;;;;;4812:296::o;7283:616::-;7340:7;7349;7369:24;7432:12;;;;;;;;;-1:-1:-1;;;;;7432:12:0;-1:-1:-1;;;;;7419:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7419:34:0;7409:69;;;-1:-1:-1;;;7409:69:0;;;;-1:-1:-1;;;;;7409:67:0;;;;;;:69;;;;;7419:34;;7409:69;;;;;;;;:67;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7409:69:0;;-1:-1:-1;7490:24:0;7517:15;7527:4;7517:9;:15::i;:::-;7490:42;;7543:27;7573:38;7586:24;7604:4;7586:9;:24::i;:::-;7573:12;:38::i;:::-;7543:68;;7644:11;-1:-1:-1;;;;;7644:22:0;;7703:13;7729:10;7674:78;;;;;;-1:-1:-1;;;7674:78:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7674:78:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7674:78:0;;;;;;;;;;;-1:-1:-1;;;7674:78:0;;;;;;;;;;;;;;;;;-1:-1:-1;7674:78:0;;;;;;;;;;;;;-1:-1:-1;;7674:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7674:78:0;;;;;;;;;;;;;;;;;;;;;7644:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7644:110:0;7799:79;;-1:-1:-1;;;7644:110:0;7799:79;;;;;;;;-1:-1:-1;;;;;7769:22:0;;;;;7828:13;;7854:10;;7799:79;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7799:79:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7799:79:0;;;;;;;;;;;-1:-1:-1;;;7799:79:0;;;;;;;;;;;;;;;;;-1:-1:-1;7799:79:0;;;;;;;;;;;;;-1:-1:-1;;7799:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7799:79:0;;;;;;;;;;;;;;;;;;;;;7769:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7769:111:0;7622:269;;-1:-1:-1;7769:111:0;-1:-1:-1;;;;7283:616:0;;;:::o;6807:468::-;6865:14;6881:15;6898:24;6955:19;6969:4;6955:13;:19::i;:::-;7022:14;7039:22;;;:16;:22;;;;;;6935:39;;-1:-1:-1;6935:39:0;;-1:-1:-1;6935:39:0;;-1:-1:-1;7072:196:0;7095:6;7091:1;:10;7072:196;;;7126:16;;;;:10;:16;;;;;;;;:19;;;;;;;;:28;;;7157:12;-1:-1:-1;7123:134:0;;;7210:16;;;;:10;:16;;;;;;;;:19;;;;;;;;:31;;;7190:51;;;;7123:134;7103:3;;7072:196;;;;6807:468;;;;;;:::o;12816:1236::-;12889:30;;:::i;:::-;12922:16;;;;:10;:16;;;;;;;;:26;;;;;;;;;12889:59;;;;;;;;;-1:-1:-1;;;;;12889:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12922:26;;12889:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12889:59:0;;;-1:-1:-1;;12889:59:0;;;;;;;;;;;12967:20;;12889:59;;-1:-1:-1;;;;;;12967:34:0;12959:64;;;;;-1:-1:-1;;;12959:64:0;;;;;;;;;;;;-1:-1:-1;;;12959:64:0;;;;;;;;;;;;;;;13053:13;:22;;;13037:12;:38;13034:101;;13099:24;13108:4;13114:8;13099;:24::i;13034:101::-;13176:1;13153:13;:20;;;:24;13145:77;;;;-1:-1:-1;;;13145:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13233:14;13266:9;13262:345;13285:13;:37;;;:44;13281:1;:48;13262:345;;;13397:1;13354:13;:37;;;13392:1;13354:40;;;;;;;;;;;;;;:44;:104;;;;;13418:13;:37;;;13456:1;13418:40;;;;;;;;;;;;;;13402:12;:56;;13354:104;13351:245;;;13489:13;:28;;;13479:38;;;;13579:1;13536:13;:37;;;13574:1;13536:40;;;;;;;;;;;;;:44;;;;;13351:245;13331:3;;13262:345;;;;13635:13;:20;;;13626:6;:29;:61;;13681:6;13626:61;;;13658:13;:20;;;13626:61;13617:70;;13715:1;13706:6;:10;13698:42;;;;;-1:-1:-1;;;13698:42:0;;;;;;;;;;;;-1:-1:-1;;;13698:42:0;;;;;;;;;;;;;;;13773:19;;13819:20;;13804:44;;;-1:-1:-1;;;13804:44:0;;-1:-1:-1;;;;;13804:44:0;;;;;;;;;;;;;;;13773:19;;;;;;;13804:14;;:44;;;;;;;;;;;;;;;13751:12;13773:19;13804:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13882:20:0;;;;;:29;;;13859:52;;-1:-1:-1;13922:16:0;;;:10;13804:44;13922:16;;;;;;;:26;;;;;;;;;:42;;;;-1:-1:-1;;;;;;13922:42:0;-1:-1:-1;;;;;13922:42:0;;;;;;;;;;-1:-1:-1;13922:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13882:20;;13922:42;;;;;;;;;;:::i;:::-;-1:-1:-1;13922:42:0;;;;;;;;;;;14009:20;;13980:64;;;13997:10;13980:64;;;;;;;;;;14031:4;;-1:-1:-1;;;;;13980:64:0;;;;;;;;;;12816:1236;;;;;:::o;5116:1683::-;5310:11;;5294:12;:27;;5286:70;;;;;-1:-1:-1;;;5286:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5390:9;;5375:12;:24;5367:66;;;;;-1:-1:-1;;;5367:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5467:6;:13;5452:28;;5444:53;;;;;-1:-1:-1;;;5444:53:0;;;;;;;;;;;;-1:-1:-1;;;5444:53:0;;;;;;;;;;;;;;;5523:12;:19;5516:26;;5508:51;;;;;-1:-1:-1;;;5508:51:0;;;;;;;;;;;;-1:-1:-1;;;5508:51:0;;;;;;;;;;;;;;;5602:1;5580:19;:23;5572:71;;;;-1:-1:-1;;;5572:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5656:28;5711:12;;;5687:20;;-1:-1:-1;;;;;5711:12:0;;;;5694;;5687:20;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5687:20:0;:36;:56;;5738:5;5687:56;;;5726:9;5687:56;5656:87;;5785:1;5762:20;:24;5754:73;;;;-1:-1:-1;;;5754:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5881:12;;5868:34;;;-1:-1:-1;;;5868:34:0;;;;5840:15;;-1:-1:-1;;;;;5881:12:0;;5868:32;;:34;;;;;;;;;;;;;;5881:12;5868:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5868:34:0;5949:17;;5868:34;;-1:-1:-1;5916:72:0;;-1:-1:-1;;;;;5949:17:0;5968:19;5916:32;:72::i;:::-;5999:76;6032:6;6039:12;6032:20;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6032:20:0;6054;5999:32;:76::i;:::-;6088:19;6110:6;6117:12;6110:20;;;;;;;;;;;;;;;;;6302:17;;-1:-1:-1;;;;;6110:20:0;;;;-1:-1:-1;6110:20:0;;;;6209:124;;6226:19;;6247:14;;6263:20;;6285:15;;6302:17;6110:20;6209:16;:124::i;:::-;6346:30;;;;:16;:30;;;;;:44;;;;;;6143:190;;-1:-1:-1;6143:190:0;;-1:-1:-1;6143:190:0;-1:-1:-1;6346:30:0;6449:20;6464:4;6449:14;:20::i;:::-;6403:66;;;;;6503:6;6488:11;:21;;6480:82;;;;-1:-1:-1;;;6480:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6596:16;6581:11;:31;;6573:103;;;;-1:-1:-1;;;6573:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6689:102;6726:4;6732:12;6746:11;6759:12;6773:10;6785:5;6689:36;:102::i;:::-;5116:1683;;;;;;;;;;;;;;:::o;11584:383::-;11648:22;;;;:16;:22;;;;;;:27;-1:-1:-1;11645:65:0;;11692:7;;11645:65;11745:22;;;;:16;:22;;;;;;;-1:-1:-1;;11745:26:0;11720:51;;;;11785:26;-1:-1:-1;11782:120:0;;;11850:16;;;;:10;:16;;;;;;;;11867;:22;;;;;;11850:40;;;;;;;;11828:19;;;;;:62;;;;-1:-1:-1;;;;;;11828:62:0;-1:-1:-1;;;;;11828:62:0;;;;;;-1:-1:-1;11828:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;11828:62:0;;;;;;;;11782:120;11919:16;;;;:10;:16;;;;;;;;11936;:22;;;;;;11919:40;;;;;;;11912:47;;-1:-1:-1;;;;;;11912:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11919:40;11912:47;;;;11919:16;11912:47;:::i;:::-;;;;;;;;;11584:383;;:::o;18493:467::-;18542:13;18572:7;18568:50;;-1:-1:-1;18596:10:0;;;;;;;;;;;;-1:-1:-1;;;18596:10:0;;;;;;18568:50;18637:2;18628:6;18669:69;18676:6;;18669:69;;18699:5;;18724:2;18719:7;;;;18669:69;;;18748:17;18778:3;18768:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18768:14:0;-1:-1:-1;18748:34:0;-1:-1:-1;;;18802:7:0;;18820:103;18827:7;;18820:103;;18884:2;18879;:7;18874:2;:12;18863:25;;18851:4;18856:3;;;;;;;18851:9;;;;;;;;;;;:37;-1:-1:-1;;;;;18851:37:0;;;;;;;;-1:-1:-1;18909:2:0;18903:8;;;;18820:103;;;-1:-1:-1;18947:4:0;18493:467;-1:-1:-1;;;;18493:467:0:o;18968:493::-;19099:42;;;;;;;;;;;-1:-1:-1;;;19099:42:0;;;;19173:13;;19183:2;19173:13;;;19023;19173;;;;;;-1:-1:-1;;;;;19073:14:0;;;19099:42;19023:13;;19173;;;;;;;;;;-1:-1:-1;19173:13:0;19154:32;;-1:-1:-1;;;19197:3:0;19201:1;19197:6;;;;;;;;;;;:12;-1:-1:-1;;;;;19197:12:0;;;;;;;;;-1:-1:-1;;;19220:3:0;19224:1;19220:6;;;;;;;;;;;:12;-1:-1:-1;;;;;19220:12:0;;;;;;;;;19248:6;19243:182;19264:2;19260:1;:6;19243:182;;;19301:8;19338:1;19321:5;19327:1;19331:2;19327:6;19321:13;;;;;;;;;;-1:-1:-1;;;;;19321:18:0;;;;19315:25;;19310:31;;19301:41;;;;;;;;;;;;;;;;19288:3;19294:1;19296;19294:3;19292:1;:5;19288:10;;;;;;;;;;;:54;-1:-1:-1;;;;;19288:54:0;;;;;;;;;19370:8;19390:5;19396:1;19400:2;19396:6;19390:13;;;;;;;19370:43;;19390:13;;;19406:4;19384:27;;19370:43;;;;;;;;;;;;;;19357:3;19363:1;19365;19363:3;19361:1;:5;19357:10;;;;;;;;;;;:56;-1:-1:-1;;;;;19357:56:0;;;;;;;;-1:-1:-1;19268:3:0;;19243:182;;19469:318;19531:13;19583:3;19603:6;19598:152;19619:4;:11;19615:1;:15;19598:152;;;19673:4;19662:15;;:4;19667:1;19662:7;;;;;;;;;;;;-1:-1:-1;;;;;;19662:7:0;:15;;;;:34;;;19692:4;19681:15;;:4;19686:1;19681:7;;;;;;;;;;;;-1:-1:-1;;;;;;19681:7:0;:15;;19662:34;:76;;19731:4;19736:1;19731:7;;;;;;;;;;;;-1:-1:-1;;;;;;19731:7:0;19662:76;;;19712:4;19717:1;19712:7;;;;;;;;;;;;;;;;19706:14;;19723:4;19706:21;19699:29;;19662:76;19652:4;19657:1;19652:7;;;;;;;;;;;:86;-1:-1:-1;;;;;19652:86:0;;;;;;;;-1:-1:-1;19632:3:0;;19598:152;;;-1:-1:-1;19774:4:0;19469:318;-1:-1:-1;;19469:318:0:o;7907:471::-;8018:12;;-1:-1:-1;;;;;8005:25:0;;;8018:12;;8005:25;8002:63;;;8047:7;;8002:63;8118:52;;;-1:-1:-1;;;8118:52:0;;8137:10;8118:52;;;;8157:4;8118:52;;;;;;;;;;;;8097:9;;-1:-1:-1;;;;;8118:18:0;;;;;:52;;;;;;;;;;;;;;;8075:12;8118:18;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8184:49:0;;;-1:-1:-1;;;8184:49:0;;8208:4;8184:49;;;;237:42;8184:49;;;;;;8237:5;;-1:-1:-1;;;;;8184:15:0;;;;;:49;;;;;8118:52;;8184:49;;;;;;;;:15;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8184:49:0;:58;8181:190;;8259:100;;;-1:-1:-1;;;8259:100:0;;237:42;8259:100;;;;-1:-1:-1;;8259:100:0;;;;;;-1:-1:-1;;;;;8259:13:0;;;;;:100;;;;;;;;;;;;;;-1:-1:-1;8259:13:0;:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8181:190:0;7907:471;;;:::o;8386:1564::-;8577:19;8669:12;;8577:19;;;;-1:-1:-1;;;;;8654:27:0;;;8669:12;;8654:27;8651:817;;;8740:302;;;-1:-1:-1;;;8740:302:0;;-1:-1:-1;;;;;8740:302:0;;;;;;;;;;;;;;;;;;;;;;;;8981:4;8740:302;;;;9023:4;9005:15;:22;8740:302;;;;;;237:42;;8740:51;;8799:20;;8740:302;;;;;;;;;;;;;;;8799:20;237:42;8740:302;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8740:302:0;;;;;;;;;;;;;-1:-1:-1;8740:302:0;;-1:-1:-1;8740:302:0;-1:-1:-1;8651:817:0;;;9117:339;;;-1:-1:-1;;;9117:339:0;;-1:-1:-1;;;;;9117:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9395:4;9117:339;;;;9437:4;9419:15;:22;9117:339;;;;;;237:42;;9117:48;;:339;;;;;;;;;;;;;;-1:-1:-1;237:42:0;9117:339;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9117:339:0;;;;;;;;;;;;;-1:-1:-1;9117:339:0;;-1:-1:-1;9117:339:0;-1:-1:-1;8651:817:0;9495:19;9481:11;:33;9478:139;;;9531:74;;;-1:-1:-1;;;9531:74:0;;9559:10;9531:74;;;;9571:33;;;9531:74;;;;;;-1:-1:-1;;;;;9531:27:0;;;;;:74;;;;;;;;;;;;;;-1:-1:-1;9531:27:0;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9478:139:0;9645:20;9630:12;:35;9627:316;;;9700:12;;-1:-1:-1;;;;;9685:27:0;;;9700:12;;9685:27;9682:250;;;9733:65;;9741:10;;9762:35;;;9733:65;;;;;;;;;9762:35;9741:10;9733:65;;;;;;;;;;;;;;;;;;;;;9682:250;;;9839:77;;;-1:-1:-1;;;9839:77:0;;9868:10;9839:77;;;;9880:35;;;9839:77;;;;;;-1:-1:-1;;;;;9839:28:0;;;;;:77;;;;;;;;;;;;;;-1:-1:-1;9839:28:0;:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9682:250:0;8386:1564;;;;;;;;;;:::o;9958:1339::-;10139:36;10199:21;10221:4;10199:27;;;;;;;;;;;;;;;;10178:12;10191:4;10178:18;;;;;;;;;;;;;;;;:48;;;;;;10139:87;;10237:40;10294:21;10316:4;10294:27;;;;;;;;;;;;;;;;10280:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10280:42:0;-1:-1:-1;10336:30:0;;10237:85;;-1:-1:-1;10336:34:0;10333:337;;10431:28;10416:12;:43;10387:23;10411:1;10387:26;;;;;;;;;;;;;;;;;:72;10490:1;10474:185;10497:23;:30;10493:1;:34;10474:185;;;10615:28;10582:23;10610:1;10606;:5;10582:30;;;;;;;;;;;;;;:61;10553:23;10577:1;10553:26;;;;;;;;;;;;;;;;;:90;10529:3;;10474:185;;;;10333:337;10680:14;10738:15;10754:4;10738:21;;;;;;;;;;;;;;;;10711:18;10730:4;10711:24;;;;;;;;;;;;;;;;10697:11;:38;:62;;;;;;10680:79;;10770:26;;:::i;:::-;10799:180;;;;;;;;10809:10;-1:-1:-1;;;;;10799:180:0;;;;;10821:12;10799:180;;;;10835:11;10799:180;;;;10848:12;10799:180;;;;10862:10;10799:180;;;;10874:6;10799:180;;;;10897:12;10910:4;10897:18;;;;;;;;;;;;;;;;10882:12;:33;10799:180;;;;10917:23;10799:180;;;;10951:21;10973:4;10951:27;;;;;;;;;;;;;;;;10942:6;:36;;;;;;10799:180;;10770:209;-1:-1:-1;10990:21:0;10995:4;10770:209;10990:4;:21::i;:::-;-1:-1:-1;;11096:19:0;;11062:54;;;11081:1;11062:54;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11096:19:0;;;11062:54;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11022:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;;;;;;11062:54;;11022:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11022:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11022:95:0;;;;;;;;;;-1:-1:-1;11022:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11158:12;11152:4;11140:10;-1:-1:-1;;;;;11133:156:0;;11172:11;11185:12;11199:10;11211:6;11219:9;:18;;;11239:23;11264:9;:24;;;11133:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9958:1339;;;;;;;;;;:::o;11305:271::-;11375:7;11404:16;;;:10;:16;;;;;;;;11421;:22;;;;;;11404:40;;;;;;;:50;;;;-1:-1:-1;;;;;;11404:50:0;-1:-1:-1;;;;;11404:50:0;;;;;;;;;;-1:-1:-1;11404:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11375:7;;11404:50;;:40;:50;;;;;;;;;;;;:::i;:::-;-1:-1:-1;11404:50:0;;;;;;;;;;;-1:-1:-1;;11490:22:0;;;;:16;:22;;;;;;;;11515:1;11490:26;11465:51;;11535:14;;;;11551:16;;;;;11535:14;;11305:271::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://26a912235e77b97974fbbb034d20e13040d614f71fe7068d99cd5e45fa405efb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.