ETH Price: $2,004.62 (+7.39%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Partial Reward245368152026-02-25 22:09:473 days ago1772057387IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000143480.32657585
Partial Reward245368132026-02-25 22:09:233 days ago1772057363IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000137560.3162513
Partial Reward245368132026-02-25 22:09:233 days ago1772057363IN
0x35aDb2D8...b8c00a9fa
0 ETH0.00013840.3162513
Partial Reward245368132026-02-25 22:09:233 days ago1772057363IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000137490.3162513
Partial Reward245368112026-02-25 22:08:593 days ago1772057339IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000106350.332148
Partial Reward245368102026-02-25 22:08:473 days ago1772057327IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000103620.32362185
Partial Reward245368102026-02-25 22:08:473 days ago1772057327IN
0x35aDb2D8...b8c00a9fa
0 ETH0.00010780.32362185
Partial Reward244425422026-02-12 18:40:2316 days ago1770921623IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000118260.27139437
Partial Reward244425422026-02-12 18:40:2316 days ago1770921623IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000118080.27139437
Partial Reward244425422026-02-12 18:40:2316 days ago1770921623IN
0x35aDb2D8...b8c00a9fa
0 ETH0.00011780.27139437
Partial Reward244425422026-02-12 18:40:2316 days ago1770921623IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000117530.27139437
Partial Reward244425402026-02-12 18:39:5916 days ago1770921599IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000084010.2653728
Partial Reward244425402026-02-12 18:39:5916 days ago1770921599IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000084010.2653728
Partial Reward244425382026-02-12 18:39:3516 days ago1770921575IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000087320.26204565
Partial Reward243206922026-01-26 18:07:5933 days ago1769450879IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000134060.3049275
Partial Reward243206922026-01-26 18:07:5933 days ago1769450879IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000132720.3049275
Partial Reward243206902026-01-26 18:07:3533 days ago1769450855IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000135390.30916557
Partial Reward243206902026-01-26 18:07:3533 days ago1769450855IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000135080.30916557
Partial Reward243206882026-01-26 18:07:1133 days ago1769450831IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000097680.30480495
Partial Reward243206882026-01-26 18:07:1133 days ago1769450831IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000097680.30480495
Partial Reward243206862026-01-26 18:06:4733 days ago1769450807IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000103780.31130399
Partial Reward242343062026-01-14 17:02:2345 days ago1768410143IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000393710.90291719
Partial Reward242343042026-01-14 17:01:5945 days ago1768410119IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000405040.93420733
Partial Reward242343042026-01-14 17:01:5945 days ago1768410119IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000405770.93420733
Partial Reward242343022026-01-14 17:01:3545 days ago1768410095IN
0x35aDb2D8...b8c00a9fa
0 ETH0.000389250.89824551
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Add Liquidity ET...229105912025-07-13 13:35:47230 days ago1752413747
0x35aDb2D8...b8c00a9fa
0.617 ETH
Add Liquidity ET...212214422024-11-19 11:20:59466 days ago1732015259
0x35aDb2D8...b8c00a9fa
0.833298 ETH
Add Liquidity ET...203905452024-07-26 11:52:23582 days ago1721994743
0x35aDb2D8...b8c00a9fa
1.10554781 ETH
Add Liquidity ET...203904552024-07-26 11:34:23582 days ago1721993663
0x35aDb2D8...b8c00a9fa
0.87797929 ETH
Add Liquidity ET...191339162024-02-01 13:35:35758 days ago1706794535
0x35aDb2D8...b8c00a9fa
1.51715972 ETH
Add Liquidity ET...185267362023-11-08 10:47:11843 days ago1699440431
0x35aDb2D8...b8c00a9fa
1.24981041 ETH
Transfer185243932023-11-08 2:55:11844 days ago1699412111
0x35aDb2D8...b8c00a9fa
0.00592932 ETH
Add Liquidity ET...185243932023-11-08 2:55:11844 days ago1699412111
0x35aDb2D8...b8c00a9fa
1.25573973 ETH
Add Liquidity ET...183915022023-10-20 12:21:35862 days ago1697804495
0x35aDb2D8...b8c00a9fa
1.24670336 ETH
Add Liquidity ET...183914812023-10-20 12:17:23862 days ago1697804243
0x35aDb2D8...b8c00a9fa
1.25389103 ETH
-115102672020-12-23 14:07:131893 days ago1608732433
0x35aDb2D8...b8c00a9fa
0.81795838 ETH
-108304762020-09-09 23:20:331998 days ago1599693633
0x35aDb2D8...b8c00a9fa
10.51384334 ETH
-108304682020-09-09 23:19:031998 days ago1599693543
0x35aDb2D8...b8c00a9fa
10.63466689 ETH
-108284242020-09-09 15:53:031998 days ago1599666783
0x35aDb2D8...b8c00a9fa
13.44294511 ETH
-108209452020-09-08 12:17:411999 days ago1599567461
0x35aDb2D8...b8c00a9fa
10.50494775 ETH
-108167712020-09-07 20:46:552000 days ago1599511615
0x35aDb2D8...b8c00a9fa
2.88361466 ETH
-108123352020-09-07 4:31:102001 days ago1599453070
0x35aDb2D8...b8c00a9fa
10.84066439 ETH
-108080052020-09-06 12:31:482001 days ago1599395508
0x35aDb2D8...b8c00a9fa
3.39394152 ETH
-108020402020-09-05 14:48:152002 days ago1599317295
0x35aDb2D8...b8c00a9fa
9.54268163 ETH
-108020192020-09-05 14:44:402002 days ago1599317080
0x35aDb2D8...b8c00a9fa
9.3233899 ETH
-108014232020-09-05 12:34:252002 days ago1599309265
0x35aDb2D8...b8c00a9fa
6.92492026 ETH
-108013302020-09-05 12:14:532002 days ago1599308093
0x35aDb2D8...b8c00a9fa
2.33716058 ETH
-107984382020-09-05 1:29:112003 days ago1599269351
0x35aDb2D8...b8c00a9fa
4.84028513 ETH
-107964692020-09-04 18:23:262003 days ago1599243806
0x35aDb2D8...b8c00a9fa
4.85110716 ETH
-107937172020-09-04 8:06:232003 days ago1599206783
0x35aDb2D8...b8c00a9fa
4.54315364 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xB68FB8B4...85800aC56
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
DFOStake

Compiler Version
v0.7.1+commit.f4a555be

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-09-12
*/

pragma solidity ^0.7.1;

contract DFOStake {

    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;

    struct StakeInfo {
        address sender;
        uint256 poolPosition;
        uint256 firstAmount;
        uint256 secondAmount;
        uint256 poolAmount;
        uint256 reward;
        uint256 endBlock;
        uint256[] partialRewardBlockTimes;
        uint256 splittedReward;
    }

    uint256 private _startBlock;

    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);

    constructor(uint256 startBlock, address doubleProxy, address[] memory tokens, uint256[] memory timeWindows, uint256[] memory rewardMultipliers, uint256[] memory rewardDividers, uint256[] memory rewardSplitTranches) public {

        _startBlock = startBlock;

        _doubleProxy = doubleProxy;

        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 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 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 emergencyFlush() public {
        IMVDProxy proxy = IMVDProxy(IDoubleProxy(_doubleProxy).proxy());
        require(IMVDFunctionalitiesManager(proxy.getMVDFunctionalitiesManagerAddress()).isAuthorizedFunctionality(msg.sender), "Unauthorized Action!");
        address walletAddress = proxy.getMVDWalletAddress();
        address tokenAddress = proxy.getToken();
        IERC20 token = IERC20(tokenAddress);
        uint256 balanceOf = token.balanceOf(address(this));
        if(balanceOf > 0) {
            token.transfer(walletAddress, balanceOf);
        }
        balanceOf = 0;
        for(uint256 i = 0; i < TOKENS.length; i++) {
            token = IERC20(IUniswapV2Factory(UNISWAP_V2_FACTORY).getPair(tokenAddress, TOKENS[i]));
            balanceOf = token.balanceOf(address(this));
            if(balanceOf > 0) {
                token.transfer(walletAddress, balanceOf);
                _totalPoolAmount[i] = 0;
            }
            balanceOf = 0;
        }
    }

    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(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());
        address tokenAddress = proxy.getToken();

        _transferTokensAndCheckAllowance(tokenAddress, originalFirstAmount);
        _transferTokensAndCheckAllowance(TOKENS[poolPosition], originalSecondAmount);

        address secondToken = TOKENS[poolPosition];

        (uint256 firstAmount, uint256 secondAmount, uint256 poolAmount) = _createPoolToken(originalFirstAmount, firstAmountMin, originalSecondAmount, secondAmountMin, tokenAddress, 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 tokenAddress, uint256 value) private {
        if(tokenAddress == WETH_ADDRESS) {
            return;
        }
        IERC20 token = IERC20(tokenAddress);
        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("stakingTransfer", abi.encode(address(0), 0, reward, address(this)));
        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];
        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(IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getToken());
        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(block.number >= tierStakeInfo.endBlock, "Cannot actually withdraw this position");
        IERC20 token = IERC20(IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getToken());
        if(tierStakeInfo.reward > 0) {
            token.transfer(tierStakeInfo.sender, tierStakeInfo.reward);
        }
        token = IERC20(IUniswapV2Factory(UNISWAP_V2_FACTORY).getPair(address(token), 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 _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 getToken() external view returns(address);
    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

Contract ABI

API
[{"inputs":[{"internalType":"uint256","name":"startBlock","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":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":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":"emergencyFlush","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":[{"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":"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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

0x608060408190526315ab88c960e31b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063ad5c46489060849060209060048186803b1580156200004557600080fd5b505afa1580156200005a573d6000803e3d6000fd5b505050506040513d60208110156200007157600080fd5b5051600080546001600160a01b0319166001600160a01b039092169190911790553480156200009f57600080fd5b50604051620037eb380380620037eb833981810160405260e0811015620000c557600080fd5b81516020830151604080850180519151939592948301929184640100000000821115620000f157600080fd5b9083019060208201858111156200010757600080fd5b82518660208202830111640100000000821117156200012557600080fd5b82525081516020918201928201910280838360005b83811015620001545781810151838201526020016200013a565b50505050905001604052602001805160405193929190846401000000008211156200017e57600080fd5b9083019060208201858111156200019457600080fd5b8251866020820283011164010000000082111715620001b257600080fd5b82525081516020918201928201910280838360005b83811015620001e1578181015183820152602001620001c7565b50505050905001604052602001805160405193929190846401000000008211156200020b57600080fd5b9083019060208201858111156200022157600080fd5b82518660208202830111640100000000821117156200023f57600080fd5b82525081516020918201928201910280838360005b838110156200026e57818101518382015260200162000254565b50505050905001604052602001805160405193929190846401000000008211156200029857600080fd5b908301906020820185811115620002ae57600080fd5b8251866020820283011164010000000082111715620002cc57600080fd5b82525081516020918201928201910280838360005b83811015620002fb578181015183820152602001620002e1565b50505050905001604052602001805160405193929190846401000000008211156200032557600080fd5b9083019060208201858111156200033b57600080fd5b82518660208202830111640100000000821117156200035957600080fd5b82525081516020918201928201910280838360005b83811015620003885781810151838201526020016200036e565b5050505091909101604052505050600888905550600780546001600160a01b0319166001600160a01b03881617905560005b855181101562000419576001868281518110620003d357fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501620003ba565b50825184511480156200042d575081518351145b80156200043b575080518251145b6200044257fe5b60005b84518110156200048a5760038582815181106200045e57fe5b602090810291909101810151825460018181018555600094855292909320909201919091550162000445565b5060005b8351811015620004d3576004848281518110620004a757fe5b60209081029190910181015182546001818101855560009485529290932090920191909155016200048e565b5060005b82518110156200051c576005838281518110620004f057fe5b6020908102919091018101518254600181810185556000948552929093209092019190915501620004d7565b5060005b8151811015620005655760068282815181106200053957fe5b602090810291909101810151825460018181018555600094855292909320909201919091550162000520565b505050505050505061326e806200057d6000396000f3fe6080604052600436106100dd5760003560e01c8063a06dd6dc1161007f578063dd58d9d511610059578063dd58d9d51461046a578063e9c4aa6a146104ad578063f39d3c49146104f5578063fdd5660514610525576100dd565b8063a06dd6dc146103f8578063aa8b99d21461040d578063cbd99d0314610437576100dd565b80634eb9b592116100bb5780634eb9b59214610165578063590c2a8b146101965780635de3326c1461025b5780639d63848a14610393576100dd565b8063167e4781146100e2578063441a3e701461011e57806348cd4cb114610150575b600080fd5b3480156100ee57600080fd5b5061010c6004803603602081101561010557600080fd5b5035610560565b60408051918252519081900360200190f35b34801561012a57600080fd5b5061014e6004803603604081101561014157600080fd5b5080359060200135610575565b005b34801561015c57600080fd5b5061010c6109f1565b34801561017157600080fd5b5061017a6109f7565b604080516001600160a01b039092168252519081900360200190f35b3480156101a257600080fd5b506101c6600480360360408110156101b957600080fd5b5080359060200135610a06565b604051808a6001600160a01b0316815260200189815260200188815260200187815260200186815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561023f578181015183820152602001610227565b505050509050019a505050505050505050505060405180910390f35b34801561026757600080fd5b50610270610b39565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156102bc5781810151838201526020016102a4565b50505050905001858103845288818151815260200191508051906020019060200280838360005b838110156102fb5781810151838201526020016102e3565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561033a578181015183820152602001610322565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015610379578181015183820152602001610361565b505050509050019850505050505050505060405180910390f35b34801561039f57600080fd5b506103a8610c9d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103e45781810151838201526020016103cc565b505050509050019250505060405180910390f35b34801561040457600080fd5b5061014e610cff565b34801561041957600080fd5b5061010c6004803603602081101561043057600080fd5b5035611263565b34801561044357600080fd5b5061014e6004803603602081101561045a57600080fd5b50356001600160a01b0316611275565b34801561047657600080fd5b506104946004803603602081101561048d57600080fd5b503561143b565b6040805192835260208301919091528051918290030190f35b3480156104b957600080fd5b506104d7600480360360208110156104d057600080fd5b50356118d5565b60408051938452602084019290925282820152519081900360600190f35b34801561050157600080fd5b5061014e6004803603604081101561051857600080fd5b508035906020013561195b565b61014e600480360360c081101561053b57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135611dcb565b6000818152600260205260409020545b919050565b61057d613022565b600083815260096020908152604080832085845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e0860193929083018282801561063657602002820191906000526020600020905b815481526020019060010190808311610622575b5050505050815260200160088201548152505090508060c0015143101561068e5760405162461bcd60e51b815260040180806020018281038252602681526020018061319c6026913960400191505060405180910390fd5b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b1580156106d357600080fd5b505afa1580156106e7573d6000803e3d6000fd5b505050506040513d60208110156106fd57600080fd5b5051604080516321df0da760e01b815290516001600160a01b03909216916321df0da791600480820192602092909190829003018186803b15801561074157600080fd5b505afa158015610755573d6000803e3d6000fd5b505050506040513d602081101561076b57600080fd5b505160a08301519091501561080657806001600160a01b031663a9059cbb83600001518460a001516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156107d957600080fd5b505af11580156107ed573d6000803e3d6000fd5b505050506040513d602081101561080357600080fd5b50505b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f6001600160a01b031663e6a4390582600185602001518154811061083b57fe5b60009182526020918290200154604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909116602484015251604480840193829003018186803b15801561089157600080fd5b505afa1580156108a5573d6000803e3d6000fd5b505050506040513d60208110156108bb57600080fd5b5051825160808401516040805163a9059cbb60e01b81526001600160a01b0393841660048201526024810192909252519293509083169163a9059cbb916044808201926020929091908290030181600087803b15801561091a57600080fd5b505af115801561092e573d6000803e3d6000fd5b505050506040513d602081101561094457600080fd5b50506080808301805160208581018051600090815260028352604080822054835183529181902094909103909355518651838801516060808a0151965160a0808c01518851338152978801949094528688019890985290850152958301959095529151919388936001600160a01b03909116927fec4d7fc8319e44dfa849ab87f565622b9cf848ce9959568c3066615ce9e2ef149281900390910190a46109eb8484612183565b50505050565b60085490565b6007546001600160a01b031690565b600080600080600080600060606000610a1d613022565b60008c81526009602090815260408083208e845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e08601939290830182828015610ad657602002820191906000526020600020905b815481526020019060010190808311610ac2575b505050505081526020016008820154815250509050806000015181602001518260400151836060015184608001518560a001518660c001518760e00151886101000151995099509950995099509950995099509950509295985092959850929598565b606080606080600360046005600683805480602002602001604051908101604052809291908181526020018280548015610b9257602002820191906000526020600020905b815481526020019060010190808311610b7e575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610be457602002820191906000526020600020905b815481526020019060010190808311610bd0575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015610c3657602002820191906000526020600020905b815481526020019060010190808311610c22575b5050505050915080805480602002602001604051908101604052809291908181526020018280548015610c8857602002820191906000526020600020905b815481526020019060010190808311610c74575b50505050509050935093509350935090919293565b60606001805480602002602001604051908101604052809291908181526020018280548015610cf557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610cd7575b5050505050905090565b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b158015610d4457600080fd5b505afa158015610d58573d6000803e3d6000fd5b505050506040513d6020811015610d6e57600080fd5b505160408051633380ac3560e11b815290519192506001600160a01b03831691636701586a91600480820192602092909190829003018186803b158015610db457600080fd5b505afa158015610dc8573d6000803e3d6000fd5b505050506040513d6020811015610dde57600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b158015610e2857600080fd5b505afa158015610e3c573d6000803e3d6000fd5b505050506040513d6020811015610e5257600080fd5b5051610e9c576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6000816001600160a01b03166331c6903d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ed757600080fd5b505afa158015610eeb573d6000803e3d6000fd5b505050506040513d6020811015610f0157600080fd5b5051604080516321df0da760e01b815290519192506000916001600160a01b038516916321df0da7916004808301926020929190829003018186803b158015610f4957600080fd5b505afa158015610f5d573d6000803e3d6000fd5b505050506040513d6020811015610f7357600080fd5b5051604080516370a0823160e01b8152306004820152905191925082916000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610fc457600080fd5b505afa158015610fd8573d6000803e3d6000fd5b505050506040513d6020811015610fee57600080fd5b50519050801561107c57816001600160a01b031663a9059cbb85836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561104f57600080fd5b505af1158015611063573d6000803e3d6000fd5b505050506040513d602081101561107957600080fd5b50505b506000805b60015481101561125b57735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f6001600160a01b031663e6a4390585600184815481106110bc57fe5b60009182526020918290200154604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909116602484015251604480840193829003018186803b15801561111257600080fd5b505afa158015611126573d6000803e3d6000fd5b505050506040513d602081101561113c57600080fd5b5051604080516370a0823160e01b815230600482015290519194506001600160a01b038516916370a0823191602480820192602092909190829003018186803b15801561118857600080fd5b505afa15801561119c573d6000803e3d6000fd5b505050506040513d60208110156111b257600080fd5b50519150811561124f57826001600160a01b031663a9059cbb86846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561121357600080fd5b505af1158015611227573d6000803e3d6000fd5b505050506040513d602081101561123d57600080fd5b50506000818152600260205260408120555b60009150600101611081565b505050505050565b6000908152600a602052604090205490565b600760009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156112c357600080fd5b505afa1580156112d7573d6000803e3d6000fd5b505050506040513d60208110156112ed57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561133157600080fd5b505afa158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156113a557600080fd5b505afa1580156113b9573d6000803e3d6000fd5b505050506040513d60208110156113cf57600080fd5b5051611419576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000600760009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561148e57600080fd5b505afa1580156114a2573d6000803e3d6000fd5b505050506040513d60208110156114b857600080fd5b50516040805163ba83c16f60e01b815290516001600160a01b039092169163ba83c16f91600480820192602092909190829003018186803b1580156114fc57600080fd5b505afa158015611510573d6000803e3d6000fd5b505050506040513d602081101561152657600080fd5b505190506060611535856122cd565b9050606061154a611545306123a5565b612518565b9050826001600160a01b0316630bb687e3828460405160200180806739ba30b5b4b7339760c11b81525060080183805190602001908083835b602083106115a25780518252601f199092019160209182019101611583565b51815160209384036101000a6000190180199092169116179052662e74696572735b60c81b919093019081528451600790910192850191508083835b602083106115fd5780518252601f1990920191602091820191016115de565b6001836020036101000a038019825116818451168082178552505050505050905001806705d2e6d696e4361760c41b815250600801925050506040516020818303038152906040526040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611691578181015183820152602001611679565b50505050905090810190601f1680156116be5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156116db57600080fd5b505afa1580156116ef573d6000803e3d6000fd5b505050506040513d602081101561170557600080fd5b50516040516739ba30b5b4b7339760c11b602082810191825284516001600160a01b03881693630bb687e39387938993919260280191908501908083835b602083106117625780518252601f199092019160209182019101611743565b51815160209384036101000a6000190180199092169116179052662e74696572735b60c81b919093019081528451600790910192850191508083835b602083106117bd5780518252601f19909201916020918201910161179e565b6001836020036101000a038019825116818451168082178552505050505050905001806805d2e686172644361760bc1b815250600901925050506040516020818303038152906040526040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561185257818101518382015260200161183a565b50505050905090810190601f16801561187f5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d60208110156118c657600080fd5b50519095509350505050915091565b60008060006118e38461143b565b6000868152600a60205260408120549295509093508392505b8181101561195257600086815260096020908152604080832084845290915290206006015443101561194a576000868152600960209081526040808320848452909152902060020154909203915b6001016118fc565b50509193909250565b611963613022565b600083815260096020908152604080832085845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e08601939290830182828015611a1c57602002820191906000526020600020905b815481526020019060010190808311611a08575b5050505050815260200160088201548152505090508060c001514310611a4c57611a468383610575565b50611dc7565b60008160a0015111611a8f5760405162461bcd60e51b81526004018080602001828103825260288152602001806131746028913960400191505060405180910390fd5b6000805b8260e0015151811015611b145760008360e001518281518110611ab257fe5b6020026020010151118015611ade57508260e001518181518110611ad257fe5b60200260200101514310155b15611b0c578261010001518201915060008360e001518281518110611aff57fe5b6020026020010181815250505b600101611a93565b508160a001518111611b265780611b2c565b8160a001515b905060008111611b79576040805162461bcd60e51b81526020600482015260136024820152724e6f2072657761726420746f2072656465656d60681b604482015290519081900360640190fd5b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b158015611bbe57600080fd5b505afa158015611bd2573d6000803e3d6000fd5b505050506040513d6020811015611be857600080fd5b5051604080516321df0da760e01b815290516001600160a01b03909216916321df0da791600480820192602092909190829003018186803b158015611c2c57600080fd5b505afa158015611c40573d6000803e3d6000fd5b505050506040513d6020811015611c5657600080fd5b505183516040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810186905290519293509083169163a9059cbb916044808201926020929091908290030181600087803b158015611cb057600080fd5b505af1158015611cc4573d6000803e3d6000fd5b505050506040513d6020811015611cda57600080fd5b505060a08301805183900381526000868152600960209081526040808320888452825291829020865181546001600160a01b0319166001600160a01b0390911617815581870151600182015591860151600283015560608601516003830155608086015160048301559151600582015560c0850151600682015560e085015180518693611d6e926007850192910190613077565b50610100919091015160089091015582516040805133815260208101859052815188936001600160a01b0316927f5777300364834e2d145b85cee28a0d45c4be04f1c7c24116ec72a6b5c839631b928290030190a35050505b5050565b600854431015611e22576040805162461bcd60e51b815260206004820152601e60248201527f5374616b696e67206973207374696c6c206e6f7420617661696c61626c650000604482015290519081900360640190fd5b6001548510611e67576040805162461bcd60e51b815260206004820152600c60248201526b155b9adb9bdddb88141bdbdb60a21b604482015290519081900360640190fd5b6003548610611eac576040805162461bcd60e51b815260206004820152600c60248201526b2ab735b737bbb7103a34b2b960a11b604482015290519081900360640190fd5b60008411611eeb5760405162461bcd60e51b81526004018080602001828103825260238152602001806131c26023913960400191505060405180910390fd5b60008054600180546001600160a01b039092169188908110611f0957fe5b6000918252602090912001546001600160a01b031614611f295782611f2b565b345b905060008111611f6c5760405162461bcd60e51b81526004018080602001828103825260248152602001806132156024913960400191505060405180910390fd5b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b158015611fb157600080fd5b505afa158015611fc5573d6000803e3d6000fd5b505050506040513d6020811015611fdb57600080fd5b5051604080516321df0da760e01b815290519192506000916001600160a01b038416916321df0da7916004808301926020929190829003018186803b15801561202357600080fd5b505afa158015612037573d6000803e3d6000fd5b505050506040513d602081101561204d57600080fd5b5051905061205b81886125ea565b6120866001898154811061206b57fe5b6000918252602090912001546001600160a01b0316846125ea565b60006001898154811061209557fe5b60009182526020822001546001600160a01b0316915080806120bb8b8b898b89896127b3565b60008f81526002602052604081208054830190559295509093509150806120e18f6118d5565b9250509150818510156121255760405162461bcd60e51b81526004018080602001828103825260308152602001806131e56030913960400191505060405180910390fd5b808511156121645760405162461bcd60e51b815260040180806020018281038252603b815260200180613139603b913960400191505060405180910390fd5b6121728f8f8787878d612ac8565b505050505050505050505050505050565b6000828152600a6020526040902054811061219d57611dc7565b6000828152600a6020526040902080546000190190819055811015612259576000828152600960209081526040808320600a83528184205484529091528082208383529120815481546001600160a01b0319166001600160a01b039091161781556001808301549082015560028083015490820155600380830154908201556004808301549082015560058083015490820155600680830154908201556007808301805461224e92840191906130c2565b506008918201549101555b6000828152600960209081526040808320600a8352818420548452909152812080546001600160a01b0319168155600181018290556002810182905560038101829055600481018290556005810182905560068101829055906122bf6007830182613102565b600882016000905550505050565b6060816122f257506040805180820190915260018152600360fc1b6020820152610570565b8160005b811561230a57600101600a820491506122f6565b60608167ffffffffffffffff8111801561232357600080fd5b506040519080825280601f01601f19166020018201604052801561234e576020820181803683370190505b50905060001982015b851561239c57600a860660300160f81b8282806001900393508151811061237a57fe5b60200101906001600160f81b031916908160001a905350600a86049550612357565b50949350505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180368337019050509050600360fc1b8160008151811061240957fe5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061243257fe5b60200101906001600160f81b031916908160001a90535060005b601481101561239c578260048583600c016020811061246757fe5b1a60f81b6001600160f81b031916901c60f81c60ff168151811061248757fe5b602001015160f81c60f81b8282600202600201815181106124a457fe5b60200101906001600160f81b031916908160001a905350828482600c01602081106124cb57fe5b825191901a600f169081106124dc57fe5b602001015160f81c60f81b8282600202600301815181106124f957fe5b60200101906001600160f81b031916908160001a90535060010161244c565b60608160005b81518110156125e357604160f81b82828151811061253857fe5b01602001516001600160f81b031916108015906125735750605a60f81b82828151811061256157fe5b01602001516001600160f81b03191611155b6125975781818151811061258357fe5b01602001516001600160f81b0319166125b8565b8181815181106125a357fe5b602001015160f81c60f81b60f81c60200160f81b5b8282815181106125c457fe5b60200101906001600160f81b031916908160001a90535060010161251e565b5092915050565b6000546001600160a01b038381169116141561260557611dc7565b604080516323b872dd60e01b815233600482015230602482015260448101839052905183916001600160a01b038316916323b872dd916064808201926020929091908290030181600087803b15801561265d57600080fd5b505af1158015612671573d6000803e3d6000fd5b505050506040513d602081101561268757600080fd5b505060408051636eb1769f60e11b8152306004820152737a250d5630b4cf539739df2c5dacb4c659f2488d6024820152905183916001600160a01b0384169163dd62ed3e91604480820192602092909190829003018186803b1580156126ec57600080fd5b505afa158015612700573d6000803e3d6000fd5b505050506040513d602081101561271657600080fd5b5051116127ae576040805163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d6004820152600019602482015290516001600160a01b0383169163095ea7b39160448083019260209291908290030181600087803b15801561278157600080fd5b505af1158015612795573d6000803e3d6000fd5b505050506040513d60208110156127ab57600080fd5b50505b505050565b60008054819081906001600160a01b0385811691161415612897576040805163f305d71960e01b81526001600160a01b0387166004820152602481018b9052604481018a9052606481018890523060848201526103e8420160a48201529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163f305d719918a9160c48082019260609290919082900301818588803b15801561285157600080fd5b505af1158015612865573d6000803e3d6000fd5b50505050506040513d606081101561287c57600080fd5b50805160208201516040909201519094509092509050612968565b6040805162e8e33760e81b81526001600160a01b03878116600483015286166024820152604481018b905260648101899052608481018a905260a481018890523060c48201526103e8420160e48201529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163e8e33700916101048083019260609291908290030181600087803b15801561292757600080fd5b505af115801561293b573d6000803e3d6000fd5b505050506040513d606081101561295157600080fd5b508051602082015160409092015190945090925090505b888310156129ed576040805163a9059cbb60e01b8152336004820152848b03602482015290516001600160a01b0387169163a9059cbb9160448083019260209291908290030181600087803b1580156129c057600080fd5b505af11580156129d4573d6000803e3d6000fd5b505050506040513d60208110156129ea57600080fd5b50505b86821015612abc576000546001600160a01b0385811691161415612a3f57604051339083890380156108fc02916000818181858888f19350505050158015612a39573d6000803e3d6000fd5b50612abc565b6040805163a9059cbb60e01b8152336004820152838903602482015290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b158015612a8f57600080fd5b505af1158015612aa3573d6000803e3d6000fd5b505050506040513d6020811015612ab957600080fd5b50505b96509650969350505050565b600060068781548110612ad757fe5b906000526020600020015460038881548110612aef57fe5b906000526020600020015481612b0157fe5b049050606060068881548110612b1357fe5b906000526020600020015467ffffffffffffffff81118015612b3457600080fd5b50604051908082528060200260200182016040528015612b5e578160200160208202803683370190505b50805190915015612bca5781430181600081518110612b7957fe5b602090810291909101015260015b8151811015612bc85782826001830381518110612ba057fe5b602002602001015101828281518110612bb557fe5b6020908102919091010152600101612b87565b505b600060058981548110612bd957fe5b906000526020600020015460048a81548110612bf157fe5b9060005260206000200154880281612c0557fe5b049050612c10613022565b604051806101200160405280336001600160a01b031681526020018a815260200189815260200188815260200187815260200183815260200160038c81548110612c5657fe5b90600052602060002001544301815260200184815260200160068c81548110612c7b57fe5b90600052602060002001548481612c8e57fe5b0490529050612c9d8a82612f57565b50506040805160006020808301829052828401829052606083018690523060808085019190915284518085038201815260a08501808752639e813f1f60e01b905260a48501958652600f60e48601526e39ba30b5b4b733aa3930b739b332b960891b61010486015260c48501918252805161012486015280516001600160a01b038c1696639e813f1f96929590948594936101440192908701918190849084905b83811015612d56578181015183820152602001612d3e565b50505050905090810190601f168015612d835780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015612da357600080fd5b505af1158015612db7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612de057600080fd5b8101908080516040519392919084640100000000821115612e0057600080fd5b908301906020820185811115612e1557600080fd5b8251640100000000811182820188101715612e2f57600080fd5b82525081516020918201929091019080838360005b83811015612e5c578181015183820152602001612e44565b50505050905090810190601f168015612e895780820380516001836020036101000a031916815260200191505b5060405250505050888a336001600160a01b03167f904bffde498b5f8b9c482208599445964bca8e5fe0837abba34df545d09aed428b8b8b888860c001518b8a61010001516040518088815260200187815260200186815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015612f32578181015183820152602001612f1a565b505050509050019850505050505050505060405180910390a450505050505050505050565b6000828152600960209081526040808320600a83528184205484528252808320845181546001600160a01b0319166001600160a01b03909116178155848301516001820155908401516002820155606084015160038201556080840151600482015560a0840151600582015560c0840151600682015560e084015180518493869392612fec9260078501929190910190613077565b50610100919091015160089091015550506000918252600a60205260409091208054600101905560a081015160c0909101519091565b60405180610120016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081525090565b8280548282559060005260206000209081019282156130b2579160200282015b828111156130b2578251825591602001919060010190613097565b506130be929150613123565b5090565b8280548282559060005260206000209081019282156130b25760005260206000209182015b828111156130b25782548255916001019190600101906130e7565b50805460008255906000526020600020908101906131209190613123565b50565b5b808211156130be576000815560010161312456fe416d6f756e7420746f207374616b65206d757374206265206c657373207468616e207468652063757272656e742072656d61696e696e67206f6e654e6f206d6f72652072657761726420666f722074686973207374616b696e6720706f736974696f6e43616e6e6f742061637475616c6c79207769746864726177207468697320706f736974696f6e466972737420616d6f756e74206d7573742062652067726561746572207468616e2030416d6f756e7420746f207374616b65206973206c657373207468616e207468652063757272656e74206d696e206361705365636f6e6420616d6f756e74206d7573742062652067726561746572207468616e2030a264697066735822122005cb8c16848065602012eb1d67f99bf9b88dff18e2ae0a0a8c951f15ca520ef064736f6c63430007010033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018badc69f41634ebb36da8ba684e990167bb954d00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000007000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000044086035439e676c02d411880fccb9837ce37c570000000000000000000000009e78b8274e1d6a76a0dbbf90418894df27cbceb500000000000000000000000034612903db071e888a4dadcaa416d3ee263a87b90000000000000000000000007b123f53421b1bf8533339bfbdc7c98aa94163db00000000000000000000000085eee30c52b0b379b046fb0f85f4f3dc3009afec000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000002673c000000000000000000000000000000000000000000000000000000000004ce7800000000000000000000000000000000000000000000000000000000000735b4000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000090

Deployed Bytecode

0x6080604052600436106100dd5760003560e01c8063a06dd6dc1161007f578063dd58d9d511610059578063dd58d9d51461046a578063e9c4aa6a146104ad578063f39d3c49146104f5578063fdd5660514610525576100dd565b8063a06dd6dc146103f8578063aa8b99d21461040d578063cbd99d0314610437576100dd565b80634eb9b592116100bb5780634eb9b59214610165578063590c2a8b146101965780635de3326c1461025b5780639d63848a14610393576100dd565b8063167e4781146100e2578063441a3e701461011e57806348cd4cb114610150575b600080fd5b3480156100ee57600080fd5b5061010c6004803603602081101561010557600080fd5b5035610560565b60408051918252519081900360200190f35b34801561012a57600080fd5b5061014e6004803603604081101561014157600080fd5b5080359060200135610575565b005b34801561015c57600080fd5b5061010c6109f1565b34801561017157600080fd5b5061017a6109f7565b604080516001600160a01b039092168252519081900360200190f35b3480156101a257600080fd5b506101c6600480360360408110156101b957600080fd5b5080359060200135610a06565b604051808a6001600160a01b0316815260200189815260200188815260200187815260200186815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561023f578181015183820152602001610227565b505050509050019a505050505050505050505060405180910390f35b34801561026757600080fd5b50610270610b39565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156102bc5781810151838201526020016102a4565b50505050905001858103845288818151815260200191508051906020019060200280838360005b838110156102fb5781810151838201526020016102e3565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561033a578181015183820152602001610322565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015610379578181015183820152602001610361565b505050509050019850505050505050505060405180910390f35b34801561039f57600080fd5b506103a8610c9d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103e45781810151838201526020016103cc565b505050509050019250505060405180910390f35b34801561040457600080fd5b5061014e610cff565b34801561041957600080fd5b5061010c6004803603602081101561043057600080fd5b5035611263565b34801561044357600080fd5b5061014e6004803603602081101561045a57600080fd5b50356001600160a01b0316611275565b34801561047657600080fd5b506104946004803603602081101561048d57600080fd5b503561143b565b6040805192835260208301919091528051918290030190f35b3480156104b957600080fd5b506104d7600480360360208110156104d057600080fd5b50356118d5565b60408051938452602084019290925282820152519081900360600190f35b34801561050157600080fd5b5061014e6004803603604081101561051857600080fd5b508035906020013561195b565b61014e600480360360c081101561053b57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135611dcb565b6000818152600260205260409020545b919050565b61057d613022565b600083815260096020908152604080832085845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e0860193929083018282801561063657602002820191906000526020600020905b815481526020019060010190808311610622575b5050505050815260200160088201548152505090508060c0015143101561068e5760405162461bcd60e51b815260040180806020018281038252602681526020018061319c6026913960400191505060405180910390fd5b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b1580156106d357600080fd5b505afa1580156106e7573d6000803e3d6000fd5b505050506040513d60208110156106fd57600080fd5b5051604080516321df0da760e01b815290516001600160a01b03909216916321df0da791600480820192602092909190829003018186803b15801561074157600080fd5b505afa158015610755573d6000803e3d6000fd5b505050506040513d602081101561076b57600080fd5b505160a08301519091501561080657806001600160a01b031663a9059cbb83600001518460a001516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156107d957600080fd5b505af11580156107ed573d6000803e3d6000fd5b505050506040513d602081101561080357600080fd5b50505b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f6001600160a01b031663e6a4390582600185602001518154811061083b57fe5b60009182526020918290200154604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909116602484015251604480840193829003018186803b15801561089157600080fd5b505afa1580156108a5573d6000803e3d6000fd5b505050506040513d60208110156108bb57600080fd5b5051825160808401516040805163a9059cbb60e01b81526001600160a01b0393841660048201526024810192909252519293509083169163a9059cbb916044808201926020929091908290030181600087803b15801561091a57600080fd5b505af115801561092e573d6000803e3d6000fd5b505050506040513d602081101561094457600080fd5b50506080808301805160208581018051600090815260028352604080822054835183529181902094909103909355518651838801516060808a0151965160a0808c01518851338152978801949094528688019890985290850152958301959095529151919388936001600160a01b03909116927fec4d7fc8319e44dfa849ab87f565622b9cf848ce9959568c3066615ce9e2ef149281900390910190a46109eb8484612183565b50505050565b60085490565b6007546001600160a01b031690565b600080600080600080600060606000610a1d613022565b60008c81526009602090815260408083208e845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e08601939290830182828015610ad657602002820191906000526020600020905b815481526020019060010190808311610ac2575b505050505081526020016008820154815250509050806000015181602001518260400151836060015184608001518560a001518660c001518760e00151886101000151995099509950995099509950995099509950509295985092959850929598565b606080606080600360046005600683805480602002602001604051908101604052809291908181526020018280548015610b9257602002820191906000526020600020905b815481526020019060010190808311610b7e575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610be457602002820191906000526020600020905b815481526020019060010190808311610bd0575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015610c3657602002820191906000526020600020905b815481526020019060010190808311610c22575b5050505050915080805480602002602001604051908101604052809291908181526020018280548015610c8857602002820191906000526020600020905b815481526020019060010190808311610c74575b50505050509050935093509350935090919293565b60606001805480602002602001604051908101604052809291908181526020018280548015610cf557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610cd7575b5050505050905090565b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b158015610d4457600080fd5b505afa158015610d58573d6000803e3d6000fd5b505050506040513d6020811015610d6e57600080fd5b505160408051633380ac3560e11b815290519192506001600160a01b03831691636701586a91600480820192602092909190829003018186803b158015610db457600080fd5b505afa158015610dc8573d6000803e3d6000fd5b505050506040513d6020811015610dde57600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b158015610e2857600080fd5b505afa158015610e3c573d6000803e3d6000fd5b505050506040513d6020811015610e5257600080fd5b5051610e9c576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6000816001600160a01b03166331c6903d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ed757600080fd5b505afa158015610eeb573d6000803e3d6000fd5b505050506040513d6020811015610f0157600080fd5b5051604080516321df0da760e01b815290519192506000916001600160a01b038516916321df0da7916004808301926020929190829003018186803b158015610f4957600080fd5b505afa158015610f5d573d6000803e3d6000fd5b505050506040513d6020811015610f7357600080fd5b5051604080516370a0823160e01b8152306004820152905191925082916000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610fc457600080fd5b505afa158015610fd8573d6000803e3d6000fd5b505050506040513d6020811015610fee57600080fd5b50519050801561107c57816001600160a01b031663a9059cbb85836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561104f57600080fd5b505af1158015611063573d6000803e3d6000fd5b505050506040513d602081101561107957600080fd5b50505b506000805b60015481101561125b57735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f6001600160a01b031663e6a4390585600184815481106110bc57fe5b60009182526020918290200154604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909116602484015251604480840193829003018186803b15801561111257600080fd5b505afa158015611126573d6000803e3d6000fd5b505050506040513d602081101561113c57600080fd5b5051604080516370a0823160e01b815230600482015290519194506001600160a01b038516916370a0823191602480820192602092909190829003018186803b15801561118857600080fd5b505afa15801561119c573d6000803e3d6000fd5b505050506040513d60208110156111b257600080fd5b50519150811561124f57826001600160a01b031663a9059cbb86846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561121357600080fd5b505af1158015611227573d6000803e3d6000fd5b505050506040513d602081101561123d57600080fd5b50506000818152600260205260408120555b60009150600101611081565b505050505050565b6000908152600a602052604090205490565b600760009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156112c357600080fd5b505afa1580156112d7573d6000803e3d6000fd5b505050506040513d60208110156112ed57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561133157600080fd5b505afa158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156113a557600080fd5b505afa1580156113b9573d6000803e3d6000fd5b505050506040513d60208110156113cf57600080fd5b5051611419576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000600760009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561148e57600080fd5b505afa1580156114a2573d6000803e3d6000fd5b505050506040513d60208110156114b857600080fd5b50516040805163ba83c16f60e01b815290516001600160a01b039092169163ba83c16f91600480820192602092909190829003018186803b1580156114fc57600080fd5b505afa158015611510573d6000803e3d6000fd5b505050506040513d602081101561152657600080fd5b505190506060611535856122cd565b9050606061154a611545306123a5565b612518565b9050826001600160a01b0316630bb687e3828460405160200180806739ba30b5b4b7339760c11b81525060080183805190602001908083835b602083106115a25780518252601f199092019160209182019101611583565b51815160209384036101000a6000190180199092169116179052662e74696572735b60c81b919093019081528451600790910192850191508083835b602083106115fd5780518252601f1990920191602091820191016115de565b6001836020036101000a038019825116818451168082178552505050505050905001806705d2e6d696e4361760c41b815250600801925050506040516020818303038152906040526040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611691578181015183820152602001611679565b50505050905090810190601f1680156116be5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156116db57600080fd5b505afa1580156116ef573d6000803e3d6000fd5b505050506040513d602081101561170557600080fd5b50516040516739ba30b5b4b7339760c11b602082810191825284516001600160a01b03881693630bb687e39387938993919260280191908501908083835b602083106117625780518252601f199092019160209182019101611743565b51815160209384036101000a6000190180199092169116179052662e74696572735b60c81b919093019081528451600790910192850191508083835b602083106117bd5780518252601f19909201916020918201910161179e565b6001836020036101000a038019825116818451168082178552505050505050905001806805d2e686172644361760bc1b815250600901925050506040516020818303038152906040526040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561185257818101518382015260200161183a565b50505050905090810190601f16801561187f5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d60208110156118c657600080fd5b50519095509350505050915091565b60008060006118e38461143b565b6000868152600a60205260408120549295509093508392505b8181101561195257600086815260096020908152604080832084845290915290206006015443101561194a576000868152600960209081526040808320848452909152902060020154909203915b6001016118fc565b50509193909250565b611963613022565b600083815260096020908152604080832085845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e08601939290830182828015611a1c57602002820191906000526020600020905b815481526020019060010190808311611a08575b5050505050815260200160088201548152505090508060c001514310611a4c57611a468383610575565b50611dc7565b60008160a0015111611a8f5760405162461bcd60e51b81526004018080602001828103825260288152602001806131746028913960400191505060405180910390fd5b6000805b8260e0015151811015611b145760008360e001518281518110611ab257fe5b6020026020010151118015611ade57508260e001518181518110611ad257fe5b60200260200101514310155b15611b0c578261010001518201915060008360e001518281518110611aff57fe5b6020026020010181815250505b600101611a93565b508160a001518111611b265780611b2c565b8160a001515b905060008111611b79576040805162461bcd60e51b81526020600482015260136024820152724e6f2072657761726420746f2072656465656d60681b604482015290519081900360640190fd5b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b158015611bbe57600080fd5b505afa158015611bd2573d6000803e3d6000fd5b505050506040513d6020811015611be857600080fd5b5051604080516321df0da760e01b815290516001600160a01b03909216916321df0da791600480820192602092909190829003018186803b158015611c2c57600080fd5b505afa158015611c40573d6000803e3d6000fd5b505050506040513d6020811015611c5657600080fd5b505183516040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810186905290519293509083169163a9059cbb916044808201926020929091908290030181600087803b158015611cb057600080fd5b505af1158015611cc4573d6000803e3d6000fd5b505050506040513d6020811015611cda57600080fd5b505060a08301805183900381526000868152600960209081526040808320888452825291829020865181546001600160a01b0319166001600160a01b0390911617815581870151600182015591860151600283015560608601516003830155608086015160048301559151600582015560c0850151600682015560e085015180518693611d6e926007850192910190613077565b50610100919091015160089091015582516040805133815260208101859052815188936001600160a01b0316927f5777300364834e2d145b85cee28a0d45c4be04f1c7c24116ec72a6b5c839631b928290030190a35050505b5050565b600854431015611e22576040805162461bcd60e51b815260206004820152601e60248201527f5374616b696e67206973207374696c6c206e6f7420617661696c61626c650000604482015290519081900360640190fd5b6001548510611e67576040805162461bcd60e51b815260206004820152600c60248201526b155b9adb9bdddb88141bdbdb60a21b604482015290519081900360640190fd5b6003548610611eac576040805162461bcd60e51b815260206004820152600c60248201526b2ab735b737bbb7103a34b2b960a11b604482015290519081900360640190fd5b60008411611eeb5760405162461bcd60e51b81526004018080602001828103825260238152602001806131c26023913960400191505060405180910390fd5b60008054600180546001600160a01b039092169188908110611f0957fe5b6000918252602090912001546001600160a01b031614611f295782611f2b565b345b905060008111611f6c5760405162461bcd60e51b81526004018080602001828103825260248152602001806132156024913960400191505060405180910390fd5b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b158015611fb157600080fd5b505afa158015611fc5573d6000803e3d6000fd5b505050506040513d6020811015611fdb57600080fd5b5051604080516321df0da760e01b815290519192506000916001600160a01b038416916321df0da7916004808301926020929190829003018186803b15801561202357600080fd5b505afa158015612037573d6000803e3d6000fd5b505050506040513d602081101561204d57600080fd5b5051905061205b81886125ea565b6120866001898154811061206b57fe5b6000918252602090912001546001600160a01b0316846125ea565b60006001898154811061209557fe5b60009182526020822001546001600160a01b0316915080806120bb8b8b898b89896127b3565b60008f81526002602052604081208054830190559295509093509150806120e18f6118d5565b9250509150818510156121255760405162461bcd60e51b81526004018080602001828103825260308152602001806131e56030913960400191505060405180910390fd5b808511156121645760405162461bcd60e51b815260040180806020018281038252603b815260200180613139603b913960400191505060405180910390fd5b6121728f8f8787878d612ac8565b505050505050505050505050505050565b6000828152600a6020526040902054811061219d57611dc7565b6000828152600a6020526040902080546000190190819055811015612259576000828152600960209081526040808320600a83528184205484529091528082208383529120815481546001600160a01b0319166001600160a01b039091161781556001808301549082015560028083015490820155600380830154908201556004808301549082015560058083015490820155600680830154908201556007808301805461224e92840191906130c2565b506008918201549101555b6000828152600960209081526040808320600a8352818420548452909152812080546001600160a01b0319168155600181018290556002810182905560038101829055600481018290556005810182905560068101829055906122bf6007830182613102565b600882016000905550505050565b6060816122f257506040805180820190915260018152600360fc1b6020820152610570565b8160005b811561230a57600101600a820491506122f6565b60608167ffffffffffffffff8111801561232357600080fd5b506040519080825280601f01601f19166020018201604052801561234e576020820181803683370190505b50905060001982015b851561239c57600a860660300160f81b8282806001900393508151811061237a57fe5b60200101906001600160f81b031916908160001a905350600a86049550612357565b50949350505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180368337019050509050600360fc1b8160008151811061240957fe5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061243257fe5b60200101906001600160f81b031916908160001a90535060005b601481101561239c578260048583600c016020811061246757fe5b1a60f81b6001600160f81b031916901c60f81c60ff168151811061248757fe5b602001015160f81c60f81b8282600202600201815181106124a457fe5b60200101906001600160f81b031916908160001a905350828482600c01602081106124cb57fe5b825191901a600f169081106124dc57fe5b602001015160f81c60f81b8282600202600301815181106124f957fe5b60200101906001600160f81b031916908160001a90535060010161244c565b60608160005b81518110156125e357604160f81b82828151811061253857fe5b01602001516001600160f81b031916108015906125735750605a60f81b82828151811061256157fe5b01602001516001600160f81b03191611155b6125975781818151811061258357fe5b01602001516001600160f81b0319166125b8565b8181815181106125a357fe5b602001015160f81c60f81b60f81c60200160f81b5b8282815181106125c457fe5b60200101906001600160f81b031916908160001a90535060010161251e565b5092915050565b6000546001600160a01b038381169116141561260557611dc7565b604080516323b872dd60e01b815233600482015230602482015260448101839052905183916001600160a01b038316916323b872dd916064808201926020929091908290030181600087803b15801561265d57600080fd5b505af1158015612671573d6000803e3d6000fd5b505050506040513d602081101561268757600080fd5b505060408051636eb1769f60e11b8152306004820152737a250d5630b4cf539739df2c5dacb4c659f2488d6024820152905183916001600160a01b0384169163dd62ed3e91604480820192602092909190829003018186803b1580156126ec57600080fd5b505afa158015612700573d6000803e3d6000fd5b505050506040513d602081101561271657600080fd5b5051116127ae576040805163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d6004820152600019602482015290516001600160a01b0383169163095ea7b39160448083019260209291908290030181600087803b15801561278157600080fd5b505af1158015612795573d6000803e3d6000fd5b505050506040513d60208110156127ab57600080fd5b50505b505050565b60008054819081906001600160a01b0385811691161415612897576040805163f305d71960e01b81526001600160a01b0387166004820152602481018b9052604481018a9052606481018890523060848201526103e8420160a48201529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163f305d719918a9160c48082019260609290919082900301818588803b15801561285157600080fd5b505af1158015612865573d6000803e3d6000fd5b50505050506040513d606081101561287c57600080fd5b50805160208201516040909201519094509092509050612968565b6040805162e8e33760e81b81526001600160a01b03878116600483015286166024820152604481018b905260648101899052608481018a905260a481018890523060c48201526103e8420160e48201529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163e8e33700916101048083019260609291908290030181600087803b15801561292757600080fd5b505af115801561293b573d6000803e3d6000fd5b505050506040513d606081101561295157600080fd5b508051602082015160409092015190945090925090505b888310156129ed576040805163a9059cbb60e01b8152336004820152848b03602482015290516001600160a01b0387169163a9059cbb9160448083019260209291908290030181600087803b1580156129c057600080fd5b505af11580156129d4573d6000803e3d6000fd5b505050506040513d60208110156129ea57600080fd5b50505b86821015612abc576000546001600160a01b0385811691161415612a3f57604051339083890380156108fc02916000818181858888f19350505050158015612a39573d6000803e3d6000fd5b50612abc565b6040805163a9059cbb60e01b8152336004820152838903602482015290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b158015612a8f57600080fd5b505af1158015612aa3573d6000803e3d6000fd5b505050506040513d6020811015612ab957600080fd5b50505b96509650969350505050565b600060068781548110612ad757fe5b906000526020600020015460038881548110612aef57fe5b906000526020600020015481612b0157fe5b049050606060068881548110612b1357fe5b906000526020600020015467ffffffffffffffff81118015612b3457600080fd5b50604051908082528060200260200182016040528015612b5e578160200160208202803683370190505b50805190915015612bca5781430181600081518110612b7957fe5b602090810291909101015260015b8151811015612bc85782826001830381518110612ba057fe5b602002602001015101828281518110612bb557fe5b6020908102919091010152600101612b87565b505b600060058981548110612bd957fe5b906000526020600020015460048a81548110612bf157fe5b9060005260206000200154880281612c0557fe5b049050612c10613022565b604051806101200160405280336001600160a01b031681526020018a815260200189815260200188815260200187815260200183815260200160038c81548110612c5657fe5b90600052602060002001544301815260200184815260200160068c81548110612c7b57fe5b90600052602060002001548481612c8e57fe5b0490529050612c9d8a82612f57565b50506040805160006020808301829052828401829052606083018690523060808085019190915284518085038201815260a08501808752639e813f1f60e01b905260a48501958652600f60e48601526e39ba30b5b4b733aa3930b739b332b960891b61010486015260c48501918252805161012486015280516001600160a01b038c1696639e813f1f96929590948594936101440192908701918190849084905b83811015612d56578181015183820152602001612d3e565b50505050905090810190601f168015612d835780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015612da357600080fd5b505af1158015612db7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612de057600080fd5b8101908080516040519392919084640100000000821115612e0057600080fd5b908301906020820185811115612e1557600080fd5b8251640100000000811182820188101715612e2f57600080fd5b82525081516020918201929091019080838360005b83811015612e5c578181015183820152602001612e44565b50505050905090810190601f168015612e895780820380516001836020036101000a031916815260200191505b5060405250505050888a336001600160a01b03167f904bffde498b5f8b9c482208599445964bca8e5fe0837abba34df545d09aed428b8b8b888860c001518b8a61010001516040518088815260200187815260200186815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015612f32578181015183820152602001612f1a565b505050509050019850505050505050505060405180910390a450505050505050505050565b6000828152600960209081526040808320600a83528184205484528252808320845181546001600160a01b0319166001600160a01b03909116178155848301516001820155908401516002820155606084015160038201556080840151600482015560a0840151600582015560c0840151600682015560e084015180518493869392612fec9260078501929190910190613077565b50610100919091015160089091015550506000918252600a60205260409091208054600101905560a081015160c0909101519091565b60405180610120016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081525090565b8280548282559060005260206000209081019282156130b2579160200282015b828111156130b2578251825591602001919060010190613097565b506130be929150613123565b5090565b8280548282559060005260206000209081019282156130b25760005260206000209182015b828111156130b25782548255916001019190600101906130e7565b50805460008255906000526020600020908101906131209190613123565b50565b5b808211156130be576000815560010161312456fe416d6f756e7420746f207374616b65206d757374206265206c657373207468616e207468652063757272656e742072656d61696e696e67206f6e654e6f206d6f72652072657761726420666f722074686973207374616b696e6720706f736974696f6e43616e6e6f742061637475616c6c79207769746864726177207468697320706f736974696f6e466972737420616d6f756e74206d7573742062652067726561746572207468616e2030416d6f756e7420746f207374616b65206973206c657373207468616e207468652063757272656e74206d696e206361705365636f6e6420616d6f756e74206d7573742062652067726561746572207468616e2030a264697066735822122005cb8c16848065602012eb1d67f99bf9b88dff18e2ae0a0a8c951f15ca520ef064736f6c63430007010033

Deployed Bytecode Sourcemap

27:15909:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3304:132;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3304:132:0;;:::i;:::-;;;;;;;;;;;;;;;;13626:1005;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13626:1005:0;;;;;;;:::i;:::-;;3208:88;;;;;;;;;;;;;:::i;2794:90::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2794:90:0;;;;;;;;;;;;;;11694:718;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11694:718:0;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;11694:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2988:212;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2892:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3748:1006;;;;;;;;;;;;;:::i;11579:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11579:107:0;;:::i;3444:296::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3444:296:0;-1:-1:-1;;;;;3444:296:0;;:::i;6892:616::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6892:616:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6416:468;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6416:468:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;12420:1198;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12420:1198:0;;;;;;;:::i;4762:1646::-;;;;;;;;;;;;;;;;-1:-1:-1;4762:1646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3304:132::-;3371:7;3398:30;;;:16;:30;;;;;;3304:132;;;;:::o;13626:1005::-;13694:30;;:::i;:::-;13727:16;;;;:10;:16;;;;;;;;:26;;;;;;;;;13694:59;;;;;;;;;-1:-1:-1;;;;;13694:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13727:26;;13694:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13788:13;:22;;;13772:12;:38;;13764:89;;;;-1:-1:-1;;;13764:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13909:12;;13896:34;;;-1:-1:-1;;;13896:34:0;;;;13864:12;;-1:-1:-1;;;;;13909:12:0;;13896:32;;:34;;;;;;;;;;;;;;13909:12;13896:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13896:34:0;13886:56;;;-1:-1:-1;;;13886:56:0;;;;-1:-1:-1;;;;;13886:54:0;;;;;;:56;;;;;13896:34;;13886:56;;;;;;;;:54;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13886:56:0;13957:20;;;;13886:56;;-1:-1:-1;13957:24:0;13954:114;;13998:5;-1:-1:-1;;;;;13998:14:0;;14013:13;:20;;;14035:13;:20;;;13998:58;;;;;;;;;;;;;-1:-1:-1;;;;;13998:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13954:114:0;100:42;-1:-1:-1;;;;;14093:45:0;;14147:5;14155:6;14162:13;:26;;;14155:34;;;;;;;;;;;;;;;;;;;14093:97;;;-1:-1:-1;;;;;;14093:97:0;;;;;;;-1:-1:-1;;;;;14093:97:0;;;;;;;14155:34;;;;14093:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14093:97:0;14217:20;;14239:24;;;;14202:62;;;-1:-1:-1;;;14202:62:0;;-1:-1:-1;;;;;14202:62:0;;;;;;;;;;;;;;;14093:97;;-1:-1:-1;14202:14:0;;;;;;:62;;;;;14093:97;;14202:62;;;;;;;;14217:20;14202:14;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14369:24:0;;;;;;14202:62;14339:26;;;;;14322:44;;;;:16;:44;;;;;;;14292:26;;14275:44;;;;;;14322:71;;;;14275:118;;;14459:26;14431:20;;14487:25;;;;14514:26;;;;;14542:24;;14568:20;;;;;14409:180;;14419:10;14409:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14459:26;;14453:4;;-1:-1:-1;;;;;14409:180:0;;;;;;;;;;;;;;14600:23;14608:4;14614:8;14600:7;:23::i;:::-;13626:1005;;;;:::o;3208:88::-;3277:11;;3208:88;:::o;2794:90::-;2864:12;;-1:-1:-1;;;;;2864:12:0;2794:90;:::o;11694:718::-;11775:7;11793;11811;11829;11847;11865;11883;11901:16;11928:7;11954:30;;:::i;:::-;11987:16;;;;:10;:16;;;;;;;;:26;;;;;;;;;11954:59;;;;;;;;;-1:-1:-1;;;;;11954:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11987:26;;11954:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12045:13;:20;;;12080:13;:26;;;12121:13;:25;;;12161:13;:26;;;12202:13;:24;;;12241:13;:20;;;12276:13;:22;;;12313:13;:37;;;12365:13;:28;;;12024:380;;;;;;;;;;;;;;;;;;;11694:718;;;;;;;;;;;:::o;2988:212::-;3028:16;3046;3064;3082;3119:12;3133:18;3153:15;3170:21;3111:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2988:212;;;;:::o;2892:88::-;2930:16;2966:6;2959:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2959:13:0;;;;;;;;;;;;;;;;;;;;;;;2892:88;:::o;3748:1006::-;3833:12;;3820:34;;;-1:-1:-1;;;3820:34:0;;;;3792:15;;-1:-1:-1;;;;;3833:12:0;;3820:32;;:34;;;;;;;;;;;;;;3833:12;3820:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3820:34:0;3901:43;;;-1:-1:-1;;;3901:43:0;;;;3820:34;;-1:-1:-1;;;;;;3901:41:0;;;;;:43;;;;;3820:34;;3901:43;;;;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3901:43:0;3874:109;;;-1:-1:-1;;;3874:109:0;;3972:10;3874:109;;;;;;-1:-1:-1;;;;;3874:97:0;;;;;;:109;;;;;3901:43;;3874:109;;;;;;;;:97;:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3874:109:0;3866:142;;;;;-1:-1:-1;;;3866:142:0;;;;;;;;;;;;-1:-1:-1;;;3866:142:0;;;;;;;;;;;;;;;4019:21;4043:5;-1:-1:-1;;;;;4043:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4043:27:0;4104:16;;;-1:-1:-1;;;4104:16:0;;;;4043:27;;-1:-1:-1;4081:20:0;;-1:-1:-1;;;;;4104:14:0;;;;;:16;;;;;4043:27;;4104:16;;;;;;;:14;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4104:16:0;4197:30;;;-1:-1:-1;;;4197:30:0;;4221:4;4197:30;;;;;;4104:16;;-1:-1:-1;4104:16:0;;4131:12;;-1:-1:-1;;;;;4197:15:0;;;;;:30;;;;;4104:16;;4197:30;;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4197:30:0;;-1:-1:-1;4241:13:0;;4238:85;;4271:5;-1:-1:-1;;;;;4271:14:0;;4286:13;4301:9;4271:40;;;;;;;;;;;;;-1:-1:-1;;;;;4271:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4238:85:0;-1:-1:-1;4345:1:0;;4357:390;4380:6;:13;4376:17;;4357:390;;;100:42;-1:-1:-1;;;;;4430:45:0;;4476:12;4490:6;4497:1;4490:9;;;;;;;;;;;;;;;;;;;4430:70;;;-1:-1:-1;;;;;;4430:70:0;;;;;;;-1:-1:-1;;;;;4430:70:0;;;;;;;4490:9;;;;4430:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4430:70:0;4528:30;;;-1:-1:-1;;;4528:30:0;;4552:4;4528:30;;;;;;4430:70;;-1:-1:-1;;;;;;4528:15:0;;;;;:30;;;;;4430:70;;4528:30;;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4528:30:0;;-1:-1:-1;4576:13:0;;4573:135;;4610:5;-1:-1:-1;;;;;4610:14:0;;4625:13;4640:9;4610:40;;;;;;;;;;;;;-1:-1:-1;;;;;4610:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4691:1:0;4669:19;;;:16;4610:40;4669:19;;;;:23;4573:135;4734:1;;-1:-1:-1;4395:3:0;;4357:390;;;;3748:1006;;;;;:::o;11579:107::-;11629:7;11656:22;;;:16;:22;;;;;;;11579:107::o;3444:296::-;3568:12;;;;;;;;;-1:-1:-1;;;;;3568:12:0;-1:-1:-1;;;;;3555:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3555:34:0;3545:83;;;-1:-1:-1;;;3545:83:0;;;;-1:-1:-1;;;;;3545:81:0;;;;;;:83;;;;;3555:34;;3545:83;;;;;;;;:81;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3545:83:0;3518:149;;;-1:-1:-1;;;3518:149:0;;3656:10;3518:149;;;;;;-1:-1:-1;;;;;3518:137:0;;;;;;:149;;;;;3545:83;;3518:149;;;;;;;;:137;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3518:149:0;3510:182;;;;;-1:-1:-1;;;3510:182:0;;;;;;;;;;;;-1:-1:-1;;;3510:182:0;;;;;;;;;;;;;;;3703:12;:29;;-1:-1:-1;;;;;;3703:29:0;-1:-1:-1;;;;;3703:29:0;;;;;;;;;;3444:296::o;6892:616::-;6949:7;6958;6978:24;7041:12;;;;;;;;;-1:-1:-1;;;;;7041:12:0;-1:-1:-1;;;;;7028:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7028:34:0;7018:69;;;-1:-1:-1;;;7018:69:0;;;;-1:-1:-1;;;;;7018:67:0;;;;;;:69;;;;;7028:34;;7018:69;;;;;;;;:67;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7018:69:0;;-1:-1:-1;7099:24:0;7126:15;7136:4;7126:9;:15::i;:::-;7099:42;;7152:27;7182:38;7195:24;7213:4;7195:9;:24::i;:::-;7182:12;:38::i;:::-;7152:68;;7253:11;-1:-1:-1;;;;;7253:22:0;;7312:13;7338:10;7283:78;;;;;;-1:-1:-1;;;7283:78:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7283:78:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7283:78:0;;;;;;;;;;;-1:-1:-1;;;7283:78:0;;;;;;;;;;;;;;;;;-1:-1:-1;7283:78:0;;;;;;;;;;;;;-1:-1:-1;;7283:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7283:78:0;;;;;;;;;;;;;;;;;;;;;7253:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7253:110:0;7408:79;;-1:-1:-1;;;7253:110:0;7408:79;;;;;;;;-1:-1:-1;;;;;7378:22:0;;;;;7437:13;;7463:10;;7408:79;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7408:79:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7408:79:0;;;;;;;;;;;-1:-1:-1;;;7408:79:0;;;;;;;;;;;;;;;;;-1:-1:-1;7408:79:0;;;;;;;;;;;;;-1:-1:-1;;7408:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7408:79:0;;;;;;;;;;;;;;;;;;;;;7378:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7378:111:0;7231:269;;-1:-1:-1;7378:111:0;-1:-1:-1;;;;6892:616:0;;;:::o;6416:468::-;6474:14;6490:15;6507:24;6564:19;6578:4;6564:13;:19::i;:::-;6631:14;6648:22;;;:16;:22;;;;;;6544:39;;-1:-1:-1;6544:39:0;;-1:-1:-1;6544:39:0;;-1:-1:-1;6681:196:0;6704:6;6700:1;:10;6681:196;;;6735:16;;;;:10;:16;;;;;;;;:19;;;;;;;;:28;;;6766:12;-1:-1:-1;6732:134:0;;;6819:16;;;;:10;:16;;;;;;;;:19;;;;;;;;:31;;;6799:51;;;;6732:134;6712:3;;6681:196;;;;6416:468;;;;;;:::o;12420:1198::-;12493:30;;:::i;:::-;12526:16;;;;:10;:16;;;;;;;;:26;;;;;;;;;12493:59;;;;;;;;;-1:-1:-1;;;;;12493:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12526:26;;12493:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12582:13;:22;;;12566:12;:38;12563:101;;12628:24;12637:4;12643:8;12628;:24::i;:::-;12621:31;;;12563:101;12705:1;12682:13;:20;;;:24;12674:77;;;;-1:-1:-1;;;12674:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12762:14;12795:9;12791:345;12814:13;:37;;;:44;12810:1;:48;12791:345;;;12926:1;12883:13;:37;;;12921:1;12883:40;;;;;;;;;;;;;;:44;:104;;;;;12947:13;:37;;;12985:1;12947:40;;;;;;;;;;;;;;12931:12;:56;;12883:104;12880:245;;;13018:13;:28;;;13008:38;;;;13108:1;13065:13;:37;;;13103:1;13065:40;;;;;;;;;;;;;:44;;;;;12880:245;12860:3;;12791:345;;;;13164:13;:20;;;13155:6;:29;:61;;13210:6;13155:61;;;13187:13;:20;;;13155:61;13146:70;;13244:1;13235:6;:10;13227:42;;;;;-1:-1:-1;;;13227:42:0;;;;;;;;;;;;-1:-1:-1;;;13227:42:0;;;;;;;;;;;;;;;13325:12;;13312:34;;;-1:-1:-1;;;13312:34:0;;;;13280:12;;-1:-1:-1;;;;;13325:12:0;;13312:32;;:34;;;;;;;;;;;;;;13325:12;13312:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13312:34:0;13302:56;;;-1:-1:-1;;;13302:56:0;;;;-1:-1:-1;;;;;13302:54:0;;;;;;:56;;;;;13312:34;;13302:56;;;;;;;;:54;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13302:56:0;13385:20;;13370:44;;;-1:-1:-1;;;13370:44:0;;-1:-1:-1;;;;;13370:44:0;;;;;;;;;;;;;;;13302:56;;-1:-1:-1;13370:14:0;;;;;;:44;;;;;13302:56;;13370:44;;;;;;;;13385:20;13370:14;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13448:20:0;;;;;:29;;;13425:52;;-1:-1:-1;13488:16:0;;;:10;13370:44;13488:16;;;;;;;:26;;;;;;;;;:42;;;;-1:-1:-1;;;;;;13488:42:0;-1:-1:-1;;;;;13488:42:0;;;;;;;;;;-1:-1:-1;13488:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13448:20;;13488:42;;;;;;;;;;:::i;:::-;-1:-1:-1;13488:42:0;;;;;;;;;;;13575:20;;13546:64;;;13563:10;13546:64;;;;;;;;;;13597:4;;-1:-1:-1;;;;;13546:64:0;;;;;;;;;;12420:1198;;;;;;:::o;4762:1646::-;4956:11;;4940:12;:27;;4932:70;;;;;-1:-1:-1;;;4932:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5036:6;:13;5021:28;;5013:53;;;;;-1:-1:-1;;;5013:53:0;;;;;;;;;;;;-1:-1:-1;;;5013:53:0;;;;;;;;;;;;;;;5092:12;:19;5085:26;;5077:51;;;;;-1:-1:-1;;;5077:51:0;;;;;;;;;;;;-1:-1:-1;;;5077:51:0;;;;;;;;;;;;;;;5171:1;5149:19;:23;5141:71;;;;-1:-1:-1;;;5141:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5225:28;5280:12;;;5256:20;;-1:-1:-1;;;;;5280:12:0;;;;5263;;5256:20;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5256:20:0;:36;:56;;5307:5;5256:56;;;5295:9;5256:56;5225:87;;5354:1;5331:20;:24;5323:73;;;;-1:-1:-1;;;5323:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5450:12;;5437:34;;;-1:-1:-1;;;5437:34:0;;;;5409:15;;-1:-1:-1;;;;;5450:12:0;;5437:32;;:34;;;;;;;;;;;;;;5450:12;5437:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5437:34:0;5506:16;;;-1:-1:-1;;;5506:16:0;;;;5437:34;;-1:-1:-1;5483:20:0;;-1:-1:-1;;;;;5506:14:0;;;;;:16;;;;;5437:34;;5506:16;;;;;;;:14;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5506:16:0;;-1:-1:-1;5535:67:0;5506:16;5582:19;5535:32;:67::i;:::-;5613:76;5646:6;5653:12;5646:20;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5646:20:0;5668;5613:32;:76::i;:::-;5702:19;5724:6;5731:12;5724:20;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5724:20:0;;-1:-1:-1;5724:20:0;;5823:119;5840:19;5861:14;5877:20;5899:15;5916:12;5724:20;5823:16;:119::i;:::-;5955:30;;;;:16;:30;;;;;:44;;;;;;5757:185;;-1:-1:-1;5757:185:0;;-1:-1:-1;5757:185:0;-1:-1:-1;5955:30:0;6058:20;6073:4;6058:14;:20::i;:::-;6012:66;;;;;6112:6;6097:11;:21;;6089:82;;;;-1:-1:-1;;;6089:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6205:16;6190:11;:31;;6182:103;;;;-1:-1:-1;;;6182:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6298:102;6335:4;6341:12;6355:11;6368:12;6382:10;6394:5;6298:36;:102::i;:::-;4762:1646;;;;;;;;;;;;;;;:::o;11188:383::-;11252:22;;;;:16;:22;;;;;;:27;-1:-1:-1;11249:65:0;;11296:7;;11249:65;11349:22;;;;:16;:22;;;;;;;-1:-1:-1;;11349:26:0;11324:51;;;;11389:26;-1:-1:-1;11386:120:0;;;11454:16;;;;:10;:16;;;;;;;;11471;:22;;;;;;11454:40;;;;;;;;11432:19;;;;;:62;;;;-1:-1:-1;;;;;;11432:62:0;-1:-1:-1;;;;;11432:62:0;;;;;;-1:-1:-1;11432:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;11432:62:0;;;;;;;;11386:120;11523:16;;;;:10;:16;;;;;;;;11540;:22;;;;;;11523:40;;;;;;;11516:47;;-1:-1:-1;;;;;;11516:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11523:40;11516:47;;;;11523:16;11516:47;:::i;:::-;;;;;;;;;11188:383;;:::o;14639:467::-;14688:13;14718:7;14714:50;;-1:-1:-1;14742:10:0;;;;;;;;;;;;-1:-1:-1;;;14742:10:0;;;;;;14714:50;14783:2;14774:6;14815:69;14822:6;;14815:69;;14845:5;;14870:2;14865:7;;;;14815:69;;;14894:17;14924:3;14914:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14914:14:0;-1:-1:-1;14894:34:0;-1:-1:-1;;;14948:7:0;;14966:103;14973:7;;14966:103;;15030:2;15025;:7;15020:2;:12;15009:25;;14997:4;15002:3;;;;;;;14997:9;;;;;;;;;;;:37;-1:-1:-1;;;;;14997:37:0;;;;;;;;-1:-1:-1;15055:2:0;15049:8;;;;14966:103;;;-1:-1:-1;15093:4:0;14639:467;-1:-1:-1;;;;14639:467:0:o;15114:493::-;15245:42;;;;;;;;;;;-1:-1:-1;;;15245:42:0;;;;15319:13;;15329:2;15319:13;;;15169;15319;;;;;;-1:-1:-1;;;;;15219:14:0;;;15245:42;15169:13;;15319;;;;;;;;;;-1:-1:-1;15319:13:0;15300:32;;-1:-1:-1;;;15343:3:0;15347:1;15343:6;;;;;;;;;;;:12;-1:-1:-1;;;;;15343:12:0;;;;;;;;;-1:-1:-1;;;15366:3:0;15370:1;15366:6;;;;;;;;;;;:12;-1:-1:-1;;;;;15366:12:0;;;;;;;;;15394:6;15389:182;15410:2;15406:1;:6;15389:182;;;15447:8;15484:1;15467:5;15473:1;15477:2;15473:6;15467:13;;;;;;;;;;-1:-1:-1;;;;;15467:18:0;;;;15461:25;;15456:31;;15447:41;;;;;;;;;;;;;;;;15434:3;15440:1;15442;15440:3;15438:1;:5;15434:10;;;;;;;;;;;:54;-1:-1:-1;;;;;15434:54:0;;;;;;;;;15516:8;15536:5;15542:1;15546:2;15542:6;15536:13;;;;;;;15516:43;;15536:13;;;15552:4;15530:27;;15516:43;;;;;;;;;;;;;;15503:3;15509:1;15511;15509:3;15507:1;:5;15503:10;;;;;;;;;;;:56;-1:-1:-1;;;;;15503:56:0;;;;;;;;-1:-1:-1;15414:3:0;;15389:182;;15615:318;15677:13;15729:3;15749:6;15744:152;15765:4;:11;15761:1;:15;15744:152;;;15819:4;15808:15;;:4;15813:1;15808:7;;;;;;;;;;;;-1:-1:-1;;;;;;15808:7:0;:15;;;;:34;;;15838:4;15827:15;;:4;15832:1;15827:7;;;;;;;;;;;;-1:-1:-1;;;;;;15827:7:0;:15;;15808:34;:76;;15877:4;15882:1;15877:7;;;;;;;;;;;;-1:-1:-1;;;;;;15877:7:0;15808:76;;;15858:4;15863:1;15858:7;;;;;;;;;;;;;;;;15852:14;;15869:4;15852:21;15845:29;;15808:76;15798:4;15803:1;15798:7;;;;;;;;;;;:86;-1:-1:-1;;;;;15798:86:0;;;;;;;;-1:-1:-1;15778:3:0;;15744:152;;;-1:-1:-1;15920:4:0;15615:318;-1:-1:-1;;15615:318:0:o;7516:480::-;7633:12;;-1:-1:-1;;;;;7617:28:0;;;7633:12;;7617:28;7614:66;;;7662:7;;7614:66;7736:52;;;-1:-1:-1;;;7736:52:0;;7755:10;7736:52;;;;7775:4;7736:52;;;;;;;;;;;;7712:12;;-1:-1:-1;;;;;7736:18:0;;;;;:52;;;;;;;;;;;;;;;7690:12;7736:18;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7802:49:0;;;-1:-1:-1;;;7802:49:0;;7826:4;7802:49;;;;196:42;7802:49;;;;;;7855:5;;-1:-1:-1;;;;;7802:15:0;;;;;:49;;;;;7736:52;;7802:49;;;;;;;;:15;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7802:49:0;:58;7799:190;;7877:100;;;-1:-1:-1;;;7877:100:0;;196:42;7877:100;;;;-1:-1:-1;;7877:100:0;;;;;;-1:-1:-1;;;;;7877:13:0;;;;;:100;;;;;;;;;;;;;;-1:-1:-1;7877:13:0;:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7799:190:0;7516:480;;;:::o;8004:1564::-;8195:19;8287:12;;8195:19;;;;-1:-1:-1;;;;;8272:27:0;;;8287:12;;8272:27;8269:817;;;8358:302;;;-1:-1:-1;;;8358:302:0;;-1:-1:-1;;;;;8358:302:0;;;;;;;;;;;;;;;;;;;;;;;;8599:4;8358:302;;;;8641:4;8623:15;:22;8358:302;;;;;;196:42;;8358:51;;8417:20;;8358:302;;;;;;;;;;;;;;;8417:20;196:42;8358:302;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8358:302:0;;;;;;;;;;;;;-1:-1:-1;8358:302:0;;-1:-1:-1;8358:302:0;-1:-1:-1;8269:817:0;;;8735:339;;;-1:-1:-1;;;8735:339:0;;-1:-1:-1;;;;;8735:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9013:4;8735:339;;;;9055:4;9037:15;:22;8735:339;;;;;;196:42;;8735:48;;:339;;;;;;;;;;;;;;-1:-1:-1;196:42:0;8735:339;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8735:339:0;;;;;;;;;;;;;-1:-1:-1;8735:339:0;;-1:-1:-1;8735:339:0;-1:-1:-1;8269:817:0;9113:19;9099:11;:33;9096:139;;;9149:74;;;-1:-1:-1;;;9149:74:0;;9177:10;9149:74;;;;9189:33;;;9149:74;;;;;;-1:-1:-1;;;;;9149:27:0;;;;;:74;;;;;;;;;;;;;;-1:-1:-1;9149:27:0;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9096:139:0;9263:20;9248:12;:35;9245:316;;;9318:12;;-1:-1:-1;;;;;9303:27:0;;;9318:12;;9303:27;9300:250;;;9351:65;;9359:10;;9380:35;;;9351:65;;;;;;;;;9380:35;9359:10;9351:65;;;;;;;;;;;;;;;;;;;;;9300:250;;;9457:77;;;-1:-1:-1;;;9457:77:0;;9486:10;9457:77;;;;9498:35;;;9457:77;;;;;;-1:-1:-1;;;;;9457:28:0;;;;;:77;;;;;;;;;;;;;;-1:-1:-1;9457:28:0;:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9300:250:0;8004:1564;;;;;;;;;;:::o;9576:1325::-;9757:36;9817:21;9839:4;9817:27;;;;;;;;;;;;;;;;9796:12;9809:4;9796:18;;;;;;;;;;;;;;;;:48;;;;;;9757:87;;9855:40;9912:21;9934:4;9912:27;;;;;;;;;;;;;;;;9898:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9898:42:0;-1:-1:-1;9954:30:0;;9855:85;;-1:-1:-1;9954:34:0;9951:337;;10049:28;10034:12;:43;10005:23;10029:1;10005:26;;;;;;;;;;;;;;;;;:72;10108:1;10092:185;10115:23;:30;10111:1;:34;10092:185;;;10233:28;10200:23;10228:1;10224;:5;10200:30;;;;;;;;;;;;;;:61;10171:23;10195:1;10171:26;;;;;;;;;;;;;;;;;:90;10147:3;;10092:185;;;;9951:337;10298:14;10356:15;10372:4;10356:21;;;;;;;;;;;;;;;;10329:18;10348:4;10329:24;;;;;;;;;;;;;;;;10315:11;:38;:62;;;;;;10298:79;;10388:26;;:::i;:::-;10417:180;;;;;;;;10427:10;-1:-1:-1;;;;;10417:180:0;;;;;10439:12;10417:180;;;;10453:11;10417:180;;;;10466:12;10417:180;;;;10480:10;10417:180;;;;10492:6;10417:180;;;;10515:12;10528:4;10515:18;;;;;;;;;;;;;;;;10500:12;:33;10417:180;;;;10535:23;10417:180;;;;10569:21;10591:4;10569:27;;;;;;;;;;;;;;;;10560:6;:36;;;;;;10417:180;;10388:209;-1:-1:-1;10608:21:0;10613:4;10388:209;10608:4;:21::i;:::-;-1:-1:-1;;10672:48:0;;;10691:1;10672:48;;;;;;;;;;;;;;;;;;;10714:4;10672:48;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10640:81:0;;;;;;;;;;;;;-1:-1:-1;;;10640:81:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10640:12:0;;;;;10672:48;;10640:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10640:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10640:81:0;;;;;;;;;;-1:-1:-1;10640:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10762:12;10756:4;10744:10;-1:-1:-1;;;;;10737:156:0;;10776:11;10789:12;10803:10;10815:6;10823:9;:18;;;10843:23;10868:9;:24;;;10737:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9576:1325;;;;;;;;;;:::o;10909:271::-;10979:7;11008:16;;;:10;:16;;;;;;;;11025;:22;;;;;;11008:40;;;;;;;:50;;;;-1:-1:-1;;;;;;11008:50:0;-1:-1:-1;;;;;11008:50:0;;;;;;;;;;-1:-1:-1;11008:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10979:7;;11008:50;;:40;:50;;;;;;;;;;;;:::i;:::-;-1:-1:-1;11008:50:0;;;;;;;;;;;-1:-1:-1;;11094:22:0;;;;:16;:22;;;;;;;;11119:1;11094:26;11069:51;;11139:14;;;;11155:16;;;;;11139:14;;10909:271::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;

Swarm Source

ipfs://05cb8c16848065602012eb1d67f99bf9b88dff18e2ae0a0a8c951f15ca520ef0

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
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.