ETH Price: $3,258.53 (-2.45%)

Contract

0x3660c73E030C497cccbE8aaabdc7431fAEB6E495
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040119620922021-03-03 0:26:251351 days ago1614731185IN
 Create: Presto
0 ETH0.1592537799

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
153515942022-08-16 9:32:36819 days ago1660642356
0x3660c73E...fAEB6E495
0.00097502 ETH
153515942022-08-16 9:32:36819 days ago1660642356
0x3660c73E...fAEB6E495
0.00097502 ETH
153514002022-08-16 8:49:39819 days ago1660639779
0x3660c73E...fAEB6E495
0.00001185 ETH
153514002022-08-16 8:49:39819 days ago1660639779
0x3660c73E...fAEB6E495
0.00974699 ETH
153514002022-08-16 8:49:39819 days ago1660639779
0x3660c73E...fAEB6E495
0.00975885 ETH
150728312022-07-04 0:32:46863 days ago1656894766
0x3660c73E...fAEB6E495
0.56104125 ETH
150728312022-07-04 0:32:46863 days ago1656894766
0x3660c73E...fAEB6E495
0.56104125 ETH
150728312022-07-04 0:32:46863 days ago1656894766
0x3660c73E...fAEB6E495
0.56998451 ETH
150728312022-07-04 0:32:46863 days ago1656894766
0x3660c73E...fAEB6E495
0.56998451 ETH
139292352022-01-03 0:14:401045 days ago1641168880
0x3660c73E...fAEB6E495
0.29637808 ETH
139292352022-01-03 0:14:401045 days ago1641168880
0x3660c73E...fAEB6E495
0.29637808 ETH
139292352022-01-03 0:14:401045 days ago1641168880
0x3660c73E...fAEB6E495
0.29645727 ETH
139292352022-01-03 0:14:401045 days ago1641168880
0x3660c73E...fAEB6E495
0.29645727 ETH
132816222021-09-23 11:05:371146 days ago1632395137
0x3660c73E...fAEB6E495
0.35 ETH
132816222021-09-23 11:05:371146 days ago1632395137
0x3660c73E...fAEB6E495
0.34832617 ETH
132816222021-09-23 11:05:371146 days ago1632395137
0x3660c73E...fAEB6E495
0.69832617 ETH
131338782021-08-31 14:37:271169 days ago1630420647
0x3660c73E...fAEB6E495
1.46060467 ETH
131338782021-08-31 14:37:271169 days ago1630420647
0x3660c73E...fAEB6E495
1.46060467 ETH
131338782021-08-31 14:37:271169 days ago1630420647
0x3660c73E...fAEB6E495
1.46315988 ETH
131338782021-08-31 14:37:271169 days ago1630420647
0x3660c73E...fAEB6E495
1.46315988 ETH
131338672021-08-31 14:34:491169 days ago1630420489
0x3660c73E...fAEB6E495
1.4601432 ETH
131338672021-08-31 14:34:491169 days ago1630420489
0x3660c73E...fAEB6E495
1.4601432 ETH
131338672021-08-31 14:34:491169 days ago1630420489
0x3660c73E...fAEB6E495
1.46315988 ETH
131338672021-08-31 14:34:491169 days ago1630420489
0x3660c73E...fAEB6E495
1.46315988 ETH
131338532021-08-31 14:29:011169 days ago1630420141
0x3660c73E...fAEB6E495
0.49763587 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Presto

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-03-03
*/

// File: contracts\presto\PrestoData.sol

//SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;

struct PrestoOperation {

    address inputTokenAddress;
    uint256 inputTokenAmount;

    address ammPlugin;
    address[] liquidityPoolAddresses;
    address[] swapPath;
    bool enterInETH;
    bool exitInETH;

    address[] receivers;
    uint256[] receiversPercentages;
}

// File: contracts\presto\IPresto.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;
pragma abicoder v2;


interface IPresto {

    function ONE_HUNDRED() external view returns (uint256);
    function doubleProxy() external view returns (address);
    function feePercentage() external view returns (uint256);

    function feePercentageInfo() external view returns (uint256, address);

    function setDoubleProxy(address _doubleProxy) external;

    function setFeePercentage(uint256 _feePercentage) external;

    function execute(PrestoOperation[] memory operations) external payable;
}

// File: contracts\presto\util\IERC20.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;

interface IERC20 {
    function totalSupply() external view returns(uint256);
    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);

    function decimals() external view returns (uint8);
}

// File: contracts\presto\util\DFOHub.sol

// SPDX_License_Identifier: MIT

pragma solidity ^0.7.6;

interface IDoubleProxy {
    function proxy() external view returns (address);
}

interface IMVDProxy {
    function getMVDFunctionalitiesManagerAddress() external view returns(address);
    function getMVDWalletAddress() external view returns (address);
    function getStateHolderAddress() external view returns(address);
    function submit(string calldata codeName, bytes calldata data) external payable returns(bytes memory returnData);
}

interface IMVDFunctionalitiesManager {
    function isAuthorizedFunctionality(address functionality) external view returns(bool);
}

interface IStateHolder {
    function getUint256(string calldata name) external view returns(uint256);
    function getAddress(string calldata name) external view returns(address);
    function clear(string calldata varName) external returns(string memory oldDataType, bytes memory oldVal);
}

// File: contracts\amm-aggregator\common\AMMData.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;

struct LiquidityPoolData {
    address liquidityPoolAddress;
    uint256 amount;
    address tokenAddress;
    bool amountIsLiquidityPool;
    bool involvingETH;
    address receiver;
}

struct SwapData {
    bool enterInETH;
    bool exitInETH;
    address[] liquidityPoolAddresses;
    address[] path;
    address inputToken;
    uint256 amount;
    address receiver;
}

// File: contracts\amm-aggregator\common\IAMM.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;
//pragma abicoder v2;


interface IAMM {

    event NewLiquidityPoolAddress(address indexed);

    function info() external view returns(string memory name, uint256 version);

    function data() external view returns(address ethereumAddress, uint256 maxTokensPerLiquidityPool, bool hasUniqueLiquidityPools);

    function balanceOf(address liquidityPoolAddress, address owner) external view returns(uint256, uint256[] memory, address[] memory);

    function byLiquidityPool(address liquidityPoolAddress) external view returns(uint256, uint256[] memory, address[] memory);

    function byTokens(address[] calldata liquidityPoolTokens) external view returns(uint256, uint256[] memory, address, address[] memory);

    function byPercentage(address liquidityPoolAddress, uint256 numerator, uint256 denominator) external view returns (uint256, uint256[] memory, address[] memory);

    function byLiquidityPoolAmount(address liquidityPoolAddress, uint256 liquidityPoolAmount) external view returns(uint256[] memory, address[] memory);

    function byTokenAmount(address liquidityPoolAddress, address tokenAddress, uint256 tokenAmount) external view returns(uint256, uint256[] memory, address[] memory);

    function createLiquidityPoolAndAddLiquidity(address[] calldata tokenAddresses, uint256[] calldata amounts, bool involvingETH, address receiver) external payable returns(uint256, uint256[] memory, address, address[] memory);

    function addLiquidity(LiquidityPoolData calldata data) external payable returns(uint256, uint256[] memory, address[] memory);
    function addLiquidityBatch(LiquidityPoolData[] calldata data) external payable returns(uint256[] memory, uint256[][] memory, address[][] memory);

    function removeLiquidity(LiquidityPoolData calldata data) external returns(uint256, uint256[] memory, address[] memory);
    function removeLiquidityBatch(LiquidityPoolData[] calldata data) external returns(uint256[] memory, uint256[][] memory, address[][] memory);

    function getSwapOutput(address tokenAddress, uint256 tokenAmount, address[] calldata, address[] calldata path) view external returns(uint256[] memory);

    function swapLiquidity(SwapData calldata data) external payable returns(uint256);
    function swapLiquidityBatch(SwapData[] calldata data) external payable returns(uint256[] memory);
}

// File: contracts\presto\Presto.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;
//pragma abicoder v2;





contract Presto is IPresto {

    uint256 public override constant ONE_HUNDRED = 1e18;

    mapping(address => uint256) private _tokenIndex;
    address[] private _tokensToTransfer;
    uint256[] private _tokenAmounts;

    address public override doubleProxy;
    uint256 public override feePercentage;

    constructor(address _doubleProxy, uint256 _feePercentage) {
        doubleProxy = _doubleProxy;
        feePercentage = _feePercentage;
    }

    receive() external payable {
    }

    modifier onlyDFO() {
        require(IMVDFunctionalitiesManager(IMVDProxy(IDoubleProxy(doubleProxy).proxy()).getMVDFunctionalitiesManagerAddress()).isAuthorizedFunctionality(msg.sender), "Unauthorized.");
        _;
    }

    function feePercentageInfo() public override view returns (uint256, address) {
        return (feePercentage, IMVDProxy(IDoubleProxy(doubleProxy).proxy()).getMVDWalletAddress());
    }

    function setDoubleProxy(address _doubleProxy) public override onlyDFO {
        doubleProxy = _doubleProxy;
    }

    function setFeePercentage(uint256 _feePercentage) public override onlyDFO {
        feePercentage = _feePercentage;
    }

    function execute(PrestoOperation[] memory operations) public override payable {
        _transferToMe(operations);
        for(uint256 i = 0 ; i < operations.length; i++) {
            PrestoOperation memory operation = operations[i];
            if(operation.ammPlugin == address(0)) {
                _transferTo(operation.inputTokenAddress, operation.inputTokenAmount, operation.receivers, operation.receiversPercentages);
            } else if(operation.liquidityPoolAddresses.length == 0) {
                _addLiquidity(operation);
            } else {
                _swap(operation);
            }
        }
        _flushAndClear();
    }

    function _transferToMe(PrestoOperation[] memory operations) private {
        _collectTokens(operations);
        for(uint256 i = 0; i < _tokensToTransfer.length; i++) {
            if(_tokensToTransfer[i] == address(0)) {
                require(msg.value == _tokenAmounts[i], "Incorrect ETH value");
            } else {
                _safeTransferFrom(_tokensToTransfer[i], msg.sender, address(this), _tokenAmounts[i]);
            }
        }
    }

    function _collectTokens(PrestoOperation[] memory operations) private {
        for(uint256 i = 0; i < operations.length; i++) {
            PrestoOperation memory operation = operations[i];
            if(operation.ammPlugin != address(0) && operation.liquidityPoolAddresses.length == 0) {
                IAMM amm = IAMM(operation.ammPlugin);
                (address ethereumAddress,,) = (amm.data());
                (uint256[] memory amounts, address[] memory tokensAddresses) = amm.byLiquidityPoolAmount(operation.inputTokenAddress, operation.inputTokenAmount);
                bool hasEth = false;
                for(uint256 z = 0; z < tokensAddresses.length; z++) {
                    if(tokensAddresses[z] == ethereumAddress) {
                        hasEth = true;
                    }
                    _collectTokenData(operation.enterInETH && tokensAddresses[z] == ethereumAddress ? address(0) : tokensAddresses[z], amounts[z]);
                }
                require(!operation.enterInETH || hasEth, "Wrong use of enterInETH in addLiquidity");
            } else {
                _collectTokenData(operation.ammPlugin != address(0) && operation.enterInETH ? address(0) : operation.inputTokenAddress, operation.inputTokenAmount);
            }
        }
    }

    function _collectTokenData(address inputTokenAddress, uint256 inputTokenAmount) private {
        if(inputTokenAmount == 0) {
            return;
        }

        uint256 position = _tokenIndex[inputTokenAddress];

        if(_tokensToTransfer.length == 0 || _tokensToTransfer[position] != inputTokenAddress) {
            _tokenIndex[inputTokenAddress] = (position = _tokensToTransfer.length);
            _tokensToTransfer.push(inputTokenAddress);
            _tokenAmounts.push(0);
        }
        _tokenAmounts[position] = _tokenAmounts[position] + inputTokenAmount;
    }

    function _flushAndClear() private {
        for(uint256 i = 0; i < _tokensToTransfer.length; i++) {
            _safeTransfer(_tokensToTransfer[i], msg.sender, _balanceOf(_tokensToTransfer[i]));
            delete _tokenIndex[_tokensToTransfer[i]];
        }
        delete _tokensToTransfer;
        delete _tokenAmounts;
    }

    function _balanceOf(address tokenAddress) private view returns(uint256) {
        if(tokenAddress == address(0)) {
            return address(this).balance;
        }
        return IERC20(tokenAddress).balanceOf(address(this));
    }

    function _addLiquidity(PrestoOperation memory operation) private {
        LiquidityPoolData memory liquidityPoolData = LiquidityPoolData(
            operation.inputTokenAddress,
            operation.inputTokenAmount,
            address(0),
            true,
            operation.enterInETH,
            address(this)
        );
        (uint256 amountOut,,) = IAMM(operation.ammPlugin).addLiquidity(liquidityPoolData);
        _transferTo(operation.inputTokenAddress, amountOut, operation.receivers, operation.receiversPercentages);
    }

    function _swap(PrestoOperation memory operation) private {

        (address ethereumAddress,,) = IAMM(operation.ammPlugin).data();

        if(operation.exitInETH) {
            operation.swapPath[operation.swapPath.length - 1] = ethereumAddress;
        }

        address outputToken = operation.swapPath[operation.swapPath.length - 1];

        SwapData memory swapData = SwapData(
            operation.enterInETH,
            operation.exitInETH,
            operation.liquidityPoolAddresses,
            operation.swapPath,
            operation.enterInETH ? ethereumAddress : operation.inputTokenAddress,
            operation.inputTokenAmount,
            address(this)
        );

        if(swapData.inputToken != address(0) && !swapData.enterInETH) {
            _safeApprove(swapData.inputToken, operation.ammPlugin, swapData.amount);
        }

        uint256 amountOut;
        if(swapData.enterInETH) {
            amountOut = IAMM(operation.ammPlugin).swapLiquidity{value : operation.inputTokenAmount}(swapData);
        } else {
            amountOut = IAMM(operation.ammPlugin).swapLiquidity(swapData);
        }
        _transferTo(operation.exitInETH ? address(0) : outputToken, amountOut, operation.receivers, operation.receiversPercentages);
    }

    function _calculateRewardPercentage(uint256 totalAmount, uint256 rewardPercentage) private pure returns (uint256) {
        return (totalAmount * ((rewardPercentage * 1e18) / ONE_HUNDRED)) / 1e18;
    }

    function _transferTo(address erc20TokenAddress, uint256 totalAmount, address[] memory receivers, uint256[] memory receiversPercentages) private {
        uint256 availableAmount = totalAmount;

        (uint256 dfoFeePercentage, address dfoWallet) = feePercentageInfo();
        uint256 currentPartialAmount = dfoFeePercentage == 0 || dfoWallet == address(0) ? 0 : _calculateRewardPercentage(availableAmount, dfoFeePercentage);
        _safeTransfer(erc20TokenAddress, dfoWallet, currentPartialAmount);
        availableAmount -= currentPartialAmount;

        uint256 stillAvailableAmount = availableAmount;

        for(uint256 i = 0; i < receivers.length - 1; i++) {
            _safeTransfer(erc20TokenAddress, receivers[i], currentPartialAmount = _calculateRewardPercentage(stillAvailableAmount, receiversPercentages[i]));
            availableAmount -= currentPartialAmount;
        }

        _safeTransfer(erc20TokenAddress, receivers[receivers.length - 1], availableAmount);
    }

    function _safeApprove(address erc20TokenAddress, address to, uint256 value) internal {
        bytes memory returnData = _call(erc20TokenAddress, abi.encodeWithSelector(IERC20(erc20TokenAddress).approve.selector, to, value));
        require(returnData.length == 0 || abi.decode(returnData, (bool)), 'APPROVE_FAILED');
    }

    function _safeTransfer(address erc20TokenAddress, address to, uint256 value) private {
        if(value == 0) {
            return;
        }
        if(erc20TokenAddress == address(0)) {
            (bool result,) = to.call{value:value}("");
            require(result, "ETH transfer failed");
            return;
        }
        bytes memory returnData = _call(erc20TokenAddress, abi.encodeWithSelector(IERC20(erc20TokenAddress).transfer.selector, to, value));
        require(returnData.length == 0 || abi.decode(returnData, (bool)), 'TRANSFER_FAILED');
    }

    function _safeTransferFrom(address erc20TokenAddress, address from, address to, uint256 value) internal {
        bytes memory returnData = _call(erc20TokenAddress, abi.encodeWithSelector(IERC20(erc20TokenAddress).transferFrom.selector, from, to, value));
        require(returnData.length == 0 || abi.decode(returnData, (bool)), 'TRANSFERFROM_FAILED');
    }

    function _call(address location, bytes memory payload) private returns(bytes memory returnData) {
        assembly {
            let result := call(gas(), location, 0, add(payload, 0x20), mload(payload), 0, 0)
            let size := returndatasize()
            returnData := mload(0x40)
            mstore(returnData, size)
            let returnDataPayloadStart := add(returnData, 0x20)
            returndatacopy(returnDataPayloadStart, 0, size)
            mstore(0x40, add(returnDataPayloadStart, size))
            switch result case 0 {revert(returnDataPayloadStart, size)}
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_doubleProxy","type":"address"},{"internalType":"uint256","name":"_feePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ONE_HUNDRED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doubleProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"inputTokenAddress","type":"address"},{"internalType":"uint256","name":"inputTokenAmount","type":"uint256"},{"internalType":"address","name":"ammPlugin","type":"address"},{"internalType":"address[]","name":"liquidityPoolAddresses","type":"address[]"},{"internalType":"address[]","name":"swapPath","type":"address[]"},{"internalType":"bool","name":"enterInETH","type":"bool"},{"internalType":"bool","name":"exitInETH","type":"bool"},{"internalType":"address[]","name":"receivers","type":"address[]"},{"internalType":"uint256[]","name":"receiversPercentages","type":"uint256[]"}],"internalType":"struct PrestoOperation[]","name":"operations","type":"tuple[]"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"feePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercentageInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_doubleProxy","type":"address"}],"name":"setDoubleProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercentage","type":"uint256"}],"name":"setFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50604051611c52380380611c5283398101604081905261002f91610058565b600380546001600160a01b0319166001600160a01b039390931692909217909155600455610090565b6000806040838503121561006a578182fd5b82516001600160a01b0381168114610080578283fd5b6020939093015192949293505050565b611bb38061009f6000396000f3fe6080604052600436106100745760003560e01c8063ae06c1b71161004e578063ae06c1b7146100f0578063b1445b6d14610112578063bfaa8cca14610125578063cbd99d031461013a5761007b565b80634eb9b592146100805780637e77a2d4146100ab578063a001ecdd146100ce5761007b565b3661007b57005b600080fd5b34801561008c57600080fd5b5061009561015a565b6040516100a29190611885565b60405180910390f35b3480156100b757600080fd5b506100c0610169565b6040516100a2929190611b01565b3480156100da57600080fd5b506100e3610261565b6040516100a29190611af8565b3480156100fc57600080fd5b5061011061010b366004611798565b610267565b005b61011061012036600461159a565b610402565b34801561013157600080fd5b506100e36104a1565b34801561014657600080fd5b50610110610155366004611519565b6104ad565b6003546001600160a01b031681565b600480546003546040805163ec55688960e01b815290516000948594936001600160a01b03169263ec5568899281830192602092829003018186803b1580156101b157600080fd5b505afa1580156101c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e9919061153c565b6001600160a01b03166331c6903d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561022157600080fd5b505afa158015610235573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610259919061153c565b915091509091565b60045481565b600360009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156102b557600080fd5b505afa1580156102c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ed919061153c565b6001600160a01b0316636701586a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561032557600080fd5b505afa158015610339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035d919061153c565b6001600160a01b0316633191d332336040518263ffffffff1660e01b81526004016103889190611885565b60206040518083038186803b1580156103a057600080fd5b505afa1580156103b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d8919061177c565b6103fd5760405162461bcd60e51b81526004016103f49061194a565b60405180910390fd5b600455565b61040b8161065c565b60005b815181101561049557600082828151811061042557fe5b6020026020010151905060006001600160a01b031681604001516001600160a01b031614156104705761046b816000015182602001518360e00151846101000151610739565b61048c565b6060810151516104835761046b81610811565b61048c816108f8565b5060010161040e565b5061049e610bd7565b50565b670de0b6b3a764000081565b600360009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156104fb57600080fd5b505afa15801561050f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610533919061153c565b6001600160a01b0316636701586a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561056b57600080fd5b505afa15801561057f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a3919061153c565b6001600160a01b0316633191d332336040518263ffffffff1660e01b81526004016105ce9190611885565b60206040518083038186803b1580156105e657600080fd5b505afa1580156105fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061e919061177c565b61063a5760405162461bcd60e51b81526004016103f49061194a565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61066581610c9a565b60005b6001548110156107355760006001600160a01b03166001828154811061068a57fe5b6000918252602090912001546001600160a01b031614156106e057600281815481106106b257fe5b906000526020600020015434146106db5760405162461bcd60e51b81526004016103f4906119ef565b61072d565b61072d600182815481106106f057fe5b9060005260206000200160009054906101000a90046001600160a01b031633306002858154811061071d57fe5b9060005260206000200154610f2d565b600101610668565b5050565b82600080610745610169565b915091506000826000148061076157506001600160a01b038216155b6107745761076f8484610fc4565b610777565b60005b9050610784888383610fe5565b92839003928360005b60018851038110156107e3576107d68a8983815181106107a957fe5b60200260200101516107ce858b86815181106107c157fe5b6020026020010151610fc4565b955085610fe5565b948290039460010161078d565b50610806898860018a5103815181106107f857fe5b602002602001015187610fe5565b505050505050505050565b6040805160c08101825282516001600160a01b0390811682526020808501519083015260008284018190526001606084015260a08086015115156080850152309084015284840151935163d2283c0960e01b81529293909291169063d2283c0990610880908590600401611a1c565b600060405180830381600087803b15801561089a57600080fd5b505af11580156108ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108d691908101906117c8565b505090506108f38360000151828560e00151866101000151610739565b505050565b600081604001516001600160a01b03166373d4a13a6040518163ffffffff1660e01b815260040160606040518083038186803b15801561093757600080fd5b505afa15801561094b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096f9190611558565b505090508160c00151156109b65760808201518051829190600019810190811061099557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b608082015180516000919060001981019081106109cf57fe5b6020026020010151905060006040518060e001604052808560a00151151581526020018560c001511515815260200185606001518152602001856080015181526020018560a00151610a22578551610a24565b845b6001600160a01b0316815260200185602001518152602001306001600160a01b0316815250905060006001600160a01b031681608001516001600160a01b031614158015610a7157508051155b15610a8d57610a8d816080015185604001518360a001516110e3565b805160009015610b255784604001516001600160a01b0316635ff94cbf8660200151846040518363ffffffff1660e01b8152600401610acc9190611a6d565b6020604051808303818588803b158015610ae557600080fd5b505af1158015610af9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610b1e91906117b0565b9050610baa565b84604001516001600160a01b0316635ff94cbf836040518263ffffffff1660e01b8152600401610b559190611a6d565b602060405180830381600087803b158015610b6f57600080fd5b505af1158015610b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba791906117b0565b90505b610bd08560c00151610bbc5783610bbf565b60005b828760e00151886101000151610739565b5050505050565b60005b600154811015610c7f57610c4260018281548110610bf457fe5b9060005260206000200160009054906101000a90046001600160a01b031633610c3d60018581548110610c2357fe5b6000918252602090912001546001600160a01b0316611141565b610fe5565b60008060018381548110610c5257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812055600101610bda565b50610c8c60016000611345565b610c9860026000611345565b565b60005b8151811015610735576000828281518110610cb457fe5b6020026020010151905060006001600160a01b031681604001516001600160a01b031614158015610ce85750606081015151155b15610eeb576000816040015190506000816001600160a01b03166373d4a13a6040518163ffffffff1660e01b815260040160606040518083038186803b158015610d3157600080fd5b505afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611558565b50508351602085015160405163684943b160e01b815292935060009283926001600160a01b0387169263684943b192610da69291906004016118bd565b60006040518083038186803b158015610dbe57600080fd5b505afa158015610dd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dfa919081019061171b565b915091506000805b8251811015610eb657846001600160a01b0316838281518110610e2157fe5b60200260200101516001600160a01b03161415610e3d57600191505b610eae8760a001518015610e755750856001600160a01b0316848381518110610e6257fe5b60200260200101516001600160a01b0316145b610e9257838281518110610e8557fe5b6020026020010151610e95565b60005b858381518110610ea157fe5b60200260200101516111dc565b600101610e02565b508560a001511580610ec55750805b610ee15760405162461bcd60e51b81526004016103f4906118d6565b5050505050610f24565b6040810151610f24906001600160a01b031615801590610f0c57508160a001515b610f17578151610f1a565b60005b82602001516111dc565b50600101610c9d565b6000610f87856323b872dd60e01b868686604051602401610f5093929190611899565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611303565b9050805160001480610fa8575080806020019051810190610fa8919061177c565b610bd05760405162461bcd60e51b81526004016103f49061191d565b6000670de0b6b3a76400008083810204840281610fdd57fe5b049392505050565b80610fef576108f3565b6001600160a01b03831661107f576000826001600160a01b03168260405161101690611882565b60006040518083038185875af1925050503d8060008114611053576040519150601f19603f3d011682016040523d82523d6000602084013e611058565b606091505b50509050806110795760405162461bcd60e51b81526004016103f49061199a565b506108f3565b60006110a08463a9059cbb60e01b8585604051602401610f509291906118bd565b90508051600014806110c15750808060200190518101906110c1919061177c565b6110dd5760405162461bcd60e51b81526004016103f490611971565b50505050565b60006111048463095ea7b360e01b8585604051602401610f509291906118bd565b9050805160001480611125575080806020019051810190611125919061177c565b6110dd5760405162461bcd60e51b81526004016103f4906119c7565b60006001600160a01b0382166111585750476111d7565b6040516370a0823160e01b81526001600160a01b038316906370a0823190611184903090600401611885565b60206040518083038186803b15801561119c57600080fd5b505afa1580156111b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d491906117b0565b90505b919050565b806111e657610735565b6001600160a01b03821660009081526020819052604090205460015415806112385750826001600160a01b03166001828154811061122057fe5b6000918252602090912001546001600160a01b031614155b156112cb5750600180546001600160a01b038416600081815260208190526040812083905582840184557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6830180546001600160a01b03191690921790915560028054938401815581527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace909201919091555b81600282815481106112d957fe5b906000526020600020015401600282815481106112f257fe5b600091825260209091200155505050565b60606000808351602085016000875af13d604051925080835260208301816000823e8082016040528280156113375761133b565b8282fd5b5050505092915050565b508054600082559060005260206000209081019061049e91905b80821115611373576000815560010161135f565b5090565b80356111d781611b5a565b600082601f830112611392578081fd5b813560206113a76113a283611b3c565b611b18565b82815281810190858301838502870184018810156113c3578586fd5b855b858110156113ea5781356113d881611b5a565b845292840192908401906001016113c5565b5090979650505050505050565b600082601f830112611407578081fd5b815160206114176113a283611b3c565b8281528181019085830183850287018401881015611433578586fd5b855b858110156113ea57815161144881611b5a565b84529284019290840190600101611435565b600082601f83011261146a578081fd5b8135602061147a6113a283611b3c565b8281528181019085830183850287018401881015611496578586fd5b855b858110156113ea57813584529284019290840190600101611498565b600082601f8301126114c4578081fd5b815160206114d46113a283611b3c565b82815281810190858301838502870184018810156114f0578586fd5b855b858110156113ea578151845292840192908401906001016114f2565b80356111d781611b6f565b60006020828403121561152a578081fd5b813561153581611b5a565b9392505050565b60006020828403121561154d578081fd5b815161153581611b5a565b60008060006060848603121561156c578182fd5b835161157781611b5a565b60208501516040860151919450925061158f81611b6f565b809150509250925092565b600060208083850312156115ac578182fd5b823567ffffffffffffffff808211156115c3578384fd5b818501915085601f8301126115d6578384fd5b81356115e46113a282611b3c565b81815284810190848601875b8481101561170c578135870161012080601f19838f03011215611611578a8bfd5b61161a81611b18565b6116258b8401611377565b815260408301358b82015261163c60608401611377565b6040820152608083013589811115611652578c8dfd5b6116608f8d83870101611382565b60608301525060a083013589811115611677578c8dfd5b6116858f8d83870101611382565b60808301525061169760c0840161150e565b60a08201526116a860e0840161150e565b60c0820152610100830135898111156116bf578c8dfd5b6116cd8f8d83870101611382565b60e0830152509082013590888211156116e4578b8cfd5b6116f28e8c8486010161145a565b6101008201528652505092870192908701906001016115f0565b50909998505050505050505050565b6000806040838503121561172d578081fd5b825167ffffffffffffffff80821115611744578283fd5b611750868387016114b4565b93506020850151915080821115611765578283fd5b50611772858286016113f7565b9150509250929050565b60006020828403121561178d578081fd5b815161153581611b6f565b6000602082840312156117a9578081fd5b5035919050565b6000602082840312156117c1578081fd5b5051919050565b6000806000606084860312156117dc578081fd5b83519250602084015167ffffffffffffffff808211156117fa578283fd5b611806878388016114b4565b9350604086015191508082111561181b578283fd5b50611828868287016113f7565b9150509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156118775781516001600160a01b031687529582019590820190600101611852565b509495945050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b60208082526027908201527f57726f6e6720757365206f6620656e746572496e45544820696e206164644c696040820152667175696469747960c81b606082015260800190565b6020808252601390820152721514905394d19154919493d357d19052531151606a1b604082015260600190565b6020808252600d908201526c2ab730baba3437b934bd32b21760991b604082015260600190565b6020808252600f908201526e1514905394d1915497d19052531151608a1b604082015260600190565b602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b6020808252600e908201526d1054141493d59157d1905253115160921b604082015260600190565b602080825260139082015272496e636f7272656374204554482076616c756560681b604082015260600190565b81516001600160a01b0390811682526020808401519083015260408084015182169083015260608084015115159083015260808084015115159083015260a092830151169181019190915260c00190565b600060208252825115156020830152602083015115156040830152604083015160e06060840152611aa261010084018261183f565b90506060840151601f19848303016080850152611abf828261183f565b91505060018060a01b0360808501511660a084015260a084015160c084015260c0840151611af060e0850182611832565b509392505050565b90815260200190565b9182526001600160a01b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611b3457fe5b604052919050565b600067ffffffffffffffff821115611b5057fe5b5060209081020190565b6001600160a01b038116811461049e57600080fd5b801515811461049e57600080fdfea2646970667358221220e5392624e932a9040d4bc11d67d0fb1d1a3d8807268a7ef95b02e651a55ff46f64736f6c63430007060033000000000000000000000000f869538e3904778a0cb1ff620c8e83c7df36b9460000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106100745760003560e01c8063ae06c1b71161004e578063ae06c1b7146100f0578063b1445b6d14610112578063bfaa8cca14610125578063cbd99d031461013a5761007b565b80634eb9b592146100805780637e77a2d4146100ab578063a001ecdd146100ce5761007b565b3661007b57005b600080fd5b34801561008c57600080fd5b5061009561015a565b6040516100a29190611885565b60405180910390f35b3480156100b757600080fd5b506100c0610169565b6040516100a2929190611b01565b3480156100da57600080fd5b506100e3610261565b6040516100a29190611af8565b3480156100fc57600080fd5b5061011061010b366004611798565b610267565b005b61011061012036600461159a565b610402565b34801561013157600080fd5b506100e36104a1565b34801561014657600080fd5b50610110610155366004611519565b6104ad565b6003546001600160a01b031681565b600480546003546040805163ec55688960e01b815290516000948594936001600160a01b03169263ec5568899281830192602092829003018186803b1580156101b157600080fd5b505afa1580156101c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e9919061153c565b6001600160a01b03166331c6903d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561022157600080fd5b505afa158015610235573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610259919061153c565b915091509091565b60045481565b600360009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156102b557600080fd5b505afa1580156102c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ed919061153c565b6001600160a01b0316636701586a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561032557600080fd5b505afa158015610339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035d919061153c565b6001600160a01b0316633191d332336040518263ffffffff1660e01b81526004016103889190611885565b60206040518083038186803b1580156103a057600080fd5b505afa1580156103b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d8919061177c565b6103fd5760405162461bcd60e51b81526004016103f49061194a565b60405180910390fd5b600455565b61040b8161065c565b60005b815181101561049557600082828151811061042557fe5b6020026020010151905060006001600160a01b031681604001516001600160a01b031614156104705761046b816000015182602001518360e00151846101000151610739565b61048c565b6060810151516104835761046b81610811565b61048c816108f8565b5060010161040e565b5061049e610bd7565b50565b670de0b6b3a764000081565b600360009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156104fb57600080fd5b505afa15801561050f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610533919061153c565b6001600160a01b0316636701586a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561056b57600080fd5b505afa15801561057f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a3919061153c565b6001600160a01b0316633191d332336040518263ffffffff1660e01b81526004016105ce9190611885565b60206040518083038186803b1580156105e657600080fd5b505afa1580156105fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061e919061177c565b61063a5760405162461bcd60e51b81526004016103f49061194a565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61066581610c9a565b60005b6001548110156107355760006001600160a01b03166001828154811061068a57fe5b6000918252602090912001546001600160a01b031614156106e057600281815481106106b257fe5b906000526020600020015434146106db5760405162461bcd60e51b81526004016103f4906119ef565b61072d565b61072d600182815481106106f057fe5b9060005260206000200160009054906101000a90046001600160a01b031633306002858154811061071d57fe5b9060005260206000200154610f2d565b600101610668565b5050565b82600080610745610169565b915091506000826000148061076157506001600160a01b038216155b6107745761076f8484610fc4565b610777565b60005b9050610784888383610fe5565b92839003928360005b60018851038110156107e3576107d68a8983815181106107a957fe5b60200260200101516107ce858b86815181106107c157fe5b6020026020010151610fc4565b955085610fe5565b948290039460010161078d565b50610806898860018a5103815181106107f857fe5b602002602001015187610fe5565b505050505050505050565b6040805160c08101825282516001600160a01b0390811682526020808501519083015260008284018190526001606084015260a08086015115156080850152309084015284840151935163d2283c0960e01b81529293909291169063d2283c0990610880908590600401611a1c565b600060405180830381600087803b15801561089a57600080fd5b505af11580156108ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108d691908101906117c8565b505090506108f38360000151828560e00151866101000151610739565b505050565b600081604001516001600160a01b03166373d4a13a6040518163ffffffff1660e01b815260040160606040518083038186803b15801561093757600080fd5b505afa15801561094b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096f9190611558565b505090508160c00151156109b65760808201518051829190600019810190811061099557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b608082015180516000919060001981019081106109cf57fe5b6020026020010151905060006040518060e001604052808560a00151151581526020018560c001511515815260200185606001518152602001856080015181526020018560a00151610a22578551610a24565b845b6001600160a01b0316815260200185602001518152602001306001600160a01b0316815250905060006001600160a01b031681608001516001600160a01b031614158015610a7157508051155b15610a8d57610a8d816080015185604001518360a001516110e3565b805160009015610b255784604001516001600160a01b0316635ff94cbf8660200151846040518363ffffffff1660e01b8152600401610acc9190611a6d565b6020604051808303818588803b158015610ae557600080fd5b505af1158015610af9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610b1e91906117b0565b9050610baa565b84604001516001600160a01b0316635ff94cbf836040518263ffffffff1660e01b8152600401610b559190611a6d565b602060405180830381600087803b158015610b6f57600080fd5b505af1158015610b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba791906117b0565b90505b610bd08560c00151610bbc5783610bbf565b60005b828760e00151886101000151610739565b5050505050565b60005b600154811015610c7f57610c4260018281548110610bf457fe5b9060005260206000200160009054906101000a90046001600160a01b031633610c3d60018581548110610c2357fe5b6000918252602090912001546001600160a01b0316611141565b610fe5565b60008060018381548110610c5257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812055600101610bda565b50610c8c60016000611345565b610c9860026000611345565b565b60005b8151811015610735576000828281518110610cb457fe5b6020026020010151905060006001600160a01b031681604001516001600160a01b031614158015610ce85750606081015151155b15610eeb576000816040015190506000816001600160a01b03166373d4a13a6040518163ffffffff1660e01b815260040160606040518083038186803b158015610d3157600080fd5b505afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611558565b50508351602085015160405163684943b160e01b815292935060009283926001600160a01b0387169263684943b192610da69291906004016118bd565b60006040518083038186803b158015610dbe57600080fd5b505afa158015610dd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dfa919081019061171b565b915091506000805b8251811015610eb657846001600160a01b0316838281518110610e2157fe5b60200260200101516001600160a01b03161415610e3d57600191505b610eae8760a001518015610e755750856001600160a01b0316848381518110610e6257fe5b60200260200101516001600160a01b0316145b610e9257838281518110610e8557fe5b6020026020010151610e95565b60005b858381518110610ea157fe5b60200260200101516111dc565b600101610e02565b508560a001511580610ec55750805b610ee15760405162461bcd60e51b81526004016103f4906118d6565b5050505050610f24565b6040810151610f24906001600160a01b031615801590610f0c57508160a001515b610f17578151610f1a565b60005b82602001516111dc565b50600101610c9d565b6000610f87856323b872dd60e01b868686604051602401610f5093929190611899565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611303565b9050805160001480610fa8575080806020019051810190610fa8919061177c565b610bd05760405162461bcd60e51b81526004016103f49061191d565b6000670de0b6b3a76400008083810204840281610fdd57fe5b049392505050565b80610fef576108f3565b6001600160a01b03831661107f576000826001600160a01b03168260405161101690611882565b60006040518083038185875af1925050503d8060008114611053576040519150601f19603f3d011682016040523d82523d6000602084013e611058565b606091505b50509050806110795760405162461bcd60e51b81526004016103f49061199a565b506108f3565b60006110a08463a9059cbb60e01b8585604051602401610f509291906118bd565b90508051600014806110c15750808060200190518101906110c1919061177c565b6110dd5760405162461bcd60e51b81526004016103f490611971565b50505050565b60006111048463095ea7b360e01b8585604051602401610f509291906118bd565b9050805160001480611125575080806020019051810190611125919061177c565b6110dd5760405162461bcd60e51b81526004016103f4906119c7565b60006001600160a01b0382166111585750476111d7565b6040516370a0823160e01b81526001600160a01b038316906370a0823190611184903090600401611885565b60206040518083038186803b15801561119c57600080fd5b505afa1580156111b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d491906117b0565b90505b919050565b806111e657610735565b6001600160a01b03821660009081526020819052604090205460015415806112385750826001600160a01b03166001828154811061122057fe5b6000918252602090912001546001600160a01b031614155b156112cb5750600180546001600160a01b038416600081815260208190526040812083905582840184557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6830180546001600160a01b03191690921790915560028054938401815581527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace909201919091555b81600282815481106112d957fe5b906000526020600020015401600282815481106112f257fe5b600091825260209091200155505050565b60606000808351602085016000875af13d604051925080835260208301816000823e8082016040528280156113375761133b565b8282fd5b5050505092915050565b508054600082559060005260206000209081019061049e91905b80821115611373576000815560010161135f565b5090565b80356111d781611b5a565b600082601f830112611392578081fd5b813560206113a76113a283611b3c565b611b18565b82815281810190858301838502870184018810156113c3578586fd5b855b858110156113ea5781356113d881611b5a565b845292840192908401906001016113c5565b5090979650505050505050565b600082601f830112611407578081fd5b815160206114176113a283611b3c565b8281528181019085830183850287018401881015611433578586fd5b855b858110156113ea57815161144881611b5a565b84529284019290840190600101611435565b600082601f83011261146a578081fd5b8135602061147a6113a283611b3c565b8281528181019085830183850287018401881015611496578586fd5b855b858110156113ea57813584529284019290840190600101611498565b600082601f8301126114c4578081fd5b815160206114d46113a283611b3c565b82815281810190858301838502870184018810156114f0578586fd5b855b858110156113ea578151845292840192908401906001016114f2565b80356111d781611b6f565b60006020828403121561152a578081fd5b813561153581611b5a565b9392505050565b60006020828403121561154d578081fd5b815161153581611b5a565b60008060006060848603121561156c578182fd5b835161157781611b5a565b60208501516040860151919450925061158f81611b6f565b809150509250925092565b600060208083850312156115ac578182fd5b823567ffffffffffffffff808211156115c3578384fd5b818501915085601f8301126115d6578384fd5b81356115e46113a282611b3c565b81815284810190848601875b8481101561170c578135870161012080601f19838f03011215611611578a8bfd5b61161a81611b18565b6116258b8401611377565b815260408301358b82015261163c60608401611377565b6040820152608083013589811115611652578c8dfd5b6116608f8d83870101611382565b60608301525060a083013589811115611677578c8dfd5b6116858f8d83870101611382565b60808301525061169760c0840161150e565b60a08201526116a860e0840161150e565b60c0820152610100830135898111156116bf578c8dfd5b6116cd8f8d83870101611382565b60e0830152509082013590888211156116e4578b8cfd5b6116f28e8c8486010161145a565b6101008201528652505092870192908701906001016115f0565b50909998505050505050505050565b6000806040838503121561172d578081fd5b825167ffffffffffffffff80821115611744578283fd5b611750868387016114b4565b93506020850151915080821115611765578283fd5b50611772858286016113f7565b9150509250929050565b60006020828403121561178d578081fd5b815161153581611b6f565b6000602082840312156117a9578081fd5b5035919050565b6000602082840312156117c1578081fd5b5051919050565b6000806000606084860312156117dc578081fd5b83519250602084015167ffffffffffffffff808211156117fa578283fd5b611806878388016114b4565b9350604086015191508082111561181b578283fd5b50611828868287016113f7565b9150509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156118775781516001600160a01b031687529582019590820190600101611852565b509495945050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b60208082526027908201527f57726f6e6720757365206f6620656e746572496e45544820696e206164644c696040820152667175696469747960c81b606082015260800190565b6020808252601390820152721514905394d19154919493d357d19052531151606a1b604082015260600190565b6020808252600d908201526c2ab730baba3437b934bd32b21760991b604082015260600190565b6020808252600f908201526e1514905394d1915497d19052531151608a1b604082015260600190565b602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b6020808252600e908201526d1054141493d59157d1905253115160921b604082015260600190565b602080825260139082015272496e636f7272656374204554482076616c756560681b604082015260600190565b81516001600160a01b0390811682526020808401519083015260408084015182169083015260608084015115159083015260808084015115159083015260a092830151169181019190915260c00190565b600060208252825115156020830152602083015115156040830152604083015160e06060840152611aa261010084018261183f565b90506060840151601f19848303016080850152611abf828261183f565b91505060018060a01b0360808501511660a084015260a084015160c084015260c0840151611af060e0850182611832565b509392505050565b90815260200190565b9182526001600160a01b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611b3457fe5b604052919050565b600067ffffffffffffffff821115611b5057fe5b5060209081020190565b6001600160a01b038116811461049e57600080fd5b801515811461049e57600080fdfea2646970667358221220e5392624e932a9040d4bc11d67d0fb1d1a3d8807268a7ef95b02e651a55ff46f64736f6c63430007060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000f869538e3904778a0cb1ff620c8e83c7df36b9460000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _doubleProxy (address): 0xF869538e3904778A0cb1FF620C8E83c7df36B946
Arg [1] : _feePercentage (uint256): 0

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f869538e3904778a0cb1ff620c8e83c7df36b946
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

5813:9830:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6045:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6560:186;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;6087:37::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6877:123::-;;;;;;;;;;-1:-1:-1;6877:123:0;;;;;:::i;:::-;;:::i;:::-;;7008:661;;;;;;:::i;:::-;;:::i;5849:51::-;;;;;;;;;;;;;:::i;6754:115::-;;;;;;;;;;-1:-1:-1;6754:115:0;;;;;:::i;:::-;;:::i;6045:35::-;;;-1:-1:-1;;;;;6045:35:0;;:::o;6560:186::-;6656:13;;;6694:11;;6681:33;;;-1:-1:-1;;;6681:33:0;;;;6619:7;;;;6656:13;-1:-1:-1;;;;;6694:11:0;;6681:31;;:33;;;;;;;;;;;6694:11;6681:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6671:64:0;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6648:90;;;;6560:186;;:::o;6087:37::-;;;;:::o;6877:123::-;6416:11;;;;;;;;;-1:-1:-1;;;;;6416:11:0;-1:-1:-1;;;;;6403:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6393:80:0;;:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6366:136:0;;6503:10;6366:148;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6358:174;;;;-1:-1:-1;;;6358:174:0;;;;;;;:::i;:::-;;;;;;;;;6962:13:::1;:30:::0;6877:123::o;7008:661::-;7097:25;7111:10;7097:13;:25::i;:::-;7137:9;7133:502;7157:10;:17;7153:1;:21;7133:502;;;7196:32;7231:10;7242:1;7231:13;;;;;;;;;;;;;;7196:48;;7293:1;-1:-1:-1;;;;;7262:33:0;:9;:19;;;-1:-1:-1;;;;;7262:33:0;;7259:365;;;7316:121;7328:9;:27;;;7357:9;:26;;;7385:9;:19;;;7406:9;:30;;;7316:11;:121::i;:::-;7259:365;;;7462:32;;;;:39;7459:165;;7527:24;7541:9;7527:13;:24::i;7459:165::-;7592:16;7598:9;7592:5;:16::i;:::-;-1:-1:-1;7176:3:0;;7133:502;;;;7645:16;:14;:16::i;:::-;7008:661;:::o;5849:51::-;5896:4;5849:51;:::o;6754:115::-;6416:11;;;;;;;;;-1:-1:-1;;;;;6416:11:0;-1:-1:-1;;;;;6403:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6393:80:0;;:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6366:136:0;;6503:10;6366:148;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6358:174;;;;-1:-1:-1;;;6358:174:0;;;;;;;:::i;:::-;6835:11:::1;:26:::0;;-1:-1:-1;;;;;;6835:26:0::1;-1:-1:-1::0;;;;;6835:26:0;;;::::1;::::0;;;::::1;::::0;;6754:115::o;7677:463::-;7756:26;7771:10;7756:14;:26::i;:::-;7797:9;7793:340;7816:17;:24;7812:28;;7793:340;;;7897:1;-1:-1:-1;;;;;7865:34:0;:17;7883:1;7865:20;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7865:20:0;:34;7862:260;;;7941:13;7955:1;7941:16;;;;;;;;;;;;;;;;7928:9;:29;7920:61;;;;-1:-1:-1;;;7920:61:0;;;;;;;:::i;:::-;7862:260;;;8022:84;8040:17;8058:1;8040:20;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8040:20:0;8062:10;8082:4;8089:13;8103:1;8089:16;;;;;;;;;;;;;;;;8022:17;:84::i;:::-;7842:3;;7793:340;;;;7677:463;:::o;12731:1005::-;12912:11;12886:23;;12984:19;:17;:19::i;:::-;12936:67;;;;13014:28;13045:16;13065:1;13045:21;:48;;;-1:-1:-1;;;;;;13070:23:0;;;13045:48;:116;;13100:61;13127:15;13144:16;13100:26;:61::i;:::-;13045:116;;;13096:1;13045:116;13014:147;;13172:65;13186:17;13205:9;13216:20;13172:13;:65::i;:::-;13248:39;;;;;;13300:28;13359:275;13401:1;13382:9;:16;:20;13378:1;:24;13359:275;;;13424:144;13438:17;13457:9;13467:1;13457:12;;;;;;;;;;;;;;13494:73;13521:20;13543;13564:1;13543:23;;;;;;;;;;;;;;13494:26;:73::i;:::-;13471:96;;;13424:13;:144::i;:::-;13583:39;;;;;13404:3;;13359:275;;;;13646:82;13660:17;13679:9;13708:1;13689:9;:16;:20;13679:31;;;;;;;;;;;;;;13712:15;13646:13;:82::i;:::-;12731:1005;;;;;;;;;:::o;10647:554::-;10768:218;;;;;;;;10800:27;;-1:-1:-1;;;;;10768:218:0;;;;;;10842:26;;;;10768:218;;;;10723:42;10768:218;;;;;;10908:4;10768:218;;;;10927:20;;;;;10768:218;;;;;;10970:4;10768:218;;;;11026:19;;;;11021:57;;-1:-1:-1;;;11021:57:0;;10768:218;;10723:42;;11021:38;;;;;:57;;10768:218;;11021:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11021:57:0;;;;;;;;;;;;:::i;:::-;10997:81;;;;11089:104;11101:9;:27;;;11130:9;11141;:19;;;11162:9;:30;;;11089:11;:104::i;:::-;10647:554;;;:::o;11209:1302::-;11280:23;11314:9;:19;;;-1:-1:-1;;;;;11309:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11279:62;;;;11357:9;:19;;;11354:118;;;11393:18;;;;11412:25;;11445:15;;11393:18;-1:-1:-1;;11412:29:0;;;11393:49;;;;;;;;;;;:67;-1:-1:-1;;;;;11393:67:0;;;-1:-1:-1;;;;;11393:67:0;;;;;11354:118;11506:18;;;;11525:25;;11484:19;;11506:18;-1:-1:-1;;11525:29:0;;;11506:49;;;;;;;;;;;;11484:71;;11568:24;11595:320;;;;;;;;11618:9;:20;;;11595:320;;;;;;11653:9;:19;;;11595:320;;;;;;11687:9;:32;;;11595:320;;;;11734:9;:18;;;11595:320;;;;11767:9;:20;;;:68;;11808:27;;11767:68;;;11790:15;11767:68;-1:-1:-1;;;;;11595:320:0;;;;;11850:9;:26;;;11595:320;;;;11899:4;-1:-1:-1;;;;;11595:320:0;;;;11568:347;;11962:1;-1:-1:-1;;;;;11931:33:0;:8;:19;;;-1:-1:-1;;;;;11931:33:0;;;:57;;;;-1:-1:-1;11969:19:0;;11968:20;11931:57;11928:160;;;12005:71;12018:8;:19;;;12039:9;:19;;;12060:8;:15;;;12005:12;:71::i;:::-;12131:19;;12100:17;;12128:242;;;12184:9;:19;;;-1:-1:-1;;;;;12179:39:0;;12227:9;:26;;;12255:8;12179:85;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12167:97;;12128:242;;;12314:9;:19;;;-1:-1:-1;;;;;12309:39:0;;12349:8;12309:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12297:61;;12128:242;12380:123;12392:9;:19;;;:46;;12427:11;12392:46;;;12422:1;12392:46;12440:9;12451;:19;;;12472:9;:30;;;12380:11;:123::i;:::-;11209:1302;;;;;:::o;10057:335::-;10106:9;10102:217;10125:17;:24;10121:28;;10102:217;;;10171:81;10185:17;10203:1;10185:20;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10185:20:0;10207:10;10219:32;10230:17;10248:1;10230:20;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10230:20:0;10219:10;:32::i;:::-;10171:13;:81::i;:::-;10274:11;:33;10286:17;10304:1;10286:20;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10286:20:0;10274:33;;;;;;;;;;;;10267:40;10286:20;10151:3;10102:217;;;-1:-1:-1;10329:24:0;10336:17;;10329:24;:::i;:::-;10364:20;10371:13;;10364:20;:::i;:::-;10057:335::o;8148:1300::-;8232:9;8228:1213;8251:10;:17;8247:1;:21;8228:1213;;;8290:32;8325:10;8336:1;8325:13;;;;;;;;;;;;;;8290:48;;8387:1;-1:-1:-1;;;;;8356:33:0;:9;:19;;;-1:-1:-1;;;;;8356:33:0;;;:81;;;;-1:-1:-1;8393:32:0;;;;:39;:44;8356:81;8353:1077;;;8458:8;8474:9;:19;;;8458:36;;8514:23;8544:3;-1:-1:-1;;;;;8544:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;8663:27:0;;8692:26;;;;8637:82;;-1:-1:-1;;;8637:82:0;;8513:42;;-1:-1:-1;8575:24:0;;;;-1:-1:-1;;;;;8637:25:0;;;;;:82;;8663:27;8692:26;8637:82;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8637:82:0;;;;;;;;;;;;:::i;:::-;8574:145;;;;8738:11;8780:9;8776:349;8799:15;:22;8795:1;:26;8776:349;;;8876:15;-1:-1:-1;;;;;8854:37:0;:15;8870:1;8854:18;;;;;;;;;;;;;;-1:-1:-1;;;;;8854:37:0;;8851:106;;;8929:4;8920:13;;8851:106;8979:126;8997:9;:20;;;:61;;;;;9043:15;-1:-1:-1;;;;;9021:37:0;:15;9037:1;9021:18;;;;;;;;;;;;;;-1:-1:-1;;;;;9021:37:0;;8997:61;:95;;9074:15;9090:1;9074:18;;;;;;;;;;;;;;8997:95;;;9069:1;8997:95;9094:7;9102:1;9094:10;;;;;;;;;;;;;;8979:17;:126::i;:::-;8823:3;;8776:349;;;;9152:9;:20;;;9151:21;:31;;;;9176:6;9151:31;9143:83;;;;-1:-1:-1;;;9143:83:0;;;;;;;:::i;:::-;8353:1077;;;;;;;;9285:19;;;;9267:147;;-1:-1:-1;;;;;9285:33:0;;;;;:57;;;9322:9;:20;;;9285:57;:100;;9358:27;;9285:100;;;9353:1;9285:100;9387:9;:26;;;9267:17;:147::i;:::-;-1:-1:-1;8270:3:0;;8228:1213;;14662:362;14777:23;14803:114;14809:17;14851:47;;;14900:4;14906:2;14910:5;14828:88;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;14828:88:0;;;;;;;;;;;;;;-1:-1:-1;;;;;14828:88:0;-1:-1:-1;;;;;;14828:88:0;;;;;;;;;;14803:5;:114::i;:::-;14777:140;;14936:10;:17;14957:1;14936:22;:56;;;;14973:10;14962:30;;;;;;;;;;;;:::i;:::-;14928:88;;;;-1:-1:-1;;;14928:88:0;;;;;;;:::i;12519:204::-;12624:7;12711:4;;12668:23;;;12667:39;12652:11;:55;12651:64;;;;;;;12519:204;-1:-1:-1;;;12519:204:0:o;14079:575::-;14178:10;14175:48;;14205:7;;14175:48;-1:-1:-1;;;;;14236:31:0;;14233:178;;14285:11;14301:2;-1:-1:-1;;;;;14301:7:0;14315:5;14301:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14284:41;;;14348:6;14340:38;;;;-1:-1:-1;;;14340:38:0;;;;;;;:::i;:::-;14393:7;;;14233:178;14421:23;14447:104;14453:17;14495:43;;;14540:2;14544:5;14472:78;;;;;;;;;:::i;14447:104::-;14421:130;;14570:10;:17;14591:1;14570:22;:56;;;;14607:10;14596:30;;;;;;;;;;;;:::i;:::-;14562:84;;;;-1:-1:-1;;;14562:84:0;;;;;;;:::i;:::-;14079:575;;;;:::o;13744:327::-;13840:23;13866:103;13872:17;13914:42;;;13958:2;13962:5;13891:77;;;;;;;;;:::i;13866:103::-;13840:129;;13988:10;:17;14009:1;13988:22;:56;;;;14025:10;14014:30;;;;;;;;;;;;:::i;:::-;13980:83;;;;-1:-1:-1;;;13980:83:0;;;;;;;:::i;10400:239::-;10463:7;-1:-1:-1;;;;;10486:26:0;;10483:86;;-1:-1:-1;10536:21:0;10529:28;;10483:86;10586:45;;-1:-1:-1;;;10586:45:0;;-1:-1:-1;;;;;10586:30:0;;;;;:45;;10625:4;;10586:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10579:52;;10400:239;;;;:::o;9456:593::-;9558:21;9555:59;;9596:7;;9555:59;-1:-1:-1;;;;;9645:30:0;;9626:16;9645:30;;;;;;;;;;;9691:17;:24;:29;;:81;;;9755:17;-1:-1:-1;;;;;9724:48:0;:17;9742:8;9724:27;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9724:27:0;:48;;9691:81;9688:275;;;-1:-1:-1;9834:17:0;:24;;-1:-1:-1;;;;;9789:30:0;;:11;:30;;;;;;;;;;:70;;;9874:41;;;;;;;;;;-1:-1:-1;;;;;;9874:41:0;;;;;;;9930:13;:21;;;;;;;;;;;;;;;;;9688:275;10025:16;9999:13;10013:8;9999:23;;;;;;;;;;;;;;;;:42;9973:13;9987:8;9973:23;;;;;;;;;;;;;;;;;:68;-1:-1:-1;9456:593:0;;:::o;15032:608::-;15103:23;15241:1;15238;15228:7;15222:14;15215:4;15206:7;15202:18;15199:1;15189:8;15182:5;15177:66;15269:16;15319:4;15313:11;15299:25;;15357:4;15345:10;15338:24;15422:4;15410:10;15406:21;15483:4;15480:1;15456:22;15441:47;15515:33;;;15509:4;15502:47;15570:6;15577:45;;;;15563:59;;15577:45;15616:4;15592:22;15585:36;15563:59;;;;;15148:485;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:138:1:-;84:20;;113:33;84:20;113:33;:::i;157:782::-;;270:3;263:4;255:6;251:17;247:27;237:2;;292:5;285;278:20;237:2;332:6;319:20;358:4;382:65;397:49;443:2;397:49;:::i;:::-;382:65;:::i;:::-;481:15;;;512:12;;;;544:15;;;590:11;;;578:24;;574:33;;571:42;-1:-1:-1;568:2:1;;;630:5;623;616:20;568:2;656:5;670:240;684:2;681:1;678:9;670:240;;;755:3;742:17;772:33;799:5;772:33;:::i;:::-;818:18;;856:12;;;;888;;;;702:1;695:9;670:240;;;-1:-1:-1;928:5:1;;227:712;-1:-1:-1;;;;;;;227:712:1:o;944:779::-;;1068:3;1061:4;1053:6;1049:17;1045:27;1035:2;;1090:5;1083;1076:20;1035:2;1123:6;1117:13;1149:4;1173:65;1188:49;1234:2;1188:49;:::i;1173:65::-;1272:15;;;1303:12;;;;1335:15;;;1381:11;;;1369:24;;1365:33;;1362:42;-1:-1:-1;1359:2:1;;;1421:5;1414;1407:20;1359:2;1447:5;1461:233;1475:2;1472:1;1469:9;1461:233;;;1539:3;1533:10;1556:33;1583:5;1556:33;:::i;:::-;1602:18;;1640:12;;;;1672;;;;1493:1;1486:9;1461:233;;1728:705;;1841:3;1834:4;1826:6;1822:17;1818:27;1808:2;;1863:5;1856;1849:20;1808:2;1903:6;1890:20;1929:4;1953:65;1968:49;2014:2;1968:49;:::i;1953:65::-;2052:15;;;2083:12;;;;2115:15;;;2161:11;;;2149:24;;2145:33;;2142:42;-1:-1:-1;2139:2:1;;;2201:5;2194;2187:20;2139:2;2227:5;2241:163;2255:2;2252:1;2249:9;2241:163;;;2312:17;;2300:30;;2350:12;;;;2382;;;;2273:1;2266:9;2241:163;;2438:702;;2562:3;2555:4;2547:6;2543:17;2539:27;2529:2;;2584:5;2577;2570:20;2529:2;2617:6;2611:13;2643:4;2667:65;2682:49;2728:2;2682:49;:::i;2667:65::-;2766:15;;;2797:12;;;;2829:15;;;2875:11;;;2863:24;;2859:33;;2856:42;-1:-1:-1;2853:2:1;;;2915:5;2908;2901:20;2853:2;2941:5;2955:156;2969:2;2966:1;2963:9;2955:156;;;3026:10;;3014:23;;3057:12;;;;3089;;;;2987:1;2980:9;2955:156;;3145:132;3212:20;;3241:30;3212:20;3241:30;:::i;3282:259::-;;3394:2;3382:9;3373:7;3369:23;3365:32;3362:2;;;3415:6;3407;3400:22;3362:2;3459:9;3446:23;3478:33;3505:5;3478:33;:::i;:::-;3530:5;3352:189;-1:-1:-1;;;3352:189:1:o;3546:263::-;;3669:2;3657:9;3648:7;3644:23;3640:32;3637:2;;;3690:6;3682;3675:22;3637:2;3727:9;3721:16;3746:33;3773:5;3746:33;:::i;3814:454::-;;;;3968:2;3956:9;3947:7;3943:23;3939:32;3936:2;;;3989:6;3981;3974:22;3936:2;4026:9;4020:16;4045:33;4072:5;4045:33;:::i;:::-;4142:2;4127:18;;4121:25;4191:2;4176:18;;4170:25;4097:5;;-1:-1:-1;4121:25:1;-1:-1:-1;4204:32:1;4170:25;4204:32;:::i;:::-;4255:7;4245:17;;;3926:342;;;;;:::o;4273:2337::-;;4419:2;4462;4450:9;4441:7;4437:23;4433:32;4430:2;;;4483:6;4475;4468:22;4430:2;4528:9;4515:23;4557:18;4598:2;4590:6;4587:14;4584:2;;;4619:6;4611;4604:22;4584:2;4662:6;4651:9;4647:22;4637:32;;4707:7;4700:4;4696:2;4692:13;4688:27;4678:2;;4734:6;4726;4719:22;4678:2;4775;4762:16;4798:65;4813:49;4859:2;4813:49;:::i;4798:65::-;4897:15;;;4928:12;;;;4960:11;;;4989:6;5004:1576;5018:2;5015:1;5012:9;5004:1576;;;5094:3;5081:17;5077:2;5073:26;5122:6;5180:2;5174;5170:7;5165:2;5156:7;5152:16;5148:30;5144:39;5141:2;;;5201:6;5193;5186:22;5141:2;5236:18;5251:2;5236:18;:::i;:::-;5281:33;5310:2;5306;5302:11;5281:33;:::i;:::-;5274:5;5267:48;5372:2;5368;5364:11;5351:25;5346:2;5339:5;5335:14;5328:49;5413:33;5442:2;5438;5434:11;5413:33;:::i;:::-;5408:2;5401:5;5397:14;5390:57;5497:3;5493:2;5489:12;5476:26;5531:2;5521:8;5518:16;5515:2;;;5552:6;5544;5537:22;5515:2;5597:71;5660:7;5655:2;5644:8;5640:2;5636:17;5632:26;5597:71;:::i;:::-;5592:2;5585:5;5581:14;5574:95;;5719:3;5715:2;5711:12;5698:26;5753:2;5743:8;5740:16;5737:2;;;5774:6;5766;5759:22;5737:2;5820:71;5883:7;5878:2;5867:8;5863:2;5859:17;5855:26;5820:71;:::i;:::-;5814:3;5807:5;5803:15;5796:96;;5929:31;5955:3;5951:2;5947:12;5929:31;:::i;:::-;5923:3;5916:5;5912:15;5905:56;5998:31;6024:3;6020:2;6016:12;5998:31;:::i;:::-;5992:3;5985:5;5981:15;5974:56;6080:3;6076:2;6072:12;6059:26;6114:2;6104:8;6101:16;6098:2;;;6135:6;6127;6120:22;6098:2;6181:71;6244:7;6239:2;6228:8;6224:2;6220:17;6216:26;6181:71;:::i;:::-;6175:3;6164:15;;6157:96;-1:-1:-1;6295:11:1;;;6282:25;;6323:16;;;6320:2;;;6357:6;6349;6342:22;6320:2;6403:71;6466:7;6461:2;6450:8;6446:2;6442:17;6438:26;6403:71;:::i;:::-;6397:3;6386:15;;6379:96;6488:18;;-1:-1:-1;;6526:12:1;;;;6558;;;;5036:1;5029:9;5004:1576;;;-1:-1:-1;6599:5:1;;4399:2211;-1:-1:-1;;;;;;;;;4399:2211:1:o;6615:656::-;;;6805:2;6793:9;6784:7;6780:23;6776:32;6773:2;;;6826:6;6818;6811:22;6773:2;6864:9;6858:16;6893:18;6934:2;6926:6;6923:14;6920:2;;;6955:6;6947;6940:22;6920:2;6983:78;7053:7;7044:6;7033:9;7029:22;6983:78;:::i;:::-;6973:88;;7107:2;7096:9;7092:18;7086:25;7070:41;;7136:2;7126:8;7123:16;7120:2;;;7157:6;7149;7142:22;7120:2;;7185:80;7257:7;7246:8;7235:9;7231:24;7185:80;:::i;:::-;7175:90;;;6763:508;;;;;:::o;7276:257::-;;7396:2;7384:9;7375:7;7371:23;7367:32;7364:2;;;7417:6;7409;7402:22;7364:2;7454:9;7448:16;7473:30;7497:5;7473:30;:::i;7538:190::-;;7650:2;7638:9;7629:7;7625:23;7621:32;7618:2;;;7671:6;7663;7656:22;7618:2;-1:-1:-1;7699:23:1;;7608:120;-1:-1:-1;7608:120:1:o;7733:194::-;;7856:2;7844:9;7835:7;7831:23;7827:32;7824:2;;;7877:6;7869;7862:22;7824:2;-1:-1:-1;7905:16:1;;7814:113;-1:-1:-1;7814:113:1:o;7932:717::-;;;;8139:2;8127:9;8118:7;8114:23;8110:32;8107:2;;;8160:6;8152;8145:22;8107:2;8194:9;8188:16;8178:26;;8248:2;8237:9;8233:18;8227:25;8271:18;8312:2;8304:6;8301:14;8298:2;;;8333:6;8325;8318:22;8298:2;8361:78;8431:7;8422:6;8411:9;8407:22;8361:78;:::i;:::-;8351:88;;8485:2;8474:9;8470:18;8464:25;8448:41;;8514:2;8504:8;8501:16;8498:2;;;8535:6;8527;8520:22;8498:2;;8563:80;8635:7;8624:8;8613:9;8609:24;8563:80;:::i;:::-;8553:90;;;8097:552;;;;;:::o;8654:106::-;-1:-1:-1;;;;;8722:31:1;8710:44;;8700:60::o;8765:469::-;;8862:5;8856:12;8889:6;8884:3;8877:19;8915:4;8944:2;8939:3;8935:12;8928:19;;8981:2;8974:5;8970:14;9002:3;9014:195;9028:6;9025:1;9022:13;9014:195;;;9093:13;;-1:-1:-1;;;;;9089:39:1;9077:52;;9149:12;;;;9184:15;;;;9125:1;9043:9;9014:195;;;-1:-1:-1;9225:3:1;;8832:402;-1:-1:-1;;;;;8832:402:1:o;9239:205::-;9439:3;9430:14::o;9449:203::-;-1:-1:-1;;;;;9613:32:1;;;;9595:51;;9583:2;9568:18;;9550:102::o;9873:375::-;-1:-1:-1;;;;;10131:15:1;;;10113:34;;10183:15;;;;10178:2;10163:18;;10156:43;10230:2;10215:18;;10208:34;;;;10063:2;10048:18;;10030:218::o;10253:274::-;-1:-1:-1;;;;;10445:32:1;;;;10427:51;;10509:2;10494:18;;10487:34;10415:2;10400:18;;10382:145::o;10532:403::-;10734:2;10716:21;;;10773:2;10753:18;;;10746:30;10812:34;10807:2;10792:18;;10785:62;-1:-1:-1;;;10878:2:1;10863:18;;10856:37;10925:3;10910:19;;10706:229::o;10940:343::-;11142:2;11124:21;;;11181:2;11161:18;;;11154:30;-1:-1:-1;;;11215:2:1;11200:18;;11193:49;11274:2;11259:18;;11114:169::o;11288:337::-;11490:2;11472:21;;;11529:2;11509:18;;;11502:30;-1:-1:-1;;;11563:2:1;11548:18;;11541:43;11616:2;11601:18;;11462:163::o;11630:339::-;11832:2;11814:21;;;11871:2;11851:18;;;11844:30;-1:-1:-1;;;11905:2:1;11890:18;;11883:45;11960:2;11945:18;;11804:165::o;11974:343::-;12176:2;12158:21;;;12215:2;12195:18;;;12188:30;-1:-1:-1;;;12249:2:1;12234:18;;12227:49;12308:2;12293:18;;12148:169::o;12322:338::-;12524:2;12506:21;;;12563:2;12543:18;;;12536:30;-1:-1:-1;;;12597:2:1;12582:18;;12575:44;12651:2;12636:18;;12496:164::o;12665:343::-;12867:2;12849:21;;;12906:2;12886:18;;;12879:30;-1:-1:-1;;;12940:2:1;12925:18;;12918:49;12999:2;12984:18;;12839:169::o;13013:665::-;13288:13;;-1:-1:-1;;;;;13284:22:1;;;13266:41;;13363:4;13351:17;;;13345:24;13323:20;;;13316:54;13430:4;13418:17;;;13412:24;13408:33;;13386:20;;;13379:63;13512:4;13500:17;;;13494:24;13487:32;13480:40;13458:20;;;13451:70;13591:4;13579:17;;;13573:24;13566:32;13559:40;13537:20;;;13530:70;13246:3;13648:17;;;13642:24;13638:33;13616:20;;;13609:63;;;;13215:3;13200:19;;13182:496::o;13683:1013::-;;13862:2;13851:9;13844:21;13921:6;13915:13;13908:21;13901:29;13896:2;13885:9;13881:18;13874:57;13999:2;13991:6;13987:15;13981:22;13974:30;13967:38;13962:2;13951:9;13947:18;13940:66;14053:2;14045:6;14041:15;14035:22;14093:4;14088:2;14077:9;14073:18;14066:32;14121:69;14185:3;14174:9;14170:19;14156:12;14121:69;:::i;:::-;14107:83;;14239:2;14231:6;14227:15;14221:22;14312:2;14308:7;14296:9;14288:6;14284:22;14280:36;14274:3;14263:9;14259:19;14252:65;14340:58;14391:6;14375:14;14340:58;:::i;:::-;14326:72;;;14481:1;14477;14472:3;14468:11;14464:19;14457:3;14449:6;14445:16;14439:23;14435:49;14429:3;14418:9;14414:19;14407:78;14540:3;14532:6;14528:16;14522:23;14516:3;14505:9;14501:19;14494:52;14595:3;14587:6;14583:16;14577:23;14609:58;14661:4;14650:9;14646:20;14630:14;14609:58;:::i;:::-;-1:-1:-1;14684:6:1;13834:862;-1:-1:-1;;;13834:862:1:o;14701:177::-;14847:25;;;14835:2;14820:18;;14802:76::o;14883:274::-;15057:25;;;-1:-1:-1;;;;;15118:32:1;15113:2;15098:18;;15091:60;15045:2;15030:18;;15012:145::o;15162:242::-;15232:2;15226:9;15262:17;;;15309:18;15294:34;;15330:22;;;15291:62;15288:2;;;15356:9;15288:2;15383;15376:22;15206:198;;-1:-1:-1;15206:198:1:o;15409:183::-;;15508:18;15500:6;15497:30;15494:2;;;15530:9;15494:2;-1:-1:-1;15581:4:1;15562:17;;;15558:28;;15484:108::o;15597:133::-;-1:-1:-1;;;;;15674:31:1;;15664:42;;15654:2;;15720:1;15717;15710:12;15735:120;15823:5;15816:13;15809:21;15802:5;15799:32;15789:2;;15845:1;15842;15835:12

Swarm Source

ipfs://e5392624e932a9040d4bc11d67d0fb1d1a3d8807268a7ef95b02e651a55ff46f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.