ETH Price: $2,345.05 (+1.04%)

Contract

0x008d7B79906BFd0A57c952176e00B6B8C2033a7C
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Execute130285442021-08-15 8:00:091122 days ago1629014409IN
0x008d7B79...8C2033a7C
0 ETH0.0397046139
Execute130221252021-08-14 8:16:411123 days ago1628929001IN
0x008d7B79...8C2033a7C
0 ETH0.0488672148
Execute130092972021-08-12 8:40:501125 days ago1628757650IN
0x008d7B79...8C2033a7C
0 ETH0.0453968644
Execute129964672021-08-10 9:04:051127 days ago1628586245IN
0x008d7B79...8C2033a7C
0 ETH0.0722827571
Execute127531032021-07-03 6:49:031165 days ago1625294943IN
0x008d7B79...8C2033a7C
0 ETH0.0003684510.956
Execute127531022021-07-03 6:48:551165 days ago1625294935IN
0x008d7B79...8C2033a7C
0 ETH0.0172116620
Execute127467022021-07-02 6:53:011166 days ago1625208781IN
0x008d7B79...8C2033a7C
0 ETH0.0172116620
Execute127403022021-07-01 7:00:281167 days ago1625122828IN
0x008d7B79...8C2033a7C
0 ETH0.0197578823.24000242
Execute127339012021-06-30 7:03:151168 days ago1625036595IN
0x008d7B79...8C2033a7C
0 ETH0.0154904918
Execute127275012021-06-29 6:53:561169 days ago1624949636IN
0x008d7B79...8C2033a7C
0 ETH0.0175536620
Execute127210992021-06-28 7:06:421170 days ago1624864002IN
0x008d7B79...8C2033a7C
0 ETH0.0128643315
Execute127028472021-06-25 10:55:311173 days ago1624618531IN
0x008d7B79...8C2033a7C
0 ETH0.0002172810
Execute127018962021-06-25 7:17:141173 days ago1624605434IN
0x008d7B79...8C2033a7C
0 ETH0.0006557819.5
Execute127018962021-06-25 7:17:141173 days ago1624605434IN
0x008d7B79...8C2033a7C
0 ETH0.0169267419.5
Execute126954902021-06-24 7:13:351174 days ago1624518815IN
0x008d7B79...8C2033a7C
0 ETH0.0092156710.5
Execute126948552021-06-24 4:51:591174 days ago1624510319IN
0x008d7B79...8C2033a7C
0 ETH0.000201786
Execute126947952021-06-24 4:42:041174 days ago1624509724IN
0x008d7B79...8C2033a7C
0 ETH0.000336310
Execute126947002021-06-24 4:19:131174 days ago1624508353IN
0x008d7B79...8C2033a7C
0 ETH0.0004371913
Execute126945512021-06-24 3:46:161174 days ago1624506376IN
0x008d7B79...8C2033a7C
0 ETH0.0008071224
Execute126890892021-06-23 7:29:391175 days ago1624433379IN
0x008d7B79...8C2033a7C
0 ETH0.0137219516
Execute126826462021-06-22 7:16:481176 days ago1624346208IN
0x008d7B79...8C2033a7C
0 ETH0.0163510719
Execute126762332021-06-21 7:13:581177 days ago1624259638IN
0x008d7B79...8C2033a7C
0 ETH0.0460060153
Execute126698032021-06-20 7:06:451178 days ago1624172805IN
0x008d7B79...8C2033a7C
0 ETH0.0094664111
Execute126633792021-06-19 7:03:471179 days ago1624086227IN
0x008d7B79...8C2033a7C
0 ETH0.0086058310
Execute126569442021-06-18 6:48:061180 days ago1623998886IN
0x008d7B79...8C2033a7C
0 ETH0.0004034112
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
130413442021-08-17 7:20:121120 days ago1629184812
0x008d7B79...8C2033a7C
0.44915694 ETH
130413442021-08-17 7:20:121120 days ago1629184812
0x008d7B79...8C2033a7C
0.03076417 ETH
130413442021-08-17 7:20:121120 days ago1629184812
0x008d7B79...8C2033a7C
0.13536236 ETH
130413442021-08-17 7:20:121120 days ago1629184812
0x008d7B79...8C2033a7C
0.61528349 ETH
130349442021-08-16 7:34:521121 days ago1629099292
0x008d7B79...8C2033a7C
0.47661892 ETH
130349442021-08-16 7:34:521121 days ago1629099292
0x008d7B79...8C2033a7C
0.03264513 ETH
130349442021-08-16 7:34:521121 days ago1629099292
0x008d7B79...8C2033a7C
0.14363858 ETH
130349442021-08-16 7:34:521121 days ago1629099292
0x008d7B79...8C2033a7C
0.65290264 ETH
130285442021-08-15 8:00:091122 days ago1629014409
0x008d7B79...8C2033a7C
0.47518735 ETH
130285442021-08-15 8:00:091122 days ago1629014409
0x008d7B79...8C2033a7C
0.03254707 ETH
130285442021-08-15 8:00:091122 days ago1629014409
0x008d7B79...8C2033a7C
0.14320714 ETH
130285442021-08-15 8:00:091122 days ago1629014409
0x008d7B79...8C2033a7C
0.65094158 ETH
130221252021-08-14 8:16:411123 days ago1628929001
0x008d7B79...8C2033a7C
0.48207813 ETH
130221252021-08-14 8:16:411123 days ago1628929001
0x008d7B79...8C2033a7C
0.03301905 ETH
130221252021-08-14 8:16:411123 days ago1628929001
0x008d7B79...8C2033a7C
0.14528382 ETH
130221252021-08-14 8:16:411123 days ago1628929001
0x008d7B79...8C2033a7C
0.66038101 ETH
130221002021-08-14 8:11:551123 days ago1628928715
0x008d7B79...8C2033a7C
0.48207813 ETH
130221002021-08-14 8:11:551123 days ago1628928715
0x008d7B79...8C2033a7C
0.03301905 ETH
130221002021-08-14 8:11:551123 days ago1628928715
0x008d7B79...8C2033a7C
0.14528382 ETH
130221002021-08-14 8:11:551123 days ago1628928715
0x008d7B79...8C2033a7C
0.66038101 ETH
130220982021-08-14 8:11:331123 days ago1628928693
0x008d7B79...8C2033a7C
0.48207813 ETH
130220982021-08-14 8:11:331123 days ago1628928693
0x008d7B79...8C2033a7C
0.03301905 ETH
130220982021-08-14 8:11:331123 days ago1628928693
0x008d7B79...8C2033a7C
0.14528382 ETH
130220982021-08-14 8:11:331123 days ago1628928693
0x008d7B79...8C2033a7C
0.66038101 ETH
130156982021-08-13 8:19:491124 days ago1628842789
0x008d7B79...8C2033a7C
0.55899496 ETH
View All Internal Transactions
Loading...
Loading

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

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"}]

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  ]
[ 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.