ETH Price: $1,911.31 (-3.49%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Reclaim Token190372842024-01-19 0:19:59766 days ago1705623599IN
0xE61356bd...E5c2D5Eb8
0 ETH0.0014839448.07707464
Get Prize94415782020-02-08 10:40:562207 days ago1581158456IN
0xE61356bd...E5c2D5Eb8
0 ETH0.000134712.079
Set Res94415772020-02-08 10:40:502207 days ago1581158450IN
0xE61356bd...E5c2D5Eb8
0 ETH0.000711871.89
Make Bet94415412020-02-08 10:31:512207 days ago1581157911IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.000513852.1
Get Prize89618352019-11-19 10:10:402288 days ago1574158240IN
0xE61356bd...E5c2D5Eb8
0 ETH0.000314315.25
Set Res89618322019-11-19 10:10:152288 days ago1574158215IN
0xE61356bd...E5c2D5Eb8
0 ETH0.00215345.25
Make Bet89618052019-11-19 10:04:382288 days ago1574157878IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.002089116.3
Make Bet89618052019-11-19 10:04:382288 days ago1574157878IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.001575766.3
Make Bet89618052019-11-19 10:04:382288 days ago1574157878IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.001522666.3
Make Bet89618002019-11-19 10:03:172288 days ago1574157797IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.003274739.24
Make Bet89618002019-11-19 10:03:172288 days ago1574157797IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.002230589.24
Get Prize89618002019-11-19 10:03:172288 days ago1574157797IN
0xE61356bd...E5c2D5Eb8
0 ETH0.000545839.24
Make Bet89618002019-11-19 10:03:172288 days ago1574157797IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.002227929.24
Set Res89617902019-11-19 10:00:572288 days ago1574157657IN
0xE61356bd...E5c2D5Eb8
0 ETH0.003787399.24
Make Bet89617842019-11-19 9:59:352288 days ago1574157575IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.000050192.1
Make Bet89617612019-11-19 9:52:562288 days ago1574157176IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.001227553.15
Make Bet89617592019-11-19 9:52:252288 days ago1574157145IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.000835093.15
Make Bet89617562019-11-19 9:52:012288 days ago1574157121IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.000808593.15
Make Bet89617562019-11-19 9:52:012288 days ago1574157121IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.001069183.15
Make Bet89617532019-11-19 9:51:382288 days ago1574157098IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.001346135.25
Make Bet89617532019-11-19 9:51:382288 days ago1574157098IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.001265865.25
Get My Prize89617512019-11-19 9:51:052288 days ago1574157065IN
0xE61356bd...E5c2D5Eb8
0 ETH0.000307025.25
Set Res89617472019-11-19 9:50:092288 days ago1574157009IN
0xE61356bd...E5c2D5Eb8
0 ETH0.002127025.25
Make Bet89617322019-11-19 9:46:452288 days ago1574156805IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.002088415.25
Make Bet89617252019-11-19 9:44:382288 days ago1574156678IN
0xE61356bd...E5c2D5Eb8
0.01 ETH0.003273488.4
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer190372842024-01-19 0:19:59766 days ago1705623599
0xE61356bd...E5c2D5Eb8
0.045 ETH
-94415782020-02-08 10:40:562207 days ago1581158456
0xE61356bd...E5c2D5Eb8
0.01 ETH
-89618352019-11-19 10:10:402288 days ago1574158240
0xE61356bd...E5c2D5Eb8
0.055 ETH
-89618322019-11-19 10:10:152288 days ago1574158215
0xE61356bd...E5c2D5Eb8
0.005 ETH
-89618002019-11-19 10:03:172288 days ago1574157797
0xE61356bd...E5c2D5Eb8
0.055 ETH
-89617902019-11-19 10:00:572288 days ago1574157657
0xE61356bd...E5c2D5Eb8
0.005 ETH
-89617512019-11-19 9:51:052288 days ago1574157065
0xE61356bd...E5c2D5Eb8
0.055 ETH
-89617472019-11-19 9:50:092288 days ago1574157009
0xE61356bd...E5c2D5Eb8
0.005 ETH
-89401492019-11-15 19:11:282291 days ago1573845088
0xE61356bd...E5c2D5Eb8
0.019 ETH
-89401462019-11-15 19:11:082291 days ago1573845068
0xE61356bd...E5c2D5Eb8
0.001 ETH
-89283262019-11-13 20:00:132293 days ago1573675213
0xE61356bd...E5c2D5Eb8
0.064 ETH
-89283242019-11-13 20:00:022293 days ago1573675202
0xE61356bd...E5c2D5Eb8
0.006 ETH
-89282872019-11-13 19:51:012293 days ago1573674661
0xE61356bd...E5c2D5Eb8
0.01 ETH
-89282572019-11-13 19:40:552293 days ago1573674055
0xE61356bd...E5c2D5Eb8
0.046 ETH
-89282532019-11-13 19:40:022293 days ago1573674002
0xE61356bd...E5c2D5Eb8
0.004 ETH
-89282102019-11-13 19:30:252293 days ago1573673425
0xE61356bd...E5c2D5Eb8
0.046 ETH
-89282082019-11-13 19:30:042293 days ago1573673404
0xE61356bd...E5c2D5Eb8
0.004 ETH
-89281712019-11-13 19:20:282293 days ago1573672828
0xE61356bd...E5c2D5Eb8
0.055 ETH
-89281692019-11-13 19:20:112293 days ago1573672811
0xE61356bd...E5c2D5Eb8
0.005 ETH
-89222782019-11-12 19:54:152294 days ago1573588455
0xE61356bd...E5c2D5Eb8
0.055 ETH
-89222392019-11-12 19:45:412294 days ago1573587941
0xE61356bd...E5c2D5Eb8
0.046 ETH
-89222212019-11-12 19:41:542294 days ago1573587714
0xE61356bd...E5c2D5Eb8
0.046 ETH
-89222202019-11-12 19:41:492294 days ago1573587709
0xE61356bd...E5c2D5Eb8
0.004 ETH
-89221762019-11-12 19:30:042294 days ago1573587004
0xE61356bd...E5c2D5Eb8
0.005 ETH
-89221222019-11-12 19:20:172294 days ago1573586417
0xE61356bd...E5c2D5Eb8
0.004 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SNKGame

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2019-10-24
*/

pragma solidity ^0.5.10;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {
    int256 constant private INT256_MIN = -2**255;

    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Multiplies two signed integers, reverts on overflow.
    */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        require(!(a == -1 && b == INT256_MIN)); // This is the only case of overflow not detected by the check below

        int256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Integer division of two signed integers truncating the quotient, reverts on division by zero.
    */
    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != 0); // Solidity only automatically asserts when dividing by 0
        require(!(b == -1 && a == INT256_MIN)); // This is the only case of overflow

        int256 c = a / b;

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Subtracts two signed integers, reverts on overflow.
    */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Adds two signed integers, reverts on overflow.
    */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through `transferFrom`. This is
     * zero by default.
     *
     * This value changes when `approve` or `transferFrom` are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * > Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an `Approval` event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to `approve`. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be aplied to your functions to restrict their use to
 * the owner.
 */
contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * > Note: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @title Contracts that should be able to recover tokens
 * @author SylTi
 * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner.
 * This will prevent any accidental loss of tokens.
 */
contract CanReclaimToken is Ownable {

    /**
     * @dev Reclaim all ERC20 compatible tokens
     * @param token ERC20 The address of the token contract
     */
    function reclaimToken(IERC20 token) external onlyOwner {
        address payable owner = address(uint160(owner()));

        if (address(token) == address(0)) {
            owner.transfer(address(this).balance);
            return;
        }
        uint256 balance = token.balanceOf(address(this));
        token.transfer(owner, balance);
    }

}

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev give an account access to this role
     */
    function add(Role storage role, address account) internal {
        require(account != address(0));
        require(!has(role, account));

        role.bearer[account] = true;
    }

    /**
     * @dev remove an account's access to this role
     */
    function remove(Role storage role, address account) internal {
        require(account != address(0));
        require(has(role, account));

        role.bearer[account] = false;
    }

    /**
     * @dev check if an account has this role
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0));
        return role.bearer[account];
    }
}


contract AdminRole is Ownable {
    using Roles for Roles.Role;

    event AdminAdded(address indexed account);
    event AdminRemoved(address indexed account);

    Roles.Role private _admins;

    constructor () internal {
        _addAdmin(msg.sender);
    }

    modifier onlyAdmin() {
        require(isAdmin(msg.sender));
        _;
    }

    function isAdmin(address account) public view returns (bool) {
        return _admins.has(account);
    }

    function addAdmin(address account) public onlyOwner {
        _addAdmin(account);
    }

    function renounceAdmin() public {
        _removeAdmin(msg.sender);
    }

    function removeAdmin(address account) public onlyOwner {
        _removeAdmin(account);
    }

    function _addAdmin(address account) internal {
        _admins.add(account);
        emit AdminAdded(account);
    }

    function _removeAdmin(address account) internal {
        _admins.remove(account);
        emit AdminRemoved(account);
    }
}


//TODO referral
contract SNKGame is AdminRole, CanReclaimToken {
    using SafeMath for uint;

    address payable public dividendManagerAddress;

    struct Node {
        mapping (bool => uint) children;
        uint parent;
        bool side;
        uint height;
        uint count;
        uint dupes;
    }

    struct Game {
        mapping(uint => Node) bets;
        uint res;
        uint resPos;
        uint amount;

        mapping(uint => address[]) users; //betValue => users
        mapping(uint => mapping(address => uint)) betUsers; // betValue => user => userBetAmount
        mapping(address => uint[]) userBets; //user => userBetValue
        mapping(address => bool) executed; //user => prizeExecuted

        uint winnersAmount;
        uint prizePool;
        //        uint winnersCount;
        uint lastLeftPos;
        uint lastRightPos;
        uint lastLeftValue;
        uint lastRightValue;
        bool allDone;
    }

    mapping (uint => Game) public games;

    uint public gameStep;
    uint public closeBetsTime;
    uint public gamesStart;
    uint public betValue;



    event NewBet(address indexed user, uint indexed game, uint bet, uint value);
    event ResultSet(uint indexed game, uint res, uint lastLeftValue, uint lastRightValue, uint amount);
    event PrizeTaken(address indexed user, uint game, uint amount);

    constructor(address payable _dividendManagerAddress, uint _betValue) public {
        require(_dividendManagerAddress != address(0));
        dividendManagerAddress = _dividendManagerAddress;

        gameStep = 10 minutes;
        closeBetsTime = 3 minutes;
        gamesStart = 1568332800; //Friday, 13 September 2019 г., 0:00:00
        betValue = _betValue;
    }


    function() external payable {
        revert();
    }


    function makeBet(uint _game, uint _bet) public payable {
        require(_bet > 0);
        require(betValue == 0 ? msg.value > 0 : msg.value == betValue);
        if (_game == 0) {
            _game = getCurrentGameId();
        }
        require(now < getGameTime(_game) - closeBetsTime);

        _makeBet(games[_game], _bet);

        emit NewBet(msg.sender, _game, _bet, msg.value);
    }

    function setRes(uint _game, uint _res) onlyAdmin public {
        insertResult(_game, _res);
        setLastLeftRight(_game);
        shiftLeftRight(_game);
        setWinnersAmount(_game, 0, 0);
    }

    function insertResult(uint _game, uint _res) onlyAdmin public {
        //require(getGameTime(_game) < now);
        _insertResult(games[_game], _res);
    }

    function setLastLeftRight(uint _game) onlyAdmin public {
        _setLastLeftRight(games[_game]);
    }

    function shiftLeftRight(uint _game) onlyAdmin public {
        _shiftLeftRight(games[_game]);
    }


    function setWinnersAmount(uint _game, uint _start, uint _stop) onlyAdmin public {
        _setWinnersAmount(games[_game], _start, _stop);
        if (games[_game].allDone) {
            emit ResultSet(_game, games[_game].res, games[_game].lastLeftValue, games[_game].lastRightValue, games[_game].amount);
        }
    }

    function isPrizeTaken(uint _game, address _user) public view returns (bool){
        return games[_game].executed[_user];
    }
    function isMyPrizeTaken(uint _game) public view returns (bool){
        return isPrizeTaken(_game, msg.sender);
    }


    function checkPrize(uint _game, address _user) public view returns (uint) {
        if (games[_game].executed[_user]) {
            return 0;
        }
        return _getPrizeAmount(games[_game], _user);
    }

    function checkMyPrize(uint _game) public view returns (uint) {
        return checkPrize(_game, msg.sender);
    }

    function getPrize(uint _game, address payable _user) public {
        uint amount = _getPrize(games[_game], _user);
        emit PrizeTaken(_user, _game, amount);
    }

    function getMyPrize(uint _game) public {
        getPrize(_game, msg.sender);
    }

    function getGameTime(uint _id) public view returns (uint) {
        return gamesStart + (gameStep * _id);
    }

    function setDividendManager(address payable _dividendManagerAddress) onlyOwner external  {
        require(_dividendManagerAddress != address(0));
        dividendManagerAddress = _dividendManagerAddress;
    }
    
    function setBetValue(uint _betValue) onlyOwner external  {
        betValue = _betValue;
    }

    function getCurrentGameId() public view returns (uint) {
        return (now - gamesStart) / gameStep + 1;
    }

    function getNextGameId() external view returns (uint) {
        return (now - gamesStart) / gameStep + 2;
    }

    function getUserBetValues(uint _game, address _user) public view returns (uint[] memory values) {
        // values = new uint[](games[_game].userBets[msg.sender].length);
        // for (uint i = 0; i < games[_game].userBets[msg.sender].length; i++) {
        //     values[i] = games[_game].userBets[msg.sender][i];
        // }
        return games[_game].userBets[_user];
    }
    function getUserBetValues(uint _game) external view returns (uint[] memory values) {
        return getUserBetValues(_game, msg.sender);
    }

    function getUserBetAmounts(uint _game, address _user) public view returns (uint[] memory amounts) {
        amounts = new uint[](games[_game].userBets[_user].length);
        for (uint i = 0; i < games[_game].userBets[_user].length; i++) {
            amounts[i] = games[_game].betUsers[ games[_game].userBets[_user][i] ][_user];
        }
    }
    function getUserBetAmounts(uint _game) external view returns (uint[] memory values) {
        return getUserBetAmounts(_game, msg.sender);
    }


    //INTERNAL FUNCTIONS

    function _makeBet(Game storage game, uint _bet) internal {
        if (game.betUsers[_bet][msg.sender] == 0) {
            _insert(game, _bet);
            game.users[_bet].push(msg.sender);
            game.userBets[msg.sender].push(_bet);
        }

        game.amount = game.amount.add(msg.value);
        game.betUsers[_bet][msg.sender] = game.betUsers[_bet][msg.sender].add(msg.value);
    }


    function _insertResult(Game storage game, uint _res) internal {
        _insert(game, _res);
        game.res = _res;
        game.resPos = _getPos(game, _res);
    }


    function _setLastLeftRight(Game storage game) internal returns (bool) {
        require(game.res > 0);

        //JackPot
        if (game.bets[game.res].dupes > 0) {
            game.lastLeftPos = game.resPos;
            game.lastRightPos = game.resPos;
            game.lastLeftValue = game.res;
            game.lastRightValue = game.res;
            return true;
        }

        uint lastPos = _count(game) - 1;

        if (lastPos < 19) { //1 winner
            //если результат на первой или последней позиции то ставим победителя слева или справа
            if (game.resPos == 0 || game.resPos == lastPos) {
                game.lastLeftPos = game.resPos == 0 ? 1 : lastPos - 1;
                game.lastRightPos = game.lastLeftPos;
            } else {
                uint leftBet =  _select_at(game, game.resPos - 1);
                uint rightBet = _select_at(game, game.resPos + 1);
                uint leftBetDif = game.res - leftBet;
                uint rightBetDif = rightBet - game.res;

                if (leftBetDif == rightBetDif) {
                    game.lastLeftPos = game.resPos - 1;
                    game.lastRightPos = game.resPos + 1;
                }

                if (leftBetDif > rightBetDif) {
                    game.lastLeftPos = game.resPos + 1;
                    game.lastRightPos = game.resPos + 1;
                }

                if (leftBetDif < rightBetDif) {
                    //дубликатов в resPos нет, т.к. проверили выше в джекпоте
                    game.lastLeftPos = game.resPos - 1;
                    game.lastRightPos = game.resPos - 1;
                }
            }
        } else {
            uint winnersCount = lastPos.add(1).mul(10).div(100);
            uint halfWinners = winnersCount.div(2);

            if (game.resPos < halfWinners) {
                game.lastLeftPos = 0;
                game.lastRightPos = game.lastLeftPos + winnersCount;
            } else {
                if (game.resPos + halfWinners > lastPos) {
                    game.lastRightPos = lastPos;
                    game.lastLeftPos = lastPos - winnersCount;
                } else {
                    game.lastLeftPos = game.resPos - halfWinners;
                    game.lastRightPos = game.lastLeftPos + winnersCount;
                }
            }
        }

        game.lastLeftValue = _select_at(game, game.lastLeftPos);
        game.lastRightValue = _select_at(game, game.lastRightPos);


        //не учитывает дубликаты для left - dupes для right + dupes, но они и не нужны нам
        game.lastLeftPos = _getPos(game, game.lastLeftValue);
        game.lastRightPos = _getPos(game, game.lastRightValue);// + games[_game].bets[games[_game].lastRightValue].dupes;

        return true;
    }


    function _shiftRight(Game storage game, uint leftBetDif, uint rightBetDif, uint _val, uint lastPos) internal {
        uint gleft = gasleft();
        uint gasused = 0;
        uint lastRightValue = game.lastRightValue;
        uint lastRightPos = game.lastRightPos;
        uint lastLeftValue = game.lastLeftValue;
        uint lastLeftPos = game.lastLeftPos;
        while (leftBetDif > rightBetDif) {

            lastRightValue = _val;
            lastRightPos = lastRightPos + 1 + game.bets[_val].dupes;

            lastLeftValue = _select_at(game, lastLeftValue + 1);
            lastLeftPos = _getPos(game, lastLeftValue);

            if (lastRightPos == lastPos) break;
            if (lastLeftPos >= game.resPos) break;

            _val = _select_at(game, lastRightPos + 1);
            leftBetDif = game.res - lastLeftValue;
            rightBetDif = _val - game.res;

            if (gasused == 0) {
                gasused = gleft - gasleft() + 100000;
            }
            if (gasleft() < gasused) break;
        }

        game.lastRightValue = lastRightValue;
        game.lastRightPos = lastRightPos;
        game.lastLeftValue = lastLeftValue;
        game.lastLeftPos = lastLeftPos;
    }


    function _shiftLeft(Game storage game, uint leftBetDif, uint rightBetDif, uint _val) internal {
        uint gleft = gasleft();
        uint gasused = 0;
        uint lastRightValue = game.lastRightValue;
        uint lastRightPos = game.lastRightPos;
        uint lastLeftValue = game.lastLeftValue;
        uint lastLeftPos = game.lastLeftPos;
        while (rightBetDif > leftBetDif) {
            lastLeftValue = _val;
            lastLeftPos = lastLeftPos - game.bets[lastLeftValue].dupes - 1;

            lastRightPos = lastRightPos - game.bets[lastRightValue].dupes - 1;
            lastRightValue = _select_at(game, lastRightPos);

            if (lastLeftPos - game.bets[lastLeftValue].dupes == 0) break;
            if (lastRightPos <= game.resPos) break;

            _val = _select_at(game, lastLeftPos - game.bets[lastLeftValue].dupes - 1);
            leftBetDif = game.res - lastLeftValue;
            rightBetDif = _val - game.res;

            if (gasused == 0) {
                gasused = gleft - gasleft() + 100000;
            }
            if (gasleft() < gasused) break;
        }

        game.lastRightValue = lastRightValue;
        game.lastRightPos = lastRightPos;
        game.lastLeftValue = lastLeftValue;
        game.lastLeftPos = lastLeftPos;
    }

    function _shiftLeftRight(Game storage game) internal returns (bool) {
        uint leftBetDif = game.res - game.lastLeftValue;
        uint rightBetDif = game.lastRightValue - game.res;
        if (rightBetDif == leftBetDif) return true;

        uint _val;


        if (leftBetDif > rightBetDif) {
            uint lastPos = _count(game) - 1;
            if (game.lastRightPos == lastPos) return true;
            if (game.lastLeftPos >= game.resPos) return true;
            // в lastRightPos последняя позиция дубля поэтому просто +1
            _val = _select_at(game, game.lastRightPos + 1);
            rightBetDif = _val - game.res;

            _shiftRight(game, leftBetDif, rightBetDif, _val, lastPos);

        } else {
            if (game.lastLeftPos - game.bets[game.lastLeftValue].dupes == 0) return true;
            if (game.lastRightPos <= game.resPos) return true;
            //последняя позиция дубля поэтому минус дубликаты
            _val = _select_at(game, game.lastLeftPos - game.bets[game.lastLeftValue].dupes - 1);
            leftBetDif = game.res - _val;

            _shiftLeft(game, leftBetDif, rightBetDif, _val);
        }

        return true;
    }


    //при передачи старт и стоп необходимо учитывать дубликаты (старт = последняя позиция дубликата)
    function _setWinnersAmount(Game storage game, uint _start, uint _stop) internal {
        uint _bet;
        uint _betAmount;
        if (game.lastLeftPos == game.lastRightPos) {
            _bet = _select_at(game, game.lastLeftPos);
            game.winnersAmount = _getBetAmount(game, _bet);
            game.allDone = true;
        } else {
            _start = _start > 0 ? _start : game.lastLeftPos;
            _stop = _stop > 0 ? _stop : game.lastRightPos;
            uint i = _start;
            uint winnersAmount;
            while(i <= _stop) {
                if (i == game.resPos) {
                    i++;
                    continue;
                }
                _bet = _select_at(game, i);
                _betAmount = _getBetAmount(game, _bet);
                winnersAmount = winnersAmount.add(_betAmount);
                //верим что старт == последней позиции дубликата
                if (i != _start && game.bets[_bet].dupes > 0) {
                    i += game.bets[_bet].dupes;
                }

                if (i >= game.lastRightPos) game.allDone = true;
                i++;
            }
            // это сумма ставок победителей!
            game.winnersAmount = winnersAmount;
        }

        if (game.allDone) {
            uint profit = game.amount - game.winnersAmount;
            if (profit > 0) {
                uint ownerPercent = profit.div(10); //10% fee
                game.prizePool = profit.sub(ownerPercent);
                dividendManagerAddress.transfer(ownerPercent);
            }
        }

    }

    function _getBetAmount(Game storage game, uint _bet) internal view returns (uint amount) {
        for (uint i = 0; i < game.users[_bet].length; i++) {
            amount = amount.add(game.betUsers[_bet][game.users[_bet][i]]);
        }
    }

    function _getPrize(Game storage game, address payable user) internal returns (uint amount) {
        require(game.allDone);
        require(!game.executed[user]);
        game.executed[user] = true;
        amount = _getPrizeAmount(game, user);

        require(amount > 0);
        user.transfer(amount);

    }

    function _getPrizeAmount(Game storage game, address user) internal view returns (uint amount){
        amount = _getUserAmount(game, user);
        if (amount > 0 && game.prizePool > 0) {
            // доля суммы ставок игрока, которые вошли в число победивших от общей суммы ставок победителей
            amount = amount.add(game.prizePool.mul(amount).div(game.winnersAmount));
        }
    }

    function _getUserAmount(Game storage game, address user) internal view returns (uint amount){
        amount = 0;
        for (uint i = 0; i < game.userBets[user].length; i++) {
            if (game.userBets[user][i] >= game.lastLeftValue &&
                game.userBets[user][i] <= game.lastRightValue)
            {
                amount += game.betUsers[game.userBets[user][i]][user];
            }
        }
    }

    //AVL FUNCTIONS
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    function getPos(uint _game, uint _value) public view returns (uint) {
        return _getPos(games[_game], _value);
    }

    function select_at(uint _game, uint pos) public view returns (uint) {
        return _select_at(games[_game], pos);
    }

    function count(uint _game) public view returns (uint) {
        return _count(games[_game]);
    }



    //internal
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    function _insert(Game storage game, uint _value) internal {
        if (_value==0)
            game.bets[_value].dupes++;
        else{
            insert_helper(game, 0, true, _value);
        }
    }

    //если есть дупбликаты, то возвращает позицию послденего элемента
    function _getPos(Game storage game, uint _value) internal view returns (uint) {
        uint c = _count(game);
        if (c == 0) return 0; //err
        if (game.bets[_value].count == 0) return 0; //err

        uint _first = _select_at(game, 0);
        uint _last = _select_at(game, c-1);

        // Shortcut for the actual value
        if (_value > _last || _value < _first) return 0; //err
        if (_value == _first) return 0;
        if (_value == _last) return c - 1;

        // Binary search of the value in the array
        uint min = 0;
        uint max = c-1;
        while (max > min) {
            uint mid = (max + min + 1)/ 2;
            uint _val = _select_at(game, mid);
            if (_val <= _value) {
                min = mid;
            } else {
                max = mid-1;
            }
        }
        return min;
    }


    function _select_at(Game storage game, uint pos) internal view returns (uint value){
        uint zeroes=game.bets[0].dupes;
        // Node memory left_node;
        uint left_count;
        if (pos<zeroes) {
            return 0;
        }
        uint pos_new=pos-zeroes;
        uint cur=game.bets[0].children[true];
        Node storage cur_node=game.bets[cur];
        while(true){
            uint left=cur_node.children[false];
            uint cur_num=cur_node.dupes+1;
            if (left!=0) {

                left_count=game.bets[left].count;
            }
            else {
                left_count=0;
            }
            if (pos_new<left_count) {
                cur=left;
                cur_node=game.bets[left];
            }
            else if (pos_new<left_count+cur_num){
                return cur;
            }
            else {
                cur=cur_node.children[true];
                cur_node=game.bets[cur];
                pos_new-=left_count+cur_num;
            }
        }

    }


    function _count(Game storage game) internal view returns (uint){
        Node storage root=game.bets[0];
        Node storage child=game.bets[root.children[true]];
        return root.dupes+child.count;
    }


    function insert_helper(Game storage game, uint p_value, bool side, uint value) private {
        Node storage root=game.bets[p_value];
        uint c_value=root.children[side];
        if (c_value==0){
            root.children[side]=value;
            Node storage child=game.bets[value];
            child.parent=p_value;
            child.side=side;
            child.height=1;
            child.count=1;
            update_counts(game, value);
            rebalance_insert(game, value);
        }
        else if (c_value==value){
            game.bets[c_value].dupes++;
            update_count(game, value);
            update_counts(game, value);
        }
        else{
            bool side_new=(value >= c_value);
            insert_helper(game, c_value,side_new,value);
        }
    }


    function update_count(Game storage game, uint value) private {
        Node storage n=game.bets[value];
        n.count=1+game.bets[n.children[false]].count+game.bets[n.children[true]].count+n.dupes;
    }


    function update_counts(Game storage game, uint value) private {
        uint parent=game.bets[value].parent;
        while (parent!=0) {
            update_count(game, parent);
            parent=game.bets[parent].parent;
        }
    }


    function rebalance_insert(Game storage game, uint n_value) private {
        update_height(game, n_value);
        Node storage n=game.bets[n_value];
        uint p_value=n.parent;
        if (p_value!=0) {
            int p_bf=balance_factor(game, p_value);
            bool side=n.side;
            int sign;
            if (side)
                sign=-1;
            else
                sign=1;
            if (p_bf == sign*2) {
                if (balance_factor(game, n_value) == (-1 * sign))
                    rotate(game, n_value,side);
                rotate(game, p_value,!side);
            }
            else if (p_bf != 0)
                rebalance_insert(game, p_value);
        }
    }


    function update_height(Game storage game, uint value) private {
        Node storage n=game.bets[value];
        uint height_left=game.bets[n.children[false]].height;
        uint height_right=game.bets[n.children[true]].height;
        if (height_left>height_right)
            n.height=height_left+1;
        else
            n.height=height_right+1;
    }


    function balance_factor(Game storage game, uint value) private view returns (int bf) {
        Node storage n=game.bets[value];
        return int(game.bets[n.children[false]].height)-int(game.bets[n.children[true]].height);
    }


    function rotate(Game storage game, uint value,bool dir) private {
        bool other_dir=!dir;
        Node storage n=game.bets[value];
        bool side=n.side;
        uint parent=n.parent;
        uint value_new=n.children[other_dir];
        Node storage n_new=game.bets[value_new];
        uint orphan=n_new.children[dir];
        Node storage p=game.bets[parent];
        Node storage o=game.bets[orphan];
        p.children[side]=value_new;
        n_new.side=side;
        n_new.parent=parent;
        n_new.children[dir]=value;
        n.parent=value_new;
        n.side=dir;
        n.children[other_dir]=orphan;
        o.parent=value;
        o.side=other_dir;
        update_height(game, value);
        update_height(game, value_new);
        update_count(game, value);
        update_count(game, value_new);
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address payable","name":"_dividendManagerAddress","type":"address"},{"internalType":"uint256","name":"_betValue","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"game","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bet","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NewBet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"game","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PrizeTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"game","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"res","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastLeftValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRightValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ResultSet","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"betValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"checkMyPrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"checkPrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"closeBetsTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dividendManagerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gameStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"uint256","name":"res","type":"uint256"},{"internalType":"uint256","name":"resPos","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"winnersAmount","type":"uint256"},{"internalType":"uint256","name":"prizePool","type":"uint256"},{"internalType":"uint256","name":"lastLeftPos","type":"uint256"},{"internalType":"uint256","name":"lastRightPos","type":"uint256"},{"internalType":"uint256","name":"lastLeftValue","type":"uint256"},{"internalType":"uint256","name":"lastRightValue","type":"uint256"},{"internalType":"bool","name":"allDone","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gamesStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentGameId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getGameTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"getMyPrize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getNextGameId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"getPos","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"address payable","name":"_user","type":"address"}],"name":"getPrize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getUserBetAmounts","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"getUserBetAmounts","outputs":[{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"getUserBetValues","outputs":[{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getUserBetValues","outputs":[{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"uint256","name":"_res","type":"uint256"}],"name":"insertResult","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"isMyPrizeTaken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"isPrizeTaken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"uint256","name":"_bet","type":"uint256"}],"name":"makeBet","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"uint256","name":"pos","type":"uint256"}],"name":"select_at","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_betValue","type":"uint256"}],"name":"setBetValue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_dividendManagerAddress","type":"address"}],"name":"setDividendManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"setLastLeftRight","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"uint256","name":"_res","type":"uint256"}],"name":"setRes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_stop","type":"uint256"}],"name":"setWinnersAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"shiftLeftRight","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200299738038062002997833981810160405260408110156200003757600080fd5b508051602090910151600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36200009d336001600160e01b03620000ee16565b6001600160a01b038216620000b157600080fd5b600280546001600160a01b0319166001600160a01b03939093169290921790915561025860045560b4600555635d7adc00600655600755620001cf565b620001098160016200014060201b620021191790919060201c565b6040516001600160a01b038216907f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33990600090a250565b6001600160a01b0381166200015457600080fd5b6200016982826001600160e01b036200019916565b156200017457600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216620001af57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6127b880620001df6000396000f3fe6080604052600436106102305760003560e01c8063828b1e7c1161012e578063b77dad88116100ab578063df898e321161006f578063df898e3214610873578063ede8af0114610896578063f0a81c22146108ab578063f2fde38b146108db578063fcce15f41461090e57610230565b8063b77dad88146107a7578063bc6848b7146107d1578063bfbbdd78146107fb578063ca3b52fc14610825578063cce660971461083a57610230565b8063949eebe6116100f2578063949eebe6146106e15780639706964d1461070b578063a263540114610744578063acdbe45314610759578063af3fac401461079257610230565b8063828b1e7c146106455780638bad0c0a1461066f5780638bf60537146106845780638da5cb5b146106b75780638f32d59b146106cc57610230565b8063426f4d67116101bc57806357b3ae7a1161018057806357b3ae7a1461051a5780636a90d65d146105445780637048027514610574578063715018a6146105a75780637903c08f146105bc57610230565b8063426f4d6714610450578063472dee501461047a57806349b7a9c2146104aa5780634a70282b146104db5780634ee71ef01461050557610230565b80632161f896116102035780632161f8961461034f57806324d7806c146103915780632c8705f0146103d8578063307e74f5146104115780633b3546c81461042657610230565b8063117a5b90146102355780631785f53c146102b157806317ffc320146102e65780631cf959be14610319575b600080fd5b34801561024157600080fd5b5061025f6004803603602081101561025857600080fd5b5035610938565b604080519a8b5260208b0199909952898901979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152151561012083015251908190036101400190f35b3480156102bd57600080fd5b506102e4600480360360208110156102d457600080fd5b50356001600160a01b0316610991565b005b3480156102f257600080fd5b506102e46004803603602081101561030957600080fd5b50356001600160a01b03166109e4565b34801561032557600080fd5b506102e46004803603606081101561033c57600080fd5b5080359060208101359060400135610b7f565b34801561035b57600080fd5b5061037f6004803603604081101561037257600080fd5b5080359060200135610c34565b60408051918252519081900360200190f35b34801561039d57600080fd5b506103c4600480360360208110156103b457600080fd5b50356001600160a01b0316610c55565b604080519115158252519081900360200190f35b3480156103e457600080fd5b506102e4600480360360408110156103fb57600080fd5b50803590602001356001600160a01b0316610c70565b34801561041d57600080fd5b5061037f610cd8565b34801561043257600080fd5b5061037f6004803603602081101561044957600080fd5b5035610cde565b34801561045c57600080fd5b506102e46004803603602081101561047357600080fd5b5035610cf5565b34801561048657600080fd5b506102e46004803603604081101561049d57600080fd5b5080359060200135610d41565b3480156104b657600080fd5b506104bf610d7f565b604080516001600160a01b039092168252519081900360200190f35b3480156104e757600080fd5b506102e4600480360360208110156104fe57600080fd5b5035610d8e565b34801561051157600080fd5b5061037f610d98565b34801561052657600080fd5b506102e46004803603602081101561053d57600080fd5b5035610d9e565b34801561055057600080fd5b5061037f6004803603604081101561056757600080fd5b5080359060200135610dc7565b34801561058057600080fd5b506102e46004803603602081101561059757600080fd5b50356001600160a01b0316610ddf565b3480156105b357600080fd5b506102e4610e2f565b3480156105c857600080fd5b506105f5600480360360408110156105df57600080fd5b50803590602001356001600160a01b0316610ec0565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610631578181015183820152602001610619565b505050509050019250505060405180910390f35b34801561065157600080fd5b506102e46004803603602081101561066857600080fd5b5035610fdf565b34801561067b57600080fd5b506102e4611008565b34801561069057600080fd5b506102e4600480360360208110156106a757600080fd5b50356001600160a01b0316611013565b3480156106c357600080fd5b506104bf61108f565b3480156106d857600080fd5b506103c461109e565b3480156106ed57600080fd5b506105f56004803603602081101561070457600080fd5b50356110af565b34801561071757600080fd5b5061037f6004803603604081101561072e57600080fd5b50803590602001356001600160a01b03166110bb565b34801561075057600080fd5b5061037f611109565b34801561076557600080fd5b506103c46004803603604081101561077c57600080fd5b50803590602001356001600160a01b0316611123565b34801561079e57600080fd5b5061037f611152565b3480156107b357600080fd5b5061037f600480360360208110156107ca57600080fd5b5035611158565b3480156107dd57600080fd5b506105f5600480360360208110156107f457600080fd5b5035611164565b34801561080757600080fd5b5061037f6004803603602081101561081e57600080fd5b5035611170565b34801561083157600080fd5b5061037f61117c565b34801561084657600080fd5b506105f56004803603604081101561085d57600080fd5b50803590602001356001600160a01b0316611182565b6102e46004803603604081101561088957600080fd5b50803590602001356111f9565b3480156108a257600080fd5b5061037f6112a8565b3480156108b757600080fd5b506102e4600480360360408110156108ce57600080fd5b50803590602001356112c2565b3480156108e757600080fd5b506102e4600480360360208110156108fe57600080fd5b50356001600160a01b03166112ec565b34801561091a57600080fd5b506103c46004803603602081101561093157600080fd5b503561133c565b6003602081905260009182526040909120600181015460028201549282015460088301546009840154600a850154600b860154600c870154600d880154600e909801549698979596949593949293919290919060ff168a565b61099961109e565b6109d8576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6109e181611348565b50565b6109ec61109e565b610a2b576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6000610a3561108f565b90506001600160a01b038216610a82576040516001600160a01b03821690303180156108fc02916000818181858888f19350505050158015610a7b573d6000803e3d6000fd5b50506109e1565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d6020811015610af657600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905291519293509085169163a9059cbb916044808201926020929091908290030181600087803b158015610b4e57600080fd5b505af1158015610b62573d6000803e3d6000fd5b505050506040513d6020811015610b7857600080fd5b5050505050565b610b8833610c55565b610b9157600080fd5b6000838152600360205260409020610baa908383611390565b6000838152600360205260409020600e015460ff1615610c2f576000838152600360208181526040928390206001810154600c820154600d8301549290940154855191825292810193909352828401526060820152905184917f9fab441e2fe549beba1061ad214523689184176a9b8390ebc7ab9a49de6d4637919081900360800190a25b505050565b6000828152600360205260408120610c4c9083611545565b90505b92915050565b6000610c6860018363ffffffff61163816565b90505b919050565b6000828152600360205260408120610c88908361166d565b9050816001600160a01b03167ff812b9a4af7b9ed219f98e508a9594f49595389ddb44a428bedf34299277d3a28483604051808381526020018281526020019250505060405180910390a2505050565b60045481565b6000818152600360205260408120610c689061171d565b610cfd61109e565b610d3c576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b600755565b610d4a33610c55565b610d5357600080fd5b610d5d82826112c2565b610d6682610fdf565b610d6f82610d9e565b610d7b82600080610b7f565b5050565b6002546001600160a01b031681565b6109e18133610c70565b60055481565b610da733610c55565b610db057600080fd5b6000818152600360205260409020610d7b9061174d565b6000828152600360205260408120610c4c908361188e565b610de761109e565b610e26576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6109e181611981565b610e3761109e565b610e76576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008281526003602090815260408083206001600160a01b038516845260060182529182902054825181815281830281019092019092526060918015610f10578160200160208202803883390190505b50905060005b60008481526003602090815260408083206001600160a01b0387168452600601909152902054811015610fd85760008481526003602090815260408083206001600160a01b038716845260068101909252822080546005909201929184908110610f7c57fe5b906000526020600020015481526020019081526020016000206000846001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110610fc557fe5b6020908102919091010152600101610f16565b5092915050565b610fe833610c55565b610ff157600080fd5b6000818152600360205260409020610d7b906119c9565b61101133611348565b565b61101b61109e565b61105a576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6001600160a01b03811661106d57600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6060610c688233611182565b60008281526003602090815260408083206001600160a01b038516845260070190915281205460ff16156110f157506000610c4f565b6000838152600360205260409020610c4c9083611c17565b600060045460065442038161111a57fe5b04600101905090565b60008281526003602090815260408083206001600160a01b038516845260070190915290205460ff1692915050565b60075481565b6000610c6882336110bb565b6060610c688233610ec0565b60045460065491020190565b60065481565b60008281526003602090815260408083206001600160a01b03851684526006018252918290208054835181840281018401909452808452606093928301828280156111ec57602002820191906000526020600020905b8154815260200190600101908083116111d8575b5050505050905092915050565b6000811161120657600080fd5b6007541561121857600754341461121d565b600034115b61122657600080fd5b8161123657611233611109565b91505b60055461124283611170565b03421061124e57600080fd5b60008281526003602052604090206112669082611c6d565b604080518281523460208201528151849233927f8d466116dd3f7b5e3a703c5bd5104cdde755801bee5a4e7d640edef8f7e6cf84929081900390910190a35050565b60006004546006544203816112b957fe5b04600201905090565b6112cb33610c55565b6112d457600080fd5b6000828152600360205260409020610d7b9082611d4d565b6112f461109e565b611333576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6109e181611d74565b6000610c688233611123565b61135960018263ffffffff611e1416565b6040516001600160a01b038216907fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f90600090a250565b60008084600b015485600a015414156113d6576113b18586600a0154611545565b91506113bd8583611e5c565b6008860155600e8501805460ff191660011790556114b8565b600084116113e85784600a01546113ea565b835b9350600083116113fe5784600b0154611400565b825b92508360005b8482116114b157866002015482141561142457600190910190611406565b61142e8783611545565b935061143a8785611e5c565b925061144c818463ffffffff611ee216565b905085821415801561146e575060008481526020889052604090206005015415155b1561148b5760008481526020889052604090206005015491909101905b86600b015482106114a657600e8701805460ff191660011790555b600190910190611406565b6008870155505b600e85015460ff1615610b78576008850154600386015403801561153d5760006114e982600a63ffffffff611ef416565b90506114fb828263ffffffff611f1616565b60098801556002546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561153a573d6000803e3d6000fd5b50505b505050505050565b600080805260208390526040812060050154818184101561156b57600092505050610c4f565b600080805260208681526040808320600184528252808320548084529188905290912083860391905b600080805260208290526040902054600582015460010181156115ca57600082815260208b9052604090206004015495506115cf565b600095505b858510156115f257600082815260208b9052604090209193509091508290611631565b80860185101561160b5783975050505050505050610c4f565b600160009081526020938452604080822054808352948c90529020868201909503949293505b5050611594565b60006001600160a01b03821661164d57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b600e82015460009060ff1661168157600080fd5b6001600160a01b038216600090815260078401602052604090205460ff16156116a957600080fd5b6001600160a01b03821660009081526007840160205260409020805460ff191660011790556116d88383611c17565b9050600081116116e757600080fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610fd8573d6000803e3d6000fd5b60008080526020828152604080832060018452808352818420548452939091529020600401546005909101540190565b600c8101546001820154600d83015460009282039190038082141561177757600192505050610c6b565b6000818311156117f5576000600161178e8761171d565b0390508086600b015414156117aa576001945050505050610c6b565b856002015486600a0154106117c6576001945050505050610c6b565b6117d78687600b0154600101611545565b91508560010154820392506117ef8685858585611f2b565b50611883565b600c850154600090815260208690526040902060050154600a860154036118225760019350505050610c6b565b846002015485600b01541161183d5760019350505050610c6b565b61186c85600187600001600089600c015481526020019081526020016000206005015488600a01540303611545565b905080856001015403925061188385848484612011565b506001949350505050565b60008061189a8461171d565b9050806118ab576000915050610c4f565b6000838152602085905260409020600401546118cb576000915050610c4f565b60006118d8856000611545565b905060006118e98660018503611545565b9050808511806118f857508185105b156119095760009350505050610c4f565b8185141561191d5760009350505050610c4f565b80851415611932575050600019019050610c4f565b600060001984015b818111156119765760028282016001010460006119578a83611545565b90508881116119685781935061196f565b6001820392505b505061193a565b509695505050505050565b61199260018263ffffffff61211916565b6040516001600160a01b038216907f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33990600090a250565b6000808260010154116119db57600080fd5b600182015460009081526020839052604090206005015415611a2057506002810154600a8201819055600b820155600180820154600c8301819055600d830155610c6b565b60006001611a2d8461171d565b0390506013811015611b145760028301541580611a4d5750808360020154145b15611a7957600283015415611a655760018103611a68565b60015b600a8401819055600b840155611b0f565b6000611a8c846001866002015403611545565b90506000611aa1858660020154600101611545565b600186015490915082810390820380821415611acf5760028701546000198101600a890155600101600b8801555b80821115611aec576002870154600101600a8801819055600b8801555b80821015611b0a57600287015460001901600a8801819055600b8801555b505050505b611bbb565b6000611b496064611b3d600a611b3186600163ffffffff611ee216565b9063ffffffff61216516565b9063ffffffff611ef416565b90506000611b5e82600263ffffffff611ef416565b90508085600201541015611b7f576000600a860155600b8501829055611bb8565b82818660020154011115611ba157600b8501839055818303600a860155611bb8565b6002850154819003600a86018190558201600b8601555b50505b611bc98384600a0154611545565b600c840155600b830154611bde908490611545565b600d840155600c830154611bf390849061188e565b600a840155600d830154611c0890849061188e565b600b8401555060019050919050565b6000611c23838361218c565b9050600081118015611c39575060008360090154115b15610c4f57610c4c611c608460080154611b3d84876009015461216590919063ffffffff16565b829063ffffffff611ee216565b60008181526005830160209081526040808320338452909152902054611ce857611c9782826122a6565b600081815260048301602090815260408083208054600181810183559185528385200180546001600160a01b0319163390811790915584526006860183529083208054918201815583529120018190555b6003820154611cfd903463ffffffff611ee216565b600383015560008181526005830160209081526040808320338452909152902054611d2e903463ffffffff611ee216565b6000918252600590920160209081526040808320338452909152902055565b611d5782826122a6565b60018201819055611d68828261188e565b82600201819055505050565b6001600160a01b038116611db95760405162461bcd60e51b815260040180806020018281038252602681526020018061273e6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116611e2757600080fd5b611e318282611638565b611e3a57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6000805b6000838152600485016020526040902054811015610fd857600083815260058501602090815260408083206004880190925282208054611ed893919085908110611ea657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839063ffffffff611ee216565b9150600101611e60565b600082820183811015610c4c57600080fd5b6000808211611f0257600080fd5b6000828481611f0d57fe5b04949350505050565b600082821115611f2557600080fd5b50900390565b60005a600d870154600b880154600c890154600a8a01549394506000935b888a1115611feb578793508a60000160008981526020019081526020016000206005015483600101019250611f818b83600101611545565b9150611f8d8b8361188e565b905086831415611f9c57611feb565b8a600201548110611fac57611feb565b611fb98b84600101611545565b60018c01548381039b5081039950975084611fd9575a8603620186a00194505b845a1015611fe657611feb565b611f49565b600d8b0193909355600b8a0191909155600c890155600a90970196909655505050505050565b60005a600d860154600b870154600c880154600a8901549394506000935b888811156120f457600087815260208b905260408082206005908101548784529190922090910154600019940384019388935091030161206f8a84611545565b600083815260208c90526040902060050154909450810361208f576120f4565b8960020154831161209f576120f4565b600082815260208b905260409020600501546120c2908b90830360001901611545565b60018b01548381039a50810398509650846120e2575a8603620186a00194505b845a10156120ef576120f4565b61202f565b600d8a0193909355600b890191909155600c880155600a909601959095555050505050565b6001600160a01b03811661212c57600080fd5b6121368282611638565b1561214057600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60008261217457506000610c4f565b8282028284828161218157fe5b0414610c4c57600080fd5b6000805b6001600160a01b0383166000908152600685016020526040902054811015610fd857600c8401546001600160a01b038416600090815260068601602052604090208054839081106121dd57fe5b90600052602060002001541015801561222a5750600d8401546001600160a01b0384166000908152600686016020526040902080548390811061221c57fe5b906000526020600020015411155b1561229e576001600160a01b038316600090815260068501602052604081208054600587019291908490811061225c57fe5b906000526020600020015481526020019081526020016000206000846001600160a01b03166001600160a01b0316815260200190815260200160002054820191505b600101612190565b806122c857600081815260208390526040902060050180546001019055610d7b565b610d7b8260006001845b600083815260208581526040808320851515845291829052909120548061235257831515600081815260208481526040808320879055868352908990529020600180820188905560028201805460ff191690931790925560038101829055600481019190915561234287856123a4565b61234c87856123de565b5061153d565b8281141561238b5760008181526020879052604090206005018054600101905561237c868461247f565b61238686846123a4565b61153d565b8083101561239b878383876122d2565b50505050505050565b6000818152602083905260409020600101545b8015610c2f576123c7838261247f565b6000908152602083905260409020600101546123b7565b6123e882826124d2565b60008181526020839052604090206001810154801561247957600061240d8583612536565b600284015490915060ff1660008115612429575060001961242d565b5060015b806002028314156124695780600019026124478888612536565b141561245857612458878784612579565b61246487858415612579565b61239b565b821561239b5761239b87856123de565b50505050565b600090815260208281526040808320600581015460018086528285528386205486528685528386206004908101548780528487528588205488529790955292909420830154909401909201909101910155565b60008181526020838152604080832083805280835281842054845285835281842060039081015460018652828552838620548652938790529190932001548082111561252657600182016003840155610b78565b6001810160038401555050505050565b6000818152602083815260408083206001845280835281842054845285835281842060039081015485805291845282852054855292869052922001540392915050565b6000811590506000846000016000858152602001908152602001600020905060008160020160009054906101000a900460ff1690506000826001015490506000836000016000861515151581526020019081526020016000205490506000886000016000838152602001908152602001600020905060008160000160008915151515815260200190815260200160002054905060008a6000016000868152602001908152602001600020905060008b60000160008481526020019081526020016000209050848260000160008915151515815260200190815260200160002081905550868460020160006101000a81548160ff0219169083151502179055508584600101819055508a8460000160008c15151515815260200190815260200160002081905550848860010181905550898860020160006101000a81548160ff021916908315150217905550828860000160008b151515158152602001908152602001600020819055508a8160010181905550888160020160006101000a81548160ff0219169083151502179055506127118c8c6124d2565b61271b8c866124d2565b6127258c8c61247f565b61272f8c8661247f565b50505050505050505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a7231582061ed0d9d01233320fabbd0efe0cf8009bfab38d485d6148f33c25a12271ffc3164736f6c634300050c0032000000000000000000000000351c25f77444890aa546281d4b9077d0099ae0ff000000000000000000000000000000000000000000000000002386f26fc10000

Deployed Bytecode

0x6080604052600436106102305760003560e01c8063828b1e7c1161012e578063b77dad88116100ab578063df898e321161006f578063df898e3214610873578063ede8af0114610896578063f0a81c22146108ab578063f2fde38b146108db578063fcce15f41461090e57610230565b8063b77dad88146107a7578063bc6848b7146107d1578063bfbbdd78146107fb578063ca3b52fc14610825578063cce660971461083a57610230565b8063949eebe6116100f2578063949eebe6146106e15780639706964d1461070b578063a263540114610744578063acdbe45314610759578063af3fac401461079257610230565b8063828b1e7c146106455780638bad0c0a1461066f5780638bf60537146106845780638da5cb5b146106b75780638f32d59b146106cc57610230565b8063426f4d67116101bc57806357b3ae7a1161018057806357b3ae7a1461051a5780636a90d65d146105445780637048027514610574578063715018a6146105a75780637903c08f146105bc57610230565b8063426f4d6714610450578063472dee501461047a57806349b7a9c2146104aa5780634a70282b146104db5780634ee71ef01461050557610230565b80632161f896116102035780632161f8961461034f57806324d7806c146103915780632c8705f0146103d8578063307e74f5146104115780633b3546c81461042657610230565b8063117a5b90146102355780631785f53c146102b157806317ffc320146102e65780631cf959be14610319575b600080fd5b34801561024157600080fd5b5061025f6004803603602081101561025857600080fd5b5035610938565b604080519a8b5260208b0199909952898901979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152151561012083015251908190036101400190f35b3480156102bd57600080fd5b506102e4600480360360208110156102d457600080fd5b50356001600160a01b0316610991565b005b3480156102f257600080fd5b506102e46004803603602081101561030957600080fd5b50356001600160a01b03166109e4565b34801561032557600080fd5b506102e46004803603606081101561033c57600080fd5b5080359060208101359060400135610b7f565b34801561035b57600080fd5b5061037f6004803603604081101561037257600080fd5b5080359060200135610c34565b60408051918252519081900360200190f35b34801561039d57600080fd5b506103c4600480360360208110156103b457600080fd5b50356001600160a01b0316610c55565b604080519115158252519081900360200190f35b3480156103e457600080fd5b506102e4600480360360408110156103fb57600080fd5b50803590602001356001600160a01b0316610c70565b34801561041d57600080fd5b5061037f610cd8565b34801561043257600080fd5b5061037f6004803603602081101561044957600080fd5b5035610cde565b34801561045c57600080fd5b506102e46004803603602081101561047357600080fd5b5035610cf5565b34801561048657600080fd5b506102e46004803603604081101561049d57600080fd5b5080359060200135610d41565b3480156104b657600080fd5b506104bf610d7f565b604080516001600160a01b039092168252519081900360200190f35b3480156104e757600080fd5b506102e4600480360360208110156104fe57600080fd5b5035610d8e565b34801561051157600080fd5b5061037f610d98565b34801561052657600080fd5b506102e46004803603602081101561053d57600080fd5b5035610d9e565b34801561055057600080fd5b5061037f6004803603604081101561056757600080fd5b5080359060200135610dc7565b34801561058057600080fd5b506102e46004803603602081101561059757600080fd5b50356001600160a01b0316610ddf565b3480156105b357600080fd5b506102e4610e2f565b3480156105c857600080fd5b506105f5600480360360408110156105df57600080fd5b50803590602001356001600160a01b0316610ec0565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610631578181015183820152602001610619565b505050509050019250505060405180910390f35b34801561065157600080fd5b506102e46004803603602081101561066857600080fd5b5035610fdf565b34801561067b57600080fd5b506102e4611008565b34801561069057600080fd5b506102e4600480360360208110156106a757600080fd5b50356001600160a01b0316611013565b3480156106c357600080fd5b506104bf61108f565b3480156106d857600080fd5b506103c461109e565b3480156106ed57600080fd5b506105f56004803603602081101561070457600080fd5b50356110af565b34801561071757600080fd5b5061037f6004803603604081101561072e57600080fd5b50803590602001356001600160a01b03166110bb565b34801561075057600080fd5b5061037f611109565b34801561076557600080fd5b506103c46004803603604081101561077c57600080fd5b50803590602001356001600160a01b0316611123565b34801561079e57600080fd5b5061037f611152565b3480156107b357600080fd5b5061037f600480360360208110156107ca57600080fd5b5035611158565b3480156107dd57600080fd5b506105f5600480360360208110156107f457600080fd5b5035611164565b34801561080757600080fd5b5061037f6004803603602081101561081e57600080fd5b5035611170565b34801561083157600080fd5b5061037f61117c565b34801561084657600080fd5b506105f56004803603604081101561085d57600080fd5b50803590602001356001600160a01b0316611182565b6102e46004803603604081101561088957600080fd5b50803590602001356111f9565b3480156108a257600080fd5b5061037f6112a8565b3480156108b757600080fd5b506102e4600480360360408110156108ce57600080fd5b50803590602001356112c2565b3480156108e757600080fd5b506102e4600480360360208110156108fe57600080fd5b50356001600160a01b03166112ec565b34801561091a57600080fd5b506103c46004803603602081101561093157600080fd5b503561133c565b6003602081905260009182526040909120600181015460028201549282015460088301546009840154600a850154600b860154600c870154600d880154600e909801549698979596949593949293919290919060ff168a565b61099961109e565b6109d8576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6109e181611348565b50565b6109ec61109e565b610a2b576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6000610a3561108f565b90506001600160a01b038216610a82576040516001600160a01b03821690303180156108fc02916000818181858888f19350505050158015610a7b573d6000803e3d6000fd5b50506109e1565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d6020811015610af657600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905291519293509085169163a9059cbb916044808201926020929091908290030181600087803b158015610b4e57600080fd5b505af1158015610b62573d6000803e3d6000fd5b505050506040513d6020811015610b7857600080fd5b5050505050565b610b8833610c55565b610b9157600080fd5b6000838152600360205260409020610baa908383611390565b6000838152600360205260409020600e015460ff1615610c2f576000838152600360208181526040928390206001810154600c820154600d8301549290940154855191825292810193909352828401526060820152905184917f9fab441e2fe549beba1061ad214523689184176a9b8390ebc7ab9a49de6d4637919081900360800190a25b505050565b6000828152600360205260408120610c4c9083611545565b90505b92915050565b6000610c6860018363ffffffff61163816565b90505b919050565b6000828152600360205260408120610c88908361166d565b9050816001600160a01b03167ff812b9a4af7b9ed219f98e508a9594f49595389ddb44a428bedf34299277d3a28483604051808381526020018281526020019250505060405180910390a2505050565b60045481565b6000818152600360205260408120610c689061171d565b610cfd61109e565b610d3c576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b600755565b610d4a33610c55565b610d5357600080fd5b610d5d82826112c2565b610d6682610fdf565b610d6f82610d9e565b610d7b82600080610b7f565b5050565b6002546001600160a01b031681565b6109e18133610c70565b60055481565b610da733610c55565b610db057600080fd5b6000818152600360205260409020610d7b9061174d565b6000828152600360205260408120610c4c908361188e565b610de761109e565b610e26576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6109e181611981565b610e3761109e565b610e76576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008281526003602090815260408083206001600160a01b038516845260060182529182902054825181815281830281019092019092526060918015610f10578160200160208202803883390190505b50905060005b60008481526003602090815260408083206001600160a01b0387168452600601909152902054811015610fd85760008481526003602090815260408083206001600160a01b038716845260068101909252822080546005909201929184908110610f7c57fe5b906000526020600020015481526020019081526020016000206000846001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110610fc557fe5b6020908102919091010152600101610f16565b5092915050565b610fe833610c55565b610ff157600080fd5b6000818152600360205260409020610d7b906119c9565b61101133611348565b565b61101b61109e565b61105a576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6001600160a01b03811661106d57600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6060610c688233611182565b60008281526003602090815260408083206001600160a01b038516845260070190915281205460ff16156110f157506000610c4f565b6000838152600360205260409020610c4c9083611c17565b600060045460065442038161111a57fe5b04600101905090565b60008281526003602090815260408083206001600160a01b038516845260070190915290205460ff1692915050565b60075481565b6000610c6882336110bb565b6060610c688233610ec0565b60045460065491020190565b60065481565b60008281526003602090815260408083206001600160a01b03851684526006018252918290208054835181840281018401909452808452606093928301828280156111ec57602002820191906000526020600020905b8154815260200190600101908083116111d8575b5050505050905092915050565b6000811161120657600080fd5b6007541561121857600754341461121d565b600034115b61122657600080fd5b8161123657611233611109565b91505b60055461124283611170565b03421061124e57600080fd5b60008281526003602052604090206112669082611c6d565b604080518281523460208201528151849233927f8d466116dd3f7b5e3a703c5bd5104cdde755801bee5a4e7d640edef8f7e6cf84929081900390910190a35050565b60006004546006544203816112b957fe5b04600201905090565b6112cb33610c55565b6112d457600080fd5b6000828152600360205260409020610d7b9082611d4d565b6112f461109e565b611333576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6109e181611d74565b6000610c688233611123565b61135960018263ffffffff611e1416565b6040516001600160a01b038216907fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f90600090a250565b60008084600b015485600a015414156113d6576113b18586600a0154611545565b91506113bd8583611e5c565b6008860155600e8501805460ff191660011790556114b8565b600084116113e85784600a01546113ea565b835b9350600083116113fe5784600b0154611400565b825b92508360005b8482116114b157866002015482141561142457600190910190611406565b61142e8783611545565b935061143a8785611e5c565b925061144c818463ffffffff611ee216565b905085821415801561146e575060008481526020889052604090206005015415155b1561148b5760008481526020889052604090206005015491909101905b86600b015482106114a657600e8701805460ff191660011790555b600190910190611406565b6008870155505b600e85015460ff1615610b78576008850154600386015403801561153d5760006114e982600a63ffffffff611ef416565b90506114fb828263ffffffff611f1616565b60098801556002546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561153a573d6000803e3d6000fd5b50505b505050505050565b600080805260208390526040812060050154818184101561156b57600092505050610c4f565b600080805260208681526040808320600184528252808320548084529188905290912083860391905b600080805260208290526040902054600582015460010181156115ca57600082815260208b9052604090206004015495506115cf565b600095505b858510156115f257600082815260208b9052604090209193509091508290611631565b80860185101561160b5783975050505050505050610c4f565b600160009081526020938452604080822054808352948c90529020868201909503949293505b5050611594565b60006001600160a01b03821661164d57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b600e82015460009060ff1661168157600080fd5b6001600160a01b038216600090815260078401602052604090205460ff16156116a957600080fd5b6001600160a01b03821660009081526007840160205260409020805460ff191660011790556116d88383611c17565b9050600081116116e757600080fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610fd8573d6000803e3d6000fd5b60008080526020828152604080832060018452808352818420548452939091529020600401546005909101540190565b600c8101546001820154600d83015460009282039190038082141561177757600192505050610c6b565b6000818311156117f5576000600161178e8761171d565b0390508086600b015414156117aa576001945050505050610c6b565b856002015486600a0154106117c6576001945050505050610c6b565b6117d78687600b0154600101611545565b91508560010154820392506117ef8685858585611f2b565b50611883565b600c850154600090815260208690526040902060050154600a860154036118225760019350505050610c6b565b846002015485600b01541161183d5760019350505050610c6b565b61186c85600187600001600089600c015481526020019081526020016000206005015488600a01540303611545565b905080856001015403925061188385848484612011565b506001949350505050565b60008061189a8461171d565b9050806118ab576000915050610c4f565b6000838152602085905260409020600401546118cb576000915050610c4f565b60006118d8856000611545565b905060006118e98660018503611545565b9050808511806118f857508185105b156119095760009350505050610c4f565b8185141561191d5760009350505050610c4f565b80851415611932575050600019019050610c4f565b600060001984015b818111156119765760028282016001010460006119578a83611545565b90508881116119685781935061196f565b6001820392505b505061193a565b509695505050505050565b61199260018263ffffffff61211916565b6040516001600160a01b038216907f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33990600090a250565b6000808260010154116119db57600080fd5b600182015460009081526020839052604090206005015415611a2057506002810154600a8201819055600b820155600180820154600c8301819055600d830155610c6b565b60006001611a2d8461171d565b0390506013811015611b145760028301541580611a4d5750808360020154145b15611a7957600283015415611a655760018103611a68565b60015b600a8401819055600b840155611b0f565b6000611a8c846001866002015403611545565b90506000611aa1858660020154600101611545565b600186015490915082810390820380821415611acf5760028701546000198101600a890155600101600b8801555b80821115611aec576002870154600101600a8801819055600b8801555b80821015611b0a57600287015460001901600a8801819055600b8801555b505050505b611bbb565b6000611b496064611b3d600a611b3186600163ffffffff611ee216565b9063ffffffff61216516565b9063ffffffff611ef416565b90506000611b5e82600263ffffffff611ef416565b90508085600201541015611b7f576000600a860155600b8501829055611bb8565b82818660020154011115611ba157600b8501839055818303600a860155611bb8565b6002850154819003600a86018190558201600b8601555b50505b611bc98384600a0154611545565b600c840155600b830154611bde908490611545565b600d840155600c830154611bf390849061188e565b600a840155600d830154611c0890849061188e565b600b8401555060019050919050565b6000611c23838361218c565b9050600081118015611c39575060008360090154115b15610c4f57610c4c611c608460080154611b3d84876009015461216590919063ffffffff16565b829063ffffffff611ee216565b60008181526005830160209081526040808320338452909152902054611ce857611c9782826122a6565b600081815260048301602090815260408083208054600181810183559185528385200180546001600160a01b0319163390811790915584526006860183529083208054918201815583529120018190555b6003820154611cfd903463ffffffff611ee216565b600383015560008181526005830160209081526040808320338452909152902054611d2e903463ffffffff611ee216565b6000918252600590920160209081526040808320338452909152902055565b611d5782826122a6565b60018201819055611d68828261188e565b82600201819055505050565b6001600160a01b038116611db95760405162461bcd60e51b815260040180806020018281038252602681526020018061273e6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116611e2757600080fd5b611e318282611638565b611e3a57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6000805b6000838152600485016020526040902054811015610fd857600083815260058501602090815260408083206004880190925282208054611ed893919085908110611ea657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839063ffffffff611ee216565b9150600101611e60565b600082820183811015610c4c57600080fd5b6000808211611f0257600080fd5b6000828481611f0d57fe5b04949350505050565b600082821115611f2557600080fd5b50900390565b60005a600d870154600b880154600c890154600a8a01549394506000935b888a1115611feb578793508a60000160008981526020019081526020016000206005015483600101019250611f818b83600101611545565b9150611f8d8b8361188e565b905086831415611f9c57611feb565b8a600201548110611fac57611feb565b611fb98b84600101611545565b60018c01548381039b5081039950975084611fd9575a8603620186a00194505b845a1015611fe657611feb565b611f49565b600d8b0193909355600b8a0191909155600c890155600a90970196909655505050505050565b60005a600d860154600b870154600c880154600a8901549394506000935b888811156120f457600087815260208b905260408082206005908101548784529190922090910154600019940384019388935091030161206f8a84611545565b600083815260208c90526040902060050154909450810361208f576120f4565b8960020154831161209f576120f4565b600082815260208b905260409020600501546120c2908b90830360001901611545565b60018b01548381039a50810398509650846120e2575a8603620186a00194505b845a10156120ef576120f4565b61202f565b600d8a0193909355600b890191909155600c880155600a909601959095555050505050565b6001600160a01b03811661212c57600080fd5b6121368282611638565b1561214057600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60008261217457506000610c4f565b8282028284828161218157fe5b0414610c4c57600080fd5b6000805b6001600160a01b0383166000908152600685016020526040902054811015610fd857600c8401546001600160a01b038416600090815260068601602052604090208054839081106121dd57fe5b90600052602060002001541015801561222a5750600d8401546001600160a01b0384166000908152600686016020526040902080548390811061221c57fe5b906000526020600020015411155b1561229e576001600160a01b038316600090815260068501602052604081208054600587019291908490811061225c57fe5b906000526020600020015481526020019081526020016000206000846001600160a01b03166001600160a01b0316815260200190815260200160002054820191505b600101612190565b806122c857600081815260208390526040902060050180546001019055610d7b565b610d7b8260006001845b600083815260208581526040808320851515845291829052909120548061235257831515600081815260208481526040808320879055868352908990529020600180820188905560028201805460ff191690931790925560038101829055600481019190915561234287856123a4565b61234c87856123de565b5061153d565b8281141561238b5760008181526020879052604090206005018054600101905561237c868461247f565b61238686846123a4565b61153d565b8083101561239b878383876122d2565b50505050505050565b6000818152602083905260409020600101545b8015610c2f576123c7838261247f565b6000908152602083905260409020600101546123b7565b6123e882826124d2565b60008181526020839052604090206001810154801561247957600061240d8583612536565b600284015490915060ff1660008115612429575060001961242d565b5060015b806002028314156124695780600019026124478888612536565b141561245857612458878784612579565b61246487858415612579565b61239b565b821561239b5761239b87856123de565b50505050565b600090815260208281526040808320600581015460018086528285528386205486528685528386206004908101548780528487528588205488529790955292909420830154909401909201909101910155565b60008181526020838152604080832083805280835281842054845285835281842060039081015460018652828552838620548652938790529190932001548082111561252657600182016003840155610b78565b6001810160038401555050505050565b6000818152602083815260408083206001845280835281842054845285835281842060039081015485805291845282852054855292869052922001540392915050565b6000811590506000846000016000858152602001908152602001600020905060008160020160009054906101000a900460ff1690506000826001015490506000836000016000861515151581526020019081526020016000205490506000886000016000838152602001908152602001600020905060008160000160008915151515815260200190815260200160002054905060008a6000016000868152602001908152602001600020905060008b60000160008481526020019081526020016000209050848260000160008915151515815260200190815260200160002081905550868460020160006101000a81548160ff0219169083151502179055508584600101819055508a8460000160008c15151515815260200190815260200160002081905550848860010181905550898860020160006101000a81548160ff021916908315150217905550828860000160008b151515158152602001908152602001600020819055508a8160010181905550888160020160006101000a81548160ff0219169083151502179055506127118c8c6124d2565b61271b8c866124d2565b6127258c8c61247f565b61272f8c8661247f565b50505050505050505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a7231582061ed0d9d01233320fabbd0efe0cf8009bfab38d485d6148f33c25a12271ffc3164736f6c634300050c0032

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

000000000000000000000000351c25f77444890aa546281d4b9077d0099ae0ff000000000000000000000000000000000000000000000000002386f26fc10000

-----Decoded View---------------
Arg [0] : _dividendManagerAddress (address): 0x351C25F77444890aA546281D4b9077D0099aE0Ff
Arg [1] : _betValue (uint256): 10000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000351c25f77444890aa546281d4b9077d0099ae0ff
Arg [1] : 000000000000000000000000000000000000000000000000002386f26fc10000


Deployed Bytecode Sourcemap

11534:23380:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13357:8;;;12509:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12509:35:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12509:35:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11151:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11151:95:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11151:95:0;-1:-1:-1;;;;;11151:95:0;;:::i;:::-;;9158:354;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9158:354:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9158:354:0;-1:-1:-1;;;;;9158:354:0;;:::i;14401:325::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14401:325:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14401:325:0;;;;;;;;;;;;:::i;28503:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28503:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28503:123:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10856:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10856:107:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10856:107:0;-1:-1:-1;;;;;10856:107:0;;:::i;:::-;;;;;;;;;;;;;;;;;;15345:171;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15345:171:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15345:171:0;;;;;;-1:-1:-1;;;;;15345:171:0;;:::i;12553:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12553:20:0;;;:::i;28634:100::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28634:100:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28634:100:0;;:::i;15963:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15963:96:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15963:96:0;;:::i;13795:206::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13795:206:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13795:206:0;;;;;;;:::i;11620:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11620:45:0;;;:::i;:::-;;;;-1:-1:-1;;;;;11620:45:0;;;;;;;;;;;;;;15524:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15524:85:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15524:85:0;;:::i;12580:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12580:25:0;;;:::i;14290:101::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14290:101:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14290:101:0;;:::i;28372:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28372:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28372:123:0;;;;;;;:::i;10971:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10971:89:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10971:89:0;-1:-1:-1;;;;;10971:89:0;;:::i;7967:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7967:140:0;;;:::i;16855:350::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16855:350:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16855:350:0;;;;;;-1:-1:-1;;;;;16855:350:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16855:350:0;;;;;;;;;;;;;;;;;14177:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14177:105:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14177:105:0;;:::i;11068:75::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11068:75:0;;;:::i;15738:213::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15738:213:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15738:213:0;-1:-1:-1;;;;;15738:213:0;;:::i;7156:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7156:79:0;;;:::i;7522:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7522:92:0;;;:::i;16703:144::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16703:144:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16703:144:0;;:::i;14998:215::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14998:215:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14998:215:0;;;;;;-1:-1:-1;;;;;14998:215:0;;:::i;16067:114::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16067:114:0;;;:::i;14734:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14734:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14734:129:0;;;;;;-1:-1:-1;;;;;14734:129:0;;:::i;12641:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12641:20:0;;;:::i;15221:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15221:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15221:116:0;;:::i;17211:146::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17211:146:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17211:146:0;;:::i;15617:113::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15617:113:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15617:113:0;;:::i;12612:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12612:22:0;;;:::i;16310:387::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16310:387:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16310:387:0;;;;;;-1:-1:-1;;;;;16310:387:0;;:::i;13383:404::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13383:404:0;;;;;;;:::i;16189:113::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16189:113:0;;;:::i;14009:160::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14009:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14009:160:0;;;;;;;:::i;8262:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8262:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8262:109:0;-1:-1:-1;;;;;8262:109:0;;:::i;14869:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14869:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14869:119:0;;:::i;12509:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11151:95::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;11217:21;11230:7;11217:12;:21::i;:::-;11151:95;:::o;9158:354::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;9224:21;9264:7;:5;:7::i;:::-;9224:49;-1:-1:-1;;;;;;9290:28:0;;9286:119;;9335:37;;-1:-1:-1;;;;;9335:14:0;;;9358:4;9350:21;9335:37;;;;;;;;;9350:21;9335:14;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9335:37:0;9387:7;;;9286:119;9433:30;;;-1:-1:-1;;;9433:30:0;;9457:4;9433:30;;;;;;9415:15;;-1:-1:-1;;;;;9433:15:0;;;;;:30;;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;9433:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9433:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9433:30:0;9474;;;-1:-1:-1;;;9474:30:0;;-1:-1:-1;;;;;9474:30:0;;;;;;;;;;;;;;;9433;;-1:-1:-1;9474:14:0;;;;;;:30;;;;;9433;;9474;;;;;;;;-1:-1:-1;9474:14:0;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;9474:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9474:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;9158:354:0;:::o;14401:325::-;10808:19;10816:10;10808:7;:19::i;:::-;10800:28;;;;;;14510:12;;;;:5;:12;;;;;14492:46;;14524:6;14532:5;14492:17;:46::i;:::-;14553:12;;;;:5;:12;;;;;:20;;;;;14549:170;;;14612:12;;;;:5;:12;;;;;;;;;:16;;;;14630:26;;;;14658:27;;;;14687:19;;;;;14595:112;;;;;;;;;;;;;;;;;;;;;;14605:5;;14595:112;;;;;;;;;;14549:170;14401:325;;;:::o;28503:123::-;28565:4;28600:12;;;:5;:12;;;;;28589:29;;28614:3;28589:10;:29::i;:::-;28582:36;;28503:123;;;;;:::o;10856:107::-;10911:4;10935:20;:7;10947;10935:20;:11;:20;:::i;:::-;10928:27;;10856:107;;;;:::o;15345:171::-;15416:11;15440:12;;;:5;:12;;;;;15430:30;;15454:5;15430:9;:30::i;:::-;15416:44;;15487:5;-1:-1:-1;;;;;15476:32:0;;15494:5;15501:6;15476:32;;;;;;;;;;;;;;;;;;;;;;;;15345:171;;;:::o;12553:20::-;;;;:::o;28634:100::-;28682:4;28713:12;;;:5;:12;;;;;28706:20;;:6;:20::i;15963:96::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;16031:8;:20;15963:96::o;13795:206::-;10808:19;10816:10;10808:7;:19::i;:::-;10800:28;;;;;;13862:25;13875:5;13882:4;13862:12;:25::i;:::-;13898:23;13915:5;13898:16;:23::i;:::-;13932:21;13947:5;13932:14;:21::i;:::-;13964:29;13981:5;13988:1;13991;13964:16;:29::i;:::-;13795:206;;:::o;11620:45::-;;;-1:-1:-1;;;;;11620:45:0;;:::o;15524:85::-;15574:27;15583:5;15590:10;15574:8;:27::i;12580:25::-;;;;:::o;14290:101::-;10808:19;10816:10;10808:7;:19::i;:::-;10800:28;;;;;;14370:12;;;;:5;:12;;;;;14354:29;;:15;:29::i;28372:123::-;28434:4;28466:12;;;:5;:12;;;;;28458:29;;28480:6;28458:7;:29::i;10971:89::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;11034:18;11044:7;11034:9;:18::i;7967:140::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;8066:1;8050:6;;8029:40;;-1:-1:-1;;;;;8050:6:0;;;;8029:40;;8066:1;;8029:40;8097:1;8080:19;;-1:-1:-1;;;;;;8080:19:0;;;7967:140::o;16855:350::-;16985:12;;;;:5;:12;;;;;;;;-1:-1:-1;;;;;16985:28:0;;;;:21;;:28;;;;;;:35;16974:47;;;;;;;;;;;;;;;;16930:21;;16974:47;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;16974:47:0;-1:-1:-1;16964:57:0;-1:-1:-1;17037:6:0;17032:166;17053:12;;;;:5;:12;;;;;;;;-1:-1:-1;;;;;17053:28:0;;;;:21;;:28;;;;;:35;17049:39;;17032:166;;;17123:12;;;;:5;:12;;;;;;;;-1:-1:-1;;;;;17146:28:0;;;;:21;;;:28;;;;;:31;;17123:21;;;;;:12;17175:1;;17146:31;;;;;;;;;;;;;;17123:56;;;;;;;;;;;:63;17180:5;-1:-1:-1;;;;;17123:63:0;-1:-1:-1;;;;;17123:63:0;;;;;;;;;;;;;17110:7;17118:1;17110:10;;;;;;;;;;;;;;;;;:76;17090:3;;17032:166;;;;16855:350;;;;:::o;14177:105::-;10808:19;10816:10;10808:7;:19::i;:::-;10800:28;;;;;;14261:12;;;;:5;:12;;;;;14243:31;;:17;:31::i;11068:75::-;11111:24;11124:10;11111:12;:24::i;:::-;11068:75::o;15738:213::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15846:37:0;;15838:46;;;;;;15895:22;:48;;-1:-1:-1;;;;;;15895:48:0;-1:-1:-1;;;;;15895:48:0;;;;;;;;;;15738:213::o;7156:79::-;7194:7;7221:6;-1:-1:-1;;;;;7221:6:0;7156:79;:::o;7522:92::-;7562:4;7600:6;-1:-1:-1;;;;;7600:6:0;7586:10;:20;;7522:92::o;16703:144::-;16764:20;16804:35;16821:5;16828:10;16804:16;:35::i;14998:215::-;15066:4;15087:12;;;:5;:12;;;;;;;;-1:-1:-1;;;;;15087:28:0;;;;:21;;:28;;;;;;;;15083:69;;;-1:-1:-1;15139:1:0;15132:8;;15083:69;15185:12;;;;:5;:12;;;;;15169:36;;15199:5;15169:15;:36::i;16067:114::-;16116:4;16161:8;;16147:10;;16141:3;:16;16140:29;;;;;;16172:1;16140:33;16133:40;;16067:114;:::o;14734:129::-;14804:4;14827:12;;;:5;:12;;;;;;;;-1:-1:-1;;;;;14827:28:0;;;;:21;;:28;;;;;;;;14734:129;;;;:::o;12641:20::-;;;;:::o;15221:116::-;15276:4;15300:29;15311:5;15318:10;15300;:29::i;17211:146::-;17273:20;17313:36;17331:5;17338:10;17313:17;:36::i;15617:113::-;15707:8;;15693:10;;15707:14;;15693:29;;15617:113::o;12612:22::-;;;;:::o;16310:387::-;16661:12;;;;:5;:12;;;;;;;;-1:-1:-1;;;;;16661:28:0;;;;:21;;:28;;;;;;16654:35;;;;;;;;;;;;;;;;;16384:20;;16654:35;;;16661:28;16654:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16310:387;;;;:::o;13383:404::-;13464:1;13457:4;:8;13449:17;;;;;;13485:8;;:13;:53;;13530:8;;13517:9;:21;13485:53;;;13513:1;13501:9;:13;13485:53;13477:62;;;;;;13554:10;13550:69;;13589:18;:16;:18::i;:::-;13581:26;;13550:69;13664:13;;13643:18;13655:5;13643:11;:18::i;:::-;:34;13637:3;:40;13629:49;;;;;;13700:12;;;;:5;:12;;;;;13691:28;;13714:4;13691:8;:28::i;:::-;13737:42;;;;;;13769:9;13737:42;;;;;;13756:5;;13744:10;;13737:42;;;;;;;;;;;13383:404;;:::o;16189:113::-;16237:4;16282:8;;16268:10;;16262:3;:16;16261:29;;;;;;16293:1;16261:33;16254:40;;16189:113;:::o;14009:160::-;10808:19;10816:10;10808:7;:19::i;:::-;10800:28;;;;;;14142:12;;;;:5;:12;;;;;14128:33;;14156:4;14128:13;:33::i;8262:109::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;8335:28;8354:8;8335:18;:28::i;14869:119::-;14926:4;14949:31;14962:5;14969:10;14949:12;:31::i;11381:127::-;11440:23;:7;11455;11440:23;:14;:23;:::i;:::-;11479:21;;-1:-1:-1;;;;;11479:21:0;;;;;;;;11381:127;:::o;25045:1669::-;25136:9;25156:15;25206:4;:17;;;25186:4;:16;;;:37;25182:1187;;;25247:34;25258:4;25264;:16;;;25247:10;:34::i;:::-;25240:41;;25317:25;25331:4;25337;25317:13;:25::i;:::-;25296:18;;;:46;25357:12;;;:19;;-1:-1:-1;;25357:19:0;25372:4;25357:19;;;25182:1187;;;25427:1;25418:6;:10;:38;;25440:4;:16;;;25418:38;;;25431:6;25418:38;25409:47;;25487:1;25479:5;:9;:37;;25499:4;:17;;;25479:37;;;25491:5;25479:37;25471:45;-1:-1:-1;25540:6:0;25531;25594:644;25605:5;25600:1;:10;25594:644;;25640:4;:11;;;25635:1;:16;25631:99;;;25676:3;;;;;25702:8;;25631:99;25755:19;25766:4;25772:1;25755:10;:19::i;:::-;25748:26;;25806:25;25820:4;25826;25806:13;:25::i;:::-;25793:38;-1:-1:-1;25866:29:0;:13;25793:38;25866:29;:17;:29;:::i;:::-;25850:45;;26027:6;26022:1;:11;;:40;;;;-1:-1:-1;26061:1:0;26037:15;;;;;;;;;;:21;;;:25;;26022:40;26018:115;;;26092:9;:15;;;;;;;;;;:21;;;26087:26;;;;;26018:115;26162:4;:17;;;26157:1;:22;26153:47;;26181:12;;;:19;;-1:-1:-1;;26181:19:0;26196:4;26181:19;;;26153:47;26219:3;;;;;25594:644;;;26323:18;;;:34;-1:-1:-1;25182:1187:0;26385:12;;;;;;26381:324;;;26442:18;;;;26428:11;;;;:32;26479:10;;26475:219;;26510:17;26530:14;:6;26541:2;26530:14;:10;:14;:::i;:::-;26510:34;-1:-1:-1;26590:24:0;:6;26510:34;26590:24;:10;:24;:::i;:::-;26573:14;;;:41;26633:22;;:45;;-1:-1:-1;;;;;26633:22:0;;;;:45;;;;;26665:12;;26633:22;:45;:22;:45;26665:12;26633:22;:45;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26633:45:0;26475:219;;26381:324;25045:1669;;;;;:::o;30116:1060::-;30188:10;30222:12;;;;;;;;;;:18;;;30188:10;30316;;;30312:51;;;30350:1;30343:8;;;;;;30312:51;30373:12;30416;;;;;;;;;;;30438:4;30416:27;;;;;;;;30476:14;;;;;;;;;;30386:10;;;;30416:27;30501:666;30527:9;30537:24;;;;;;;;;;;30589:14;;;;30537:24;30589:16;30624:7;;30620:148;;30665:9;:15;;;;;;;;;;:21;;;;-1:-1:-1;30620:148:0;;;30751:1;30740:12;;30620:148;30794:10;30786:7;:18;30782:374;;;30861:9;:15;;;;;;;;;;30829:4;;-1:-1:-1;30861:15:0;;-1:-1:-1;30829:4:0;;30782:374;;;30934:7;30923:10;:18;30915:7;:26;30911:245;;;30968:3;30961:10;;;;;;;;;;;30911:245;31047:4;31029:17;:23;;;;;;;;;;;;31080:14;;;;;;;;;31122:18;;;31113:27;;;;31029:23;;-1:-1:-1;30911:245:0;30501:666;;;;10315:165;10387:4;-1:-1:-1;;;;;10412:21:0;;10404:30;;;;;;-1:-1:-1;;;;;;10452:20:0;:11;:20;;;;;;;;;;;;;;;10315:165::o;26976:321::-;27086:12;;;;27054:11;;27086:12;;27078:21;;;;;;-1:-1:-1;;;;;27119:19:0;;;;;;:13;;;:19;;;;;;;;27118:20;27110:29;;;;;;-1:-1:-1;;;;;27150:19:0;;;;;;:13;;;:19;;;;;:26;;-1:-1:-1;;27150:26:0;27172:4;27150:26;;;27196:27;27150:4;27164;27196:15;:27::i;:::-;27187:36;;27253:1;27244:6;:10;27236:19;;;;;;27266:21;;-1:-1:-1;;;;;27266:13:0;;;:21;;;;;27280:6;;27266:21;;;;27280:6;27266:13;:21;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;31186:212:0;31244:4;31278:12;;;;;;;;;;;31344:4;31330:19;;;;;;;;;31320:30;;;;;;;;31379:11;;;31368:10;;;;;:22;;31186:212::o;23564:1290::-;23672:18;;;;23661:8;;;;23720:19;;;;23626:4;;23661:29;;;23720:30;;23765:25;;;23761:42;;;23799:4;23792:11;;;;;;23761:42;23816:9;23857:11;23844:10;:24;23840:983;;;23885:12;23915:1;23900:12;23907:4;23900:6;:12::i;:::-;:16;23885:31;;23956:7;23935:4;:17;;;:28;23931:45;;;23972:4;23965:11;;;;;;;;23931:45;24015:4;:11;;;23995:4;:16;;;:31;23991:48;;24035:4;24028:11;;;;;;;;23991:48;24169:39;24180:4;24186;:17;;;24206:1;24186:21;24169:10;:39::i;:::-;24162:46;;24244:4;:8;;;24237:4;:15;24223:29;;24269:57;24281:4;24287:10;24299:11;24312:4;24318:7;24269:11;:57::i;:::-;23840:983;;;;24394:18;;;;24384:9;:29;;;;;;;;;;:35;;;24365:16;;;;:54;24361:76;;24433:4;24426:11;;;;;;;24361:76;24477:4;:11;;;24456:4;:17;;;:32;24452:49;;24497:4;24490:11;;;;;;;24452:49;24628:76;24639:4;24702:1;24664:4;:9;;:29;24674:4;:18;;;24664:29;;;;;;;;;;;:35;;;24645:4;:16;;;:54;:58;24628:10;:76::i;:::-;24621:83;;24743:4;24732;:8;;;:15;24719:28;;24764:47;24775:4;24781:10;24793:11;24806:4;24764:10;:47::i;:::-;-1:-1:-1;24842:4:0;;23564:1290;-1:-1:-1;;;;23564:1290:0:o;29223:883::-;29295:4;29312:6;29321:12;29328:4;29321:6;:12::i;:::-;29312:21;-1:-1:-1;29348:6:0;29344:20;;29363:1;29356:8;;;;;29344:20;29385:9;:17;;;;;;;;;;:23;;;29381:42;;29422:1;29415:8;;;;;29381:42;29442:11;29456:19;29467:4;29473:1;29456:10;:19::i;:::-;29442:33;;29486:10;29499:21;29510:4;29518:1;29516;:3;29499:10;:21::i;:::-;29486:34;;29588:5;29579:6;:14;:33;;;;29606:6;29597;:15;29579:33;29575:47;;;29621:1;29614:8;;;;;;;29575:47;29653:6;29643;:16;29639:30;;;29668:1;29661:8;;;;;;;29639:30;29694:5;29684:6;:15;29680:33;;;-1:-1:-1;;;;29708:5:0;;-1:-1:-1;29701:12:0;;29680:33;29778:8;-1:-1:-1;;29812:3:0;;29826:252;29839:3;29833;:9;29826:252;;;29887:1;29871:9;;;29883:1;29871:13;29870:18;29859:8;29915:21;29926:4;29870:18;29915:10;:21::i;:::-;29903:33;;29963:6;29955:4;:14;29951:116;;29996:3;29990:9;;29951:116;;;30050:1;30046:3;:5;30040:11;;29951:116;29826:252;;;;;-1:-1:-1;30095:3:0;29223:883;-1:-1:-1;;;;;;29223:883:0:o;11254:119::-;11310:20;:7;11322;11310:20;:11;:20;:::i;:::-;11346:19;;-1:-1:-1;;;;;11346:19:0;;;;;;;;11254:119;:::o;17991:2986::-;18055:4;18091:1;18080:4;:8;;;:12;18072:21;;;;;;18139:8;;;;18157:1;18129:19;;;;;;;;;;:25;;;:29;18125:253;;-1:-1:-1;18194:11:0;;;;18175:16;;;:30;;;18220:17;;;:31;18287:8;;;;;18266:18;;;:29;;;18310:19;;;:30;18355:11;;18125:253;18390:12;18420:1;18405:12;18412:4;18405:6;:12::i;:::-;:16;18390:31;;18448:2;18438:7;:12;18434:2052;;;18654:11;;;;:16;;:42;;;18689:7;18674:4;:11;;;:22;18654:42;18650:1134;;;18736:11;;;;:16;:34;;18769:1;18759:7;:11;18736:34;;;18755:1;18736:34;18717:16;;;:53;;;18789:17;;;:36;18650:1134;;;18866:12;18882:33;18893:4;18913:1;18899:4;:11;;;:15;18882:10;:33::i;:::-;18866:49;;18934:13;18950:33;18961:4;18967;:11;;;18981:1;18967:15;18950:10;:33::i;:::-;19020:8;;;;18934:49;;-1:-1:-1;19020:18:0;;;;19076:19;;19120:25;;;19116:166;;;19189:11;;;;-1:-1:-1;;19189:15:0;;19170:16;;;:34;19203:1;19247:15;19227:17;;;:35;19116:166;19319:11;19306:10;:24;19302:165;;;19374:11;;;;19388:1;19374:15;19355:16;;;:34;;;19412:17;;;:35;19302:165;19504:11;19491:10;:24;19487:282;;;19676:11;;;;-1:-1:-1;;19676:15:0;19657:16;;;:34;;;19714:17;;;:35;19487:282;18650:1134;;;;;18434:2052;;;19816:17;19836:31;19863:3;19836:22;19855:2;19836:14;:7;19848:1;19836:14;:11;:14;:::i;:::-;:18;:22;:18;:22;:::i;:::-;:26;:31;:26;:31;:::i;:::-;19816:51;-1:-1:-1;19882:16:0;19901:19;19816:51;19918:1;19901:19;:16;:19;:::i;:::-;19882:38;;19955:11;19941:4;:11;;;:25;19937:538;;;20006:1;19987:16;;;:20;20026:17;;;:51;;;19937:538;;;20150:7;20136:11;20122:4;:11;;;:25;:35;20118:342;;;20182:17;;;:27;;;20251:22;;;20232:16;;;:41;20118:342;;;20341:11;;;;:25;;;20322:16;;;:44;;;20409:31;;20389:17;;;:51;20118:342;18434:2052;;;20519:34;20530:4;20536;:16;;;20519:10;:34::i;:::-;20498:18;;;:55;20603:17;;;;20586:35;;20498:4;;20586:10;:35::i;:::-;20564:19;;;:57;20803:18;;;;20789:33;;20564:4;;20789:7;:33::i;:::-;20770:16;;;:52;20867:19;;;;20853:34;;20770:4;;20853:7;:34::i;:::-;20833:17;;;:54;-1:-1:-1;20965:4:0;;-1:-1:-1;17991:2986:0;;;:::o;27305:480::-;27386:11;27418:26;27433:4;27439;27418:14;:26::i;:::-;27409:35;;27468:1;27459:6;:10;:32;;;;;27490:1;27473:4;:14;;;:18;27459:32;27455:323;;;27704:62;27715:50;27746:4;:18;;;27715:26;27734:6;27715:4;:14;;;:18;;:26;;;;:::i;:50::-;27704:6;;:62;:10;:62;:::i;17395:406::-;17467:19;;;;:13;;;:19;;;;;;;;17487:10;17467:31;;;;;;;;17463:187;;17520:19;17528:4;17534;17520:7;:19::i;:::-;17554:16;;;;:10;;;:16;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;17554:33:0;;;;;;;;;-1:-1:-1;;;;;;17554:33:0;17576:10;17554:33;;;;;;17602:25;;:13;;;:25;;;;;27:10:-1;;23:18;;;45:23;;17602:36:0;;;;;;;;17463:187;17676:11;;;;:26;;17692:9;17676:26;:15;:26;:::i;:::-;17662:11;;;:40;17747:19;;;;:13;;;:19;;;;;;;;17767:10;17747:31;;;;;;;;:46;;17783:9;17747:46;:35;:46;:::i;:::-;17713:19;;;;:13;;;;:19;;;;;;;;17733:10;17713:31;;;;;;;:80;17395:406::o;17811:170::-;17884:19;17892:4;17898;17884:7;:19::i;:::-;17914:8;;;:15;;;17954:19;17914:4;17925;17954:7;:19::i;:::-;17940:4;:11;;:33;;;;17811:170;;:::o;8477:229::-;-1:-1:-1;;;;;8551:22:0;;8543:73;;;;-1:-1:-1;;;8543:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8653:6;;;8632:38;;-1:-1:-1;;;;;8632:38:0;;;;8653:6;;;8632:38;;;8681:6;:17;;-1:-1:-1;;;;;;8681:17:0;-1:-1:-1;;;;;8681:17:0;;;;;;;;;;8477:229::o;10032:189::-;-1:-1:-1;;;;;10112:21:0;;10104:30;;;;;;10153:18;10157:4;10163:7;10153:3;:18::i;:::-;10145:27;;;;;;-1:-1:-1;;;;;10185:20:0;10208:5;10185:20;;;;;;;;;;;:28;;-1:-1:-1;;10185:28:0;;;10032:189::o;26722:246::-;26798:11;;26822:139;26843:16;;;;:10;;;:16;;;;;:23;26839:27;;26822:139;;;26908:19;;;;:13;;;:19;;;;;;;;26928:10;;;:16;;;;;:19;;26897:52;;26908:19;26928:16;26945:1;;26928:19;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26928:19:0;26908:40;;;;;;;;;;;;;26897:6;;:52;:10;:52;:::i;:::-;26888:61;-1:-1:-1;26868:3:0;;26822:139;;2854:150;2912:7;2944:5;;;2968:6;;;;2960:15;;;;;1489:303;1547:7;1646:1;1642;:5;1634:14;;;;;;1659:9;1675:1;1671;:5;;;;;;;1489:303;-1:-1:-1;;;;1489:303:0:o;2351:150::-;2409:7;2442:1;2437;:6;;2429:15;;;;;;-1:-1:-1;2467:5:0;;;2351:150::o;20987:1246::-;21107:10;21120:9;21189:19;;;;21239:17;;;;21288:18;;;;21336:16;;;;21107:22;;-1:-1:-1;21140:12:0;;21363:685;21383:11;21370:10;:24;21363:685;;;21430:4;21413:21;;21483:4;:9;;:15;21493:4;21483:15;;;;;;;;;;;:21;;;21464:12;21479:1;21464:16;:40;21449:55;;21537:35;21548:4;21554:13;21570:1;21554:17;21537:10;:35::i;:::-;21521:51;;21601:28;21609:4;21615:13;21601:7;:28::i;:::-;21587:42;;21666:7;21650:12;:23;21646:34;;;21675:5;;21646:34;21714:4;:11;;;21699;:26;21695:37;;21727:5;;21695:37;21756:34;21767:4;21773:12;21788:1;21773:16;21756:10;:34::i;:::-;21818:8;;;;:24;;;;-1:-1:-1;21871:15:0;;;-1:-1:-1;21749:41:0;-1:-1:-1;21907:12:0;21903:89;;21958:9;21950:5;:17;21970:6;21950:26;21940:36;;21903:89;22022:7;22010:9;:19;22006:30;;;22031:5;;22006:30;21363:685;;;22060:19;;;:36;;;;22107:17;;;:32;;;;22150:18;;;:34;22195:16;;;;:30;;;;-1:-1:-1;;;;;;20987:1246:0:o;22243:1313::-;22348:10;22361:9;22430:19;;;;22480:17;;;;22529:18;;;;22577:16;;;;22348:22;;-1:-1:-1;22381:12:0;;22604:767;22625:10;22611:11;:24;22604:767;;;22715:9;:24;;;;;;;;;;;:30;;;;;22796:25;;;;;;;:31;;;;-1:-1:-1;;22781:46:0;;:50;;;22715:24;;-1:-1:-1;22701:44:0;;:48;22863:30;22715:24;22781:50;22863:10;:30::i;:::-;22928:9;:24;;;;;;;;;;:30;;;22846:47;;-1:-1:-1;22914:44:0;;22910:60;;22965:5;;22910:60;23005:4;:11;;;22989:12;:27;22985:38;;23018:5;;22985:38;23078:9;:24;;;;;;;;;;:30;;;23047:66;;23078:24;;23064:44;;-1:-1:-1;;23064:48:0;23047:10;:66::i;:::-;23141:8;;;;:24;;;;-1:-1:-1;23194:15:0;;;-1:-1:-1;23040:73:0;-1:-1:-1;23230:12:0;23226:89;;23281:9;23273:5;:17;23293:6;23273:26;23263:36;;23226:89;23345:7;23333:9;:19;23329:30;;;23354:5;;23329:30;22604:767;;;23383:19;;;:36;;;;23430:17;;;:32;;;;23473:18;;;:34;23518:16;;;;:30;;;;-1:-1:-1;;;;;22243:1313:0:o;9767:186::-;-1:-1:-1;;;;;9844:21:0;;9836:30;;;;;;9886:18;9890:4;9896:7;9886:3;:18::i;:::-;9885:19;9877:28;;;;;;-1:-1:-1;;;;;9918:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;9918:27:0;9941:4;9918:27;;;9767:186::o;284:433::-;342:7;586:6;582:47;;-1:-1:-1;616:1:0;609:8;;582:47;653:5;;;657:1;653;:5;:1;677:5;;;;;:10;669:19;;;;;27793:428;27873:11;;27917:297;-1:-1:-1;;;;;27938:19:0;;;;;;:13;;;:19;;;;;:26;27934:30;;27917:297;;;28016:18;;;;-1:-1:-1;;;;;27990:19:0;;;;;;:13;;;:19;;;;;:22;;28010:1;;27990:22;;;;;;;;;;;;;;:44;;:110;;;;-1:-1:-1;28081:19:0;;;;-1:-1:-1;;;;;28055:19:0;;;;;;:13;;;:19;;;;;:22;;28075:1;;28055:22;;;;;;;;;;;;;;:45;;27990:110;27986:217;;;-1:-1:-1;;;;;28158:19:0;;28144:37;28158:19;;;:13;;;:19;;;;;:22;;28144:13;;;;:37;28158:19;28178:1;;28158:22;;;;;;;;;;;;;;28144:37;;;;;;;;;;;:43;28182:4;-1:-1:-1;;;;;28144:43:0;-1:-1:-1;;;;;28144:43:0;;;;;;;;;;;;;28134:53;;;;27986:217;27966:3;;27917:297;;28882:207;28955:9;28951:131;;28979:9;:17;;;;;;;;;;:23;;:25;;;;;;28951:131;;;29034:36;29048:4;29054:1;29057:4;29063:6;31408:818;31506:17;31524:18;;;;;;;;;;;31566:19;;;;;;;;;;;;;31600:10;31596:623;;31626:19;;;:13;:19;;;;;;;;;;;:25;;;31685:16;;;;;;;;;31716:12;;;;:20;;;31751:10;;;:15;;-1:-1:-1;;31751:15:0;;;;;;;31781:12;;;:14;;;31810:11;;;:13;;;;31838:26;31685:4;31646:5;31838:13;:26::i;:::-;31879:29;31896:4;31902:5;31879:16;:29::i;:::-;31596:623;;;;31948:5;31939:7;:14;31935:284;;;31969:9;:18;;;;;;;;;;:24;;:26;;;;;;32010:25;31969:4;32029:5;32010:12;:25::i;:::-;32050:26;32064:4;32070:5;32050:13;:26::i;:::-;31935:284;;;32132:16;;;;32164:43;32178:4;32141:7;32132:16;:5;32164:13;:43::i;:::-;31935:284;31408:818;;;;;;:::o;32454:243::-;32527:11;32539:16;;;;;;;;;;:23;;;32573:117;32580:9;;32573:117;;32606:26;32619:4;32625:6;32606:12;:26::i;:::-;32654:9;:17;;;;;;;;;;:24;;;32573:117;;32707:722;32785:28;32799:4;32805:7;32785:13;:28::i;:::-;32824:14;32839:18;;;;;;;;;;32881:8;;;;32904:10;;32900:522;;32931:8;32940:29;32955:4;32961:7;32940:14;:29::i;:::-;32994:6;;;;32931:38;;-1:-1:-1;32994:6:0;;32984:9;33038:77;;;;-1:-1:-1;;;33038:77:0;;;-1:-1:-1;33114:1:0;33038:77;33142:4;33147:1;33142:6;33134:4;:14;33130:280;;;33212:4;-1:-1:-1;;33207:9:0;33173:29;33188:4;33194:7;33173:14;:29::i;:::-;:44;33169:97;;;33240:26;33247:4;33253:7;33261:4;33240:6;:26::i;:::-;33285:27;33292:4;33298:7;33307:4;33306:5;33285:6;:27::i;:::-;33130:280;;;33351:9;;33347:63;;33379:31;33396:4;33402:7;33379:16;:31::i;32900:522::-;32707:722;;;;:::o;32236:208::-;32308:14;32323:16;;;;;;;;;;;32429:7;;;;32416:4;32405:16;;;;;;;;;;32395:27;;;;;;;;:33;;;;;32370:17;;;;;;;;;;32360:28;;;;;;;;;;:34;;;32358:70;;;:78;;;;;;32350:7;;:86;32236:208::o;33439:366::-;33512:14;33527:16;;;;;;;;;;;33581:17;;;;;;;;;;33571:28;;;;;;;;:35;;;;;33581:17;33645:16;;;;;;;;;33635:27;;;;;;;;;;:34;;33684:24;;;33680:117;;;33744:1;33732:13;;33723:8;;;:22;33680:117;;;33796:1;33783:14;;33774:8;;;:23;33439:366;;;;;:::o;33815:233::-;33892:6;33926:16;;;;;;;;;;;34026:4;34015:16;;;;;;;;;34005:27;;;;;;;;:34;;;;;33974:17;;;;;;;;;;33964:28;;;;;;;;:35;;33960:80;33815:233;;;;:::o;34058:851::-;34133:14;34149:3;34148:4;34133:19;;34163:14;34178:4;:9;;:16;34188:5;34178:16;;;;;;;;;;;34163:31;;34205:9;34215:1;:6;;;;;;;;;;;;34205:16;;34232:11;34244:1;:8;;;34232:20;;34263:14;34278:1;:10;;:21;34289:9;34278:21;;;;;;;;;;;;;;;;34263:36;;34310:18;34329:4;:9;;:20;34339:9;34329:20;;;;;;;;;;;34310:39;;34360:11;34372:5;:14;;:19;34387:3;34372:19;;;;;;;;;;;;;;;;34360:31;;34402:14;34417:4;:9;;:17;34427:6;34417:17;;;;;;;;;;;34402:32;;34445:14;34460:4;:9;;:17;34470:6;34460:17;;;;;;;;;;;34445:32;;34505:9;34488:1;:10;;:16;34499:4;34488:16;;;;;;;;;;;;;;;:26;;;;34536:4;34525:5;:10;;;:15;;;;;;;;;;;;;;;;;;34564:6;34551:5;:12;;:19;;;;34601:5;34581;:14;;:19;34596:3;34581:19;;;;;;;;;;;;;;;:25;;;;34626:9;34617:1;:8;;:18;;;;34653:3;34646:1;:6;;;:10;;;;;;;;;;;;;;;;;;34689:6;34667:1;:10;;:21;34678:9;34667:21;;;;;;;;;;;;;;;:28;;;;34715:5;34706:1;:8;;:14;;;;34738:9;34731:1;:6;;;:16;;;;;;;;;;;;;;;;;;34758:26;34772:4;34778:5;34758:13;:26::i;:::-;34795:30;34809:4;34815:9;34795:13;:30::i;:::-;34836:25;34849:4;34855:5;34836:12;:25::i;:::-;34872:29;34885:4;34891:9;34872:12;:29::i;:::-;34058:851;;;;;;;;;;;;:::o

Swarm Source

bzzr://61ed0d9d01233320fabbd0efe0cf8009bfab38d485d6148f33c25a12271ffc31

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.