ETH Price: $2,313.20 (-0.11%)

Contract

0x0da367ace734d0B7E8B82781d7c25497De9Bf2cf
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040119085172021-02-22 18:37:511302 days ago1614019071IN
 Create: FixedInflation
0 ETH0.78166211308

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FixedInflation

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-02-22
*/

// File: contracts\fixed-inflation\FixedInflationData.sol

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

struct FixedInflationEntry {
    string name;
    uint256 blockInterval;
    uint256 lastBlock;
    uint256 callerRewardPercentage;
}

struct FixedInflationOperation {

    address inputTokenAddress;
    uint256 inputTokenAmount;
    bool inputTokenAmountIsPercentage;
    bool inputTokenAmountIsByMint;

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

    address[] receivers;
    uint256[] receiversPercentages;
}

// File: contracts\fixed-inflation\IFixedInflationExtension.sol

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


interface IFixedInflationExtension {

    function init(address host) external;

    function setHost(address host) external;

    function data() external view returns(address fixedInflationContract, address host);

    function receiveTokens(address[] memory tokenAddresses, uint256[] memory transferAmounts, uint256[] memory amountsToMint) external;

    function flushBack(address[] memory tokenAddresses) external;

    function deactivationByFailure() external;

    function setEntry(FixedInflationEntry memory entryData, FixedInflationOperation[] memory operations) external;

    function active() external view returns(bool);

    function setActive(bool _active) external;
}

// File: contracts\fixed-inflation\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\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\fixed-inflation\IFixedInflationFactory.sol

//SPDX_License_Identifier: MIT
pragma solidity ^0.7.6;

interface IFixedInflationFactory {

    event ExtensionCloned(address indexed);

    function fixedInflationDefaultExtension() external view returns (address);

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

    function cloneFixedInflationDefaultExtension() external returns(address clonedExtension);
}

// File: contracts\fixed-inflation\IFixedInflation.sol

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


interface IFixedInflation {

    function setEntry(FixedInflationEntry memory entryData, FixedInflationOperation[] memory operations) external;

    function flushBack(address[] memory tokenAddresses) external;
}

// File: contracts\fixed-inflation\FixedInflation.sol

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







contract FixedInflation is IFixedInflation {

    event Executed(bool);

    uint256 public constant ONE_HUNDRED = 1e18;

    address public _factory;

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

    address public extension;

    FixedInflationEntry private _entry;
    FixedInflationOperation[] private _operations;

    function init(address _extension, bytes memory extensionPayload, FixedInflationEntry memory newEntry, FixedInflationOperation[] memory newOperations) public returns(bytes memory extensionInitResult) {
        require(_factory == address(0), "Already init");
        require(_extension != address(0), "Blank extension");
        _factory = msg.sender;
        extension = _extension;
        if(_extension == address(0)) {
            _extension = _clone(IFixedInflationFactory(_factory).fixedInflationDefaultExtension());
        }
        if(keccak256(extensionPayload) != keccak256("")) {
            extensionInitResult = _call(_extension, extensionPayload);
        }
        _set(newEntry, newOperations);
    }

    receive() external payable {
    }

    modifier extensionOnly() {
        require(msg.sender == extension, "Unauthorized");
        _;
    }

    modifier activeExtensionOnly() {
        require(IFixedInflationExtension(extension).active(), "not active extension");
        _;
    }

    function entry() public view returns(FixedInflationEntry memory, FixedInflationOperation[] memory) {
        return (_entry, _operations);
    }

    function setEntry(FixedInflationEntry memory newEntry, FixedInflationOperation[] memory newOperations) public override extensionOnly {
        _set(newEntry, newOperations);
    }

    function nextBlock() public view returns(uint256) {
        return _entry.lastBlock == 0 ? block.number : (_entry.lastBlock + _entry.blockInterval);
    }

    function flushBack(address[] memory tokenAddresses) public override extensionOnly {
        for(uint256 i = 0; i < tokenAddresses.length; i++) {
            _transferTo(tokenAddresses[i], extension, _balanceOf(tokenAddresses[i]));
        }
    }

    function execute(bool earnByAmounts) public activeExtensionOnly returns(bool executed) {
        require(block.number >= nextBlock(), "Too early to execute");
        require(_operations.length > 0, "No operations");
        emit Executed(executed = _ensureExecute());
        if(executed) {
            _entry.lastBlock = block.number;
            _execute(earnByAmounts, msg.sender);
        } else {
            try IFixedInflationExtension(extension).deactivationByFailure() {
            } catch {
            }
        }
        _clearVars();
    }

    function _ensureExecute() private returns(bool) {
        _collectFixedInflationOperationsTokens();
        try IFixedInflationExtension(extension).receiveTokens(_tokensToTransfer, _tokenAmounts, _tokenMintAmounts) {
        } catch {
            return false;
        }
        for(uint256 i = 0; i < _tokensToTransfer.length; i++) {
            if(_balanceOf(_tokensToTransfer[i]) != (_tokenBalanceOfBefore[i] + _tokenAmounts[i] + _tokenMintAmounts[i])) {
                return false;
            }
        }
        return true;
    }

    function _collectFixedInflationOperationsTokens() private {
        for(uint256 i = 0; i < _operations.length; i++) {
            FixedInflationOperation memory operation = _operations[i];
            _collectTokenData(operation.ammPlugin != address(0) && operation.enterInETH ? address(0) : operation.inputTokenAddress, operation.inputTokenAmount, operation.inputTokenAmountIsPercentage, operation.inputTokenAmountIsByMint);
        }
    }

    function _collectTokenData(address inputTokenAddress, uint256 inputTokenAmount, bool inputTokenAmountIsPercentage, bool inputTokenAmountIsByMint) 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);
            _tokenMintAmounts.push(0);
            _tokenBalanceOfBefore.push(_balanceOf(inputTokenAddress));
            _tokenTotalSupply.push(0);
        }
        uint256 amount = _calculateTokenAmount(inputTokenAddress, inputTokenAmount, inputTokenAmountIsPercentage);
        if(inputTokenAmountIsByMint) {
            _tokenMintAmounts[position] = _tokenMintAmounts[position] + amount;
        } else {
            _tokenAmounts[position] = _tokenAmounts[position] + amount;
        }
    }

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

    function _calculateTokenAmount(address tokenAddress, uint256 tokenAmount, bool tokenAmountIsPercentage) private returns(uint256) {
        if(!tokenAmountIsPercentage) {
            return tokenAmount;
        }
        uint256 tokenIndex = _tokenIndex[tokenAddress];
        _tokenTotalSupply[tokenIndex] = _tokenTotalSupply[tokenIndex] != 0 ? _tokenTotalSupply[tokenIndex] : IERC20(tokenAddress).totalSupply();
        return (_tokenTotalSupply[tokenIndex] * ((tokenAmount * 1e18) / ONE_HUNDRED)) / 1e18;
    }

    function _clearVars() private {
        for(uint256 i = 0; i < _tokensToTransfer.length; i++) {
            delete _tokenIndex[_tokensToTransfer[i]];
        }
        delete _tokensToTransfer;
        delete _tokenTotalSupply;
        delete _tokenAmounts;
        delete _tokenMintAmounts;
        delete _tokenBalanceOfBefore;
    }

    function _execute(bool earnByInput, address rewardReceiver) private {
        for(uint256 i = 0 ; i < _operations.length; i++) {
            FixedInflationOperation memory operation = _operations[i];
            uint256 amountIn = _calculateTokenAmount(operation.inputTokenAddress, operation.inputTokenAmount, operation.inputTokenAmountIsPercentage);
            if(operation.ammPlugin == address(0)) {
                _transferTo(operation.inputTokenAddress, amountIn, rewardReceiver, _entry.callerRewardPercentage, operation.receivers, operation.receiversPercentages);
            } else {
                _swap(operation, amountIn, rewardReceiver, _entry.callerRewardPercentage, earnByInput);
            }
        }
    }

    function _swap(FixedInflationOperation memory operation, uint256 amountIn, address rewardReceiver, uint256 callerRewardPercentage, bool earnByInput) private {

        uint256 inputReward = earnByInput ? _calculateRewardPercentage(amountIn, callerRewardPercentage) : 0;

        (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,
            amountIn - inputReward,
            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 : amountIn}(swapData);
        } else {
            amountOut = IAMM(operation.ammPlugin).swapLiquidity(swapData);
        }

        if(earnByInput) {
            _transferTo(operation.enterInETH ? address(0) : operation.inputTokenAddress, rewardReceiver, inputReward);
        }
        _transferTo(operation.exitInETH ? address(0) : outputToken, amountOut, earnByInput ? address(0) : rewardReceiver, earnByInput ? 0 : callerRewardPercentage, 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 rewardReceiver, uint256 callerRewardPercentage, address[] memory receivers, uint256[] memory receiversPercentages) private {
        uint256 availableAmount = totalAmount;

        uint256 currentPartialAmount = rewardReceiver == address(0) ? 0 : _calculateRewardPercentage(availableAmount, callerRewardPercentage);
        _transferTo(erc20TokenAddress, rewardReceiver, currentPartialAmount);
        availableAmount -= currentPartialAmount;

        (uint256 dfoFeePercentage, address dfoWallet) = IFixedInflationFactory(_factory).feePercentageInfo();
        currentPartialAmount = dfoFeePercentage == 0 || dfoWallet == address(0) ? 0 : _calculateRewardPercentage(availableAmount, dfoFeePercentage);
        _transferTo(erc20TokenAddress, dfoWallet, currentPartialAmount);
        availableAmount -= currentPartialAmount;

        uint256 stillAvailableAmount = availableAmount;

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

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

    function _transferTo(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;
        }
        _safeTransfer(erc20TokenAddress, to, value);
    }

    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 {
        bytes memory returnData = _call(erc20TokenAddress, abi.encodeWithSelector(IERC20(erc20TokenAddress).transfer.selector, to, value));
        require(returnData.length == 0 || abi.decode(returnData, (bool)), 'TRANSFER_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)}
        }
    }

    function _set(FixedInflationEntry memory fixedInflationEntry, FixedInflationOperation[] memory operations) private {
        require(keccak256(bytes(fixedInflationEntry.name)) != keccak256(""), "Name");
        require(fixedInflationEntry.blockInterval > 0, "Interval");
        require(fixedInflationEntry.callerRewardPercentage < ONE_HUNDRED, "Percentage");
        _entry = fixedInflationEntry;
        _setOperations(operations);
    }

    function _setOperations(FixedInflationOperation[] memory operations) private {
        delete _operations;
        for(uint256 i = 0; i < operations.length; i++) {
            FixedInflationOperation memory operation = operations[i];
            require(operation.receivers.length > 0, "No receivers");
            require(operation.receiversPercentages.length == (operation.receivers.length - 1), "Last receiver percentage is calculated automatically");
            uint256 percentage = 0;
            for(uint256 j = 0; j < operation.receivers.length - 1; j++) {
                percentage += operation.receiversPercentages[j];
                require(operation.receivers[j] != address(0), "Void receiver");
            }
            require(operation.receivers[operation.receivers.length - 1] != address(0), "Void receiver");
            require(percentage < ONE_HUNDRED, "More than one hundred");
            _operations.push(operation);
        }
    }

    /** @dev clones the input contract address and returns the copied contract address.
     * @param original address of the original contract.
     * @return copy copied contract address.
     */
    function _clone(address original) private returns (address copy) {
        assembly {
            mstore(
                0,
                or(
                    0x5880730000000000000000000000000000000000000000803b80938091923cF3,
                    mul(original, 0x1000000000000000000)
                )
            )
            copy := create(0, 0, 32)
            switch extcodesize(copy)
                case 0 {
                    invalid()
                }
        }
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"Executed","type":"event"},{"inputs":[],"name":"ONE_HUNDRED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entry","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"blockInterval","type":"uint256"},{"internalType":"uint256","name":"lastBlock","type":"uint256"},{"internalType":"uint256","name":"callerRewardPercentage","type":"uint256"}],"internalType":"struct FixedInflationEntry","name":"","type":"tuple"},{"components":[{"internalType":"address","name":"inputTokenAddress","type":"address"},{"internalType":"uint256","name":"inputTokenAmount","type":"uint256"},{"internalType":"bool","name":"inputTokenAmountIsPercentage","type":"bool"},{"internalType":"bool","name":"inputTokenAmountIsByMint","type":"bool"},{"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 FixedInflationOperation[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"earnByAmounts","type":"bool"}],"name":"execute","outputs":[{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"extension","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokenAddresses","type":"address[]"}],"name":"flushBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_extension","type":"address"},{"internalType":"bytes","name":"extensionPayload","type":"bytes"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"blockInterval","type":"uint256"},{"internalType":"uint256","name":"lastBlock","type":"uint256"},{"internalType":"uint256","name":"callerRewardPercentage","type":"uint256"}],"internalType":"struct FixedInflationEntry","name":"newEntry","type":"tuple"},{"components":[{"internalType":"address","name":"inputTokenAddress","type":"address"},{"internalType":"uint256","name":"inputTokenAmount","type":"uint256"},{"internalType":"bool","name":"inputTokenAmountIsPercentage","type":"bool"},{"internalType":"bool","name":"inputTokenAmountIsByMint","type":"bool"},{"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 FixedInflationOperation[]","name":"newOperations","type":"tuple[]"}],"name":"init","outputs":[{"internalType":"bytes","name":"extensionInitResult","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nextBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"blockInterval","type":"uint256"},{"internalType":"uint256","name":"lastBlock","type":"uint256"},{"internalType":"uint256","name":"callerRewardPercentage","type":"uint256"}],"internalType":"struct FixedInflationEntry","name":"newEntry","type":"tuple"},{"components":[{"internalType":"address","name":"inputTokenAddress","type":"address"},{"internalType":"uint256","name":"inputTokenAmount","type":"uint256"},{"internalType":"bool","name":"inputTokenAmountIsPercentage","type":"bool"},{"internalType":"bool","name":"inputTokenAmountIsByMint","type":"bool"},{"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 FixedInflationOperation[]","name":"newOperations","type":"tuple[]"}],"name":"setEntry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50612cf4806100206000396000f3fe60806040526004361061008a5760003560e01c80639b8c7c22116100595780639b8c7c2214610133578063bfaa8cca14610155578063c5cc6b6a1461016a578063c854862b1461017f578063f811a30b1461019f57610091565b80632d5537b01461009657806367f239dd146100c157806383788fce146100e4578063972213ad1461010657610091565b3661009157005b600080fd5b3480156100a257600080fd5b506100ab6101cc565b6040516100b891906126e0565b60405180910390f35b3480156100cd57600080fd5b506100d66101db565b6040516100b8929190612a4f565b3480156100f057600080fd5b506100f96104ef565b6040516100b89190612c50565b34801561011257600080fd5b506101266101213660046124fe565b61050e565b6040516100b89190612787565b34801561013f57600080fd5b5061015361014e366004612536565b6106c0565b005b34801561016157600080fd5b506100f96106f8565b34801561017657600080fd5b506100ab610704565b34801561018b57600080fd5b5061015361019a3660046124cb565b610713565b3480156101ab57600080fd5b506101bf6101ba3660046123dc565b61079f565b6040516100b89190612792565b6007546001600160a01b031681565b6101e3611e6b565b604080516008805460a06020601f600260001961010060018716150201909416939093049283018190040284018101909452608083018181526060949293600c939092859284929091849184018282801561027f5780601f106102545761010080835404028352916020019161027f565b820191906000526020600020905b81548152906001019060200180831161026257829003601f168201915b505050505081526020016001820154815260200160028201548152602001600382015481525050915080805480602002602001604051908101604052809291908181526020016000905b828210156104e157600084815260209081902060408051610160810182526008860290920180546001600160a01b039081168452600182015484860152600282015460ff808216151586860152610100820416151560608601526201000090041660808401526003810180548351818702810187019094528084529394919360a08601939283018282801561038757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610369575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156103e957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103cb575b5050509183525050600582015460ff8082161515602080850191909152610100909204161515604080840191909152600684018054825181850281018501909352808352606090940193919290919083018282801561047157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610453575b50505050508152602001600782018054806020026020016040519081016040528092919081815260200182805480156104c957602002820191906000526020600020905b8154815260200190600101908083116104b5575b505050505081525050815260200190600101906102c9565b505050509050915091509091565b600a546000901561050657600954600a5401610508565b435b90505b90565b6007546040805163017d862f60e11b815290516000926001600160a01b0316916302fb0c5e916004808301926020929190829003018186803b15801561055357600080fd5b505afa158015610567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058b919061251a565b6105b05760405162461bcd60e51b81526004016105a7906127a5565b60405180910390fd5b6105b86104ef565b4310156105d75760405162461bcd60e51b81526004016105a790612a21565b600c546105f65760405162461bcd60e51b81526004016105a7906128f0565b7f80e57eda879f13a99b66f28d0393488a683e123e369db82e85ccc3dcb2fd6cb261061f6108f0565b91508160405161062f9190612787565b60405180910390a180156106505743600a5561064b8233610a07565b6106b3565b600760009054906101000a90046001600160a01b03166001600160a01b031663a65b99086040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156106a057600080fd5b505af19250505080156106b1575060015b505b6106bb610c9c565b919050565b6007546001600160a01b031633146106ea5760405162461bcd60e51b81526004016105a7906127d3565b6106f48282610d26565b5050565b670de0b6b3a764000081565b6000546001600160a01b031681565b6007546001600160a01b0316331461073d5760405162461bcd60e51b81526004016105a7906127d3565b60005b81518110156106f45761079782828151811061075857fe5b6020026020010151600760009054906101000a90046001600160a01b031661079285858151811061078557fe5b6020026020010151610e02565b610e9b565b600101610740565b6000546060906001600160a01b0316156107cb5760405162461bcd60e51b81526004016105a7906129a6565b6001600160a01b0385166107f15760405162461bcd60e51b81526004016105a7906128a3565b600080546001600160a01b03199081163317909155600780546001600160a01b0388169216821790556108a457600054604080516354c05cef60e11b815290516108a1926001600160a01b03169163a980b9de916004808301926020929190829003018186803b15801561086457600080fd5b505afa158015610878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089c91906123c0565b610f40565b94505b835160208501207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470146108de576108db8585610f82565b90505b6108e88383610d26565b949350505050565b60006108fa610fc4565b60075460405163eb26061960e01b81526001600160a01b039091169063eb2606199061093090600290600490600590820161270d565b600060405180830381600087803b15801561094a57600080fd5b505af192505050801561095b575060015b6109675750600061050b565b60005b6002548110156109ff576005818154811061098157fe5b90600052602060002001546004828154811061099957fe5b9060005260206000200154600683815481106109b157fe5b906000526020600020015401016109e8600283815481106109ce57fe5b6000918252602090912001546001600160a01b0316610e02565b146109f757600091505061050b565b60010161096a565b506001905090565b60005b600c54811015610c97576000600c8281548110610a2357fe5b60009182526020918290206040805161016081018252600890930290910180546001600160a01b039081168452600182015484860152600282015460ff808216151586860152610100820416151560608601526201000090041660808401526003810180548351818702810187019094528084529394919360a086019392830182828015610ada57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abc575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b3c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b1e575b5050509183525050600582015460ff80821615156020808501919091526101009092041615156040808401919091526006840180548251818502810185019093528083526060909401939192909190830182828015610bc457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ba6575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610c1c57602002820191906000526020600020905b815481526020019060010190808311610c08575b50505050508152505090506000610c4082600001518360200151846040015161123d565b60808301519091506001600160a01b0316610c7b57610c7682600001518286600860030154866101200151876101400151611367565b610c8d565b610c8d828286600860030154896114e2565b5050600101610a0a565b505050565b60005b600254811015610ce7576001600060028381548110610cba57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812055600101610c9f565b50610cf460026000611e93565b610d0060036000611e93565b610d0c60046000611e93565b610d1860056000611e93565b610d2460066000611e93565b565b815180516020909101207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4701415610d6f5760405162461bcd60e51b81526004016105a790612917565b6000826020015111610d935760405162461bcd60e51b81526004016105a790612984565b670de0b6b3a7640000826060015110610dbe5760405162461bcd60e51b81526004016105a7906128cc565b815180518391600891610dd8918391602090910190611eb1565b5060208201516001820155604082015160028201556060909101516003909101556106f48161181d565b60006001600160a01b038216610e195750476106bb565b6040516370a0823160e01b81526001600160a01b038316906370a0823190610e459030906004016126e0565b60206040518083038186803b158015610e5d57600080fd5b505afa158015610e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e959190612597565b92915050565b80610ea557610c97565b6001600160a01b038316610f35576000826001600160a01b031682604051610ecc9061050b565b60006040518083038185875af1925050503d8060008114610f09576040519150601f19603f3d011682016040523d82523d6000602084013e610f0e565b606091505b5050905080610f2f5760405162461bcd60e51b81526004016105a7906129cc565b50610c97565b610c97838383611b55565b60006901000000000000000000820268803b80938091923cf36258807360e81b01176000526020600080f09050803b8015610f7a57610f7c565bfe5b50919050565b60606000808351602085016000875af13d604051925080835260208301816000823e808201604052828015610fb657610fba565b8282fd5b5050505092915050565b60005b600c5481101561123a576000600c8281548110610fe057fe5b60009182526020918290206040805161016081018252600890930290910180546001600160a01b039081168452600182015484860152600282015460ff808216151586860152610100820416151560608601526201000090041660808401526003810180548351818702810187019094528084529394919360a08601939283018282801561109757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611079575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156110f957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110db575b5050509183525050600582015460ff8082161515602080850191909152610100909204161515604080840191909152600684018054825181850281018501909352808352606090940193919290919083018282801561118157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611163575b50505050508152602001600782018054806020026020016040519081016040528092919081815260200182805480156111d957602002820191906000526020600020905b8154815260200190600101908083116111c5575b505050505081525050905061123160006001600160a01b031682608001516001600160a01b03161415801561120f57508160e001515b61121a57815161121d565b60005b826020015183604001518460600151611bf0565b50600101610fc7565b50565b60008161124b575081611360565b6001600160a01b038416600090815260016020526040902054600380548290811061127257fe5b9060005260206000200154600014156112fb57846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112be57600080fd5b505afa1580156112d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f69190612597565b611314565b6003818154811061130857fe5b90600052602060002001545b6003828154811061132157fe5b600091825260209091200155670de0b6b3a764000080858102046003838154811061134857fe5b9060005260206000200154028161135b57fe5b049150505b9392505050565b8460006001600160a01b03861615611388576113838286611dec565b61138b565b60005b9050611398888783610e9b565b6000805460408051631f9de8b560e21b81528151958590039584936001600160a01b031692637e77a2d49260048082019391829003018186803b1580156113de57600080fd5b505afa1580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141691906125af565b91509150816000148061143057506001600160a01b038116155b6114435761143e8483611dec565b611446565b60005b92506114538a8285610e9b565b92829003928360005b60018851038110156114b2576114a58c89838151811061147857fe5b602002602001015161149d858b868151811061149057fe5b6020026020010151611dec565b975087610e9b565b948490039460010161145c565b506114d58b8860018a5103815181106114c757fe5b602002602001015187610e9b565b5050505050505050505050565b6000816114f05760006114fa565b6114fa8584611dec565b9050600086608001516001600160a01b03166373d4a13a6040518163ffffffff1660e01b815260040160606040518083038186803b15801561153b57600080fd5b505afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115739190612489565b50509050866101000151156115bb5760c08701518051829190600019810190811061159a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b60c087015180516000919060001981019081106115d457fe5b6020026020010151905060006040518060e001604052808a60e00151151581526020018a6101000151151581526020018a60a0015181526020018a60c0015181526020018a60e00151611628578a5161162a565b845b6001600160a01b03168152602001858a038152602001306001600160a01b0316815250905060006001600160a01b031681608001516001600160a01b03161415801561167557508051155b156116915761169181608001518a608001518360a00151611e0d565b8051600090156117255789608001516001600160a01b0316635ff94cbf8a846040518363ffffffff1660e01b81526004016116cc9190612bc5565b6020604051808303818588803b1580156116e557600080fd5b505af11580156116f9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061171e9190612597565b90506117aa565b89608001516001600160a01b0316635ff94cbf836040518263ffffffff1660e01b81526004016117559190612bc5565b602060405180830381600087803b15801561176f57600080fd5b505af1158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a79190612597565b90505b85156117cd576117cd8a60e001516117c3578a516117c6565b60005b8987610e9b565b6118118a61010001516117e057836117e3565b60005b82886117ef578a6117f2565b60005b896117fd578a611800565b60005b8e61012001518f6101400151611367565b50505050505050505050565b611829600c6000611f3d565b60005b81518110156106f457600082828151811061184357fe5b60200260200101519050600081610120015151116118735760405162461bcd60e51b81526004016105a79061295e565b6001816101200151510381610140015151146118a15760405162461bcd60e51b81526004016105a79061284f565b6000805b600183610120015151038110156119265782610140015181815181106118c757fe5b60200260200101518201915060006001600160a01b031683610120015182815181106118ef57fe5b60200260200101516001600160a01b0316141561191e5760405162461bcd60e51b81526004016105a7906127f9565b6001016118a5565b50610120820151805160009190600019810190811061194157fe5b60200260200101516001600160a01b031614156119705760405162461bcd60e51b81526004016105a7906127f9565b670de0b6b3a764000081106119975760405162461bcd60e51b81526004016105a790612820565b600c8054600181018255600091909152825160089091027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7810180546001600160a01b039384166001600160a01b03199091161781556020808601517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c884015560408601517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c984018054606089015160808a0151909716620100000262010000600160b01b03199715156101000261ff001994151560ff19909316929092179390931617959095161790935560a0850151805186949293611abe937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca909101920190611f5e565b5060c08201518051611ada916004840191602090910190611f5e565b5060e08201516005820180546101008086015115150261ff001993151560ff1990921691909117929092169190911790556101208201518051611b27916006840191602090910190611f5e565b506101408201518051611b44916007840191602090910190611fb3565b50506001909301925061182c915050565b6000611bad8463a9059cbb60e01b8585604051602401611b769291906126f4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610f82565b9050805160001480611bce575080806020019051810190611bce919061251a565b611bea5760405162461bcd60e51b81526004016105a790612935565b50505050565b82611bfa57611bea565b6001600160a01b0384166000908152600160205260409020546002541580611c4c5750846001600160a01b031660028281548110611c3457fe5b6000918252602090912001546001600160a01b031614155b15611d635750600280546001600160a01b038616600081815260016020819052604082208490558084019094557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace830180546001600160a01b031916909217909155600480548085019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0181905560058054938401815581527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0909201919091556006611d1b86610e02565b8154600181810184556000938452602084209091019190915560038054918201815582527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01555b6000611d7086868661123d565b90508215611db0578060058381548110611d8657fe5b90600052602060002001540160058381548110611d9f57fe5b600091825260209091200155611de4565b8060048381548110611dbe57fe5b90600052602060002001540160048381548110611dd757fe5b6000918252602090912001555b505050505050565b6000670de0b6b3a76400008083810204840281611e0557fe5b049392505050565b6000611e2e8463095ea7b360e01b8585604051602401611b769291906126f4565b9050805160001480611e4f575080806020019051810190611e4f919061251a565b611bea5760405162461bcd60e51b81526004016105a7906129f9565b6040518060800160405280606081526020016000815260200160008152602001600081525090565b508054600082559060005260206000209081019061123a9190611fed565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611ee75760008555611f2d565b82601f10611f0057805160ff1916838001178555611f2d565b82800160010185558215611f2d579182015b82811115611f2d578251825591602001919060010190611f12565b50611f39929150611fed565b5090565b508054600082556008029060005260206000209081019061123a9190612002565b828054828255906000526020600020908101928215611f2d579160200282015b82811115611f2d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611f7e565b828054828255906000526020600020908101928215611f2d5791602002820182811115611f2d578251825591602001919060010190611f12565b5b80821115611f395760008155600101611fee565b80821115611f395780546001600160a01b03191681556000600182018190556002820180546001600160b01b03191690556120406003830182611e93565b61204e600483016000611e93565b60058201805461ffff19169055612069600683016000611e93565b612077600783016000611e93565b50600801612002565b600067ffffffffffffffff83111561209457fe5b6120a7601f8401601f1916602001612c59565b90508281528383830111156120bb57600080fd5b828260208301376000602084830101529392505050565b80356106bb81612c9b565b600082601f8301126120ed578081fd5b813560206121026120fd83612c7d565b612c59565b828152818101908583018385028701840188101561211e578586fd5b855b8581101561214557813561213381612c9b565b84529284019290840190600101612120565b5090979650505050505050565b600082601f830112612162578081fd5b813560206121726120fd83612c7d565b82815281810190858301855b85811015612145578135880161016080601f19838d0301121561219f578889fd5b6121a881612c59565b6121b38884016120d2565b81526040830135888201526121ca60608401612325565b60408201526121db60808401612325565b60608201526121ec60a084016120d2565b608082015260c083013567ffffffffffffffff8082111561220b578b8cfd5b6122198e8b848801016120dd565b60a084015260e0850135915080821115612231578b8cfd5b61223f8e8b848801016120dd565b60c08401526122516101008601612325565b60e08401526122636101208601612325565b6101008401526101409150818501358181111561227e578c8dfd5b61228c8f8c838901016120dd565b610120850152509284013592808411156122a4578b8cfd5b506122b38d8a858701016122cb565b9082015286525050928401929084019060010161217e565b600082601f8301126122db578081fd5b813560206122eb6120fd83612c7d565b8281528181019085830183850287018401881015612307578586fd5b855b8581101561214557813584529284019290840190600101612309565b80356106bb81612cb0565b600060808284031215612341578081fd5b6040516080810167ffffffffffffffff828210818311171561235f57fe5b81604052829350843591508082111561237757600080fd5b508301601f8101851361238957600080fd5b61239885823560208401612080565b8252506020830135602082015260408301356040820152606083013560608201525092915050565b6000602082840312156123d1578081fd5b815161136081612c9b565b600080600080608085870312156123f1578283fd5b84356123fc81612c9b565b9350602085013567ffffffffffffffff80821115612418578485fd5b818701915087601f83011261242b578485fd5b61243a88833560208501612080565b9450604087013591508082111561244f578384fd5b61245b88838901612330565b93506060870135915080821115612470578283fd5b5061247d87828801612152565b91505092959194509250565b60008060006060848603121561249d578283fd5b83516124a881612c9b565b6020850151604086015191945092506124c081612cb0565b809150509250925092565b6000602082840312156124dc578081fd5b813567ffffffffffffffff8111156124f2578182fd5b6108e8848285016120dd565b60006020828403121561250f578081fd5b813561136081612cb0565b60006020828403121561252b578081fd5b815161136081612cb0565b60008060408385031215612548578182fd5b823567ffffffffffffffff8082111561255f578384fd5b61256b86838701612330565b93506020850135915080821115612580578283fd5b5061258d85828601612152565b9150509250929050565b6000602082840312156125a8578081fd5b5051919050565b600080604083850312156125c1578182fd5b8251915060208301516125d381612c9b565b809150509250929050565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156126235781516001600160a01b0316875295820195908201906001016125fe565b509495945050505050565b6000815180845260208085019450808401835b8381101561262357815187529582019590820190600101612641565b6000815480845260208085019450838352808320835b8381101561262357815487529582019560019182019101612673565b15159052565b60008151808452815b818110156126ba5760208185018101518683018201520161269e565b818111156126cb5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6000606082016060835280865480835260808501915087845260209250828420845b828110156127545781546001600160a01b03168452928401926001918201910161272f565b50505083810382850152612768818761265d565b915050828103604084015261277d818561265d565b9695505050505050565b901515815260200190565b6000602082526113606020830184612695565b6020808252601490820152733737ba1030b1ba34bb329032bc3a32b739b4b7b760611b604082015260600190565b6020808252600c908201526b155b985d5d1a1bdc9a5e995960a21b604082015260600190565b6020808252600d908201526c2b37b4b2103932b1b2b4bb32b960991b604082015260600190565b602080825260159082015274135bdc99481d1a185b881bdb99481a1d5b991c9959605a1b604082015260600190565b60208082526034908201527f4c6173742072656365697665722070657263656e746167652069732063616c63604082015273756c61746564206175746f6d61746963616c6c7960601b606082015260800190565b6020808252600f908201526e213630b7359032bc3a32b739b4b7b760891b604082015260600190565b6020808252600a908201526950657263656e7461676560b01b604082015260600190565b6020808252600d908201526c4e6f206f7065726174696f6e7360981b604082015260600190565b6020808252600490820152634e616d6560e01b604082015260600190565b6020808252600f908201526e1514905394d1915497d19052531151608a1b604082015260600190565b6020808252600c908201526b4e6f2072656365697665727360a01b604082015260600190565b602080825260089082015267125b9d195c9d985b60c21b604082015260600190565b6020808252600c908201526b105b1c9958591e481a5b9a5d60a21b604082015260600190565b602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b6020808252600e908201526d1054141493d59157d1905253115160921b604082015260600190565b602080825260149082015273546f6f206561726c7920746f206578656375746560601b604082015260600190565b6000604080835260c0855160808084870152612a6d83870183612695565b9150602080890151606081818a0152868b0151848a0152808b0151915060a082818b0152898603848b01528592508a51808752848701935084858202880101858d018b5b83811015612bb157601f198a84030187528151610160612ad28583516125de565b898201518a8601528d820151612aea8f87018261268f565b5087820151612afb8987018261268f565b508a820151612b0c8c8701826125de565b50868201518188870152612b22828701826125eb565b9150508c8201518582038e870152612b3a82826125eb565b91505060e080830151612b4f8288018261268f565b505061010080830151612b648288018261268f565b50506101208083015186830382880152612b7e83826125eb565b925050506101408083015192508582038187015250612b9d818361262e565b988a01989450505090870190600101612ab1565b50909e9d5050505050505050505050505050565b600060208252825115156020830152602083015115156040830152604083015160e06060840152612bfa6101008401826125eb565b90506060840151601f19848303016080850152612c1782826125eb565b91505060018060a01b0360808501511660a084015260a084015160c084015260c0840151612c4860e08501826125de565b509392505050565b90815260200190565b60405181810167ffffffffffffffff81118282101715612c7557fe5b604052919050565b600067ffffffffffffffff821115612c9157fe5b5060209081020190565b6001600160a01b038116811461123a57600080fd5b801515811461123a57600080fdfea2646970667358221220be5f2d438a85e1c4931bd09dace6f37e3da1cdcbbed2808ff1ac0b6fe72e25cf64736f6c63430007060033

Deployed Bytecode

0x60806040526004361061008a5760003560e01c80639b8c7c22116100595780639b8c7c2214610133578063bfaa8cca14610155578063c5cc6b6a1461016a578063c854862b1461017f578063f811a30b1461019f57610091565b80632d5537b01461009657806367f239dd146100c157806383788fce146100e4578063972213ad1461010657610091565b3661009157005b600080fd5b3480156100a257600080fd5b506100ab6101cc565b6040516100b891906126e0565b60405180910390f35b3480156100cd57600080fd5b506100d66101db565b6040516100b8929190612a4f565b3480156100f057600080fd5b506100f96104ef565b6040516100b89190612c50565b34801561011257600080fd5b506101266101213660046124fe565b61050e565b6040516100b89190612787565b34801561013f57600080fd5b5061015361014e366004612536565b6106c0565b005b34801561016157600080fd5b506100f96106f8565b34801561017657600080fd5b506100ab610704565b34801561018b57600080fd5b5061015361019a3660046124cb565b610713565b3480156101ab57600080fd5b506101bf6101ba3660046123dc565b61079f565b6040516100b89190612792565b6007546001600160a01b031681565b6101e3611e6b565b604080516008805460a06020601f600260001961010060018716150201909416939093049283018190040284018101909452608083018181526060949293600c939092859284929091849184018282801561027f5780601f106102545761010080835404028352916020019161027f565b820191906000526020600020905b81548152906001019060200180831161026257829003601f168201915b505050505081526020016001820154815260200160028201548152602001600382015481525050915080805480602002602001604051908101604052809291908181526020016000905b828210156104e157600084815260209081902060408051610160810182526008860290920180546001600160a01b039081168452600182015484860152600282015460ff808216151586860152610100820416151560608601526201000090041660808401526003810180548351818702810187019094528084529394919360a08601939283018282801561038757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610369575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156103e957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103cb575b5050509183525050600582015460ff8082161515602080850191909152610100909204161515604080840191909152600684018054825181850281018501909352808352606090940193919290919083018282801561047157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610453575b50505050508152602001600782018054806020026020016040519081016040528092919081815260200182805480156104c957602002820191906000526020600020905b8154815260200190600101908083116104b5575b505050505081525050815260200190600101906102c9565b505050509050915091509091565b600a546000901561050657600954600a5401610508565b435b90505b90565b6007546040805163017d862f60e11b815290516000926001600160a01b0316916302fb0c5e916004808301926020929190829003018186803b15801561055357600080fd5b505afa158015610567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058b919061251a565b6105b05760405162461bcd60e51b81526004016105a7906127a5565b60405180910390fd5b6105b86104ef565b4310156105d75760405162461bcd60e51b81526004016105a790612a21565b600c546105f65760405162461bcd60e51b81526004016105a7906128f0565b7f80e57eda879f13a99b66f28d0393488a683e123e369db82e85ccc3dcb2fd6cb261061f6108f0565b91508160405161062f9190612787565b60405180910390a180156106505743600a5561064b8233610a07565b6106b3565b600760009054906101000a90046001600160a01b03166001600160a01b031663a65b99086040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156106a057600080fd5b505af19250505080156106b1575060015b505b6106bb610c9c565b919050565b6007546001600160a01b031633146106ea5760405162461bcd60e51b81526004016105a7906127d3565b6106f48282610d26565b5050565b670de0b6b3a764000081565b6000546001600160a01b031681565b6007546001600160a01b0316331461073d5760405162461bcd60e51b81526004016105a7906127d3565b60005b81518110156106f45761079782828151811061075857fe5b6020026020010151600760009054906101000a90046001600160a01b031661079285858151811061078557fe5b6020026020010151610e02565b610e9b565b600101610740565b6000546060906001600160a01b0316156107cb5760405162461bcd60e51b81526004016105a7906129a6565b6001600160a01b0385166107f15760405162461bcd60e51b81526004016105a7906128a3565b600080546001600160a01b03199081163317909155600780546001600160a01b0388169216821790556108a457600054604080516354c05cef60e11b815290516108a1926001600160a01b03169163a980b9de916004808301926020929190829003018186803b15801561086457600080fd5b505afa158015610878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089c91906123c0565b610f40565b94505b835160208501207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470146108de576108db8585610f82565b90505b6108e88383610d26565b949350505050565b60006108fa610fc4565b60075460405163eb26061960e01b81526001600160a01b039091169063eb2606199061093090600290600490600590820161270d565b600060405180830381600087803b15801561094a57600080fd5b505af192505050801561095b575060015b6109675750600061050b565b60005b6002548110156109ff576005818154811061098157fe5b90600052602060002001546004828154811061099957fe5b9060005260206000200154600683815481106109b157fe5b906000526020600020015401016109e8600283815481106109ce57fe5b6000918252602090912001546001600160a01b0316610e02565b146109f757600091505061050b565b60010161096a565b506001905090565b60005b600c54811015610c97576000600c8281548110610a2357fe5b60009182526020918290206040805161016081018252600890930290910180546001600160a01b039081168452600182015484860152600282015460ff808216151586860152610100820416151560608601526201000090041660808401526003810180548351818702810187019094528084529394919360a086019392830182828015610ada57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abc575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b3c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b1e575b5050509183525050600582015460ff80821615156020808501919091526101009092041615156040808401919091526006840180548251818502810185019093528083526060909401939192909190830182828015610bc457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ba6575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610c1c57602002820191906000526020600020905b815481526020019060010190808311610c08575b50505050508152505090506000610c4082600001518360200151846040015161123d565b60808301519091506001600160a01b0316610c7b57610c7682600001518286600860030154866101200151876101400151611367565b610c8d565b610c8d828286600860030154896114e2565b5050600101610a0a565b505050565b60005b600254811015610ce7576001600060028381548110610cba57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812055600101610c9f565b50610cf460026000611e93565b610d0060036000611e93565b610d0c60046000611e93565b610d1860056000611e93565b610d2460066000611e93565b565b815180516020909101207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4701415610d6f5760405162461bcd60e51b81526004016105a790612917565b6000826020015111610d935760405162461bcd60e51b81526004016105a790612984565b670de0b6b3a7640000826060015110610dbe5760405162461bcd60e51b81526004016105a7906128cc565b815180518391600891610dd8918391602090910190611eb1565b5060208201516001820155604082015160028201556060909101516003909101556106f48161181d565b60006001600160a01b038216610e195750476106bb565b6040516370a0823160e01b81526001600160a01b038316906370a0823190610e459030906004016126e0565b60206040518083038186803b158015610e5d57600080fd5b505afa158015610e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e959190612597565b92915050565b80610ea557610c97565b6001600160a01b038316610f35576000826001600160a01b031682604051610ecc9061050b565b60006040518083038185875af1925050503d8060008114610f09576040519150601f19603f3d011682016040523d82523d6000602084013e610f0e565b606091505b5050905080610f2f5760405162461bcd60e51b81526004016105a7906129cc565b50610c97565b610c97838383611b55565b60006901000000000000000000820268803b80938091923cf36258807360e81b01176000526020600080f09050803b8015610f7a57610f7c565bfe5b50919050565b60606000808351602085016000875af13d604051925080835260208301816000823e808201604052828015610fb657610fba565b8282fd5b5050505092915050565b60005b600c5481101561123a576000600c8281548110610fe057fe5b60009182526020918290206040805161016081018252600890930290910180546001600160a01b039081168452600182015484860152600282015460ff808216151586860152610100820416151560608601526201000090041660808401526003810180548351818702810187019094528084529394919360a08601939283018282801561109757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611079575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156110f957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110db575b5050509183525050600582015460ff8082161515602080850191909152610100909204161515604080840191909152600684018054825181850281018501909352808352606090940193919290919083018282801561118157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611163575b50505050508152602001600782018054806020026020016040519081016040528092919081815260200182805480156111d957602002820191906000526020600020905b8154815260200190600101908083116111c5575b505050505081525050905061123160006001600160a01b031682608001516001600160a01b03161415801561120f57508160e001515b61121a57815161121d565b60005b826020015183604001518460600151611bf0565b50600101610fc7565b50565b60008161124b575081611360565b6001600160a01b038416600090815260016020526040902054600380548290811061127257fe5b9060005260206000200154600014156112fb57846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112be57600080fd5b505afa1580156112d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f69190612597565b611314565b6003818154811061130857fe5b90600052602060002001545b6003828154811061132157fe5b600091825260209091200155670de0b6b3a764000080858102046003838154811061134857fe5b9060005260206000200154028161135b57fe5b049150505b9392505050565b8460006001600160a01b03861615611388576113838286611dec565b61138b565b60005b9050611398888783610e9b565b6000805460408051631f9de8b560e21b81528151958590039584936001600160a01b031692637e77a2d49260048082019391829003018186803b1580156113de57600080fd5b505afa1580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141691906125af565b91509150816000148061143057506001600160a01b038116155b6114435761143e8483611dec565b611446565b60005b92506114538a8285610e9b565b92829003928360005b60018851038110156114b2576114a58c89838151811061147857fe5b602002602001015161149d858b868151811061149057fe5b6020026020010151611dec565b975087610e9b565b948490039460010161145c565b506114d58b8860018a5103815181106114c757fe5b602002602001015187610e9b565b5050505050505050505050565b6000816114f05760006114fa565b6114fa8584611dec565b9050600086608001516001600160a01b03166373d4a13a6040518163ffffffff1660e01b815260040160606040518083038186803b15801561153b57600080fd5b505afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115739190612489565b50509050866101000151156115bb5760c08701518051829190600019810190811061159a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b60c087015180516000919060001981019081106115d457fe5b6020026020010151905060006040518060e001604052808a60e00151151581526020018a6101000151151581526020018a60a0015181526020018a60c0015181526020018a60e00151611628578a5161162a565b845b6001600160a01b03168152602001858a038152602001306001600160a01b0316815250905060006001600160a01b031681608001516001600160a01b03161415801561167557508051155b156116915761169181608001518a608001518360a00151611e0d565b8051600090156117255789608001516001600160a01b0316635ff94cbf8a846040518363ffffffff1660e01b81526004016116cc9190612bc5565b6020604051808303818588803b1580156116e557600080fd5b505af11580156116f9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061171e9190612597565b90506117aa565b89608001516001600160a01b0316635ff94cbf836040518263ffffffff1660e01b81526004016117559190612bc5565b602060405180830381600087803b15801561176f57600080fd5b505af1158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a79190612597565b90505b85156117cd576117cd8a60e001516117c3578a516117c6565b60005b8987610e9b565b6118118a61010001516117e057836117e3565b60005b82886117ef578a6117f2565b60005b896117fd578a611800565b60005b8e61012001518f6101400151611367565b50505050505050505050565b611829600c6000611f3d565b60005b81518110156106f457600082828151811061184357fe5b60200260200101519050600081610120015151116118735760405162461bcd60e51b81526004016105a79061295e565b6001816101200151510381610140015151146118a15760405162461bcd60e51b81526004016105a79061284f565b6000805b600183610120015151038110156119265782610140015181815181106118c757fe5b60200260200101518201915060006001600160a01b031683610120015182815181106118ef57fe5b60200260200101516001600160a01b0316141561191e5760405162461bcd60e51b81526004016105a7906127f9565b6001016118a5565b50610120820151805160009190600019810190811061194157fe5b60200260200101516001600160a01b031614156119705760405162461bcd60e51b81526004016105a7906127f9565b670de0b6b3a764000081106119975760405162461bcd60e51b81526004016105a790612820565b600c8054600181018255600091909152825160089091027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7810180546001600160a01b039384166001600160a01b03199091161781556020808601517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c884015560408601517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c984018054606089015160808a0151909716620100000262010000600160b01b03199715156101000261ff001994151560ff19909316929092179390931617959095161790935560a0850151805186949293611abe937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca909101920190611f5e565b5060c08201518051611ada916004840191602090910190611f5e565b5060e08201516005820180546101008086015115150261ff001993151560ff1990921691909117929092169190911790556101208201518051611b27916006840191602090910190611f5e565b506101408201518051611b44916007840191602090910190611fb3565b50506001909301925061182c915050565b6000611bad8463a9059cbb60e01b8585604051602401611b769291906126f4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610f82565b9050805160001480611bce575080806020019051810190611bce919061251a565b611bea5760405162461bcd60e51b81526004016105a790612935565b50505050565b82611bfa57611bea565b6001600160a01b0384166000908152600160205260409020546002541580611c4c5750846001600160a01b031660028281548110611c3457fe5b6000918252602090912001546001600160a01b031614155b15611d635750600280546001600160a01b038616600081815260016020819052604082208490558084019094557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace830180546001600160a01b031916909217909155600480548085019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0181905560058054938401815581527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0909201919091556006611d1b86610e02565b8154600181810184556000938452602084209091019190915560038054918201815582527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01555b6000611d7086868661123d565b90508215611db0578060058381548110611d8657fe5b90600052602060002001540160058381548110611d9f57fe5b600091825260209091200155611de4565b8060048381548110611dbe57fe5b90600052602060002001540160048381548110611dd757fe5b6000918252602090912001555b505050505050565b6000670de0b6b3a76400008083810204840281611e0557fe5b049392505050565b6000611e2e8463095ea7b360e01b8585604051602401611b769291906126f4565b9050805160001480611e4f575080806020019051810190611e4f919061251a565b611bea5760405162461bcd60e51b81526004016105a7906129f9565b6040518060800160405280606081526020016000815260200160008152602001600081525090565b508054600082559060005260206000209081019061123a9190611fed565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611ee75760008555611f2d565b82601f10611f0057805160ff1916838001178555611f2d565b82800160010185558215611f2d579182015b82811115611f2d578251825591602001919060010190611f12565b50611f39929150611fed565b5090565b508054600082556008029060005260206000209081019061123a9190612002565b828054828255906000526020600020908101928215611f2d579160200282015b82811115611f2d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611f7e565b828054828255906000526020600020908101928215611f2d5791602002820182811115611f2d578251825591602001919060010190611f12565b5b80821115611f395760008155600101611fee565b80821115611f395780546001600160a01b03191681556000600182018190556002820180546001600160b01b03191690556120406003830182611e93565b61204e600483016000611e93565b60058201805461ffff19169055612069600683016000611e93565b612077600783016000611e93565b50600801612002565b600067ffffffffffffffff83111561209457fe5b6120a7601f8401601f1916602001612c59565b90508281528383830111156120bb57600080fd5b828260208301376000602084830101529392505050565b80356106bb81612c9b565b600082601f8301126120ed578081fd5b813560206121026120fd83612c7d565b612c59565b828152818101908583018385028701840188101561211e578586fd5b855b8581101561214557813561213381612c9b565b84529284019290840190600101612120565b5090979650505050505050565b600082601f830112612162578081fd5b813560206121726120fd83612c7d565b82815281810190858301855b85811015612145578135880161016080601f19838d0301121561219f578889fd5b6121a881612c59565b6121b38884016120d2565b81526040830135888201526121ca60608401612325565b60408201526121db60808401612325565b60608201526121ec60a084016120d2565b608082015260c083013567ffffffffffffffff8082111561220b578b8cfd5b6122198e8b848801016120dd565b60a084015260e0850135915080821115612231578b8cfd5b61223f8e8b848801016120dd565b60c08401526122516101008601612325565b60e08401526122636101208601612325565b6101008401526101409150818501358181111561227e578c8dfd5b61228c8f8c838901016120dd565b610120850152509284013592808411156122a4578b8cfd5b506122b38d8a858701016122cb565b9082015286525050928401929084019060010161217e565b600082601f8301126122db578081fd5b813560206122eb6120fd83612c7d565b8281528181019085830183850287018401881015612307578586fd5b855b8581101561214557813584529284019290840190600101612309565b80356106bb81612cb0565b600060808284031215612341578081fd5b6040516080810167ffffffffffffffff828210818311171561235f57fe5b81604052829350843591508082111561237757600080fd5b508301601f8101851361238957600080fd5b61239885823560208401612080565b8252506020830135602082015260408301356040820152606083013560608201525092915050565b6000602082840312156123d1578081fd5b815161136081612c9b565b600080600080608085870312156123f1578283fd5b84356123fc81612c9b565b9350602085013567ffffffffffffffff80821115612418578485fd5b818701915087601f83011261242b578485fd5b61243a88833560208501612080565b9450604087013591508082111561244f578384fd5b61245b88838901612330565b93506060870135915080821115612470578283fd5b5061247d87828801612152565b91505092959194509250565b60008060006060848603121561249d578283fd5b83516124a881612c9b565b6020850151604086015191945092506124c081612cb0565b809150509250925092565b6000602082840312156124dc578081fd5b813567ffffffffffffffff8111156124f2578182fd5b6108e8848285016120dd565b60006020828403121561250f578081fd5b813561136081612cb0565b60006020828403121561252b578081fd5b815161136081612cb0565b60008060408385031215612548578182fd5b823567ffffffffffffffff8082111561255f578384fd5b61256b86838701612330565b93506020850135915080821115612580578283fd5b5061258d85828601612152565b9150509250929050565b6000602082840312156125a8578081fd5b5051919050565b600080604083850312156125c1578182fd5b8251915060208301516125d381612c9b565b809150509250929050565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156126235781516001600160a01b0316875295820195908201906001016125fe565b509495945050505050565b6000815180845260208085019450808401835b8381101561262357815187529582019590820190600101612641565b6000815480845260208085019450838352808320835b8381101561262357815487529582019560019182019101612673565b15159052565b60008151808452815b818110156126ba5760208185018101518683018201520161269e565b818111156126cb5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6000606082016060835280865480835260808501915087845260209250828420845b828110156127545781546001600160a01b03168452928401926001918201910161272f565b50505083810382850152612768818761265d565b915050828103604084015261277d818561265d565b9695505050505050565b901515815260200190565b6000602082526113606020830184612695565b6020808252601490820152733737ba1030b1ba34bb329032bc3a32b739b4b7b760611b604082015260600190565b6020808252600c908201526b155b985d5d1a1bdc9a5e995960a21b604082015260600190565b6020808252600d908201526c2b37b4b2103932b1b2b4bb32b960991b604082015260600190565b602080825260159082015274135bdc99481d1a185b881bdb99481a1d5b991c9959605a1b604082015260600190565b60208082526034908201527f4c6173742072656365697665722070657263656e746167652069732063616c63604082015273756c61746564206175746f6d61746963616c6c7960601b606082015260800190565b6020808252600f908201526e213630b7359032bc3a32b739b4b7b760891b604082015260600190565b6020808252600a908201526950657263656e7461676560b01b604082015260600190565b6020808252600d908201526c4e6f206f7065726174696f6e7360981b604082015260600190565b6020808252600490820152634e616d6560e01b604082015260600190565b6020808252600f908201526e1514905394d1915497d19052531151608a1b604082015260600190565b6020808252600c908201526b4e6f2072656365697665727360a01b604082015260600190565b602080825260089082015267125b9d195c9d985b60c21b604082015260600190565b6020808252600c908201526b105b1c9958591e481a5b9a5d60a21b604082015260600190565b602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b6020808252600e908201526d1054141493d59157d1905253115160921b604082015260600190565b602080825260149082015273546f6f206561726c7920746f206578656375746560601b604082015260600190565b6000604080835260c0855160808084870152612a6d83870183612695565b9150602080890151606081818a0152868b0151848a0152808b0151915060a082818b0152898603848b01528592508a51808752848701935084858202880101858d018b5b83811015612bb157601f198a84030187528151610160612ad28583516125de565b898201518a8601528d820151612aea8f87018261268f565b5087820151612afb8987018261268f565b508a820151612b0c8c8701826125de565b50868201518188870152612b22828701826125eb565b9150508c8201518582038e870152612b3a82826125eb565b91505060e080830151612b4f8288018261268f565b505061010080830151612b648288018261268f565b50506101208083015186830382880152612b7e83826125eb565b925050506101408083015192508582038187015250612b9d818361262e565b988a01989450505090870190600101612ab1565b50909e9d5050505050505050505050505050565b600060208252825115156020830152602083015115156040830152604083015160e06060840152612bfa6101008401826125eb565b90506060840151601f19848303016080850152612c1782826125eb565b91505060018060a01b0360808501511660a084015260a084015160c084015260c0840151612c4860e08501826125de565b509392505050565b90815260200190565b60405181810167ffffffffffffffff81118282101715612c7557fe5b604052919050565b600067ffffffffffffffff821115612c9157fe5b5060209081020190565b6001600160a01b038116811461123a57600080fd5b801515811461123a57600080fdfea2646970667358221220be5f2d438a85e1c4931bd09dace6f37e3da1cdcbbed2808ff1ac0b6fe72e25cf64736f6c63430007060033

Deployed Bytecode Sourcemap

6152:14042:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6582:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7748:146;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;8091:156::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8513:567::-;;;;;;;;;;-1:-1:-1;8513:567:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7902:181::-;;;;;;;;;;-1:-1:-1;7902:181:0;;;;;:::i;:::-;;:::i;:::-;;6233:42;;;;;;;;;;;;;:::i;6284:23::-;;;;;;;;;;;;;:::i;8255:250::-;;;;;;;;;;-1:-1:-1;8255:250:0;;;;;:::i;:::-;;:::i;6710:728::-;;;;;;;;;;-1:-1:-1;6710:728:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6582:24::-;;;-1:-1:-1;;;;;6582:24:0;;:::o;7748:146::-;7785:26;;:::i;:::-;7858:28;;;7866:6;7858:28;;;;;;-1:-1:-1;;7858:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7813:32;;7866:6;;7874:11;;7858:28;;7866:6;;7858:28;;;;7866:6;;7858:28;;7866:6;7858:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7858:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7858:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7858:28:0;;;;;;;;;;;;;;;;-1:-1:-1;;;7858:28:0;;;-1:-1:-1;;7858:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7858:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7748:146;;:::o;8091:156::-;8159:16;;8132:7;;8159:21;:80;;8218:20;;8199:16;;:39;8159:80;;;8183:12;8159:80;8152:87;;8091:156;;:::o;8513:567::-;7676:9;;7651:44;;;-1:-1:-1;;;7651:44:0;;;;8585:13;;-1:-1:-1;;;;;7676:9:0;;7651:42;;:44;;;;;;;;;;;;;;7676:9;7651:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7643:77;;;;-1:-1:-1;;;7643:77:0;;;;;;;:::i;:::-;;;;;;;;;8635:11:::1;:9;:11::i;:::-;8619:12;:27;;8611:60;;;;-1:-1:-1::0;;;8611:60:0::1;;;;;;;:::i;:::-;8690:11;:18:::0;8682:48:::1;;;;-1:-1:-1::0;;;8682:48:0::1;;;;;;;:::i;:::-;8746:37;8766:16;:14;:16::i;:::-;8755:27;;;8746:37;;;;;;:::i;:::-;;;;;;;;8797:8;8794:256;;;8841:12;8822:16:::0;:31;8868:35:::1;8877:13:::0;8892:10:::1;8868:8;:35::i;:::-;8794:256;;;8965:9;;;;;;;;;-1:-1:-1::0;;;;;8965:9:0::1;-1:-1:-1::0;;;;;8940:57:0::1;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;8936:103:::0;::::1;9060:12;:10;:12::i;:::-;8513:567:::0;;;:::o;7902:181::-;7547:9;;-1:-1:-1;;;;;7547:9:0;7533:10;:23;7525:48;;;;-1:-1:-1;;;7525:48:0;;;;;;;:::i;:::-;8046:29:::1;8051:8;8061:13;8046:4;:29::i;:::-;7902:181:::0;;:::o;6233:42::-;6271:4;6233:42;:::o;6284:23::-;;;-1:-1:-1;;;;;6284:23:0;;:::o;8255:250::-;7547:9;;-1:-1:-1;;;;;7547:9:0;7533:10;:23;7525:48;;;;-1:-1:-1;;;7525:48:0;;;;;;;:::i;:::-;8352:9:::1;8348:150;8371:14;:21;8367:1;:25;8348:150;;;8414:72;8426:14;8441:1;8426:17;;;;;;;;;;;;;;8445:9;;;;;;;;;-1:-1:-1::0;;;;;8445:9:0::1;8456:29;8467:14;8482:1;8467:17;;;;;;;;;;;;;;8456:10;:29::i;:::-;8414:11;:72::i;:::-;8394:3;;8348:150;;6710:728:::0;6948:1;6928:8;6875:32;;-1:-1:-1;;;;;6928:8:0;:22;6920:47;;;;-1:-1:-1;;;6920:47:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6986:24:0;;6978:52;;;;-1:-1:-1;;;6978:52:0;;;;;;;:::i;:::-;7041:8;:21;;-1:-1:-1;;;;;;7041:21:0;;;7052:10;7041:21;;;;7073:9;:22;;-1:-1:-1;;;;;7073:22:0;;;;;;;;7106:142;;7193:8;;7170:65;;;-1:-1:-1;;;7170:65:0;;;;7163:73;;-1:-1:-1;;;;;7193:8:0;;7170:63;;:65;;;;;;;;;;;;;;7193:8;7170:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7163:6;:73::i;:::-;7150:86;;7106:142;7261:27;;;;;;7292:13;7261:44;7258:133;;7344:35;7350:10;7362:16;7344:5;:35::i;:::-;7322:57;;7258:133;7401:29;7406:8;7416:13;7401:4;:29::i;:::-;6710:728;;;;;;:::o;9088:550::-;9130:4;9147:40;:38;:40::i;:::-;9227:9;;9202:102;;-1:-1:-1;;;9202:102:0;;-1:-1:-1;;;;;9227:9:0;;;;9202:49;;:102;;9252:17;;9271:13;;9286:17;;9202:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9198:165;;-1:-1:-1;9346:5:0;9339:12;;9198:165;9377:9;9373:236;9396:17;:24;9392:28;;9373:236;;;9528:17;9546:1;9528:20;;;;;;;;;;;;;;;;9509:13;9523:1;9509:16;;;;;;;;;;;;;;;;9482:21;9504:1;9482:24;;;;;;;;;;;;;;;;:43;:66;9445:32;9456:17;9474:1;9456:20;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9456:20:0;9445:10;:32::i;:::-;:104;9442:156;;9577:5;9570:12;;;;;9442:156;9422:3;;9373:236;;;;9626:4;9619:11;;9088:550;:::o;12306:735::-;12389:9;12385:649;12409:11;:18;12405:22;;12385:649;;;12449:40;12492:11;12504:1;12492:14;;;;;;;;;;;;;;;;;12449:57;;;;;;;;12492:14;;;;;;;12449:57;;-1:-1:-1;;;;;12449:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12492:14;;12449:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12449:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12449:57:0;;;;;;;;;;;;;;;;-1:-1:-1;;;12449:57:0;;;-1:-1:-1;;12449:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12449:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12521:16;12540:118;12562:9;:27;;;12591:9;:26;;;12619:9;:38;;;12540:21;:118::i;:::-;12676:19;;;;12521:137;;-1:-1:-1;;;;;;12676:33:0;12673:350;;12730:150;12742:9;:27;;;12771:8;12781:14;12797:6;:29;;;12828:9;:19;;;12849:9;:30;;;12730:11;:150::i;:::-;12673:350;;;12921:86;12927:9;12938:8;12948:14;12964:6;:29;;;12995:11;12921:5;:86::i;:::-;-1:-1:-1;;12429:3:0;;12385:649;;;;12306:735;;:::o;11954:344::-;11999:9;11995:121;12018:17;:24;12014:28;;11995:121;;;12071:11;:33;12083:17;12101:1;12083:20;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12083:20:0;12071:33;;;;;;;;;;;;12064:40;12083:20;12044:3;11995:121;;;-1:-1:-1;12126:24:0;12133:17;;12126:24;:::i;:::-;12161;12168:17;;12161:24;:::i;:::-;12196:20;12203:13;;12196:20;:::i;:::-;12227:24;12234:17;;12227:24;:::i;:::-;12262:28;12269:21;;12262:28;:::i;:::-;11954:344::o;18057:445::-;18207:24;;18191:42;;;;;;;18237:13;18191:59;;18183:76;;;;-1:-1:-1;;;18183:76:0;;;;;;;:::i;:::-;18314:1;18278:19;:33;;;:37;18270:58;;;;-1:-1:-1;;;18270:58:0;;;;;;;:::i;:::-;6271:4;18347:19;:42;;;:56;18339:79;;;;-1:-1:-1;;;18339:79:0;;;;;;;:::i;:::-;18429:28;;;;18438:19;;18429:6;;:28;;:6;;:28;;;;;;:::i;:::-;-1:-1:-1;18429:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;18468:26;18483:10;18468:14;:26::i;11179:240::-;11243:7;-1:-1:-1;;;;;11266:26:0;;11263:86;;-1:-1:-1;11316:21:0;11309:28;;11263:86;11366:45;;-1:-1:-1;;;11366:45:0;;-1:-1:-1;;;;;11366:30:0;;;;;:45;;11405:4;;11366:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11359:52;11179:240;-1:-1:-1;;11179:240:0:o;16370:391::-;16467:10;16464:48;;16494:7;;16464:48;-1:-1:-1;;;;;16525:31:0;;16522:178;;16574:11;16590:2;-1:-1:-1;;;;;16590:7:0;16604:5;16590:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16573:41;;;16637:6;16629:38;;;;-1:-1:-1;;;16629:38:0;;;;;;;:::i;:::-;16682:7;;;16522:178;16710:43;16724:17;16743:2;16747:5;16710:13;:43::i;19692:499::-;19743:12;19965:21;19955:8;19951:36;-1:-1:-1;;;;;19837:169:0;19817:1;19792:229;20056:2;20053:1;20050;20043:16;20035:24;-1:-1:-1;20080:17:0;;20115:58;;;;20073:100;;20115:58;20145:9;20073:100;;19777:407;;;:::o;17441:608::-;17512:23;17650:1;17647;17637:7;17631:14;17624:4;17615:7;17611:18;17608:1;17598:8;17591:5;17586:66;17678:16;17728:4;17722:11;17708:25;;17766:4;17754:10;17747:24;17831:4;17819:10;17815:21;17892:4;17889:1;17865:22;17850:47;17924:33;;;17918:4;17911:47;17979:6;17986:45;;;;17972:59;;17986:45;18025:4;18001:22;17994:36;17972:59;;;;;17557:485;;;;:::o;9646:446::-;9719:9;9715:370;9738:11;:18;9734:22;;9715:370;;;9778:40;9821:11;9833:1;9821:14;;;;;;;;;;;;;;;;;9778:57;;;;;;;;9821:14;;;;;;;9778:57;;-1:-1:-1;;;;;9778:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9821:14;;9778:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9778:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9778:57:0;;;;;;;;;;;;;;;;-1:-1:-1;;;9778:57:0;;;-1:-1:-1;;9778:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9778:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9850:223;9899:1;-1:-1:-1;;;;;9868:33:0;:9;:19;;;-1:-1:-1;;;;;9868:33:0;;;:57;;;;;9905:9;:20;;;9868:57;:100;;9941:27;;9868:100;;;9936:1;9868:100;9970:9;:26;;;9998:9;:38;;;10038:9;:34;;;9850:17;:223::i;:::-;-1:-1:-1;9758:3:0;;9715:370;;;;9646:446::o;11427:519::-;11547:7;11571:23;11567:74;;-1:-1:-1;11618:11:0;11611:18;;11567:74;-1:-1:-1;;;;;11672:25:0;;11651:18;11672:25;;;:11;:25;;;;;;11740:17;:29;;11672:25;;11740:29;;;;;;;;;;;;;;11773:1;11740:34;;:103;;11816:12;-1:-1:-1;;;;;11809:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11740:103;;;11777:17;11795:10;11777:29;;;;;;;;;;;;;;;;11740:103;11708:17;11726:10;11708:29;;;;;;;;;;;;;;;;;:135;11934:4;;11896:18;;;11895:34;11862:17;11880:10;11862:29;;;;;;;;;;;;;;;;:68;11861:77;;;;;;11854:84;;;11427:519;;;;;;:::o;15007:1355::-;15244:11;15218:23;-1:-1:-1;;;;;15299:28:0;;;:102;;15334:67;15361:15;15378:22;15334:26;:67::i;:::-;15299:102;;;15330:1;15299:102;15268:133;;15412:68;15424:17;15443:14;15459:20;15412:11;:68::i;:::-;15544:24;15614:8;;15591:52;;;-1:-1:-1;;;15591:52:0;;;;15491:39;;;;;15544:24;;-1:-1:-1;;;;;15614:8:0;;15591:50;;:52;;;;;;;;;;;15614:8;15591:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15543:100;;;;15677:16;15697:1;15677:21;:48;;;-1:-1:-1;;;;;;15702:23:0;;;15677:48;:116;;15732:61;15759:15;15776:16;15732:26;:61::i;:::-;15677:116;;;15728:1;15677:116;15654:139;;15804:63;15816:17;15835:9;15846:20;15804:11;:63::i;:::-;15878:39;;;;;;15930:28;15989:273;16031:1;16012:9;:16;:20;16008:1;:24;15989:273;;;16054:142;16066:17;16085:9;16095:1;16085:12;;;;;;;;;;;;;;16122:73;16149:20;16171;16192:1;16171:23;;;;;;;;;;;;;;16122:26;:73::i;:::-;16099:96;;;16054:11;:142::i;:::-;16211:39;;;;;16034:3;;15989:273;;;;16274:80;16286:17;16305:9;16334:1;16315:9;:16;:20;16305:31;;;;;;;;;;;;;;16338:15;16274:11;:80::i;:::-;15007:1355;;;;;;;;;;;:::o;13049:1738::-;13219:19;13241:11;:78;;13318:1;13241:78;;;13255:60;13282:8;13292:22;13255:26;:60::i;:::-;13219:100;;13333:23;13367:9;:19;;;-1:-1:-1;;;;;13362:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13332:62;;;;13410:9;:19;;;13407:118;;;13446:18;;;;13465:25;;13498:15;;13446:18;-1:-1:-1;;13465:29:0;;;13446:49;;;;;;;;;;;:67;-1:-1:-1;;;;;13446:67:0;;;-1:-1:-1;;;;;13446:67:0;;;;;13407:118;13559:18;;;;13578:25;;13537:19;;13559:18;-1:-1:-1;;13578:29:0;;;13559:49;;;;;;;;;;;;13537:71;;13621:24;13648:316;;;;;;;;13671:9;:20;;;13648:316;;;;;;13706:9;:19;;;13648:316;;;;;;13740:9;:32;;;13648:316;;;;13787:9;:18;;;13648:316;;;;13820:9;:20;;;:68;;13861:27;;13820:68;;;13843:15;13820:68;-1:-1:-1;;;;;13648:316:0;;;;;13914:11;13903:8;:22;13648:316;;;;13948:4;-1:-1:-1;;;;;13648:316:0;;;;13621:343;;14011:1;-1:-1:-1;;;;;13980:33:0;:8;:19;;;-1:-1:-1;;;;;13980:33:0;;;:57;;;;-1:-1:-1;14018:19:0;;14017:20;13980:57;13977:160;;;14054:71;14067:8;:19;;;14088:9;:19;;;14109:8;:15;;;14054:12;:71::i;:::-;14180:19;;14149:17;;14177:224;;;14233:9;:19;;;-1:-1:-1;;;;;14228:39:0;;14276:8;14286;14228:67;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14216:79;;14177:224;;;14345:9;:19;;;-1:-1:-1;;;;;14340:39:0;;14380:8;14340:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14328:61;;14177:224;14416:11;14413:148;;;14444:105;14456:9;:20;;;:63;;14492:27;;14456:63;;;14487:1;14456:63;14521:14;14537:11;14444;:105::i;:::-;14571:208;14583:9;:19;;;:46;;14618:11;14583:46;;;14613:1;14583:46;14631:9;14642:11;:41;;14669:14;14642:41;;;14664:1;14642:41;14685:11;:40;;14703:22;14685:40;;;14699:1;14685:40;14727:9;:19;;;14748:9;:30;;;14571:11;:208::i;:::-;13049:1738;;;;;;;;;;:::o;18510:972::-;18598:18;18605:11;;18598:18;:::i;:::-;18631:9;18627:848;18650:10;:17;18646:1;:21;18627:848;;;18689:40;18732:10;18743:1;18732:13;;;;;;;;;;;;;;18689:56;;18797:1;18768:9;:19;;;:26;:30;18760:55;;;;-1:-1:-1;;;18760:55:0;;;;;;;:::i;:::-;18909:1;18880:9;:19;;;:26;:30;18838:9;:30;;;:37;:73;18830:138;;;;-1:-1:-1;;;18830:138:0;;;;;;;:::i;:::-;18983:18;19024:9;19020:223;19072:1;19043:9;:19;;;:26;:30;19039:1;:34;19020:223;;;19113:9;:30;;;19144:1;19113:33;;;;;;;;;;;;;;19099:47;;;;19207:1;-1:-1:-1;;;;;19173:36:0;:9;:19;;;19193:1;19173:22;;;;;;;;;;;;;;-1:-1:-1;;;;;19173:36:0;;;19165:62;;;;-1:-1:-1;;;19165:62:0;;;;;;;:::i;:::-;19075:3;;19020:223;;;-1:-1:-1;19265:19:0;;;;19285:26;;19328:1;;19265:19;-1:-1:-1;;19285:30:0;;;19265:51;;;;;;;;;;;;-1:-1:-1;;;;;19265:65:0;;;19257:91;;;;-1:-1:-1;;;19257:91:0;;;;;;;:::i;:::-;6271:4;19371:10;:24;19363:58;;;;-1:-1:-1;;;19363:58:0;;;;;;;:::i;:::-;19436:11;:27;;;;;;;-1:-1:-1;19436:27:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19436:27:0;;;-1:-1:-1;;;;;;19436:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19436:27:0;;;;;-1:-1:-1;;19436:27:0;;;-1:-1:-1;;19436:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;19453:9;;19436:27;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19436:27:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19436:27:0;;;;;;;;;;;;;;;;;-1:-1:-1;;19436:27:0;;;-1:-1:-1;;19436:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19436:27:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;18669:3:0;;;;;-1:-1:-1;18627:848:0;;-1:-1:-1;;18627:848:0;17104:329;17200:23;17226:104;17232:17;17274:43;;;17319:2;17323:5;17251:78;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;17251:78:0;;;;;;;;;;;;;;-1:-1:-1;;;;;17251:78:0;-1:-1:-1;;;;;;17251:78:0;;;;;;;;;;17226:5;:104::i;:::-;17200:130;;17349:10;:17;17370:1;17349:22;:56;;;;17386:10;17375:30;;;;;;;;;;;;:::i;:::-;17341:84;;;;-1:-1:-1;;;17341:84:0;;;;;;;:::i;:::-;17104:329;;;;:::o;10100:1071::-;10268:21;10265:59;;10306:7;;10265:59;-1:-1:-1;;;;;10355:30:0;;10336:16;10355:30;;;:11;:30;;;;;;10401:17;:24;:29;;:81;;;10465:17;-1:-1:-1;;;;;10434:48:0;:17;10452:8;10434:27;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10434:27:0;:48;;10401:81;10398:427;;;-1:-1:-1;10544:17:0;:24;;-1:-1:-1;;;;;10499:30:0;;;;;;:11;:30;;;;;;;:70;;;10584:41;;;;;;;;;;;-1:-1:-1;;;;;;10584:41:0;;;;;;;10640:13;:21;;;;;;;;;;;;;10676:17;:25;;;;;;;;;;;;;;;;;10716:21;10743:29;10511:17;10743:10;:29::i;:::-;10716:57;;;;;;;;-1:-1:-1;10716:57:0;;;;;;;;;;;;;10788:17;:25;;;;;;;;;;;;10398:427;10835:14;10852:88;10874:17;10893:16;10911:28;10852:21;:88::i;:::-;10835:105;;10954:24;10951:213;;;11055:6;11025:17;11043:8;11025:27;;;;;;;;;;;;;;;;:36;10995:17;11013:8;10995:27;;;;;;;;;;;;;;;;;:66;10951:213;;;11146:6;11120:13;11134:8;11120:23;;;;;;;;;;;;;;;;:32;11094:13;11108:8;11094:23;;;;;;;;;;;;;;;;;:58;10951:213;10100:1071;;;;;;:::o;14795:204::-;14900:7;14987:4;;14944:23;;;14943:39;14928:11;:55;14927:64;;;;;;;14795:204;-1:-1:-1;;;14795:204:0:o;16769:327::-;16865:23;16891:103;16897:17;16939:42;;;16983:2;16987:5;16916:77;;;;;;;;;:::i;16891:103::-;16865:129;;17013:10;:17;17034:1;17013:22;:56;;;;17050:10;17039:30;;;;;;;;;;;;:::i;:::-;17005:83;;;;-1:-1:-1;;;17005:83:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;14:400:1;;114:18;106:6;103:30;100:2;;;136:9;100:2;165:58;211:2;188:17;;-1:-1:-1;;184:31:1;217:4;180:42;165:58;:::i;:::-;156:67;;246:6;239:5;232:21;286:3;277:6;272:3;268:16;265:25;262:2;;;303:1;300;293:12;262:2;352:6;347:3;340:4;333:5;329:16;316:43;406:1;399:4;390:6;383:5;379:18;375:29;368:40;90:324;;;;;:::o;419:138::-;489:20;;518:33;489:20;518:33;:::i;562:782::-;;675:3;668:4;660:6;656:17;652:27;642:2;;697:5;690;683:20;642:2;737:6;724:20;763:4;787:65;802:49;848:2;802:49;:::i;:::-;787:65;:::i;:::-;886:15;;;917:12;;;;949:15;;;995:11;;;983:24;;979:33;;976:42;-1:-1:-1;973:2:1;;;1035:5;1028;1021:20;973:2;1061:5;1075:240;1089:2;1086:1;1083:9;1075:240;;;1160:3;1147:17;1177:33;1204:5;1177:33;:::i;:::-;1223:18;;1261:12;;;;1293;;;;1107:1;1100:9;1075:240;;;-1:-1:-1;1333:5:1;;632:712;-1:-1:-1;;;;;;;632:712:1:o;1349:2240::-;;1486:3;1479:4;1471:6;1467:17;1463:27;1453:2;;1508:5;1501;1494:20;1453:2;1548:6;1535:20;1574:4;1598:65;1613:49;1659:2;1613:49;:::i;1598:65::-;1697:15;;;1728:12;;;;1760:15;;;1793:5;1807:1753;1821:2;1818:1;1815:9;1807:1753;;;1901:3;1888:17;1880:6;1876:30;1929:6;1983:2;1977;1973:7;1968:2;1963:3;1959:12;1955:26;1951:35;1948:2;;;2003:5;1996;1989:20;1948:2;2037:18;2052:2;2037:18;:::i;:::-;2082:33;2111:2;2107;2103:11;2082:33;:::i;:::-;2075:5;2068:48;2173:2;2169;2165:11;2152:25;2147:2;2140:5;2136:14;2129:49;2214:30;2240:2;2236;2232:11;2214:30;:::i;:::-;2209:2;2202:5;2198:14;2191:54;2281:31;2307:3;2303:2;2299:12;2281:31;:::i;:::-;2276:2;2269:5;2265:14;2258:55;2350:34;2379:3;2375:2;2371:12;2350:34;:::i;:::-;2344:3;2337:5;2333:15;2326:59;2435:3;2431:2;2427:12;2414:26;2463:18;2510:2;2500:8;2497:16;2494:2;;;2530:5;2523;2516:20;2494:2;2575:67;2638:3;2633:2;2622:8;2618:2;2614:17;2610:26;2575:67;:::i;:::-;2569:3;2562:5;2558:15;2551:92;2693:3;2689:2;2685:12;2672:26;2656:42;;2727:2;2717:8;2714:16;2711:2;;;2747:5;2740;2733:20;2711:2;2792:67;2855:3;2850:2;2839:8;2835:2;2831:17;2827:26;2792:67;:::i;:::-;2786:3;2779:5;2775:15;2768:92;2897:31;2923:3;2919:2;2915:12;2897:31;:::i;:::-;2891:3;2884:5;2880:15;2873:56;2966:31;2992:3;2988:2;2984:12;2966:31;:::i;:::-;2960:3;2953:5;2949:15;2942:56;3021:3;3011:13;;3074:2;3070;3066:11;3053:25;3107:2;3097:8;3094:16;3091:2;;;3127:5;3120;3113:20;3091:2;3172:67;3235:3;3230:2;3219:8;3215:2;3211:17;3207:26;3172:67;:::i;:::-;3166:3;3155:15;;3148:92;-1:-1:-1;3282:11:1;;;3269:25;;3310:16;;;3307:2;;;3343:5;3336;3329:20;3307:2;;3387:67;3450:3;3445:2;3434:8;3430:2;3426:17;3422:26;3387:67;:::i;:::-;3371:14;;;3364:91;3468:18;;-1:-1:-1;;3506:12:1;;;;3538;;;;1839:1;1832:9;1807:1753;;3594:705;;3707:3;3700:4;3692:6;3688:17;3684:27;3674:2;;3729:5;3722;3715:20;3674:2;3769:6;3756:20;3795:4;3819:65;3834:49;3880:2;3834:49;:::i;3819:65::-;3918:15;;;3949:12;;;;3981:15;;;4027:11;;;4015:24;;4011:33;;4008:42;-1:-1:-1;4005:2:1;;;4067:5;4060;4053:20;4005:2;4093:5;4107:163;4121:2;4118:1;4115:9;4107:163;;;4178:17;;4166:30;;4216:12;;;;4248;;;;4139:1;4132:9;4107:163;;4304:132;4371:20;;4400:30;4371:20;4400:30;:::i;4441:883::-;;4558:4;4546:9;4541:3;4537:19;4533:30;4530:2;;;4580:5;4573;4566:20;4530:2;4617;4611:9;4659:4;4651:6;4647:17;4683:18;4751:6;4739:10;4736:22;4731:2;4719:10;4716:18;4713:46;4710:2;;;4762:9;4710:2;4793:10;4789:2;4782:22;4822:6;4813:15;;4864:9;4851:23;4837:37;;4897:2;4889:6;4886:14;4883:2;;;4913:1;4910;4903:12;4883:2;-1:-1:-1;4936:22:1;;4989:4;4981:13;;4977:23;-1:-1:-1;4967:2:1;;5014:1;5011;5004:12;4967:2;5042:73;5111:3;5106:2;5093:16;5086:4;5082:2;5078:13;5042:73;:::i;:::-;5034:6;5027:89;;5179:4;5168:9;5164:20;5151:34;5144:4;5136:6;5132:17;5125:61;5247:2;5236:9;5232:18;5219:32;5214:2;5206:6;5202:15;5195:57;5313:2;5302:9;5298:18;5285:32;5280:2;5272:6;5268:15;5261:57;;4520:804;;;;:::o;5329:263::-;;5452:2;5440:9;5431:7;5427:23;5423:32;5420:2;;;5473:6;5465;5458:22;5420:2;5510:9;5504:16;5529:33;5556:5;5529:33;:::i;5597:1203::-;;;;;5868:3;5856:9;5847:7;5843:23;5839:33;5836:2;;;5890:6;5882;5875:22;5836:2;5934:9;5921:23;5953:33;5980:5;5953:33;:::i;:::-;6005:5;-1:-1:-1;6061:2:1;6046:18;;6033:32;6084:18;6114:14;;;6111:2;;;6146:6;6138;6131:22;6111:2;6189:6;6178:9;6174:22;6164:32;;6234:7;6227:4;6223:2;6219:13;6215:27;6205:2;;6261:6;6253;6246:22;6205:2;6289:75;6356:7;6351:2;6338:16;6333:2;6329;6325:11;6289:75;:::i;:::-;6279:85;;6417:2;6406:9;6402:18;6389:32;6373:48;;6446:2;6436:8;6433:16;6430:2;;;6467:6;6459;6452:22;6430:2;6495:75;6562:7;6551:8;6540:9;6536:24;6495:75;:::i;:::-;6485:85;;6623:2;6612:9;6608:18;6595:32;6579:48;;6652:2;6642:8;6639:16;6636:2;;;6673:6;6665;6658:22;6636:2;;6701:93;6786:7;6775:8;6764:9;6760:24;6701:93;:::i;:::-;6691:103;;;5826:974;;;;;;;:::o;6805:454::-;;;;6959:2;6947:9;6938:7;6934:23;6930:32;6927:2;;;6980:6;6972;6965:22;6927:2;7017:9;7011:16;7036:33;7063:5;7036:33;:::i;:::-;7133:2;7118:18;;7112:25;7182:2;7167:18;;7161:25;7088:5;;-1:-1:-1;7112:25:1;-1:-1:-1;7195:32:1;7161:25;7195:32;:::i;:::-;7246:7;7236:17;;;6917:342;;;;;:::o;7264:374::-;;7401:2;7389:9;7380:7;7376:23;7372:32;7369:2;;;7422:6;7414;7407:22;7369:2;7467:9;7454:23;7500:18;7492:6;7489:30;7486:2;;;7537:6;7529;7522:22;7486:2;7565:67;7624:7;7615:6;7604:9;7600:22;7565:67;:::i;7643:253::-;;7752:2;7740:9;7731:7;7727:23;7723:32;7720:2;;;7773:6;7765;7758:22;7720:2;7817:9;7804:23;7836:30;7860:5;7836:30;:::i;7901:257::-;;8021:2;8009:9;8000:7;7996:23;7992:32;7989:2;;;8042:6;8034;8027:22;7989:2;8079:9;8073:16;8098:30;8122:5;8098:30;:::i;8163:716::-;;;8391:2;8379:9;8370:7;8366:23;8362:32;8359:2;;;8412:6;8404;8397:22;8359:2;8457:9;8444:23;8486:18;8527:2;8519:6;8516:14;8513:2;;;8548:6;8540;8533:22;8513:2;8576:73;8641:7;8632:6;8621:9;8617:22;8576:73;:::i;:::-;8566:83;;8702:2;8691:9;8687:18;8674:32;8658:48;;8731:2;8721:8;8718:16;8715:2;;;8752:6;8744;8737:22;8715:2;;8780:93;8865:7;8854:8;8843:9;8839:24;8780:93;:::i;:::-;8770:103;;;8349:530;;;;;:::o;8884:194::-;;9007:2;8995:9;8986:7;8982:23;8978:32;8975:2;;;9028:6;9020;9013:22;8975:2;-1:-1:-1;9056:16:1;;8965:113;-1:-1:-1;8965:113:1:o;9083:324::-;;;9223:2;9211:9;9202:7;9198:23;9194:32;9191:2;;;9244:6;9236;9229:22;9191:2;9278:9;9272:16;9262:26;;9331:2;9320:9;9316:18;9310:25;9344:33;9371:5;9344:33;:::i;:::-;9396:5;9386:15;;;9181:226;;;;;:::o;9412:106::-;-1:-1:-1;;;;;9480:31:1;9468:44;;9458:60::o;9523:469::-;;9620:5;9614:12;9647:6;9642:3;9635:19;9673:4;9702:2;9697:3;9693:12;9686:19;;9739:2;9732:5;9728:14;9760:3;9772:195;9786:6;9783:1;9780:13;9772:195;;;9851:13;;-1:-1:-1;;;;;9847:39:1;9835:52;;9907:12;;;;9942:15;;;;9883:1;9801:9;9772:195;;;-1:-1:-1;9983:3:1;;9590:402;-1:-1:-1;;;;;9590:402:1:o;9997:443::-;;10094:5;10088:12;10121:6;10116:3;10109:19;10147:4;10176:2;10171:3;10167:12;10160:19;;10213:2;10206:5;10202:14;10234:3;10246:169;10260:6;10257:1;10254:13;10246:169;;;10321:13;;10309:26;;10355:12;;;;10390:15;;;;10282:1;10275:9;10246:169;;10445:481;;10550:5;10544:12;10577:6;10572:3;10565:19;10603:4;10632:2;10627:3;10623:12;10616:19;;10656:5;10651:3;10644:18;10700:2;10695:3;10685:18;10721:3;10733:168;10747:6;10744:1;10741:13;10733:168;;;10808:13;;10796:26;;10842:12;;;;10889:1;10877:14;;;;10762:9;10733:168;;10931:93;11003:13;10996:21;10984:34;;10974:50::o;11029:477::-;;11110:5;11104:12;11137:6;11132:3;11125:19;11162:3;11174:162;11188:6;11185:1;11182:13;11174:162;;;11250:4;11306:13;;;11302:22;;11296:29;11278:11;;;11274:20;;11267:59;11203:12;11174:162;;;11354:6;11351:1;11348:13;11345:2;;;11420:3;11413:4;11404:6;11399:3;11395:16;11391:27;11384:40;11345:2;-1:-1:-1;11488:2:1;11467:15;-1:-1:-1;;11463:29:1;11454:39;;;;11495:4;11450:50;;11080:426;-1:-1:-1;;11080:426:1:o;11721:203::-;-1:-1:-1;;;;;11885:32:1;;;;11867:51;;11855:2;11840:18;;11822:102::o;12145:274::-;-1:-1:-1;;;;;12337:32:1;;;;12319:51;;12401:2;12386:18;;12379:34;12307:2;12292:18;;12274:145::o;12424:1091::-;;12761:2;12750:9;12746:18;12791:2;12780:9;12773:21;12814:6;12849;12843:13;12880:6;12872;12865:22;12918:3;12907:9;12903:19;12896:26;;12944:6;12938:4;12931:20;12970:4;12960:14;;13013:2;13007:4;12997:19;13034:4;13047:194;13061:6;13058:1;13055:13;13047:194;;;13126:13;;-1:-1:-1;;;;;13122:39:1;13110:52;;13182:12;;;;13158:1;13217:14;;;;13076:9;13047:194;;;13051:3;;;13286:9;13281:3;13277:19;13272:2;13261:9;13257:18;13250:47;13320:55;13371:3;13363:6;13320:55;:::i;:::-;13306:69;;;13423:9;13415:6;13411:22;13406:2;13395:9;13391:18;13384:50;13451:58;13502:6;13494;13451:58;:::i;:::-;13443:66;12722:793;-1:-1:-1;;;;;;12722:793:1:o;13520:187::-;13685:14;;13678:22;13660:41;;13648:2;13633:18;;13615:92::o;13712:219::-;;13859:2;13848:9;13841:21;13879:46;13921:2;13910:9;13906:18;13898:6;13879:46;:::i;13936:344::-;14138:2;14120:21;;;14177:2;14157:18;;;14150:30;-1:-1:-1;;;14211:2:1;14196:18;;14189:50;14271:2;14256:18;;14110:170::o;14285:336::-;14487:2;14469:21;;;14526:2;14506:18;;;14499:30;-1:-1:-1;;;14560:2:1;14545:18;;14538:42;14612:2;14597:18;;14459:162::o;14626:337::-;14828:2;14810:21;;;14867:2;14847:18;;;14840:30;-1:-1:-1;;;14901:2:1;14886:18;;14879:43;14954:2;14939:18;;14800:163::o;14968:345::-;15170:2;15152:21;;;15209:2;15189:18;;;15182:30;-1:-1:-1;;;15243:2:1;15228:18;;15221:51;15304:2;15289:18;;15142:171::o;15318:416::-;15520:2;15502:21;;;15559:2;15539:18;;;15532:30;15598:34;15593:2;15578:18;;15571:62;-1:-1:-1;;;15664:2:1;15649:18;;15642:50;15724:3;15709:19;;15492:242::o;15739:339::-;15941:2;15923:21;;;15980:2;15960:18;;;15953:30;-1:-1:-1;;;16014:2:1;15999:18;;15992:45;16069:2;16054:18;;15913:165::o;16083:334::-;16285:2;16267:21;;;16324:2;16304:18;;;16297:30;-1:-1:-1;;;16358:2:1;16343:18;;16336:40;16408:2;16393:18;;16257:160::o;16422:337::-;16624:2;16606:21;;;16663:2;16643:18;;;16636:30;-1:-1:-1;;;16697:2:1;16682:18;;16675:43;16750:2;16735:18;;16596:163::o;16764:327::-;16966:2;16948:21;;;17005:1;16985:18;;;16978:29;-1:-1:-1;;;17038:2:1;17023:18;;17016:34;17082:2;17067:18;;16938:153::o;17096:339::-;17298:2;17280:21;;;17337:2;17317:18;;;17310:30;-1:-1:-1;;;17371:2:1;17356:18;;17349:45;17426:2;17411:18;;17270:165::o;17440:336::-;17642:2;17624:21;;;17681:2;17661:18;;;17654:30;-1:-1:-1;;;17715:2:1;17700:18;;17693:42;17767:2;17752:18;;17614:162::o;17781:331::-;17983:2;17965:21;;;18022:1;18002:18;;;17995:29;-1:-1:-1;;;18055:2:1;18040:18;;18033:38;18103:2;18088:18;;17955:157::o;18117:336::-;18319:2;18301:21;;;18358:2;18338:18;;;18331:30;-1:-1:-1;;;18392:2:1;18377:18;;18370:42;18444:2;18429:18;;18291:162::o;18458:343::-;18660:2;18642:21;;;18699:2;18679:18;;;18672:30;-1:-1:-1;;;18733:2:1;18718:18;;18711:49;18792:2;18777:18;;18632:169::o;18806:338::-;19008:2;18990:21;;;19047:2;19027:18;;;19020:30;-1:-1:-1;;;19081:2:1;19066:18;;19059:44;19135:2;19120:18;;18980:164::o;19149:344::-;19351:2;19333:21;;;19390:2;19370:18;;;19363:30;-1:-1:-1;;;19424:2:1;19409:18;;19402:50;19484:2;19469:18;;19323:170::o;19498:3048::-;;19845:2;19874;19863:9;19856:21;19896:3;19934:6;19928:13;19960:4;20000:2;19995;19984:9;19980:18;19973:30;20026:52;20074:2;20063:9;20059:18;20045:12;20026:52;:::i;:::-;20012:66;;20097:4;20138:2;20130:6;20126:15;20120:22;20161:2;20199;20194;20183:9;20179:18;20172:30;20256:2;20248:6;20244:15;20238:22;20233:2;20222:9;20218:18;20211:50;20298:2;20290:6;20286:15;20280:22;20270:32;;20321:3;20360:2;20355;20344:9;20340:18;20333:30;20411:9;20403:6;20399:22;20394:2;20383:9;20379:18;20372:50;20442:6;20431:17;;20477:6;20471:13;20508:6;20500;20493:22;20543:2;20535:6;20531:15;20524:22;;20603:2;20597;20589:6;20585:15;20577:6;20573:28;20569:37;20641:2;20633:6;20629:15;20662:4;20675:1842;20689:6;20686:1;20683:13;20675:1842;;;20779:2;20775:7;20766:6;20758;20754:19;20750:33;20745:3;20738:46;20813:6;20807:13;20844:6;20863:39;20895:6;20890:2;20884:9;20863:39;:::i;:::-;20953:2;20949;20945:11;20939:18;20934:2;20926:6;20922:15;20915:43;21007:2;21003;20999:11;20993:18;21024:50;21070:2;21062:6;21058:15;21042:14;21024:50;:::i;:::-;;21123:2;21119;21115:11;21109:18;21140:50;21186:2;21178:6;21174:15;21158:14;21140:50;:::i;:::-;;21239:2;21235;21231:11;21225:18;21256:53;21305:2;21297:6;21293:15;21277:14;21256:53;:::i;:::-;;21358:2;21354;21350:11;21344:18;21399:3;21394:2;21386:6;21382:15;21375:28;21430:68;21493:3;21485:6;21481:16;21465:14;21430:68;:::i;:::-;21416:82;;;21547:2;21543;21539:11;21533:18;21600:6;21592;21588:19;21583:2;21575:6;21571:15;21564:44;21635:58;21686:6;21670:14;21635:58;:::i;:::-;21621:72;;;21717:4;21770:3;21766:2;21762:12;21756:19;21788:51;21834:3;21826:6;21822:16;21806:14;21788:51;:::i;:::-;;;21863:6;21918:3;21914:2;21910:12;21904:19;21936:51;21982:3;21974:6;21970:16;21954:14;21936:51;:::i;:::-;;;22011:6;22066:3;22062:2;22058:12;22052:19;22121:6;22113;22109:19;22103:3;22095:6;22091:16;22084:45;22156:58;22207:6;22191:14;22156:58;:::i;:::-;22142:72;;;;22238:6;22293:3;22289:2;22285:12;22279:19;22257:41;;22348:6;22340;22336:19;22330:3;22322:6;22318:16;22311:45;;22379:58;22430:6;22414:14;22379:58;:::i;:::-;22495:12;;;;22369:68;-1:-1:-1;;;22460:15:1;;;;20711:1;20704:9;20675:1842;;;-1:-1:-1;22534:6:1;;19825:2721;-1:-1:-1;;;;;;;;;;;;;;19825:2721:1:o;22551:1013::-;;22730:2;22719:9;22712:21;22789:6;22783:13;22776:21;22769:29;22764:2;22753:9;22749:18;22742:57;22867:2;22859:6;22855:15;22849:22;22842:30;22835:38;22830:2;22819:9;22815:18;22808:66;22921:2;22913:6;22909:15;22903:22;22961:4;22956:2;22945:9;22941:18;22934:32;22989:69;23053:3;23042:9;23038:19;23024:12;22989:69;:::i;:::-;22975:83;;23107:2;23099:6;23095:15;23089:22;23180:2;23176:7;23164:9;23156:6;23152:22;23148:36;23142:3;23131:9;23127:19;23120:65;23208:58;23259:6;23243:14;23208:58;:::i;:::-;23194:72;;;23349:1;23345;23340:3;23336:11;23332:19;23325:3;23317:6;23313:16;23307:23;23303:49;23297:3;23286:9;23282:19;23275:78;23408:3;23400:6;23396:16;23390:23;23384:3;23373:9;23369:19;23362:52;23463:3;23455:6;23451:16;23445:23;23477:58;23529:4;23518:9;23514:20;23498:14;23477:58;:::i;:::-;-1:-1:-1;23552:6:1;22702:862;-1:-1:-1;;;22702:862:1:o;23569:177::-;23715:25;;;23703:2;23688:18;;23670:76::o;23751:242::-;23821:2;23815:9;23851:17;;;23898:18;23883:34;;23919:22;;;23880:62;23877:2;;;23945:9;23877:2;23972;23965:22;23795:198;;-1:-1:-1;23795:198:1:o;23998:183::-;;24097:18;24089:6;24086:30;24083:2;;;24119:9;24083:2;-1:-1:-1;24170:4:1;24151:17;;;24147:28;;24073:108::o;24186:133::-;-1:-1:-1;;;;;24263:31:1;;24253:42;;24243:2;;24309:1;24306;24299:12;24324:120;24412:5;24405:13;24398:21;24391:5;24388:32;24378:2;;24434:1;24431;24424:12

Swarm Source

ipfs://be5f2d438a85e1c4931bd09dace6f37e3da1cdcbbed2808ff1ac0b6fe72e25cf

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  ]

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.