ETH Price: $3,296.29 (-1.32%)

Contract

0xbCA23d091AF20516814f4431cF75ac590d17BCCE
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Reward And...119377842021-02-27 6:36:171394 days ago1614407777IN
0xbCA23d09...90d17BCCE
0 ETH0.0018731275
Claim Reward And...119377842021-02-27 6:36:171394 days ago1614407777IN
0xbCA23d09...90d17BCCE
0 ETH0.0092525275
Claim Reward And...117209852021-01-24 22:15:041428 days ago1611526504IN
0xbCA23d09...90d17BCCE
0 ETH0.0065020260
Claim Reward And...117206222021-01-24 20:58:111428 days ago1611521891IN
0xbCA23d09...90d17BCCE
0 ETH0.0065008260
Claim Reward And...117206082021-01-24 20:56:181428 days ago1611521778IN
0xbCA23d09...90d17BCCE
0 ETH0.0065020260
Claim Reward And...116243572021-01-10 2:27:431443 days ago1610245663IN
0xbCA23d09...90d17BCCE
0 ETH0.0059601855
Claim Reward And...116241522021-01-10 1:41:111443 days ago1610242871IN
0xbCA23d09...90d17BCCE
0 ETH0.0074759469
Claim Reward And...116176852021-01-09 1:37:431444 days ago1610156263IN
0xbCA23d09...90d17BCCE
0 ETH0.0015109860.5
Claim Reward And...116176852021-01-09 1:37:431444 days ago1610156263IN
0xbCA23d09...90d17BCCE
0 ETH0.0067187562
Claim Reward And...116028342021-01-06 19:03:311446 days ago1609959811IN
0xbCA23d09...90d17BCCE
0 ETH0.0075856970
Select Winner116013442021-01-06 13:41:501446 days ago1609940510IN
0xbCA23d09...90d17BCCE
0 ETH0.01450783120.36000148
Fetch Last Day P...116013332021-01-06 13:38:251446 days ago1609940305IN
0xbCA23d09...90d17BCCE
0 ETH0.03439204118.00000145
Buy Tickets115947792021-01-05 13:28:001447 days ago1609853280IN
0xbCA23d09...90d17BCCE
0 ETH0.0051317567.67
Buy Tickets115941562021-01-05 11:11:031447 days ago1609845063IN
0xbCA23d09...90d17BCCE
0 ETH0.0110052100
Buy Tickets115935142021-01-05 8:44:371447 days ago1609836277IN
0xbCA23d09...90d17BCCE
0 ETH0.009879179
Claim Reward And...115929642021-01-05 6:44:291447 days ago1609829069IN
0xbCA23d09...90d17BCCE
0 ETH0.01441015133
Claim Reward And...115928282021-01-05 6:12:441448 days ago1609827164IN
0xbCA23d09...90d17BCCE
0 ETH0.0107283399
Buy Tickets115925332021-01-05 5:15:361448 days ago1609823736IN
0xbCA23d09...90d17BCCE
0 ETH0.0093796575
Select Winner115888902021-01-04 15:47:251448 days ago1609775245IN
0xbCA23d09...90d17BCCE
0 ETH0.01217423101.00000145
Fetch Last Day P...115888642021-01-04 15:41:271448 days ago1609774887IN
0xbCA23d09...90d17BCCE
0 ETH0.02946634101.00000145
Start War115882672021-01-04 13:34:451448 days ago1609767285IN
0xbCA23d09...90d17BCCE
0 ETH0.137567250
Switch House115754542021-01-02 14:06:491450 days ago1609596409IN
0xbCA23d09...90d17BCCE
0 ETH0.01195352132.00000156
Buy Tickets115745522021-01-02 10:47:551450 days ago1609584475IN
0xbCA23d09...90d17BCCE
0 ETH0.0044034440
Buy Tickets115744922021-01-02 10:34:321450 days ago1609583672IN
0xbCA23d09...90d17BCCE
0 ETH0.0040719237
Buy Tickets115744282021-01-02 10:19:021450 days ago1609582742IN
0xbCA23d09...90d17BCCE
0 ETH0.0040719237
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DoTxGameContract

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv2 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-11
*/

pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;


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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot 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-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

interface IDoTxLib{
    function queryChainLinkPrice(string calldata _fsym, string calldata _fsymId, int256 _multiplicator, bytes4 _selector) external;
    function fetchFirstDayPrices(string calldata firstHouseTicker, string calldata secondHouseTicker, string calldata firstHouseId, string calldata secondHouseId, int256 multiplicator, uint256 warIndex) external;
    function fetchLastDayPrices(string calldata firstHouseTicker, string calldata currentSecondHouseTicker, string calldata firstHouseId, string calldata secondHouseId, int256 multiplicator, uint256 warIndex) external;
    function setDoTxGame(address gameAddress) external;
    function calculateHousePerf(int256 open, int256 close, int256 precision) external pure returns(int256);
    function calculatePercentage(uint256 amount, uint256 percentage, uint256 selecteWinnerPrecision) external pure returns(uint256);
    function calculateReward(uint256 dotxUserBalance, uint256 totalDoTxWinningHouse, uint256 totalDoTxLosingHouse) external view returns(uint256);
    function getWarIndex() external view returns(uint256);
}

contract Context {
    constructor () internal { }

    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; 
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;
    address private _owner2;
    address public dotxLibAddress;

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

    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }
    
    function owner2() public view returns (address) {
        return _owner2;
    }
    
    function setOwner2(address ownerAddress) public onlyOwner {
        _owner2 = ownerAddress;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender() || _owner2 == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    modifier onlyOwnerOrDoTxLib() {
        require(_owner == _msgSender() || dotxLibAddress == _msgSender() || _owner2 == _msgSender(), "Ownable: caller is not the owner or the lib");
        _;
    }
    
    modifier onlyDoTxLib() {
        require(dotxLibAddress == _msgSender(), "Ownable: caller is not the owner or the lib");
        _;
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @title DeFi Of Thrones Game Contract
 * @author Maxime Reynders - DefiOfThrones (https://github.com/DefiOfThrones/DOTTokenContract)
 */
contract DoTxGameContract is Ownable {
    using SafeMath for uint256;
    //Burn x% of the losing house tickets to Vitalik Address
    address constant public BURN_ADDRESS = 0x0000000000000000000000000000000000000001;

    //War struct, for each war a War variable will be created 
    struct War {
        uint256 startTime;
        uint256 duration;
        uint256 ticketPrice;
        uint256 purchasePeriod;
        bytes32 winningHouse;
        uint256 warFeesPercent;
        int256 multiplicator;
        uint256 burnPercentage;
        uint256 stakingPercentage;
        House firstHouse;
        House secondHouse;
        mapping(address => User) users;
    }
    //House struct, each war contains an map of 2 houses
    struct House {
        bytes32 houseTicker;
        bytes32 houseId;
        uint256 openPrice;
        uint256 closePrice;
        uint256 ticketsBought;
    }
    //User struct, each war contains a map of users
    //Each user can pledge allegiance to a house, buy tickets and switch house by paying fees (x% of its bought tickets)
    struct User {
        bytes32 houseTicker;
        uint256 ticketsBought;
        bool rewardClaimed;
    }
    
    //BURN STAKING INFORMATION
    struct BurnStake {
        uint256 firstHouseBurnDoTx;
        uint256 firstHouseStakingDoTx;
        uint256 secondHouseBurnDoTx;
        uint256 secondHouseStakingDoTx;
    }
    
    struct WarHouses {
        uint256 index;
        bytes32 firstHouse;
        bytes32 secondHouse;
        uint256 startTime;
        uint256 duration;
    }
    
    //DOTX Token Contract Address
    IDotTokenContract private dotxToken;
    //DOTX Game lib
    IDoTxLib private dotxLib;
    //x% of the losing house tickets are sent to the throne vault
    address stakingAddress = address(0x1c2206f3115CaC3750acCb899d18d50b774C2f21);
    
    //Map of Wars 
    mapping(uint256 => War) public wars;
    
    //GENERAL VARS
    //Total fees paid by users
    uint256 public totalFees;
    //Precision for the select winner calculation
    uint256 public selecteWinnerPrecision = 100000;
    
    uint256 public burnPercentage = 5;
    uint256 public stakingPercentage = 5;
    int256 public multiplicator = 10000;
    
    //EVENTS
    event WarStarted(uint256 warIndex);
    event TicketBought(uint256 warIndex, string house, uint256 valueInDoTx, address sender, string txType);
    event ClaimReward(uint256 warIndex, uint256 reward, uint256 balance, address sender, string txType);
    event SwitchHouse(uint256 warIndex, string from, string to, address sender, uint256 valueInDoTx);
    event openPriceFetched(uint256 warIndex);
    event closePriceFetched(uint256 warIndex);
    event StakeBurn(uint256 warIndex, uint256 burnValue, uint256 stakeValue);

    //MODIFIERS
    modifier onlyIfCurrentWarFinished(uint256 warIndex) {
        require(wars[warIndex].startTime.add(wars[warIndex].duration) <= now || warIndex == 0, "Current war not finished");
        _;
    }
    
    modifier onlyIfCurrentWarNotFinished(uint256 warIndex) {
        require(wars[warIndex].startTime.add(wars[warIndex].duration) > now, "Current war finished");
        _;
    }
    
    modifier onlyIfTicketsPurchasable(uint256 warIndex) {
        require(now.sub(wars[warIndex].startTime) < wars[warIndex].purchasePeriod,
        "Purchase tickets period ended");
        _;
    }
    
    modifier onlyIfPricesFetched(uint256 warIndex){
        require(wars[warIndex].firstHouse.openPrice != 0 && wars[warIndex].secondHouse.openPrice != 0, "Open prices not fetched");
        require(wars[warIndex].firstHouse.closePrice != 0 && wars[warIndex].secondHouse.closePrice != 0, "Close prices not fetched");
        _;
    }
    
    /**
     * Game contract constructor
     * Just pass the DoTx token contract address in parameter
     **/
    constructor(address dotxTokenAddress, address dotxLibAddr, bool setupAddressInLib) public {
        //Implement DoTx contract interface by providing address
        dotxToken = IDotTokenContract(dotxTokenAddress);
        
        setDoTxLib(dotxLibAddr, setupAddressInLib);
    }
    
    /**************************
            WAR METHODS
    ***************************/
    
    /**
     * Start a war only if the previous is finished
     * Parameters :
     * _firstHouseTicker First house ticker 
     * _secondHouseTicker Second house ticker 
     * _duration Duration of the war in seconds 
     * _ticketPrice Ticket price : Number of DoTx needed to buy a ticket (in wei precision)
     * purchasePeriod Number of seconds where the users can buy tickets from the starting date
     * _warFeesPercent How many % fees it will cost to user to switch house 
     * _warIndex Index of the war in mapping
     **/
    function startWar(string memory _firstHouseTicker, string memory _secondHouseTicker, string memory _firstHouseId, string memory _secondHouseId, 
    uint256 _duration, uint256 _ticketPrice, uint256 _purchasePeriod, uint256 _warFeesPercent, uint256 _warIndex) 
    public onlyOwner returns(bool) {
        //Just prevent to replace a war
        require(_warIndex > dotxLib.getWarIndex(), "War index already exists");
        
        //Create war  
        wars[_warIndex] = War(now, _duration, _ticketPrice, _purchasePeriod, 0, _warFeesPercent, multiplicator, burnPercentage, stakingPercentage, 
        House(stringToBytes32(_firstHouseTicker), stringToBytes32(_firstHouseId), 0, 0, 0),
        House(stringToBytes32(_secondHouseTicker), stringToBytes32(_secondHouseId), 0, 0, 0));
        
        emit WarStarted(_warIndex);
        
        fetchFirstDayPrices(_warIndex);
        
        return true;
    }
    
     /**
     * Buy ticket(s) for the current war - only if tickets are purchasable -> purchasePeriod
     * Parameters :
     * _houseTicker House ticker 
     * _numberOfTicket The number of tickets the user wants to buy
     **/
    function buyTickets(string memory _houseTicker, uint _numberOfTicket, uint256 warIndex) public onlyIfTicketsPurchasable(warIndex) {
        bytes32 houseTicker = stringToBytes32(_houseTicker);
        //Get house storage
        House storage userHouse = getHouseStg(houseTicker, warIndex);
        
        //Allow user to only buy tickets for one single House and the one passed in parameter
        bytes32 userHouseTicker = wars[warIndex].users[msg.sender].houseTicker;
        require(userHouse.houseTicker == houseTicker && (userHouseTicker == houseTicker || userHouseTicker == 0), "You can not buy tickets for the other house");

        wars[warIndex].users[msg.sender].houseTicker = userHouse.houseTicker;

        //Update user tickets
        wars[warIndex].users[msg.sender].ticketsBought = wars[warIndex].users[msg.sender].ticketsBought.add(_numberOfTicket);
        
        //Increase tickets bought for the house
        userHouse.ticketsBought = userHouse.ticketsBought.add(_numberOfTicket);
        
        uint256 valueInDoTx = wars[warIndex].ticketPrice.mul(_numberOfTicket);
        
        //Propagate TicketBought event
        emit TicketBought(warIndex, _houseTicker, valueInDoTx, msg.sender, "BOUGHT");
        
        //Transfer DoTx
        dotxToken.transferFrom(msg.sender, address(this), valueInDoTx);
    }
    
    /**
     * Switch house for the user - only if tickets are purchasable -> purchasePeriod
     * Parameters :
     * _fromHouseTicker Current house user pledged allegiance 
     * _toHouseTicker the house user wants to join
     **/
    function switchHouse(string memory _fromHouseTicker, string memory _toHouseTicker, uint256 warIndex) public onlyIfTicketsPurchasable(warIndex) {

        bytes32 fromHouseTicker = stringToBytes32(_fromHouseTicker);
        bytes32 toHouseTicker = stringToBytes32(_toHouseTicker);
        
        //Check if toHouse is in competition && different of fromHouse
        require(checkIfHouseInCompetition(toHouseTicker, warIndex) && fromHouseTicker != toHouseTicker, "House not in competition");
        //Check if user belongs to _fromHouse 
        require(wars[warIndex].users[msg.sender].houseTicker == fromHouseTicker, "User doesn't belong to fromHouse");
        
        House storage fromHouse = getHouseStg(fromHouseTicker, warIndex);
        House storage toHouse = getHouseStg(toHouseTicker, warIndex);
        
        //Switch house for user
        wars[warIndex].users[msg.sender].houseTicker = toHouseTicker;
        
        //Update fromHouse tickets
        uint256 ticketsBoughtByUser = wars[warIndex].users[msg.sender].ticketsBought;
        fromHouse.ticketsBought = fromHouse.ticketsBought.sub(ticketsBoughtByUser);
        
        //Update toHouse tickets
        toHouse.ticketsBought = toHouse.ticketsBought.add(ticketsBoughtByUser);
        
        //Get fees
        uint256 feesToBePaid = getFeesForSwitchHouse(msg.sender, warIndex);
        //Update total fees
        totalFees = totalFees.add(feesToBePaid);
        
        emit SwitchHouse(warIndex, _fromHouseTicker, _toHouseTicker, msg.sender, feesToBePaid);
        
        //Get fees from user wallet
        dotxToken.transferFrom(msg.sender, address(this), feesToBePaid);
    }
    
    /**
     * Allow users who pledged allegiance to the winning house to claim bought tickets + reward
     * Parameters :
     **/
    function claimRewardAndTickets(uint256 warIndex) public onlyIfCurrentWarFinished(warIndex) returns(bool) {
        //Only claim reward one times
        require(wars[warIndex].users[msg.sender].rewardClaimed == false, "You already claimed your reward");
        
        //Check if user belongs to winning house
        require(wars[warIndex].users[msg.sender].ticketsBought > 0 && wars[warIndex].users[msg.sender].houseTicker == wars[warIndex].winningHouse, "User doesn't belong to winning house");
        
        //Set rewardClaimed to true
        wars[warIndex].users[msg.sender].rewardClaimed = true;
        
        //DoTx in user balance (tickets bought) & reward
        uint256 reward = getCurrentReward(wars[warIndex].winningHouse, msg.sender, warIndex);
        uint256 balance = getUserDoTxInBalance(warIndex, msg.sender);
        
        dotxToken.transfer(msg.sender, reward.add(balance));
        
        emit ClaimReward(warIndex, reward, balance, msg.sender, "CLAIM");
    }

    
    /*****************************
            PRICES METHODS
    ******************************/
    
    /**
     * Fetch the prices for the 2 houses the first day for the current war
     **/
    function fetchFirstDayPrices(uint256 warIndex) public onlyOwner {
        require(wars[warIndex].firstHouse.openPrice == 0 && wars[warIndex].secondHouse.openPrice == 0, "Open prices already fetched");
        
        string memory firstHouse = bytes32ToString(wars[warIndex].firstHouse.houseTicker);
        string memory secondHouse = bytes32ToString(wars[warIndex].secondHouse.houseTicker);
        
        dotxLib.fetchFirstDayPrices(firstHouse, secondHouse, bytes32ToString(wars[warIndex].firstHouse.houseId), bytes32ToString(wars[warIndex].secondHouse.houseId), wars[warIndex].multiplicator, warIndex);
    }

    /**
     * Fetch the prices for the 2 houses the last day for the current war
     **/
    function fetchLastDayPrices(uint256 warIndex) public onlyOwner onlyIfCurrentWarFinished(warIndex) {
        require(wars[warIndex].firstHouse.closePrice == 0 && wars[warIndex].secondHouse.closePrice == 0, "Close prices already fetched");
        
        string memory firstHouse = bytes32ToString(wars[warIndex].firstHouse.houseTicker);
        string memory secondHouse = bytes32ToString(wars[warIndex].secondHouse.houseTicker);
        
        dotxLib.fetchLastDayPrices(firstHouse, secondHouse, bytes32ToString(wars[warIndex].firstHouse.houseId), bytes32ToString(wars[warIndex].secondHouse.houseId), wars[warIndex].multiplicator, warIndex);
    }
    
    /**
     * Elect the winner based on open prices & close prices
     **/
    function selectWinner(uint256 warIndex) public onlyOwner onlyIfCurrentWarFinished(warIndex) onlyIfPricesFetched(warIndex) {
        require(wars[warIndex].winningHouse == 0, "Winner already selected");
        
        int256 precision = int256(selecteWinnerPrecision);
        
        int256 firstHousePerf =  dotxLib.calculateHousePerf(int256(wars[warIndex].firstHouse.openPrice), int256(wars[warIndex].firstHouse.closePrice), precision);
        int256 secondHousePerf = dotxLib.calculateHousePerf(int256(wars[warIndex].secondHouse.openPrice), int256(wars[warIndex].secondHouse.closePrice), precision);
        
        //Set winner house
        wars[warIndex].winningHouse = (firstHousePerf > secondHousePerf ? wars[warIndex].firstHouse : wars[warIndex].secondHouse).houseTicker;
        House memory losingHouse = (firstHousePerf > secondHousePerf ? wars[warIndex].secondHouse : wars[warIndex].firstHouse);
        
        /*
        BURN X% OF LOSING HOUSE'S DOTX
        */
        uint256 burnValue = calculateBurnStaking(losingHouse, true, warIndex);
        dotxToken.transfer(BURN_ADDRESS, burnValue);
        
        /*
        SEND X% OF LOSING HOUSE'S DOTX TO STAKING ADDRESS
        */
        uint256 stakingValue = calculateBurnStaking(losingHouse, true, warIndex);
        dotxToken.transfer(stakingAddress, stakingValue);
        
        emit StakeBurn(warIndex, burnValue, stakingValue);
    }

    
    /*******************************
            CHAINLINK METHODS
    ********************************/
    
    /**
     * Handler method called by Chainlink for the first house open price 
     **/
    function firstHouseOpen(uint256 _price, uint256 warIndex) external onlyDoTxLib {
        wars[warIndex].firstHouse.openPrice = _price;
        openPriceEvent(warIndex);
    }
    /**
     * Handler method called by Chainlink for the second house open price 
     **/
    function secondHouseOpen(uint256 _price, uint256 warIndex) external onlyDoTxLib {
        wars[warIndex].secondHouse.openPrice = _price;
        openPriceEvent(warIndex);
    }
    /**
     * Handler method called by Chainlink for the first house close price 
     **/
    function firstHouseClose(uint256 _price, uint256 warIndex) external onlyDoTxLib {
        wars[warIndex].firstHouse.closePrice = _price;
        closePriceEvent(warIndex);
    }
    /**
     * Handler method called by Chainlink for the second house close price 
     **/
    function secondHouseClose(uint256 _price, uint256 warIndex) external onlyDoTxLib {
        wars[warIndex].secondHouse.closePrice = _price;
        closePriceEvent(warIndex);
    }
    /**
     * Emit openPriceFetched event if needed
     **/
    function openPriceEvent(uint256 warIndex) private {
        if(wars[warIndex].firstHouse.openPrice != 0 && wars[warIndex].secondHouse.openPrice != 0){
            emit openPriceFetched(warIndex);
        }
    }
    /**
     * Emit closePriceFetched event if needed
     **/
    function closePriceEvent(uint256 warIndex) private {
        if(wars[warIndex].firstHouse.closePrice != 0 && wars[warIndex].secondHouse.closePrice != 0){
            emit closePriceFetched(warIndex);
        }
    }
    
    /*****************************
            GETTER METHODS
    ******************************/
    
    /**
     * Get user (ticketsBought * ticketPrice) - user fees
     **/
    function getUserDoTxInBalance(uint256 _warIndex, address userAddress) public view returns(uint256){
        return wars[_warIndex].users[userAddress].ticketsBought.mul(wars[_warIndex].ticketPrice);
    }
    
    
    function getFeesForSwitchHouse(address userAddress, uint256 warIndex) public view returns(uint256){
        return (getUserDoTxInBalance(warIndex, userAddress).mul(wars[warIndex].warFeesPercent)).div(100);
    }
    
    /**
     * Returns the current user
     **/
    function getUser(uint256 _warIndex, address userAddress) public view returns(User memory){
        return wars[_warIndex].users[userAddress];
    }
    
    /**
     * Return house for a specific war
     **/
    function getHouse(uint256 _warIndex, string memory houseTicker) public view returns(House memory){
        bytes32 ticker = stringToBytes32(houseTicker);
        return wars[_warIndex].firstHouse.houseTicker == ticker ? wars[_warIndex].firstHouse : wars[_warIndex].secondHouse;
    }
    /**
     * Return burn stake information
     **/
    function getBurnStake(uint256 warIndex) public view returns(BurnStake memory){
        return BurnStake(calculateBurnStaking(wars[warIndex].firstHouse, true, warIndex), calculateBurnStaking(wars[warIndex].firstHouse, false, warIndex),
        calculateBurnStaking(wars[warIndex].secondHouse, true, warIndex), calculateBurnStaking(wars[warIndex].secondHouse, false, warIndex));
    }
    
    function getWarsHouses(uint256 min, uint256 max) public view returns (WarHouses[20] memory){
        WarHouses[20] memory houses;
        uint256 i = min;
        uint256 index = 0;
        while(index < 20 && i <= (max - min) + 1){
            houses[index] = (WarHouses(i, wars[i].firstHouse.houseTicker, wars[i].secondHouse.houseTicker, wars[i].startTime, wars[i].duration));
            i++;
            index++;
        }
        return houses;
    }
    /*****************************
            ADMIN METHODS
    ******************************/
    
    /**
     * Set the select winner precision used for calculate the best house's performance
     **/
    function setSelectWinnerPrecision(uint256 _precision) public onlyOwner{
        selecteWinnerPrecision = _precision;
    }

     /**
     * Set staking % of the losing house's DoTx to send for the currentWar
     **/
    function setStakingBurnPercentageWar(uint256 _burnPercentage, uint256 _stakingPercentage, uint256 warIndex) public onlyOwner{
        wars[warIndex].burnPercentage = _burnPercentage;
        wars[warIndex].stakingPercentage = _stakingPercentage;
    }
    
    /**
     * Set staking % of the losing house's DoTx to send
     **/
    function setStakingBurnPercentage(uint256 _burnPercentage, uint256 _stakingPercentage) public onlyOwner{
        burnPercentage = _burnPercentage;
        stakingPercentage = _stakingPercentage;
    }
    
    /**
     * Precision of the prices receive from WS
     **/
    function setMultiplicatorWar(int256 _multiplicator, uint256 warIndex) public onlyOwner{
        wars[warIndex].multiplicator = _multiplicator;
    }
    
    /**
     * Precision of the prices receive from WS
     **/
    function setMultiplicator(int256 _multiplicator) public onlyOwner{
        multiplicator = _multiplicator;
    }
    
    /**
     * Let owner withdraw DoTx fees (in particular to pay the costs generated by Chainlink)
     **/
    function withdrawFees() public onlyOwner {
        //Fees from switch house
        dotxToken.transfer(owner(), totalFees);
        
        totalFees = 0;
    }
    
    /**
     * Let owner set the DoTxLib address
     **/
    function setDoTxLib(address dotxLibAddr, bool setupAddressInLib) public onlyOwner {
        //DOTX lib mainly uses for Chainlink
        dotxLibAddress = dotxLibAddr;
        dotxLib = IDoTxLib(dotxLibAddress);
        if(setupAddressInLib){
            dotxLib.setDoTxGame(address(this));
        }
    }
    
    /**
     * Let owner update stakingAddress
     **/
    function setStakingAddress(address stakingAdr) public onlyOwner {
        stakingAddress = stakingAdr;
    }

    /****************************
            UTILS METHODS
    *****************************/
    
    function getHouseStg(bytes32 ticker, uint256 warIndex) private view returns(House storage){
        return wars[warIndex].firstHouse.houseTicker == ticker ? wars[warIndex].firstHouse : wars[warIndex].secondHouse;
    }
    
    /**
     * Check if the house passed in parameter is in the current war
     **/
    function checkIfHouseInCompetition(bytes32 _houseTicker, uint256 warIndex) private view returns(bool){
        return wars[warIndex].firstHouse.houseTicker == _houseTicker || wars[warIndex].secondHouse.houseTicker == _houseTicker;
    }
    
    /**
     * Calculate the reward for the current user
     **/
    function getCurrentRewardString(string memory _winningHouse, address userAddress, uint256 warIndex) public view returns(uint256){
        bytes32 winningHouseTicker = stringToBytes32(_winningHouse);
        return getCurrentReward(winningHouseTicker, userAddress, warIndex);
    } 
    
    function getCurrentReward(bytes32 _winningHouse, address userAddress, uint256 warIndex) public view returns(uint256){
        //Losing house
        House memory losingHouse = wars[warIndex].firstHouse.houseTicker == _winningHouse ? wars[warIndex].secondHouse : wars[warIndex].firstHouse;
        
        //Total DoTx in house's balance
        uint256 totalDoTxWinningHouse = getHouseStg(_winningHouse, warIndex).ticketsBought.mul(wars[warIndex].ticketPrice);
        uint256 totalDoTxLosingHouse = losingHouse.ticketsBought.mul(wars[warIndex].ticketPrice).sub(calculateBurnStaking(losingHouse, true, warIndex)).sub(calculateBurnStaking(losingHouse, false, warIndex));
        
        return dotxLib.calculateReward(getUserDoTxInBalance(warIndex, userAddress), totalDoTxWinningHouse, totalDoTxLosingHouse);
    }
    
    function calculateBurnStaking(House memory house, bool isBurn, uint256 warIndex) public view returns(uint256){
        uint256 ticketsBoughtValueDoTx = house.ticketsBought.mul(wars[warIndex].ticketPrice);
        uint256 percentage =  isBurn ? wars[warIndex].burnPercentage : wars[warIndex].stakingPercentage;
        //Calculate tickets remaining after burn
        return dotxLib.calculatePercentage(ticketsBoughtValueDoTx, percentage, selecteWinnerPrecision);
    }
    
    /**
     * Convert string to bytes32
     **/
    function stringToBytes32(string memory source) public pure returns (bytes32 result) {
        bytes memory tempEmptyStringTest = bytes(source);
        if (tempEmptyStringTest.length == 0) {
            return 0x0;
        }
    
        assembly {
            result := mload(add(source, 32))
        }
    }
    
    /**
     * Convert bytes32 to string
     **/
    function bytes32ToString(bytes32 x) public pure returns (string memory) {
        bytes memory bytesString = new bytes(32);
        uint charCount = 0;
        for (uint j = 0; j < 32; j++) {
            byte char = byte(bytes32(uint(x) * 2 ** (8 * j)));
            if (char != 0) {
                bytesString[charCount] = char;
                charCount++;
            }
        }
        bytes memory bytesStringTrimmed = new bytes(charCount);
        for (uint256 j = 0; j < charCount; j++) {
            bytesStringTrimmed[j] = bytesString[j];
        }
        return string(bytesStringTrimmed);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"dotxTokenAddress","type":"address"},{"internalType":"address","name":"dotxLibAddr","type":"address"},{"internalType":"bool","name":"setupAddressInLib","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"warIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"string","name":"txType","type":"string"}],"name":"ClaimReward","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":false,"internalType":"uint256","name":"warIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeValue","type":"uint256"}],"name":"StakeBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"warIndex","type":"uint256"},{"indexed":false,"internalType":"string","name":"from","type":"string"},{"indexed":false,"internalType":"string","name":"to","type":"string"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"valueInDoTx","type":"uint256"}],"name":"SwitchHouse","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"warIndex","type":"uint256"},{"indexed":false,"internalType":"string","name":"house","type":"string"},{"indexed":false,"internalType":"uint256","name":"valueInDoTx","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"string","name":"txType","type":"string"}],"name":"TicketBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"WarStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"closePriceFetched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"openPriceFetched","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_houseTicker","type":"string"},{"internalType":"uint256","name":"_numberOfTicket","type":"uint256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"buyTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"x","type":"bytes32"}],"name":"bytes32ToString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"houseTicker","type":"bytes32"},{"internalType":"bytes32","name":"houseId","type":"bytes32"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"uint256","name":"closePrice","type":"uint256"},{"internalType":"uint256","name":"ticketsBought","type":"uint256"}],"internalType":"struct DoTxGameContract.House","name":"house","type":"tuple"},{"internalType":"bool","name":"isBurn","type":"bool"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"calculateBurnStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"claimRewardAndTickets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dotxLibAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"fetchFirstDayPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"fetchLastDayPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"firstHouseClose","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"firstHouseOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"getBurnStake","outputs":[{"components":[{"internalType":"uint256","name":"firstHouseBurnDoTx","type":"uint256"},{"internalType":"uint256","name":"firstHouseStakingDoTx","type":"uint256"},{"internalType":"uint256","name":"secondHouseBurnDoTx","type":"uint256"},{"internalType":"uint256","name":"secondHouseStakingDoTx","type":"uint256"}],"internalType":"struct DoTxGameContract.BurnStake","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_winningHouse","type":"bytes32"},{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"getCurrentReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_winningHouse","type":"string"},{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"getCurrentRewardString","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"getFeesForSwitchHouse","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_warIndex","type":"uint256"},{"internalType":"string","name":"houseTicker","type":"string"}],"name":"getHouse","outputs":[{"components":[{"internalType":"bytes32","name":"houseTicker","type":"bytes32"},{"internalType":"bytes32","name":"houseId","type":"bytes32"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"uint256","name":"closePrice","type":"uint256"},{"internalType":"uint256","name":"ticketsBought","type":"uint256"}],"internalType":"struct DoTxGameContract.House","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_warIndex","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUser","outputs":[{"components":[{"internalType":"bytes32","name":"houseTicker","type":"bytes32"},{"internalType":"uint256","name":"ticketsBought","type":"uint256"},{"internalType":"bool","name":"rewardClaimed","type":"bool"}],"internalType":"struct DoTxGameContract.User","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_warIndex","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserDoTxInBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"getWarsHouses","outputs":[{"components":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bytes32","name":"firstHouse","type":"bytes32"},{"internalType":"bytes32","name":"secondHouse","type":"bytes32"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"internalType":"struct DoTxGameContract.WarHouses[20]","name":"","type":"tuple[20]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multiplicator","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"secondHouseClose","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"secondHouseOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"selectWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"selecteWinnerPrecision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dotxLibAddr","type":"address"},{"internalType":"bool","name":"setupAddressInLib","type":"bool"}],"name":"setDoTxLib","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"_multiplicator","type":"int256"}],"name":"setMultiplicator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"_multiplicator","type":"int256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"setMultiplicatorWar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ownerAddress","type":"address"}],"name":"setOwner2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_precision","type":"uint256"}],"name":"setSelectWinnerPrecision","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"stakingAdr","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnPercentage","type":"uint256"},{"internalType":"uint256","name":"_stakingPercentage","type":"uint256"}],"name":"setStakingBurnPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnPercentage","type":"uint256"},{"internalType":"uint256","name":"_stakingPercentage","type":"uint256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"setStakingBurnPercentageWar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_firstHouseTicker","type":"string"},{"internalType":"string","name":"_secondHouseTicker","type":"string"},{"internalType":"string","name":"_firstHouseId","type":"string"},{"internalType":"string","name":"_secondHouseId","type":"string"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_ticketPrice","type":"uint256"},{"internalType":"uint256","name":"_purchasePeriod","type":"uint256"},{"internalType":"uint256","name":"_warFeesPercent","type":"uint256"},{"internalType":"uint256","name":"_warIndex","type":"uint256"}],"name":"startWar","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"source","type":"string"}],"name":"stringToBytes32","outputs":[{"internalType":"bytes32","name":"result","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"_fromHouseTicker","type":"string"},{"internalType":"string","name":"_toHouseTicker","type":"string"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"switchHouse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"wars","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"ticketPrice","type":"uint256"},{"internalType":"uint256","name":"purchasePeriod","type":"uint256"},{"internalType":"bytes32","name":"winningHouse","type":"bytes32"},{"internalType":"uint256","name":"warFeesPercent","type":"uint256"},{"internalType":"int256","name":"multiplicator","type":"int256"},{"internalType":"uint256","name":"burnPercentage","type":"uint256"},{"internalType":"uint256","name":"stakingPercentage","type":"uint256"},{"components":[{"internalType":"bytes32","name":"houseTicker","type":"bytes32"},{"internalType":"bytes32","name":"houseId","type":"bytes32"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"uint256","name":"closePrice","type":"uint256"},{"internalType":"uint256","name":"ticketsBought","type":"uint256"}],"internalType":"struct DoTxGameContract.House","name":"firstHouse","type":"tuple"},{"components":[{"internalType":"bytes32","name":"houseTicker","type":"bytes32"},{"internalType":"bytes32","name":"houseId","type":"bytes32"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"uint256","name":"closePrice","type":"uint256"},{"internalType":"uint256","name":"ticketsBought","type":"uint256"}],"internalType":"struct DoTxGameContract.House","name":"secondHouse","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052731c2206f3115cac3750accb899d18d50b774c2f21600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620186a060085560056009556005600a55612710600b553480156200007d57600080fd5b5060405162006418380380620064188339818101604052810190620000a391906200042e565b6000620000b5620001af60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001a68282620001b760201b60201c565b5050506200059b565b600033905090565b620001c7620001af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806200027d57506200022c620001af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b620002bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b690620004f4565b60405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015620003fc57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639748ddaa306040518263ffffffff1660e01b8152600401620003c79190620004d7565b600060405180830381600087803b158015620003e257600080fd5b505af1158015620003f7573d6000803e3d6000fd5b505050505b5050565b600081519050620004118162000567565b92915050565b600081519050620004288162000581565b92915050565b6000806000606084860312156200044457600080fd5b6000620004548682870162000400565b9350506020620004678682870162000400565b92505060406200047a8682870162000417565b9150509250925092565b6200048f8162000527565b82525050565b6000620004a460208362000516565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000602082019050620004ee600083018462000484565b92915050565b600060208201905081810360008301526200050f8162000495565b9050919050565b600082825260208201905092915050565b6000620005348262000547565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620005728162000527565b81146200057e57600080fd5b50565b6200058c816200053b565b81146200059857600080fd5b50565b615e6d80620005ab6000396000f3fe608060405234801561001057600080fd5b506004361061025d5760003560e01c80639f6c08ca11610146578063dcd80d30116100c3578063f4e0d9ac11610087578063f4e0d9ac1461075e578063f537191f1461077a578063f606b9f1146107aa578063f8fa62cd146107c6578063faf026de146107e2578063fccc2813146107fe5761025d565b8063dcd80d30146106bc578063e01a6c3f146106d8578063f01f20df146106f4578063f2fde38b14610712578063f33a73061461072e5761025d565b8063be8e3d131161010a578063be8e3d1314610606578063bfaf3eec14610624578063c1fc13bd14610654578063c8e634b214610670578063cfb519281461068c5761025d565b80639f6c08ca146105525780639ff9a6f01461056e578063a2eb19ad1461059e578063a9ea0c90146105ce578063b74ec35a146105ea5761025d565b806349da4fea116101df578063714690d9116101a3578063714690d91461049257806381e1ccba146104ae5780638da5cb5b146104cc5780639182fd77146104ea5780639201de551461050657806392fc6e14146105365761025d565b806349da4fea146103f05780634c524be41461040c57806352709725146104285780635825884f1461044657806368f53fde146104625761025d565b8063257664a411610226578063257664a414610338578063444378c914610368578063453201e714610398578063458a34b2146103b6578063476343ee146103e65761025d565b8062fa081a146102625780630473dffe1461028057806311c2c37d146102b057806313114a9d146102e0578063228702fd146102fe575b600080fd5b61026a61081c565b60405161027791906156a6565b60405180910390f35b61029a60048036038101906102959190614cd1565b610822565b6040516102a79190615654565b60405180910390f35b6102ca60048036038101906102c59190614c7d565b61090e565b6040516102d791906159f2565b60405180910390f35b6102e86109bb565b6040516102f59190615a28565b60405180910390f35b61031860048036038101906103139190614bef565b6109c1565b60405161032f9b9a99989796959493929190615b92565b60405180910390f35b610352600480360381019061034d9190614c41565b610a93565b60405161035f9190615a0d565b60405180910390f35b610382600480360381019061037d919061492d565b610b30565b60405161038f9190615a28565b60405180910390f35b6103a0610b53565b6040516103ad91906155b0565b60405180910390f35b6103d060048036038101906103cb9190614c41565b610b79565b6040516103dd9190615a28565b60405180910390f35b6103ee610c02565b005b61040a60048036038101906104059190614cd1565b610db9565b005b61042660048036038101906104219190614bef565b610ebf565b005b610430611633565b60405161043d91906155b0565b60405180910390f35b610460600480360381019061045b919061471c565b61165d565b005b61047c60048036038101906104779190614ba0565b611795565b6040516104899190615a28565b60405180910390f35b6104ac60048036038101906104a79190614bef565b6118c0565b005b6104b6611b75565b6040516104c39190615a28565b60405180910390f35b6104d4611b7b565b6040516104e191906155b0565b60405180910390f35b61050460048036038101906104ff919061485e565b611ba4565b005b610520600480360381019061051b91906147e6565b611ca2565b60405161052d91906156f8565b60405180910390f35b610550600480360381019061054b9190614cd1565b611e59565b005b61056c60048036038101906105679190614cd1565b611f1b565b005b61058860048036038101906105839190614bef565b611fdd565b60405161059591906159d7565b60405180910390f35b6105b860048036038101906105b39190614781565b612181565b6040516105c59190615a28565b60405180910390f35b6105e860048036038101906105e39190614b39565b6121d0565b005b61060460048036038101906105ff9190614aba565b61258c565b005b61060e61294a565b60405161061b9190615a28565b60405180910390f35b61063e6004803603810190610639919061480f565b612950565b60405161064b9190615a28565b60405180910390f35b61066e600480360381019061066991906148b0565b612b54565b005b61068a60048036038101906106859190614cd1565b612c67565b005b6106a660048036038101906106a191906148ec565b612d29565b6040516106b3919061568b565b60405180910390f35b6106d660048036038101906106d19190614745565b612d54565b005b6106f260048036038101906106ed9190614bef565b612f84565b005b6106fc613082565b6040516107099190615a28565b60405180910390f35b61072c6004803603810190610727919061471c565b613088565b005b61074860048036038101906107439190614bef565b6132a9565b6040516107559190615670565b60405180910390f35b6107786004803603810190610773919061471c565b61369b565b005b610794600480360381019061078f9190614994565b6137d3565b6040516107a19190615670565b60405180910390f35b6107c460048036038101906107bf9190614d0d565b613baf565b005b6107e060048036038101906107db9190614bef565b613cde565b005b6107fc60048036038101906107f79190614cd1565b614021565b005b6108066140e3565b60405161081391906155b0565b60405180910390f35b600b5481565b61082a6144b2565b6108326144b2565b600084905060005b60148110801561084f57506001868603018211155b15610902576040518060a001604052808381526020016006600085815260200190815260200160002060090160000154815260200160066000858152602001908152602001600020600e016000015481526020016006600085815260200190815260200160002060000154815260200160066000858152602001908152602001600020600101548152508382601481106108e557fe5b60200201819052508180600101925050808060010191505061083a565b82935050505092915050565b6109166144e0565b600061092183612d29565b90508060066000868152602001908152602001600020600901600001541461095e5760066000858152602001908152602001600020600e01610975565b600660008581526020019081526020016000206009015b6040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505091505092915050565b60075481565b6006602052806000526040600020600091509050806000015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015490806009016040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815250509080600e016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090508b565b610a9b614515565b6006600084815260200190815260200160002060130160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff161515151581525050905092915050565b600080610b3c85612d29565b9050610b49818585612950565b9150509392505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610bfa60066000858152602001908152602001600020600201546006600086815260200190815260200160002060130160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546140e890919063ffffffff16565b905092915050565b610c0a614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610cb75750610c66614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced906158f7565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610d3c611b7b565b6007546040518363ffffffff1660e01b8152600401610d5c92919061562b565b602060405180830381600087803b158015610d7657600080fd5b505af1158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae91906147bd565b506000600781905550565b610dc1614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e6e5750610e1d614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea4906158f7565b60405180910390fd5b8160098190555080600a819055505050565b610ec7614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f745750610f23614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa906158f7565b60405180910390fd5b8042610ff46006600084815260200190815260200160002060010154600660008581526020019081526020016000206000015461416090919063ffffffff16565b1115806110015750600081145b611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790615937565b60405180910390fd5b8160006006600083815260200190815260200160002060090160020154141580156110855750600060066000838152602001908152602001600020600e016002015414155b6110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb906157b7565b60405180910390fd5b60006006600083815260200190815260200160002060090160030154141580156111085750600060066000838152602001908152602001600020600e016003015414155b611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e90615877565b60405180910390fd5b6000801b6006600085815260200190815260200160002060040154146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990615817565b60405180910390fd5b600060085490506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634517f24860066000888152602001908152602001600020600901600201546006600089815260200190815260200160002060090160030154856040518463ffffffff1660e01b815260040161123c939291906156c1565b60206040518083038186803b15801561125457600080fd5b505afa158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128c9190614887565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634517f24860066000898152602001908152602001600020600e0160020154600660008a8152602001908152602001600020600e0160030154866040518463ffffffff1660e01b8152600401611321939291906156c1565b60206040518083038186803b15801561133957600080fd5b505afa15801561134d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113719190614887565b90508082136113955760066000878152602001908152602001600020600e016113ac565b600660008781526020019081526020016000206009015b6000015460066000888152602001908152602001600020600401819055506113d26144e0565b8183136113f4576006600088815260200190815260200160002060090161140b565b60066000888152602001908152602001600020600e015b6040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060006114588260018a611795565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6001836040518363ffffffff1660e01b81526004016114b892919061562b565b602060405180830381600087803b1580156114d257600080fd5b505af11580156114e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150a91906147bd565b5060006115198360018b611795565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161159a92919061562b565b602060405180830381600087803b1580156115b457600080fd5b505af11580156115c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ec91906147bd565b507fe43c1d18e02c7393f6160e7258bca88538b1a522dc53998c38337cb57d44420889838360405161162093929190615b03565b60405180910390a1505050505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611665614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061171257506116c1614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906158f7565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806117c5600660008581526020019081526020016000206002015486608001516140e890919063ffffffff16565b90506000846117ea576006600085815260200190815260200160002060080154611802565b60066000858152602001908152602001600020600701545b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633275a7b683836008546040518463ffffffff1660e01b815260040161186593929190615b03565b60206040518083038186803b15801561187d57600080fd5b505afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b59190614c18565b925050509392505050565b6118c8614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806119755750611924614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab906158f7565b60405180910390fd5b600060066000838152602001908152602001600020600901600201541480156119f65750600060066000838152602001908152602001600020600e0160020154145b611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90615797565b60405180910390fd5b6060611a596006600084815260200190815260200160002060090160000154611ca2565b90506060611a7f60066000858152602001908152602001600020600e0160000154611ca2565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330e577318383611ae36006600089815260200190815260200160002060090160010154611ca2565b611b05600660008a8152602001908152602001600020600e0160010154611ca2565b600660008a815260200190815260200160002060060154896040518763ffffffff1660e01b8152600401611b3e9695949392919061571a565b600060405180830381600087803b158015611b5857600080fd5b505af1158015611b6c573d6000803e3d6000fd5b50505050505050565b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bac614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611c595750611c08614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f906158f7565b60405180910390fd5b80600b8190555050565b606080602067ffffffffffffffff81118015611cbd57600080fd5b506040519080825280601f01601f191660200182016040528015611cf05781602001600182028036833780820191505090505b5090506000805b6020811015611d935760008160080260020a8660001c0260001b9050600060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d855780848481518110611d4d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082806001019350505b508080600101915050611cf7565b5060608167ffffffffffffffff81118015611dad57600080fd5b506040519080825280601f01601f191660200182016040528015611de05781602001600182028036833780820191505090505b50905060005b82811015611e4d57838181518110611dfa57fe5b602001015160f81c60f81b828281518110611e1157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611de6565b50809350505050919050565b611e61614158565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee790615857565b60405180910390fd5b816006600083815260200190815260200160002060090160030181905550611f17816141b5565b5050565b611f23614158565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa990615857565b60405180910390fd5b8160066000838152602001908152602001600020600e0160030181905550611fd9816141b5565b5050565b611fe561453b565b604051806080016040528061204e600660008681526020019081526020016000206009016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050600186611795565b81526020016120b1600660008681526020019081526020016000206009016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050600086611795565b815260200161211460066000868152602001908152602001600020600e016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050600186611795565b815260200161217760066000868152602001908152602001600020600e016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050600086611795565b8152509050919050565b60006121c860646121ba60066000868152602001908152602001600020600501546121ac8688610b79565b6140e890919063ffffffff16565b61423990919063ffffffff16565b905092915050565b80600660008281526020019081526020016000206003015461221160066000848152602001908152602001600020600001544261428390919063ffffffff16565b10612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890615977565b60405180910390fd5b600061225c85612d29565b9050600061226a82856142cd565b905060006006600086815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490508282600001541480156122e65750828114806122e557506000801b81145b5b612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c906159b7565b60405180910390fd5b81600001546006600087815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506123ed866006600088815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461416090919063ffffffff16565b6006600087815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061245e86836004015461416090919063ffffffff16565b826004018190555060006124918760066000898152602001908152602001600020600201546140e890919063ffffffff16565b90507f27238bafe4942fdab575b632a51f3ab494e0c42bca4f50edbcba0c43b9b4eeea868983336040516124c89493929190615aa4565b60405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161252f939291906155cb565b602060405180830381600087803b15801561254957600080fd5b505af115801561255d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258191906147bd565b505050505050505050565b8060066000828152602001908152602001600020600301546125cd60066000848152602001908152602001600020600001544261428390919063ffffffff16565b1061260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490615977565b60405180910390fd5b600061261885612d29565b9050600061262585612d29565b90506126318185614329565b801561263d5750808214155b61267c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267390615957565b60405180910390fd5b816006600086815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90615917565b60405180910390fd5b600061272083866142cd565b9050600061272e83876142cd565b9050826006600088815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555060006006600088815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506127fd81846004015461428390919063ffffffff16565b836004018190555061281c81836004015461416090919063ffffffff16565b826004018190555060006128303389612181565b90506128478160075461416090919063ffffffff16565b6007819055507fd55789e69f821b8125cb322e83b696583c560834a44c3e6b7e0a0698eec87ab5888b8b3385604051612884959493929190615a43565b60405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016128eb939291906155cb565b602060405180830381600087803b15801561290557600080fd5b505af1158015612919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293d91906147bd565b5050505050505050505050565b60085481565b600061295a6144e0565b8460066000858152602001908152602001600020600901600001541461299557600660008481526020019081526020016000206009016129ac565b60066000848152602001908152602001600020600e015b6040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090506000612a236006600086815260200190815260200160002060020154612a1188876142cd565b600401546140e890919063ffffffff16565b90506000612a8e612a3684600088611795565b612a80612a458660018a611795565b612a72600660008b81526020019081526020016000206002015488608001516140e890919063ffffffff16565b61428390919063ffffffff16565b61428390919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8e62b97612ad88789610b79565b84846040518463ffffffff1660e01b8152600401612af893929190615b03565b60206040518083038186803b158015612b1057600080fd5b505afa158015612b24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b489190614c18565b93505050509392505050565b612b5c614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612c095750612bb8614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3f906158f7565b60405180910390fd5b8160066000838152602001908152602001600020600601819055505050565b612c6f614158565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf590615857565b60405180910390fd5b8160066000838152602001908152602001600020600e0160020181905550612d2581614372565b5050565b60006060829050600081511415612d46576000801b915050612d4f565b60208301519150505b919050565b612d5c614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612e095750612db8614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f906158f7565b60405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015612f8057600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639748ddaa306040518263ffffffff1660e01b8152600401612f4d91906155b0565b600060405180830381600087803b158015612f6757600080fd5b505af1158015612f7b573d6000803e3d6000fd5b505050505b5050565b612f8c614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806130395750612fe8614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306f906158f7565b60405180910390fd5b8060088190555050565b60095481565b613090614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061313d57506130ec614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61317c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613173906158f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e3906157f7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081426132ec6006600084815260200190815260200160002060010154600660008581526020019081526020016000206000015461416090919063ffffffff16565b1115806132f95750600081145b613338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332f90615937565b60405180910390fd5b600015156006600085815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515146133e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d9906157d7565b60405180910390fd5b60006006600085815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541180156134b3575060066000848152602001908152602001600020600401546006600085815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b6134f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e990615997565b60405180910390fd5b60016006600085815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600061358460066000868152602001908152602001600020600401543386612950565b905060006135928533610b79565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336135e6848661416090919063ffffffff16565b6040518363ffffffff1660e01b8152600401613603929190615602565b602060405180830381600087803b15801561361d57600080fd5b505af1158015613631573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365591906147bd565b507fbc53bf1be302bd318289a0e26b4d335ea1f62ea08ab40edf320b72af937d03058583833360405161368b9493929190615b3a565b60405180910390a1505050919050565b6136a3614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061375057506136ff614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61378f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613786906158f7565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006137dd614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061388a5750613839614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6138c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c0906158f7565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ae613b66040518163ffffffff1660e01b815260040160206040518083038186803b15801561393157600080fd5b505afa158015613945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139699190614c18565b82116139aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a190615897565b60405180910390fd5b6040518061016001604052804281526020018781526020018681526020018581526020016000801b8152602001848152602001600b5481526020016009548152602001600a5481526020016040518060a00160405280613a098e612d29565b8152602001613a178c612d29565b81526020016000815260200160008152602001600081525081526020016040518060a00160405280613a488d612d29565b8152602001613a568b612d29565b81526020016000815260200160008152602001600081525081525060066000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009016000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505061014082015181600e01600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015550509050507f32fc6bdba77976df88c26bbbdea972fce5c17afbaf8ec10a595569c0b8125f5582604051613b8d9190615a28565b60405180910390a1613b9e826118c0565b600190509998505050505050505050565b613bb7614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480613c645750613c13614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9a906158f7565b60405180910390fd5b826006600083815260200190815260200160002060070181905550816006600083815260200190815260200160002060080181905550505050565b613ce6614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480613d935750613d42614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dc9906158f7565b60405180910390fd5b8042613e136006600084815260200190815260200160002060010154600660008581526020019081526020016000206000015461416090919063ffffffff16565b111580613e205750600081145b613e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e5690615937565b60405180910390fd5b60006006600084815260200190815260200160002060090160030154148015613ea15750600060066000848152602001908152602001600020600e0160030154145b613ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ed7906158d7565b60405180910390fd5b6060613f046006600085815260200190815260200160002060090160000154611ca2565b90506060613f2a60066000868152602001908152602001600020600e0160000154611ca2565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b558a35f8383613f8e600660008a815260200190815260200160002060090160010154611ca2565b613fb0600660008b8152602001908152602001600020600e0160010154611ca2565b600660008b8152602001908152602001600020600601548a6040518763ffffffff1660e01b8152600401613fe99695949392919061571a565b600060405180830381600087803b15801561400357600080fd5b505af1158015614017573d6000803e3d6000fd5b5050505050505050565b614029614158565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140af90615857565b60405180910390fd5b8160066000838152602001908152602001600020600901600201819055506140df81614372565b5050565b600181565b6000808314156140fb5760009050614152565b600082840290508284828161410c57fe5b041461414d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614144906158b7565b60405180910390fd5b809150505b92915050565b600033905090565b6000808284019050838110156141ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141a290615837565b60405180910390fd5b8091505092915050565b60006006600083815260200190815260200160002060090160030154141580156141f95750600060066000838152602001908152602001600020600e016003015414155b15614236577f8eb944520f5e4e44b0e829a774d6c084b4f6a4b397d9a4f27df1942e13d8321a8160405161422d9190615a28565b60405180910390a15b50565b600061427b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143f6565b905092915050565b60006142c583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614457565b905092915050565b60008260066000848152602001908152602001600020600901600001541461430a5760066000838152602001908152602001600020600e01614321565b600660008381526020019081526020016000206009015b905092915050565b6000826006600084815260200190815260200160002060090160000154148061436a57508260066000848152602001908152602001600020600e0160000154145b905092915050565b60006006600083815260200190815260200160002060090160020154141580156143b65750600060066000838152602001908152602001600020600e016002015414155b156143f3577f7b23af8b7a1623b2d8dba9353b737cde209b8b0e24dddbb911acee9f5c724a40816040516143ea9190615a28565b60405180910390a15b50565b6000808311829061443d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161443491906156f8565b60405180910390fd5b50600083858161444957fe5b049050809150509392505050565b600083831115829061449f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161449691906156f8565b60405180910390fd5b5060008385039050809150509392505050565b6040518061028001604052806014905b6144ca614563565b8152602001906001900390816144c25790505090565b6040518060a0016040528060008019168152602001600080191681526020016000815260200160008152602001600081525090565b604051806060016040528060008019168152602001600081526020016000151581525090565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600080191681526020016000801916815260200160008152602001600081525090565b6000813590506145a781615dc4565b92915050565b6000813590506145bc81615ddb565b92915050565b6000815190506145d181615ddb565b92915050565b6000813590506145e681615df2565b92915050565b6000813590506145fb81615e09565b92915050565b60008151905061461081615e09565b92915050565b600082601f83011261462757600080fd5b813561463a61463582615c6a565b615c3d565b9150808252602083016020830185838301111561465657600080fd5b614661838284615d71565b50505092915050565b600060a0828403121561467c57600080fd5b61468660a0615c3d565b90506000614696848285016145d7565b60008301525060206146aa848285016145d7565b60208301525060406146be848285016146f2565b60408301525060606146d2848285016146f2565b60608301525060806146e6848285016146f2565b60808301525092915050565b60008135905061470181615e20565b92915050565b60008151905061471681615e20565b92915050565b60006020828403121561472e57600080fd5b600061473c84828501614598565b91505092915050565b6000806040838503121561475857600080fd5b600061476685828601614598565b9250506020614777858286016145ad565b9150509250929050565b6000806040838503121561479457600080fd5b60006147a285828601614598565b92505060206147b3858286016146f2565b9150509250929050565b6000602082840312156147cf57600080fd5b60006147dd848285016145c2565b91505092915050565b6000602082840312156147f857600080fd5b6000614806848285016145d7565b91505092915050565b60008060006060848603121561482457600080fd5b6000614832868287016145d7565b935050602061484386828701614598565b9250506040614854868287016146f2565b9150509250925092565b60006020828403121561487057600080fd5b600061487e848285016145ec565b91505092915050565b60006020828403121561489957600080fd5b60006148a784828501614601565b91505092915050565b600080604083850312156148c357600080fd5b60006148d1858286016145ec565b92505060206148e2858286016146f2565b9150509250929050565b6000602082840312156148fe57600080fd5b600082013567ffffffffffffffff81111561491857600080fd5b61492484828501614616565b91505092915050565b60008060006060848603121561494257600080fd5b600084013567ffffffffffffffff81111561495c57600080fd5b61496886828701614616565b935050602061497986828701614598565b925050604061498a868287016146f2565b9150509250925092565b60008060008060008060008060006101208a8c0312156149b357600080fd5b60008a013567ffffffffffffffff8111156149cd57600080fd5b6149d98c828d01614616565b99505060208a013567ffffffffffffffff8111156149f657600080fd5b614a028c828d01614616565b98505060408a013567ffffffffffffffff811115614a1f57600080fd5b614a2b8c828d01614616565b97505060608a013567ffffffffffffffff811115614a4857600080fd5b614a548c828d01614616565b9650506080614a658c828d016146f2565b95505060a0614a768c828d016146f2565b94505060c0614a878c828d016146f2565b93505060e0614a988c828d016146f2565b925050610100614aaa8c828d016146f2565b9150509295985092959850929598565b600080600060608486031215614acf57600080fd5b600084013567ffffffffffffffff811115614ae957600080fd5b614af586828701614616565b935050602084013567ffffffffffffffff811115614b1257600080fd5b614b1e86828701614616565b9250506040614b2f868287016146f2565b9150509250925092565b600080600060608486031215614b4e57600080fd5b600084013567ffffffffffffffff811115614b6857600080fd5b614b7486828701614616565b9350506020614b85868287016146f2565b9250506040614b96868287016146f2565b9150509250925092565b600080600060e08486031215614bb557600080fd5b6000614bc38682870161466a565b93505060a0614bd4868287016145ad565b92505060c0614be5868287016146f2565b9150509250925092565b600060208284031215614c0157600080fd5b6000614c0f848285016146f2565b91505092915050565b600060208284031215614c2a57600080fd5b6000614c3884828501614707565b91505092915050565b60008060408385031215614c5457600080fd5b6000614c62858286016146f2565b9250506020614c7385828601614598565b9150509250929050565b60008060408385031215614c9057600080fd5b6000614c9e858286016146f2565b925050602083013567ffffffffffffffff811115614cbb57600080fd5b614cc785828601614616565b9150509250929050565b60008060408385031215614ce457600080fd5b6000614cf2858286016146f2565b9250506020614d03858286016146f2565b9150509250929050565b600080600060608486031215614d2257600080fd5b6000614d30868287016146f2565b9350506020614d41868287016146f2565b9250506040614d52868287016146f2565b9150509250925092565b6000614d68838361552a565b60a08301905092915050565b614d7d81615d3b565b82525050565b614d8c81615cdf565b82525050565b614d9b81615ca0565b614da58184615cc3565b9250614db082615c96565b8060005b83811015614de1578151614dc88782614d5c565b9650614dd383615cb6565b925050600181019050614db4565b505050505050565b614df281615cf1565b82525050565b614e0181615cf1565b82525050565b614e1081615cfd565b82525050565b614e1f81615cfd565b82525050565b614e2e81615d07565b82525050565b6000614e3f82615cab565b614e498185615cce565b9350614e59818560208601615d80565b614e6281615db3565b840191505092915050565b6000614e7a601b83615cce565b91507f4f70656e2070726963657320616c7265616479206665746368656400000000006000830152602082019050919050565b6000614eba601783615cce565b91507f4f70656e20707269636573206e6f7420666574636865640000000000000000006000830152602082019050919050565b6000614efa601f83615cce565b91507f596f7520616c726561647920636c61696d656420796f757220726577617264006000830152602082019050919050565b6000614f3a602683615cce565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614fa0601783615cce565b91507f57696e6e657220616c72656164792073656c65637465640000000000000000006000830152602082019050919050565b6000614fe0600683615cce565b91507f424f5547485400000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000615020601b83615cce565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000615060602b83615cce565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260008301527f206f7220746865206c69620000000000000000000000000000000000000000006020830152604082019050919050565b60006150c6601883615cce565b91507f436c6f736520707269636573206e6f74206665746368656400000000000000006000830152602082019050919050565b6000615106601883615cce565b91507f57617220696e64657820616c72656164792065786973747300000000000000006000830152602082019050919050565b6000615146602183615cce565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006151ac601c83615cce565b91507f436c6f73652070726963657320616c72656164792066657463686564000000006000830152602082019050919050565b60006151ec602083615cce565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061522c602083615cce565b91507f5573657220646f65736e27742062656c6f6e6720746f2066726f6d486f7573656000830152602082019050919050565b600061526c601883615cce565b91507f43757272656e7420776172206e6f742066696e697368656400000000000000006000830152602082019050919050565b60006152ac601883615cce565b91507f486f757365206e6f7420696e20636f6d7065746974696f6e00000000000000006000830152602082019050919050565b60006152ec600583615cce565b91507f434c41494d0000000000000000000000000000000000000000000000000000006000830152602082019050919050565b600061532c601d83615cce565b91507f5075726368617365207469636b65747320706572696f6420656e6465640000006000830152602082019050919050565b600061536c602483615cce565b91507f5573657220646f65736e27742062656c6f6e6720746f2077696e6e696e67206860008301527f6f757365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006153d2602b83615cce565b91507f596f752063616e206e6f7420627579207469636b65747320666f72207468652060008301527f6f7468657220686f7573650000000000000000000000000000000000000000006020830152604082019050919050565b6080820160008201516154416000850182615592565b5060208201516154546020850182615592565b5060408201516154676040850182615592565b50606082015161547a6060850182615592565b50505050565b60a0820160008201516154966000850182614e07565b5060208201516154a96020850182614e07565b5060408201516154bc6040850182615592565b5060608201516154cf6060850182615592565b5060808201516154e26080850182615592565b50505050565b6060820160008201516154fe6000850182614e07565b5060208201516155116020850182615592565b5060408201516155246040850182614de9565b50505050565b60a0820160008201516155406000850182615592565b5060208201516155536020850182614e07565b5060408201516155666040850182614e07565b5060608201516155796060850182615592565b50608082015161558c6080850182615592565b50505050565b61559b81615d31565b82525050565b6155aa81615d31565b82525050565b60006020820190506155c56000830184614d83565b92915050565b60006060820190506155e06000830186614d74565b6155ed6020830185614d83565b6155fa60408301846155a1565b949350505050565b60006040820190506156176000830185614d74565b61562460208301846155a1565b9392505050565b60006040820190506156406000830185614d83565b61564d60208301846155a1565b9392505050565b6000610c808201905061566a6000830184614d92565b92915050565b60006020820190506156856000830184614df8565b92915050565b60006020820190506156a06000830184614e16565b92915050565b60006020820190506156bb6000830184614e25565b92915050565b60006060820190506156d66000830186614e25565b6156e36020830185614e25565b6156f06040830184614e25565b949350505050565b600060208201905081810360008301526157128184614e34565b905092915050565b600060c08201905081810360008301526157348189614e34565b905081810360208301526157488188614e34565b9050818103604083015261575c8187614e34565b905081810360608301526157708186614e34565b905061577f6080830185614e25565b61578c60a08301846155a1565b979650505050505050565b600060208201905081810360008301526157b081614e6d565b9050919050565b600060208201905081810360008301526157d081614ead565b9050919050565b600060208201905081810360008301526157f081614eed565b9050919050565b6000602082019050818103600083015261581081614f2d565b9050919050565b6000602082019050818103600083015261583081614f93565b9050919050565b6000602082019050818103600083015261585081615013565b9050919050565b6000602082019050818103600083015261587081615053565b9050919050565b60006020820190508181036000830152615890816150b9565b9050919050565b600060208201905081810360008301526158b0816150f9565b9050919050565b600060208201905081810360008301526158d081615139565b9050919050565b600060208201905081810360008301526158f08161519f565b9050919050565b60006020820190508181036000830152615910816151df565b9050919050565b600060208201905081810360008301526159308161521f565b9050919050565b600060208201905081810360008301526159508161525f565b9050919050565b600060208201905081810360008301526159708161529f565b9050919050565b600060208201905081810360008301526159908161531f565b9050919050565b600060208201905081810360008301526159b08161535f565b9050919050565b600060208201905081810360008301526159d0816153c5565b9050919050565b60006080820190506159ec600083018461542b565b92915050565b600060a082019050615a076000830184615480565b92915050565b6000606082019050615a2260008301846154e8565b92915050565b6000602082019050615a3d60008301846155a1565b92915050565b600060a082019050615a5860008301886155a1565b8181036020830152615a6a8187614e34565b90508181036040830152615a7e8186614e34565b9050615a8d6060830185614d74565b615a9a60808301846155a1565b9695505050505050565b600060a082019050615ab960008301876155a1565b8181036020830152615acb8186614e34565b9050615ada60408301856155a1565b615ae76060830184614d74565b8181036080830152615af881614fd3565b905095945050505050565b6000606082019050615b1860008301866155a1565b615b2560208301856155a1565b615b3260408301846155a1565b949350505050565b600060a082019050615b4f60008301876155a1565b615b5c60208301866155a1565b615b6960408301856155a1565b615b766060830184614d74565b8181036080830152615b87816152df565b905095945050505050565b600061026082019050615ba8600083018e6155a1565b615bb5602083018d6155a1565b615bc2604083018c6155a1565b615bcf606083018b6155a1565b615bdc608083018a614e16565b615be960a08301896155a1565b615bf660c0830188614e25565b615c0360e08301876155a1565b615c116101008301866155a1565b615c1f610120830185615480565b615c2d6101c0830184615480565b9c9b505050505050505050505050565b6000604051905081810181811067ffffffffffffffff82111715615c6057600080fd5b8060405250919050565b600067ffffffffffffffff821115615c8157600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b600060149050919050565b600081519050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b6000615cea82615d11565b9050919050565b60008115159050919050565b6000819050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615d4682615d4d565b9050919050565b6000615d5882615d5f565b9050919050565b6000615d6a82615d11565b9050919050565b82818337600083830152505050565b60005b83811015615d9e578082015181840152602081019050615d83565b83811115615dad576000848401525b50505050565b6000601f19601f8301169050919050565b615dcd81615cdf565b8114615dd857600080fd5b50565b615de481615cf1565b8114615def57600080fd5b50565b615dfb81615cfd565b8114615e0657600080fd5b50565b615e1281615d07565b8114615e1d57600080fd5b50565b615e2981615d31565b8114615e3457600080fd5b5056fea26469706673582212202711d3bc1719ec47fe71282d53e7b55d1c02400b02b50396f1b256df67a8c48464736f6c634300060c0033000000000000000000000000fab5a05c933f1a2463e334e011992e897d56ef0a000000000000000000000000ee302900ab9792c42a1d19990520fc2a541d98f70000000000000000000000000000000000000000000000000000000000000001

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061025d5760003560e01c80639f6c08ca11610146578063dcd80d30116100c3578063f4e0d9ac11610087578063f4e0d9ac1461075e578063f537191f1461077a578063f606b9f1146107aa578063f8fa62cd146107c6578063faf026de146107e2578063fccc2813146107fe5761025d565b8063dcd80d30146106bc578063e01a6c3f146106d8578063f01f20df146106f4578063f2fde38b14610712578063f33a73061461072e5761025d565b8063be8e3d131161010a578063be8e3d1314610606578063bfaf3eec14610624578063c1fc13bd14610654578063c8e634b214610670578063cfb519281461068c5761025d565b80639f6c08ca146105525780639ff9a6f01461056e578063a2eb19ad1461059e578063a9ea0c90146105ce578063b74ec35a146105ea5761025d565b806349da4fea116101df578063714690d9116101a3578063714690d91461049257806381e1ccba146104ae5780638da5cb5b146104cc5780639182fd77146104ea5780639201de551461050657806392fc6e14146105365761025d565b806349da4fea146103f05780634c524be41461040c57806352709725146104285780635825884f1461044657806368f53fde146104625761025d565b8063257664a411610226578063257664a414610338578063444378c914610368578063453201e714610398578063458a34b2146103b6578063476343ee146103e65761025d565b8062fa081a146102625780630473dffe1461028057806311c2c37d146102b057806313114a9d146102e0578063228702fd146102fe575b600080fd5b61026a61081c565b60405161027791906156a6565b60405180910390f35b61029a60048036038101906102959190614cd1565b610822565b6040516102a79190615654565b60405180910390f35b6102ca60048036038101906102c59190614c7d565b61090e565b6040516102d791906159f2565b60405180910390f35b6102e86109bb565b6040516102f59190615a28565b60405180910390f35b61031860048036038101906103139190614bef565b6109c1565b60405161032f9b9a99989796959493929190615b92565b60405180910390f35b610352600480360381019061034d9190614c41565b610a93565b60405161035f9190615a0d565b60405180910390f35b610382600480360381019061037d919061492d565b610b30565b60405161038f9190615a28565b60405180910390f35b6103a0610b53565b6040516103ad91906155b0565b60405180910390f35b6103d060048036038101906103cb9190614c41565b610b79565b6040516103dd9190615a28565b60405180910390f35b6103ee610c02565b005b61040a60048036038101906104059190614cd1565b610db9565b005b61042660048036038101906104219190614bef565b610ebf565b005b610430611633565b60405161043d91906155b0565b60405180910390f35b610460600480360381019061045b919061471c565b61165d565b005b61047c60048036038101906104779190614ba0565b611795565b6040516104899190615a28565b60405180910390f35b6104ac60048036038101906104a79190614bef565b6118c0565b005b6104b6611b75565b6040516104c39190615a28565b60405180910390f35b6104d4611b7b565b6040516104e191906155b0565b60405180910390f35b61050460048036038101906104ff919061485e565b611ba4565b005b610520600480360381019061051b91906147e6565b611ca2565b60405161052d91906156f8565b60405180910390f35b610550600480360381019061054b9190614cd1565b611e59565b005b61056c60048036038101906105679190614cd1565b611f1b565b005b61058860048036038101906105839190614bef565b611fdd565b60405161059591906159d7565b60405180910390f35b6105b860048036038101906105b39190614781565b612181565b6040516105c59190615a28565b60405180910390f35b6105e860048036038101906105e39190614b39565b6121d0565b005b61060460048036038101906105ff9190614aba565b61258c565b005b61060e61294a565b60405161061b9190615a28565b60405180910390f35b61063e6004803603810190610639919061480f565b612950565b60405161064b9190615a28565b60405180910390f35b61066e600480360381019061066991906148b0565b612b54565b005b61068a60048036038101906106859190614cd1565b612c67565b005b6106a660048036038101906106a191906148ec565b612d29565b6040516106b3919061568b565b60405180910390f35b6106d660048036038101906106d19190614745565b612d54565b005b6106f260048036038101906106ed9190614bef565b612f84565b005b6106fc613082565b6040516107099190615a28565b60405180910390f35b61072c6004803603810190610727919061471c565b613088565b005b61074860048036038101906107439190614bef565b6132a9565b6040516107559190615670565b60405180910390f35b6107786004803603810190610773919061471c565b61369b565b005b610794600480360381019061078f9190614994565b6137d3565b6040516107a19190615670565b60405180910390f35b6107c460048036038101906107bf9190614d0d565b613baf565b005b6107e060048036038101906107db9190614bef565b613cde565b005b6107fc60048036038101906107f79190614cd1565b614021565b005b6108066140e3565b60405161081391906155b0565b60405180910390f35b600b5481565b61082a6144b2565b6108326144b2565b600084905060005b60148110801561084f57506001868603018211155b15610902576040518060a001604052808381526020016006600085815260200190815260200160002060090160000154815260200160066000858152602001908152602001600020600e016000015481526020016006600085815260200190815260200160002060000154815260200160066000858152602001908152602001600020600101548152508382601481106108e557fe5b60200201819052508180600101925050808060010191505061083a565b82935050505092915050565b6109166144e0565b600061092183612d29565b90508060066000868152602001908152602001600020600901600001541461095e5760066000858152602001908152602001600020600e01610975565b600660008581526020019081526020016000206009015b6040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505091505092915050565b60075481565b6006602052806000526040600020600091509050806000015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015490806009016040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815250509080600e016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090508b565b610a9b614515565b6006600084815260200190815260200160002060130160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff161515151581525050905092915050565b600080610b3c85612d29565b9050610b49818585612950565b9150509392505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610bfa60066000858152602001908152602001600020600201546006600086815260200190815260200160002060130160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546140e890919063ffffffff16565b905092915050565b610c0a614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610cb75750610c66614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced906158f7565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610d3c611b7b565b6007546040518363ffffffff1660e01b8152600401610d5c92919061562b565b602060405180830381600087803b158015610d7657600080fd5b505af1158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae91906147bd565b506000600781905550565b610dc1614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e6e5750610e1d614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea4906158f7565b60405180910390fd5b8160098190555080600a819055505050565b610ec7614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f745750610f23614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa906158f7565b60405180910390fd5b8042610ff46006600084815260200190815260200160002060010154600660008581526020019081526020016000206000015461416090919063ffffffff16565b1115806110015750600081145b611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790615937565b60405180910390fd5b8160006006600083815260200190815260200160002060090160020154141580156110855750600060066000838152602001908152602001600020600e016002015414155b6110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb906157b7565b60405180910390fd5b60006006600083815260200190815260200160002060090160030154141580156111085750600060066000838152602001908152602001600020600e016003015414155b611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e90615877565b60405180910390fd5b6000801b6006600085815260200190815260200160002060040154146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990615817565b60405180910390fd5b600060085490506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634517f24860066000888152602001908152602001600020600901600201546006600089815260200190815260200160002060090160030154856040518463ffffffff1660e01b815260040161123c939291906156c1565b60206040518083038186803b15801561125457600080fd5b505afa158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128c9190614887565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634517f24860066000898152602001908152602001600020600e0160020154600660008a8152602001908152602001600020600e0160030154866040518463ffffffff1660e01b8152600401611321939291906156c1565b60206040518083038186803b15801561133957600080fd5b505afa15801561134d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113719190614887565b90508082136113955760066000878152602001908152602001600020600e016113ac565b600660008781526020019081526020016000206009015b6000015460066000888152602001908152602001600020600401819055506113d26144e0565b8183136113f4576006600088815260200190815260200160002060090161140b565b60066000888152602001908152602001600020600e015b6040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060006114588260018a611795565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6001836040518363ffffffff1660e01b81526004016114b892919061562b565b602060405180830381600087803b1580156114d257600080fd5b505af11580156114e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150a91906147bd565b5060006115198360018b611795565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161159a92919061562b565b602060405180830381600087803b1580156115b457600080fd5b505af11580156115c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ec91906147bd565b507fe43c1d18e02c7393f6160e7258bca88538b1a522dc53998c38337cb57d44420889838360405161162093929190615b03565b60405180910390a1505050505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611665614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061171257506116c1614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906158f7565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806117c5600660008581526020019081526020016000206002015486608001516140e890919063ffffffff16565b90506000846117ea576006600085815260200190815260200160002060080154611802565b60066000858152602001908152602001600020600701545b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633275a7b683836008546040518463ffffffff1660e01b815260040161186593929190615b03565b60206040518083038186803b15801561187d57600080fd5b505afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b59190614c18565b925050509392505050565b6118c8614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806119755750611924614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab906158f7565b60405180910390fd5b600060066000838152602001908152602001600020600901600201541480156119f65750600060066000838152602001908152602001600020600e0160020154145b611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90615797565b60405180910390fd5b6060611a596006600084815260200190815260200160002060090160000154611ca2565b90506060611a7f60066000858152602001908152602001600020600e0160000154611ca2565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330e577318383611ae36006600089815260200190815260200160002060090160010154611ca2565b611b05600660008a8152602001908152602001600020600e0160010154611ca2565b600660008a815260200190815260200160002060060154896040518763ffffffff1660e01b8152600401611b3e9695949392919061571a565b600060405180830381600087803b158015611b5857600080fd5b505af1158015611b6c573d6000803e3d6000fd5b50505050505050565b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bac614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611c595750611c08614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f906158f7565b60405180910390fd5b80600b8190555050565b606080602067ffffffffffffffff81118015611cbd57600080fd5b506040519080825280601f01601f191660200182016040528015611cf05781602001600182028036833780820191505090505b5090506000805b6020811015611d935760008160080260020a8660001c0260001b9050600060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d855780848481518110611d4d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082806001019350505b508080600101915050611cf7565b5060608167ffffffffffffffff81118015611dad57600080fd5b506040519080825280601f01601f191660200182016040528015611de05781602001600182028036833780820191505090505b50905060005b82811015611e4d57838181518110611dfa57fe5b602001015160f81c60f81b828281518110611e1157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611de6565b50809350505050919050565b611e61614158565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee790615857565b60405180910390fd5b816006600083815260200190815260200160002060090160030181905550611f17816141b5565b5050565b611f23614158565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa990615857565b60405180910390fd5b8160066000838152602001908152602001600020600e0160030181905550611fd9816141b5565b5050565b611fe561453b565b604051806080016040528061204e600660008681526020019081526020016000206009016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050600186611795565b81526020016120b1600660008681526020019081526020016000206009016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050600086611795565b815260200161211460066000868152602001908152602001600020600e016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050600186611795565b815260200161217760066000868152602001908152602001600020600e016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050600086611795565b8152509050919050565b60006121c860646121ba60066000868152602001908152602001600020600501546121ac8688610b79565b6140e890919063ffffffff16565b61423990919063ffffffff16565b905092915050565b80600660008281526020019081526020016000206003015461221160066000848152602001908152602001600020600001544261428390919063ffffffff16565b10612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890615977565b60405180910390fd5b600061225c85612d29565b9050600061226a82856142cd565b905060006006600086815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490508282600001541480156122e65750828114806122e557506000801b81145b5b612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c906159b7565b60405180910390fd5b81600001546006600087815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506123ed866006600088815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461416090919063ffffffff16565b6006600087815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061245e86836004015461416090919063ffffffff16565b826004018190555060006124918760066000898152602001908152602001600020600201546140e890919063ffffffff16565b90507f27238bafe4942fdab575b632a51f3ab494e0c42bca4f50edbcba0c43b9b4eeea868983336040516124c89493929190615aa4565b60405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161252f939291906155cb565b602060405180830381600087803b15801561254957600080fd5b505af115801561255d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258191906147bd565b505050505050505050565b8060066000828152602001908152602001600020600301546125cd60066000848152602001908152602001600020600001544261428390919063ffffffff16565b1061260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490615977565b60405180910390fd5b600061261885612d29565b9050600061262585612d29565b90506126318185614329565b801561263d5750808214155b61267c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267390615957565b60405180910390fd5b816006600086815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90615917565b60405180910390fd5b600061272083866142cd565b9050600061272e83876142cd565b9050826006600088815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555060006006600088815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506127fd81846004015461428390919063ffffffff16565b836004018190555061281c81836004015461416090919063ffffffff16565b826004018190555060006128303389612181565b90506128478160075461416090919063ffffffff16565b6007819055507fd55789e69f821b8125cb322e83b696583c560834a44c3e6b7e0a0698eec87ab5888b8b3385604051612884959493929190615a43565b60405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016128eb939291906155cb565b602060405180830381600087803b15801561290557600080fd5b505af1158015612919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293d91906147bd565b5050505050505050505050565b60085481565b600061295a6144e0565b8460066000858152602001908152602001600020600901600001541461299557600660008481526020019081526020016000206009016129ac565b60066000848152602001908152602001600020600e015b6040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090506000612a236006600086815260200190815260200160002060020154612a1188876142cd565b600401546140e890919063ffffffff16565b90506000612a8e612a3684600088611795565b612a80612a458660018a611795565b612a72600660008b81526020019081526020016000206002015488608001516140e890919063ffffffff16565b61428390919063ffffffff16565b61428390919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8e62b97612ad88789610b79565b84846040518463ffffffff1660e01b8152600401612af893929190615b03565b60206040518083038186803b158015612b1057600080fd5b505afa158015612b24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b489190614c18565b93505050509392505050565b612b5c614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612c095750612bb8614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3f906158f7565b60405180910390fd5b8160066000838152602001908152602001600020600601819055505050565b612c6f614158565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf590615857565b60405180910390fd5b8160066000838152602001908152602001600020600e0160020181905550612d2581614372565b5050565b60006060829050600081511415612d46576000801b915050612d4f565b60208301519150505b919050565b612d5c614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612e095750612db8614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f906158f7565b60405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015612f8057600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639748ddaa306040518263ffffffff1660e01b8152600401612f4d91906155b0565b600060405180830381600087803b158015612f6757600080fd5b505af1158015612f7b573d6000803e3d6000fd5b505050505b5050565b612f8c614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806130395750612fe8614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306f906158f7565b60405180910390fd5b8060088190555050565b60095481565b613090614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061313d57506130ec614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61317c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613173906158f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e3906157f7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081426132ec6006600084815260200190815260200160002060010154600660008581526020019081526020016000206000015461416090919063ffffffff16565b1115806132f95750600081145b613338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332f90615937565b60405180910390fd5b600015156006600085815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515146133e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d9906157d7565b60405180910390fd5b60006006600085815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541180156134b3575060066000848152602001908152602001600020600401546006600085815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b6134f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e990615997565b60405180910390fd5b60016006600085815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600061358460066000868152602001908152602001600020600401543386612950565b905060006135928533610b79565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336135e6848661416090919063ffffffff16565b6040518363ffffffff1660e01b8152600401613603929190615602565b602060405180830381600087803b15801561361d57600080fd5b505af1158015613631573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365591906147bd565b507fbc53bf1be302bd318289a0e26b4d335ea1f62ea08ab40edf320b72af937d03058583833360405161368b9493929190615b3a565b60405180910390a1505050919050565b6136a3614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061375057506136ff614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61378f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613786906158f7565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006137dd614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061388a5750613839614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6138c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c0906158f7565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ae613b66040518163ffffffff1660e01b815260040160206040518083038186803b15801561393157600080fd5b505afa158015613945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139699190614c18565b82116139aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a190615897565b60405180910390fd5b6040518061016001604052804281526020018781526020018681526020018581526020016000801b8152602001848152602001600b5481526020016009548152602001600a5481526020016040518060a00160405280613a098e612d29565b8152602001613a178c612d29565b81526020016000815260200160008152602001600081525081526020016040518060a00160405280613a488d612d29565b8152602001613a568b612d29565b81526020016000815260200160008152602001600081525081525060066000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009016000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505061014082015181600e01600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015550509050507f32fc6bdba77976df88c26bbbdea972fce5c17afbaf8ec10a595569c0b8125f5582604051613b8d9190615a28565b60405180910390a1613b9e826118c0565b600190509998505050505050505050565b613bb7614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480613c645750613c13614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9a906158f7565b60405180910390fd5b826006600083815260200190815260200160002060070181905550816006600083815260200190815260200160002060080181905550505050565b613ce6614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480613d935750613d42614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dc9906158f7565b60405180910390fd5b8042613e136006600084815260200190815260200160002060010154600660008581526020019081526020016000206000015461416090919063ffffffff16565b111580613e205750600081145b613e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e5690615937565b60405180910390fd5b60006006600084815260200190815260200160002060090160030154148015613ea15750600060066000848152602001908152602001600020600e0160030154145b613ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ed7906158d7565b60405180910390fd5b6060613f046006600085815260200190815260200160002060090160000154611ca2565b90506060613f2a60066000868152602001908152602001600020600e0160000154611ca2565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b558a35f8383613f8e600660008a815260200190815260200160002060090160010154611ca2565b613fb0600660008b8152602001908152602001600020600e0160010154611ca2565b600660008b8152602001908152602001600020600601548a6040518763ffffffff1660e01b8152600401613fe99695949392919061571a565b600060405180830381600087803b15801561400357600080fd5b505af1158015614017573d6000803e3d6000fd5b5050505050505050565b614029614158565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140af90615857565b60405180910390fd5b8160066000838152602001908152602001600020600901600201819055506140df81614372565b5050565b600181565b6000808314156140fb5760009050614152565b600082840290508284828161410c57fe5b041461414d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614144906158b7565b60405180910390fd5b809150505b92915050565b600033905090565b6000808284019050838110156141ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141a290615837565b60405180910390fd5b8091505092915050565b60006006600083815260200190815260200160002060090160030154141580156141f95750600060066000838152602001908152602001600020600e016003015414155b15614236577f8eb944520f5e4e44b0e829a774d6c084b4f6a4b397d9a4f27df1942e13d8321a8160405161422d9190615a28565b60405180910390a15b50565b600061427b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143f6565b905092915050565b60006142c583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614457565b905092915050565b60008260066000848152602001908152602001600020600901600001541461430a5760066000838152602001908152602001600020600e01614321565b600660008381526020019081526020016000206009015b905092915050565b6000826006600084815260200190815260200160002060090160000154148061436a57508260066000848152602001908152602001600020600e0160000154145b905092915050565b60006006600083815260200190815260200160002060090160020154141580156143b65750600060066000838152602001908152602001600020600e016002015414155b156143f3577f7b23af8b7a1623b2d8dba9353b737cde209b8b0e24dddbb911acee9f5c724a40816040516143ea9190615a28565b60405180910390a15b50565b6000808311829061443d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161443491906156f8565b60405180910390fd5b50600083858161444957fe5b049050809150509392505050565b600083831115829061449f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161449691906156f8565b60405180910390fd5b5060008385039050809150509392505050565b6040518061028001604052806014905b6144ca614563565b8152602001906001900390816144c25790505090565b6040518060a0016040528060008019168152602001600080191681526020016000815260200160008152602001600081525090565b604051806060016040528060008019168152602001600081526020016000151581525090565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600080191681526020016000801916815260200160008152602001600081525090565b6000813590506145a781615dc4565b92915050565b6000813590506145bc81615ddb565b92915050565b6000815190506145d181615ddb565b92915050565b6000813590506145e681615df2565b92915050565b6000813590506145fb81615e09565b92915050565b60008151905061461081615e09565b92915050565b600082601f83011261462757600080fd5b813561463a61463582615c6a565b615c3d565b9150808252602083016020830185838301111561465657600080fd5b614661838284615d71565b50505092915050565b600060a0828403121561467c57600080fd5b61468660a0615c3d565b90506000614696848285016145d7565b60008301525060206146aa848285016145d7565b60208301525060406146be848285016146f2565b60408301525060606146d2848285016146f2565b60608301525060806146e6848285016146f2565b60808301525092915050565b60008135905061470181615e20565b92915050565b60008151905061471681615e20565b92915050565b60006020828403121561472e57600080fd5b600061473c84828501614598565b91505092915050565b6000806040838503121561475857600080fd5b600061476685828601614598565b9250506020614777858286016145ad565b9150509250929050565b6000806040838503121561479457600080fd5b60006147a285828601614598565b92505060206147b3858286016146f2565b9150509250929050565b6000602082840312156147cf57600080fd5b60006147dd848285016145c2565b91505092915050565b6000602082840312156147f857600080fd5b6000614806848285016145d7565b91505092915050565b60008060006060848603121561482457600080fd5b6000614832868287016145d7565b935050602061484386828701614598565b9250506040614854868287016146f2565b9150509250925092565b60006020828403121561487057600080fd5b600061487e848285016145ec565b91505092915050565b60006020828403121561489957600080fd5b60006148a784828501614601565b91505092915050565b600080604083850312156148c357600080fd5b60006148d1858286016145ec565b92505060206148e2858286016146f2565b9150509250929050565b6000602082840312156148fe57600080fd5b600082013567ffffffffffffffff81111561491857600080fd5b61492484828501614616565b91505092915050565b60008060006060848603121561494257600080fd5b600084013567ffffffffffffffff81111561495c57600080fd5b61496886828701614616565b935050602061497986828701614598565b925050604061498a868287016146f2565b9150509250925092565b60008060008060008060008060006101208a8c0312156149b357600080fd5b60008a013567ffffffffffffffff8111156149cd57600080fd5b6149d98c828d01614616565b99505060208a013567ffffffffffffffff8111156149f657600080fd5b614a028c828d01614616565b98505060408a013567ffffffffffffffff811115614a1f57600080fd5b614a2b8c828d01614616565b97505060608a013567ffffffffffffffff811115614a4857600080fd5b614a548c828d01614616565b9650506080614a658c828d016146f2565b95505060a0614a768c828d016146f2565b94505060c0614a878c828d016146f2565b93505060e0614a988c828d016146f2565b925050610100614aaa8c828d016146f2565b9150509295985092959850929598565b600080600060608486031215614acf57600080fd5b600084013567ffffffffffffffff811115614ae957600080fd5b614af586828701614616565b935050602084013567ffffffffffffffff811115614b1257600080fd5b614b1e86828701614616565b9250506040614b2f868287016146f2565b9150509250925092565b600080600060608486031215614b4e57600080fd5b600084013567ffffffffffffffff811115614b6857600080fd5b614b7486828701614616565b9350506020614b85868287016146f2565b9250506040614b96868287016146f2565b9150509250925092565b600080600060e08486031215614bb557600080fd5b6000614bc38682870161466a565b93505060a0614bd4868287016145ad565b92505060c0614be5868287016146f2565b9150509250925092565b600060208284031215614c0157600080fd5b6000614c0f848285016146f2565b91505092915050565b600060208284031215614c2a57600080fd5b6000614c3884828501614707565b91505092915050565b60008060408385031215614c5457600080fd5b6000614c62858286016146f2565b9250506020614c7385828601614598565b9150509250929050565b60008060408385031215614c9057600080fd5b6000614c9e858286016146f2565b925050602083013567ffffffffffffffff811115614cbb57600080fd5b614cc785828601614616565b9150509250929050565b60008060408385031215614ce457600080fd5b6000614cf2858286016146f2565b9250506020614d03858286016146f2565b9150509250929050565b600080600060608486031215614d2257600080fd5b6000614d30868287016146f2565b9350506020614d41868287016146f2565b9250506040614d52868287016146f2565b9150509250925092565b6000614d68838361552a565b60a08301905092915050565b614d7d81615d3b565b82525050565b614d8c81615cdf565b82525050565b614d9b81615ca0565b614da58184615cc3565b9250614db082615c96565b8060005b83811015614de1578151614dc88782614d5c565b9650614dd383615cb6565b925050600181019050614db4565b505050505050565b614df281615cf1565b82525050565b614e0181615cf1565b82525050565b614e1081615cfd565b82525050565b614e1f81615cfd565b82525050565b614e2e81615d07565b82525050565b6000614e3f82615cab565b614e498185615cce565b9350614e59818560208601615d80565b614e6281615db3565b840191505092915050565b6000614e7a601b83615cce565b91507f4f70656e2070726963657320616c7265616479206665746368656400000000006000830152602082019050919050565b6000614eba601783615cce565b91507f4f70656e20707269636573206e6f7420666574636865640000000000000000006000830152602082019050919050565b6000614efa601f83615cce565b91507f596f7520616c726561647920636c61696d656420796f757220726577617264006000830152602082019050919050565b6000614f3a602683615cce565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614fa0601783615cce565b91507f57696e6e657220616c72656164792073656c65637465640000000000000000006000830152602082019050919050565b6000614fe0600683615cce565b91507f424f5547485400000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000615020601b83615cce565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000615060602b83615cce565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260008301527f206f7220746865206c69620000000000000000000000000000000000000000006020830152604082019050919050565b60006150c6601883615cce565b91507f436c6f736520707269636573206e6f74206665746368656400000000000000006000830152602082019050919050565b6000615106601883615cce565b91507f57617220696e64657820616c72656164792065786973747300000000000000006000830152602082019050919050565b6000615146602183615cce565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006151ac601c83615cce565b91507f436c6f73652070726963657320616c72656164792066657463686564000000006000830152602082019050919050565b60006151ec602083615cce565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061522c602083615cce565b91507f5573657220646f65736e27742062656c6f6e6720746f2066726f6d486f7573656000830152602082019050919050565b600061526c601883615cce565b91507f43757272656e7420776172206e6f742066696e697368656400000000000000006000830152602082019050919050565b60006152ac601883615cce565b91507f486f757365206e6f7420696e20636f6d7065746974696f6e00000000000000006000830152602082019050919050565b60006152ec600583615cce565b91507f434c41494d0000000000000000000000000000000000000000000000000000006000830152602082019050919050565b600061532c601d83615cce565b91507f5075726368617365207469636b65747320706572696f6420656e6465640000006000830152602082019050919050565b600061536c602483615cce565b91507f5573657220646f65736e27742062656c6f6e6720746f2077696e6e696e67206860008301527f6f757365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006153d2602b83615cce565b91507f596f752063616e206e6f7420627579207469636b65747320666f72207468652060008301527f6f7468657220686f7573650000000000000000000000000000000000000000006020830152604082019050919050565b6080820160008201516154416000850182615592565b5060208201516154546020850182615592565b5060408201516154676040850182615592565b50606082015161547a6060850182615592565b50505050565b60a0820160008201516154966000850182614e07565b5060208201516154a96020850182614e07565b5060408201516154bc6040850182615592565b5060608201516154cf6060850182615592565b5060808201516154e26080850182615592565b50505050565b6060820160008201516154fe6000850182614e07565b5060208201516155116020850182615592565b5060408201516155246040850182614de9565b50505050565b60a0820160008201516155406000850182615592565b5060208201516155536020850182614e07565b5060408201516155666040850182614e07565b5060608201516155796060850182615592565b50608082015161558c6080850182615592565b50505050565b61559b81615d31565b82525050565b6155aa81615d31565b82525050565b60006020820190506155c56000830184614d83565b92915050565b60006060820190506155e06000830186614d74565b6155ed6020830185614d83565b6155fa60408301846155a1565b949350505050565b60006040820190506156176000830185614d74565b61562460208301846155a1565b9392505050565b60006040820190506156406000830185614d83565b61564d60208301846155a1565b9392505050565b6000610c808201905061566a6000830184614d92565b92915050565b60006020820190506156856000830184614df8565b92915050565b60006020820190506156a06000830184614e16565b92915050565b60006020820190506156bb6000830184614e25565b92915050565b60006060820190506156d66000830186614e25565b6156e36020830185614e25565b6156f06040830184614e25565b949350505050565b600060208201905081810360008301526157128184614e34565b905092915050565b600060c08201905081810360008301526157348189614e34565b905081810360208301526157488188614e34565b9050818103604083015261575c8187614e34565b905081810360608301526157708186614e34565b905061577f6080830185614e25565b61578c60a08301846155a1565b979650505050505050565b600060208201905081810360008301526157b081614e6d565b9050919050565b600060208201905081810360008301526157d081614ead565b9050919050565b600060208201905081810360008301526157f081614eed565b9050919050565b6000602082019050818103600083015261581081614f2d565b9050919050565b6000602082019050818103600083015261583081614f93565b9050919050565b6000602082019050818103600083015261585081615013565b9050919050565b6000602082019050818103600083015261587081615053565b9050919050565b60006020820190508181036000830152615890816150b9565b9050919050565b600060208201905081810360008301526158b0816150f9565b9050919050565b600060208201905081810360008301526158d081615139565b9050919050565b600060208201905081810360008301526158f08161519f565b9050919050565b60006020820190508181036000830152615910816151df565b9050919050565b600060208201905081810360008301526159308161521f565b9050919050565b600060208201905081810360008301526159508161525f565b9050919050565b600060208201905081810360008301526159708161529f565b9050919050565b600060208201905081810360008301526159908161531f565b9050919050565b600060208201905081810360008301526159b08161535f565b9050919050565b600060208201905081810360008301526159d0816153c5565b9050919050565b60006080820190506159ec600083018461542b565b92915050565b600060a082019050615a076000830184615480565b92915050565b6000606082019050615a2260008301846154e8565b92915050565b6000602082019050615a3d60008301846155a1565b92915050565b600060a082019050615a5860008301886155a1565b8181036020830152615a6a8187614e34565b90508181036040830152615a7e8186614e34565b9050615a8d6060830185614d74565b615a9a60808301846155a1565b9695505050505050565b600060a082019050615ab960008301876155a1565b8181036020830152615acb8186614e34565b9050615ada60408301856155a1565b615ae76060830184614d74565b8181036080830152615af881614fd3565b905095945050505050565b6000606082019050615b1860008301866155a1565b615b2560208301856155a1565b615b3260408301846155a1565b949350505050565b600060a082019050615b4f60008301876155a1565b615b5c60208301866155a1565b615b6960408301856155a1565b615b766060830184614d74565b8181036080830152615b87816152df565b905095945050505050565b600061026082019050615ba8600083018e6155a1565b615bb5602083018d6155a1565b615bc2604083018c6155a1565b615bcf606083018b6155a1565b615bdc608083018a614e16565b615be960a08301896155a1565b615bf660c0830188614e25565b615c0360e08301876155a1565b615c116101008301866155a1565b615c1f610120830185615480565b615c2d6101c0830184615480565b9c9b505050505050505050505050565b6000604051905081810181811067ffffffffffffffff82111715615c6057600080fd5b8060405250919050565b600067ffffffffffffffff821115615c8157600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b600060149050919050565b600081519050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b6000615cea82615d11565b9050919050565b60008115159050919050565b6000819050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615d4682615d4d565b9050919050565b6000615d5882615d5f565b9050919050565b6000615d6a82615d11565b9050919050565b82818337600083830152505050565b60005b83811015615d9e578082015181840152602081019050615d83565b83811115615dad576000848401525b50505050565b6000601f19601f8301169050919050565b615dcd81615cdf565b8114615dd857600080fd5b50565b615de481615cf1565b8114615def57600080fd5b50565b615dfb81615cfd565b8114615e0657600080fd5b50565b615e1281615d07565b8114615e1d57600080fd5b50565b615e2981615d31565b8114615e3457600080fd5b5056fea26469706673582212202711d3bc1719ec47fe71282d53e7b55d1c02400b02b50396f1b256df67a8c48464736f6c634300060c0033

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

000000000000000000000000fab5a05c933f1a2463e334e011992e897d56ef0a000000000000000000000000ee302900ab9792c42a1d19990520fc2a541d98f70000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : dotxTokenAddress (address): 0xFAb5a05C933f1A2463E334E011992E897D56eF0a
Arg [1] : dotxLibAddr (address): 0xee302900aB9792c42A1D19990520fC2A541D98f7
Arg [2] : setupAddressInLib (bool): True

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000fab5a05c933f1a2463e334e011992e897d56ef0a
Arg [1] : 000000000000000000000000ee302900ab9792c42a1d19990520fc2a541d98f7
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001


Deployed Bytecode Sourcemap

8875:23324:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11128:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26034:465;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25288:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10904:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10804:35;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;25068:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29520:283;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7367:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24568:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28037:166;;;:::i;:::-;;27288:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21107:1443;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7759:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7852:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30652:473;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19633:622;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11085:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7668:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27799:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31573:623;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23330:180;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23612:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25637:385;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24791:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14937:1365;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16556:1699;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10986:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29816:824;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27570:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23050:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31190:318;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28276:312;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26718:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11045:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8477:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18404:1013;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28659:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13758:929;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26946:254;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20357:658;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22772:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9014:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11128:35;;;;:::o;26034:465::-;26104:20;;:::i;:::-;26136:27;;:::i;:::-;26174:9;26186:3;26174:15;;26200:13;26228:240;26242:2;26234:5;:10;:34;;;;;26267:1;26260:3;26254;:9;26253:15;26248:1;:20;;26234:34;26228:240;;;26301:114;;;;;;;;26311:1;26301:114;;;;26314:4;:7;26319:1;26314:7;;;;;;;;;;;:18;;:30;;;26301:114;;;;26346:4;:7;26351:1;26346:7;;;;;;;;;;;:19;;:31;;;26301:114;;;;26379:4;:7;26384:1;26379:7;;;;;;;;;;;:17;;;26301:114;;;;26398:4;:7;26403:1;26398:7;;;;;;;;;;;:16;;;26301:114;;;26284:6;26291:5;26284:13;;;;;;;;;;:132;;;;26431:3;;;;;;;26449:7;;;;;;;26228:240;;;26485:6;26478:13;;;;;26034:465;;;;:::o;25288:286::-;25372:12;;:::i;:::-;25396:14;25413:28;25429:11;25413:15;:28::i;:::-;25396:45;;25501:6;25459:4;:15;25464:9;25459:15;;;;;;;;;;;:26;;:38;;;:48;:107;;25539:4;:15;25544:9;25539:15;;;;;;;;;;;:27;;25459:107;;;25510:4;:15;25515:9;25510:15;;;;;;;;;;;:26;;25459:107;25452:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25288:286;;;;:::o;10904:24::-;;;;:::o;10804:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25068:149::-;25145:11;;:::i;:::-;25175:4;:15;25180:9;25175:15;;;;;;;;;;;:21;;:34;25197:11;25175:34;;;;;;;;;;;;;;;25168:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25068:149;;;;:::o;29520:283::-;29640:7;29659:26;29688:30;29704:13;29688:15;:30::i;:::-;29659:59;;29736;29753:18;29773:11;29786:8;29736:16;:59::i;:::-;29729:66;;;29520:283;;;;;:::o;7367:29::-;;;;;;;;;;;;;:::o;24568:205::-;24658:7;24684:81;24737:4;:15;24742:9;24737:15;;;;;;;;;;;:27;;;24684:4;:15;24689:9;24684:15;;;;;;;;;;;:21;;:34;24706:11;24684:34;;;;;;;;;;;;;;;:48;;;:52;;:81;;;;:::i;:::-;24677:88;;24568:205;;;;:::o;28037:166::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;28123:9:::1;;;;;;;;;;;:18;;;28142:7;:5;:7::i;:::-;28151:9;;28123:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28194:1;28182:9;:13;;;;28037:166::o:0;27288:203::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;27419:15:::1;27402:14;:32;;;;27465:18;27445:17;:38;;;;27288:203:::0;;:::o;21107:1443::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;21189:8:::1;11870:3;11813:53;11842:4;:14;11847:8;11842:14;;;;;;;;;;;:23;;;11813:4;:14;11818:8;11813:14;;;;;;;;;;;:24;;;:28;;:53;;;;:::i;:::-;:60;;:77;;;;11889:1;11877:8;:13;11813:77;11805:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;21219:8:::2;12456:1;12417:4;:14;12422:8;12417:14;;;;;;;;;;;:25;;:35;;;:40;;:85;;;;;12501:1;12461:4;:14;12466:8;12461:14;;;;;;;;;;;:26;;:36;;;:41;;12417:85;12409:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;12589:1;12549:4;:14;12554:8;12549:14;;;;;;;;;;;:25;;:36;;;:41;;:87;;;;;12635:1;12594:4;:14;12599:8;12594:14;;;;;;;;;;;:26;;:37;;;:42;;12549:87;12541:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;21279:1:::3;21248:32:::0;::::3;:4;:14;21253:8;21248:14;;;;;;;;;;;:27;;;:32;21240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21329:16;21355:22;;21329:49;;21399:21;21424:7;;;;;;;;;;;:26;;;21458:4;:14;21463:8;21458:14;;;;;;;;;;;:25;;:35;;;21503:4;:14;21508:8;21503:14;;;;;;;;;;;:25;;:36;;;21542:9;21424:128;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21399:153;;21563:22;21588:7;;;;;;;;;;;:26;;;21622:4;:14;21627:8;21622:14;;;;;;;;;;;:26;;:36;;;21668:4;:14;21673:8;21668:14;;;;;;;;;;;:26;;:37;;;21708:9;21588:130;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21563:155;;21815:15;21798:14;:32;:89;;21861:4;:14;21866:8;21861:14;;;;;;;;;;;:26;;21798:89;;;21833:4;:14;21838:8;21833:14;;;;;;;;;;;:25;;21798:89;21797:103;;;21767:4;:14;21772:8;21767:14;;;;;;;;;;;:27;;:133;;;;21911:24;;:::i;:::-;21956:15;21939:14;:32;:89;;22003:4;:14;22008:8;22003:14;;;;;;;;;;;:25;;21939:89;;;21974:4;:14;21979:8;21974:14;;;;;;;;;;;:26;;21939:89;21911:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;22114:17;22134:49;22155:11;22168:4;22174:8;22134:20;:49::i;:::-;22114:69;;22194:9;;;;;;;;;;;:18;;;9053:42;22227:9;22194:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22341:20;22364:49;22385:11;22398:4;22404:8;22364:20;:49::i;:::-;22341:72;;22424:9;;;;;;;;;;;:18;;;22443:14;;;;;;;;;;;22459:12;22424:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22498:44;22508:8;22518:9;22529:12;22498:44;;;;;;;;:::i;:::-;;;;;;;;12676:1;;;;;;11930::::2;8096::::1;21107:1443:::0;:::o;7759:81::-;7798:7;7825;;;;;;;;;;;7818:14;;7759:81;:::o;7852:99::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;7931:12:::1;7921:7;;:22;;;;;;;;;;;;;;;;;;7852:99:::0;:::o;30652:473::-;30753:7;30772:30;30805:51;30829:4;:14;30834:8;30829:14;;;;;;;;;;;:26;;;30805:5;:19;;;:23;;:51;;;;:::i;:::-;30772:84;;30867:18;30889:6;:73;;30930:4;:14;30935:8;30930:14;;;;;;;;;;;:32;;;30889:73;;;30898:4;:14;30903:8;30898:14;;;;;;;;;;;:29;;;30889:73;30867:95;;31030:7;;;;;;;;;;;:27;;;31058:22;31082:10;31094:22;;31030:87;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31023:94;;;;30652:473;;;;;:::o;19633:622::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;19755:1:::1;19716:4;:14;19721:8;19716:14;;;;;;;;;;;:25;;:35;;;:40;:85;;;;;19800:1;19760:4;:14;19765:8;19760:14;;;;;;;;;;;:26;;:36;;;:41;19716:85;19708:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;19854:24;19881:54;19897:4;:14;19902:8;19897:14;;;;;;;;;;;:25;;:37;;;19881:15;:54::i;:::-;19854:81;;19946:25;19974:55;19990:4;:14;19995:8;19990:14;;;;;;;;;;;:26;;:38;;;19974:15;:55::i;:::-;19946:83;;20050:7;;;;;;;;;;;:27;;;20078:10;20090:11;20103:50;20119:4;:14;20124:8;20119:14;;;;;;;;;;;:25;;:33;;;20103:15;:50::i;:::-;20155:51;20171:4;:14;20176:8;20171:14;;;;;;;;;;;:26;;:34;;;20155:15;:51::i;:::-;20208:4;:14;20213:8;20208:14;;;;;;;;;;;:28;;;20238:8;20050:197;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8096:1;;19633:622:::0;:::o;11085:36::-;;;;:::o;7668:79::-;7706:7;7733:6;;;;;;;;;;;7726:13;;7668:79;:::o;27799:114::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;27891:14:::1;27875:13;:30;;;;27799:114:::0;:::o;31573:623::-;31630:13;31656:24;31693:2;31683:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31656:40;;31707:14;31741:6;31736:229;31757:2;31753:1;:6;31736:229;;;31781:9;31826:1;31822;:5;31816:1;:12;31811:1;31806:7;;:22;31798:31;;31781:49;;31857:1;31849:9;;:4;:9;;;;31845:109;;31904:4;31879:11;31891:9;31879:22;;;;;;;;;;;:29;;;;;;;;;;;31927:11;;;;;;;31845:109;31736:229;31761:3;;;;;;;31736:229;;;;31975:31;32019:9;32009:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31975:54;;32045:9;32040:105;32064:9;32060:1;:13;32040:105;;;32119:11;32131:1;32119:14;;;;;;;;;;;;;;;;32095:18;32114:1;32095:21;;;;;;;;;;;:38;;;;;;;;;;;32075:3;;;;;;;32040:105;;;;32169:18;32155:33;;;;;31573:623;;;:::o;23330:180::-;8389:12;:10;:12::i;:::-;8371:30;;:14;;;;;;;;;;;:30;;;8363:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;23460:6:::1;23421:4;:14;23426:8;23421:14;;;;;;;;;;;:25;;:36;;:45;;;;23477:25;23493:8;23477:15;:25::i;:::-;23330:180:::0;;:::o;23612:182::-;8389:12;:10;:12::i;:::-;8371:30;;:14;;;;;;;;;;;:30;;;8363:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;23744:6:::1;23704:4;:14;23709:8;23704:14;;;;;;;;;;;:26;;:37;;:46;;;;23761:25;23777:8;23761:15;:25::i;:::-;23612:182:::0;;:::o;25637:385::-;25697:16;;:::i;:::-;25732:282;;;;;;;;25742:63;25763:4;:14;25768:8;25763:14;;;;;;;;;;;:25;;25742:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25790:4;25796:8;25742:20;:63::i;:::-;25732:282;;;;25807:64;25828:4;:14;25833:8;25828:14;;;;;;;;;;;:25;;25807:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25855:5;25862:8;25807:20;:64::i;:::-;25732:282;;;;25882:64;25903:4;:14;25908:8;25903:14;;;;;;;;;;;:26;;25882:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25931:4;25937:8;25882:20;:64::i;:::-;25732:282;;;;25948:65;25969:4;:14;25974:8;25969:14;;;;;;;;;;;:26;;25948:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25997:5;26004:8;25948:20;:65::i;:::-;25732:282;;;25725:289;;25637:385;;;:::o;24791:213::-;24881:7;24907:89;24992:3;24908:78;24956:4;:14;24961:8;24956:14;;;;;;;;;;;:29;;;24908:43;24929:8;24939:11;24908:20;:43::i;:::-;:47;;:78;;;;:::i;:::-;24907:84;;:89;;;;:::i;:::-;24900:96;;24791:213;;;;:::o;14937:1365::-;15057:8;12248:4;:14;12253:8;12248:14;;;;;;;;;;;:29;;;12212:33;12220:4;:14;12225:8;12220:14;;;;;;;;;;;:24;;;12212:3;:7;;:33;;;;:::i;:::-;:65;12204:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;15078:19:::1;15100:29;15116:12;15100:15;:29::i;:::-;15078:51;;15169:23;15195:34;15207:11;15220:8;15195:11;:34::i;:::-;15169:60;;15345:23;15371:4;:14;15376:8;15371:14;;;;;;;;;;;:20;;:32;15392:10;15371:32;;;;;;;;;;;;;;;:44;;;15345:70;;15459:11;15434:9;:21;;;:36;:96;;;;;15494:11;15475:15;:30;:54;;;;15528:1;15509:20:::0;::::1;:15;:20;15475:54;15434:96;15426:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;15638:9;:21;;;15591:4;:14;15596:8;15591:14;;;;;;;;;;;:20;;:32;15612:10;15591:32;;;;;;;;;;;;;;;:44;;:68;;;;15752:67;15803:15;15752:4;:14;15757:8;15752:14;;;;;;;;;;;:20;;:32;15773:10;15752:32;;;;;;;;;;;;;;;:46;;;:50;;:67;;;;:::i;:::-;15703:4;:14;15708:8;15703:14;;;;;;;;;;;:20;;:32;15724:10;15703:32;;;;;;;;;;;;;;;:46;;:116;;;;15915:44;15943:15;15915:9;:23;;;:27;;:44;;;;:::i;:::-;15889:9;:23;;:70;;;;15980:19;16002:47;16033:15;16002:4;:14;16007:8;16002:14;;;;;;;;;;;:26;;;:30;;:47;;;;:::i;:::-;15980:69;;16115:71;16128:8;16138:12;16152:11;16165:10;16115:71;;;;;;;;;:::i;:::-;;;;;;;;16232:9;;;;;;;;;;;:22;;;16255:10;16275:4;16282:11;16232:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12331:1;;;;14937:1365:::0;;;;:::o;16556:1699::-;16689:8;12248:4;:14;12253:8;12248:14;;;;;;;;;;;:29;;;12212:33;12220:4;:14;12225:8;12220:14;;;;;;;;;;;:24;;;12212:3;:7;;:33;;;;:::i;:::-;:65;12204:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;16712:23:::1;16738:33;16754:16;16738:15;:33::i;:::-;16712:59;;16782:21;16806:31;16822:14;16806:15;:31::i;:::-;16782:55;;16938:50;16964:13;16979:8;16938:25;:50::i;:::-;:86;;;;;17011:13;16992:15;:32;;16938:86;16930:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;17168:15;17120:4;:14;17125:8;17120:14;;;;;;;;;;;:20;;:32;17141:10;17120:32;;;;;;;;;;;;;;;:44;;;:63;17112:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;17241:23;17267:38;17279:15;17296:8;17267:11;:38::i;:::-;17241:64;;17316:21;17340:36;17352:13;17367:8;17340:11;:36::i;:::-;17316:60;;17477:13;17430:4;:14;17435:8;17430:14;;;;;;;;;;;:20;;:32;17451:10;17430:32;;;;;;;;;;;;;;;:44;;:60;;;;17547:27;17577:4;:14;17582:8;17577:14;;;;;;;;;;;:20;;:32;17598:10;17577:32;;;;;;;;;;;;;;;:46;;;17547:76;;17660:48;17688:19;17660:9;:23;;;:27;;:48;;;;:::i;:::-;17634:9;:23;;:74;;;;17787:46;17813:19;17787:7;:21;;;:25;;:46;;;;:::i;:::-;17763:7;:21;;:70;;;;17874:20;17897:43;17919:10;17931:8;17897:21;:43::i;:::-;17874:66;;17992:27;18006:12;17992:9;;:13;;:27;;;;:::i;:::-;17980:9;:39;;;;18045:81;18057:8;18067:16;18085:14;18101:10;18113:12;18045:81;;;;;;;;;;:::i;:::-;;;;;;;;18184:9;;;;;;;;;;;:22;;;18207:10;18227:4;18234:12;18184:63;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12331:1;;;;;;16556:1699:::0;;;;:::o;10986:46::-;;;;:::o;29816:824::-;29924:7;29967:24;;:::i;:::-;30035:13;29994:4;:14;29999:8;29994:14;;;;;;;;;;;:25;;:37;;;:54;:111;;30080:4;:14;30085:8;30080:14;;;;;;;;;;;:25;;29994:111;;;30051:4;:14;30056:8;30051:14;;;;;;;;;;;:26;;29994:111;29967:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30167:29;30199:82;30254:4;:14;30259:8;30254:14;;;;;;;;;;;:26;;;30199:36;30211:13;30226:8;30199:11;:36::i;:::-;:50;;;:54;;:82;;;;:::i;:::-;30167:114;;30292:28;30323:168;30440:50;30461:11;30474:5;30481:8;30440:20;:50::i;:::-;30323:112;30385:49;30406:11;30419:4;30425:8;30385:20;:49::i;:::-;30323:57;30353:4;:14;30358:8;30353:14;;;;;;;;;;;:26;;;30323:11;:25;;;:29;;:57;;;;:::i;:::-;:61;;:112;;;;:::i;:::-;:116;;:168;;;;:::i;:::-;30292:199;;30519:7;;;;;;;;;;;:23;;;30543:43;30564:8;30574:11;30543:20;:43::i;:::-;30588:21;30611:20;30519:113;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30512:120;;;;;29816:824;;;;;:::o;27570:150::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;27698:14:::1;27667:4;:14;27672:8;27667:14;;;;;;;;;;;:28;;:45;;;;27570:150:::0;;:::o;23050:179::-;8389:12;:10;:12::i;:::-;8371:30;;:14;;;;;;;;;;;:30;;;8363:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;23180:6:::1;23141:4;:14;23146:8;23141:14;;;;;;;;;;;:26;;:36;;:45;;;;23197:24;23212:8;23197:14;:24::i;:::-;23050:179:::0;;:::o;31190:318::-;31258:14;31285:32;31326:6;31285:48;;31378:1;31348:19;:26;:31;31344:74;;;31403:3;31396:10;;;;;;;31344:74;31486:2;31478:6;31474:15;31468:22;31458:32;;31443:58;;;;;:::o;28276:312::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;28432:11:::1;28415:14;;:28;;;;;;;;;;;;;;;;;;28473:14;;;;;;;;;;;28454:7;;:34;;;;;;;;;;;;;;;;;;28502:17;28499:82;;;28535:7;;;;;;;;;;;:19;;;28563:4;28535:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28499:82;28276:312:::0;;:::o;26718:124::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;26824:10:::1;26799:22;:35;;;;26718:124:::0;:::o;11045:33::-;;;;:::o;8477:244::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;8586:1:::1;8566:22;;:8;:22;;;;8558:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8676:8;8647:38;;8668:6;::::0;::::1;;;;;;;;8647:38;;;;;;;;;;;;8705:8;8696:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;8477:244:::0;:::o;18404:1013::-;18503:4;18485:8;11870:3;11813:53;11842:4;:14;11847:8;11842:14;;;;;;;;;;;:23;;;11813:4;:14;11818:8;11813:14;;;;;;;;;;;:24;;;:28;;:53;;;;:::i;:::-;:60;;:77;;;;11889:1;11877:8;:13;11813:77;11805:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;18617:5:::1;18567:55;;:4;:14;18572:8;18567:14;;;;;;;;;;;:20;;:32;18588:10;18567:32;;;;;;;;;;;;;;;:46;;;;;;;;;;;;:55;;;18559:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;18786:1;18737:4;:14;18742:8;18737:14;;;;;;;;;;;:20;;:32;18758:10;18737:32;;;;;;;;;;;;;;;:46;;;:50;:129;;;;;18839:4;:14;18844:8;18839:14;;;;;;;;;;;:27;;;18791:4;:14;18796:8;18791:14;;;;;;;;;;;:20;;:32;18812:10;18791:32;;;;;;;;;;;;;;;:44;;;:75;18737:129;18729:178;;;;;;;;;;;;:::i;:::-;;;;;;;;;19014:4;18965;:14;18970:8;18965:14;;;;;;;;;;;:20;;:32;18986:10;18965:32;;;;;;;;;;;;;;;:46;;;:53;;;;;;;;;;;;;;;;;;19097:14;19114:67;19131:4;:14;19136:8;19131:14;;;;;;;;;;;:27;;;19160:10;19172:8;19114:16;:67::i;:::-;19097:84;;19192:15;19210:42;19231:8;19241:10;19210:20;:42::i;:::-;19192:60;;19273:9;;;;;;;;;;;:18;;;19292:10;19304:19;19315:7;19304:6;:10;;:19;;;;:::i;:::-;19273:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19350:59;19362:8;19372:6;19380:7;19389:10;19350:59;;;;;;;;;:::i;:::-;;;;;;;;11930:1;;18404:1013:::0;;;;:::o;28659:110::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;28751:10:::1;28734:14;;:27;;;;;;;;;;;;;;;;;;28659:110:::0;:::o;13758:929::-;14049:4;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;14127:7:::1;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14115:9;:33;14107:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14240:309;;;;;;;;14244:3;14240:309;;;;14249:9;14240:309;;;;14260:12;14240:309;;;;14274:15;14240:309;;;;14291:1;14240:309:::0;::::1;;;;;14294:15;14240:309;;;;14311:13;;14240:309;;;;14326:14;;14240:309;;;;14342:17;;14240:309;;;;14371:82;;;;;;;;14377:34;14393:17;14377:15;:34::i;:::-;14371:82;;;;14413:30;14429:13;14413:15;:30::i;:::-;14371:82;;;;14445:1;14371:82;;;;14448:1;14371:82;;;;14451:1;14371:82;;::::0;14240:309:::1;;;;14464:84;;;;;;;;14470:35;14486:18;14470:15;:35::i;:::-;14464:84;;;;14507:31;14523:14;14507:15;:31::i;:::-;14464:84;;;;14540:1;14464:84;;;;14543:1;14464:84;;;;14546:1;14464:84;;::::0;14240:309:::1;;::::0;14222:4:::1;:15;14227:9;14222:15;;;;;;;;;;;:327;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14575:21;14586:9;14575:21;;;;;;:::i;:::-;;;;;;;;14617:30;14637:9;14617:19;:30::i;:::-;14675:4;14668:11;;13758:929:::0;;;;;;;;;;;:::o;26946:254::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;27113:15:::1;27081:4;:14;27086:8;27081:14;;;;;;;;;;;:29;;:47;;;;27174:18;27139:4;:14;27144:8;27139:14;;;;;;;;;;;:32;;:53;;;;26946:254:::0;;;:::o;20357:658::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;20445:8:::1;11870:3;11813:53;11842:4;:14;11847:8;11842:14;;;;;;;;;;;:23;;;11813:4;:14;11818:8;11813:14;;;;;;;;;;;:24;;;:28;;:53;;;;:::i;:::-;:60;;:77;;;;11889:1;11877:8;:13;11813:77;11805:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;20514:1:::2;20474:4;:14;20479:8;20474:14;;;;;;;;;;;:25;;:36;;;:41;:87;;;;;20560:1;20519:4;:14;20524:8;20519:14;;;;;;;;;;;:26;;:37;;;:42;20474:87;20466:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;20615:24;20642:54;20658:4;:14;20663:8;20658:14;;;;;;;;;;;:25;;:37;;;20642:15;:54::i;:::-;20615:81;;20707:25;20735:55;20751:4;:14;20756:8;20751:14;;;;;;;;;;;:26;;:38;;;20735:15;:55::i;:::-;20707:83;;20811:7;;;;;;;;;;;:26;;;20838:10;20850:11;20863:50;20879:4;:14;20884:8;20879:14;;;;;;;;;;;:25;;:33;;;20863:15;:50::i;:::-;20915:51;20931:4;:14;20936:8;20931:14;;;;;;;;;;;:26;;:34;;;20915:15;:51::i;:::-;20968:4;:14;20973:8;20968:14;;;;;;;;;;;:28;;;20998:8;20811:196;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;11930:1;;8096::::1;20357:658:::0;:::o;22772:177::-;8389:12;:10;:12::i;:::-;8371:30;;:14;;;;;;;;;;;:30;;;8363:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;22900:6:::1;22862:4;:14;22867:8;22862:14;;;;;;;;;;;:25;;:35;;:44;;;;22917:24;22932:8;22917:14;:24::i;:::-;22772:177:::0;;:::o;9014:81::-;9053:42;9014:81;:::o;2771:471::-;2829:7;3079:1;3074;:6;3070:47;;;3104:1;3097:8;;;;3070:47;3129:9;3145:1;3141;:5;3129:17;;3174:1;3169;3165;:5;;;;;;:10;3157:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3233:1;3226:8;;;2771:471;;;;;:::o;7037:106::-;7090:15;7125:10;7118:17;;7037:106;:::o;1417:181::-;1475:7;1495:9;1511:1;1507;:5;1495:17;;1536:1;1531;:6;;1523:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1589:1;1582:8;;;1417:181;;;;:::o;24152:219::-;24257:1;24217:4;:14;24222:8;24217:14;;;;;;;;;;;:25;;:36;;;:41;;:87;;;;;24303:1;24262:4;:14;24267:8;24262:14;;;;;;;;;;;:26;;:37;;;:42;;24217:87;24214:150;;;24325:27;24343:8;24325:27;;;;;;:::i;:::-;;;;;;;;24214:150;24152:219;:::o;3718:132::-;3776:7;3803:39;3807:1;3810;3803:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3796:46;;3718:132;;;;:::o;1881:136::-;1939:7;1966:43;1970:1;1973;1966:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1959:50;;1881:136;;;;:::o;28881:220::-;28957:13;29030:6;28989:4;:14;28994:8;28989:14;;;;;;;;;;;:25;;:37;;;:47;:104;;29067:4;:14;29072:8;29067:14;;;;;;;;;;;:26;;28989:104;;;29039:4;:14;29044:8;29039:14;;;;;;;;;;;:25;;28989:104;28982:111;;28881:220;;;;:::o;29201:238::-;29297:4;29361:12;29320:4;:14;29325:8;29320:14;;;;;;;;;;;:25;;:37;;;:53;:111;;;;29419:12;29377:4;:14;29382:8;29377:14;;;;;;;;;;;:26;;:38;;;:54;29320:111;29313:118;;29201:238;;;;:::o;23865:215::-;23968:1;23929:4;:14;23934:8;23929:14;;;;;;;;;;;:25;;:35;;;:40;;:85;;;;;24013:1;23973:4;:14;23978:8;23973:14;;;;;;;;;;;:26;;:36;;;:41;;23929:85;23926:147;;;24035:26;24052:8;24035:26;;;;;;:::i;:::-;;;;;;;;23926:147;23865:215;:::o;4346:278::-;4432:7;4464:1;4460;:5;4467:12;4452:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4491:9;4507:1;4503;:5;;;;;;4491:17;;4615:1;4608:8;;;4346:278;;;;;:::o;2320:192::-;2406:7;2439:1;2434;:6;;2442:12;2426:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2466:9;2482:1;2478;:5;2466:17;;2503:1;2496:8;;;2320:192;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;142:124::-;;219:6;206:20;197:29;;231:30;255:5;231:30;:::i;:::-;191:75;;;;:::o;273:128::-;;354:6;348:13;339:22;;366:30;390:5;366:30;:::i;:::-;333:68;;;;:::o;408:130::-;;488:6;475:20;466:29;;500:33;527:5;500:33;:::i;:::-;460:78;;;;:::o;545:128::-;;624:6;611:20;602:29;;636:32;662:5;636:32;:::i;:::-;596:77;;;;:::o;680:132::-;;763:6;757:13;748:22;;775:32;801:5;775:32;:::i;:::-;742:70;;;;:::o;820:442::-;;922:3;915:4;907:6;903:17;899:27;889:2;;940:1;937;930:12;889:2;977:6;964:20;999:65;1014:49;1056:6;1014:49;:::i;:::-;999:65;:::i;:::-;990:74;;1084:6;1077:5;1070:21;1120:4;1112:6;1108:17;1153:4;1146:5;1142:16;1188:3;1179:6;1174:3;1170:16;1167:25;1164:2;;;1205:1;1202;1195:12;1164:2;1215:41;1249:6;1244:3;1239;1215:41;:::i;:::-;882:380;;;;;;;:::o;1306:927::-;;1417:4;1405:9;1400:3;1396:19;1392:30;1389:2;;;1435:1;1432;1425:12;1389:2;1453:20;1468:4;1453:20;:::i;:::-;1444:29;;1530:1;1562:49;1607:3;1598:6;1587:9;1583:22;1562:49;:::i;:::-;1555:4;1548:5;1544:16;1537:75;1483:140;1676:2;1709:49;1754:3;1745:6;1734:9;1730:22;1709:49;:::i;:::-;1702:4;1695:5;1691:16;1684:75;1633:137;1825:2;1858:49;1903:3;1894:6;1883:9;1879:22;1858:49;:::i;:::-;1851:4;1844:5;1840:16;1833:75;1780:139;1975:2;2008:49;2053:3;2044:6;2033:9;2029:22;2008:49;:::i;:::-;2001:4;1994:5;1990:16;1983:75;1929:140;2128:3;2162:49;2207:3;2198:6;2187:9;2183:22;2162:49;:::i;:::-;2155:4;2148:5;2144:16;2137:75;2079:144;1383:850;;;;:::o;2240:130::-;;2320:6;2307:20;2298:29;;2332:33;2359:5;2332:33;:::i;:::-;2292:78;;;;:::o;2377:134::-;;2461:6;2455:13;2446:22;;2473:33;2500:5;2473:33;:::i;:::-;2440:71;;;;:::o;2518:241::-;;2622:2;2610:9;2601:7;2597:23;2593:32;2590:2;;;2638:1;2635;2628:12;2590:2;2673:1;2690:53;2735:7;2726:6;2715:9;2711:22;2690:53;:::i;:::-;2680:63;;2652:97;2584:175;;;;:::o;2766:360::-;;;2884:2;2872:9;2863:7;2859:23;2855:32;2852:2;;;2900:1;2897;2890:12;2852:2;2935:1;2952:53;2997:7;2988:6;2977:9;2973:22;2952:53;:::i;:::-;2942:63;;2914:97;3042:2;3060:50;3102:7;3093:6;3082:9;3078:22;3060:50;:::i;:::-;3050:60;;3021:95;2846:280;;;;;:::o;3133:366::-;;;3254:2;3242:9;3233:7;3229:23;3225:32;3222:2;;;3270:1;3267;3260:12;3222:2;3305:1;3322:53;3367:7;3358:6;3347:9;3343:22;3322:53;:::i;:::-;3312:63;;3284:97;3412:2;3430:53;3475:7;3466:6;3455:9;3451:22;3430:53;:::i;:::-;3420:63;;3391:98;3216:283;;;;;:::o;3506:257::-;;3618:2;3606:9;3597:7;3593:23;3589:32;3586:2;;;3634:1;3631;3624:12;3586:2;3669:1;3686:61;3739:7;3730:6;3719:9;3715:22;3686:61;:::i;:::-;3676:71;;3648:105;3580:183;;;;:::o;3770:241::-;;3874:2;3862:9;3853:7;3849:23;3845:32;3842:2;;;3890:1;3887;3880:12;3842:2;3925:1;3942:53;3987:7;3978:6;3967:9;3963:22;3942:53;:::i;:::-;3932:63;;3904:97;3836:175;;;;:::o;4018:491::-;;;;4156:2;4144:9;4135:7;4131:23;4127:32;4124:2;;;4172:1;4169;4162:12;4124:2;4207:1;4224:53;4269:7;4260:6;4249:9;4245:22;4224:53;:::i;:::-;4214:63;;4186:97;4314:2;4332:53;4377:7;4368:6;4357:9;4353:22;4332:53;:::i;:::-;4322:63;;4293:98;4422:2;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4401:98;4118:391;;;;;:::o;4516:239::-;;4619:2;4607:9;4598:7;4594:23;4590:32;4587:2;;;4635:1;4632;4625:12;4587:2;4670:1;4687:52;4731:7;4722:6;4711:9;4707:22;4687:52;:::i;:::-;4677:62;;4649:96;4581:174;;;;:::o;4762:261::-;;4876:2;4864:9;4855:7;4851:23;4847:32;4844:2;;;4892:1;4889;4882:12;4844:2;4927:1;4944:63;4999:7;4990:6;4979:9;4975:22;4944:63;:::i;:::-;4934:73;;4906:107;4838:185;;;;:::o;5030:364::-;;;5150:2;5138:9;5129:7;5125:23;5121:32;5118:2;;;5166:1;5163;5156:12;5118:2;5201:1;5218:52;5262:7;5253:6;5242:9;5238:22;5218:52;:::i;:::-;5208:62;;5180:96;5307:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5286:98;5112:282;;;;;:::o;5401:347::-;;5515:2;5503:9;5494:7;5490:23;5486:32;5483:2;;;5531:1;5528;5521:12;5483:2;5594:1;5583:9;5579:17;5566:31;5617:18;5609:6;5606:30;5603:2;;;5649:1;5646;5639:12;5603:2;5669:63;5724:7;5715:6;5704:9;5700:22;5669:63;:::i;:::-;5659:73;;5545:193;5477:271;;;;:::o;5755:597::-;;;;5903:2;5891:9;5882:7;5878:23;5874:32;5871:2;;;5919:1;5916;5909:12;5871:2;5982:1;5971:9;5967:17;5954:31;6005:18;5997:6;5994:30;5991:2;;;6037:1;6034;6027:12;5991:2;6057:63;6112:7;6103:6;6092:9;6088:22;6057:63;:::i;:::-;6047:73;;5933:193;6157:2;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6136:98;6265:2;6283:53;6328:7;6319:6;6308:9;6304:22;6283:53;:::i;:::-;6273:63;;6244:98;5865:487;;;;;:::o;6359:1671::-;;;;;;;;;;6639:3;6627:9;6618:7;6614:23;6610:33;6607:2;;;6656:1;6653;6646:12;6607:2;6719:1;6708:9;6704:17;6691:31;6742:18;6734:6;6731:30;6728:2;;;6774:1;6771;6764:12;6728:2;6794:63;6849:7;6840:6;6829:9;6825:22;6794:63;:::i;:::-;6784:73;;6670:193;6922:2;6911:9;6907:18;6894:32;6946:18;6938:6;6935:30;6932:2;;;6978:1;6975;6968:12;6932:2;6998:63;7053:7;7044:6;7033:9;7029:22;6998:63;:::i;:::-;6988:73;;6873:194;7126:2;7115:9;7111:18;7098:32;7150:18;7142:6;7139:30;7136:2;;;7182:1;7179;7172:12;7136:2;7202:63;7257:7;7248:6;7237:9;7233:22;7202:63;:::i;:::-;7192:73;;7077:194;7330:2;7319:9;7315:18;7302:32;7354:18;7346:6;7343:30;7340:2;;;7386:1;7383;7376:12;7340:2;7406:63;7461:7;7452:6;7441:9;7437:22;7406:63;:::i;:::-;7396:73;;7281:194;7506:3;7525:53;7570:7;7561:6;7550:9;7546:22;7525:53;:::i;:::-;7515:63;;7485:99;7615:3;7634:53;7679:7;7670:6;7659:9;7655:22;7634:53;:::i;:::-;7624:63;;7594:99;7724:3;7743:53;7788:7;7779:6;7768:9;7764:22;7743:53;:::i;:::-;7733:63;;7703:99;7833:3;7852:53;7897:7;7888:6;7877:9;7873:22;7852:53;:::i;:::-;7842:63;;7812:99;7942:3;7961:53;8006:7;7997:6;7986:9;7982:22;7961:53;:::i;:::-;7951:63;;7921:99;6601:1429;;;;;;;;;;;:::o;8037:703::-;;;;8195:2;8183:9;8174:7;8170:23;8166:32;8163:2;;;8211:1;8208;8201:12;8163:2;8274:1;8263:9;8259:17;8246:31;8297:18;8289:6;8286:30;8283:2;;;8329:1;8326;8319:12;8283:2;8349:63;8404:7;8395:6;8384:9;8380:22;8349:63;:::i;:::-;8339:73;;8225:193;8477:2;8466:9;8462:18;8449:32;8501:18;8493:6;8490:30;8487:2;;;8533:1;8530;8523:12;8487:2;8553:63;8608:7;8599:6;8588:9;8584:22;8553:63;:::i;:::-;8543:73;;8428:194;8653:2;8671:53;8716:7;8707:6;8696:9;8692:22;8671:53;:::i;:::-;8661:63;;8632:98;8157:583;;;;;:::o;8747:597::-;;;;8895:2;8883:9;8874:7;8870:23;8866:32;8863:2;;;8911:1;8908;8901:12;8863:2;8974:1;8963:9;8959:17;8946:31;8997:18;8989:6;8986:30;8983:2;;;9029:1;9026;9019:12;8983:2;9049:63;9104:7;9095:6;9084:9;9080:22;9049:63;:::i;:::-;9039:73;;8925:193;9149:2;9167:53;9212:7;9203:6;9192:9;9188:22;9167:53;:::i;:::-;9157:63;;9128:98;9257:2;9275:53;9320:7;9311:6;9300:9;9296:22;9275:53;:::i;:::-;9265:63;;9236:98;8857:487;;;;;:::o;9351:532::-;;;;9508:3;9496:9;9487:7;9483:23;9479:33;9476:2;;;9525:1;9522;9515:12;9476:2;9560:1;9577:75;9644:7;9635:6;9624:9;9620:22;9577:75;:::i;:::-;9567:85;;9539:119;9689:3;9708:50;9750:7;9741:6;9730:9;9726:22;9708:50;:::i;:::-;9698:60;;9668:96;9795:3;9814:53;9859:7;9850:6;9839:9;9835:22;9814:53;:::i;:::-;9804:63;;9774:99;9470:413;;;;;:::o;9890:241::-;;9994:2;9982:9;9973:7;9969:23;9965:32;9962:2;;;10010:1;10007;10000:12;9962:2;10045:1;10062:53;10107:7;10098:6;10087:9;10083:22;10062:53;:::i;:::-;10052:63;;10024:97;9956:175;;;;:::o;10138:263::-;;10253:2;10241:9;10232:7;10228:23;10224:32;10221:2;;;10269:1;10266;10259:12;10221:2;10304:1;10321:64;10377:7;10368:6;10357:9;10353:22;10321:64;:::i;:::-;10311:74;;10283:108;10215:186;;;;:::o;10408:366::-;;;10529:2;10517:9;10508:7;10504:23;10500:32;10497:2;;;10545:1;10542;10535:12;10497:2;10580:1;10597:53;10642:7;10633:6;10622:9;10618:22;10597:53;:::i;:::-;10587:63;;10559:97;10687:2;10705:53;10750:7;10741:6;10730:9;10726:22;10705:53;:::i;:::-;10695:63;;10666:98;10491:283;;;;;:::o;10781:472::-;;;10912:2;10900:9;10891:7;10887:23;10883:32;10880:2;;;10928:1;10925;10918:12;10880:2;10963:1;10980:53;11025:7;11016:6;11005:9;11001:22;10980:53;:::i;:::-;10970:63;;10942:97;11098:2;11087:9;11083:18;11070:32;11122:18;11114:6;11111:30;11108:2;;;11154:1;11151;11144:12;11108:2;11174:63;11229:7;11220:6;11209:9;11205:22;11174:63;:::i;:::-;11164:73;;11049:194;10874:379;;;;;:::o;11260:366::-;;;11381:2;11369:9;11360:7;11356:23;11352:32;11349:2;;;11397:1;11394;11387:12;11349:2;11432:1;11449:53;11494:7;11485:6;11474:9;11470:22;11449:53;:::i;:::-;11439:63;;11411:97;11539:2;11557:53;11602:7;11593:6;11582:9;11578:22;11557:53;:::i;:::-;11547:63;;11518:98;11343:283;;;;;:::o;11633:491::-;;;;11771:2;11759:9;11750:7;11746:23;11742:32;11739:2;;;11787:1;11784;11777:12;11739:2;11822:1;11839:53;11884:7;11875:6;11864:9;11860:22;11839:53;:::i;:::-;11829:63;;11801:97;11929:2;11947:53;11992:7;11983:6;11972:9;11968:22;11947:53;:::i;:::-;11937:63;;11908:98;12037:2;12055:53;12100:7;12091:6;12080:9;12076:22;12055:53;:::i;:::-;12045:63;;12016:98;11733:391;;;;;:::o;12132:277::-;;12271:98;12365:3;12357:6;12271:98;:::i;:::-;12398:4;12393:3;12389:14;12375:28;;12264:145;;;;:::o;12417:142::-;12508:45;12547:5;12508:45;:::i;:::-;12503:3;12496:58;12490:69;;:::o;12566:113::-;12649:24;12667:5;12649:24;:::i;:::-;12644:3;12637:37;12631:48;;:::o;12773:874::-;12960:79;13033:5;12960:79;:::i;:::-;13052:111;13156:6;13151:3;13052:111;:::i;:::-;13045:118;;13184:81;13259:5;13184:81;:::i;:::-;13285:7;13313:1;13298:337;13323:6;13320:1;13317:13;13298:337;;;13390:6;13384:13;13411:115;13522:3;13507:13;13411:115;:::i;:::-;13404:122;;13543:85;13621:6;13543:85;:::i;:::-;13533:95;;13355:280;13345:1;13342;13338:9;13333:14;;13298:337;;;13302:14;12939:708;;;;;:::o;13655:94::-;13722:21;13737:5;13722:21;:::i;:::-;13717:3;13710:34;13704:45;;:::o;13756:104::-;13833:21;13848:5;13833:21;:::i;:::-;13828:3;13821:34;13815:45;;:::o;13867:103::-;13940:24;13958:5;13940:24;:::i;:::-;13935:3;13928:37;13922:48;;:::o;13977:113::-;14060:24;14078:5;14060:24;:::i;:::-;14055:3;14048:37;14042:48;;:::o;14097:110::-;14178:23;14195:5;14178:23;:::i;:::-;14173:3;14166:36;14160:47;;:::o;14214:347::-;;14326:39;14359:5;14326:39;:::i;:::-;14377:71;14441:6;14436:3;14377:71;:::i;:::-;14370:78;;14453:52;14498:6;14493:3;14486:4;14479:5;14475:16;14453:52;:::i;:::-;14526:29;14548:6;14526:29;:::i;:::-;14521:3;14517:39;14510:46;;14306:255;;;;;:::o;14569:327::-;;14729:67;14793:2;14788:3;14729:67;:::i;:::-;14722:74;;14829:29;14825:1;14820:3;14816:11;14809:50;14887:2;14882:3;14878:12;14871:19;;14715:181;;;:::o;14905:323::-;;15065:67;15129:2;15124:3;15065:67;:::i;:::-;15058:74;;15165:25;15161:1;15156:3;15152:11;15145:46;15219:2;15214:3;15210:12;15203:19;;15051:177;;;:::o;15237:331::-;;15397:67;15461:2;15456:3;15397:67;:::i;:::-;15390:74;;15497:33;15493:1;15488:3;15484:11;15477:54;15559:2;15554:3;15550:12;15543:19;;15383:185;;;:::o;15577:375::-;;15737:67;15801:2;15796:3;15737:67;:::i;:::-;15730:74;;15837:34;15833:1;15828:3;15824:11;15817:55;15906:8;15901:2;15896:3;15892:12;15885:30;15943:2;15938:3;15934:12;15927:19;;15723:229;;;:::o;15961:323::-;;16121:67;16185:2;16180:3;16121:67;:::i;:::-;16114:74;;16221:25;16217:1;16212:3;16208:11;16201:46;16275:2;16270:3;16266:12;16259:19;;16107:177;;;:::o;16293:305::-;;16453:66;16517:1;16512:3;16453:66;:::i;:::-;16446:73;;16552:8;16548:1;16543:3;16539:11;16532:29;16589:2;16584:3;16580:12;16573:19;;16439:159;;;:::o;16607:327::-;;16767:67;16831:2;16826:3;16767:67;:::i;:::-;16760:74;;16867:29;16863:1;16858:3;16854:11;16847:50;16925:2;16920:3;16916:12;16909:19;;16753:181;;;:::o;16943:380::-;;17103:67;17167:2;17162:3;17103:67;:::i;:::-;17096:74;;17203:34;17199:1;17194:3;17190:11;17183:55;17272:13;17267:2;17262:3;17258:12;17251:35;17314:2;17309:3;17305:12;17298:19;;17089:234;;;:::o;17332:324::-;;17492:67;17556:2;17551:3;17492:67;:::i;:::-;17485:74;;17592:26;17588:1;17583:3;17579:11;17572:47;17647:2;17642:3;17638:12;17631:19;;17478:178;;;:::o;17665:324::-;;17825:67;17889:2;17884:3;17825:67;:::i;:::-;17818:74;;17925:26;17921:1;17916:3;17912:11;17905:47;17980:2;17975:3;17971:12;17964:19;;17811:178;;;:::o;17998:370::-;;18158:67;18222:2;18217:3;18158:67;:::i;:::-;18151:74;;18258:34;18254:1;18249:3;18245:11;18238:55;18327:3;18322:2;18317:3;18313:12;18306:25;18359:2;18354:3;18350:12;18343:19;;18144:224;;;:::o;18377:328::-;;18537:67;18601:2;18596:3;18537:67;:::i;:::-;18530:74;;18637:30;18633:1;18628:3;18624:11;18617:51;18696:2;18691:3;18687:12;18680:19;;18523:182;;;:::o;18714:332::-;;18874:67;18938:2;18933:3;18874:67;:::i;:::-;18867:74;;18974:34;18970:1;18965:3;18961:11;18954:55;19037:2;19032:3;19028:12;19021:19;;18860:186;;;:::o;19055:332::-;;19215:67;19279:2;19274:3;19215:67;:::i;:::-;19208:74;;19315:34;19311:1;19306:3;19302:11;19295:55;19378:2;19373:3;19369:12;19362:19;;19201:186;;;:::o;19396:324::-;;19556:67;19620:2;19615:3;19556:67;:::i;:::-;19549:74;;19656:26;19652:1;19647:3;19643:11;19636:47;19711:2;19706:3;19702:12;19695:19;;19542:178;;;:::o;19729:324::-;;19889:67;19953:2;19948:3;19889:67;:::i;:::-;19882:74;;19989:26;19985:1;19980:3;19976:11;19969:47;20044:2;20039:3;20035:12;20028:19;;19875:178;;;:::o;20062:304::-;;20222:66;20286:1;20281:3;20222:66;:::i;:::-;20215:73;;20321:7;20317:1;20312:3;20308:11;20301:28;20357:2;20352:3;20348:12;20341:19;;20208:158;;;:::o;20375:329::-;;20535:67;20599:2;20594:3;20535:67;:::i;:::-;20528:74;;20635:31;20631:1;20626:3;20622:11;20615:52;20695:2;20690:3;20686:12;20679:19;;20521:183;;;:::o;20713:373::-;;20873:67;20937:2;20932:3;20873:67;:::i;:::-;20866:74;;20973:34;20969:1;20964:3;20960:11;20953:55;21042:6;21037:2;21032:3;21028:12;21021:28;21077:2;21072:3;21068:12;21061:19;;20859:227;;;:::o;21095:380::-;;21255:67;21319:2;21314:3;21255:67;:::i;:::-;21248:74;;21355:34;21351:1;21346:3;21342:11;21335:55;21424:13;21419:2;21414:3;21410:12;21403:35;21466:2;21461:3;21457:12;21450:19;;21241:234;;;:::o;21560:850::-;21705:4;21700:3;21696:14;21802:4;21795:5;21791:16;21785:23;21814:63;21871:4;21866:3;21862:14;21848:12;21814:63;:::i;:::-;21725:158;21973:4;21966:5;21962:16;21956:23;21985:63;22042:4;22037:3;22033:14;22019:12;21985:63;:::i;:::-;21893:161;22142:4;22135:5;22131:16;22125:23;22154:63;22211:4;22206:3;22202:14;22188:12;22154:63;:::i;:::-;22064:159;22314:4;22307:5;22303:16;22297:23;22326:63;22383:4;22378:3;22374:14;22360:12;22326:63;:::i;:::-;22233:162;21678:732;;;:::o;22486:962::-;22623:4;22618:3;22614:14;22713:4;22706:5;22702:16;22696:23;22725:63;22782:4;22777:3;22773:14;22759:12;22725:63;:::i;:::-;22643:151;22870:4;22863:5;22859:16;22853:23;22882:63;22939:4;22934:3;22930:14;22916:12;22882:63;:::i;:::-;22804:147;23029:4;23022:5;23018:16;23012:23;23041:63;23098:4;23093:3;23089:14;23075:12;23041:63;:::i;:::-;22961:149;23189:4;23182:5;23178:16;23172:23;23201:63;23258:4;23253:3;23249:14;23235:12;23201:63;:::i;:::-;23120:150;23352:4;23345:5;23341:16;23335:23;23364:63;23421:4;23416:3;23412:14;23398:12;23364:63;:::i;:::-;23280:153;22596:852;;;:::o;23522:641::-;23657:4;23652:3;23648:14;23747:4;23740:5;23736:16;23730:23;23759:63;23816:4;23811:3;23807:14;23793:12;23759:63;:::i;:::-;23677:151;23910:4;23903:5;23899:16;23893:23;23922:63;23979:4;23974:3;23970:14;23956:12;23922:63;:::i;:::-;23838:153;24073:4;24066:5;24062:16;24056:23;24085:57;24136:4;24131:3;24127:14;24113:12;24085:57;:::i;:::-;24001:147;23630:533;;;:::o;24247:953::-;24382:4;24377:3;24373:14;24466:4;24459:5;24455:16;24449:23;24478:63;24535:4;24530:3;24526:14;24512:12;24478:63;:::i;:::-;24402:145;24626:4;24619:5;24615:16;24609:23;24638:63;24695:4;24690:3;24686:14;24672:12;24638:63;:::i;:::-;24557:150;24787:4;24780:5;24776:16;24770:23;24799:63;24856:4;24851:3;24847:14;24833:12;24799:63;:::i;:::-;24717:151;24946:4;24939:5;24935:16;24929:23;24958:63;25015:4;25010:3;25006:14;24992:12;24958:63;:::i;:::-;24878:149;25104:4;25097:5;25093:16;25087:23;25116:63;25173:4;25168:3;25164:14;25150:12;25116:63;:::i;:::-;25037:148;24355:845;;;:::o;25207:103::-;25280:24;25298:5;25280:24;:::i;:::-;25275:3;25268:37;25262:48;;:::o;25317:113::-;25400:24;25418:5;25400:24;:::i;:::-;25395:3;25388:37;25382:48;;:::o;25437:222::-;;25564:2;25553:9;25549:18;25541:26;;25578:71;25646:1;25635:9;25631:17;25622:6;25578:71;:::i;:::-;25535:124;;;;:::o;25666:460::-;;25857:2;25846:9;25842:18;25834:26;;25871:79;25947:1;25936:9;25932:17;25923:6;25871:79;:::i;:::-;25961:72;26029:2;26018:9;26014:18;26005:6;25961:72;:::i;:::-;26044;26112:2;26101:9;26097:18;26088:6;26044:72;:::i;:::-;25828:298;;;;;;:::o;26133:349::-;;26296:2;26285:9;26281:18;26273:26;;26310:79;26386:1;26375:9;26371:17;26362:6;26310:79;:::i;:::-;26400:72;26468:2;26457:9;26453:18;26444:6;26400:72;:::i;:::-;26267:215;;;;;:::o;26489:333::-;;26644:2;26633:9;26629:18;26621:26;;26658:71;26726:1;26715:9;26711:17;26702:6;26658:71;:::i;:::-;26740:72;26808:2;26797:9;26793:18;26784:6;26740:72;:::i;:::-;26615:207;;;;;:::o;26829:424::-;;27056:4;27045:9;27041:20;27033:28;;27072:171;27240:1;27229:9;27225:17;27216:6;27072:171;:::i;:::-;27027:226;;;;:::o;27260:210::-;;27381:2;27370:9;27366:18;27358:26;;27395:65;27457:1;27446:9;27442:17;27433:6;27395:65;:::i;:::-;27352:118;;;;:::o;27477:222::-;;27604:2;27593:9;27589:18;27581:26;;27618:71;27686:1;27675:9;27671:17;27662:6;27618:71;:::i;:::-;27575:124;;;;:::o;27706:218::-;;27831:2;27820:9;27816:18;27808:26;;27845:69;27911:1;27900:9;27896:17;27887:6;27845:69;:::i;:::-;27802:122;;;;:::o;27931:432::-;;28108:2;28097:9;28093:18;28085:26;;28122:69;28188:1;28177:9;28173:17;28164:6;28122:69;:::i;:::-;28202:70;28268:2;28257:9;28253:18;28244:6;28202:70;:::i;:::-;28283;28349:2;28338:9;28334:18;28325:6;28283:70;:::i;:::-;28079:284;;;;;;:::o;28370:310::-;;28517:2;28506:9;28502:18;28494:26;;28567:9;28561:4;28557:20;28553:1;28542:9;28538:17;28531:47;28592:78;28665:4;28656:6;28592:78;:::i;:::-;28584:86;;28488:192;;;;:::o;28687:1128::-;;29032:3;29021:9;29017:19;29009:27;;29083:9;29077:4;29073:20;29069:1;29058:9;29054:17;29047:47;29108:78;29181:4;29172:6;29108:78;:::i;:::-;29100:86;;29234:9;29228:4;29224:20;29219:2;29208:9;29204:18;29197:48;29259:78;29332:4;29323:6;29259:78;:::i;:::-;29251:86;;29385:9;29379:4;29375:20;29370:2;29359:9;29355:18;29348:48;29410:78;29483:4;29474:6;29410:78;:::i;:::-;29402:86;;29536:9;29530:4;29526:20;29521:2;29510:9;29506:18;29499:48;29561:78;29634:4;29625:6;29561:78;:::i;:::-;29553:86;;29650:71;29716:3;29705:9;29701:19;29692:6;29650:71;:::i;:::-;29732:73;29800:3;29789:9;29785:19;29776:6;29732:73;:::i;:::-;29003:812;;;;;;;;;:::o;29822:416::-;;30022:2;30011:9;30007:18;29999:26;;30072:9;30066:4;30062:20;30058:1;30047:9;30043:17;30036:47;30097:131;30223:4;30097:131;:::i;:::-;30089:139;;29993:245;;;:::o;30245:416::-;;30445:2;30434:9;30430:18;30422:26;;30495:9;30489:4;30485:20;30481:1;30470:9;30466:17;30459:47;30520:131;30646:4;30520:131;:::i;:::-;30512:139;;30416:245;;;:::o;30668:416::-;;30868:2;30857:9;30853:18;30845:26;;30918:9;30912:4;30908:20;30904:1;30893:9;30889:17;30882:47;30943:131;31069:4;30943:131;:::i;:::-;30935:139;;30839:245;;;:::o;31091:416::-;;31291:2;31280:9;31276:18;31268:26;;31341:9;31335:4;31331:20;31327:1;31316:9;31312:17;31305:47;31366:131;31492:4;31366:131;:::i;:::-;31358:139;;31262:245;;;:::o;31514:416::-;;31714:2;31703:9;31699:18;31691:26;;31764:9;31758:4;31754:20;31750:1;31739:9;31735:17;31728:47;31789:131;31915:4;31789:131;:::i;:::-;31781:139;;31685:245;;;:::o;31937:416::-;;32137:2;32126:9;32122:18;32114:26;;32187:9;32181:4;32177:20;32173:1;32162:9;32158:17;32151:47;32212:131;32338:4;32212:131;:::i;:::-;32204:139;;32108:245;;;:::o;32360:416::-;;32560:2;32549:9;32545:18;32537:26;;32610:9;32604:4;32600:20;32596:1;32585:9;32581:17;32574:47;32635:131;32761:4;32635:131;:::i;:::-;32627:139;;32531:245;;;:::o;32783:416::-;;32983:2;32972:9;32968:18;32960:26;;33033:9;33027:4;33023:20;33019:1;33008:9;33004:17;32997:47;33058:131;33184:4;33058:131;:::i;:::-;33050:139;;32954:245;;;:::o;33206:416::-;;33406:2;33395:9;33391:18;33383:26;;33456:9;33450:4;33446:20;33442:1;33431:9;33427:17;33420:47;33481:131;33607:4;33481:131;:::i;:::-;33473:139;;33377:245;;;:::o;33629:416::-;;33829:2;33818:9;33814:18;33806:26;;33879:9;33873:4;33869:20;33865:1;33854:9;33850:17;33843:47;33904:131;34030:4;33904:131;:::i;:::-;33896:139;;33800:245;;;:::o;34052:416::-;;34252:2;34241:9;34237:18;34229:26;;34302:9;34296:4;34292:20;34288:1;34277:9;34273:17;34266:47;34327:131;34453:4;34327:131;:::i;:::-;34319:139;;34223:245;;;:::o;34475:416::-;;34675:2;34664:9;34660:18;34652:26;;34725:9;34719:4;34715:20;34711:1;34700:9;34696:17;34689:47;34750:131;34876:4;34750:131;:::i;:::-;34742:139;;34646:245;;;:::o;34898:416::-;;35098:2;35087:9;35083:18;35075:26;;35148:9;35142:4;35138:20;35134:1;35123:9;35119:17;35112:47;35173:131;35299:4;35173:131;:::i;:::-;35165:139;;35069:245;;;:::o;35321:416::-;;35521:2;35510:9;35506:18;35498:26;;35571:9;35565:4;35561:20;35557:1;35546:9;35542:17;35535:47;35596:131;35722:4;35596:131;:::i;:::-;35588:139;;35492:245;;;:::o;35744:416::-;;35944:2;35933:9;35929:18;35921:26;;35994:9;35988:4;35984:20;35980:1;35969:9;35965:17;35958:47;36019:131;36145:4;36019:131;:::i;:::-;36011:139;;35915:245;;;:::o;36167:416::-;;36367:2;36356:9;36352:18;36344:26;;36417:9;36411:4;36407:20;36403:1;36392:9;36388:17;36381:47;36442:131;36568:4;36442:131;:::i;:::-;36434:139;;36338:245;;;:::o;36590:416::-;;36790:2;36779:9;36775:18;36767:26;;36840:9;36834:4;36830:20;36826:1;36815:9;36811:17;36804:47;36865:131;36991:4;36865:131;:::i;:::-;36857:139;;36761:245;;;:::o;37013:416::-;;37213:2;37202:9;37198:18;37190:26;;37263:9;37257:4;37253:20;37249:1;37238:9;37234:17;37227:47;37288:131;37414:4;37288:131;:::i;:::-;37280:139;;37184:245;;;:::o;37436:327::-;;37615:3;37604:9;37600:19;37592:27;;37630:123;37750:1;37739:9;37735:17;37726:6;37630:123;:::i;:::-;37586:177;;;;:::o;37770:311::-;;37941:3;37930:9;37926:19;37918:27;;37956:115;38068:1;38057:9;38053:17;38044:6;37956:115;:::i;:::-;37912:169;;;;:::o;38088:306::-;;38257:2;38246:9;38242:18;38234:26;;38271:113;38381:1;38370:9;38366:17;38357:6;38271:113;:::i;:::-;38228:166;;;;:::o;38401:222::-;;38528:2;38517:9;38513:18;38505:26;;38542:71;38610:1;38599:9;38595:17;38586:6;38542:71;:::i;:::-;38499:124;;;;:::o;38630:860::-;;38917:3;38906:9;38902:19;38894:27;;38932:71;39000:1;38989:9;38985:17;38976:6;38932:71;:::i;:::-;39051:9;39045:4;39041:20;39036:2;39025:9;39021:18;39014:48;39076:78;39149:4;39140:6;39076:78;:::i;:::-;39068:86;;39202:9;39196:4;39192:20;39187:2;39176:9;39172:18;39165:48;39227:78;39300:4;39291:6;39227:78;:::i;:::-;39219:86;;39316:80;39392:2;39381:9;39377:18;39368:6;39316:80;:::i;:::-;39407:73;39475:3;39464:9;39460:19;39451:6;39407:73;:::i;:::-;38888:602;;;;;;;;:::o;39497:966::-;;39837:3;39826:9;39822:19;39814:27;;39852:71;39920:1;39909:9;39905:17;39896:6;39852:71;:::i;:::-;39971:9;39965:4;39961:20;39956:2;39945:9;39941:18;39934:48;39996:78;40069:4;40060:6;39996:78;:::i;:::-;39988:86;;40085:72;40153:2;40142:9;40138:18;40129:6;40085:72;:::i;:::-;40168:80;40244:2;40233:9;40229:18;40220:6;40168:80;:::i;:::-;40297:9;40291:4;40287:20;40281:3;40270:9;40266:19;40259:49;40322:131;40448:4;40322:131;:::i;:::-;40314:139;;39808:655;;;;;;;:::o;40470:444::-;;40653:2;40642:9;40638:18;40630:26;;40667:71;40735:1;40724:9;40720:17;40711:6;40667:71;:::i;:::-;40749:72;40817:2;40806:9;40802:18;40793:6;40749:72;:::i;:::-;40832;40900:2;40889:9;40885:18;40876:6;40832:72;:::i;:::-;40624:290;;;;;;:::o;40921:878::-;;41241:3;41230:9;41226:19;41218:27;;41256:71;41324:1;41313:9;41309:17;41300:6;41256:71;:::i;:::-;41338:72;41406:2;41395:9;41391:18;41382:6;41338:72;:::i;:::-;41421;41489:2;41478:9;41474:18;41465:6;41421:72;:::i;:::-;41504:80;41580:2;41569:9;41565:18;41556:6;41504:80;:::i;:::-;41633:9;41627:4;41623:20;41617:3;41606:9;41602:19;41595:49;41658:131;41784:4;41658:131;:::i;:::-;41650:139;;41212:587;;;;;;;:::o;41806:1514::-;;42300:3;42289:9;42285:19;42277:27;;42315:71;42383:1;42372:9;42368:17;42359:6;42315:71;:::i;:::-;42397:72;42465:2;42454:9;42450:18;42441:6;42397:72;:::i;:::-;42480;42548:2;42537:9;42533:18;42524:6;42480:72;:::i;:::-;42563;42631:2;42620:9;42616:18;42607:6;42563:72;:::i;:::-;42646:73;42714:3;42703:9;42699:19;42690:6;42646:73;:::i;:::-;42730;42798:3;42787:9;42783:19;42774:6;42730:73;:::i;:::-;42814:71;42880:3;42869:9;42865:19;42856:6;42814:71;:::i;:::-;42896:73;42964:3;42953:9;42949:19;42940:6;42896:73;:::i;:::-;42980;43048:3;43037:9;43033:19;43024:6;42980:73;:::i;:::-;43064:117;43176:3;43165:9;43161:19;43152:6;43064:117;:::i;:::-;43192:118;43305:3;43294:9;43290:19;43280:7;43192:118;:::i;:::-;42271:1049;;;;;;;;;;;;;;:::o;43327:256::-;;43389:2;43383:9;43373:19;;43427:4;43419:6;43415:17;43526:6;43514:10;43511:22;43490:18;43478:10;43475:34;43472:62;43469:2;;;43547:1;43544;43537:12;43469:2;43567:10;43563:2;43556:22;43367:216;;;;:::o;43590:322::-;;43734:18;43726:6;43723:30;43720:2;;;43766:1;43763;43756:12;43720:2;43833:4;43829:9;43822:4;43814:6;43810:17;43806:33;43798:41;;43897:4;43891;43887:15;43879:23;;43657:255;;;:::o;43919:124::-;;44030:3;44022:11;;44016:27;;;:::o;44050:135::-;;44171:4;44161:14;;44149:36;;;:::o;44192:122::-;;44286:5;44280:12;44270:22;;44251:63;;;:::o;44321:133::-;;44444:4;44439:3;44435:14;44427:22;;44421:33;;;:::o;44462:167::-;;44620:3;44605:18;;44598:31;;;;:::o;44638:163::-;;44753:6;44748:3;44741:19;44790:4;44785:3;44781:14;44766:29;;44734:67;;;;:::o;44809:91::-;;44871:24;44889:5;44871:24;:::i;:::-;44860:35;;44854:46;;;:::o;44907:85::-;;44980:5;44973:13;44966:21;44955:32;;44949:43;;;:::o;44999:72::-;;45061:5;45050:16;;45044:27;;;:::o;45078:71::-;;45139:5;45128:16;;45122:27;;;:::o;45156:121::-;;45229:42;45222:5;45218:54;45207:65;;45201:76;;;:::o;45284:72::-;;45346:5;45335:16;;45329:27;;;:::o;45363:129::-;;45450:37;45481:5;45450:37;:::i;:::-;45437:50;;45431:61;;;:::o;45499:121::-;;45578:37;45609:5;45578:37;:::i;:::-;45565:50;;45559:61;;;:::o;45627:108::-;;45706:24;45724:5;45706:24;:::i;:::-;45693:37;;45687:48;;;:::o;45743:145::-;45824:6;45819:3;45814;45801:30;45880:1;45871:6;45866:3;45862:16;45855:27;45794:94;;;:::o;45897:268::-;45962:1;45969:101;45983:6;45980:1;45977:13;45969:101;;;46059:1;46054:3;46050:11;46044:18;46040:1;46035:3;46031:11;46024:39;46005:2;46002:1;45998:10;45993:15;;45969:101;;;46085:6;46082:1;46079:13;46076:2;;;46150:1;46141:6;46136:3;46132:16;46125:27;46076:2;45946:219;;;;:::o;46173:97::-;;46261:2;46257:7;46252:2;46245:5;46241:14;46237:28;46227:38;;46221:49;;;:::o;46278:117::-;46347:24;46365:5;46347:24;:::i;:::-;46340:5;46337:35;46327:2;;46386:1;46383;46376:12;46327:2;46321:74;:::o;46402:111::-;46468:21;46483:5;46468:21;:::i;:::-;46461:5;46458:32;46448:2;;46504:1;46501;46494:12;46448:2;46442:71;:::o;46520:117::-;46589:24;46607:5;46589:24;:::i;:::-;46582:5;46579:35;46569:2;;46628:1;46625;46618:12;46569:2;46563:74;:::o;46644:115::-;46712:23;46729:5;46712:23;:::i;:::-;46705:5;46702:34;46692:2;;46750:1;46747;46740:12;46692:2;46686:73;:::o;46766:117::-;46835:24;46853:5;46835:24;:::i;:::-;46828:5;46825:35;46815:2;;46874:1;46871;46864:12;46815:2;46809:74;:::o

Swarm Source

ipfs://2711d3bc1719ec47fe71282d53e7b55d1c02400b02b50396f1b256df67a8c484

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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