Contract 0x54437e99acb6a769d186c8692e3ed7d90da50452

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x26dc3c961a65ca727431f1a475e0674d8dd1087dc2717e2164e0dc62fbf842b4Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00118147545
0x43d4bb779d3bb099e1a66cfa8da1ea9f98c287deb5a174a920e2810e95b1eeb2Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00144402555
0x57994e58d290009e73057af19a0a4562bb416492e470813f2c1a87089e31148bManual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0007876530
0x193f8251e964a638a85fe4fe377a3d4ea2f350c7c2df2b6b9b292bf371a51dcfManual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0009976938
0xa0ffed068336fbdda4861852ce06f64f6781a84692d075e07fa26e50a4a3581cManual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.001575360
0x7dbfb372a257b44ffca6a4425351a42b82380023278433efae77331b8fa21a39Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00102394539
0x9c9e9b44be7a8e42917464cd327ed3149eeb413e05a3e6ae321be086102ec55bManual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.001575360
0x816098f38767862844f73e10703b44d3922e0eaa10020c730a82931685064fa7Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.001575360
0x5012628b59326488da236f2298e899b9d1a7759ccb0b3b6ac5c84697dc494beaManual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0012077346
0xf301ef81463d76e9beb3a7de15a561da4705d85281b7c4f0eb6fb4b1ebc29a97Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00081576531
0x05d6514a00ac9c26d6b219da7043d56bdbdca66ebada992a88c79a55e22c599fManual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00081576531
0x80a83da445fab4a906ff64fffe9d05734013229408352d014175b5b0ff162924Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00086839533
0xa956d2b616e83ac7d0ca4b635b45639d697adf943a408108ed5c5774f74ce1e3Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0008420832
0x7afbb0a59c5b974f25a544a600e0279212bf5b5159e710d9cd4ec271a272a87bManual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0007894530
0xdd55a40ccf3c350b1b031c801aa6bc782a6cd776d4a027ebd67b34e8726ae591Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0007894530
0x4c0989a64018e3750eee2849aed44f56002b7e388fc7bb63edb93159f19fb014Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0007894530
0xc2713e8c8d42c6e62104e53359d79e661b0118ba56b09815881d47a2cacca3e7Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0007894530
0xe322a18a761e169cad355dbc24af5a25f4ff5b699622f546f29b1daae9e0a22eManual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0013157550
0x7794269a1e2ed4b8469e7cc334fd3857f37a3d867dd95efb21c17dfb24d22f40Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00081576531
0x3e98c1d1aaac3f91706b4c758d1e3703931e34f1217d2a9dfbdd19d3b724b4a1Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00081576531
0x55441276170fb0ad1d37ce576a703062fcf1ac278e66e29b7633932bc0471781Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0007894530
0x7ddd1d25676d41a351eac8f75bba3430e05b75dc8c5d2e63d8ffa29e6b8e3b48Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00102628539
0xa8eebd99d10ee0a07126e7f8135db621b2c12a798bc74c0ee721a85039bb65a4Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00081576531
0xda8763582791745d4cddba36dbe34fd07394be0dc32862a12165fa0887bec8c5Manual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.00081576531
0xea70dd554ac5f5cf1e7cd7f901680d988469f7c7c27e6bf8ebb641361b07fe5aManual Payout256165142022-03-05 17:32:52278 days 11 hrs ago0x2ade3e213d873a3727b5c74547f7a22b27322d62 IN  0x54437e99acb6a769d186c8692e3ed7d90da504520 MATIC0.0007894530
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
dgBlackJack

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-06-10
*/

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

pragma solidity ^0.7.5;

interface TreasuryInstance {

    function getTokenAddress(
        uint8 _tokenIndex
    ) external view returns (address);

    function tokenInboundTransfer(
        uint8 _tokenIndex,
        address _from,
        uint256 _amount
    )  external returns (bool);

    function tokenOutboundTransfer(
        uint8 _tokenIndex,
        address _to,
        uint256 _amount
    ) external returns (bool);

    function checkAllocatedTokens(
        uint8 _tokenIndex
    ) external view returns (uint256);

    function checkApproval(
        address _userAddress,
        uint8 _tokenIndex
    ) external view returns (uint256 approved);

    function getMaximumBet(
        uint8 _tokenIndex
    ) external view returns (uint128);

    function consumeHash(
        bytes32 _localhash
    ) external returns (bool);
}

contract AccessController {

    address public ceoAddress;

    bool public paused = false;

    mapping (address => bool) public isWorker;

    event CEOSet(
        address newCEO
    );

    event WorkerAdded(
        address newWorker
    );

    event WorkerRemoved(
        address existingWorker
    );

    event Paused();
    event Unpaused();

    constructor() {

        address creator = msg.sender;

        ceoAddress = creator;

        isWorker[creator] = true;

        emit CEOSet(
            creator
        );

        emit WorkerAdded(
            creator
        );
    }

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

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

    modifier nonZeroAddress(address checkingAddress) {
        require(
            checkingAddress != address(0x0),
            'AccessControl: invalid address'
        );
        _;
    }

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

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

    function setCEO(
        address _newCEO
    )
        external
        nonZeroAddress(_newCEO)
        onlyCEO
    {
        ceoAddress = _newCEO;

        emit CEOSet(
            ceoAddress
        );
    }

    function addWorker(
        address _newWorker
    )
        external
        onlyCEO
    {
        _addWorker(
            _newWorker
        );
    }

    function addWorkerBulk(
        address[] calldata _newWorkers
    )
        external
        onlyCEO
    {
        for (uint8 index = 0; index < _newWorkers.length; index++) {
            _addWorker(_newWorkers[index]);
        }
    }

    function _addWorker(
        address _newWorker
    )
        internal
        nonZeroAddress(_newWorker)
    {
        require(
            isWorker[_newWorker] == false,
            'AccessControl: worker already exist'
        );

        isWorker[_newWorker] = true;

        emit WorkerAdded(
            _newWorker
        );
    }

    function removeWorker(
        address _existingWorker
    )
        external
        onlyCEO
    {
        _removeWorker(
            _existingWorker
        );
    }

    function removeWorkerBulk(
        address[] calldata _workerArray
    )
        external
        onlyCEO
    {
        for (uint8 index = 0; index < _workerArray.length; index++) {
            _removeWorker(_workerArray[index]);
        }
    }

    function _removeWorker(
        address _existingWorker
    )
        internal
        nonZeroAddress(_existingWorker)
    {
        require(
            isWorker[_existingWorker] == true,
            "AccessControl: worker not detected"
        );

        isWorker[_existingWorker] = false;

        emit WorkerRemoved(
            _existingWorker
        );
    }

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

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

interface PointerInstance {

    function addPoints(
        address _player,
        uint256 _points,
        address _token,
        uint256 _numPlayers,
        uint256 _wearableBonus
    ) external returns (
        uint256 newPoints,
        uint256 multiplierA,
        uint256 multiplierB
    );

    function addPoints(
        address _player,
        uint256 _points,
        address _token,
        uint256 _numPlayers
    ) external returns (
        uint256 newPoints,
        uint256 multiplierA,
        uint256 multiplierB
    );

    function addPoints(
        address _player,
        uint256 _points,
        address _token
    ) external returns (
        uint256 newPoints,
        uint256 multiplierA,
        uint256 multiplierB
    );
}

contract BlackJackHelper {

    function getCardsRawData(
        uint8 _card
    )
        public
        pure
        returns (uint8, uint8)
    {
        return (_card / 13, _card % 13);
    }

    function getCardsDetails(
        uint8 _card
    )
        public
        pure
        returns (string memory, string memory)
    {
        string[4] memory Suits = ["C", "D", "H", "S"];
        string[13] memory Vals = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K"];

        (uint8 _suit, uint8 _val) = getCardsRawData(_card);
        return (Suits[_suit], Vals[_val]);
    }

    function getRandomCardIndex(
        bytes32 _localhash,
        uint256 _length
    )
        internal
        pure
        returns (uint256)
    {
        return uint256(
            keccak256(
                abi.encodePacked(
                    _localhash, _length
                )
            )
        ) % _length;
    }

    function getCardsPower(
        uint8 _card
    )
        public
        pure
        returns (uint8 power)
    {
        bytes13 cardsPower = "\x0B\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0A\x0A\x0A";
        return uint8(cardsPower[_card % 13]);
    }

    function getHandsPower(
        uint8[] memory _cards
    )
        public
        pure
        returns (uint8 powerMax)
    {
        uint8 aces;
        uint8 power;

        for (uint8 i = 0; i < _cards.length; i++) {
            power = getCardsPower(_cards[i]);
            powerMax += power;
            if (power == 11) {
                aces += 1;
            }
        }
        if (powerMax > 21) {
            for (uint8 i = 0; i < aces; i++) {
                powerMax -= 10;
                if (powerMax <= 21) {
                    break;
                }
            }
        }
        return powerMax;
    }

    function isBlackJack(
        uint8[] memory _cards
    )

        public
        pure
        returns (bool)
    {
        return getHandsPower(_cards) == 21 && _cards.length == 2;
    }

    function canSplitCards(
        uint8[] memory _cards
    )
        public
        pure
        returns (bool)
    {
        return getCardsPower(_cards[0]) == getCardsPower(_cards[1]) && _cards.length == 2;
    }

    function verifyHiddenCard(
        bytes32 _hashChild,
        bytes32 _hashParent
    )
        public
        pure
        returns (bool)
    {
        return keccak256(
            abi.encodePacked(_hashParent)
        ) == _hashChild ? true : false;
    }
}

contract dgBlackJack is AccessController, BlackJackHelper {

    enum inGameState { notJoined, Playing, EndedPlay }
    enum GameState { NewGame, OnGoingGame, EndedGame }
    enum PlayerState { notBusted, hasSplit, isSplit, isSettled, isBusted, hasBlackJack }

    struct Game {
        address[] players;
        uint128[] bets;
        uint8[] tokens;
        uint8[] deck;
        uint8 playersCount;
        PlayerState[] pState;
        GameState state;
    }

    struct HiddenCard {
        bytes32 hashChild;
        bytes32 hashParent;
    }

    mapping(bytes16 => Game) public Games;
    mapping(bytes16 => HiddenCard) public DealersHidden;
    mapping(bytes16 => uint8[]) public DealersVisible;
    mapping(bytes16 => uint8[]) public NonBustedPlayers;
    mapping(address => mapping(bytes16 => uint8[])) PlayersHand;
    mapping(address => mapping(bytes16 => uint8[])) public PlayerSplit;
    mapping(address => mapping(bytes16 => bool)) public PlayersInsurance;
    mapping(address => mapping(bytes16 => inGameState)) public inGame;

    modifier onlyOnGoingGame(bytes16 _gameId) {
        require(
            Games[_gameId].state == GameState.OnGoingGame
        );
        _;
    }

    modifier ifPlayerInGame(bytes16 _gameId, address _player, uint8 _pIndex) {
        require(
            Games[_gameId].players[_pIndex] == _player &&
            inGame[_player][_gameId] == inGameState.Playing
        );
        _;
    }

    modifier onlyNonBustedOrSplit(bytes16 _gameId, uint8 _pIndex) {
        require(
            Games[_gameId].pState[_pIndex] == PlayerState.notBusted ||
            Games[_gameId].pState[_pIndex] == PlayerState.hasSplit ||
            Games[_gameId].pState[_pIndex] == PlayerState.isSplit
        );
        _;
    }

    modifier onlyNonBusted(bytes16 _gameId, uint8 _pIndex) {
        require(
            Games[_gameId].pState[_pIndex] == PlayerState.notBusted
        );
        _;
    }

    modifier whenTableSettled(bytes16 _gameId) {
        address[] memory _players = Games[_gameId].players;
        for (uint256 i = 0; i < _players.length; i++) {
            require(
                uint8(Games[_gameId].pState[i]) >= uint8(PlayerState.isSettled)
            );
        }
        _;
    }

    TreasuryInstance public treasury;

    uint8 maxPlayers;
    // uint256 nonce;

    event BetPlaced(
        uint8 tokenIndex,
        address player,
        uint256 betAmount
    );

    event GameInitializing(
        bytes16 gameId
    );

    event GameInitialized(
        bytes16 indexed gameId,
        uint128[] bets,
        uint8[] tokens,
        uint256 serverId,
        uint256 indexed landId,
        uint256 indexed tableId
    );

    event PlayerCardDrawn(
        bytes16 gameId,
        address player,
        uint8 playerIndex,
        uint8 cardsIndex,
        string cardSuit,
        string cardVal
    );

    event DealersCardDrawn(
        bytes16 gameId,
        uint8 cardsIndex,
        string cardSuit,
        string cardVal
    );

    event DealersCardRevealed(
        bytes16 gameId,
        uint8 cardsIndex,
        string cardSuit,
        string cardVal
    );

    event splitHand(
        bytes16 gameId,
        address player,
        uint256 newIndex,
        uint8[] hand,
        uint8[] split
    );

    event InsurancePurchased(
        bytes16 gameId,
        address player,
        uint8 playerIndex
    );

    event InsurancePayout(
        address player,
        uint256 amount
    );

    event PlayersPayout(
        address player,
        uint256 amount
    );

    event FinishedGame(
        bytes16 gameId
    );

    event FinishedGameDetails(
        uint256 serverId,
        uint256 landId,
        uint256 tableId
    );

    event DoubleDown(
        uint256 powerAfter
    );

    event Busted(
        bool
    );

    PointerInstance public pointerContract;

    constructor(
        address _treasuryAddress,
        uint8 _maxPlayers,
        address _pointerAddress

    ) {
        require(_maxPlayers < 10);
        treasury = TreasuryInstance(_treasuryAddress);
        maxPlayers = _maxPlayers;
        pointerContract = PointerInstance(_pointerAddress);
    }

    /* function setMultiTail(
        uint256 _serverId,
        uint256 _landId,
        uint256 _tableId,
        bytes32 _localhashB
    ) external onlyCEO {
        _setMultiTail(
            _serverId,
            _landId,
            _tableId,
            _localhashB
        );
    } */

    function _addPoints(
        address _player,
        uint256 _points,
        address _token,
        uint256 _numPlayers,
        uint256 _wearableBonus
    )
        private
    {
        pointerContract.addPoints(
            _player,
            _points,
            _token,
            _numPlayers,
            _wearableBonus
        );
    }

    function checkPlayer(
        bytes16 _gameId,
        address _player
    )
        private
    {
        require(
            inGame[_player][_gameId] == inGameState.notJoined ||
            inGame[_player][_gameId] == inGameState.EndedPlay
        );

        inGame[_player][_gameId] = inGameState.Playing;
    }

    function takePlayersBet(
        bytes16 _gameId,
        uint8 _playerIndex
    )
        private
    {
        uint8 tokenIndex = Games[_gameId].tokens[_playerIndex];
        address player = Games[_gameId].players[_playerIndex];
        uint256 betAmount = Games[_gameId].bets[_playerIndex];

        require(
            treasury.getMaximumBet(tokenIndex) >= betAmount
        );

        treasury.tokenInboundTransfer(
            tokenIndex, player, betAmount
        );

        emit BetPlaced(
            tokenIndex, player, betAmount
        );
    }

    function initializePlayer(
        bytes16 _gameId,
        uint8 _pIndex
    )
        private
    {
        address[] memory _players = Games[_gameId].players;

        checkPlayer(
            _gameId, _players[_pIndex]
        );

        Games[_gameId].pState[_pIndex] = PlayerState.notBusted;
    }

    function checkForBlackJack(
        bytes16 _gameId,
        uint8 _playerIndex
    )
        private
    {
        address[] memory _players = Games[_gameId].players;

        if (
            isBlackJack(
                    getHand(_gameId, _players[_playerIndex], _playerIndex)
            )) {
            NonBustedPlayers[_gameId].push(_playerIndex);
            Games[_gameId].pState[_playerIndex] = PlayerState.hasBlackJack;
        }
    }

    function drawDealersCard(
        bytes16 _gameId,
        bytes32 _localhashA
    )
        private
    {
        uint8 _card = drawCard(_gameId, _localhashA);

        (
            string memory _cardsSuit,
            string memory _cardsVal
        ) = getCardsDetails(_card);

        DealersVisible[_gameId].push(_card);

        emit DealersCardDrawn(
            _gameId,
            _card,
            _cardsSuit,
            _cardsVal
        );
    }

    function drawPlayersCard(
        bytes16 _gameId,
        uint8 _pIndex,
        bytes32 _localhashA
    )
        private
    {
        address _player = Games[_gameId].players[_pIndex];

        uint8 _card = drawCard(_gameId, _localhashA);

        (
            string memory _cardsSuit,
            string memory _cardsVal
        ) = getCardsDetails(_card);

        uint8[] storage playersHand = hasSplit(_gameId, _pIndex)
            ? PlayerSplit[_player][_gameId]
            : PlayersHand[_player][_gameId];

        playersHand.push(_card);

        emit PlayerCardDrawn(
            _gameId,
            _player,
            _pIndex,
            _card,
            _cardsSuit,
            _cardsVal
        );
    }

    function initializeGame(
        bytes16 _gameId,
        address[] calldata _players,
        uint128[] calldata _bets,
        uint8[] calldata _tokens,
        uint256 _serverId,
        uint256 _landId,
        uint256 _tableId
        // bytes32 _localhashA,
        // bytes32 _localhashB
    )
        external
        whenNotPaused
        onlyWorker
    {
        require(
            _players.length <= maxPlayers &&
            _bets.length == _tokens.length &&
            _tokens.length == _players.length
        );

        /* _consumeMulti(
            _serverId,
            _landId,
            _tableId,
            _localhashB
        ); */

        // treasury.consumeHash(_localhashA);

        // gameId = getGameId(_serverId, _landId, _tableId, _players, nonce);
        // nonce = nonce + 1;

        require(
            Games[_gameId].state == GameState.NewGame ||
            Games[_gameId].state == GameState.EndedGame
        );

        // starting to initialize game
        emit GameInitializing(_gameId);

        uint8[] storage _deck = prepareDeck(
            _gameId
        );

        Game memory _game = Game(
            _players,
            _bets,
            _tokens,
            _deck,
            uint8(_players.length),
            new PlayerState[](_players.length),
            GameState.OnGoingGame
        );

        Games[_gameId] = _game;

        uint8 pIndex; // playersIndex

        // first card drawn to each player + take bets
        for (pIndex = 0; pIndex < _players.length; pIndex++) {

            initializePlayer(
                _gameId, pIndex
            );

            takePlayersBet(
                _gameId, pIndex
            );

            /* drawPlayersCard(
                _gameId, pIndex, _localhashA
            );*/
        }

        // dealers first card (visible)
        /*drawDealersCard(
            _gameId, _localhashA
        );*/

        delete NonBustedPlayers[_gameId];

        // players second cards (visible)
        for (pIndex = 0; pIndex < _players.length; pIndex++) {

            /*drawPlayersCard(
                _gameId, pIndex, _localhashA
            );*/

            checkForBlackJack(
                _gameId, pIndex
            );
        }

        delete pIndex;

        /*DealersHidden[_gameId] =
            HiddenCard({
                hashChild: _localhashB,
                hashParent: 0x0
        });*/

        emit GameInitialized(
            _gameId,
            _bets,
            _tokens,
            _serverId,
            _landId,
            _tableId
        );
    }

    function manualPayout(
        bytes16 _gameId,
        uint256 _serverId,
        uint256 _landId,
        uint256 _tableId,
        uint128[] calldata _payoutAmounts,
        uint128[] calldata _refundAmounts,
        uint128[] calldata _wearableBonus
    )
        external
        onlyOnGoingGame(_gameId)
        whenNotPaused
        onlyWorker
    {

        /*_consumeHashes(
            _serverId,
            _landId,
            _tableId,
            _localHashes
        );*/

        _payout(
            _gameId,
            _payoutAmounts,
            _refundAmounts,
            _wearableBonus
        );

        emit FinishedGame(
            _gameId
            // _localhashB
        );

        emit FinishedGameDetails(
            _serverId,
            _landId,
            _tableId
        );
    }

    function _payout(
        bytes16 _gameId,
        uint128[] calldata _payoutAmounts,
        uint128[] calldata _refundAmounts,
        uint128[] calldata _wearableBonus
    )
        internal
    {
        Games[_gameId].state = GameState.EndedGame;
        for (uint8 i = 0; i < _payoutAmounts.length; i++) {
            payoutAmount(
                Games[_gameId].tokens[i],
                Games[_gameId].players[i],
                _payoutAmounts[i] + _refundAmounts[i]
            );

            _smartPoints(
                _gameId,
                i,
                _refundAmounts[i],
                _wearableBonus[i]
            );
        }
    }

    /* function _consumeHashes(
        uint256 _serverId,
        uint256 _landId,
        uint256 _tableId,
        bytes32[] calldata _localHashes
    )
        internal
    {
        for (uint256 i = 0; i < _localHashes.length; i++) {
            _consumeMulti(
                _serverId,
                _landId,
                _tableId,
                _localHashes[i]
            );
        }
    } */

    function _smartPoints(
        bytes16 _gameId,
        uint8 _pIndex,
        uint128 _refundAmount,
        uint128 _wearableBonus
    )
        internal
    {
        require(Games[_gameId].bets[_pIndex] >= _refundAmount);

        _addPoints(
            Games[_gameId].players[_pIndex],
            Games[_gameId].bets[_pIndex] - _refundAmount,
            treasury.getTokenAddress(Games[_gameId].tokens[_pIndex]),
            Games[_gameId].players.length,
            _wearableBonus
        );
    }

    function prepareDeck(
        bytes16 _gameId
    )
        internal
        returns (uint8[] storage _deck)
    {
        _deck = Games[_gameId].deck;
        for (uint8 i = 0; i < 52; i++) {
            _deck.push(i);
        }
    }

    function drawCard(
        bytes16 _gameId,
        bytes32 _localhashA
    )
        internal
        returns (uint8)
    {
        uint8[] storage _deck = Games[_gameId].deck;
        uint256 _card = getRandomCardIndex(
            _localhashA, _deck.length
        );
        uint8 card = _deck[_card];
        _deck[_card] = _deck[_deck.length - 1];
        _deck.pop();
        return card;
    }

    function hitMove(
        bytes16 _gameId,
        address _player,
        uint8 _pIndex,
        bytes32 _localhashA
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBustedOrSplit(_gameId, _pIndex)
        ifPlayerInGame(_gameId, _player, _pIndex)
    {
        // treasury.consumeHash(_localhashA);

        drawPlayersCard(
           _gameId, _pIndex, _localhashA
        );

        uint256 playersPower = getHandsPower(
            getHand(_gameId, _player, _pIndex)
        );

        if (playersPower > 21) {
            Games[_gameId].pState[_pIndex] = PlayerState.isBusted;
        }

        if (playersPower == 21) {
            NonBustedPlayers[_gameId].push(_pIndex);
            Games[_gameId].pState[_pIndex] = PlayerState.isSettled;
        }
    }

    function stayMove(
        bytes16 _gameId,
        address _player,
        uint8 _pIndex
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBustedOrSplit(_gameId, _pIndex)
        ifPlayerInGame(_gameId, _player, _pIndex)
    {
        NonBustedPlayers[_gameId].push(_pIndex);
        Games[_gameId].pState[_pIndex] = PlayerState.isSettled;
    }

    function revealDealersCard(
        bytes16 _gameId,
        // uint256 _serverId,
        // uint256 _landId,
        // uint256 _tableId,
        bytes32 _localhashB
    )
        internal
    {
        uint8 revealed = drawCard(_gameId, _localhashB);

        /*_consumeMulti(
            _serverId,
            _landId,
            _tableId,
            _localhashB
        );*/

        (
            string memory _cardsSuit,
            string memory _cardsVal
        ) = getCardsDetails(revealed);

        DealersVisible[_gameId].push(revealed);

        emit DealersCardRevealed(
            _gameId,
            revealed,
            _cardsSuit,
            _cardsVal
        );
    }

    function dealersMove(
        bytes16 _gameId,
        // uint256 _serverId,
        // uint256 _landId,
        // uint256 _tableId,
        bytes32 _localhashA,
        bytes32 _localhashB
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        whenTableSettled(_gameId)
    {
        require(
            DealersHidden[_gameId].hashParent == 0x0
        );

        DealersHidden[_gameId].hashParent = _localhashB;

        require(
            verifyHiddenCard(
                DealersHidden[_gameId].hashChild,
                DealersHidden[_gameId].hashParent
            ) == true
        );

        // treasury.consumeHash(_localhashA);

        /* revealDealersCard(
            _gameId,
            _serverId,
            _landId,
            _tableId,
            _localhashB
        ); */

        uint8[] memory _leftPlayers = getNotBustedPlayers(_gameId);

        // check if any player left in the game
        if (_leftPlayers.length > 0) {

            // check if dealer has a blackjack - proceed to payout
            if (isBlackJack(DealersVisible[_gameId])) {

                $payoutAgainstBlackJack(_gameId, _leftPlayers);

            // check if dealer needs more cards
            } else {

                uint256 dealersPower = getHandsPower(
                    DealersVisible[_gameId]
                );

                uint8 _card;

                // draw cards for dealer with _localhashA
                while (dealersPower <= 16) {

                    _card = drawCard(_gameId, _localhashA);

                    (
                        string memory _cardsSuit,
                        string memory _cardsVal
                    ) = getCardsDetails(_card);

                    dealersPower = _dealerAddVisible(
                        _gameId,
                        _card,
                        _cardsSuit,
                        _cardsVal
                    );

                }

                delete _card;

                // calculate any winnings and payout
                $payoutAgainstDealersHand(_gameId, _leftPlayers, dealersPower);
            }
        }

        // mark all players finishing the game
        address[] memory _players = Games[_gameId].players;
        for (uint256 i = 0; i < _players.length; i++) {
            inGame[_players[i]][_gameId] = inGameState.EndedPlay;
        }

        // set game status to ended
        Games[_gameId].state = GameState.EndedGame;

        emit FinishedGame(
            _gameId
            // _localhashB
        );
    }

    function _dealerAddVisible(
        bytes16 _gameId,
        uint8 _card,
        string memory _cardsSuit,
        string memory _cardsVal
    )
        internal
        returns (uint256)
    {
        DealersVisible[_gameId].push(_card);

        emit DealersCardDrawn(
            _gameId,
            _card,
            _cardsSuit,
            _cardsVal
        );

        return getHandsPower(
            DealersVisible[_gameId]
        );
    }

    function $payoutAgainstBlackJack(
        bytes16 _gameId,
        uint8[] memory _leftPlayers
    )
        private
    {
        for (uint256 i = 0; i < _leftPlayers.length; i++) {

            address player = Games[_gameId].players[_leftPlayers[i]];

            // payout if player also has a blackjack
            if (Games[_gameId].pState[i] == PlayerState.hasBlackJack) {

                uint128 amount = Games[_gameId].bets[_leftPlayers[i]];

                payoutAmount(
                    Games[_gameId].tokens[_leftPlayers[i]],
                    player,
                    amount
                );

                emit PlayersPayout(
                    player,
                    amount
                );
            }

            // payout if player purchased insurance
            if (PlayersInsurance[player][_gameId] == true) {

                uint128 amount = Games[_gameId].bets[_leftPlayers[i]];

                payoutAmount(
                    Games[_gameId].tokens[_leftPlayers[i]],
                    player,
                    amount
                );

                emit InsurancePayout(
                    player,
                    amount
                );
            }
        }
    }

    function $payoutAgainstDealersHand(
        bytes16 _gameId,
        uint8[] memory _leftPlayers,
        uint256 _dealersPower
    )
        private
    {
        for (uint256 i = 0; i < _leftPlayers.length; i++) {

            uint8 pi = _leftPlayers[i]; // players index
            address player = Games[_gameId].players[pi];
            uint256 playersPower = getHandsPower(getHand(_gameId, player, pi));
            uint128 payout;

            if (Games[_gameId].pState[pi] == PlayerState.hasBlackJack) {
                payout = Games[_gameId].bets[pi] * 250 / 100;
            }
            else if (playersPower > _dealersPower) {
                payout = Games[_gameId].bets[pi] * 200 / 100;
            }
            else if (playersPower == _dealersPower) {
                payout = Games[_gameId].bets[pi];
            }

            if (payout > 0) {
                payoutAmount(
                    Games[_gameId].tokens[pi],
                    player,
                    payout
                );
                emit PlayersPayout(
                    player,
                    payout
                );
            }
        }
    }

    function getNotBustedPlayers(
        bytes16 _gameId
    )
        public
        view
        returns (uint8[] memory)
    {
        return NonBustedPlayers[_gameId];
    }

    function payoutAmount(
        uint8 _tokenIndex,
        address _player,
        uint128 _amount
    )
        private
    {
        treasury.tokenOutboundTransfer(
            _tokenIndex, _player, uint256(_amount)
        );
    }

    function splitCards(
        bytes16 _gameId,
        address _player,
        uint8 _pIndex
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBusted(_gameId, _pIndex)
        ifPlayerInGame(_gameId, _player, _pIndex)
    {
        require(
            PlayerSplit[_player][_gameId].length == 0 &&
            canSplitCards(PlayersHand[_player][_gameId])
        );

        Games[_gameId].players.push(_player);
        Games[_gameId].bets.push(Games[_gameId].bets[_pIndex]);
        Games[_gameId].tokens.push(Games[_gameId].tokens[_pIndex]);
        Games[_gameId].pState.push(PlayerState.isSplit);
        Games[_gameId].pState[_pIndex] = PlayerState.hasSplit;

        takePlayersBet(
            _gameId, _pIndex
        );

        PlayersHand[_player][_gameId].pop();
        PlayerSplit[_player][_gameId] = PlayersHand[_player][_gameId];

        emit splitHand(
            _gameId,
            _player,
            Games[_gameId].players.length - 1,
            PlayersHand[_player][_gameId],
            PlayerSplit[_player][_gameId]
        );
    }

    function purchaseInsurance(
        bytes16 _gameId,
        address _player,
        uint8 _pIndex
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBusted(_gameId, _pIndex)
    {
        require (
            PlayersHand[_player][_gameId].length == 2 &&
            PlayersInsurance[_player][_gameId] == false
        );

        require (
            DealersVisible[_gameId].length == 1 &&
            getHandsPower(DealersVisible[_gameId]) == 11
        );

        PlayersInsurance[_player][_gameId] = true;

        uint8 playersCount = Games[_gameId].playersCount;
        uint8 tokenIndex = Games[_gameId].tokens[_pIndex];
        address player = Games[_gameId].players[_pIndex];
        uint256 betAmount = Games[_gameId].bets[_pIndex];

        _addPoints(
            player,
            betAmount / 2,
            treasury.getTokenAddress(tokenIndex),
            playersCount,
            0
        );

        treasury.tokenInboundTransfer(
            tokenIndex, player, betAmount / 2
        );

        emit InsurancePurchased(
            _gameId, player, _pIndex
        );
    }

    function doubleDown(
        bytes16 _gameId,
        address _player,
        bytes32 _localhashA,
        uint8 _pIndex
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBusted(_gameId, _pIndex)
        ifPlayerInGame(_gameId, _player, _pIndex)
    {
        require (
            PlayersHand[_player][_gameId].length == 2
        );

        // treasury.consumeHash(_localhashA);

        uint8 tokenIndex = Games[_gameId].tokens[_pIndex];
        address player = Games[_gameId].players[_pIndex];
        uint256 betAmount = Games[_gameId].bets[_pIndex];
        uint8 playersCount = Games[_gameId].playersCount;

        _addPoints(
            player,
            betAmount,
            treasury.getTokenAddress(tokenIndex),
            playersCount,
            0
        );

        treasury.tokenInboundTransfer(
            tokenIndex,
            player,
            betAmount
        );

        setBetAmount(
            _gameId,
            _pIndex,
            uint128(betAmount * 2)
        );

        postDoubleDownActions(
            _gameId,
            _player,
            _localhashA,
            _pIndex
        );
    }

    function setBetAmount(
        bytes16 _gameId,
        uint8 _pIndex,
        uint128 newBetAmount
    )
        internal
    {
        Games[_gameId].bets[_pIndex] = newBetAmount;
    }

    function postDoubleDownActions(
        bytes16 _gameId,
        address _player,
        bytes32 _localhashA,
        uint8 _pIndex
    )
        internal
    {
        drawPlayersCard(
           _gameId, _pIndex, _localhashA
        );

        uint256 playersPower = getHandsPower(
            getHand(_gameId, _player, _pIndex)
        );

        emit DoubleDown(
            playersPower
        );

        if (playersPower > 21) {
            Games[_gameId].pState[_pIndex] = PlayerState.isBusted;
            emit Busted(true);
        } else {
            NonBustedPlayers[_gameId].push(_pIndex);
            Games[_gameId].pState[_pIndex] = PlayerState.isSettled;
            emit Busted(false);
        }
    }

    function checkDeck(
        bytes16 _gameId
    )
        external
        view
        returns (uint8[] memory _deck)
    {
        return Games[_gameId].deck;
    }

    function getGameId(
        uint256 _serverID,
        uint256 _landID,
        uint256 _tableID,
        address[] memory _players,
        uint256 _nonce
    )
        public
        pure
        returns (bytes16 gameId)
    {
        gameId = bytes16(
            keccak256(
                abi.encodePacked(_serverID, _landID, _tableID, _players, _nonce)
            )
        );
    }

    /*
    function checkPlayerInGame(
        bytes16 _gameId,
        address _player
    )
        external
        view
        returns (bool)
    {
        return inGame[_player][_gameId] == inGameState.notJoined ? false : true;
    }

    function checkMyHand(
        bytes16 _gameId
    )
        external
        view
        returns (uint8[] memory)
    {
        return checkPlayersHand(_gameId, msg.sender);
    }

    function checkMySplit(
        bytes16 _gameId
    )
        external
        view
        returns (uint8[] memory)
    {
        return checkPlayerSplit(_gameId, msg.sender);
    }

    function checkDealersHand(
        bytes16 _gameId
    )
        public
        view
        returns (uint8[] memory)
    {
        return DealersVisible[_gameId];
    }

    function checkPlayersHand(
        bytes16 _gameId,
        address _player
    )
        public
        view
        returns (uint8[] memory)
    {
        return PlayersHand[_player][_gameId];
    }

    function checkPlayerSplit(
        bytes16 _gameId,
        address _player
    )
        public
        view
        returns (uint8[] memory)
    {
        return PlayerSplit[_player][_gameId];
    }*/

    function getHand(
        bytes16 _gameId,
        address _player,
        uint8 _playerIndex
    )
        public
        view
        returns (uint8[] memory playersHand)
    {
        playersHand = hasSplit(_gameId, _playerIndex)
            ? PlayerSplit[_player][_gameId]
            : PlayersHand[_player][_gameId];
    }

    function hasSplit(
        bytes16 _gameId,
        uint8 _pIndex
    )
        public
        view
        returns (bool)
    {
        return Games[_gameId].pState[_pIndex] == PlayerState.isSplit;
    }

    function updatePointer(
        address _newPointerAddress
    )
        external
        onlyCEO
    {
        pointerContract = PointerInstance(_newPointerAddress);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"},{"internalType":"uint8","name":"_maxPlayers","type":"uint8"},{"internalType":"address","name":"_pointerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"tokenIndex","type":"uint8"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"betAmount","type":"uint256"}],"name":"BetPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"Busted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newCEO","type":"address"}],"name":"CEOSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"uint8","name":"cardsIndex","type":"uint8"},{"indexed":false,"internalType":"string","name":"cardSuit","type":"string"},{"indexed":false,"internalType":"string","name":"cardVal","type":"string"}],"name":"DealersCardDrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"uint8","name":"cardsIndex","type":"uint8"},{"indexed":false,"internalType":"string","name":"cardSuit","type":"string"},{"indexed":false,"internalType":"string","name":"cardVal","type":"string"}],"name":"DealersCardRevealed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"powerAfter","type":"uint256"}],"name":"DoubleDown","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"}],"name":"FinishedGame","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"serverId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"landId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tableId","type":"uint256"}],"name":"FinishedGameDetails","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"uint128[]","name":"bets","type":"uint128[]"},{"indexed":false,"internalType":"uint8[]","name":"tokens","type":"uint8[]"},{"indexed":false,"internalType":"uint256","name":"serverId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"landId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tableId","type":"uint256"}],"name":"GameInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"}],"name":"GameInitializing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InsurancePayout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint8","name":"playerIndex","type":"uint8"}],"name":"InsurancePurchased","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint8","name":"playerIndex","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"cardsIndex","type":"uint8"},{"indexed":false,"internalType":"string","name":"cardSuit","type":"string"},{"indexed":false,"internalType":"string","name":"cardVal","type":"string"}],"name":"PlayerCardDrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PlayersPayout","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWorker","type":"address"}],"name":"WorkerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"existingWorker","type":"address"}],"name":"WorkerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"newIndex","type":"uint256"},{"indexed":false,"internalType":"uint8[]","name":"hand","type":"uint8[]"},{"indexed":false,"internalType":"uint8[]","name":"split","type":"uint8[]"}],"name":"splitHand","type":"event"},{"inputs":[{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"DealersHidden","outputs":[{"internalType":"bytes32","name":"hashChild","type":"bytes32"},{"internalType":"bytes32","name":"hashParent","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"","type":"bytes16"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"DealersVisible","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"Games","outputs":[{"internalType":"uint8","name":"playersCount","type":"uint8"},{"internalType":"enum dgBlackJack.GameState","name":"state","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"","type":"bytes16"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"NonBustedPlayers","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"PlayerSplit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"PlayersInsurance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newWorker","type":"address"}],"name":"addWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_newWorkers","type":"address[]"}],"name":"addWorkerBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_cards","type":"uint8[]"}],"name":"canSplitCards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"ceoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"}],"name":"checkDeck","outputs":[{"internalType":"uint8[]","name":"_deck","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"bytes32","name":"_localhashA","type":"bytes32"},{"internalType":"bytes32","name":"_localhashB","type":"bytes32"}],"name":"dealersMove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"bytes32","name":"_localhashA","type":"bytes32"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"doubleDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_card","type":"uint8"}],"name":"getCardsDetails","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint8","name":"_card","type":"uint8"}],"name":"getCardsPower","outputs":[{"internalType":"uint8","name":"power","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint8","name":"_card","type":"uint8"}],"name":"getCardsRawData","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_serverID","type":"uint256"},{"internalType":"uint256","name":"_landID","type":"uint256"},{"internalType":"uint256","name":"_tableID","type":"uint256"},{"internalType":"address[]","name":"_players","type":"address[]"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"getGameId","outputs":[{"internalType":"bytes16","name":"gameId","type":"bytes16"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_playerIndex","type":"uint8"}],"name":"getHand","outputs":[{"internalType":"uint8[]","name":"playersHand","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_cards","type":"uint8[]"}],"name":"getHandsPower","outputs":[{"internalType":"uint8","name":"powerMax","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"}],"name":"getNotBustedPlayers","outputs":[{"internalType":"uint8[]","name":"","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"hasSplit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_pIndex","type":"uint8"},{"internalType":"bytes32","name":"_localhashA","type":"bytes32"}],"name":"hitMove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"inGame","outputs":[{"internalType":"enum dgBlackJack.inGameState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address[]","name":"_players","type":"address[]"},{"internalType":"uint128[]","name":"_bets","type":"uint128[]"},{"internalType":"uint8[]","name":"_tokens","type":"uint8[]"},{"internalType":"uint256","name":"_serverId","type":"uint256"},{"internalType":"uint256","name":"_landId","type":"uint256"},{"internalType":"uint256","name":"_tableId","type":"uint256"}],"name":"initializeGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_cards","type":"uint8[]"}],"name":"isBlackJack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWorker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"uint256","name":"_serverId","type":"uint256"},{"internalType":"uint256","name":"_landId","type":"uint256"},{"internalType":"uint256","name":"_tableId","type":"uint256"},{"internalType":"uint128[]","name":"_payoutAmounts","type":"uint128[]"},{"internalType":"uint128[]","name":"_refundAmounts","type":"uint128[]"},{"internalType":"uint128[]","name":"_wearableBonus","type":"uint128[]"}],"name":"manualPayout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pointerContract","outputs":[{"internalType":"contract PointerInstance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"purchaseInsurance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_existingWorker","type":"address"}],"name":"removeWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_workerArray","type":"address[]"}],"name":"removeWorkerBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"splitCards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"stayMove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"contract TreasuryInstance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPointerAddress","type":"address"}],"name":"updatePointer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hashChild","type":"bytes32"},{"internalType":"bytes32","name":"_hashParent","type":"bytes32"}],"name":"verifyHiddenCard","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}]

60806040526000805460ff60a01b191690553480156200001e57600080fd5b5060405162005cbe38038062005cbe833981810160405260608110156200004457600080fd5b508051602080830151604093840151600080546001600160a01b031916339081178255808252600180865291879020805460ff19169092179091558551818152955194959294919390927ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc0929081900390910190a1604080516001600160a01b038316815290517fb10d2a24a8c3686841e966f0c2c64c385cfaecb50a09b16aa3579bfcf3989dcd9181900360200190a150600a8260ff16106200010757600080fd5b600a805460ff909316600160a01b0260ff60a01b196001600160a01b039586166001600160a01b03199586161716179055600b8054919093169116179055615b6980620001556000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806382c0e5221161013b578063c54f0c52116100b8578063e4c279b71161007c578063e4c279b714610cc4578063e6adfe3714610ce4578063e6fae6be14610d52578063efc5e73d14610df3578063f9bf6de314610ef157610248565b8063c54f0c5214610a8d578063c783feb714610b04578063d4652cf414610c34578063d4c5754314610c5b578063dac29c5114610c9157610248565b8063aa8d7c26116100ff578063aa8d7c2614610871578063b92742ff146108a1578063c1e14249146109cc578063c3170007146109f9578063c4f987a514610a6757610248565b806382c0e522146107a557806383cf376d146107e45780638456cb59146108075780639ac6c3ca1461080f578063aa1566451461084b57610248565b806350bfba99116101c957806361d027b31161018d57806361d027b3146106b0578063659ae43f146106b8578063697c6415146106fb578063776c2b8414610728578063806ad57e1461077f57610248565b806350bfba99146105655780635184c0661461056d578063574a47e3146105b25780635c975abb146106695780635f7b92571461067157610248565b8063433010c011610210578063433010c0146103195780634359cb0f146103ec578063457457af1461042b5780634c354436146104705780634d41ddaf146104b057610248565b80630a0f81681461024d578063252949491461027157806327d7874c146102c35780633025d9e2146102eb5780633f4ba83a14610311575b600080fd5b610255610f30565b604080516001600160a01b039092168252519081900360200190f35b6102986004803603602081101561028757600080fd5b50356001600160801b031916610f3f565b604051808360ff1681526020018260028111156102b157fe5b81526020019250505060405180910390f35b6102e9600480360360208110156102d957600080fd5b50356001600160a01b0316610f62565b005b6102e96004803603602081101561030157600080fd5b50356001600160a01b0316611066565b6102e96110d5565b6103cf600480360360a081101561032f57600080fd5b81359160208101359160408201359190810190608081016060820135600160201b81111561035c57600080fd5b82018360208201111561036e57600080fd5b803590602001918460208302840111600160201b8311171561038f57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506111a0915050565b604080516001600160801b03199092168252519081900360200190f35b6102e96004803603606081101561040257600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff1661121a565b6102e96004803603608081101561044157600080fd5b506001600160801b0319813516906001600160a01b036020820135169060ff604082013516906060013561154c565b6104976004803603602081101561048657600080fd5b50356001600160801b03191661191a565b6040805192835260208301919091528051918290030190f35b610551600480360360208110156104c657600080fd5b810190602081018135600160201b8111156104e057600080fd5b8201836020820111156104f257600080fd5b803590602001918460208302840111600160201b8311171561051357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611933945050505050565b604080519115158252519081900360200190f35b610255611957565b6102e96004803603608081101561058357600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040810135906060013560ff16611966565b610653600480360360208110156105c857600080fd5b810190602081018135600160201b8111156105e257600080fd5b8201836020820111156105f457600080fd5b803590602001918460208302840111600160201b8311171561061557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611da3945050505050565b6040805160ff9092168252519081900360200190f35b610551611e3a565b6102e96004803603606081101561068757600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff16611e4a565b610255612310565b6106d8600480360360208110156106ce57600080fd5b503560ff1661231f565b604051808360ff1681526020018260ff1681526020019250505060405180910390f35b6106536004803603604081101561071157600080fd5b506001600160801b03198135169060200135612331565b61075e6004803603604081101561073e57600080fd5b5080356001600160a01b031690602001356001600160801b031916612374565b6040518082600281111561076e57fe5b815260200191505060405180910390f35b6102e96004803603602081101561079557600080fd5b50356001600160a01b0316612394565b6102e9600480360360608110156107bb57600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff166123ed565b610551600480360360408110156107fa57600080fd5b5080359060200135612a26565b6102e9612a60565b6106536004803603606081101561082557600080fd5b506001600160a01b03813516906001600160801b03196020820135169060400135612b4f565b6105516004803603602081101561086157600080fd5b50356001600160a01b0316612b9f565b6105516004803603604081101561088757600080fd5b5080356001600160801b031916906020013560ff16612bb4565b6102e9600480360360e08110156108b757600080fd5b6001600160801b03198235169190810190604081016020820135600160201b8111156108e257600080fd5b8201836020820111156108f457600080fd5b803590602001918460208302840111600160201b8311171561091557600080fd5b919390929091602081019035600160201b81111561093257600080fd5b82018360208201111561094457600080fd5b803590602001918460208302840111600160201b8311171561096557600080fd5b919390929091602081019035600160201b81111561098257600080fd5b82018360208201111561099457600080fd5b803590602001918460208302840111600160201b831117156109b557600080fd5b919350915080359060208101359060400135612c16565b610653600480360360408110156109e257600080fd5b506001600160801b03198135169060200135613136565b6102e960048036036020811015610a0f57600080fd5b810190602081018135600160201b811115610a2957600080fd5b820183602082011115610a3b57600080fd5b803590602001918460208302840111600160201b83111715610a5c57600080fd5b509092509050613152565b6102e960048036036020811015610a7d57600080fd5b50356001600160a01b03166131e1565b610ab460048036036020811015610aa357600080fd5b50356001600160801b031916613237565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610af0578181015183820152602001610ad8565b505050509050019250505060405180910390f35b6102e9600480360360e0811015610b1a57600080fd5b6001600160801b03198235169160208101359160408201359160608101359181019060a081016080820135600160201b811115610b5657600080fd5b820183602082011115610b6857600080fd5b803590602001918460208302840111600160201b83111715610b8957600080fd5b919390929091602081019035600160201b811115610ba657600080fd5b820183602082011115610bb857600080fd5b803590602001918460208302840111600160201b83111715610bd957600080fd5b919390929091602081019035600160201b811115610bf657600080fd5b820183602082011115610c0857600080fd5b803590602001918460208302840111600160201b83111715610c2957600080fd5b5090925090506132c2565b610ab460048036036020811015610c4a57600080fd5b50356001600160801b031916613448565b61055160048036036040811015610c7157600080fd5b5080356001600160a01b031690602001356001600160801b0319166134b9565b6102e960048036036060811015610ca757600080fd5b506001600160801b031981351690602081013590604001356134d9565b61065360048036036020811015610cda57600080fd5b503560ff1661397c565b6102e960048036036020811015610cfa57600080fd5b810190602081018135600160201b811115610d1457600080fd5b820183602082011115610d2657600080fd5b803590602001918460208302840111600160201b83111715610d4757600080fd5b5090925090506139ac565b61055160048036036020811015610d6857600080fd5b810190602081018135600160201b811115610d8257600080fd5b820183602082011115610d9457600080fd5b803590602001918460208302840111600160201b83111715610db557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613a36945050505050565b610e1360048036036020811015610e0957600080fd5b503560ff16613a6e565b604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610e54578181015183820152602001610e3c565b50505050905090810190601f168015610e815780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610eb4578181015183820152602001610e9c565b50505050905090810190601f168015610ee15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610ab460048036036060811015610f0757600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff16613c8a565b6000546001600160a01b031681565b6002602052600090815260409020600481015460069091015460ff918216911682565b806001600160a01b038116610fbe576040805162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604482015290519081900360640190fd5b6000546001600160a01b0316331461100b576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc0916020908290030190a15050565b6000546001600160a01b031633146110b3576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611122576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b600054600160a01b900460ff1661116a5760405162461bcd60e51b8152600401808060200182810382526023815260200180615b116023913960400191505060405180910390fd5b6000805460ff60a01b191681556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d169339190a1565b6000858585858560405160200180868152602001858152602001848152602001838051906020019060200280838360005b838110156111e95781810151838201526020016111d1565b50505050919091019283525050604080518083038152602092830190915280519101209a9950505050505050505050565b3360009081526001602081905260409091205460ff1615151461126e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff169081111561129e57fe5b146112a857600080fd5b838260006001600160801b031983166000908152600260205260409020600501805460ff84169081106112d757fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561130257fe5b1480611363575060016001600160801b031983166000908152600260205260409020600501805460ff841690811061133657fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561136157fe5b145b806113c3575060026001600160801b031983166000908152600260205260409020600501805460ff841690811061139657fe5b90600052602060002090602091828204019190069054906101000a900460ff1660058111156113c157fe5b145b6113cc57600080fd5b6001600160801b03198616600090815260026020526040902080548791879187916001600160a01b0384169160ff841690811061140557fe5b6000918252602090912001546001600160a01b0316148015611462575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff16600281111561146057fe5b145b61146b57600080fd5b600560008a6001600160801b0319166001600160801b03191681526020019081526020016000208790806001815401808255809150506001900390600052602060002090602091828204019190069091909190916101000a81548160ff021916908360ff1602179055506003600260008b6001600160801b0319166001600160801b03191681526020019081526020016000206005018860ff168154811061150f57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561153c57fe5b0217905550505050505050505050565b3360009081526001602081905260409091205460ff161515146115a05760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8360016001600160801b0319821660009081526002602081905260409091206006015460ff16908111156115d057fe5b146115da57600080fd5b848360006001600160801b031983166000908152600260205260409020600501805460ff841690811061160957fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561163457fe5b1480611695575060016001600160801b031983166000908152600260205260409020600501805460ff841690811061166857fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561169357fe5b145b806116f5575060026001600160801b031983166000908152600260205260409020600501805460ff84169081106116c857fe5b90600052602060002090602091828204019190069054906101000a900460ff1660058111156116f357fe5b145b6116fe57600080fd5b6001600160801b03198716600090815260026020526040902080548891889188916001600160a01b0384169160ff841690811061173757fe5b6000918252602090912001546001600160a01b0316148015611794575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff16600281111561179257fe5b145b61179d57600080fd5b6117a88a8989613d70565b60006117bd6117b88c8c8c613c8a565b611da3565b60ff169050601581111561182d576001600160801b03198b16600090815260026020526040902060050180546004919060ff8c169081106117fa57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561182757fe5b02179055505b806015141561190d57600560008c6001600160801b0319166001600160801b03191681526020019081526020016000208990806001815401808255809150506001900390600052602060002090602091828204019190069091909190916101000a81548160ff021916908360ff1602179055506003600260008d6001600160801b0319166001600160801b03191681526020019081526020016000206005018a60ff16815481106118da57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561190757fe5b02179055505b5050505050505050505050565b6003602052600090815260409020805460019091015482565b600061193e82611da3565b60ff166015148015611951575081516002145b92915050565b600b546001600160a01b031681565b3360009081526001602081905260409091205460ff161515146119ba5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8360016001600160801b0319821660009081526002602081905260409091206006015460ff16908111156119ea57fe5b146119f457600080fd5b848260006001600160801b031983166000908152600260205260409020600501805460ff8416908110611a2357fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115611a4e57fe5b14611a5857600080fd5b6001600160801b03198716600090815260026020526040902080548891889187916001600160a01b0384169160ff8416908110611a9157fe5b6000918252602090912001546001600160a01b0316148015611aee575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff166002811115611aec57fe5b145b611af757600080fd5b6001600160a01b03891660009081526006602090815260408083206001600160801b03198e168452909152902054600214611b3157600080fd5b6001600160801b03198a166000908152600260208190526040822001805460ff8a16908110611b5c57fe5b6000918252602080832081830401546001600160801b03198f168452600290915260408320805460ff601f9094166101000a90920483169450918b16908110611ba157fe5b60009182526020808320909101546001600160801b03198f16835260029091526040822060010180546001600160a01b0390921693509060ff8c16908110611be557fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03166001600160801b031690506000600260008f6001600160801b0319166001600160801b031916815260200190815260200160002060040160009054906101000a900460ff169050611ced8383600a60009054906101000a90046001600160a01b03166001600160a01b0316635ad3f918886040518263ffffffff1660e01b8152600401808260ff16815260200191505060206040518083038186803b158015611cb657600080fd5b505afa158015611cca573d6000803e3d6000fd5b505050506040513d6020811015611ce057600080fd5b505160ff85166000613fc3565b600a54604080516341d4c74f60e01b815260ff871660048201526001600160a01b03868116602483015260448201869052915191909216916341d4c74f9160648083019260209291908290030181600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050506040513d6020811015611d7657600080fd5b50611d8790508e8c60028502614062565b611d938e8e8e8e6140ce565b5050505050505050505050505050565b60008080805b84518160ff161015611df557611dd4858260ff1681518110611dc757fe5b602002602001015161397c565b938401939150600b60ff83161415611ded576001830192505b600101611da9565b5060158360ff161115611e335760005b8260ff168160ff161015611e3157600a8403935060158460ff1611611e2957611e31565b600101611e05565b505b5050919050565b600054600160a01b900460ff1681565b3360009081526001602081905260409091205460ff16151514611e9e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff1690811115611ece57fe5b14611ed857600080fd5b838260006001600160801b031983166000908152600260205260409020600501805460ff8416908110611f0757fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115611f3257fe5b14611f3c57600080fd5b6001600160a01b03851660009081526006602090815260408083206001600160801b03198a1684529091529020546002148015611fa757506001600160a01b03851660009081526008602090815260408083206001600160801b03198a16845290915290205460ff16155b611fb057600080fd5b6001600160801b03198616600090815260046020526040902054600114801561206557506001600160801b03198616600090815260046020908152604091829020805483518184028101840190945280845261205e939283018282801561205457602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116120255790505b5050505050611da3565b60ff16600b145b61206e57600080fd5b6001600160a01b03851660009081526008602090815260408083206001600160801b03198a1684528252808320805460ff19166001179055600291829052822060048101549101805460ff928316939288169081106120c957fe5b6000918252602080832081830401546001600160801b03198c168452600290915260408320805460ff601f9094166101000a9092048316945091891690811061210e57fe5b60009182526020808320909101546001600160801b03198c16835260029091526040822060010180546001600160a01b0390921693509060ff8a1690811061215257fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03166001600160801b0316905061221d826002838161219457fe5b600a5460408051630b5a7f2360e31b815260ff8a166004820152905193909204926001600160a01b0390911691635ad3f918916024808301926020929190829003018186803b1580156121e657600080fd5b505afa1580156121fa573d6000803e3d6000fd5b505050506040513d602081101561221057600080fd5b505160ff88166000613fc3565b600a546001600160a01b03166341d4c74f8484600285046040518463ffffffff1660e01b8152600401808460ff168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561228457600080fd5b505af1158015612298573d6000803e3d6000fd5b505050506040513d60208110156122ae57600080fd5b5050604080516001600160801b03198c1681526001600160a01b038416602082015260ff8a168183015290517fdb6e35eacf9090f40a5453fd7c372403ecea66a053067bc14a03ba91cc06e1a69181900360600190a150505050505050505050565b600a546001600160a01b031681565b600d60ff919091168181049291900690565b6004602052816000526040600020818154811061234d57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b600960209081526000928352604080842090915290825290205460ff1681565b6000546001600160a01b031633146123e1576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b6123ea8161429a565b50565b3360009081526001602081905260409091205460ff161515146124415760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff169081111561247157fe5b1461247b57600080fd5b838260006001600160801b031983166000908152600260205260409020600501805460ff84169081106124aa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1660058111156124d557fe5b146124df57600080fd5b6001600160801b03198616600090815260026020526040902080548791879187916001600160a01b0384169160ff841690811061251857fe5b6000918252602090912001546001600160a01b0316148015612575575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff16600281111561257357fe5b145b61257e57600080fd5b6001600160a01b03881660009081526007602090815260408083206001600160801b03198d16845290915290205415801561264f57506001600160a01b03881660009081526006602090815260408083206001600160801b03198d168452825291829020805483518184028101840190945280845261264f939283018282801561264557602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116126165790505b5050505050613a36565b61265857600080fd5b6001600160801b03198916600081815260026020908152604082208054600180820183558285529284200180546001600160a01b0319166001600160a01b038e1617905592909152018054819060ff8a169081106126b257fe5b600091825260208083206002808404909101548554600180820188559686528386208382040180546001600160801b036010938a16840261010090810a828102199093169a90981690930290960a90920416909302949094179091556001600160801b03198c16825282905260409020018054819060ff8a1690811061273457fe5b60009182526020808320818304015484546001808201875595855282852083820401805460ff601f93841661010090810a82810219909316978516810a90950481169091029590951790556001600160801b03198f168086526002808552604087206005018054808a01825581895286892096810490960180549690941690940a9081029086021990941693909317905592528154908a169081106127d557fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561280257fe5b021790555061281189886143ab565b6001600160a01b03881660009081526006602090815260408083206001600160801b03198d168452909152902080548061284757fe5b60008281526020808220600019909301818104909301805460ff601f86166101000a0219169055919092556001600160a01b038a168083526006825260408084206001600160801b03198e1680865290845281852092855260078452818520908552909252912081546128ba9290615759565b506001600160801b031989166000818152600260209081526040808320546001600160a01b038d16808552600684528285208686528452828520818652600785528386208787528552948390208351968752938601526000190190840181905260a06060850181815284549186018290527f93675dd8ad58ef405624d8b6842ec6095972328ad8eba5238dfbe10b8119af0a958f958f959093909290608083019060c0840190869080156129ab57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161297c5790505b50508381038252848181548152602001915080548015612a0857602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116129d95790505b505097505050505050505060405180910390a1505050505050505050565b60408051602080820184905282518083038201815291830190925280519101206000908314612a56576000612a59565b60015b9392505050565b3360009081526001602081905260409091205460ff16151514612ab45760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b600054600160a01b900460ff1615612b13576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b60076020528260005260406000206020528160005260406000208181548110612b7757600080fd5b906000526020600020906020918282040191900692509250509054906101000a900460ff1681565b60016020526000908152604090205460ff1681565b600060026001600160801b031984166000908152600260205260409020600501805460ff8516908110612be357fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115612c0e57fe5b149392505050565b600054600160a01b900460ff1615612c75576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b3360009081526001602081905260409091205460ff16151514612cc95760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b600a54600160a01b900460ff168811801590612ce457508584145b8015612cef57508388145b612cf857600080fd5b6001600160801b03198a16600090815260026020819052604082206006015460ff1690811115612d2457fe5b1480612d5a57506001600160801b03198a1660009081526002602081905260409091206006015460ff1681811115612d5857fe5b145b612d6357600080fd5b604080516001600160801b03198c16815290517f5c79138ada278a9e3a8aa175a6ad8833ece98eca3658c5fe3b62edcafad3e5479181900360200190a16000612dab8b6145f3565b9050612db56157b7565b6040518060e001604052808c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b91829185019084908082843760009201919091525050509082525083546040805160208381028201810190925282815292810192918691830182828015612ecf57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612ea05790505b505050918352505060ff8c1660208201526040018b67ffffffffffffffff81118015612efa57600080fd5b50604051908082528060200260200182016040528015612f24578160200160208202803683370190505b50815260016020918201526001600160801b03198e16600090815260028252604090208251805193945084939192612f6192849290910190615801565b506020828101518051612f7a9260018501920190615856565b5060408201518051612f96916002840191602090910190615909565b5060608201518051612fb2916003840191602090910190615909565b50608082015160048201805460ff191660ff90921691909117905560a08201518051612fe891600584019160209091019061599d565b5060c082015160068201805460ff1916600183600281111561300657fe5b021790555090505060005b60ff81168b1115613038576130268d8261465f565b6130308d826143ab565b600101613011565b6001600160801b03198d16600090815260056020526040812061305a91615a0c565b5060005b60ff81168b111561307b576130738d82614753565b60010161305e565b6000905083858e6001600160801b0319167f8743b25d76999ba54481a9a665809ce87ada651caa268c665968e1418d3919928d8d8d8d8d6040518080602001806020018481526020018381038352888882818152602001925060200280828437600083820152601f01601f19169091018481038352868152602090810191508790870280828437600083820152604051601f909101601f1916909201829003995090975050505050505050a450505050505050505050505050565b6005602052816000526040600020818154811061234d57600080fd5b6000546001600160a01b0316331461319f576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b60005b60ff81168211156131dc576131d483838360ff168181106131bf57fe5b905060200201356001600160a01b031661429a565b6001016131a2565b505050565b6000546001600160a01b0316331461322e576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b6123ea81614858565b6001600160801b031981166000908152600560209081526040918290208054835181840281018401909452808452606093928301828280156132b657602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116132875790505b50505050509050919050565b8960016001600160801b0319821660009081526002602081905260409091206006015460ff16908111156132f257fe5b146132fc57600080fd5b600054600160a01b900460ff161561335b576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b3360009081526001602081905260409091205460ff161515146133af5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b6133be8b88888888888861496a565b604080516001600160801b03198d16815290517f8a06fcdc0d1be3eae3b1e12e7a91fab33f69e210d923e12bdcaf65436a1659a89181900360200190a1604080518b8152602081018b90528082018a905290517f9fe5558c57ecbdbb93265cb9523f472cb1ee19a51cdfbba09676f58b78ef8a369181900360600190a15050505050505050505050565b6001600160801b031981166000908152600260209081526040918290206003018054835181840281018401909452808452606093928301828280156132b6576000918252602091829020805460ff168452908202830192909160019101808411613287575094979650505050505050565b600860209081526000928352604080842090915290825290205460ff1681565b3360009081526001602081905260409091205460ff1615151461352d5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff169081111561355d57fe5b1461356757600080fd5b6001600160801b0319841660009081526002602090815260409182902080548351818402810184019094528084528793606093909291908301828280156135d757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116135b9575b5050505050905060005b8151811015613657576001600160801b0319831660009081526002602052604090206005018054600391908390811061361657fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561364157fe5b60ff16101561364f57600080fd5b6001016135e1565b506001600160801b031986166000908152600360205260409020600101541561367f57600080fd5b6001600160801b03198616600090815260036020526040902060018101859055546136aa9085612a26565b15156001146136b857600080fd5b60606136c387613237565b805190915015613829576001600160801b031987166000908152600460209081526040918290208054835181840281018401909452808452613757939283018282801561374d57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161371e5790505b5050505050611933565b1561376b576137668782614ac9565b613829565b6001600160801b03198716600090815260046020908152604080832080548251818502810185019093528083526137d793830182828015612054576000918252602091829020805460ff1684529082028301929091600191018084116120255790505050505050611da3565b60ff16905060005b60108211613818576137f18989614deb565b90506060806137ff83613a6e565b9150915061380f8b848484614eef565b935050506137df565b5060006138268984846150c5565b50505b6001600160801b0319871660009081526002602090815260409182902080548351818402810184019094528084526060939283018282801561389457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613876575b5050505050905060005b8151811015613914576002600960008484815181106138b957fe5b6020908102919091018101516001600160a01b0316825281810192909252604090810160009081206001600160801b03198e1682529092529020805460ff1916600183600281111561390757fe5b021790555060010161389e565b506001600160801b03198816600081815260026020818152604092839020600601805460ff1916909217909155815192835290517f8a06fcdc0d1be3eae3b1e12e7a91fab33f69e210d923e12bdcaf65436a1659a89281900390910190a15050505050505050565b60006c0581018202830384048505050560991b80600d60ff85160660ff16600d81106139a457fe5b1a9392505050565b6000546001600160a01b031633146139f9576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b60005b60ff81168211156131dc57613a2e83838360ff16818110613a1957fe5b905060200201356001600160a01b0316614858565b6001016139fc565b6000613a4882600181518110611dc757fe5b60ff16613a5b83600081518110611dc757fe5b60ff161480156119515750505160021490565b606080613a79615a31565b506040805160c081018252600160808201818152604360f81b60a0840152825282518084018452818152601160fa1b6020828101919091528084019190915283518085018552828152600960fb1b81830152838501528351808501909452908352605360f81b908301526060810191909152613af3615a58565b50604080516101e08101825260016101a08201818152604160f81b6101c0840152825282518084018452818152601960f91b6020828101919091528084019190915283518085018552828152603360f81b818301528385015283518085018552828152600d60fa1b81830152606084015283518085018552828152603560f81b81830152608084015283518085018552828152601b60f91b8183015260a084015283518085018552828152603760f81b8183015260c084015283518085018552828152600760fb1b8183015260e084015283518085018552828152603960f81b8183015261010084015283518085018552828152601560fa1b8183015261012084015283518085018552828152602560f91b8183015261014084015283518085018552828152605160f81b818301526101608401528351808501909452908352604b60f81b90830152610180810191909152600080613c518761231f565b91509150838260ff1660048110613c6457fe5b6020020151838260ff16600d8110613c7857fe5b60200201519550955050505050915091565b6060613c968483612bb4565b613ccc576001600160a01b03831660009081526006602090815260408083206001600160801b0319881684529091529020613cfa565b6001600160a01b03831660009081526007602090815260408083206001600160801b03198816845290915290205b805480602002602001604051908101604052809291908181526020018280548015613d6257602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411613d335790505b505050505090509392505050565b6001600160801b031983166000908152600260205260408120805460ff8516908110613d9857fe5b60009182526020822001546001600160a01b03169150613db88584614deb565b9050606080613dc683613a6e565b915091506000613dd68888612bb4565b613e0c576001600160a01b03851660009081526006602090815260408083206001600160801b03198c1684529091529020613e3a565b6001600160a01b03851660009081526007602090815260408083206001600160801b03198c16845290915290205b9050808490806001815401808255809150506001900390600052602060002090602091828204019190069091909190916101000a81548160ff021916908360ff1602179055507f9ba676ec758fab38fbc86eabb1315d0ba9ef270cbddd5e17ef84ae4e6ddf67fb88868987878760405180876001600160801b0319168152602001866001600160a01b031681526020018560ff1681526020018460ff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613f19578181015183820152602001613f01565b50505050905090810190601f168015613f465780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015613f79578181015183820152602001613f61565b50505050905090810190601f168015613fa65780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15050505050505050565b600b5460408051630680429560e01b81526001600160a01b03888116600483015260248201889052868116604483015260648201869052608482018590529151919092169163068042959160a48083019260609291908290030181600087803b15801561402f57600080fd5b505af1158015614043573d6000803e3d6000fd5b505050506040513d606081101561405957600080fd5b50505050505050565b6001600160801b031983166000908152600260205260409020600101805482919060ff851690811061409057fe5b90600052602060002090600291828204019190066010026101000a8154816001600160801b0302191690836001600160801b03160217905550505050565b6140d9848284613d70565b60006140e96117b8868685613c8a565b60ff1690507fba94a75104505ced25374f387d8a0bbc1e86fabb868da58dfa47769098c49ec1816040518082815260200191505060405180910390a160158111156141c8576001600160801b03198516600090815260026020526040902060050180546004919060ff851690811061415d57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561418a57fe5b0217905550604080516001815290517fe096251939cfd59087f1f0ecb1190348aefec0a88f2b6b90bb1e41deb40e50dd9181900360200190a1614293565b6001600160801b031985166000818152600560208181526040808420805460018101825590855282852083820401805460ff808b16601f9094166101000a848102910219909116179055948452600290915290912001805460039290811061422c57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561425957fe5b0217905550604080516000815290517fe096251939cfd59087f1f0ecb1190348aefec0a88f2b6b90bb1e41deb40e50dd9181900360200190a15b5050505050565b806001600160a01b0381166142f6576040805162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604482015290519081900360640190fd5b6001600160a01b03821660009081526001602052604090205460ff161561434e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aab6023913960400191505060405180910390fd5b6001600160a01b038216600081815260016020818152604092839020805460ff1916909217909155815192835290517fb10d2a24a8c3686841e966f0c2c64c385cfaecb50a09b16aa3579bfcf3989dcd9281900390910190a15050565b6001600160801b031982166000908152600260208190526040822001805460ff84169081106143d657fe5b6000918252602080832081830401546001600160801b031987168452600290915260408320805460ff601f9094166101000a9092048316945091851690811061441b57fe5b60009182526020808320909101546001600160801b03198716835260029091526040822060010180546001600160a01b0390921693509060ff861690811061445f57fe5b6000918252602091829020600282040154600a54604080516371da23e960e01b815260ff89166004820152905160019094166010026101000a9092046001600160801b0316945084936001600160a01b03909116926371da23e9926024808201939291829003018186803b1580156144d657600080fd5b505afa1580156144ea573d6000803e3d6000fd5b505050506040513d602081101561450057600080fd5b50516001600160801b0316101561451657600080fd5b600a54604080516341d4c74f60e01b815260ff861660048201526001600160a01b03858116602483015260448201859052915191909216916341d4c74f9160648083019260209291908290030181600087803b15801561457557600080fd5b505af1158015614589573d6000803e3d6000fd5b505050506040513d602081101561459f57600080fd5b50506040805160ff851681526001600160a01b038416602082015280820183905290517f65c4542a0147599e0783d3e59208f3bfffb745ae7d147bbe76da70b5676276719181900360600190a15050505050565b6001600160801b031981166000908152600260205260408120600301905b60348160ff16101561465957815460018181018455600084815260209081902090830401805460ff808616601f9095166101000a948502940219169290921790915501614611565b50919050565b6001600160801b031982166000908152600260209081526040918290208054835181840281018401909452808452606093928301828280156146ca57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116146ac575b505050505090506146f183828460ff16815181106146e457fe5b60200260200101516153af565b6001600160801b031983166000908152600260205260408120600501805460ff851690811061471c57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561474957fe5b0217905550505050565b6001600160801b031982166000908152600260209081526040918290208054835181840281018401909452808452606093928301828280156147be57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116147a0575b505050505090506147ee6147e984838560ff16815181106147db57fe5b602002602001015185613c8a565b611933565b156131dc576001600160801b031983166000818152600560208181526040808420805460018101825590855282852083820401805460ff808b16601f9094166101000a84810291021990911617905594845260029091529091208101805491929091811061471c57fe5b806001600160a01b0381166148b4576040805162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604482015290519081900360640190fd5b6001600160a01b03821660009081526001602081905260409091205460ff161515146149115760405162461bcd60e51b8152600401808060200182810382526022815260200180615a896022913960400191505060405180910390fd5b6001600160a01b038216600081815260016020908152604091829020805460ff19169055815192835290517f6cfb0504498d3a8155a2a3dd5f41940ad5ab571197ac70f6d6948d189f6a0d279281900390910190a15050565b6001600160801b0319871660009081526002602081905260408220600601805460ff191690911790555b60ff8116861115614abf576001600160801b031988166000908152600260208190526040909120018054614a6f919060ff84169081106149d057fe5b6000918252602080832081830401546001600160801b03198d16845260029091526040909220805460ff601f9093166101000a90930482169290918516908110614a1657fe5b6000918252602090912001546001600160a01b0316878760ff8616818110614a3a57fe5b905060200201356001600160801b03168a8a8660ff16818110614a5957fe5b905060200201356001600160801b031601615475565b614ab7888287878560ff16818110614a8357fe5b905060200201356001600160801b031686868660ff16818110614aa257fe5b905060200201356001600160801b0316615506565b600101614994565b5050505050505050565b60005b81518110156131dc576001600160801b0319831660009081526002602052604081208351849084908110614afc57fe5b602002602001015160ff1681548110614b1157fe5b6000918252602090912001546001600160a01b0316905060056001600160801b031985166000908152600260205260409020600501805484908110614b5257fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115614b7d57fe5b1415614cb3576001600160801b0319841660009081526002602052604081208451600190910190859085908110614bb057fe5b602002602001015160ff1681548110614bc557fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03169050614c6560026000876001600160801b0319166001600160801b0319168152602001908152602001600020600201858581518110614c2957fe5b602002602001015160ff1681548110614c3e57fe5b90600052602060002090602091828204019190069054906101000a900460ff168383615475565b604080516001600160a01b03841681526001600160801b038316602082015281517fc3e855922420cdafb260e047f68ac02de87868df7bd1f28c27b9d9a4de43d1a8929181900390910190a1505b6001600160a01b03811660009081526008602090815260408083206001600160801b03198816845290915290205460ff16151560011415614de2576001600160801b0319841660009081526002602052604081208451600190910190859085908110614d1b57fe5b602002602001015160ff1681548110614d3057fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03169050614d9460026000876001600160801b0319166001600160801b0319168152602001908152602001600020600201858581518110614c2957fe5b604080516001600160a01b03841681526001600160801b038316602082015281517fbf2a3d4d8ec2feaa45dfd5779abcf977ed3565830ebb07bf7db66074d3182528929181900390910190a1505b50600101614acc565b6001600160801b03198216600090815260026020526040812060030180548290614e1690859061571d565b90506000828281548110614e2657fe5b90600052602060002090602091828204019190069054906101000a900460ff16905082600184805490500381548110614e5b57fe5b90600052602060002090602091828204019190069054906101000a900460ff16838381548110614e8757fe5b90600052602060002090602091828204019190066101000a81548160ff021916908360ff16021790555082805480614ebb57fe5b6000828152602090819020600019909201908104909101805460ff601f84166101000a021916905590559250505092915050565b6001600160801b031984166000818152600460209081526040808320805460018101825590845282842083820401805460ff808b16601f9094166101000a8481029102199091161790558151948552848301526080908401818152865191850191909152855192937f04a7c204b12e00b9aa84dc954cfe36f5d20da8bf730adc1aeee91f4573d878f59389938993899389939092606084019160a08501918701908083838e5b83811015614fad578181015183820152602001614f95565b50505050905090810190601f168015614fda5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561500d578181015183820152602001614ff5565b50505050905090810190601f16801561503a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a16001600160801b0319851660009081526004602090815260409182902080548351818402810184019094528084526150b99392830182828015612054576000918252602091829020805460ff1684529082028301929091600191018084116120255790505050505050611da3565b60ff1695945050505050565b60005b82518110156153a95760008382815181106150df57fe5b6020908102919091018101516001600160801b03198716600090815260029092526040822080549193509060ff841690811061511757fe5b60009182526020822001546001600160a01b0316915061513b6117b8888486613c8a565b60ff169050600060056001600160801b031989166000908152600260205260409020600501805460ff871690811061516f57fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561519a57fe5b1415615213576001600160801b03198816600090815260026020526040902060010180546064919060ff87169081106151cf57fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b031660fa026001600160801b03168161520b57fe5b0490506152e5565b85821115615286576001600160801b03198816600090815260026020526040902060010180546064919060ff871690811061524a57fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b031660c8026001600160801b03168161520b57fe5b858214156152e5576001600160801b031988166000908152600260205260409020600101805460ff86169081106152b957fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b031690505b6001600160801b03811615615399576001600160801b03198816600090815260026020819052604090912001805461534c919060ff871690811061532557fe5b90600052602060002090602091828204019190069054906101000a900460ff168483615475565b604080516001600160a01b03851681526001600160801b038316602082015281517fc3e855922420cdafb260e047f68ac02de87868df7bd1f28c27b9d9a4de43d1a8929181900390910190a15b5050600190920191506150c89050565b50505050565b6001600160a01b03811660009081526009602090815260408083206001600160801b03198616845290915281205460ff1660028111156153eb57fe5b1480615432575060026001600160a01b03821660009081526009602090815260408083206001600160801b03198716845290915290205460ff16600281111561543057fe5b145b61543b57600080fd5b6001600160a01b031660009081526009602090815260408083206001600160801b031994909416835292905220805460ff19166001179055565b600a5460408051631894bcc960e11b815260ff861660048201526001600160a01b0385811660248301526001600160801b03851660448301529151919092169163312979929160648083019260209291908290030181600087803b1580156154dc57600080fd5b505af11580156154f0573d6000803e3d6000fd5b505050506040513d602081101561429357600080fd5b6001600160801b03198416600090815260026020526040902060010180546001600160801b038416919060ff861690811061553d57fe5b6000918252602090912060028204015460019091166010026101000a90046001600160801b0316101561556f57600080fd5b6001600160801b03198416600090815260026020526040902080546153a9919060ff861690811061559c57fe5b60009182526020808320909101546001600160801b0319881683526002909152604090912060010180546001600160a01b039092169185919060ff88169081106155e257fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b0316036001600160801b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316635ad3f918600260008a6001600160801b0319166001600160801b03191681526020019081526020016000206002018860ff168154811061567157fe5b90600052602060002090602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b8152600401808260ff16815260200191505060206040518083038186803b1580156156c857600080fd5b505afa1580156156dc573d6000803e3d6000fd5b505050506040513d60208110156156f257600080fd5b50516001600160801b031988166000908152600260205260409020546001600160801b038616613fc3565b6040805160208082018590528183018490528251808303840181526060909201909252805191012060009082908161575157fe5b069392505050565b82805482825590600052602060002090601f016020900481019282156157a757600052602060002091601f016020900482015b828111156157a757825482559160010191906001019061578c565b506157b3929150615a73565b5090565b6040518060e0016040528060608152602001606081526020016060815260200160608152602001600060ff16815260200160608152602001600060028111156157fc57fe5b905290565b8280548282559060005260206000209081019282156157a7579160200282015b828111156157a757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190615821565b828054828255906000526020600020906001016002900481019282156157a75791602002820160005b838211156158c957835183826101000a8154816001600160801b0302191690836001600160801b031602179055509260200192601001602081600f0104928301926001030261587f565b80156158fc5782816101000a8154906001600160801b030219169055601001602081600f010492830192600103026158c9565b50506157b3929150615a73565b82805482825590600052602060002090601f016020900481019282156157a75791602002820160005b8382111561597057835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302615932565b80156158fc5782816101000a81549060ff0219169055600101602081600001049283019260010302615970565b82805482825590600052602060002090601f016020900481019282156157a75791602002820160005b8382111561597057835183826101000a81548160ff021916908360058111156159eb57fe5b021790555092602001926001016020816000010492830192600103026159c6565b50805460008255601f0160209004906000526020600020908101906123ea9190615a73565b60405180608001604052806004905b6060815260200190600190039081615a405790505090565b604080516101a0810190915260608152600c60208201615a40565b5b808211156157b35760008155600101615a7456fe416363657373436f6e74726f6c3a20776f726b6572206e6f74206465746563746564416363657373436f6e74726f6c3a20776f726b657220616c7265616479206578697374416363657373436f6e74726f6c3a2043454f206163636573732064656e696564416363657373436f6e74726f6c3a20776f726b6572206163636573732064656e696564416363657373436f6e74726f6c3a2063757272656e6c7479206e6f7420706175736564a26469706673582212205b09149b3098d99e8c5d47f971c133fd1583688222509bbaaede19e9c8abc5b264736f6c63430007050033000000000000000000000000bf79ce2fbd819e5abc2327563d02a200255b7cb3000000000000000000000000000000000000000000000000000000000000000400000000000000000000000011e46db40d4438d1c64f68993ca43b03ac1b6a6b

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

000000000000000000000000bf79ce2fbd819e5abc2327563d02a200255b7cb3000000000000000000000000000000000000000000000000000000000000000400000000000000000000000011e46db40d4438d1c64f68993ca43b03ac1b6a6b

-----Decoded View---------------
Arg [0] : _treasuryAddress (address): 0xbf79ce2fbd819e5abc2327563d02a200255b7cb3
Arg [1] : _maxPlayers (uint8): 4
Arg [2] : _pointerAddress (address): 0x11e46db40d4438d1c64f68993ca43b03ac1b6a6b

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000bf79ce2fbd819e5abc2327563d02a200255b7cb3
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [2] : 00000000000000000000000011e46db40d4438d1c64f68993ca43b03ac1b6a6b


Deployed ByteCode Sourcemap

7964:29174:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;963:25;;;:::i;:::-;;;;-1:-1:-1;;;;;963:25:0;;;;;;;;;;;;;;8541:37;;;;;;;;;;;;;;;;-1:-1:-1;8541:37:0;-1:-1:-1;;;;;;8541:37:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2409:221;;;;;;;;;;;;;;;;-1:-1:-1;2409:221:0;-1:-1:-1;;;;;2409:221:0;;:::i;:::-;;36956:179;;;;;;;;;;;;;;;;-1:-1:-1;36956:179:0;-1:-1:-1;;;;;36956:179:0;;:::i;4403:138::-;;;:::i;34707:405::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34707:405:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34707:405:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34707:405:0;;-1:-1:-1;;34707:405:0;;;-1:-1:-1;34707:405:0;;-1:-1:-1;;34707:405:0:i;:::-;;;;-1:-1:-1;;;;;;34707:405:0;;;;;;;;;;;;;;22762:400;;;;;;;;;;;;;;;;-1:-1:-1;22762:400:0;;-1:-1:-1;;;;;;22762:400:0;;;;;;-1:-1:-1;;;;;22762:400:0;;;;;;;;:::i;21916:838::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;21916:838:0;;;;-1:-1:-1;;;;;21916:838:0;;;;;;;;;;;;;;;;;:::i;8585:51::-;;;;;;;;;;;;;;;;-1:-1:-1;8585:51:0;-1:-1:-1;;;;;;8585:51:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7254:196;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7254:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7254:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7254:196:0;;-1:-1:-1;7254:196:0;;-1:-1:-1;;;;;7254:196:0:i;:::-;;;;;;;;;;;;;;;;;;11968:38;;;:::i;32321:1234::-;;;;;;;;;;;;;;;;-1:-1:-1;32321:1234:0;;-1:-1:-1;;;;;;32321:1234:0;;;;;;-1:-1:-1;;;;;32321:1234:0;;;;;;;;;;;;;:::i;6595:651::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6595:651:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6595:651:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6595:651:0;;-1:-1:-1;6595:651:0;;-1:-1:-1;;;;;6595:651:0:i;:::-;;;;;;;;;;;;;;;;;;;997:26;;;:::i;31131:1182::-;;;;;;;;;;;;;;;;-1:-1:-1;31131:1182:0;;-1:-1:-1;;;;;;31131:1182:0;;;;;;-1:-1:-1;;;;;31131:1182:0;;;;;;;;:::i;10286:32::-;;;:::i;5381:171::-;;;;;;;;;;;;;;;;-1:-1:-1;5381:171:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8643:49;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;8643:49:0;;;;;;;;:::i;8971:65::-;;;;;;;;;;;;;;;;-1:-1:-1;8971:65:0;;-1:-1:-1;;;;;8971:65:0;;;;;-1:-1:-1;;;;;;8971:65:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2638:160;;;;;;;;;;;;;;;;-1:-1:-1;2638:160:0;-1:-1:-1;;;;;2638:160:0;;:::i;29985:1138::-;;;;;;;;;;;;;;;;-1:-1:-1;29985:1138:0;;-1:-1:-1;;;;;;29985:1138:0;;;;;;-1:-1:-1;;;;;29985:1138:0;;;;;;;;:::i;7687:270::-;;;;;;;;;;;;;;;;-1:-1:-1;7687:270:0;;;;;;;:::i;4256:139::-;;;:::i;8823:66::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8823:66:0;;;;-1:-1:-1;;;;;;8823:66:0;;;;;;;;;;:::i;1032:41::-;;;;;;;;;;;;;;;;-1:-1:-1;1032:41:0;-1:-1:-1;;;;;1032:41:0;;:::i;36735:213::-;;;;;;;;;;;;;;;;-1:-1:-1;36735:213:0;;-1:-1:-1;;;;;;36735:213:0;;;;;;;;:::i;15997:2711::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15997:2711:0;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;-1:-1:-1;15997:2711:0;-1:-1:-1;15997:2711:0;;;;;;;;;;;;:::i;8699:51::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;8699:51:0;;;;;;;;:::i;2806:245::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2806:245:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2806:245:0;;;;;;;;;;-1:-1:-1;2806:245:0;;-1:-1:-1;2806:245:0;-1:-1:-1;2806:245:0;:::i;3420:176::-;;;;;;;;;;;;;;;;-1:-1:-1;3420:176:0;-1:-1:-1;;;;;3420:176:0;;:::i;29543:182::-;;;;;;;;;;;;;;;;-1:-1:-1;29543:182:0;-1:-1:-1;;;;;;29543:182:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18716:862;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;-1:-1:-1;18716:862:0;;-1:-1:-1;18716:862:0;-1:-1:-1;18716:862:0;:::i;34525:174::-;;;;;;;;;;;;;;;;-1:-1:-1;34525:174:0;-1:-1:-1;;;;;;34525:174:0;;:::i;8896:68::-;;;;;;;;;;;;;;;;-1:-1:-1;8896:68:0;;-1:-1:-1;;;;;8896:68:0;;;;;-1:-1:-1;;;;;;8896:68:0;;:::i;23905:2661::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;23905:2661:0;;;;;;;;;;;;;:::i;6328:259::-;;;;;;;;;;;;;;;;-1:-1:-1;6328:259:0;;;;:::i;3604:254::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3604:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3604:254:0;;;;;;;;;;-1:-1:-1;3604:254:0;;-1:-1:-1;3604:254:0;-1:-1:-1;3604:254:0;:::i;7458:221::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7458:221:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7458:221:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7458:221:0;;-1:-1:-1;7458:221:0;;-1:-1:-1;;;;;7458:221:0:i;5560:409::-;;;;;;;;;;;;;;;;-1:-1:-1;5560:409:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5560:409:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36387:340;;;;;;;;;;;;;;;;-1:-1:-1;36387:340:0;;-1:-1:-1;;;;;;36387:340:0;;;;;;-1:-1:-1;;;;;36387:340:0;;;;;;;;:::i;963:25::-;;;-1:-1:-1;;;;;963:25:0;;:::o;8541:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2409:221::-;2500:7;-1:-1:-1;;;;;1990:31:0;;1968:111;;;;;-1:-1:-1;;;1968:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1636:10:::1;::::0;-1:-1:-1;;;;;1636:10:0::1;1622;:24;1600:106;;;::::0;;-1:-1:-1;;;1600:106:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;::::1;;2542:10:::2;:20:::0;;-1:-1:-1;;;;;;2542:20:0::2;-1:-1:-1::0;;;;;2542:20:0;;::::2;::::0;;;::::2;::::0;;;;2580:42:::2;::::0;;2601:10;;;::::2;2580:42:::0;;;::::2;::::0;::::2;::::0;;;;;;::::2;2409:221:::0;;:::o;36956:179::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;37074:15:::1;:53:::0;;-1:-1:-1;;;;;;37074:53:0::1;-1:-1:-1::0;;;;;37074:53:0;;;::::1;::::0;;;::::1;::::0;;36956:179::o;4403:138::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;2312:6:::1;::::0;-1:-1:-1;;;2312:6:0;::::1;;;2290:91;;;;-1:-1:-1::0;;;2290:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4502:5:::2;4493:14:::0;;-1:-1:-1;;;;4493:14:0::2;::::0;;4523:10:::2;::::0;::::2;::::0;4502:5;4523:10:::2;4403:138::o:0;34707:405::-;34923:14;35031:9;35042:7;35051:8;35061;35071:6;35014:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;35014:64:0;;;;;;;-1:-1:-1;;35014:64:0;;;;;;;;;;;;;;;34986:107;;;;;;34707:405;-1:-1:-1;;;;;;;;;;34707:405:0:o;22762:400::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22926:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;22965:7:::0;22974;9584:21:::2;-1:-1:-1::0;;;;;;9550:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;:126;;;-1:-1:-1::0;9656:20:0::2;-1:-1:-1::0;;;;;;9622:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;9550:126;:196;;;-1:-1:-1::0;9727:19:0::2;-1:-1:-1::0;;;;;;9693:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;9550:196;9528:229;;;::::0;::::2;;-1:-1:-1::0;;;;;;9310:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;:31;;23007:7;;23016;;23025;;-1:-1:-1;;;;;9310:42:0;::::3;::::0;:31:::3;::::0;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;;;;;9310:31:0::3;:42;:106:::0;::::3;;;-1:-1:-1::0;9397:19:0::3;-1:-1:-1::0;;;;;9369:15:0;::::3;;::::0;;;:6:::3;:15;::::0;;;;;;;-1:-1:-1;;;;;;9369:24:0;::::3;::::0;;;;;;;;::::3;;:47;::::0;::::3;;;;;;;9310:106;9288:139;;;::::0;::::3;;23050:16:::4;:25;23067:7;-1:-1:-1::0;;;;;23050:25:0::4;;-1:-1:-1::0;;;;;23050:25:0::4;;;;;;;;;;;;;23081:7;23050:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23133:21;23100:5;:14;23106:7;-1:-1:-1::0;;;;;23100:14:0::4;;-1:-1:-1::0;;;;;23100:14:0::4;;;;;;;;;;;;;:21;;23122:7;23100:30;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;;9768:1:::3;;;9187::::2;;1891::::1;22762:400:::0;;;:::o;21916:838::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22109:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;22148:7:::0;22157;9584:21:::2;-1:-1:-1::0;;;;;;9550:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;:126;;;-1:-1:-1::0;9656:20:0::2;-1:-1:-1::0;;;;;;9622:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;9550:126;:196;;;-1:-1:-1::0;9727:19:0::2;-1:-1:-1::0;;;;;;9693:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;9550:196;9528:229;;;::::0;::::2;;-1:-1:-1::0;;;;;;9310:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;:31;;22190:7;;22199;;22208;;-1:-1:-1;;;;;9310:42:0;::::3;::::0;:31:::3;::::0;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;;;;;9310:31:0::3;:42;:106:::0;::::3;;;-1:-1:-1::0;9397:19:0::3;-1:-1:-1::0;;;;;9369:15:0;::::3;;::::0;;;:6:::3;:15;::::0;;;;;;;-1:-1:-1;;;;;;9369:24:0;::::3;::::0;;;;;;;;::::3;;:47;::::0;::::3;;;;;;;9310:106;9288:139;;;::::0;::::3;;22282:69:::4;22311:7;22320;22329:11;22282:15;:69::i;:::-;22364:20;22387:73;22415:34;22423:7;22432;22441;22415;:34::i;:::-;22387:13;:73::i;:::-;22364:96;;;;22492:2;22477:12;:17;22473:103;;;-1:-1:-1::0;;;;;;22511:14:0;::::4;;::::0;;;:5:::4;:14;::::0;;;;:21:::4;;:30:::0;;22544:20:::4;::::0;22511:21;:30:::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;;;;;;;22473:103;22592:12;22608:2;22592:18;22588:159;;;22627:16;:25;22644:7;-1:-1:-1::0;;;;;22627:25:0::4;;-1:-1:-1::0;;;;;22627:25:0::4;;;;;;;;;;;;;22658:7;22627:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22714:21;22681:5;:14;22687:7;-1:-1:-1::0;;;;;22681:14:0::4;;-1:-1:-1::0;;;;;22681:14:0::4;;;;;;;;;;;;;:21;;22703:7;22681:30;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;;22588:159;9438:1;9768::::3;;;9187::::2;;1891::::1;21916:838:::0;;;;:::o;8585:51::-;;;;;;;;;;;;;;;;;;;:::o;7254:196::-;7364:4;7393:21;7407:6;7393:13;:21::i;:::-;:27;;7418:2;7393:27;:49;;;;;7424:6;:13;7441:1;7424:18;7393:49;7386:56;7254:196;-1:-1:-1;;7254:196:0:o;11968:38::-;;;-1:-1:-1;;;;;11968:38:0;;:::o;32321:1234::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32517:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;32549:7:::0;32558;9907:21:::2;-1:-1:-1::0;;;;;;9873:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;9851:88;;;::::0;::::2;;-1:-1:-1::0;;;;;;9310:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;:31;;32591:7;;32600;;32609;;-1:-1:-1;;;;;9310:42:0;::::3;::::0;:31:::3;::::0;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;;;;;9310:31:0::3;:42;:106:::0;::::3;;;-1:-1:-1::0;9397:19:0::3;-1:-1:-1::0;;;;;9369:15:0;::::3;;::::0;;;:6:::3;:15;::::0;;;;;;;-1:-1:-1;;;;;;9369:24:0;::::3;::::0;;;;;;;;::::3;;:47;::::0;::::3;;;;;;;9310:106;9288:139;;;::::0;::::3;;-1:-1:-1::0;;;;;32657:20:0;::::4;;::::0;;;:11:::4;:20;::::0;;;;;;;-1:-1:-1;;;;;;32657:29:0;::::4;::::0;;;;;;;:36;32697:1:::4;32657:41;32634:75;;;::::0;::::4;;-1:-1:-1::0;;;;;;32790:14:0;::::4;32771:16;32790:14:::0;;;:5:::4;:14;::::0;;;;;;:21:::4;:30:::0;;::::4;::::0;::::4;::::0;;::::4;;;;;;::::0;;;::::4;::::0;;;;;::::4;;::::0;-1:-1:-1;;;;;;32848:14:0;::::4;::::0;;:5:::4;:14:::0;;;;;;:31;;32790:30:::4;::::0;;;;::::4;;::::0;;::::4;::::0;::::4;::::0;-1:-1:-1;32848:14:0;:31;::::4;::::0;;::::4;;;;;;::::0;;;::::4;::::0;;;;;::::4;::::0;-1:-1:-1;;;;;;32910:14:0;::::4;::::0;;:5:::4;:14:::0;;;;;;32848:31;32910:19:::4;:28:::0;;-1:-1:-1;;;;;32848:31:0;;::::4;::::0;-1:-1:-1;32910:19:0;:28:::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;32910:28:0::4;-1:-1:-1::0;;;;;32890:48:0::4;;;32949:18;32970:5;:14;32976:7;-1:-1:-1::0;;;;;32970:14:0::4;;-1:-1:-1::0;;;;;32970:14:0::4;;;;;;;;;;;;;:27;;;;;;;;;;;;32949:48;;33010:160;33035:6;33056:9;33080:8;;;;;;;;;-1:-1:-1::0;;;;;33080:8:0::4;-1:-1:-1::0;;;;;33080:24:0::4;;33105:10;33080:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;33080:36:0;33010:160:::4;::::0;::::4;33158:1;33010:10;:160::i;:::-;33183:8;::::0;:110:::4;::::0;;-1:-1:-1;;;33183:110:0;;::::4;::::0;::::4;;::::0;::::4;::::0;-1:-1:-1;;;;;33183:110:0;;::::4;::::0;;;;;;;;;;;;:8;;;::::4;::::0;:29:::4;::::0;:110;;;;;::::4;::::0;;;;;;;;:8:::4;::::0;:110;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;33306:104:0::4;::::0;-1:-1:-1;33333:7:0;33355;33397:1:::4;33385:13:::0;::::4;33306:12;:104::i;:::-;33423:124;33459:7;33481;33503:11;33529:7;33423:21;:124::i;:::-;9438:1;;;;9950::::3;;;9187::::2;;1891::::1;32321:1234:::0;;;;:::o;6595:651::-;6705:14;;;;6782:208;6804:6;:13;6800:1;:17;;;6782:208;;;6847:24;6861:6;6868:1;6861:9;;;;;;;;;;;;;;;;6847:13;:24::i;:::-;6886:17;;;;6839:32;-1:-1:-1;6931:2:0;6922:11;;;;6918:61;;;6962:1;6954:9;;;;6918:61;6819:3;;6782:208;;;;7015:2;7004:8;:13;;;7000:213;;;7039:7;7034:168;7056:4;7052:8;;:1;:8;;;7034:168;;;7098:2;7086:14;;;;7135:2;7123:8;:14;;;7119:68;;7162:5;;7119:68;7062:3;;7034:168;;;;7000:213;7223:15;;6595:651;;;:::o;997:26::-;;;-1:-1:-1;;;997:26:0;;;;;:::o;31131:1182::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31304:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;31336:7:::0;31345;9907:21:::2;-1:-1:-1::0;;;;;;9873:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;9851:88;;;::::0;::::2;;-1:-1:-1::0;;;;;31393:20:0;::::3;;::::0;;;:11:::3;:20;::::0;;;;;;;-1:-1:-1;;;;;;31393:29:0;::::3;::::0;;;;;;;:36;31433:1:::3;31393:41;:101:::0;::::3;;;-1:-1:-1::0;;;;;;31451:25:0;::::3;;::::0;;;:16:::3;:25;::::0;;;;;;;-1:-1:-1;;;;;;31451:34:0;::::3;::::0;;;;;;;;::::3;;:43;31393:101;31370:135;;;::::0;::::3;;-1:-1:-1::0;;;;;;31541:23:0;::::3;;::::0;;;:14:::3;:23;::::0;;;;:30;31575:1:::3;31541:35;:96:::0;::::3;;;-1:-1:-1::0;;;;;;;31607:23:0;::::3;;::::0;;;:14:::3;:23;::::0;;;;;;;;31593:38;;;;;;::::3;::::0;;;;;;;;;;::::3;::::0;;;::::3;31607:23:::0;31593:38;;::::3;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;::::3;::::0;::::3;;;::::0;;::::3;;::::0;;::::3;::::0;;::::3;::::0;;::::3;::::0;;;::::3;::::0;;::::3;::::0;::::3;::::0;;::::3;;;;;;;;;;;:13;:38::i;:::-;:44;;31635:2;31593:44;31541:96;31518:130;;;::::0;::::3;;-1:-1:-1::0;;;;;31661:25:0;::::3;;::::0;;;:16:::3;:25;::::0;;;;;;;-1:-1:-1;;;;;;31661:34:0;::::3;::::0;;;;;;;:41;;-1:-1:-1;;31661:41:0::3;31698:4;31661:41;::::0;;31736:5:::3;:14:::0;;;;;;:27:::3;::::0;::::3;::::0;31793:21;::::3;:30:::0;;31661:41:::3;31736:27:::0;;::::3;::::0;31661:25;31793:30;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;;;::::3;;::::0;-1:-1:-1;;;;;;31851:14:0;::::3;::::0;;:5:::3;:14:::0;;;;;;:31;;31793:30:::3;::::0;;;;::::3;;::::0;;::::3;::::0;::::3;::::0;-1:-1:-1;31851:14:0;:31;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;;;::::3;::::0;-1:-1:-1;;;;;;31913:14:0;::::3;::::0;;:5:::3;:14:::0;;;;;;31851:31;31913:19:::3;:28:::0;;-1:-1:-1;;;;;31851:31:0;;::::3;::::0;-1:-1:-1;31913:19:0;:28:::3;::::0;::::3;::::0;;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31913:28:0::3;-1:-1:-1::0;;;;;31893:48:0::3;;;31954:164;31979:6;32012:1;32000:9;:13;;;;;32028:8;::::0;:36:::3;::::0;;-1:-1:-1;;;32028:36:0;;::::3;::::0;::::3;;::::0;::::3;::::0;;;32000:13;;;::::3;::::0;-1:-1:-1;;;;;32028:8:0;;::::3;::::0;:24:::3;::::0;:36;;;;;::::3;::::0;;;;;;;;:8;:36;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;32028:36:0;31954:164:::3;::::0;::::3;32106:1;31954:10;:164::i;:::-;32131:8;::::0;-1:-1:-1;;;;;32131:8:0::3;:29;32175:10:::0;32187:6;32207:1:::3;32195:9:::0;:13:::3;32131:88;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;32131:88:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;;32237:68:0::3;::::0;;-1:-1:-1;;;;;;32237:68:0;::::3;::::0;;-1:-1:-1;;;;;32237:68:0;::::3;32131:88;32237:68:::0;::::3;::::0;::::3;::::0;::::3;::::0;;;;;;::::3;::::0;;;;;;;::::3;9950:1;;;;9187::::2;;1891::::1;31131:1182:::0;;;:::o;10286:32::-;;;-1:-1:-1;;;;;10286:32:0;;:::o;5381:171::-;5529:2;5521:10;;;;;;;;;5533;;;;5381:171::o;8643:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8971:65::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2638:160::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;2744:46:::1;2769:10;2744;:46::i;:::-;2638:160:::0;:::o;29985:1138::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30151:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;30183:7:::0;30192;9907:21:::2;-1:-1:-1::0;;;;;;9873:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;9851:88;;;::::0;::::2;;-1:-1:-1::0;;;;;;9310:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;:31;;30225:7;;30234;;30243;;-1:-1:-1;;;;;9310:42:0;::::3;::::0;:31:::3;::::0;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;;;;;9310:31:0::3;:42;:106:::0;::::3;;;-1:-1:-1::0;9397:19:0::3;-1:-1:-1::0;;;;;9369:15:0;::::3;;::::0;;;:6:::3;:15;::::0;;;;;;;-1:-1:-1;;;;;;9369:24:0;::::3;::::0;;;;;;;;::::3;;:47;::::0;::::3;;;;;;;9310:106;9288:139;;;::::0;::::3;;-1:-1:-1::0;;;;;30290:20:0;::::4;;::::0;;;:11:::4;:20;::::0;;;;;;;-1:-1:-1;;;;;;30290:29:0;::::4;::::0;;;;;;;:36;:41;:102;::::4;;;-1:-1:-1::0;;;;;;30362:20:0;::::4;;::::0;;;:11:::4;:20;::::0;;;;;;;-1:-1:-1;;;;;;30362:29:0;::::4;::::0;;;;;;;;30348:44;;;;;;::::4;::::0;;;;;;;;;;::::4;::::0;;;::::4;30362:29:::0;30348:44;;::::4;;;;;;;;;;;;;;;;;;::::0;;::::4;::::0;;::::4;::::0;::::4;;;::::0;;::::4;;::::0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;::::4;::::0;;::::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;:13;:44::i;:::-;30268:135;;;::::0;::::4;;-1:-1:-1::0;;;;;;30416:14:0;::::4;;::::0;;;:5:::4;:14;::::0;;;;;;:36;;::::4;::::0;;::::4;::::0;;;;;;;;::::4;::::0;;-1:-1:-1;;;;;;30416:36:0::4;-1:-1:-1::0;;;;;30416:36:0;::::4;;::::0;;30463:14;;;;:19:::4;30488:28:::0;;30463:19;;30488:28:::4;::::0;::::4;::::0;;::::4;;;;;;::::0;;;::::4;::::0;;;::::4;::::0;;::::4;::::0;;::::4;::::0;30463:54;;30488:28;30463:54;;::::4;::::0;;;;;;;;;;::::4;;::::0;;-1:-1:-1;;;;;30488:28:0::4;30463:54:::0;;;;::::4;30488:28;30463:54:::0;;::::4;::::0;;::::4;;::::0;;::::4;30488:28:::0;;;;;;::::4;::::0;;::::4;::::0;;::::4;;30463:54:::0;;::::4;::::0;;;::::4;::::0;;;-1:-1:-1;;;;;;30528:14:0;::::4;::::0;;;;;;;;:21:::4;30555:30:::0;;30528:21;;30555:30:::4;::::0;::::4;::::0;;::::4;;;;;;::::0;;;::::4;::::0;;;;;::::4;;::::0;30528:58;;::::4;::::0;;::::4;::::0;;;;;;;;;;::::4;;::::0;;30555:30:::4;::::0;30528:58;;;30555:30:::4;30528:58:::0;;::::4;::::0;;::::4;;::::0;;::::4;30555:30:::0;;;;::::4;::::0;;::::4;::::0;::::4;30528:58:::0;;::::4;::::0;;;::::4;::::0;;-1:-1:-1;;;;;;30597:14:0;::::4;::::0;;;:5:::4;:14:::0;;;;;;:21:::4;;:47:::0;;;;::::4;::::0;;;;;;;;;;::::4;::::0;;::::4;::::0;;;;;;;;::::4;::::0;;::::4;::::0;;::::4;;::::0;;::::4;::::0;;;::::4;::::0;;30655:14;;:30;;;;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;;;;;;;30721:56;30750:7;30759;30721:14;:56::i;:::-;-1:-1:-1::0;;;;;30790:20:0;::::4;;::::0;;;:11:::4;:20;::::0;;;;;;;-1:-1:-1;;;;;;30790:29:0;::::4;::::0;;;;;;;:35;;;::::4;;;;;::::0;;;::::4;::::0;;;-1:-1:-1;;30790:35:0;;;;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;::::4;;;;;::::0;;;;;;-1:-1:-1;;;;;30868:20:0;::::4;::::0;;;:11:::4;:20:::0;;;;;;-1:-1:-1;;;;;;30868:29:0;::::4;::::0;;;;;;;;;30836:20;;;:11:::4;:20:::0;;;;;:29;;;;;;;;:61;;::::4;::::0;30868:29;30836:61:::4;:::i;:::-;-1:-1:-1::0;;;;;;;30983:14:0;::::4;;::::0;;;:5:::4;:14;::::0;;;;;;;:29;-1:-1:-1;;;;;31031:20:0;::::4;::::0;;;:11:::4;:20:::0;;;;;:29;;;;;;;;31075:20;;;:11:::4;:20:::0;;;;;:29;;;;;;;;;30915:200;;;;;;;::::4;::::0;-1:-1:-1;;30983:33:0;30915:200;;;;;;;;;;;;;;;;;;;;;::::4;::::0;30939:7;;30961;;31031:29;;31075;;30915:200;;;;;;;;;31031:29;;30915:200;::::4;;;;;;;;;;;;;;;;;;::::0;;::::4;::::0;;::::4;::::0;::::4;;;::::0;;::::4;;::::0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;::::4;::::0;;::::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::4;::::0;;::::4;::::0;::::4;;;::::0;;::::4;;::::0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;::::4;::::0;;::::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;;;;9950:1:::3;;;9187::::2;;1891::::1;29985:1138:::0;;;:::o;7687:270::-;7880:29;;;;;;;;;;;;;;;;;;;;;;;;;7856:64;;;;;7827:4;;7856:78;;:93;;7944:5;7856:93;;;7937:4;7856:93;7849:100;7687:270;-1:-1:-1;;;7687:270:0:o;4256:139::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2166:6:::1;::::0;-1:-1:-1;;;2166:6:0;::::1;;;2165:7;2143:88;;;::::0;;-1:-1:-1;;;2143:88:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4350:6:::2;:13:::0;;-1:-1:-1;;;;4350:13:0::2;-1:-1:-1::0;;;4350:13:0::2;::::0;;4379:8:::2;::::0;::::2;::::0;4350:6;4379:8:::2;4256:139::o:0;8823:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1032:41::-;;;;;;;;;;;;;;;:::o;36735:213::-;36858:4;36921:19;-1:-1:-1;;;;;;36887:14:0;;;;;;:5;:14;;;;;:21;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;36735:213;-1:-1:-1;;;36735:213:0:o;15997:2711::-;2166:6;;-1:-1:-1;;;2166:6:0;;;;2165:7;2143:88;;;;;-1:-1:-1;;;2143:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1798:10:::1;1789:20;::::0;;;:8:::1;:20;::::0;;;;;;;;::::1;;:28;;;1767:113;;;;-1:-1:-1::0;;;1767:113:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16426:10:::2;::::0;-1:-1:-1;;;16426:10:0;::::2;;;16407:29:::0;::::2;::::0;::::2;::::0;:76:::2;;-1:-1:-1::0;16453:30:0;;::::2;16407:76;:126;;;;-1:-1:-1::0;16500:33:0;;::::2;16407:126;16385:159;;;::::0;::::2;;-1:-1:-1::0;;;;;;16878:14:0;::::2;16902:17;16878:14:::0;;;:5:::2;:14;::::0;;;;;;:20:::2;;::::0;::::2;;::::0;:41;::::2;;;;;;;:101;;;-1:-1:-1::0;;;;;;;16936:14:0;::::2;;::::0;;;16960:19:::2;16936:14;::::0;;;;;;;:20:::2;;::::0;::::2;;:43:::0;;::::2;;;;;;;16878:101;16856:134;;;::::0;::::2;;17048:25;::::0;;-1:-1:-1;;;;;;17048:25:0;::::2;::::0;;;;::::2;::::0;;;;::::2;::::0;;::::2;17086:21;17110:44;17136:7;17110:11;:44::i;:::-;17086:68;;17167:17;;:::i;:::-;17187:222;;;;;;;;17206:8;;17187:222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;17187:222:0;;;-1:-1:-1;17187:222:0::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;17229:5;;;;;;17187:222;::::2;::::0;17229:5;;17187:222;17229:5;17187:222;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;17187:222:0;;;-1:-1:-1;17187:222:0::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;17249:7;;;;;;17187:222;::::2;::::0;17249:7;;17187:222;17249:7;17187:222;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;17187:222:0;;;-1:-1:-1;17187:222:0;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;::::2;::::0;;17271:5;;17187:222;::::2;17271:5:::0;17187:222;;::::2;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;::::2;::::0;::::2;;;::::0;;::::2;;::::0;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;-1:-1:-1::0;;;17187:222:0;;;-1:-1:-1;;17187:222:0::2;::::0;::::2;;::::0;::::2;::::0;;;17297:8;17328:34:::2;::::0;::::2;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;17328:34:0::2;-1:-1:-1::0;17187:222:0;;17377:21:::2;17187:222;::::0;;::::2;::::0;-1:-1:-1;;;;;;17422:14:0;::::2;-1:-1:-1::0;17422:14:0;;;:5:::2;:14:::0;;;;;:22;;;;;;-1:-1:-1;17422:22:0;;:14;;:22:::2;::::0;:14;;:22;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;-1:-1:-1;;17422:22:0::2;;::::0;;::::2;::::0;;;::::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;-1:-1:-1;;17422:22:0::2;::::0;;::::2;::::0;::::2;;;;;;;;;;;;;;17457:12;17554:326;17571:24;::::0;::::2;::::0;-1:-1:-1;17554:326:0::2;;;17624:65;17659:7;17668:6;17624:16;:65::i;:::-;17706:63;17739:7;17748:6;17706:14;:63::i;:::-;17597:8;;17554:326;;;-1:-1:-1::0;;;;;;18018:25:0;::::2;;::::0;;;:16:::2;:25;::::0;;;;18011:32:::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;18113:1:0::2;18099:246;18116:24;::::0;::::2;::::0;-1:-1:-1;18099:246:0::2;;;18267:66;18303:7;18312:6;18267:17;:66::i;:::-;18142:8;;18099:246;;;18357:13;;;18681:8;18659:7;18571;-1:-1:-1::0;;;;;18541:159:0::2;;;18593:5;;18613:7;;18635:9;18541:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;::::2;;-1:-1:-1::0;;18541:159:0::2;::::0;;::::2;::::0;;::::2;::::0;;;;;::::2;::::0;;::::2;::::0;-1:-1:-1;18541:159:0;;;::::2;::::0;;;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;18541:159:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;18541:159:0;;-1:-1:-1;;;;;;;;18541:159:0::2;1891:1;;;15997:2711:::0;;;;;;;;;;:::o;8699:51::-;;;;;;;;;;;;;;;;;;;;2806:245;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;2933:11:::1;2928:116;2950:26;::::0;::::1;::::0;-1:-1:-1;2928:116:0::1;;;3002:30;3013:11;;3025:5;3013:18;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3013:18:0::1;3002:10;:30::i;:::-;2978:7;;2928:116;;;;2806:245:::0;;:::o;3420:176::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;3534:54:::1;3562:15;3534:13;:54::i;29543:182::-:0;-1:-1:-1;;;;;;29692:25:0;;;;;;:16;:25;;;;;;;;;29685:32;;;;;;;;;;;;;;;;;29653:14;;29685:32;;;29692:25;29685:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29543:182;;;:::o;18716:862::-;19027:7;9144:21;-1:-1:-1;;;;;;9120:14:0;;;;;;:5;:14;;;;;;;;:20;;;;;;:45;;;;;;;;9098:78;;;;;;2166:6:::1;::::0;-1:-1:-1;;;2166:6:0;::::1;;;2165:7;2143:88;;;::::0;;-1:-1:-1;;;2143:88:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1798:10:::2;1789:20;::::0;;;:8:::2;:20;::::0;;;;;;;;::::2;;:28;;;1767:113;;;;-1:-1:-1::0;;;1767:113:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19235:127:::3;19257:7;19279:14;;19308;;19337;;19235:7;:127::i;:::-;19380:73;::::0;;-1:-1:-1;;;;;;19380:73:0;::::3;::::0;;;;::::3;::::0;;;;::::3;::::0;;::::3;19471:99;::::0;;;;;::::3;::::0;::::3;::::0;;;;;;;;;;;::::3;::::0;;;;;;;::::3;18716:862:::0;;;;;;;;;;;:::o;34525:174::-;-1:-1:-1;;;;;;34672:14:0;;;;;;:5;:14;;;;;;;;;:19;;34665:26;;;;;;;;;;;;;;;;;34627:20;;34665:26;;;34672:19;34665:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34665:26:0;;34525:174;-1:-1:-1;;;;;;;34525:174:0:o;8896:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23905:2661::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24172:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;-1:-1:-1::0;;;;;;10049:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;;;;;10021:50;;;;;;::::2;::::0;;;;;;;;;;24207:7;;10021:25:::2;::::0;:50;;10049:14;10021:50;;::::2;10049:14:::0;10021:50;;::::2;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;10021:50:0::2;::::0;;;;;::::2;::::0;::::2;;::::0;;::::2;;;;;;;;;;;10087:9;10082:177;10106:8;:15;10102:1;:19;10082:177;;;-1:-1:-1::0;;;;;;10175:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:24:::0;;10210:21:::2;::::0;10175;10197:1;;10175:24;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10169:31;;;;;;;;:63;;;;10143:104;;;::::0;::::2;;10123:3;;10082:177;;;-1:-1:-1::0;;;;;;;24254:22:0;::::3;;::::0;;;:13:::3;:22;::::0;;;;:33:::3;;::::0;:40;24232:73:::3;;;::::0;::::3;;-1:-1:-1::0;;;;;;24318:22:0;::::3;;::::0;;;:13:::3;:22;::::0;;;;:33:::3;::::0;::::3;:47:::0;;;24435:32;24400:134:::3;::::0;24354:11;24400:16:::3;:134::i;:::-;:142;;24538:4;24400:142;24378:175;;;::::0;::::3;;24779:27;24809:28;24829:7;24809:19;:28::i;:::-;24903:19:::0;;24779:58;;-1:-1:-1;24903:23:0;24899:1231:::3;;-1:-1:-1::0;;;;;;25029:23:0;::::3;;::::0;;;:14:::3;:23;::::0;;;;;;;;25017:36;;;;;;::::3;::::0;;;;;;;;;;::::3;::::0;;;::::3;25029:23:::0;25017:36;;::::3;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;::::3;::::0;::::3;;;::::0;;::::3;;::::0;;::::3;::::0;;::::3;::::0;;::::3;::::0;;;::::3;::::0;;::::3;::::0;::::3;::::0;;::::3;;;;;;;;;;;:11;:36::i;:::-;25013:1106;;;25076:46;25100:7;25109:12;25076:23;:46::i;:::-;25013:1106;;;-1:-1:-1::0;;;;;;25275:23:0;::::3;25216:20;25275:23:::0;;;:14:::3;:23;::::0;;;;;;;25239:78;;;;;;::::3;::::0;;;;;;;;;;::::3;::::0;;::::3;25275:23:::0;25239:78;;::::3;;;;::::0;;;::::3;::::0;;;;;;::::3;;::::0;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;;::::3;;;;;;;;;;:13;:78::i;:::-;25216:101;;;;25338:11;25429:505;25452:2;25436:12;:18;25429:505;;25489:30;25498:7;25507:11;25489:8;:30::i;:::-;25481:38;;25571:24;25622:23:::0;25671:22:::3;25687:5;25671:15;:22::i;:::-;25544:149;;;;25733:179;25777:7;25811:5;25843:10;25880:9;25733:17;:179::i;:::-;25718:194;;25429:505;;;;;-1:-1:-1::0;25954:12:0::3;26041:62;26067:7:::0;26076:12;26090;26041:25:::3;:62::i;:::-;25013:1106;;;-1:-1:-1::0;;;;;;26218:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;;;;;26190:50;;;;;;::::3;::::0;;;;;;;;;;:25:::3;::::0;:50;;::::3;26218:14:::0;26190:50;;::::3;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;26190:50:0::3;::::0;;;;;::::3;::::0;::::3;;::::0;;::::3;;;;;;;;;;;26256:9;26251:125;26275:8;:15;26271:1;:19;26251:125;;;26343:21;26312:6;:19;26319:8;26328:1;26319:11;;;;;;;;;::::0;;::::3;::::0;;;;;;;-1:-1:-1;;;;;26312:19:0::3;::::0;;;;::::3;::::0;;;;;;;;-1:-1:-1;26312:19:0;;;-1:-1:-1;;;;;;26312:28:0;::::3;::::0;;;;;;;:52;;-1:-1:-1;;26312:52:0::3;::::0;;::::3;::::0;::::3;;;;;;;;::::0;;-1:-1:-1;26292:3:0::3;;26251:125;;;-1:-1:-1::0;;;;;;;26425:14:0;::::3;;::::0;;;26448:19:::3;26425:14;::::0;;;;;;;;:20:::3;;:42:::0;;-1:-1:-1;;26425:42:0::3;::::0;;::::3;::::0;;;26485:73;;;;;;;::::3;::::0;;;;;;;;::::3;10269:1;;9187::::2;;1891::::1;23905:2661:::0;;;:::o;6328:259::-;6428:11;-1:-1:-1;;;6457:75:0;6575:2;6567:10;;;;6556:22;;;;;;;;;;;6328:259;-1:-1:-1;;;6328:259:0:o;3604:254::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;3735:11:::1;3730:121;3752:27;::::0;::::1;::::0;-1:-1:-1;3730:121:0::1;;;3805:34;3819:12;;3832:5;3819:19;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3819:19:0::1;3805:13;:34::i;:::-;3781:7;;3730:121;;7458:221:::0;7568:4;7625:24;7639:6;7646:1;7639:9;;;;;;;7625:24;7597:52;;:24;7611:6;7618:1;7611:9;;;;;;;7597:24;:52;;;:74;;;;-1:-1:-1;;7653:13:0;7670:1;7653:18;;7458:221::o;5560:409::-;5662:13;5677;5708:22;;:::i;:::-;-1:-1:-1;5708:45:0;;;;;;;;;;;;;;;-1:-1:-1;;;5708:45:0;;;;;;;;;;;;;;;;-1:-1:-1;;;5708:45:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5708:45:0;;;;-1:-1:-1;;;5708:45:0;;;;;;;;;;;;-1:-1:-1;;;5708:45:0;;;;-1:-1:-1;;;5708:45:0;;;;5764:22;;:::i;:::-;-1:-1:-1;5764:90:0;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;-1:-1:-1;;;5764:90:0;;;;-1:-1:-1;;5895:22:0;5911:5;5895:15;:22::i;:::-;5867:50;;;;5936:5;5942;5936:12;;;;;;;;;;;;;5950:4;5955;5950:10;;;;;;;;;;;;;5928:33;;;;;;;;5560:409;;;:::o;36387:340::-;36540:26;36598:31;36607:7;36616:12;36598:8;:31::i;:::-;:121;;-1:-1:-1;;;;;36690:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;;;;;36690:29:0;;;;;;;;;36598:121;;;-1:-1:-1;;;;;36645:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;;;;;36645:29:0;;;;;;;;;36598:121;36584:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36387:340;;;;;:::o;15230:759::-;-1:-1:-1;;;;;;15393:14:0;;15375:15;15393:14;;;:5;:14;;;;;:31;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15393:31:0;;-1:-1:-1;15451:30:0;15460:7;15469:11;15451:8;:30::i;:::-;15437:44;;15509:24;15548:23;15585:22;15601:5;15585:15;:22::i;:::-;15494:113;;;;15620:27;15650:26;15659:7;15668;15650:8;:26::i;:::-;:116;;-1:-1:-1;;;;;15737:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;;;;;15737:29:0;;;;;;;;;15650:116;;;-1:-1:-1;;;;;15692:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;;;;;15692:29:0;;;;;;;;;15650:116;15620:146;;15779:11;15796:5;15779:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15820:161;15850:7;15872;15894;15916:5;15936:10;15961:9;15820:161;;;;-1:-1:-1;;;;;15820:161:0;;;;;;;-1:-1:-1;;;;;15820:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15820:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15230:759;;;;;;;;:::o;12646:364::-;12846:15;;:156;;;-1:-1:-1;;;12846:156:0;;-1:-1:-1;;;;;12846:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;;;;;:25;;:156;;;;;;;;;;;;;;:15;;:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;12646:364:0:o;33563:195::-;-1:-1:-1;;;;;;33707:14:0;;;;;;:5;:14;;;;;:19;;:28;;33738:12;;33707:19;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;-1:-1:-1;;;;;33707:43:0;;;;;-1:-1:-1;;;;;33707:43:0;;;;;;33563:195;;;:::o;33766:751::-;33944:69;33973:7;33982;33991:11;33944:15;:69::i;:::-;34026:20;34049:73;34077:34;34085:7;34094;34103;34077;:34::i;34049:73::-;34026:96;;;;34140:48;34165:12;34140:48;;;;;;;;;;;;;;;;;;34220:2;34205:12;:17;34201:309;;;-1:-1:-1;;;;;;34239:14:0;;;;;;:5;:14;;;;;:21;;:30;;34272:20;;34239:21;:30;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34312:12:0;;;34319:4;34312:12;;;;;;;;;;;;;34201:309;;;-1:-1:-1;;;;;;34357:25:0;;;;;;:16;:25;;;;;;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34411:14;;;:5;:14;;;;;;:21;:30;;34444:21;;34357:39;34411:30;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34485:13:0;;;34492:5;34485:13;;;;;;;;;;;;;34201:309;33766:751;;;;;:::o;3059:353::-;3157:10;-1:-1:-1;;;;;1990:31:0;;1968:111;;;;;-1:-1:-1;;;1968:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3207:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:29;3185:114;;;;-1:-1:-1::0;;;3185:114:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3312:20:0;::::1;;::::0;;;3335:4:::1;3312:20;::::0;;;;;;;;:27;;-1:-1:-1;;3312:27:0::1;::::0;;::::1;::::0;;;3357:47;;;;;;;::::1;::::0;;;;;;;;::::1;3059:353:::0;;:::o;13354:581::-;-1:-1:-1;;;;;;13492:14:0;;13473:16;13492:14;;;:5;:14;;;;;;;:21;:35;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13555:14:0;;;;:5;:14;;;;;;:36;;13492:35;;;;;;;;;;;;;-1:-1:-1;13555:14:0;:36;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13622:14:0;;;;:5;:14;;;;;;13555:36;13622:19;:33;;-1:-1:-1;;;;;13555:36:0;;;;-1:-1:-1;13622:19:0;:33;;;;;;;;;;;;;;;;;;;;;;;;13690:8;;:34;;;-1:-1:-1;;;13690:34:0;;;;;;;;;;;13622:33;;;;;;;;;;;-1:-1:-1;;;;;13622:33:0;;-1:-1:-1;13622:33:0;;-1:-1:-1;;;;;13690:8:0;;;;:22;;:34;;;;;13622:33;13690:34;;;;;;:8;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13690:34:0;-1:-1:-1;;;;;13690:47:0;;;13668:80;;;;;;13761:8;;:84;;;-1:-1:-1;;;13761:84:0;;;;;;;;;-1:-1:-1;;;;;13761:84:0;;;;;;;;;;;;;;;:8;;;;;:29;;:84;;;;;;;;;;;;;;:8;;:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13863:64:0;;;;;;;;-1:-1:-1;;;;;13863:64:0;;13761:84;13863:64;;;;;;;;;;;;;;;;;;;;13354:581;;;;;:::o;21239:245::-;-1:-1:-1;;;;;;21376:14:0;;21329:21;21376:14;;;:5;:14;;;;;:19;;;21406:71;21428:2;21424:1;:6;;;21406:71;;;21452:13;;;;;;;;-1:-1:-1;21452:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21432:3;21406:71;;;;21239:245;;;:::o;13943:317::-;-1:-1:-1;;;;;;14087:14:0;;;;;;:5;:14;;;;;;;;;14059:50;;;;;;;;;;;;;;;;;:25;;:50;;;14087:14;14059:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14059:50:0;;;;;;;;;;;;;;;;;;;;;;;14122:63;14148:7;14157:8;14166:7;14157:17;;;;;;;;;;;;;;;;14122:11;:63::i;:::-;-1:-1:-1;;;;;;14198:14:0;;14231:21;14198:14;;;:5;:14;;;;;:21;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;;13943:317;;;:::o;14268:463::-;-1:-1:-1;;;;;;14418:14:0;;;;;;:5;:14;;;;;;;;;14390:50;;;;;;;;;;;;;;;;;:25;;:50;;;14418:14;14390:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14390:50:0;;;;;;;;;;;;;;;;;;;;;;;14471:103;14505:54;14513:7;14522:8;14531:12;14522:22;;;;;;;;;;;;;;;;14546:12;14505:7;:54::i;:::-;14471:11;:103::i;:::-;14453:271;;;-1:-1:-1;;;;;;14591:25:0;;;;;;:16;:25;;;;;;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14650:14;;;:5;:14;;;;;;:21;;:35;;14591:16;;14650:21;;:35;;;;;3866:382;3972:15;-1:-1:-1;;;;;1990:31:0;;1968:111;;;;;-1:-1:-1;;;1968:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4027:25:0;::::1;;::::0;;;:8:::1;:25;::::0;;;;;;;;::::1;;:33;;;4005:117;;;;-1:-1:-1::0;;;4005:117:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;4135:25:0;::::1;4163:5;4135:25:::0;;;:8:::1;:25;::::0;;;;;;;;:33;;-1:-1:-1;;4135:33:0::1;::::0;;4186:54;;;;;;;::::1;::::0;;;;;;;;::::1;3866:382:::0;;:::o;19586:685::-;-1:-1:-1;;;;;;19802:14:0;;;;;;19825:19;19802:14;;;;;;;:20;;:42;;-1:-1:-1;;19802:42:0;;;;;;19855:409;19873:25;;;;-1:-1:-1;19855:409:0;;;-1:-1:-1;;;;;;19951:14:0;;;;;;:5;:14;;;;;;;;:21;:24;;19920:170;;19951:21;:24;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19994:14:0;;;;:5;:14;;;;;;;:25;;19951:24;;;;;;;;;;;;;19994:14;;:25;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19994:25:0;20058:14;;:17;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20058:17:0;20038:14;;20053:1;20038:17;;;;;;;;;;;;;;;-1:-1:-1;;;;;20038:17:0;:37;19920:12;:170::i;:::-;20107:145;20138:7;20164:1;20184:14;;20199:1;20184:17;;;;;;;;;;;;;;;-1:-1:-1;;;;;20184:17:0;20220:14;;20235:1;20220:17;;;;;;;;;;;;;;;-1:-1:-1;;;;;20220:17:0;20107:12;:145::i;:::-;19900:3;;19855:409;;;;19586:685;;;;;;;:::o;27055:1279::-;27197:9;27192:1135;27216:12;:19;27212:1;:23;27192:1135;;;-1:-1:-1;;;;;;27276:14:0;;27259;27276;;;:5;:14;;;;;27299:15;;:12;;27312:1;;27299:15;;;;;;;;;;;;27276:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27276:39:0;;-1:-1:-1;27418:24:0;-1:-1:-1;;;;;;27390:14:0;;;;;;:5;:14;;;;;:21;;:24;;27412:1;;27390:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;;;;;27386:435;;;-1:-1:-1;;;;;;27482:14:0;;27465;27482;;;:5;:14;;;;;27502:15;;27482:19;;;;;27502:12;;27515:1;;27502:15;;;;;;;;;;;;27482:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27482:36:0;27465:53;;27539:150;27574:5;:14;27580:7;-1:-1:-1;;;;;27574:14:0;;-1:-1:-1;;;;;27574:14:0;;;;;;;;;;;;;:21;;27596:12;27609:1;27596:15;;;;;;;;;;;;;;27574:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27635:6;27664;27539:12;:150::i;:::-;27715:90;;;-1:-1:-1;;;;;27715:90:0;;;;-1:-1:-1;;;;;27715:90:0;;;;;;;;;;;;;;;;;;;27386:435;;-1:-1:-1;;;;;27894:24:0;;;;;;:16;:24;;;;;;;;-1:-1:-1;;;;;;27894:33:0;;;;;;;;;;;;:41;;:33;:41;27890:426;;;-1:-1:-1;;;;;;27975:14:0;;27958;27975;;;:5;:14;;;;;27995:15;;27975:19;;;;;27995:12;;28008:1;;27995:15;;;;;;;;;;;;27975:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27975:36:0;27958:53;;28032:150;28067:5;:14;28073:7;-1:-1:-1;;;;;28067:14:0;;-1:-1:-1;;;;;28067:14:0;;;;;;;;;;;;;:21;;28089:12;28102:1;28089:15;;;;;;;28032:150;28208:92;;;-1:-1:-1;;;;;28208:92:0;;;;-1:-1:-1;;;;;28208:92:0;;;;;;;;;;;;;;;;;;;27890:426;;-1:-1:-1;27237:3:0;;27192:1135;;21492:416;-1:-1:-1;;;;;;21656:14:0;;21609:5;21656:14;;;:5;:14;;;;;:19;;21748:12;;21609:5;;21702:69;;21735:11;;21702:18;:69::i;:::-;21686:85;;21782:10;21795:5;21801;21795:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21782:25;;21833:5;21854:1;21839:5;:12;;;;:16;21833:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21818:5;21824;21818:12;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;21867:5;:11;;;;;;;;;;;;;;;;-1:-1:-1;;21867:11:0;;;;;;;;;;;;;;;;;;;;;;;;21896:4;-1:-1:-1;;;21492:416:0;;;;:::o;26574:473::-;-1:-1:-1;;;;;;26786:23:0;;26761:7;26786:23;;;:14;:23;;;;;;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26839:118;;;;;;;;;;;;;;;;;;;;;;;;;;;26761:7;;26839:118;;26801:7;;26815:5;;26912:10;;26937:9;;26839:118;;;;;;;;;;;;;;;;26761:7;26839:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26839:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27005:23:0;;;;;;:14;:23;;;;;;;;;26977:62;;;;;;;;;;;;;;;;;;;;;;27005:23;26977:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:13;:62::i;:::-;26970:69;;;26574:473;-1:-1:-1;;;;;26574:473:0:o;28342:1193::-;28518:9;28513:1015;28537:12;:19;28533:1;:23;28513:1015;;;28580:8;28591:12;28604:1;28591:15;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28655:14:0;;28638;28655;;;:5;:14;;;;;;:26;;28591:15;;-1:-1:-1;28655:14:0;:26;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28655:26:0;;-1:-1:-1;28719:43:0;28733:28;28741:7;28655:26;28758:2;28733:7;:28::i;28719:43::-;28696:66;;;-1:-1:-1;28777:14:0;28841:24;-1:-1:-1;;;;;;28812:14:0;;;;;;:5;:14;;;;;:21;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;28808:391;;;-1:-1:-1;;;;;;28895:14:0;;;;;;:5;:14;;;;;:19;;:23;;28927:3;;28895:19;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28895:23:0;28921:3;28895:29;-1:-1:-1;;;;;28895:35:0;;;;;;;28886:44;;28808:391;;;28984:13;28969:12;:28;28965:234;;;-1:-1:-1;;;;;;29027:14:0;;;;;;:5;:14;;;;;:19;;:23;;29059:3;;29027:19;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29027:23:0;29053:3;29027:29;-1:-1:-1;;;;;29027:35:0;;;;;28965:234;29117:13;29101:12;:29;29097:102;;;-1:-1:-1;;;;;;29160:14:0;;;;;;:5;:14;;;;;:19;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29160:23:0;29151:32;;29097:102;-1:-1:-1;;;;;29219:10:0;;;29215:302;;-1:-1:-1;;;;;;29285:14:0;;;;;;:5;:14;;;;;;;;:21;:25;;29250:137;;29285:21;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29333:6;29362;29250:12;:137::i;:::-;29411:90;;;-1:-1:-1;;;;;29411:90:0;;;;-1:-1:-1;;;;;29411:90:0;;;;;;;;;;;;;;;;;;;29215:302;-1:-1:-1;;28558:3:0;;;;;-1:-1:-1;28513:1015:0;;-1:-1:-1;28513:1015:0;;;28342:1193;;;:::o;13018:328::-;-1:-1:-1;;;;;13153:15:0;;13181:21;13153:15;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;13153:24:0;;;;;;;;;;;;:49;;;;;;;;;:115;;;-1:-1:-1;13247:21:0;-1:-1:-1;;;;;13219:15:0;;;;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;13219:24:0;;;;;;;;;;;;:49;;;;;;;;;13153:115;13131:148;;;;;;-1:-1:-1;;;;;13292:15:0;;;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;13292:24:0;;;;;;;;;;:46;;-1:-1:-1;;13292:46:0;13319:19;13292:46;;;13018:328::o;29733:244::-;29875:8;;:94;;;-1:-1:-1;;;29875:94:0;;;;;;;;;-1:-1:-1;;;;;29875:94:0;;;;;;;-1:-1:-1;;;;;29942:16:0;;29875:94;;;;;;:8;;;;;:30;;:94;;;;;;;;;;;;;;:8;;:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20708:523;-1:-1:-1;;;;;;20894:14:0;;;;;;:5;:14;;;;;:19;;:28;;-1:-1:-1;;;;;20894:45:0;;;:19;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20894:28:0;:45;;20886:54;;;;;;-1:-1:-1;;;;;;20978:14:0;;;;;;:5;:14;;;;;:31;;20953:270;;20978:14;:31;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21024:14:0;;;;:5;:14;;;;;;;20978:31;21024:19;:28;;-1:-1:-1;;;;;20978:31:0;;;;21055:13;;21024:19;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21024:28:0;:44;-1:-1:-1;;;;;20953:270:0;21083:8;;;;;;;;;-1:-1:-1;;;;;21083:8:0;-1:-1:-1;;;;;21083:24:0;;21108:5;:14;21114:7;-1:-1:-1;;;;;21108:14:0;;-1:-1:-1;;;;;21108:14:0;;;;;;;;;;;;;:21;;21130:7;21108:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21083:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21083:56:0;-1:-1:-1;;;;;;21154:14:0;;;;;;:5;21083:56;21154:14;;;;:29;-1:-1:-1;;;;;20953:270:0;;:10;:270::i;5977:343::-;6199:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6171:120;;;;;6117:7;;6305;;;6149:163;;;;;;5977:343;-1:-1:-1;;;5977:343:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://5b09149b3098d99e8c5d47f971c133fd1583688222509bbaaede19e9c8abc5b2
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.