Contract 0x8562746aeab494b29394577f15e865d45f314381

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf7b7bdd89cdcb0c04aa3b428276eb98a4f2875a1bb9d52cec3b84df64bad489cWithdraw Treasur...67453452020-11-07 18:04:37388 days 4 hrs ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000040323
0xbacb455b488461ed970b69d0ed6d3d907110f7a964956a6a2218d4364e8654d2Withdraw Treasur...67453382020-11-07 18:04:19388 days 4 hrs ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.00040361
0x47cae4bf17712852e6bd81505beacc18b66a72c252168c297bc8d493028e0b65Execute Meta Tra...66339622020-11-05 2:15:47390 days 19 hrs ago0xccc51ee93e9db01c670b5ccda59f73342135475b IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000098
0x3d00ea21db4d631ec0cf5ccf98121af18bd938e647b8148ffed1879fc465944fExecute Meta Tra...66338382020-11-05 2:11:31390 days 19 hrs ago0xc7aef72ebe28c68383cf33319163c3d996aad1ba IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000097976
0xc25ff2505dfc5e5679e899ac2bc9f969a934c3cca1fb850a152e30cf6c306e9cEnable Account66189082020-11-04 17:38:19391 days 4 hrs ago0x016900972145b49648b90866ce0b15c052cb203c IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000057332
0xa8042b863e883625a7aeda311958e1c73683a8da2d5f10e46eabf925c707eaecEnable Account66134222020-11-04 14:29:43391 days 7 hrs ago0x016900972145b49648b90866ce0b15c052cb203c IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000125732
0xe2894671410f4ba26237c4f4e4491b81116cf7b2d66235d32eb6a4744aec1980Enable Account65935862020-11-04 3:07:51391 days 18 hrs ago0x564d198c6dbc18ef1f4d196693f9babf5d2611c7 IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000071665
0x918efbf862864c2aac88651e59e60fd3609abeb3b135a40d4f55be74935a8f51Execute Meta Tra...65905472020-11-04 1:23:25391 days 20 hrs ago0x1efcbae640386cd0071caa64f76e50ba7b7458bb IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.0001225
0x5d2ebb88cd9193c068e4cc5cdc312c2ca009ad38227b17c4bf96a06074043fbcExecute Meta Tra...65870042020-11-03 23:21:35391 days 22 hrs ago0xdbf0bc79c7f6af4e9708cbc3eeb53478315f979a IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000049
0xaa885b0cb86a09061e2dec788ec5c62ddb5766521972c5c64e3821f540150f71Enable Account65869342020-11-03 23:19:11391 days 22 hrs ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000032854
0x7a20024bfa7eb5a3f918bb258089fe94c4a2590e4f7a8142479a74c77e71776dEnable Account65868952020-11-03 23:17:53391 days 22 hrs ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000032854
0x0d07e0dcabea7b8af99b9438369f96b8d37459db6a80cc1ed4f3b7120608b3caExecute Meta Tra...65867762020-11-03 23:13:47391 days 22 hrs ago0x4032a039d9035571912d6e74adf403561561e9d8 IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000049
0x682a0223d9afacf01108d1cd9c456ee365a74773865859b6926b760cb07a67baExecute Meta Tra...65866572020-11-03 23:09:41391 days 22 hrs ago0x1efcbae640386cd0071caa64f76e50ba7b7458bb IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.0000832
0x1977137a64f1604d7c02ce6e4c2ca18406adc5dbc7335e3d232f67418115f198Execute Meta Tra...65865922020-11-03 23:07:27391 days 22 hrs ago0xc7aef72ebe28c68383cf33319163c3d996aad1ba IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.0000832
0xe5fcd1dfa38f255b369cec28e66709877b283dc1a674a7f5c9f615daee699e1dExecute Meta Tra...65865832020-11-03 23:07:09391 days 22 hrs ago0x677fc2a06675e3fff07631b824d7e1e6b5813a1f IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000049
0xf6c9384b9c40b0dda47de0daf1f41e61eed11786fb1bfeb9b5410f2dd6c0c2e6Execute Meta Tra...65865552020-11-03 23:06:09391 days 23 hrs ago0x177395507b2ccf79970069c6cace235dbb1fd34e IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.0000832
0xb8408aa8a0dfc4218573fe34d8c699c953542707cf88350df2bb8faf3b449a47Execute Meta Tra...65865462020-11-03 23:05:51391 days 23 hrs ago0xdbf0bc79c7f6af4e9708cbc3eeb53478315f979a IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000049
0xa908488a17271c11e4490d3f0fac1b4d60aada22e3f01abfdd2a676e8be12602Execute Meta Tra...65860602020-11-03 22:49:11391 days 23 hrs ago0x4032a039d9035571912d6e74adf403561561e9d8 IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000048988
0x878d2228f1d93190bcb88532abe04902e866058b38280b92c97a7cca810c622eExecute Meta Tra...65822502020-11-03 20:38:11392 days 1 hr ago0x677fc2a06675e3fff07631b824d7e1e6b5813a1f IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000083188
0x17b9b6751061fea44ab82f82b087e719fb5e93a73019c0d74ee8827ebec427e6Execute Meta Tra...65819312020-11-03 20:27:13392 days 1 hr ago0x4455d7d6a8f35aa84e64703ee8bf3fb838014f70 IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000049
0xf408448c1e34c02eaace898cc1a1be6f95634257f8444419dc93ad9a95cb343dExecute Meta Tra...65818362020-11-03 20:23:59392 days 1 hr ago0xdbf0bc79c7f6af4e9708cbc3eeb53478315f979a IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.0000832
0x3467fcc52294f55404ca6aa5b0727342681699433186f11a765f8d923740836cExecute Meta Tra...65806922020-11-03 19:44:39392 days 2 hrs ago0x4032a039d9035571912d6e74adf403561561e9d8 IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.0000832
0xe7f839a355ea00389bc5d3684c60d6a64ed87ef9557a64c8645fa4bae389cfafExecute Meta Tra...65806372020-11-03 19:42:45392 days 2 hrs ago0xccc51ee93e9db01c670b5ccda59f73342135475b IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000049
0x9c0ec1443b4d2f2a78c5bb27de067f1efac74c5f20032e1013cfad123351ed05Disable Account65400142020-11-02 20:26:19393 days 1 hr ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000027684
0x53c92803fc8dc100dc72e274c9ce165d9a228a970bd94ce51162fc47a19c8678Enable Account65396672020-11-02 20:14:25393 days 1 hr ago0x1fcde174c13691ef0c13fcee042e0951452c0f8a IN  0x8562746aeab494b29394577f15e865d45f3143810 MATIC0.000062866
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
dgTreasury

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-07-01
*/

// SPDX-License-Identifier: -- 🎲 --

pragma solidity ^0.7.4;

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, 'SafeMath: addition overflow');
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, 'SafeMath: subtraction overflow');
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, 'SafeMath: multiplication overflow');
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, 'SafeMath: division by zero');
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, 'SafeMath: modulo by zero');
        return a % b;
    }
}

interface ERC20Token {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 value
    );

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

contract HashChain {
    bytes32 public tail;

    function _setTail(bytes32 _tail) internal {
        tail = _tail;
    }

    function _consume(bytes32 _parent) internal {
        require(
            keccak256(
                abi.encodePacked(_parent)
            ) == tail,
            'hash-chain: wrong parent'
        );
        tail = _parent;
    }
}

contract AccessController {

    address public ceoAddress;
    address public workerAddress;

    bool public paused = false;

    // mapping (address => enumRoles) accessRoles; // multiple operators idea

    event CEOSet(address newCEO);
    event WorkerSet(address newWorker);

    event Paused();
    event Unpaused();

    constructor() {
        ceoAddress = msg.sender;
        workerAddress = msg.sender;
        emit CEOSet(ceoAddress);
        emit WorkerSet(workerAddress);
    }

    modifier onlyCEO() {
        require(
            msg.sender == ceoAddress,
            'AccessControl: CEO access denied'
        );
        _;
    }

    modifier onlyWorker() {
        require(
            msg.sender == workerAddress,
            'AccessControl: worker access denied'
        );
        _;
    }

    modifier whenNotPaused() {
        require(
            !paused,
            'AccessControl: currently paused'
        );
        _;
    }

    modifier whenPaused {
        require(
            paused,
            'AccessControl: currenlty not paused'
        );
        _;
    }

    function setCEO(address _newCEO) public onlyCEO {
        require(
            _newCEO != address(0x0),
            'AccessControl: invalid CEO address'
        );
        ceoAddress = _newCEO;
        emit CEOSet(ceoAddress);
    }

    function setWorker(address _newWorker) external {
        require(
            _newWorker != address(0x0),
            'AccessControl: invalid worker address'
        );
        require(
            msg.sender == ceoAddress || msg.sender == workerAddress,
            'AccessControl: invalid worker address'
        );
        workerAddress = _newWorker;
        emit WorkerSet(workerAddress);
    }

    function pause() external onlyWorker whenNotPaused {
        paused = true;
        emit Paused();
    }

    function unpause() external onlyCEO whenPaused {
        paused = false;
        emit Unpaused();
    }
}

contract EIP712Base {

    struct EIP712Domain {
        string name;
        string version;
        uint256 chainId;
        address verifyingContract;
    }

    bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(bytes("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"));

    bytes32 internal domainSeperator;

    constructor(string memory name, string memory version) {
      domainSeperator = keccak256(abi.encode(
			EIP712_DOMAIN_TYPEHASH,
			keccak256(bytes(name)),
			keccak256(bytes(version)),
			getChainID(),
			address(this)
		));
    }

    function getChainID() internal pure returns (uint256 id) {
		assembly {
			id := 5 // set to Goerli for now, Mainnet later
		}
	}

    function getDomainSeperator() private view returns(bytes32) {
		return domainSeperator;
	}

    /**
    * Accept message hash and returns hash message in EIP712 compatible form
    * So that it can be used to recover signer from signature signed using EIP712 formatted data
    * https://eips.ethereum.org/EIPS/eip-712
    * "\\x19" makes the encoding deterministic
    * "\\x01" is the version byte to make it compatible to EIP-191
    */
    function toTypedMessageHash(bytes32 messageHash) internal view returns(bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash));
    }

}

abstract contract ExecuteMetaTransaction is EIP712Base {

    using SafeMath for uint256;

    event MetaTransactionExecuted(
        address userAddress,
        address payable relayerAddress,
        bytes functionSignature
    );

    bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(
        bytes(
            "MetaTransaction(uint256 nonce,address from,bytes functionSignature)"
        )
    );

    uint256 constant defaultTimeFrame = 12 hours;

    mapping(address => uint256) nonces;
    mapping(address => uint256) public enabledTill;
    mapping(address => uint256) public timeFrame;

    modifier onlyEnabledOrNewAccount(address _account) {
        require(
            isEnabled(_account) ||
            enabledTill[_account] == 0,
            'Treasury: disabled account!'
        );
        _;
    }

    modifier onlyEnabledAccountStrict(address _account) {
        require(
            isEnabled(_account),
            'Treasury: disabled account!'
        );
        _;
    }

     /*
     * Meta transaction structure.
     * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas
     * He should call the desired function directly in that case.
     */
    struct MetaTransaction {
        uint256 nonce;
        address from;
        bytes functionSignature;
    }

    function executeMetaTransaction(
        address userAddress,
        bytes memory functionSignature,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    )
        public
        returns (bytes memory)
    {
        MetaTransaction memory metaTx = MetaTransaction({
            nonce: nonces[userAddress],
            from: userAddress,
            functionSignature: functionSignature
        });

        require(
            verify(userAddress, metaTx, sigR, sigS, sigV),
            "Signer and signature do not match"
        );

        // Append userAddress and relayer address at the end to extract it from calling context
        (bool success, bytes memory returnData) = address(this).call(
            abi.encodePacked(
                functionSignature,
                userAddress,
                msg.sender
            )
        );

        require(success, "Treasury: Function call not successfull");
        nonces[userAddress] = nonces[userAddress] + 1;

        emit MetaTransactionExecuted(
            userAddress,
            msg.sender,
            functionSignature
        );

        return returnData;
    }

    function getNonce(
        address user
    )
        public
        view
        returns(uint256 nonce)
    {
        nonce = nonces[user];
    }


    function enableAccount(
        uint256 _sessionDuration
    )
        external
    {
        _enableAccount(
            msgSender(),
            _sessionDuration
        );
    }

    function _enableAccount(
        address _user,
        uint256 _sessionDuration
    )
        internal
    {
        timeFrame[_user] = _sessionDuration;
        enabledTill[_user] = block.timestamp.add(timeFrame[_user]);
    }

    function getTimeFrame(
        address _account
    )
        internal
        view
        returns (uint256)
    {
        return timeFrame[_account] > 0 ? timeFrame[_account] : defaultTimeFrame;
    }

    function isEnabled(
        address _account
    )
        public
        view
        returns (bool)
    {
        return enabledTill[_account] > block.timestamp;
    }

    function verify(
        address signer,
        MetaTransaction memory metaTx,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    )
        internal
        view
        returns (bool)
    {
        return
            signer ==
            ecrecover(
                toTypedMessageHash(hashMetaTransaction(metaTx)),
                sigV,
                sigR,
                sigS
            );
    }

    function hashMetaTransaction(MetaTransaction memory metaTx)
        internal
        pure
        returns (bytes32)
    {
        return
            keccak256(
                abi.encode(
                    META_TRANSACTION_TYPEHASH,
                    metaTx.nonce,
                    metaTx.from,
                    keccak256(metaTx.functionSignature)
                )
            );
    }

    function msgSender()
        internal
        view
        returns(address sender)
    {
        if(msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)
            }
        } else {
            sender = msg.sender;
        }
        return sender;
    }

}

contract TransferHelper {

    bytes4 private constant TRANSFER = bytes4(
        keccak256(
            bytes(
                'transfer(address,uint256)' // 0xa9059cbb
            )
        )
    );

    bytes4 private constant TRANSFER_FROM = bytes4(
        keccak256(
            bytes(
                'transferFrom(address,address,uint256)' // 0x23b872dd
            )
        )
    );

    function safeTransfer(
        address _token,
        address _to,
        uint256 _value
    )
        internal
    {
        (bool success, bytes memory data) = _token.call(
            abi.encodeWithSelector(
                TRANSFER, // 0xa9059cbb
                _to,
                _value
            )
        );

        require(
            success && (
                data.length == 0 || abi.decode(
                    data, (bool)
                )
            ),
            'TransferHelper: TRANSFER_FAILED'
        );
    }

    function safeTransferFrom(
        address _token,
        address _from,
        address _to,
        uint _value
    )
        internal
    {
        (bool success, bytes memory data) = _token.call(
            abi.encodeWithSelector(
                TRANSFER_FROM,
                _from,
                _to,
                _value
            )
        );

        require(
            success && (
                data.length == 0 || abi.decode(
                    data, (bool)
                )
            ),
            'TransferHelper: TRANSFER_FROM_FAILED'
        );
    }

}

contract GameController is AccessController {

    using SafeMath for uint256;

    enum GameStatus { Empty, Enabled, Disabled }

    struct Game {
        address gameAddress;
        string gameName;
    }

    struct GameSettings {
        uint8 index;
        GameStatus status;
    }

    Game[] public treasuryGames;
    mapping(address => GameSettings) public settings;
    mapping(uint8 => mapping(uint8 => uint256)) gameTokens;
    mapping(uint8 => mapping(uint8 => uint128)) maximumBet;

    modifier onlyDeclaredGame(uint8 _gameIndex) {
        require(
            settings[
                treasuryGames[_gameIndex].gameAddress
            ].status != GameStatus.Empty,
            "Treasury: game is not declared!"
        );
        _;
    }

    modifier onlyEnabledGame(uint8 _gameIndex) {
        require(
            settings[
                treasuryGames[_gameIndex].gameAddress
            ].status == GameStatus.Enabled,
            "Treasury: game must be enabled!"
        );
        _;
    }

    modifier onlyDisabledGame(uint8 _gameIndex) {
        require(
            settings[
                treasuryGames[_gameIndex].gameAddress
            ].status == GameStatus.Disabled,
            "Treasury: game must be disabled!"
        );
        _;
    }

   function addGame(
        address _newGameAddress,
        string calldata _newGameName,
        bool _isActive
    )
        external
        onlyCEO
    {
        require(
            settings[_newGameAddress].status == GameStatus.Empty,
            'Treasury: game already declared!'
        );

        treasuryGames.push(
            Game(
                {
                    gameAddress: _newGameAddress,
                    gameName: _newGameName
                }
            )
        );
        settings[_newGameAddress].index = uint8(treasuryGames.length - 1);
        settings[_newGameAddress].status = _isActive == true
            ? GameStatus.Enabled
            : GameStatus.Disabled;
    }

    function getGameIndex(
        address _gameAddress
    )
        internal
        view
        returns (uint8)
    {
        require(
            settings[_gameAddress].status != GameStatus.Empty,
            'Treasury: game is not declared!'
        );
        return settings[_gameAddress].index;
    }

    function updateGameAddress(
        uint8 _gameIndex,
        address _newGameAddress
    )
        external
        onlyCEO
        onlyDeclaredGame(_gameIndex)
    {
        require(
            settings[_newGameAddress].status == GameStatus.Empty,
            'Treasury: game with new address already declared!'
        );

        settings[_newGameAddress] = settings[treasuryGames[_gameIndex].gameAddress];
        delete settings[treasuryGames[_gameIndex].gameAddress];
        treasuryGames[_gameIndex].gameAddress = _newGameAddress;
    }

    function updateGameName(
        uint8 _gameIndex,
        string calldata _newGameName
    )
        external
        onlyCEO
    {
        treasuryGames[_gameIndex].gameName = _newGameName;
    }

    function enableGame(
        uint8 _gameIndex
    )
        external
        onlyCEO
        onlyDisabledGame(_gameIndex)
    {
        settings[treasuryGames[_gameIndex].gameAddress].status = GameStatus.Enabled;
    }

    function disableGame(
        uint8 _gameIndex
    )
        external
        onlyCEO
        onlyEnabledGame(_gameIndex)
    {
        settings[treasuryGames[_gameIndex].gameAddress].status = GameStatus.Disabled;
    }

    function addGameTokens(
        uint8 _gameIndex,
        uint8 _tokenIndex,
        uint256 _amount
    )
        internal
    {
        gameTokens[_gameIndex][_tokenIndex] =
        gameTokens[_gameIndex][_tokenIndex].add(_amount);
    }

    function subGameTokens(
        uint8 _gameIndex,
        uint8 _tokenIndex,
        uint256 _amount
    )
        internal
    {
        gameTokens[_gameIndex][_tokenIndex] =
        gameTokens[_gameIndex][_tokenIndex].sub(_amount);
    }
}

contract TokenController is AccessController {

    struct Token {
        address tokenAddress;
        string tokenName;
    }

    Token[] public treasuryTokens;

    function addToken(
        address _tokenAddress,
        string memory _tokenName
    )
        public
        onlyCEO
    {
        treasuryTokens.push(
            Token(
                {
                    tokenAddress: _tokenAddress,
                    tokenName: _tokenName
                }
            )
        );
    }

    function getTokenInstance(
        uint8 _tokenIndex
    )
        internal
        view
        returns (ERC20Token)
    {
        return ERC20Token(treasuryTokens[_tokenIndex].tokenAddress);
    }

    function getTokenAddress(
        uint8 _tokenIndex
    )
        public
        view
        returns (address)
    {
        return treasuryTokens[_tokenIndex].tokenAddress;
    }

    function getTokenName(
        uint8 _tokenIndex
    )
        external
        view
        returns (string memory)
    {
        return treasuryTokens[_tokenIndex].tokenName;
    }

    function updateTokenAddress(
        uint8 _tokenIndex,
        address _newTokenAddress
    )
        external
        onlyCEO
    {
        treasuryTokens[_tokenIndex].tokenAddress = _newTokenAddress;
    }

    function updateTokenName(
        uint8 _tokenIndex,
        string calldata _newTokenName
    )
        external
        onlyCEO
    {
        treasuryTokens[_tokenIndex].tokenName = _newTokenName;
    }

    function deleteToken(
        uint8 _tokenIndex
    )
        external
        onlyCEO
    {
        ERC20Token token = getTokenInstance(
            _tokenIndex
        );

        require(
            token.balanceOf(address(this)) == 0,
            'TokenController: balance detected'
        );

        delete treasuryTokens[_tokenIndex];
    }
}

contract dgTreasury is GameController, TokenController, HashChain, TransferHelper, ExecuteMetaTransaction {

    using SafeMath for uint256;

    constructor(
        address _defaultTokenAddress,
        string memory _defaultTokenName
    )
        EIP712Base('Treasury', 'v4.0')
    {
        addToken(
            _defaultTokenAddress,
            _defaultTokenName
        );
    }

    function disableAccount(
        address _account
    )
        external
        onlyWorker
    {
        enabledTill[_account] = block.timestamp;
    }

    function tokenInboundTransfer(
        uint8 _tokenIndex,
        address _from,
        uint256 _amount
    )
        external
        onlyEnabledOrNewAccount(_from)
        returns (bool)
    {
        uint8 _gameIndex = getGameIndex(msg.sender);
        address _token = getTokenAddress(_tokenIndex);

        addGameTokens(
            _gameIndex,
            _tokenIndex,
            _amount
        );

        safeTransferFrom(
            _token,
            _from,
            address(this), _amount
        );

        enabledTill[_from] = block.timestamp.add(getTimeFrame(msg.sender));

        return true;
    }

    function tokenOutboundTransfer(
        uint8 _tokenIndex,
        address _to,
        uint256 _amount
    )
        external
        onlyEnabledAccountStrict(_to)
        returns (bool)
    {
        uint8 _gameIndex = getGameIndex(msg.sender);
        address _token = getTokenAddress(_tokenIndex);

        subGameTokens(
            _gameIndex,
            _tokenIndex,
            _amount
        );

        safeTransfer(
            _token,
            _to,
            _amount
        );

        return true;
    }

    function setMaximumBet(
        uint8 _gameIndex,
        uint8 _tokenIndex,
        uint128 _maximumBet
    )
        external
        onlyCEO
        onlyDeclaredGame(_gameIndex)
    {
        maximumBet[_gameIndex][_tokenIndex] = _maximumBet;
    }

    function gameMaximumBet(
        uint8 _gameIndex,
        uint8 _tokenIndex
    )
        external
        view
        onlyDeclaredGame(_gameIndex)
        returns (uint256)
    {
        return maximumBet[_gameIndex][_tokenIndex];
    }

    function getMaximumBet(
        uint8 _tokenIndex
    )
        external
        view
        returns (uint128)
    {
        uint8 _gameIndex = getGameIndex(msg.sender);
        return maximumBet[_gameIndex][_tokenIndex];
    }

    function deleteGame(
        uint8 _gameIndex
    )
        public
        onlyCEO
    {
        for (uint8 _tokenIndex = 0; _tokenIndex < treasuryTokens.length; _tokenIndex++) {
            _withdrawGameTokens(
                _gameIndex,
                _tokenIndex,
                gameTokens[_gameIndex][_tokenIndex]
            );
            gameTokens[_gameIndex][_tokenIndex] = 0;
            maximumBet[_gameIndex][_tokenIndex] = 0;
        }
        delete treasuryGames[_gameIndex];
    }

    function checkApproval(
        address _userAddress,
        uint8 _tokenIndex
    )
        external
        view
        returns (uint256)
    {
        return getTokenInstance(_tokenIndex).allowance(
            _userAddress,
            address(this)
        );
    }

    receive() external payable {
        revert();
    }

    function addFunds(
        uint8 _gameIndex,
        uint8 _tokenIndex,
        uint256 _tokenAmount
    )
        external
    {
        require(
            _gameIndex < treasuryGames.length,
            'Treasury: unregistered gameIndex'
        );

        require(
            _tokenIndex < treasuryTokens.length,
            'Treasury: unregistered tokenIndex'
        );

        ERC20Token token = getTokenInstance(
            _tokenIndex
        );

        addGameTokens(
            _gameIndex,
            _tokenIndex,
            _tokenAmount
        );

        token.transferFrom(
            msg.sender,
            address(this),
            _tokenAmount
        );
    }

    function checkAllocatedTokens(
        uint8 _tokenIndex
    )
        external
        view
        returns (uint256)
    {
        uint8 _gameIndex = getGameIndex(msg.sender);

        return _checkAllocatedTokens(
            _gameIndex,
            _tokenIndex
        );
    }

    function _checkAllocatedTokens(
        uint8 _gameIndex,
        uint8 _tokenIndex
    ) internal view returns (uint256) {
        return gameTokens[_gameIndex][_tokenIndex];
    }

    function checkGameTokens(
        uint8 _gameIndex,
        uint8 _tokenIndex
    )
        external
        view
        returns (uint256)
    {
        return _checkAllocatedTokens(
            _gameIndex,
            _tokenIndex
        );
    }

    function _withdrawGameTokens(
        uint8 _gameIndex,
        uint8 _tokenIndex,
        uint256 _amount
    )
        internal
    {
        ERC20Token token = getTokenInstance(
            _tokenIndex
        );

        subGameTokens(
            _gameIndex,
            _tokenIndex,
            _amount
        );

        token.transfer(
            ceoAddress,
            _amount
        );
    }

    function withdrawGameTokens(
        uint8 _gameIndex,
        uint8 _tokenIndex,
        uint256 _amount
    )
        external
        onlyCEO
    {
        _withdrawGameTokens(
            _gameIndex,
            _tokenIndex,
            _amount
        );
    }

    function withdrawTreasuryTokens(
        uint8 _tokenIndex
    ) public onlyCEO {

        ERC20Token token = getTokenInstance(
            _tokenIndex
        );

        uint256 amount = token.balanceOf(
            address(this)
        );

        for (uint256 i = 0; i < treasuryGames.length; i++) {
            uint8 _gameIndex = settings[treasuryGames[i].gameAddress].index;
            gameTokens[_gameIndex][_tokenIndex] = 0;
        }

        token.transfer(
            ceoAddress,
            amount
        );
    }

    function setTail(
        bytes32 _tail
    )
        external 
        onlyCEO
    {
        _setTail(_tail);
    }

    function consumeHash(
        bytes32 _localhash
    )
        external
        returns (bool)
    {
        require(
            settings[msg.sender].status == GameStatus.Enabled,
            'Treasury: active-game not present'
        );

        _consume(_localhash);

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_defaultTokenAddress","type":"address"},{"internalType":"string","name":"_defaultTokenName","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newCEO","type":"address"}],"name":"CEOSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWorker","type":"address"}],"name":"WorkerSet","type":"event"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"addFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGameAddress","type":"address"},{"internalType":"string","name":"_newGameName","type":"string"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"addGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"string","name":"_tokenName","type":"string"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ceoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"checkAllocatedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"},{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"checkApproval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"checkGameTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_localhash","type":"bytes32"}],"name":"consumeHash","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"}],"name":"deleteGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"deleteToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"disableAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"}],"name":"disableGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sessionDuration","type":"uint256"}],"name":"enableAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"}],"name":"enableGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"enabledTill","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"gameMaximumBet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"getMaximumBet","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"getTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"getTokenName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"uint128","name":"_maximumBet","type":"uint128"}],"name":"setMaximumBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_tail","type":"bytes32"}],"name":"setTail","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWorker","type":"address"}],"name":"setWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"settings","outputs":[{"internalType":"uint8","name":"index","type":"uint8"},{"internalType":"enum GameController.GameStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tail","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"timeFrame","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"tokenInboundTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"tokenOutboundTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"treasuryGames","outputs":[{"internalType":"address","name":"gameAddress","type":"address"},{"internalType":"string","name":"gameName","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"treasuryTokens","outputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"string","name":"tokenName","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"address","name":"_newGameAddress","type":"address"}],"name":"updateGameAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"string","name":"_newGameName","type":"string"}],"name":"updateGameName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"address","name":"_newTokenAddress","type":"address"}],"name":"updateTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"string","name":"_newTokenName","type":"string"}],"name":"updateTokenName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIndex","type":"uint8"},{"internalType":"uint8","name":"_tokenIndex","type":"uint8"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawGameTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenIndex","type":"uint8"}],"name":"withdrawTreasuryTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"workerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600160146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516200612838038062006128833981810160405260408110156200005257600080fd5b8101908080519060200190929190805160405193929190846401000000008211156200007d57600080fd5b838201915060208201858111156200009457600080fd5b8251866001820283011164010000000082111715620000b257600080fd5b8083526020830192505050908051906020019080838360005b83811015620000e8578082015181840152602081019050620000cb565b50505050905090810190601f168015620001165780820380516001836020036101000a031916815260200191505b506040525050506040518060400160405280600881526020017f54726561737572790000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f76342e3000000000000000000000000000000000000000000000000000000000815250336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f54841e992da2f7bcaa3127409f02e1849c79072740593c398d6670f65f995fa7600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1604051806080016040528060528152602001620060d660529139805190602001208280519060200120828051906020012062000327620003a260201b60201c565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001955050505050506040516020818303038152906040528051906020012060088190555050506200039a8282620003ab60201b60201c565b5050620005e5565b60006005905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200046d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b600660405180604001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019080519060200190620005289291906200052f565b5050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620005675760008555620005b3565b82601f106200058257805160ff1916838001178555620005b3565b82800160010185558215620005b3579182015b82811115620005b257825182559160200191906001019062000595565b5b509050620005c29190620005c6565b5090565b5b80821115620005e1576000816000905550600101620005c7565b5090565b615ae180620005f56000396000f3fe6080604052600436106102605760003560e01c806370b5e63611610144578063c2c9a884116100b6578063e2373ab31161007a578063e2373ab31461120d578063e99405cc14611287578063f010b541146112c5578063f342336f14611303578063f887cf0014611358578063f8ce7b4b146113ca5761026a565b8063c2c9a88414611080578063c70620b5146110be578063c7646ebb14611110578063cbd88f4814611177578063d8453172146111b85761026a565b80638c79ba3a116101085780638c79ba3a14610e7c5780639015d37114610ecd5780639122c23914610f34578063a3a8df9514610f72578063ae260ac014610fd0578063c26f6d441461102f5761026a565b806370b5e63614610cd957806371da23e914610d8b5780637749bc1114610def5780637cb8e8cd14610e2a5780638456cb5914610e655761026a565b806331297992116101dd5780635ad3f918116101a15780635ad3f91814610a725780635c975abb14610ada5780636431930f14610b0757806365afb44f14610b6c57806365f6517a14610bbd5780636ca489fb14610c225761026a565b8063312979921461086e57806332b4a594146108ec5780633de6f3791461097f5780633f4ba83a146109dd57806341d4c74f146109f45761026a565b806313d8c8401161022457806313d8c840146105d457806327d7874c146105ff5780632c613a14146106505780632c8da560146107215780632d0335ab146108095761026a565b8063082622171461026f5780630a0f8168146103405780630c53c51c146103815780630e363e3b146105035780630ea4a4fa146105965761026a565b3661026a57600080fd5b600080fd5b34801561027b57600080fd5b506102a86004803603602081101561029257600080fd5b8101908080359060200190929190505050611429565b604051808373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103045780820151818401526020810190506102e9565b50505050905090810190601f1680156103315780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561034c57600080fd5b50610355611515565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b50610488600480360360a08110156103a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156103e157600080fd5b8201836020820111156103f357600080fd5b8035906020019184600183028401116401000000008311171561041557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190803560ff169060200190929190505050611539565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104c85780820151818401526020810190506104ad565b50505050905090810190601f1680156104f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050f57600080fd5b506105946004803603604081101561052657600080fd5b81019080803560ff1690602001909291908035906020019064010000000081111561055057600080fd5b82018360208201111561056257600080fd5b8035906020019184600183028401116401000000008311171561058457600080fd5b9091929391929390505050611941565b005b3480156105a257600080fd5b506105d2600480360360208110156105b957600080fd5b81019080803560ff169060200190929190505050611a38565b005b3480156105e057600080fd5b506105e9611c5c565b6040518082815260200191505060405180910390f35b34801561060b57600080fd5b5061064e6004803603602081101561062257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c62565b005b34801561065c57600080fd5b506106896004803603602081101561067357600080fd5b8101908080359060200190929190505050611e59565b604051808373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106e55780820151818401526020810190506106ca565b50505050905090810190601f1680156107125780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561072d57600080fd5b506108076004803603604081101561074457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561078157600080fd5b82018360208201111561079357600080fd5b803590602001918460018302840111640100000000831117156107b557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f45565b005b34801561081557600080fd5b506108586004803603602081101561082c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120c6565b6040518082815260200191505060405180910390f35b34801561087a57600080fd5b506108d46004803603606081101561089157600080fd5b81019080803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061210f565b60405180821515815260200191505060405180910390f35b3480156108f857600080fd5b5061097d6004803603604081101561090f57600080fd5b81019080803560ff1690602001909291908035906020019064010000000081111561093957600080fd5b82018360208201111561094b57600080fd5b8035906020019184600183028401116401000000008311171561096d57600080fd5b90919293919293905050506121cb565b005b34801561098b57600080fd5b506109db600480360360408110156109a257600080fd5b81019080803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122c2565b005b3480156109e957600080fd5b506109f26123e7565b005b348015610a0057600080fd5b50610a5a60048036036060811015610a1757600080fd5b81019080803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612556565b60405180821515815260200191505060405180910390f35b348015610a7e57600080fd5b50610aae60048036036020811015610a9557600080fd5b81019080803560ff1690602001909291905050506126bb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ae657600080fd5b50610aef612706565b60405180821515815260200191505060405180910390f35b348015610b1357600080fd5b50610b5660048036036020811015610b2a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612719565b6040518082815260200191505060405180910390f35b348015610b7857600080fd5b50610ba560048036036020811015610b8f57600080fd5b8101908080359060200190929190505050612731565b60405180821515815260200191505060405180910390f35b348015610bc957600080fd5b50610c0c60048036036020811015610be057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612803565b6040518082815260200191505060405180910390f35b348015610c2e57600080fd5b50610c5e60048036036020811015610c4557600080fd5b81019080803560ff16906020019092919050505061281b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c9e578082015181840152602081019050610c83565b50505050905090810190601f168015610ccb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ce557600080fd5b50610d8960048036036060811015610cfc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610d3957600080fd5b820183602082011115610d4b57600080fd5b80359060200191846001830284011164010000000083111715610d6d57600080fd5b90919293919293908035151590602001909291905050506128de565b005b348015610d9757600080fd5b50610dc760048036036020811015610dae57600080fd5b81019080803560ff169060200190929190505050612c5b565b60405180826fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dfb57600080fd5b50610e2860048036036020811015610e1257600080fd5b8101908080359060200190929190505050612cbe565b005b348015610e3657600080fd5b50610e6360048036036020811015610e4d57600080fd5b8101908080359060200190929190505050612d8b565b005b348015610e7157600080fd5b50610e7a612d9f565b005b348015610e8857600080fd5b50610ecb60048036036020811015610e9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f10565b005b348015610ed957600080fd5b50610f1c60048036036020811015610ef057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ffd565b60405180821515815260200191505060405180910390f35b348015610f4057600080fd5b50610f7060048036036020811015610f5757600080fd5b81019080803560ff169060200190929190505050613048565b005b348015610f7e57600080fd5b50610fce60048036036040811015610f9557600080fd5b81019080803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613375565b005b348015610fdc57600080fd5b5061101960048036036040811015610ff357600080fd5b81019080803560ff169060200190929190803560ff169060200190929190505050613848565b6040518082815260200191505060405180910390f35b34801561103b57600080fd5b5061107e6004803603602081101561105257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139d0565b005b34801561108c57600080fd5b506110bc600480360360208110156110a357600080fd5b81019080803560ff169060200190929190505050613c05565b005b3480156110ca57600080fd5b506110fa600480360360208110156110e157600080fd5b81019080803560ff169060200190929190505050613e8b565b6040518082815260200191505060405180910390f35b34801561111c57600080fd5b506111756004803603606081101561113357600080fd5b81019080803560ff169060200190929190803560ff16906020019092919080356fffffffffffffffffffffffffffffffff169060200190929190505050613eab565b005b34801561118357600080fd5b5061118c6140f7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111c457600080fd5b5061120b600480360360608110156111db57600080fd5b81019080803560ff169060200190929190803560ff1690602001909291908035906020019092919050505061411d565b005b34801561121957600080fd5b5061125c6004803603602081101561123057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142e3565b604051808360ff16815260200182600281111561127557fe5b81526020019250505060405180910390f35b34801561129357600080fd5b506112c3600480360360208110156112aa57600080fd5b81019080803560ff169060200190929190505050614321565b005b3480156112d157600080fd5b50611301600480360360208110156112e857600080fd5b81019080803560ff169060200190929190505050614537565b005b34801561130f57600080fd5b506113566004803603606081101561132657600080fd5b81019080803560ff169060200190929190803560ff169060200190929190803590602001909291905050506147be565b005b34801561136457600080fd5b506113b46004803603604081101561137b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919050505061488f565b6040518082815260200191505060405180910390f35b3480156113d657600080fd5b50611413600480360360408110156113ed57600080fd5b81019080803560ff169060200190929190803560ff169060200190929190505050614961565b6040518082815260200191505060405180910390f35b6002818154811061143957600080fd5b90600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561150b5780601f106114e05761010080835404028352916020019161150b565b820191906000526020600020905b8154815290600101906020018083116114ee57829003601f168201915b5050505050905082565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606115436156fe565b6040518060600160405280600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018781525090506115c28782878787614975565b611617576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615a446021913960400191505060405180910390fd5b600060603073ffffffffffffffffffffffffffffffffffffffff16888a336040516020018084805190602001908083835b6020831061166b5780518252602082019150602081019050602083039250611648565b6001836020036101000a0380198251168184511680821785525050505050509050018373ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140193505050506040516020818303038152906040526040518082805190602001908083835b6020831061171257805182526020820191506020810190506020830392506116ef565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611774576040519150601f19603f3d011682016040523d82523d6000602084013e611779565b606091505b5091509150816117d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806159656027913960400191505060405180910390fd5b6001600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b89338a604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156118f65780820151818401526020810190506118db565b50505050905090810190601f1680156119235780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a180935050505095945050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b818160028560ff1681548110611a1457fe5b90600052602060002090600202016001019190611a32929190615735565b50505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611af9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b6000611b0482614a24565b905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611b6f57600080fd5b505afa158015611b83573d6000803e3d6000fd5b505050506040513d6020811015611b9957600080fd5b810190808051906020019092919050505014611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615a236021913960400191505060405180910390fd5b60068260ff1681548110611c1057fe5b9060005260206000209060020201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000611c5691906157c3565b50505050565b60075481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611da9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806159bd6022913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60068181548110611e6957600080fd5b90600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f3b5780601f10611f1057610100808354040283529160200191611f3b565b820191906000526020600020905b815481529060010190602001808311611f1e57829003601f168201915b5050505050905082565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612006576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b600660405180604001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190805190602001906120bf92919061580b565b5050505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008261211b81612ffd565b61218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f54726561737572793a2064697361626c6564206163636f756e7421000000000081525060200191505060405180910390fd5b600061219833614a6f565b905060006121a5876126bb565b90506121b2828887614ba3565b6121bd818787614c1f565b600193505050509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461228c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b818160068560ff168154811061229e57fe5b906000526020600020906002020160010191906122bc929190615735565b50505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612383576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b8060068360ff168154811061239457fe5b906000526020600020906002020160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b600160149054906101000a900460ff1661250d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615a656023913960400191505060405180910390fd5b6000600160146101000a81548160ff0219169083151502179055507fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693360405160405180910390a1565b60008261256281612ffd565b806125ac57506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b61261e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f54726561737572793a2064697361626c6564206163636f756e7421000000000081525060200191505060405180910390fd5b600061262933614a6f565b90506000612636876126bb565b9050612643828887614e56565b61264f81873088614ed2565b61266a61265b336150ee565b4261518690919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050509392505050565b600060068260ff16815481106126cd57fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600160149054906101000a900460ff1681565b600b6020528060005260406000206000915090505481565b60006001600281111561274057fe5b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16600281111561279b57fe5b146127f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615a026021913960400191505060405180910390fd5b6127fa8261520e565b60019050919050565b600a6020528060005260406000206000915090505481565b606060068260ff168154811061282d57fe5b90600052602060002090600202016001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128d25780601f106128a7576101008083540402835291602001916128d2565b820191906000526020600020905b8154815290600101906020018083116128b557829003601f168201915b50505050509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461299f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b600060028111156129ac57fe5b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff166002811115612a0757fe5b14612a7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f54726561737572793a2067616d6520616c7265616479206465636c617265642181525060200191505060405180910390fd5b600260405180604001604052808673ffffffffffffffffffffffffffffffffffffffff16815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019080519060200190612b7792919061580b565b505050600160028054905003600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055506001151581151514612bf0576002612bf3565b60015b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff02191690836002811115612c5057fe5b021790555050505050565b600080612c6733614a6f565b9050600560008260ff1660ff16815260200190815260200160002060008460ff1660ff16815260200190815260200160002060009054906101000a90046fffffffffffffffffffffffffffffffff16915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b612d88816152b5565b50565b612d9c612d966152bf565b82615371565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806159df6023913960400191505060405180910390fd5b600160149054906101000a900460ff1615612ec8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416363657373436f6e74726f6c3a2063757272656e746c79207061757365640081525060200191505060405180910390fd5b60018060146101000a81548160ff0219169083151502179055507f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75260405160405180910390a1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806159df6023913960400191505060405180910390fd5b42600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600042600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054119050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b600061311482614a24565b905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561317f57600080fd5b505afa158015613193573d6000803e3d6000fd5b505050506040513d60208110156131a957600080fd5b8101908080519060200190929190505050905060005b6002805490508110156132a257600060036000600284815481106131df57fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1690506000600460008360ff1660ff16815260200190815260200160002060008760ff1660ff168152602001908152602001600020819055505080806001019150506131bf565b508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561333457600080fd5b505af1158015613348573d6000803e3d6000fd5b505050506040513d602081101561335e57600080fd5b810190808051906020019092919050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613436576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b816000600281111561344457fe5b6003600060028460ff168154811061345857fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1660028111156134e057fe5b1415613554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f54726561737572793a2067616d65206973206e6f74206465636c61726564210081525060200191505060405180910390fd5b6000600281111561356157fe5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1660028111156135bc57fe5b14613612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061598c6031913960400191505060405180910390fd5b6003600060028560ff168154811061362657fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820160009054906101000a900460ff168160000160006101000a81548160ff021916908360ff1602179055506000820160019054906101000a900460ff168160000160016101000a81548160ff0219169083600281111561373057fe5b02179055509050506003600060028560ff168154811061374c57fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549060ff021916905550508160028460ff16815481106137f457fe5b906000526020600020906002020160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000826000600281111561385857fe5b6003600060028460ff168154811061386c57fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1660028111156138f457fe5b1415613968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f54726561737572793a2067616d65206973206e6f74206465636c61726564210081525060200191505060405180910390fd5b600560008560ff1660ff16815260200190815260200160002060008460ff1660ff16815260200190815260200160002060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1691505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613a56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806158b76025913960400191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480613afd5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b613b52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806158b76025913960400191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f54841e992da2f7bcaa3127409f02e1849c79072740593c398d6670f65f995fa7600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613cc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b80600280811115613cd357fe5b6003600060028460ff1681548110613ce757fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff166002811115613d6f57fe5b14613de2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f54726561737572793a2067616d65206d7573742062652064697361626c65642181525060200191505060405180910390fd5b60016003600060028560ff1681548110613df857fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff02191690836002811115613e8257fe5b02179055505050565b600080613e9733614a6f565b9050613ea3818461544e565b915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613f6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b8260006002811115613f7a57fe5b6003600060028460ff1681548110613f8e57fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16600281111561401657fe5b141561408a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f54726561737572793a2067616d65206973206e6f74206465636c61726564210081525060200191505060405180910390fd5b81600560008660ff1660ff16815260200190815260200160002060008560ff1660ff16815260200190815260200160002060006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002805490508360ff161061419a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f54726561737572793a20756e726567697374657265642067616d65496e64657881525060200191505060405180910390fd5b6006805490508260ff16106141fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806158dc6021913960400191505060405180910390fd5b600061420583614a24565b9050614212848484614e56565b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156142a157600080fd5b505af11580156142b5573d6000803e3d6000fd5b505050506040513d60208110156142cb57600080fd5b81019080805190602001909291905050505050505050565b60036020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16905082565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146143e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b60005b6006805490508160ff1610156144db576144308282600460008660ff1660ff16815260200190815260200160002060008560ff1660ff16815260200190815260200160002054615489565b6000600460008460ff1660ff16815260200190815260200160002060008360ff1660ff168152602001908152602001600020819055506000600560008460ff1660ff16815260200190815260200160002060008360ff1660ff16815260200190815260200160002060006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555080806001019150506143e5565b5060028160ff16815481106144ec57fe5b9060005260206000209060020201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600061453291906157c3565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146145f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b806001600281111561460657fe5b6003600060028460ff168154811061461a57fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1660028111156146a257fe5b14614715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f54726561737572793a2067616d65206d75737420626520656e61626c6564210081525060200191505060405180910390fd5b60026003600060028560ff168154811061472b57fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff021916908360028111156147b557fe5b02179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461487f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f416363657373436f6e74726f6c3a2043454f206163636573732064656e69656481525060200191505060405180910390fd5b61488a838383615489565b505050565b600061489a82614a24565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561491e57600080fd5b505afa158015614932573d6000803e3d6000fd5b505050506040513d602081101561494857600080fd5b8101908080519060200190929190505050905092915050565b600061496d838361544e565b905092915050565b6000600161498a61498587615574565b615604565b83868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156149e1573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b600060068260ff1681548110614a3657fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806002811115614a7d57fe5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff166002811115614ad857fe5b1415614b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f54726561737572793a2067616d65206973206e6f74206465636c61726564210081525060200191505060405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff169050919050565b614be681600460008660ff1660ff16815260200190815260200160002060008560ff1660ff1681526020019081526020016000205461566b90919063ffffffff16565b600460008560ff1660ff16815260200190815260200160002060008460ff1660ff16815260200190815260200160002081905550505050565b600060608473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310614d365780518252602082019150602081019050602083039250614d13565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614d98576040519150601f19603f3d011682016040523d82523d6000602084013e614d9d565b606091505b5091509150818015614ddd5750600081511480614ddc5750808060200190516020811015614dca57600080fd5b81019080805190602001909291905050505b5b614e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5472616e7366657248656c7065723a205452414e534645525f4641494c45440081525060200191505060405180910390fd5b5050505050565b614e9981600460008660ff1660ff16815260200190815260200160002060008560ff1660ff1681526020019081526020016000205461518690919063ffffffff16565b600460008560ff1660ff16815260200190815260200160002060008460ff1660ff16815260200190815260200160002081905550505050565b600060608573ffffffffffffffffffffffffffffffffffffffff166040518060600160405280602581526020016158fd6025913980519060200120868686604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310614fea5780518252602082019150602081019050602083039250614fc7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461504c576040519150601f19603f3d011682016040523d82523d6000602084013e615051565b606091505b50915091508180156150915750600081511480615090575080806020019051602081101561507e57600080fd5b81019080805190602001909291905050505b5b6150e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615a886024913960400191505060405180910390fd5b505050505050565b600080600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161513e5761a8c061517f565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b9050919050565b600080828401905083811015615204576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600754816040516020018082815260200191505060405160208183030381529060405280519060200120146152ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f686173682d636861696e3a2077726f6e6720706172656e74000000000000000081525060200191505060405180910390fd5b8060078190555050565b8060078190555050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561536a5760606000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff81830151169250505061536e565b3390505b90565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615407600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261518690919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600460008460ff1660ff16815260200190815260200160002060008360ff1660ff16815260200190815260200160002054905092915050565b600061549483614a24565b90506154a1848484614ba3565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561553257600080fd5b505af1158015615546573d6000803e3d6000fd5b505050506040513d602081101561555c57600080fd5b81019080805190602001909291905050505050505050565b6000604051806080016040528060438152602001615922604391398051906020012082600001518360200151846040015180519060200120604051602001808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b600061560e6156f4565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000828211156156e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b6000600854905090565b604051806060016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261576b57600085556157b2565b82601f1061578457803560ff19168380011785556157b2565b828001600101855582156157b2579182015b828111156157b1578235825591602001919060010190615796565b5b5090506157bf9190615899565b5090565b50805460018160011615610100020316600290046000825580601f106157e95750615808565b601f0160209004906000526020600020908101906158079190615899565b5b50565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826158415760008555615888565b82601f1061585a57805160ff1916838001178555615888565b82800160010185558215615888579182015b8281111561588757825182559160200191906001019061586c565b5b5090506158959190615899565b5090565b5b808211156158b257600081600090555060010161589a565b509056fe416363657373436f6e74726f6c3a20696e76616c696420776f726b6572206164647265737354726561737572793a20756e7265676973746572656420746f6b656e496e6465787472616e7366657246726f6d28616464726573732c616464726573732c75696e74323536294d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652954726561737572793a2046756e6374696f6e2063616c6c206e6f74207375636365737366756c6c54726561737572793a2067616d652077697468206e6577206164647265737320616c7265616479206465636c6172656421416363657373436f6e74726f6c3a20696e76616c69642043454f2061646472657373416363657373436f6e74726f6c3a20776f726b6572206163636573732064656e69656454726561737572793a206163746976652d67616d65206e6f742070726573656e74546f6b656e436f6e74726f6c6c65723a2062616c616e63652064657465637465645369676e657220616e64207369676e617475726520646f206e6f74206d61746368416363657373436f6e74726f6c3a2063757272656e6c7479206e6f74207061757365645472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a264697066735822122049e29e1c9933b798c7b0dd9dd87bcb43a307662705dd463b98b50a38ae0f167464736f6c63430007040033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429000000000000000000000000a1c57f48f0deb89f569dfbe6e2b7f46d33606fd4000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000044d414e4100000000000000000000000000000000000000000000000000000000

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

000000000000000000000000a1c57f48f0deb89f569dfbe6e2b7f46d33606fd4000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000044d414e4100000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _defaultTokenAddress (address): 0xa1c57f48f0deb89f569dfbe6e2b7f46d33606fd4
Arg [1] : _defaultTokenName (string): MANA

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000a1c57f48f0deb89f569dfbe6e2b7f46d33606fd4
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 4d414e4100000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

18543:6656:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21958:8;;;18543:6656;;;;12730:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2327:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7167:1189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15393:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18171:365;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1938:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3450:239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16727:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16765:346;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8364:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19777:549;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17951:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17727:216;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4230:106;;;;;;;;;;;;;:::i;:::-;;19118:651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17333:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2396:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6338:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24884:312;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6285:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17529:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13757:733;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20860:237;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24753:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8528:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4115:107;;;;;;;;;;;;;:::i;:::-;;18951:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9187:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24195:550;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14823:562;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20603:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3697:410;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15606:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22711:294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20334:261;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2359:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21982:721;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12764:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21105:515;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15840:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23909:278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21628:284;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23207:260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12730:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2327:25::-;;;;;;;;;;;;:::o;7167:1189::-;7378:12;7408:29;;:::i;:::-;7440:152;;;;;;;;7478:6;:19;7485:11;7478:19;;;;;;;;;;;;;;;;7440:152;;;;7518:11;7440:152;;;;;;7563:17;7440:152;;;7408:184;;7627:45;7634:11;7647:6;7655:4;7661;7667;7627:6;:45::i;:::-;7605:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7844:12;7858:23;7893:4;7885:18;;7953:17;7989:11;8019:10;7918:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7885:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7843:212;;;;8076:7;8068:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8182:1;8160:6;:19;8167:11;8160:19;;;;;;;;;;;;;;;;:23;8138:6;:19;8145:11;8138:19;;;;;;;;;;;;;;;:45;;;;8201:117;8239:11;8265:10;8290:17;8201:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8338:10;8331:17;;;;;7167:1189;;;;;;;:::o;15393:205::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15578:12:::1;;15541:13;15555:10;15541:25;;;;;;;;;;;;;;;;;;;;:34;;:49;;;;;;;:::i;:::-;;15393:205:::0;;;:::o;18171:365::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18278:16:::1;18297:53;18328:11;18297:16;:53::i;:::-;18278:72;;18419:1;18385:5;:15;;;18409:4;18385:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:35;18363:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18501:14;18516:11;18501:27;;;;;;;;;;;;;;;;;;;;;18494:34:::0;::::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2958:1;18171:365:::0;:::o;1938:19::-;;;;:::o;3450:239::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3550:3:::1;3531:23;;:7;:23;;;;3509:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3640:7;3627:10;::::0;:20:::1;;;;;;;;;;;;;;;;;;3663:18;3670:10;::::0;::::1;;;;;;;;3663:18;;;;;;;;;;;;;;;;;;;;3450:239:::0;:::o;16727:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16765:346::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16906:14:::1;16940:152;;;;;;;;17001:13;16940:152;;;;;;17048:10;16940:152;;::::0;16906:197:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16765:346:::0;;:::o;8364:154::-;8459:13;8498:6;:12;8505:4;8498:12;;;;;;;;;;;;;;;;8490:20;;8364:154;;;:::o;19777:549::-;19966:4;19943:3;6705:19;6715:8;6705:9;:19::i;:::-;6683:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19988:16:::1;20007:24;20020:10;20007:12;:24::i;:::-;19988:43;;20042:14;20059:28;20075:11;20059:15;:28::i;:::-;20042:45;;20100:97;20128:10;20153:11;20179:7;20100:13;:97::i;:::-;20210:84;20237:6;20258:3;20276:7;20210:12;:84::i;:::-;20314:4;20307:11;;;;19777:549:::0;;;;;;:::o;17951:212::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18142:13:::1;;18102:14;18117:11;18102:27;;;;;;;;;;;;;;;;;;;;:37;;:53;;;;;;;:::i;:::-;;17951:212:::0;;;:::o;17727:216::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17919:16:::1;17876:14;17891:11;17876:27;;;;;;;;;;;;;;;;;;;;:40;;;:59;;;;;;;;;;;;;;;;;;17727:216:::0;;:::o;4230:106::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3353:6:::1;;;;;;;;;;;3331:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4297:5:::2;4288:6;;:14;;;;;;;;;;;;;;;;;;4318:10;;;;;;;;;;4230:106::o:0;19118:651::-;19309:4;19284:5;6475:19;6485:8;6475:9;:19::i;:::-;:62;;;;6536:1;6511:11;:21;6523:8;6511:21;;;;;;;;;;;;;;;;:26;6475:62;6453:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19331:16:::1;19350:24;19363:10;19350:12;:24::i;:::-;19331:43;;19385:14;19402:28;19418:11;19402:15;:28::i;:::-;19385:45;;19443:97;19471:10;19496:11;19522:7;19443:13;:97::i;:::-;19553:105;19584:6;19605:5;19633:4;19640:7;19553:16;:105::i;:::-;19692:45;19712:24;19725:10;19712:12;:24::i;:::-;19692:15;:19;;:45;;;;:::i;:::-;19671:11;:18;19683:5;19671:18;;;;;;;;;;;;;;;:66;;;;19757:4;19750:11;;;;19118:651:::0;;;;;;:::o;17333:188::-;17441:7;17473:14;17488:11;17473:27;;;;;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;17466:47;;17333:188;;;:::o;2396:26::-;;;;;;;;;;;;;:::o;6338:44::-;;;;;;;;;;;;;;;;;:::o;24884:312::-;24977:4;25052:18;25021:49;;;;;;;;:8;:20;25030:10;25021:20;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:49;;;;;;;;;24999:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25144:20;25153:10;25144:8;:20::i;:::-;25184:4;25177:11;;24884:312;;;:::o;6285:46::-;;;;;;;;;;;;;;;;;:::o;17529:190::-;17636:13;17674:14;17689:11;17674:27;;;;;;;;;;;;;;;;;;;;:37;;17667:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17529:190;;;:::o;13757:733::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13988:16:::1;13952:52;;;;;;;;:8;:25;13961:15;13952:25;;;;;;;;;;;;;;;:32;;;;;;;;;;;;:52;;;;;;;;;13930:134;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;14077:13;14110:153;;;;;;;;14169:15;14110:153;;;;;;14217:12;;14110:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;14077:197:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;14348:1;14325:13;:20;;;;:24;14285:8;:25;14294:15;14285:25;;;;;;;;;;;;;;;:31;;;:65;;;;;;;;;;;;;;;;;;14409:4;14396:17;;:9;:17;;;:86;;14463:19;14396:86;;;14429:18;14396:86;14361:8;:25;14370:15;14361:25;;;;;;;;;;;;;;;:32;;;:121;;;;;;;;;;;;;;;;;;;;;;;;13757:733:::0;;;;:::o;20860:237::-;20968:7;20993:16;21012:24;21025:10;21012:12;:24::i;:::-;20993:43;;21054:10;:22;21065:10;21054:22;;;;;;;;;;;;;;;:35;21077:11;21054:35;;;;;;;;;;;;;;;;;;;;;;;;;21047:42;;;20860:237;;;:::o;24753:123::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24853:15:::1;24862:5;24853:8;:15::i;:::-;24753:123:::0;:::o;8528:189::-;8627:82;8656:11;:9;:11::i;:::-;8682:16;8627:14;:82::i;:::-;8528:189;:::o;4115:107::-;3044:13;;;;;;;;;;;3030:27;;:10;:27;;;3008:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3207:6:::1;;;;;;;;;;;3206:7;3184:88;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4186:4:::2;4177:6:::0;::::2;:13;;;;;;;;;;;;;;;;;;4206:8;;;;;;;;;;4115:107::o:0;18951:159::-;3044:13;;;;;;;;;;;3030:27;;:10;:27;;;3008:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19087:15:::1;19063:11;:21;19075:8;19063:21;;;;;;;;;;;;;;;:39;;;;18951:159:::0;:::o;9187:177::-;9288:4;9341:15;9317:11;:21;9329:8;9317:21;;;;;;;;;;;;;;;;:39;9310:46;;9187:177;;;:::o;24195:550::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24290:16:::1;24309:53;24340:11;24309:16;:53::i;:::-;24290:72;;24375:14;24392:5;:15;;;24430:4;24392:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;24375:71;;24464:9;24459:195;24483:13;:20;;;;24479:1;:24;24459:195;;;24525:16;24544:8;:38;24553:13;24567:1;24553:16;;;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;24544:38;;;;;;;;;;;;;;;:44;;;;;;;;;;;;24525:63;;24641:1;24603:10;:22;24614:10;24603:22;;;;;;;;;;;;;;;:35;24626:11;24603:35;;;;;;;;;;;;;;;:39;;;;24459:195;24505:3;;;;;;;24459:195;;;;24666:5;:14;;;24695:10;::::0;::::1;;;;;;;;24720:6;24666:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;2958:1;;24195:550:::0;:::o;14823:562::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14979:10:::1;13110:16;13020:106;;;;;;;;:8;:79;13047:13;13061:10;13047:25;;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;13020:79;;;;;;;;;;;;;;;:86;;;;;;;;;;;;:106;;;;;;;;;;12998:187;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15065:16:::2;15029:52;;;;;;;;:8;:25;15038:15;15029:25;;;;;;;;;;;;;;;:32;;;;;;;;;;;;:52;;;;;;;;;15007:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15199:8;:47;15208:13;15222:10;15208:25;;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;15199:47;;;;;;;;;;;;;;;15171:8;:25;15180:15;15171:25;;;;;;;;;;;;;;;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15264:8;:47;15273:13;15287:10;15273:25;;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;15264:47;;;;;;;;;;;;;;;;15257:54:::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15362:15;15322:13;15336:10;15322:25;;;;;;;;;;;;;;;;;;;;:37;;;:55;;;;;;;;;;;;;;;;;;2958:1:::1;14823:562:::0;;:::o;20603:249::-;20777:7;20747:10;13110:16;13020:106;;;;;;;;:8;:79;13047:13;13061:10;13047:25;;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;13020:79;;;;;;;;;;;;;;;:86;;;;;;;;;;;;:106;;;;;;;;;;12998:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20809:10:::1;:22;20820:10;20809:22;;;;;;;;;;;;;;;:35;20832:11;20809:35;;;;;;;;;;;;;;;;;;;;;;;;;20802:42;;;;20603:249:::0;;;;;:::o;3697:410::-;3800:3;3778:26;;:10;:26;;;;3756:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3916:10;;;;;;;;;;3902:24;;:10;:24;;;:55;;;;3944:13;;;;;;;;;;;3930:27;;:10;:27;;;3902:55;3880:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4049:10;4033:13;;:26;;;;;;;;;;;;;;;;;;4075:24;4085:13;;;;;;;;;;;4075:24;;;;;;;;;;;;;;;;;;;;3697:410;:::o;15606:226::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15721:10:::1;13651:19;13561:109:::0;::::1;;;;;;;:8;:79;13588:13;13602:10;13588:25;;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;13561:79;;;;;;;;;;;;;;;:86;;;;;;;;;;;;:109;;;;;;;;;13539:191;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15806:18:::2;15749:8;:47;15758:13;15772:10;15758:25;;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;15749:47;;;;;;;;;;;;;;;:54;;;:75;;;;;;;;;;;;;;;;;;;;;;;;2958:1:::1;15606:226:::0;:::o;22711:294::-;22826:7;22851:16;22870:24;22883:10;22870:12;:24::i;:::-;22851:43;;22914:83;22950:10;22975:11;22914:21;:83::i;:::-;22907:90;;;22711:294;;;:::o;20334:261::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20510:10:::1;13110:16;13020:106;;;;;;;;:8;:79;13047:13;13061:10;13047:25;;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;13020:79;;;;;;;;;;;;;;;:86;;;;;;;;;;;;:106;;;;;;;;;;12998:187;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20576:11:::2;20538:10;:22;20549:10;20538:22;;;;;;;;;;;;;;;:35;20561:11;20538:35;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;2958:1:::1;20334:261:::0;;;:::o;2359:28::-;;;;;;;;;;;;;:::o;21982:721::-;22162:13;:20;;;;22149:10;:33;;;22127:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22291:14;:21;;;;22277:11;:35;;;22255:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22386:16;22405:53;22436:11;22405:16;:53::i;:::-;22386:72;;22471:102;22499:10;22524:11;22550:12;22471:13;:102::i;:::-;22586:5;:18;;;22619:10;22652:4;22672:12;22586:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21982:721;;;;:::o;12764:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21105:515::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21213:17:::1;21208:362;21250:14;:21;;;;21236:11;:35;;;21208:362;;;21303:147;21341:10;21370:11;21400:10;:22;21411:10;21400:22;;;;;;;;;;;;;;;:35;21423:11;21400:35;;;;;;;;;;;;;;;;21303:19;:147::i;:::-;21503:1;21465:10;:22;21476:10;21465:22;;;;;;;;;;;;;;;:35;21488:11;21465:35;;;;;;;;;;;;;;;:39;;;;21557:1;21519:10;:22;21530:10;21519:22;;;;;;;;;;;;;;;:35;21542:11;21519:35;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21273:13;;;;;;;21208:362;;;;21587:13;21601:10;21587:25;;;;;;;;;;;;;;;;;;;;;21580:32:::0;::::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;21105:515:::0;:::o;15840:227::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15955:10:::1;13379:18;13289:108;;;;;;;;:8;:79;13316:13;13330:10;13316:25;;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;13289:79;;;;;;;;;;;;;;;:86;;;;;;;;;;;;:108;;;;;;;;;13267:189;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16040:19:::2;15983:8;:47;15992:13;16006:10;15992:25;;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;15983:47;;;;;;;;;;;;;;;:54;;;:76;;;;;;;;;;;;;;;;;;;;;;;;2958:1:::1;15840:227:::0;:::o;23909:278::-;2877:10;;;;;;;;;;2863:24;;:10;:24;;;2841:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24076:103:::1;24110:10;24135:11;24161:7;24076:19;:103::i;:::-;23909:278:::0;;;:::o;21628:284::-;21767:7;21799:29;21816:11;21799:16;:29::i;:::-;:39;;;21853:12;21888:4;21799:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21792:112;;21628:284;;;;:::o;23207:260::-;23344:7;23376:83;23412:10;23437:11;23376:21;:83::i;:::-;23369:90;;23207:260;;;;:::o;9372:437::-;9577:4;9642:159;9670:47;9689:27;9709:6;9689:19;:27::i;:::-;9670:18;:47::i;:::-;9736:4;9759;9782;9642:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9619:182;;:6;:182;;;9599:202;;9372:437;;;;;;;:::o;17119:206::-;17230:10;17276:14;17291:11;17276:27;;;;;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;17258:59;;17119:206;;;:::o;14498:317::-;14608:5;14686:16;14653:49;;;;;;;;:8;:22;14662:12;14653:22;;;;;;;;;;;;;;;:29;;;;;;;;;;;;:49;;;;;;;;;;14631:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14779:8;:22;14788:12;14779:22;;;;;;;;;;;;;;;:28;;;;;;;;;;;;14772:35;;14498:317;;;:::o;16331:248::-;16523:48;16563:7;16523:10;:22;16534:10;16523:22;;;;;;;;;;;;;;;:35;16546:11;16523:35;;;;;;;;;;;;;;;;:39;;:48;;;;:::i;:::-;16476:10;:22;16487:10;16476:22;;;;;;;;;;;;;;;:35;16499:11;16476:35;;;;;;;;;;;;;;;:95;;;;16331:248;;;:::o;11230:564::-;11366:12;11380:17;11401:6;:11;;10923:80;;;;;;;;;;;;;;;;;10899:115;;;;;;11509:3;11531:6;11427:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11401:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11365:198;;;;11598:7;:129;;;;;11643:1;11628:4;:11;:16;:84;;;;11681:4;11648:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11628:84;11598:129;11576:210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11230:564;;;;;:::o;16075:248::-;16267:48;16307:7;16267:10;:22;16278:10;16267:22;;;;;;;;;;;;;;;:35;16290:11;16267:35;;;;;;;;;;;;;;;;:39;;:48;;;;:::i;:::-;16220:10;:22;16231:10;16220:22;;;;;;;;;;;;;;;:35;16243:11;16220:35;;;;;;;;;;;;;;;:95;;;;16075:248;;;:::o;11802:609::-;11963:12;11977:17;11998:6;:11;;11111:92;;;;;;;;;;;;;;;;;11087:127;;;;;;12097:5;12121:3;12143:6;12024:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11998:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11962:213;;;;12210:7;:129;;;;;12255:1;12240:4;:11;:16;:84;;;;12293:4;12260:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12240:84;12210:129;12188:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11802:609;;;;;;:::o;8969:210::-;9075:7;9129:1;9107:9;:19;9117:8;9107:19;;;;;;;;;;;;;;;;:23;:64;;6227:8;9107:64;;;9133:9;:19;9143:8;9133:19;;;;;;;;;;;;;;;;9107:64;9100:71;;8969:210;;;:::o;95:179::-;153:7;173:9;189:1;185;:5;173:17;;214:1;209;:6;;201:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;265:1;258:8;;;95:179;;;;:::o;2047:238::-;2196:4;;2169:7;2152:25;;;;;;;;;;;;;;;;;;;;;;;;;2124:68;;;;;;:76;2102:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2270:7;2263:4;:14;;;;2047:238;:::o;1966:73::-;2026:5;2019:4;:12;;;;1966:73;:::o;10235:570::-;10305:14;10362:4;10340:27;;:10;:27;;;10337:437;;;10384:18;10405:8;;10384:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10428:13;10444:8;;:15;;10428:31;;10653:42;10644:5;10637;10633:17;10627:24;10623:73;10613:83;;10483:228;;;;;10752:10;10743:19;;10337:437;10235:570;:::o;8725:236::-;8868:16;8849:9;:16;8859:5;8849:16;;;;;;;;;;;;;;;:35;;;;8916:37;8936:9;:16;8946:5;8936:16;;;;;;;;;;;;;;;;8916:15;:19;;:37;;;;:::i;:::-;8895:11;:18;8907:5;8895:18;;;;;;;;;;;;;;;:58;;;;8725:236;;:::o;23013:186::-;23129:7;23156:10;:22;23167:10;23156:22;;;;;;;;;;;;;;;:35;23179:11;23156:35;;;;;;;;;;;;;;;;23149:42;;23013:186;;;;:::o;23475:426::-;23626:16;23645:53;23676:11;23645:16;:53::i;:::-;23626:72;;23711:97;23739:10;23764:11;23790:7;23711:13;:97::i;:::-;23821:5;:14;;;23850:10;;;;;;;;;;23875:7;23821:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23475:426;;;;:::o;9817:410::-;9927:7;6075:100;;;;;;;;;;;;;;;;;6055:127;;;;;;10081:6;:12;;;10116:6;:11;;;10160:6;:24;;;10150:35;;;;;;10000:204;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9972:247;;;;;;9952:267;;9817:410;;;:::o;5564:180::-;5635:7;5701:20;:18;:20::i;:::-;5723:11;5672:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5662:74;;;;;;5655:81;;5564:180;;;:::o;282:182::-;340:7;373:1;368;:6;;360:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;420:9;436:1;432;:5;420:17;;455:1;448:8;;;282:182;;;;:::o;5109:92::-;5160:7;5181:15;;5174:22;;5109:92;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://49e29e1c9933b798c7b0dd9dd87bcb43a307662705dd463b98b50a38ae0f1674
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.