ETH Price: $1,936.70 (-2.60%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer106806762020-08-18 0:09:572014 days ago1597709397IN
0xc1154C08...E18f949a2
0 ETH0.0473273791
Transfer106782062020-08-17 14:55:092015 days ago1597676109IN
0xc1154C08...E18f949a2
0.4 ETH0.02205362148
Exit Lobbies Bef...106094922020-08-07 0:35:532025 days ago1596760553IN
0xc1154C08...E18f949a2
0 ETH0.012726441
Exit Lobbies Bef...106094682020-08-07 0:29:162025 days ago1596760156IN
0xc1154C08...E18f949a2
0 ETH0.001567141
Exit Lobbies Bef...106094542020-08-07 0:25:172025 days ago1596759917IN
0xc1154C08...E18f949a2
0 ETH0.0138548245
Transfer106094332020-08-07 0:20:172025 days ago1596759617IN
0xc1154C08...E18f949a2
0 ETH0.0010445845
Transfer106094272020-08-07 0:17:392025 days ago1596759459IN
0xc1154C08...E18f949a2
0 ETH0.0011606550
Transfer106094212020-08-07 0:16:152025 days ago1596759375IN
0xc1154C08...E18f949a2
0 ETH0.0018203550
Transfer106094132020-08-07 0:14:142025 days ago1596759254IN
0xc1154C08...E18f949a2
0 ETH0.0020891790
Transfer106094062020-08-07 0:13:072025 days ago1596759187IN
0xc1154C08...E18f949a2
0 ETH0.0010445845
Transfer106078922020-08-06 18:32:252025 days ago1596738745IN
0xc1154C08...E18f949a2
0.005 ETH0.0049984642
Transfer106078482020-08-06 18:24:122025 days ago1596738252IN
0xc1154C08...E18f949a2
0.01 ETH0.0067889853
Freeze106029522020-08-06 0:25:332026 days ago1596673533IN
0xc1154C08...E18f949a2
0 ETH0.0028237635
Freeze106029412020-08-06 0:22:512026 days ago1596673371IN
0xc1154C08...E18f949a2
0 ETH0.002389129
Exit Lobbies Bef...106028822020-08-06 0:12:242026 days ago1596672744IN
0xc1154C08...E18f949a2
0 ETH0.0226741235
Transfer106028582020-08-06 0:05:392026 days ago1596672339IN
0xc1154C08...E18f949a2
0 ETH0.0225037844.85658275
Transfer106028462020-08-06 0:03:082026 days ago1596672188IN
0xc1154C08...E18f949a2
0 ETH0.0157659144.57312253
Transfer106027932020-08-05 23:52:492026 days ago1596671569IN
0xc1154C08...E18f949a2
0.02 ETH0.005513437
Set Multisig106027882020-08-05 23:51:192026 days ago1596671479IN
0xc1154C08...E18f949a2
0 ETH0.0016409137
Transfer106027812020-08-05 23:49:582026 days ago1596671398IN
0xc1154C08...E18f949a2
0.01 ETH0.0038119937

Latest 5 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
-106782062020-08-17 14:55:092015 days ago1597676109
0xc1154C08...E18f949a2
0.4 ETH
-106078922020-08-06 18:32:252025 days ago1596738745
0xc1154C08...E18f949a2
0.005 ETH
-106078482020-08-06 18:24:122025 days ago1596738252
0xc1154C08...E18f949a2
0.01 ETH
-106027932020-08-05 23:52:492026 days ago1596671569
0xc1154C08...E18f949a2
0.02 ETH
-106027812020-08-05 23:49:582026 days ago1596671398
0xc1154C08...E18f949a2
0.01 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
Router

Compiler Version
v0.6.4+commit.1dca32f3

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2020-08-05
*/

pragma solidity 0.6.4;

interface Minter {
    function FreezeFreeMint(uint amt, address user, uint dapp) external;
    function mintHXB(uint value, address receiver) external returns (bool);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function balanceOf (address account) external view returns (uint256);
    function mintRatio() external pure returns (uint256);//hxb
    function mintBlock() external pure returns (bool);//hxy/hxb
}

interface HEX {
    function xfLobbyEnter(address referrerAddr)
    external
    payable;

    function xfLobbyExit(uint256 enterDay, uint256 count)
    external;

    function xfLobbyPendingDays(address memberAddr)
    external
    view
    returns (uint256[2] memory words);

    function balanceOf (address account)
    external
    view
    returns (uint256);

    function transfer (address recipient, uint256 amount)
    external 
    returns (bool);

    function currentDay ()
    external
    view
    returns (uint256);
}


contract TokenEvents {

    //when a user freezes tokens
    event TokenFreeze(
        address indexed user,
        uint value,
        address indexed token
    );

    //when a user unfreezes tokens
    event TokenUnfreeze(
        address indexed user,
        uint value,
        address indexed token
    );

}

contract Router is TokenEvents {

    struct CustomerState {
        uint16 nextPendingDay;
        mapping(uint256 => uint256) contributionByDay;
    }

    struct LobbyContributionState {
        uint256 totalValue;
        uint256 heartsReceived;
    }

    struct ContractStateCache {
        uint256 currentDay;
        uint256 nextPendingDay;
    }

    event LobbyJoined(
        uint40 timestamp,
        uint16 day,
        uint256 amount,
        address indexed customer,
        address indexed affiliate
    );

    event LobbyLeft(
        uint40 timestamp,
        uint16 day,
        uint256 hearts
    );

    event MissedLobby(
        uint40 timestamp,
        uint16 day
    );
    
    //minting HXY/HXB/HXP
    address internal hxyAddress = address(0xf3A2ace8e48751c965eA0A1D064303AcA53842b9);
    address internal hxbAddress = address(0x9BB6fd000109E24Eb38B0Deb806382fF9247E478);
    address internal hxpAddress = address(0x16aB6ED897D04856Ff138122Db4b7767078a20F3);
    
    Minter internal hxy = Minter(hxyAddress);
    Minter internal hxb = Minter(hxbAddress);
    Minter internal hxp = Minter(hxpAddress);
    
    uint public hxyRatio = 100;
    uint public hxbRatio = 1000;
    uint public hxpRatio = 10000;
    bool public multisigSet;
    address public multisig = address(0);
    address public splitter = address(0x7d68C0321cf6B3A12E6e5D5ABbAA8F2A13d77FDd);
    
    //freeze setup
    uint internal daySeconds = 86400; // seconds in a day
    uint public totalHxyFrozen;
    uint public totalHxbLocked;
    uint public totalHxpFrozen;
    bool public hxpUnlocked;
    
    mapping (address => uint) public mintedHxy;//balance of HXY minted and not yet frozen by user
    mapping (address => uint) public mintedHxb;//balance of HXB minted and not yet locked by user
    mapping (address => uint) public mintedHxp;//balance of HXP minted and not yet frozen by user
    
    mapping (address => uint) public tokenHxyFrozenBalances;//balance of HXY frozen mapped by user
    mapping (address => uint) public tokenHxbLockedBalances;//balance of HXB locked mapped by user
    mapping (address => uint) public tokenHxpFrozenBalances;//balance of HXP frozen mapped by user

    mapping (address => Frozen) public frozen;

    struct Frozen{
        uint256 freezeHxyStartTimestamp;
        uint256 lockHxbStartTimestamp;
        uint256 freezeHxpStartTimestamp;
    }
    
    // from HEX
    uint16 private constant LAUNCH_PHASE_DAYS = 350;
    uint16 private constant LAUNCH_PHASE_END_DAY = 351;
    uint256 private constant XF_LOBBY_DAY_WORDS = (LAUNCH_PHASE_END_DAY + 255) >> 8;

    // constants & mappings we need
    mapping(address => bool) admins;
    address management1 = 0x383B80128D3378d9d63Ef8B4189971c9240F031e;
    address management2 = 0xA65C4cffC2e9848f6fc946030D8942E17F151aa4;
    address internal _p1 = 0xb5cDb0AD2b6097cB051B27D3149Ef80eAA623527;
    address internal _p2 = 0x86b0C0c3fF5aDE3a6F00180D09C1CEEB2b7765eA;
    address internal _p3 = 0x975C3Da56B958AB3581D3789544b1cf19c0b8b23;
    address internal _p4 = 0x454f203260a74C0A8B5c0a78fbA5B4e8B31dCC63;
    address internal _p5 = 0x976A70754568F4A7D15D04fc8b0d56f914791f5B;
    address internal _p6 = 0xed03F181FCa480a03Dd708e3d87A0441cD43513f;
    uint managementShare;
    
    HEX private constant hx = HEX(0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39);
    uint256 private contractNextPendingDay;
    uint256 public constant HEX_LAUNCH_TIME = 1575331200;
    mapping(address => uint8) private registeredAffiliates;
    mapping(uint256 => LobbyContributionState) private totalValueByDay;
    mapping(address => CustomerState) private customerData;
    mapping(uint8 => uint8) public affiliateRankPercentages;
    
    modifier onlyMultisig(){
        require(msg.sender == multisig, "not authorized");
        _;
    }

    modifier onlyAdmins(){
        require(admins[msg.sender], "not an admin");
        _;
    }

    constructor()
    public
    {
        admins[msg.sender] = true;
        contractNextPendingDay = _getHexContractDay(); // today is the next day to resolve
        affiliateRankPercentages[0] = 0;
        affiliateRankPercentages[1] = 50;
        affiliateRankPercentages[2] = 100;
    }
    
    function enterLobby(address customer, address affiliate)
    public
    payable
    {
        require(msg.value > 0, "invalid eth value");
        bool isAffiliate = false;
        uint8 affiliateLevel = registeredAffiliates[msg.sender];
        uint8 affiliateSplit = affiliateRankPercentages[affiliateLevel];
        if(affiliate != address(0) && affiliateSplit > 0){
            // real affiliate, use them for ref
            uint256 affiliateValue = msg.value * affiliateSplit / 100;
            isAffiliate = true;
            hx.xfLobbyEnter{value:affiliateValue}(affiliate);
            if(msg.value - affiliateValue > 0){
                hx.xfLobbyEnter{value:msg.value - affiliateValue}(splitter);
            }
        } else {
            hx.xfLobbyEnter{value:msg.value}(splitter);
        }

        // record customer contribution
        uint256 currentDay = _getHexContractDay();
        totalValueByDay[currentDay].totalValue += msg.value;
        customerData[customer].contributionByDay[currentDay] += msg.value;
        if(customerData[customer].nextPendingDay == 0){
            // new user
            customerData[customer].nextPendingDay = uint16(currentDay);
        }

        //if the splitter is used as referral, set the zero address as affiliate
        address referrerAddr = isAffiliate ? affiliate : address(0);
        emit LobbyJoined(
            uint40(block.timestamp),
            uint16(currentDay),
            msg.value,
            customer,
            referrerAddr
          );
    }

    function exitLobbiesBeforeDay(address customer, uint256 day)
    public
    {
        ContractStateCache memory state = ContractStateCache(_getHexContractDay(), contractNextPendingDay);
        uint256 _day = day > 0 ? day : state.currentDay;
        require(customerData[customer].nextPendingDay < _day,
            "Customer has no active lobby entries for this time period");
        _leaveLobbies(state, _day);
        // next pending day was updated as part of leaveLobbies
        contractNextPendingDay = state.nextPendingDay;
        _distributeShare(customer, _day);
    }

    function registerAffiliate(address affiliateContract, uint8 affiliateRank)
    public
    onlyAdmins
    {
        require(registeredAffiliates[affiliateContract] == 0, "Affiliate contract is already registered");
        registeredAffiliates[affiliateContract] = affiliateRank;
    }

    function updateAffiliateRank(address affiliateContract, uint8 affiliateRank)
    public
    onlyAdmins
    {
        require(affiliateRank != registeredAffiliates[affiliateContract], "New Affiliate rank must be different than previous");
        require(affiliateRankPercentages[affiliateRank] >= affiliateRankPercentages[registeredAffiliates[affiliateContract]],
                "Cannot set an affiliateRank with lower percentage than previous");
        registeredAffiliates[affiliateContract] = affiliateRank;
    }

    function addAffiliateRank(uint8 affiliateRank, uint8 rankSplitPercentage)
    public
    onlyAdmins
    {
        require(affiliateRankPercentages[affiliateRank] == 0, "Affiliate rank already exists");
        require(rankSplitPercentage > 0 && rankSplitPercentage <= 100,
            "Affiliate Split must be between 0-100%");
        affiliateRankPercentages[affiliateRank] = rankSplitPercentage;
    }

    function verifyAffiliate(address affiliateContract)
    public
    view
    returns (bool, uint8)
    {
        return (registeredAffiliates[affiliateContract] > 0, registeredAffiliates[affiliateContract]);
    }

    function batchLeaveLobby(uint256 day, uint256 batchSize)
    public
    {
        require(day < _getHexContractDay(), "You must only leave lobbies that have ended");
        uint256[XF_LOBBY_DAY_WORDS] memory joinedDays = hx.xfLobbyPendingDays(address(this));
        require((joinedDays[day >> 8] & (1 << (day & 255))) >> (day & 255) == 1, "You may only leave lobbies with active entries");

        uint256 balance = hx.balanceOf(address(this));
        _leaveLobby(day, batchSize, balance);
    }

    receive()
    external
    payable
    {
        if(msg.value > 0)
        {
          // If someone just sends eth, get them in a lobby with no affiliate, i.e. splitter
          enterLobby(msg.sender, address(0));
        }
          else
        {
          //if the transaction value is 0, exit lobbies instead
          exitLobbiesBeforeDay(msg.sender, 0);
        }
    }

    function _getHexContractDay()
    private
    view
    returns (uint256)
    {
        require(HEX_LAUNCH_TIME < block.timestamp, "Launch time not before current block");
        return (block.timestamp - HEX_LAUNCH_TIME) / 1 days;
    }

    function _leaveLobbies(ContractStateCache memory currentState, uint256 beforeDay)
    private
    {
        uint256 newBalance = hx.balanceOf(address(this));
        //uint256 oldBalance;
        if(currentState.nextPendingDay < beforeDay){
            uint256[XF_LOBBY_DAY_WORDS] memory joinedDays = hx.xfLobbyPendingDays(address(this));
            while(currentState.nextPendingDay < beforeDay){
                if( (joinedDays[currentState.nextPendingDay >> 8] & (1 << (currentState.nextPendingDay & 255))) >>
                    (currentState.nextPendingDay & 255) == 1){
                    // leaving 0 means leave "all"
                    newBalance = _leaveLobby(currentState.nextPendingDay, 0, newBalance);
                    emit LobbyLeft(uint40(block.timestamp),
                        uint16(currentState.nextPendingDay),
                        totalValueByDay[currentState.nextPendingDay].heartsReceived);
                } else {
                    emit MissedLobby(uint40(block.timestamp),
                     uint16(currentState.nextPendingDay));
                }
                currentState.nextPendingDay++;
            }
        }
    }

    function _leaveLobby(uint256 lobby, uint256 numEntries, uint256 balance)
    private
    returns (uint256)
    {
        hx.xfLobbyExit(lobby, numEntries);
        uint256 oldBalance = balance;
        balance = hx.balanceOf(address(this));
        totalValueByDay[lobby].heartsReceived += balance - oldBalance;
        require(totalValueByDay[lobby].heartsReceived > 0, "Hearts received for a lobby is 0");
        return balance;
    }

    function _distributeShare(address customer, uint256 endDay)
    private
    returns (uint256)
    {
        uint256 totalShare = 0;
        CustomerState storage user = customerData[customer];
        uint256 nextDay = user.nextPendingDay;
        if(nextDay > 0 && nextDay < endDay){
            while(nextDay < endDay){
                if(totalValueByDay[nextDay].totalValue > 0 && totalValueByDay[nextDay].heartsReceived > 0){
                    require(totalValueByDay[nextDay].heartsReceived > 0, "Hearts received must be > 0, leave lobby for day");
                    totalShare += user.contributionByDay[nextDay] *
                        totalValueByDay[nextDay].heartsReceived /
                        totalValueByDay[nextDay].totalValue;
                }
                nextDay++;
            }
            if(totalShare > 0){
                uint initialShare = totalShare * 100 / 110;
                uint splitShare = (totalShare - initialShare) / 2;
                uint customerShare = initialShare + splitShare;
                require(hx.transfer(customer, customerShare), strConcat("Failed to transfer ",uint2str(customerShare),", insufficient balance"));
                managementShare += splitShare;//50% of 10% bonus to management
                //mint if at least 1 HEX
                if(customerShare >= 100000000){
                    //HXY
                    if(hxyAddress != address(0)){
                        //is hxy minting ceased? transfer from contract balance if so
                        if(hxy.mintBlock()){
                            uint y = customerShare / hxyRatio;
                            if(hxy.balanceOf(address(this)) >= y){
                                //hxy.transfer(customer, y);
                                mintedHxy[customer] += y;
                            }
                        }
                        else{
                           hxy.FreezeFreeMint((customerShare / hxyRatio), customer, 1);
                        }
                    }
                    //HXB
                    if(hxbAddress != address(0)){
                         //is hxb minting ceased? transfer from contract balance if so
                         if(hxb.mintBlock()){
                            uint b = customerShare / hxbRatio;
                            if(hxb.balanceOf(address(this)) >= b){
                                //hxb.transfer(customer, b); 
                                mintedHxb[customer] += b;
                            }
                        }
                        else{
                          require(hxb.mintHXB(((customerShare / hxbRatio) * hxb.mintRatio()), address(this)), "could not mint HXB");
                          mintedHxb[customer] += customerShare / hxbRatio;
                        }
                    }
                    //HXP
                    if(hxpAddress != address(0)){
                        uint p = customerShare / hxpRatio;
                        if(hxp.balanceOf(address(this)) >= p){
                            //hxp.transfer(customer, p);
                            mintedHxp[customer] += p;
                        }
                    }
                }   
            }
        }
        if(nextDay != user.nextPendingDay){
            user.nextPendingDay = uint16(nextDay);
        }

        return totalShare;
    }
    
    
        ////////////////////////////////////////////////////////
    /////////////////PUBLIC FACING - FREEZE CONTROL//////////
    //////////////////////////////////////////////////////
    
    
    //freeze HXY tokens to contract
    function Freeze(address token)
        public
    {
        if(isFreezeFinished(msg.sender, token)){
            Unfreeze(token);//unfreezes all currently frozen tokens
        }
        uint amt;
        //update balances
        if(token == hxyAddress){
            amt = mintedHxy[msg.sender];
            require(amt > 0, "Error: insufficient balance available to freeze");//ensure user has enough funds allocated
            mintedHxy[msg.sender] = 0;
            tokenHxyFrozenBalances[msg.sender] += amt;
            totalHxyFrozen += amt;
            frozen[msg.sender].freezeHxyStartTimestamp = now;
        }
        else if(token == hxbAddress){
            amt = mintedHxb[msg.sender];
            require(amt > 0, "Error: insufficient balance available to lock");//ensure user has enough funds allocated
            mintedHxb[msg.sender] = 0;
            tokenHxbLockedBalances[msg.sender] += amt;
            totalHxbLocked += amt;
            frozen[msg.sender].lockHxbStartTimestamp = now;
        }
        else if(token == hxpAddress){
            amt = mintedHxp[msg.sender];
            require(amt > 0, "Error: insufficient balance available to freeze");//ensure user has enough funds allocated
            mintedHxp[msg.sender] = 0;
            tokenHxpFrozenBalances[msg.sender] += amt;
            totalHxpFrozen += amt;
            frozen[msg.sender].freezeHxpStartTimestamp = now;
        }
        else{
            revert();
        }
        emit TokenFreeze(msg.sender, amt, token);
    }
    
    //unfreeze HXY tokens from contract
    function Unfreeze(address token)
        public
    {
        uint amt;
        if(token == hxyAddress){
            require(tokenHxyFrozenBalances[msg.sender] > 0,"Error: unsufficient frozen balance");//ensure user has enough frozen funds
            require(isFreezeFinished(msg.sender, token), "tokens cannot be unfrozen yet, min 90 days");
            amt = tokenHxyFrozenBalances[msg.sender];
            tokenHxyFrozenBalances[msg.sender] = 0;
            frozen[msg.sender].freezeHxyStartTimestamp = 0;
            totalHxyFrozen -= amt;
            hxy.transfer(msg.sender, amt);//make transfer
        }
        else if(token == hxbAddress){
            require(tokenHxbLockedBalances[msg.sender] > 0,"Error: unsufficient frozen balance");//ensure user has enough frozen funds
            require(isFreezeFinished(msg.sender, token), "tokens cannot be unlocked yet, max HXB supply much be reached");
            amt = tokenHxbLockedBalances[msg.sender];
            tokenHxbLockedBalances[msg.sender] = 0;
            frozen[msg.sender].lockHxbStartTimestamp = 0;
            totalHxbLocked -= amt;
            hxb.transfer(msg.sender, amt);//make transfer
        }
        else if(token == hxpAddress){
            require(tokenHxpFrozenBalances[msg.sender] > 0,"Error: unsufficient frozen balance");//ensure user has enough frozen funds
            require(isFreezeFinished(msg.sender, token), "tokens cannot be unfrozen yet, can be unfrozen on platform launch");
            amt = tokenHxpFrozenBalances[msg.sender];
            tokenHxpFrozenBalances[msg.sender] = 0;
            frozen[msg.sender].freezeHxpStartTimestamp = 0;
            totalHxpFrozen -= amt;
            hxp.transfer(msg.sender, amt);//make transfer
        }

        else{
            revert();
        }

        emit TokenUnfreeze(msg.sender, amt, token);
    }
    
    ///////////////////////////////
    ////////VIEW ONLY//////////////
    ///////////////////////////////


//HXY frozen for 365 days , HXB locked till maxSupply , HXP frozen till platform launch
    function isFreezeFinished(address _user, address token)
        public
        view
        returns(bool)
    {
        if(token == hxyAddress){
            if(frozen[_user].freezeHxyStartTimestamp == 0){
                return false;
            }
            else{
               return (frozen[_user].freezeHxyStartTimestamp + (365 * daySeconds)) <= now;               
            }
        }
        else if(token == hxbAddress){
            if(frozen[_user].lockHxbStartTimestamp == 0){
                return false;
            }
            else{
                return hxb.mintBlock();   
            }
        }
        else if(token == hxpAddress){
            if(frozen[_user].freezeHxpStartTimestamp == 0){
                return false;
            }
            else{
                return hxpUnlocked;
            }
        }
        else{
            return false;
        }
    }
    
    function distributeManagementShare()
        public
    {
        require(managementShare > 1);
        uint tenPercent = managementShare / 10;
        require(hx.transfer(management1, (tenPercent * 2)), "failed to transfer");
        require(hx.transfer(management2, (tenPercent * 2)), "failed to transfer");
        require(hx.transfer(_p1, tenPercent), "failed to transfer");
        require(hx.transfer(_p2, tenPercent), "failed to transfer");
        require(hx.transfer(_p3, tenPercent), "failed to transfer");
        require(hx.transfer(_p4, tenPercent), "failed to transfer");
        require(hx.transfer(_p5, tenPercent), "failed to transfer");
        require(hx.transfer(_p6, tenPercent), "failed to transfer");
        managementShare = 0;
    }
    
    ///////////////////////
    /////ADMIN ONLY/////////
    //////////////////////
    
    function setHXYAddress(address _hxyAddress)
        onlyMultisig
        public
    {
        hxyAddress = _hxyAddress;
        hxy = Minter(hxyAddress);
    }
    
    function setHXBAddress(address _hxbAddress)
        onlyMultisig
        public
    {
        hxbAddress = _hxbAddress;
        hxb = Minter(hxbAddress);
    }
    
    function setHXPAddress(address _hxpAddress)
        onlyMultisig
        public
    {
        hxpAddress = _hxpAddress;
        hxp = Minter(hxpAddress);
    }
    
    function setSplitter(address _splitter)
        onlyMultisig
        public
    {
        require(_splitter != address(0));
        splitter = _splitter;
    }
    
    function setMultisig(address _multisig)
        onlyAdmins
        public
    {
        require(_multisig != address(0));
        require(!multisigSet);
        multisig = _multisig;
        multisigSet = true;
    }
    
    function setRatios(uint _hxy, uint _hxb, uint _hxp)
        onlyMultisig
        public
    {
        hxyRatio = _hxy;
        hxbRatio = _hxb;
        hxpRatio = _hxp;
    }
    
    
    function unlockHxp()
        onlyMultisig
        public
    {
        hxpUnlocked = true;    
    }
    
    function uint2str(uint i)
    internal
    pure returns (string memory _uintAsString)
    {
        uint _i = i;
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (_i != 0) {
            bstr[k--] = byte(uint8(48 + _i % 10));
            _i /= 10;
        }
        return string(bstr);
    }

    function strConcat(string memory _a, string memory _b, string memory _c
    , string memory _d, string memory _e)
    private
    pure
    returns (string memory){
    bytes memory _ba = bytes(_a);
    bytes memory _bb = bytes(_b);
    bytes memory _bc = bytes(_c);
    bytes memory _bd = bytes(_d);
    bytes memory _be = bytes(_e);
    string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
    bytes memory babcde = bytes(abcde);
    uint k = 0;
    for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
    for (uint i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
    for (uint i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
    for (uint i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
    for (uint i = 0; i < _be.length; i++) babcde[k++] = _be[i];
    return string(babcde);
    }

    function strConcat(string memory _a, string memory _b, string memory _c, string memory _d)
    private
    pure
    returns (string memory) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(string memory _a, string memory _b, string memory _c)
    private
    pure
    returns (string memory) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string memory _a, string memory _b)
    private
    pure
    returns (string memory) {
        return strConcat(_a, _b, "", "", "");
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint40","name":"timestamp","type":"uint40"},{"indexed":false,"internalType":"uint16","name":"day","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"customer","type":"address"},{"indexed":true,"internalType":"address","name":"affiliate","type":"address"}],"name":"LobbyJoined","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint40","name":"timestamp","type":"uint40"},{"indexed":false,"internalType":"uint16","name":"day","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"hearts","type":"uint256"}],"name":"LobbyLeft","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint40","name":"timestamp","type":"uint40"},{"indexed":false,"internalType":"uint16","name":"day","type":"uint16"}],"name":"MissedLobby","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"TokenFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"TokenUnfreeze","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"Freeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"HEX_LAUNCH_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"Unfreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"affiliateRank","type":"uint8"},{"internalType":"uint8","name":"rankSplitPercentage","type":"uint8"}],"name":"addAffiliateRank","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"affiliateRankPercentages","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"uint256","name":"batchSize","type":"uint256"}],"name":"batchLeaveLobby","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeManagementShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"customer","type":"address"},{"internalType":"address","name":"affiliate","type":"address"}],"name":"enterLobby","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"customer","type":"address"},{"internalType":"uint256","name":"day","type":"uint256"}],"name":"exitLobbiesBeforeDay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"frozen","outputs":[{"internalType":"uint256","name":"freezeHxyStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"lockHxbStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"freezeHxpStartTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hxbRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hxpRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hxpUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hxyRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"isFreezeFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedHxb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedHxp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedHxy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multisig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multisigSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"affiliateContract","type":"address"},{"internalType":"uint8","name":"affiliateRank","type":"uint8"}],"name":"registerAffiliate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_hxbAddress","type":"address"}],"name":"setHXBAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_hxpAddress","type":"address"}],"name":"setHXPAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_hxyAddress","type":"address"}],"name":"setHXYAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_multisig","type":"address"}],"name":"setMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hxy","type":"uint256"},{"internalType":"uint256","name":"_hxb","type":"uint256"},{"internalType":"uint256","name":"_hxp","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_splitter","type":"address"}],"name":"setSplitter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"splitter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenHxbLockedBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenHxpFrozenBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenHxyFrozenBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHxbLocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHxpFrozen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHxyFrozen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockHxp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"affiliateContract","type":"address"},{"internalType":"uint8","name":"affiliateRank","type":"uint8"}],"name":"updateAffiliateRank","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"affiliateContract","type":"address"}],"name":"verifyAffiliate","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600080546001600160a01b031990811673f3a2ace8e48751c965ea0a1d064303aca53842b91791829055600180548216739bb6fd000109e24eb38b0deb806382ff9247e47817908190556002805483167316ab6ed897d04856ff138122db4b7767078a20f317908190556003805484166001600160a01b0395861617905560048054841692851692909217909155600580548316919093161790915560646006556103e860075561271060085560098054610100600160a81b0319169055600a80548216737d68c0321cf6b3a12e6e5d5abbaa8f2a13d77fdd17905562015180600b5560188054821673383b80128d3378d9d63ef8b4189971c9240f031e17905560198054821673a65c4cffc2e9848f6fc946030d8942e17f151aa4179055601a8054821673b5cdb0ad2b6097cb051b27d3149ef80eaa623527179055601b805482167386b0c0c3ff5ade3a6f00180d09c1ceeb2b7765ea179055601c8054821673975c3da56b958ab3581d3789544b1cf19c0b8b23179055601d8054821673454f203260a74c0a8b5c0a78fba5b4e8b31dcc63179055601e8054821673976a70754568f4a7d15d04fc8b0d56f914791f5b179055601f805490911673ed03f181fca480a03dd708e3d87a0441cd43513f179055348015620001e557600080fd5b50336000908152601760205260409020805460ff19166001179055620002136001600160e01b03620002a716565b60215560256020527fa54b3e90672405a607381bd4d34034a12c5aad31607067a7ad26573f504ad6e2805460ff199081169091557f20a3e2dd35f58e582c5288344c035e137cace924bb9daf3762b8ef5a58327e2680548216603217905560026000527ff1da3aed71bcbd4afa246ea3711ddde93661ac45b913264dbc974ee389cd7a6380549091166064179055620002fe565b600042635de5a58010620002ed5760405162461bcd60e51b8152600401808060200182810382526024815260200180620039ed6024913960400191505060405180910390fd5b506201518042635de5a57f19010490565b6136df806200030e6000396000f3fe60806040526004361061021e5760003560e01c8063acfd184011610123578063d342da08116100ab578063ebf96b0d1161006f578063ebf96b0d1461080b578063f3283fba14610820578063f64030e114610853578063f9fe055514610868578063fbf9153b1461089b57610246565b8063d342da081461072b578063da30631d1461075e578063e029a28514610773578063e54d702614610788578063ebd33d42146107d857610246565b8063ca506993116100f2578063ca5069931461062c578063cb67574c1461065f578063cb953bde1461068f578063cdfdb7dc146106a4578063d0516650146106da57610246565b8063acfd18401461055c578063af85b60d1461058a578063c8e48d14146105bd578063c93fc83d146105f957610246565b806348d4681b116101a6578063634091971161017557806363409197146104815780636db23e8514610496578063714b0fb1146104ab5780639d5b4f1c146104de578063a8c991c41461051957610246565b806348d4681b146103ca57806350d02dcd146103fd5780635b144253146104395780635fd6ac031461044e57610246565b806322c3da7d116101ed57806322c3da7d146103075780632fe08a1a1461031c5780633398e0af146103515780633cd8045e146103845780634783c35b146103b557610246565b8063015adb801461024b57806310fb06d61461029057806312f69b21146102a55780631ea4b541146102ce57610246565b36610246573415610239576102343360006108ce565b610244565b610244336000610bd4565b005b600080fd5b34801561025757600080fd5b5061027e6004803603602081101561026e57600080fd5b50356001600160a01b0316610c8e565b60408051918252519081900360200190f35b34801561029c57600080fd5b5061027e610ca0565b3480156102b157600080fd5b506102ba610ca6565b604080519115158252519081900360200190f35b3480156102da57600080fd5b50610244600480360360408110156102f157600080fd5b506001600160a01b038135169060200135610bd4565b34801561031357600080fd5b5061027e610caf565b34801561032857600080fd5b506102446004803603604081101561033f57600080fd5b5060ff81358116916020013516610cb5565b34801561035d57600080fd5b506102446004803603602081101561037457600080fd5b50356001600160a01b0316610de3565b34801561039057600080fd5b50610399610e67565b604080516001600160a01b039092168252519081900360200190f35b3480156103c157600080fd5b50610399610e76565b3480156103d657600080fd5b5061027e600480360360208110156103ed57600080fd5b50356001600160a01b0316610e8a565b34801561040957600080fd5b506102446004803603604081101561042057600080fd5b5080356001600160a01b0316906020013560ff16610e9c565b34801561044557600080fd5b50610244610f74565b34801561045a57600080fd5b5061027e6004803603602081101561047157600080fd5b50356001600160a01b0316611636565b34801561048d57600080fd5b506102ba611648565b3480156104a257600080fd5b5061027e611651565b3480156104b757600080fd5b5061027e600480360360208110156104ce57600080fd5b50356001600160a01b0316611657565b3480156104ea57600080fd5b506102ba6004803603604081101561050157600080fd5b506001600160a01b0381358116916020013516611669565b34801561052557600080fd5b506105466004803603602081101561053c57600080fd5b503560ff166117d8565b6040805160ff9092168252519081900360200190f35b6102446004803603604081101561057257600080fd5b506001600160a01b03813581169160200135166108ce565b34801561059657600080fd5b50610244600480360360208110156105ad57600080fd5b50356001600160a01b03166117ed565b3480156105c957600080fd5b50610244600480360360408110156105e057600080fd5b5080356001600160a01b0316906020013560ff16611a23565b34801561060557600080fd5b506102446004803603602081101561061c57600080fd5b50356001600160a01b0316611b49565b34801561063857600080fd5b506102446004803603602081101561064f57600080fd5b50356001600160a01b0316611bd3565b34801561066b57600080fd5b506102446004803603604081101561068257600080fd5b5080359060200135611fc0565b34801561069b57600080fd5b5061027e612176565b3480156106b057600080fd5b50610244600480360360608110156106c757600080fd5b508035906020810135906040013561217c565b3480156106e657600080fd5b5061070d600480360360208110156106fd57600080fd5b50356001600160a01b03166121df565b60408051938452602084019290925282820152519081900360600190f35b34801561073757600080fd5b5061027e6004803603602081101561074e57600080fd5b50356001600160a01b0316612200565b34801561076a57600080fd5b5061027e612212565b34801561077f57600080fd5b5061027e61221a565b34801561079457600080fd5b506107bb600480360360208110156107ab57600080fd5b50356001600160a01b0316612220565b60408051921515835260ff90911660208301528051918290030190f35b3480156107e457600080fd5b50610244600480360360208110156107fb57600080fd5b50356001600160a01b0316612241565b34801561081757600080fd5b5061027e6122c5565b34801561082c57600080fd5b506102446004803603602081101561084357600080fd5b50356001600160a01b03166122cb565b34801561085f57600080fd5b50610244612370565b34801561087457600080fd5b506102446004803603602081101561088b57600080fd5b50356001600160a01b03166123d4565b3480156108a757600080fd5b5061027e600480360360208110156108be57600080fd5b50356001600160a01b0316612458565b60003411610917576040805162461bcd60e51b8152602060048201526011602482015270696e76616c6964206574682076616c756560781b604482015290519081900360640190fd5b3360009081526022602090815260408083205460ff908116808552602590935290832054166001600160a01b03841615801590610957575060008160ff16115b15610a63576040805163ce7d1f7760e01b81526001600160a01b0386166004820152905160019450606460ff84163402049160008051602061352e8339815191529163ce7d1f77918491602480830192600092919082900301818588803b1580156109c157600080fd5b505af11580156109d5573d6000803e3d6000fd5b505050505060008134031115610a5d57600a546040805163ce7d1f7760e01b81526001600160a01b0390921660048301525160008051602061352e8339815191529163ce7d1f7791348590039160248082019260009290919082900301818588803b158015610a4357600080fd5b505af1158015610a57573d6000803e3d6000fd5b50505050505b50610ad8565b600a546040805163ce7d1f7760e01b81526001600160a01b0390921660048301525160008051602061352e8339815191529163ce7d1f7791349160248082019260009290919082900301818588803b158015610abe57600080fd5b505af1158015610ad2573d6000803e3d6000fd5b50505050505b6000610ae261246a565b60008181526023602090815260408083208054349081019091556001600160a01b038b16808552602480855283862087875260018101865293862080549093019092559093529190525490915061ffff16610b5f576001600160a01b0386166000908152602460205260409020805461ffff191661ffff83161790555b600084610b6d576000610b6f565b855b6040805164ffffffffff4216815261ffff85166020820152348183015290519192506001600160a01b0380841692908a16917e681a47c0877ff2a9ef6443018599a26bd3df9109a74bf7bcdf3286ecef41f4919081900360600190a350505050505050565b610bdc613386565b6040518060400160405280610bef61246a565b815260200160215481525090506000808311610c0c578151610c0e565b825b6001600160a01b03851660009081526024602052604090205490915061ffff168111610c6b5760405162461bcd60e51b81526004018080602001828103825260398152602001806135ad6039913960400191505060405180910390fd5b610c7582826124bf565b6020820151602155610c8784826126f3565b5050505050565b60136020526000908152604090205481565b60085481565b600f5460ff1681565b600e5481565b3360009081526017602052604090205460ff16610d08576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60ff8083166000908152602560205260409020541615610d6f576040805162461bcd60e51b815260206004820152601d60248201527f416666696c696174652072616e6b20616c726561647920657869737473000000604482015290519081900360640190fd5b60008160ff16118015610d86575060648160ff1611155b610dc15760405162461bcd60e51b81526004018080602001828103825260268152602001806136436026913960400191505060405180910390fd5b60ff9182166000908152602560205260409020805460ff191691909216179055565b60095461010090046001600160a01b03163314610e38576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600080546001600160a01b03199081166001600160a01b03938416179182905560038054929093169116179055565b600a546001600160a01b031681565b60095461010090046001600160a01b031681565b60146020526000908152604090205481565b3360009081526017602052604090205460ff16610eef576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6001600160a01b03821660009081526022602052604090205460ff1615610f475760405162461bcd60e51b81526004018080602001828103825260288152602001806133ea6028913960400191505060405180910390fd5b6001600160a01b03919091166000908152602260205260409020805460ff191660ff909216919091179055565b600160205411610f8357600080fd5b6000600a60205481610f9157fe5b6018546040805163a9059cbb60e01b81526001600160a01b03909216600483015292909104600281026024830152915191925060008051602061352e8339815191529163a9059cbb916044808201926020929091908290030181600087803b158015610ffc57600080fd5b505af1158015611010573d6000803e3d6000fd5b505050506040513d602081101561102657600080fd5b505161106e576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b6019546040805163a9059cbb60e01b81526001600160a01b0390921660048301526002830260248301525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b1580156110d057600080fd5b505af11580156110e4573d6000803e3d6000fd5b505050506040513d60208110156110fa57600080fd5b5051611142576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b601a546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018390525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b1580156111a257600080fd5b505af11580156111b6573d6000803e3d6000fd5b505050506040513d60208110156111cc57600080fd5b5051611214576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b601b546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018390525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b15801561127457600080fd5b505af1158015611288573d6000803e3d6000fd5b505050506040513d602081101561129e57600080fd5b50516112e6576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b601c546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018390525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b15801561134657600080fd5b505af115801561135a573d6000803e3d6000fd5b505050506040513d602081101561137057600080fd5b50516113b8576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b601d546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018390525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b15801561141857600080fd5b505af115801561142c573d6000803e3d6000fd5b505050506040513d602081101561144257600080fd5b505161148a576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b601e546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018390525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b1580156114ea57600080fd5b505af11580156114fe573d6000803e3d6000fd5b505050506040513d602081101561151457600080fd5b505161155c576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b601f546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018390525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b1580156115bc57600080fd5b505af11580156115d0573d6000803e3d6000fd5b505050506040513d60208110156115e657600080fd5b505161162e576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b506000602055565b60126020526000908152604090205481565b60095460ff1681565b60065481565b60156020526000908152604090205481565b600080546001600160a01b03838116911614156116d1576001600160a01b0383166000908152601660205260409020546116a5575060006117d2565b50600b546001600160a01b0383166000908152601660205260409020544261016d9092020111156117d2565b6001546001600160a01b0383811691161415611784576001600160a01b03831660009081526016602052604090206001015461170f575060006117d2565b600480546040805163714a35fb60e01b815290516001600160a01b039092169263714a35fb928282019260209290829003018186803b15801561175157600080fd5b505afa158015611765573d6000803e3d6000fd5b505050506040513d602081101561177b57600080fd5b505190506117d2565b6002546001600160a01b03838116911614156117ce576001600160a01b0383166000908152601660205260409020600201546117c2575060006117d2565b50600f5460ff166117d2565b5060005b92915050565b60256020526000908152604090205460ff1681565b6117f73382611669565b156118055761180581611bd3565b600080546001600160a01b03838116911614156118a2575033600090815260106020526040902054806118695760405162461bcd60e51b815260040180806020018281038252602f8152602001806135e6602f913960400191505060405180910390fd5b33600090815260106020908152604080832083905560138252808320805485019055600c805485019055601690915290204290556119df565b6001546001600160a01b0383811691161415611943575033600090815260116020526040902054806119055760405162461bcd60e51b815260040180806020018281038252602d81526020018061354e602d913960400191505060405180910390fd5b33600090815260116020908152604080832083905560148252808320805485019055600d8054850190556016909152902042600191909101556119df565b6002546001600160a01b0383811691161415610246575033600090815260126020526040902054806119a65760405162461bcd60e51b815260040180806020018281038252602f8152602001806135e6602f913960400191505060405180910390fd5b33600090815260126020908152604080832083905560158252808320805485019055600e80548501905560169091529020426002909101555b6040805182815290516001600160a01b0384169133917fb24278c85b89104d64c441ac5a80b8e5a6c251b4c6eaad8e92b114d0e48a46649181900360200190a35050565b3360009081526017602052604090205460ff16611a76576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6001600160a01b03821660009081526022602052604090205460ff82811691161415611ad35760405162461bcd60e51b815260040180806020018281038252603281526020018061357b6032913960400191505060405180910390fd5b6001600160a01b03821660009081526022602090815260408083205460ff9081168452602590925280832054848316845292205491811691161015610f475760405162461bcd60e51b815260040180806020018281038252603f815260200180613412603f913960400191505060405180910390fd5b60095461010090046001600160a01b03163314611b9e576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b6001600160a01b038116611bb157600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b0383811691161415611d2c5733600090815260136020526040902054611c355760405162461bcd60e51b81526004018080602001828103825260228152602001806134816022913960400191505060405180910390fd5b611c3f3383611669565b611c7a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806134a3602a913960400191505060405180910390fd5b5033600081815260136020908152604080832080549084905560168352818420849055600c80548290039055600354825163a9059cbb60e01b8152600481019690965260248601829052915190946001600160a01b039092169363a9059cbb93604480850194919392918390030190829087803b158015611cfa57600080fd5b505af1158015611d0e573d6000803e3d6000fd5b505050506040513d6020811015611d2457600080fd5b50611f7c9050565b6001546001600160a01b0383811691161415611e535733600090815260146020526040902054611d8d5760405162461bcd60e51b81526004018080602001828103825260228152602001806134816022913960400191505060405180910390fd5b611d973383611669565b611dd25760405162461bcd60e51b815260040180806020018281038252603d8152602001806134cd603d913960400191505060405180910390fd5b5033600081815260146020908152604080832080549084905560168352818420600101849055600d8054829003905560048054835163a9059cbb60e01b81529182019690965260248101829052915190946001600160a01b03169363a9059cbb93604480850194919392918390030190829087803b158015611cfa57600080fd5b6002546001600160a01b03838116911614156102465733600090815260156020526040902054611eb45760405162461bcd60e51b81526004018080602001828103825260228152602001806134816022913960400191505060405180910390fd5b611ebe3383611669565b611ef95760405162461bcd60e51b81526004018080602001828103825260418152602001806136696041913960600191505060405180910390fd5b5033600081815260156020908152604080832080549084905560168352818420600201849055600e80548290039055600554825163a9059cbb60e01b8152600481019690965260248601829052915190946001600160a01b039092169363a9059cbb93604480850194919392918390030190829087803b158015611cfa57600080fd5b6040805182815290516001600160a01b0384169133917f964600758f4cfe7f891a3b7f8b8cf1c48fb75de04a0824a01c7c18fb56dbb0e99181900360200190a35050565b611fc861246a565b82106120055760405162461bcd60e51b815260040180806020018281038252602b8152602001806133bf602b913960400191505060405180910390fd5b61200d6133a0565b604080516344f0de7560e01b8152306004820152815160008051602061352e833981519152926344f0de759260248082019391829003018186803b15801561205457600080fd5b505afa158015612068573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250604081101561208d57600080fd5b50905060ff83166001811b82600886901c600281106120a857fe5b602002015116901c6001146120ee5760405162461bcd60e51b815260040180806020018281038252602e815260200180613615602e913960400191505060405180910390fd5b604080516370a0823160e01b8152306004820152905160009160008051602061352e833981519152916370a0823191602480820192602092909190829003018186803b15801561213d57600080fd5b505afa158015612151573d6000803e3d6000fd5b505050506040513d602081101561216757600080fd5b50519050610c87848483612f0f565b600c5481565b60095461010090046001600160a01b031633146121d1576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600692909255600755600855565b60166020526000908152604090208054600182015460029092015490919083565b60106020526000908152604090205481565b635de5a58081565b60075481565b6001600160a01b031660009081526022602052604090205460ff1680151591565b60095461010090046001600160a01b03163314612296576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600180546001600160a01b03199081166001600160a01b03938416179182905560048054929093169116179055565b600d5481565b3360009081526017602052604090205460ff1661231e576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6001600160a01b03811661233157600080fd5b60095460ff161561234157600080fd5b6009805460ff196001600160a01b0390931661010002610100600160a81b031990911617919091166001179055565b60095461010090046001600160a01b031633146123c5576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600f805460ff19166001179055565b60095461010090046001600160a01b03163314612429576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600280546001600160a01b03199081166001600160a01b03938416179182905560058054929093169116179055565b60116020526000908152604090205481565b600042635de5a580106124ae5760405162461bcd60e51b815260040180806020018281038252602481526020018061350a6024913960400191505060405180910390fd5b506201518042635de5a57f19010490565b604080516370a0823160e01b8152306004820152905160009160008051602061352e833981519152916370a0823191602480820192602092909190829003018186803b15801561250e57600080fd5b505afa158015612522573d6000803e3d6000fd5b505050506040513d602081101561253857600080fd5b505160208401519091508211156126ee576125516133a0565b604080516344f0de7560e01b8152306004820152815160008051602061352e833981519152926344f0de759260248082019391829003018186803b15801561259857600080fd5b505afa1580156125ac573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060408110156125d157600080fd5b5090505b82846020015110156126ec57602084015160ff8116906001821b90839060081c600281106125ff57fe5b602002015116901c6001141561268d5761261f8460200151600084612f0f565b60208086015160008181526023835260409081902060010154815164ffffffffff4216815261ffff909316938301939093528181019290925290519193507f4ef42a363692799c7d4d46d4f32bd6288dfd49250295a6476085752226be5c9a919081900360600190a16126dc565b6020808501516040805164ffffffffff4216815261ffff9092169282019290925281517f432c84b72308646178f4cc5aa50295cad3ba1dca6c703b79f1818c956e345b71929181900390910190a15b60208401805160010190526125d5565b505b505050565b6001600160a01b0382166000908152602460205260408120805482919061ffff16801580159061272257508481105b15612ee9575b848110156127e9576000818152602360205260409020541580159061275d575060008181526023602052604090206001015415155b156127e1576000818152602360205260409020600101546127af5760405162461bcd60e51b81526004018080602001828103825260308152602001806134516030913960400191505060405180910390fd5b60008181526023602090815260408083208054600191820154918701909352922054909102816127db57fe5b04830192505b600101612728565b8215612ee9576040805163a9059cbb60e01b81526001600160a01b03881660048201526002606e60648702048087039190910480820160248401819052935191939092909160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b15801561286557600080fd5b505af1158015612879573d6000803e3d6000fd5b505050506040513d602081101561288f57600080fd5b505160408051808201909152601381527202330b4b632b2103a37903a3930b739b332b91606d1b60208201526128fc906128c884613077565b604051806040016040528060168152602001752c20696e73756666696369656e742062616c616e636560501b81525061313d565b906129855760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561294a578181015183820152602001612932565b50505050905090810190601f1680156129775780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060208054830190556305f5e1008110612ee5576000546001600160a01b031615612b7157600360009054906101000a90046001600160a01b03166001600160a01b031663714a35fb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129f857600080fd5b505afa158015612a0c573d6000803e3d6000fd5b505050506040513d6020811015612a2257600080fd5b505115612ade5760006006548281612a3657fe5b600354604080516370a0823160e01b8152306004820152905193909204935083926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015612a8857600080fd5b505afa158015612a9c573d6000803e3d6000fd5b505050506040513d6020811015612ab257600080fd5b505110612ad8576001600160a01b038a1660009081526010602052604090208054820190555b50612b71565b6003546006546001600160a01b039091169063d4d5763c908381612afe57fe5b048b60016040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015612b5857600080fd5b505af1158015612b6c573d6000803e3d6000fd5b505050505b6001546001600160a01b031615612e2357600480546040805163714a35fb60e01b815290516001600160a01b039092169263714a35fb928282019260209290829003018186803b158015612bc457600080fd5b505afa158015612bd8573d6000803e3d6000fd5b505050506040513d6020811015612bee57600080fd5b505115612cad5760006007548281612c0257fe5b60048054604080516370a0823160e01b815230938101939093525193909204935083926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612c5757600080fd5b505afa158015612c6b573d6000803e3d6000fd5b505050506040513d6020811015612c8157600080fd5b505110612ca7576001600160a01b038a1660009081526011602052604090208054820190555b50612e23565b6004805460408051630fe6f31b60e21b815290516001600160a01b03909216926377e1ac6c928492633f9bcc6c9281810192602092909190829003018186803b158015612cf957600080fd5b505afa158015612d0d573d6000803e3d6000fd5b505050506040513d6020811015612d2357600080fd5b50516007548481612d3057fe5b0402306040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050602060405180830381600087803b158015612d8257600080fd5b505af1158015612d96573d6000803e3d6000fd5b505050506040513d6020811015612dac57600080fd5b5051612df4576040805162461bcd60e51b815260206004820152601260248201527131b7bab632103737ba1036b4b73a10242c2160711b604482015290519081900360640190fd5b6007548181612dff57fe5b6001600160a01b038b16600090815260116020526040902080549290910490910190555b6002546001600160a01b031615612ee55760006008548281612e4157fe5b600554604080516370a0823160e01b8152306004820152905193909204935083926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015612e9357600080fd5b505afa158015612ea7573d6000803e3d6000fd5b505050506040513d6020811015612ebd57600080fd5b505110612ee3576001600160a01b038a1660009081526012602052604090208054820190555b505b5050505b815461ffff168114612f0557815461ffff191661ffff82161782555b5090949350505050565b600060008051602061352e8339815191526001600160a01b031663cbb151d385856040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015612f6d57600080fd5b505af1158015612f81573d6000803e3d6000fd5b5050604080516370a0823160e01b8152306004820152905185935060008051602061352e83398151915292506370a0823191602480820192602092909190829003018186803b158015612fd357600080fd5b505afa158015612fe7573d6000803e3d6000fd5b505050506040513d6020811015612ffd57600080fd5b505160008681526023602052604090206001018054838303019081905590935061306e576040805162461bcd60e51b815260206004820181905260248201527f48656172747320726563656976656420666f722061206c6f6262792069732030604482015290519081900360640190fd5b50909392505050565b6060818061309e5750506040805180820190915260018152600360fc1b6020820152613138565b8060005b81156130b657600101600a820491506130a2565b6060816040519080825280601f01601f1916602001820160405280156130e3576020820181803683370190505b50905060001982015b841561313157600a850660300160f81b8282806001900393508151811061310f57fe5b60200101906001600160f81b031916908160001a905350600a850494506130ec565b5093505050505b919050565b606061316a8484846040518060200160405280600081525060405180602001604052806000815250613172565b949350505050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156131c6576020820181803683370190505b509050806000805b885181101561321f578881815181106131e357fe5b602001015160f81c60f81b83838060010194508151811061320057fe5b60200101906001600160f81b031916908160001a9053506001016131ce565b5060005b87518110156132745787818151811061323857fe5b602001015160f81c60f81b83838060010194508151811061325557fe5b60200101906001600160f81b031916908160001a905350600101613223565b5060005b86518110156132c95786818151811061328d57fe5b602001015160f81c60f81b8383806001019450815181106132aa57fe5b60200101906001600160f81b031916908160001a905350600101613278565b5060005b855181101561331e578581815181106132e257fe5b602001015160f81c60f81b8383806001019450815181106132ff57fe5b60200101906001600160f81b031916908160001a9053506001016132cd565b5060005b84518110156133735784818151811061333757fe5b602001015160f81c60f81b83838060010194508151811061335457fe5b60200101906001600160f81b031916908160001a905350600101613322565b50909d9c50505050505050505050505050565b604051806040016040528060008152602001600081525090565b6040518060400160405280600290602082028036833750919291505056fe596f75206d757374206f6e6c79206c65617665206c6f62626965732074686174206861766520656e646564416666696c6961746520636f6e747261637420697320616c7265616479207265676973746572656443616e6e6f742073657420616e20616666696c6961746552616e6b2077697468206c6f7765722070657263656e74616765207468616e2070726576696f7573486561727473207265636569766564206d757374206265203e20302c206c65617665206c6f62627920666f72206461794572726f723a20756e73756666696369656e742066726f7a656e2062616c616e6365746f6b656e732063616e6e6f7420626520756e66726f7a656e207965742c206d696e2039302064617973746f6b656e732063616e6e6f7420626520756e6c6f636b6564207965742c206d61782048584220737570706c79206d75636820626520726561636865644c61756e63682074696d65206e6f74206265666f72652063757272656e7420626c6f636b0000000000000000000000002b591e99afe9f32eaa6214f7b7629768c40eeb394572726f723a20696e73756666696369656e742062616c616e636520617661696c61626c6520746f206c6f636b4e657720416666696c696174652072616e6b206d75737420626520646966666572656e74207468616e2070726576696f7573437573746f6d657220686173206e6f20616374697665206c6f62627920656e747269657320666f7220746869732074696d6520706572696f644572726f723a20696e73756666696369656e742062616c616e636520617661696c61626c6520746f20667265657a65596f75206d6179206f6e6c79206c65617665206c6f626269657320776974682061637469766520656e7472696573416666696c696174652053706c6974206d757374206265206265747765656e20302d31303025746f6b656e732063616e6e6f7420626520756e66726f7a656e207965742c2063616e20626520756e66726f7a656e206f6e20706c6174666f726d206c61756e6368a26469706673582212208b548ef9fb3c00bb646a1d8e8a015d97c453e8df7b39158c386a6577f31bd2d964736f6c634300060400334c61756e63682074696d65206e6f74206265666f72652063757272656e7420626c6f636b

Deployed Bytecode

0x60806040526004361061021e5760003560e01c8063acfd184011610123578063d342da08116100ab578063ebf96b0d1161006f578063ebf96b0d1461080b578063f3283fba14610820578063f64030e114610853578063f9fe055514610868578063fbf9153b1461089b57610246565b8063d342da081461072b578063da30631d1461075e578063e029a28514610773578063e54d702614610788578063ebd33d42146107d857610246565b8063ca506993116100f2578063ca5069931461062c578063cb67574c1461065f578063cb953bde1461068f578063cdfdb7dc146106a4578063d0516650146106da57610246565b8063acfd18401461055c578063af85b60d1461058a578063c8e48d14146105bd578063c93fc83d146105f957610246565b806348d4681b116101a6578063634091971161017557806363409197146104815780636db23e8514610496578063714b0fb1146104ab5780639d5b4f1c146104de578063a8c991c41461051957610246565b806348d4681b146103ca57806350d02dcd146103fd5780635b144253146104395780635fd6ac031461044e57610246565b806322c3da7d116101ed57806322c3da7d146103075780632fe08a1a1461031c5780633398e0af146103515780633cd8045e146103845780634783c35b146103b557610246565b8063015adb801461024b57806310fb06d61461029057806312f69b21146102a55780631ea4b541146102ce57610246565b36610246573415610239576102343360006108ce565b610244565b610244336000610bd4565b005b600080fd5b34801561025757600080fd5b5061027e6004803603602081101561026e57600080fd5b50356001600160a01b0316610c8e565b60408051918252519081900360200190f35b34801561029c57600080fd5b5061027e610ca0565b3480156102b157600080fd5b506102ba610ca6565b604080519115158252519081900360200190f35b3480156102da57600080fd5b50610244600480360360408110156102f157600080fd5b506001600160a01b038135169060200135610bd4565b34801561031357600080fd5b5061027e610caf565b34801561032857600080fd5b506102446004803603604081101561033f57600080fd5b5060ff81358116916020013516610cb5565b34801561035d57600080fd5b506102446004803603602081101561037457600080fd5b50356001600160a01b0316610de3565b34801561039057600080fd5b50610399610e67565b604080516001600160a01b039092168252519081900360200190f35b3480156103c157600080fd5b50610399610e76565b3480156103d657600080fd5b5061027e600480360360208110156103ed57600080fd5b50356001600160a01b0316610e8a565b34801561040957600080fd5b506102446004803603604081101561042057600080fd5b5080356001600160a01b0316906020013560ff16610e9c565b34801561044557600080fd5b50610244610f74565b34801561045a57600080fd5b5061027e6004803603602081101561047157600080fd5b50356001600160a01b0316611636565b34801561048d57600080fd5b506102ba611648565b3480156104a257600080fd5b5061027e611651565b3480156104b757600080fd5b5061027e600480360360208110156104ce57600080fd5b50356001600160a01b0316611657565b3480156104ea57600080fd5b506102ba6004803603604081101561050157600080fd5b506001600160a01b0381358116916020013516611669565b34801561052557600080fd5b506105466004803603602081101561053c57600080fd5b503560ff166117d8565b6040805160ff9092168252519081900360200190f35b6102446004803603604081101561057257600080fd5b506001600160a01b03813581169160200135166108ce565b34801561059657600080fd5b50610244600480360360208110156105ad57600080fd5b50356001600160a01b03166117ed565b3480156105c957600080fd5b50610244600480360360408110156105e057600080fd5b5080356001600160a01b0316906020013560ff16611a23565b34801561060557600080fd5b506102446004803603602081101561061c57600080fd5b50356001600160a01b0316611b49565b34801561063857600080fd5b506102446004803603602081101561064f57600080fd5b50356001600160a01b0316611bd3565b34801561066b57600080fd5b506102446004803603604081101561068257600080fd5b5080359060200135611fc0565b34801561069b57600080fd5b5061027e612176565b3480156106b057600080fd5b50610244600480360360608110156106c757600080fd5b508035906020810135906040013561217c565b3480156106e657600080fd5b5061070d600480360360208110156106fd57600080fd5b50356001600160a01b03166121df565b60408051938452602084019290925282820152519081900360600190f35b34801561073757600080fd5b5061027e6004803603602081101561074e57600080fd5b50356001600160a01b0316612200565b34801561076a57600080fd5b5061027e612212565b34801561077f57600080fd5b5061027e61221a565b34801561079457600080fd5b506107bb600480360360208110156107ab57600080fd5b50356001600160a01b0316612220565b60408051921515835260ff90911660208301528051918290030190f35b3480156107e457600080fd5b50610244600480360360208110156107fb57600080fd5b50356001600160a01b0316612241565b34801561081757600080fd5b5061027e6122c5565b34801561082c57600080fd5b506102446004803603602081101561084357600080fd5b50356001600160a01b03166122cb565b34801561085f57600080fd5b50610244612370565b34801561087457600080fd5b506102446004803603602081101561088b57600080fd5b50356001600160a01b03166123d4565b3480156108a757600080fd5b5061027e600480360360208110156108be57600080fd5b50356001600160a01b0316612458565b60003411610917576040805162461bcd60e51b8152602060048201526011602482015270696e76616c6964206574682076616c756560781b604482015290519081900360640190fd5b3360009081526022602090815260408083205460ff908116808552602590935290832054166001600160a01b03841615801590610957575060008160ff16115b15610a63576040805163ce7d1f7760e01b81526001600160a01b0386166004820152905160019450606460ff84163402049160008051602061352e8339815191529163ce7d1f77918491602480830192600092919082900301818588803b1580156109c157600080fd5b505af11580156109d5573d6000803e3d6000fd5b505050505060008134031115610a5d57600a546040805163ce7d1f7760e01b81526001600160a01b0390921660048301525160008051602061352e8339815191529163ce7d1f7791348590039160248082019260009290919082900301818588803b158015610a4357600080fd5b505af1158015610a57573d6000803e3d6000fd5b50505050505b50610ad8565b600a546040805163ce7d1f7760e01b81526001600160a01b0390921660048301525160008051602061352e8339815191529163ce7d1f7791349160248082019260009290919082900301818588803b158015610abe57600080fd5b505af1158015610ad2573d6000803e3d6000fd5b50505050505b6000610ae261246a565b60008181526023602090815260408083208054349081019091556001600160a01b038b16808552602480855283862087875260018101865293862080549093019092559093529190525490915061ffff16610b5f576001600160a01b0386166000908152602460205260409020805461ffff191661ffff83161790555b600084610b6d576000610b6f565b855b6040805164ffffffffff4216815261ffff85166020820152348183015290519192506001600160a01b0380841692908a16917e681a47c0877ff2a9ef6443018599a26bd3df9109a74bf7bcdf3286ecef41f4919081900360600190a350505050505050565b610bdc613386565b6040518060400160405280610bef61246a565b815260200160215481525090506000808311610c0c578151610c0e565b825b6001600160a01b03851660009081526024602052604090205490915061ffff168111610c6b5760405162461bcd60e51b81526004018080602001828103825260398152602001806135ad6039913960400191505060405180910390fd5b610c7582826124bf565b6020820151602155610c8784826126f3565b5050505050565b60136020526000908152604090205481565b60085481565b600f5460ff1681565b600e5481565b3360009081526017602052604090205460ff16610d08576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60ff8083166000908152602560205260409020541615610d6f576040805162461bcd60e51b815260206004820152601d60248201527f416666696c696174652072616e6b20616c726561647920657869737473000000604482015290519081900360640190fd5b60008160ff16118015610d86575060648160ff1611155b610dc15760405162461bcd60e51b81526004018080602001828103825260268152602001806136436026913960400191505060405180910390fd5b60ff9182166000908152602560205260409020805460ff191691909216179055565b60095461010090046001600160a01b03163314610e38576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600080546001600160a01b03199081166001600160a01b03938416179182905560038054929093169116179055565b600a546001600160a01b031681565b60095461010090046001600160a01b031681565b60146020526000908152604090205481565b3360009081526017602052604090205460ff16610eef576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6001600160a01b03821660009081526022602052604090205460ff1615610f475760405162461bcd60e51b81526004018080602001828103825260288152602001806133ea6028913960400191505060405180910390fd5b6001600160a01b03919091166000908152602260205260409020805460ff191660ff909216919091179055565b600160205411610f8357600080fd5b6000600a60205481610f9157fe5b6018546040805163a9059cbb60e01b81526001600160a01b03909216600483015292909104600281026024830152915191925060008051602061352e8339815191529163a9059cbb916044808201926020929091908290030181600087803b158015610ffc57600080fd5b505af1158015611010573d6000803e3d6000fd5b505050506040513d602081101561102657600080fd5b505161106e576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b6019546040805163a9059cbb60e01b81526001600160a01b0390921660048301526002830260248301525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b1580156110d057600080fd5b505af11580156110e4573d6000803e3d6000fd5b505050506040513d60208110156110fa57600080fd5b5051611142576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b601a546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018390525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b1580156111a257600080fd5b505af11580156111b6573d6000803e3d6000fd5b505050506040513d60208110156111cc57600080fd5b5051611214576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b601b546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018390525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b15801561127457600080fd5b505af1158015611288573d6000803e3d6000fd5b505050506040513d602081101561129e57600080fd5b50516112e6576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b601c546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018390525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b15801561134657600080fd5b505af115801561135a573d6000803e3d6000fd5b505050506040513d602081101561137057600080fd5b50516113b8576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b601d546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018390525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b15801561141857600080fd5b505af115801561142c573d6000803e3d6000fd5b505050506040513d602081101561144257600080fd5b505161148a576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b601e546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018390525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b1580156114ea57600080fd5b505af11580156114fe573d6000803e3d6000fd5b505050506040513d602081101561151457600080fd5b505161155c576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b601f546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018390525160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b1580156115bc57600080fd5b505af11580156115d0573d6000803e3d6000fd5b505050506040513d60208110156115e657600080fd5b505161162e576040805162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015290519081900360640190fd5b506000602055565b60126020526000908152604090205481565b60095460ff1681565b60065481565b60156020526000908152604090205481565b600080546001600160a01b03838116911614156116d1576001600160a01b0383166000908152601660205260409020546116a5575060006117d2565b50600b546001600160a01b0383166000908152601660205260409020544261016d9092020111156117d2565b6001546001600160a01b0383811691161415611784576001600160a01b03831660009081526016602052604090206001015461170f575060006117d2565b600480546040805163714a35fb60e01b815290516001600160a01b039092169263714a35fb928282019260209290829003018186803b15801561175157600080fd5b505afa158015611765573d6000803e3d6000fd5b505050506040513d602081101561177b57600080fd5b505190506117d2565b6002546001600160a01b03838116911614156117ce576001600160a01b0383166000908152601660205260409020600201546117c2575060006117d2565b50600f5460ff166117d2565b5060005b92915050565b60256020526000908152604090205460ff1681565b6117f73382611669565b156118055761180581611bd3565b600080546001600160a01b03838116911614156118a2575033600090815260106020526040902054806118695760405162461bcd60e51b815260040180806020018281038252602f8152602001806135e6602f913960400191505060405180910390fd5b33600090815260106020908152604080832083905560138252808320805485019055600c805485019055601690915290204290556119df565b6001546001600160a01b0383811691161415611943575033600090815260116020526040902054806119055760405162461bcd60e51b815260040180806020018281038252602d81526020018061354e602d913960400191505060405180910390fd5b33600090815260116020908152604080832083905560148252808320805485019055600d8054850190556016909152902042600191909101556119df565b6002546001600160a01b0383811691161415610246575033600090815260126020526040902054806119a65760405162461bcd60e51b815260040180806020018281038252602f8152602001806135e6602f913960400191505060405180910390fd5b33600090815260126020908152604080832083905560158252808320805485019055600e80548501905560169091529020426002909101555b6040805182815290516001600160a01b0384169133917fb24278c85b89104d64c441ac5a80b8e5a6c251b4c6eaad8e92b114d0e48a46649181900360200190a35050565b3360009081526017602052604090205460ff16611a76576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6001600160a01b03821660009081526022602052604090205460ff82811691161415611ad35760405162461bcd60e51b815260040180806020018281038252603281526020018061357b6032913960400191505060405180910390fd5b6001600160a01b03821660009081526022602090815260408083205460ff9081168452602590925280832054848316845292205491811691161015610f475760405162461bcd60e51b815260040180806020018281038252603f815260200180613412603f913960400191505060405180910390fd5b60095461010090046001600160a01b03163314611b9e576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b6001600160a01b038116611bb157600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b0383811691161415611d2c5733600090815260136020526040902054611c355760405162461bcd60e51b81526004018080602001828103825260228152602001806134816022913960400191505060405180910390fd5b611c3f3383611669565b611c7a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806134a3602a913960400191505060405180910390fd5b5033600081815260136020908152604080832080549084905560168352818420849055600c80548290039055600354825163a9059cbb60e01b8152600481019690965260248601829052915190946001600160a01b039092169363a9059cbb93604480850194919392918390030190829087803b158015611cfa57600080fd5b505af1158015611d0e573d6000803e3d6000fd5b505050506040513d6020811015611d2457600080fd5b50611f7c9050565b6001546001600160a01b0383811691161415611e535733600090815260146020526040902054611d8d5760405162461bcd60e51b81526004018080602001828103825260228152602001806134816022913960400191505060405180910390fd5b611d973383611669565b611dd25760405162461bcd60e51b815260040180806020018281038252603d8152602001806134cd603d913960400191505060405180910390fd5b5033600081815260146020908152604080832080549084905560168352818420600101849055600d8054829003905560048054835163a9059cbb60e01b81529182019690965260248101829052915190946001600160a01b03169363a9059cbb93604480850194919392918390030190829087803b158015611cfa57600080fd5b6002546001600160a01b03838116911614156102465733600090815260156020526040902054611eb45760405162461bcd60e51b81526004018080602001828103825260228152602001806134816022913960400191505060405180910390fd5b611ebe3383611669565b611ef95760405162461bcd60e51b81526004018080602001828103825260418152602001806136696041913960600191505060405180910390fd5b5033600081815260156020908152604080832080549084905560168352818420600201849055600e80548290039055600554825163a9059cbb60e01b8152600481019690965260248601829052915190946001600160a01b039092169363a9059cbb93604480850194919392918390030190829087803b158015611cfa57600080fd5b6040805182815290516001600160a01b0384169133917f964600758f4cfe7f891a3b7f8b8cf1c48fb75de04a0824a01c7c18fb56dbb0e99181900360200190a35050565b611fc861246a565b82106120055760405162461bcd60e51b815260040180806020018281038252602b8152602001806133bf602b913960400191505060405180910390fd5b61200d6133a0565b604080516344f0de7560e01b8152306004820152815160008051602061352e833981519152926344f0de759260248082019391829003018186803b15801561205457600080fd5b505afa158015612068573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250604081101561208d57600080fd5b50905060ff83166001811b82600886901c600281106120a857fe5b602002015116901c6001146120ee5760405162461bcd60e51b815260040180806020018281038252602e815260200180613615602e913960400191505060405180910390fd5b604080516370a0823160e01b8152306004820152905160009160008051602061352e833981519152916370a0823191602480820192602092909190829003018186803b15801561213d57600080fd5b505afa158015612151573d6000803e3d6000fd5b505050506040513d602081101561216757600080fd5b50519050610c87848483612f0f565b600c5481565b60095461010090046001600160a01b031633146121d1576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600692909255600755600855565b60166020526000908152604090208054600182015460029092015490919083565b60106020526000908152604090205481565b635de5a58081565b60075481565b6001600160a01b031660009081526022602052604090205460ff1680151591565b60095461010090046001600160a01b03163314612296576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600180546001600160a01b03199081166001600160a01b03938416179182905560048054929093169116179055565b600d5481565b3360009081526017602052604090205460ff1661231e576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6001600160a01b03811661233157600080fd5b60095460ff161561234157600080fd5b6009805460ff196001600160a01b0390931661010002610100600160a81b031990911617919091166001179055565b60095461010090046001600160a01b031633146123c5576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600f805460ff19166001179055565b60095461010090046001600160a01b03163314612429576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b604482015290519081900360640190fd5b600280546001600160a01b03199081166001600160a01b03938416179182905560058054929093169116179055565b60116020526000908152604090205481565b600042635de5a580106124ae5760405162461bcd60e51b815260040180806020018281038252602481526020018061350a6024913960400191505060405180910390fd5b506201518042635de5a57f19010490565b604080516370a0823160e01b8152306004820152905160009160008051602061352e833981519152916370a0823191602480820192602092909190829003018186803b15801561250e57600080fd5b505afa158015612522573d6000803e3d6000fd5b505050506040513d602081101561253857600080fd5b505160208401519091508211156126ee576125516133a0565b604080516344f0de7560e01b8152306004820152815160008051602061352e833981519152926344f0de759260248082019391829003018186803b15801561259857600080fd5b505afa1580156125ac573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060408110156125d157600080fd5b5090505b82846020015110156126ec57602084015160ff8116906001821b90839060081c600281106125ff57fe5b602002015116901c6001141561268d5761261f8460200151600084612f0f565b60208086015160008181526023835260409081902060010154815164ffffffffff4216815261ffff909316938301939093528181019290925290519193507f4ef42a363692799c7d4d46d4f32bd6288dfd49250295a6476085752226be5c9a919081900360600190a16126dc565b6020808501516040805164ffffffffff4216815261ffff9092169282019290925281517f432c84b72308646178f4cc5aa50295cad3ba1dca6c703b79f1818c956e345b71929181900390910190a15b60208401805160010190526125d5565b505b505050565b6001600160a01b0382166000908152602460205260408120805482919061ffff16801580159061272257508481105b15612ee9575b848110156127e9576000818152602360205260409020541580159061275d575060008181526023602052604090206001015415155b156127e1576000818152602360205260409020600101546127af5760405162461bcd60e51b81526004018080602001828103825260308152602001806134516030913960400191505060405180910390fd5b60008181526023602090815260408083208054600191820154918701909352922054909102816127db57fe5b04830192505b600101612728565b8215612ee9576040805163a9059cbb60e01b81526001600160a01b03881660048201526002606e60648702048087039190910480820160248401819052935191939092909160008051602061352e8339815191529163a9059cbb9160448083019260209291908290030181600087803b15801561286557600080fd5b505af1158015612879573d6000803e3d6000fd5b505050506040513d602081101561288f57600080fd5b505160408051808201909152601381527202330b4b632b2103a37903a3930b739b332b91606d1b60208201526128fc906128c884613077565b604051806040016040528060168152602001752c20696e73756666696369656e742062616c616e636560501b81525061313d565b906129855760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561294a578181015183820152602001612932565b50505050905090810190601f1680156129775780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060208054830190556305f5e1008110612ee5576000546001600160a01b031615612b7157600360009054906101000a90046001600160a01b03166001600160a01b031663714a35fb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129f857600080fd5b505afa158015612a0c573d6000803e3d6000fd5b505050506040513d6020811015612a2257600080fd5b505115612ade5760006006548281612a3657fe5b600354604080516370a0823160e01b8152306004820152905193909204935083926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015612a8857600080fd5b505afa158015612a9c573d6000803e3d6000fd5b505050506040513d6020811015612ab257600080fd5b505110612ad8576001600160a01b038a1660009081526010602052604090208054820190555b50612b71565b6003546006546001600160a01b039091169063d4d5763c908381612afe57fe5b048b60016040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015612b5857600080fd5b505af1158015612b6c573d6000803e3d6000fd5b505050505b6001546001600160a01b031615612e2357600480546040805163714a35fb60e01b815290516001600160a01b039092169263714a35fb928282019260209290829003018186803b158015612bc457600080fd5b505afa158015612bd8573d6000803e3d6000fd5b505050506040513d6020811015612bee57600080fd5b505115612cad5760006007548281612c0257fe5b60048054604080516370a0823160e01b815230938101939093525193909204935083926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612c5757600080fd5b505afa158015612c6b573d6000803e3d6000fd5b505050506040513d6020811015612c8157600080fd5b505110612ca7576001600160a01b038a1660009081526011602052604090208054820190555b50612e23565b6004805460408051630fe6f31b60e21b815290516001600160a01b03909216926377e1ac6c928492633f9bcc6c9281810192602092909190829003018186803b158015612cf957600080fd5b505afa158015612d0d573d6000803e3d6000fd5b505050506040513d6020811015612d2357600080fd5b50516007548481612d3057fe5b0402306040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050602060405180830381600087803b158015612d8257600080fd5b505af1158015612d96573d6000803e3d6000fd5b505050506040513d6020811015612dac57600080fd5b5051612df4576040805162461bcd60e51b815260206004820152601260248201527131b7bab632103737ba1036b4b73a10242c2160711b604482015290519081900360640190fd5b6007548181612dff57fe5b6001600160a01b038b16600090815260116020526040902080549290910490910190555b6002546001600160a01b031615612ee55760006008548281612e4157fe5b600554604080516370a0823160e01b8152306004820152905193909204935083926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015612e9357600080fd5b505afa158015612ea7573d6000803e3d6000fd5b505050506040513d6020811015612ebd57600080fd5b505110612ee3576001600160a01b038a1660009081526012602052604090208054820190555b505b5050505b815461ffff168114612f0557815461ffff191661ffff82161782555b5090949350505050565b600060008051602061352e8339815191526001600160a01b031663cbb151d385856040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015612f6d57600080fd5b505af1158015612f81573d6000803e3d6000fd5b5050604080516370a0823160e01b8152306004820152905185935060008051602061352e83398151915292506370a0823191602480820192602092909190829003018186803b158015612fd357600080fd5b505afa158015612fe7573d6000803e3d6000fd5b505050506040513d6020811015612ffd57600080fd5b505160008681526023602052604090206001018054838303019081905590935061306e576040805162461bcd60e51b815260206004820181905260248201527f48656172747320726563656976656420666f722061206c6f6262792069732030604482015290519081900360640190fd5b50909392505050565b6060818061309e5750506040805180820190915260018152600360fc1b6020820152613138565b8060005b81156130b657600101600a820491506130a2565b6060816040519080825280601f01601f1916602001820160405280156130e3576020820181803683370190505b50905060001982015b841561313157600a850660300160f81b8282806001900393508151811061310f57fe5b60200101906001600160f81b031916908160001a905350600a850494506130ec565b5093505050505b919050565b606061316a8484846040518060200160405280600081525060405180602001604052806000815250613172565b949350505050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156131c6576020820181803683370190505b509050806000805b885181101561321f578881815181106131e357fe5b602001015160f81c60f81b83838060010194508151811061320057fe5b60200101906001600160f81b031916908160001a9053506001016131ce565b5060005b87518110156132745787818151811061323857fe5b602001015160f81c60f81b83838060010194508151811061325557fe5b60200101906001600160f81b031916908160001a905350600101613223565b5060005b86518110156132c95786818151811061328d57fe5b602001015160f81c60f81b8383806001019450815181106132aa57fe5b60200101906001600160f81b031916908160001a905350600101613278565b5060005b855181101561331e578581815181106132e257fe5b602001015160f81c60f81b8383806001019450815181106132ff57fe5b60200101906001600160f81b031916908160001a9053506001016132cd565b5060005b84518110156133735784818151811061333757fe5b602001015160f81c60f81b83838060010194508151811061335457fe5b60200101906001600160f81b031916908160001a905350600101613322565b50909d9c50505050505050505050505050565b604051806040016040528060008152602001600081525090565b6040518060400160405280600290602082028036833750919291505056fe596f75206d757374206f6e6c79206c65617665206c6f62626965732074686174206861766520656e646564416666696c6961746520636f6e747261637420697320616c7265616479207265676973746572656443616e6e6f742073657420616e20616666696c6961746552616e6b2077697468206c6f7765722070657263656e74616765207468616e2070726576696f7573486561727473207265636569766564206d757374206265203e20302c206c65617665206c6f62627920666f72206461794572726f723a20756e73756666696369656e742066726f7a656e2062616c616e6365746f6b656e732063616e6e6f7420626520756e66726f7a656e207965742c206d696e2039302064617973746f6b656e732063616e6e6f7420626520756e6c6f636b6564207965742c206d61782048584220737570706c79206d75636820626520726561636865644c61756e63682074696d65206e6f74206265666f72652063757272656e7420626c6f636b0000000000000000000000002b591e99afe9f32eaa6214f7b7629768c40eeb394572726f723a20696e73756666696369656e742062616c616e636520617661696c61626c6520746f206c6f636b4e657720416666696c696174652072616e6b206d75737420626520646966666572656e74207468616e2070726576696f7573437573746f6d657220686173206e6f20616374697665206c6f62627920656e747269657320666f7220746869732074696d6520706572696f644572726f723a20696e73756666696369656e742062616c616e636520617661696c61626c6520746f20667265657a65596f75206d6179206f6e6c79206c65617665206c6f626269657320776974682061637469766520656e7472696573416666696c696174652053706c6974206d757374206265206265747765656e20302d31303025746f6b656e732063616e6e6f7420626520756e66726f7a656e207965742c2063616e20626520756e66726f7a656e206f6e20706c6174666f726d206c61756e6368a26469706673582212208b548ef9fb3c00bb646a1d8e8a015d97c453e8df7b39158c386a6577f31bd2d964736f6c63430006040033

Deployed Bytecode Sourcemap

1389:23251:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9959:9;:13;9956:331;;10090:34;10101:10;10121:1;10090:10;:34::i;:::-;9956:331;;;10240:35;10261:10;10273:1;10240:20;:35::i;:::-;1389:23251;;12:1:-1;9;2:12;3358:55:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3358:55:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3358:55:0;-1:-1:-1;;;;;3358:55:0;;:::i;:::-;;;;;;;;;;;;;;;;2643:28;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2643:28:0;;;:::i;3019:23::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3019:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;7309:592;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7309:592:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;7309:592:0;;;;;;;;:::i;2986:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2986:26:0;;;:::i;8741:412::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8741:412:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;8741:412:0;;;;;;;;;;;:::i;21424:165::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21424:165:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21424:165:0;-1:-1:-1;;;;;21424:165:0;;:::i;2751:77::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2751:77:0;;;:::i;:::-;;;;-1:-1:-1;;;;;2751:77:0;;;;;;;;;;;;;;2708:36;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2708:36:0;;;:::i;3458:55::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3458:55:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3458:55:0;-1:-1:-1;;;;;3458:55:0;;:::i;7909:290::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7909:290:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7909:290:0;;-1:-1:-1;;;;;7909:290:0;;;;;;;;:::i;20547:772::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20547:772:0;;;:::i;3253:42::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3253:42:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3253:42:0;-1:-1:-1;;;;;3253:42:0;;:::i;2678:23::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2678:23:0;;;:::i;2576:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2576:26:0;;;:::i;3558:55::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3558:55:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3558:55:0;-1:-1:-1;;;;;3558:55:0;;:::i;19606:929::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19606:929:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;19606:929:0;;;;;;;;;;:::i;5144:55::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5144:55:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5144:55:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5734:1567;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;5734:1567:0;;;;;;;;;;:::i;15896:1554::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15896:1554:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15896:1554:0;-1:-1:-1;;;;;15896:1554:0;;:::i;8207:526::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8207:526:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;8207:526:0;;-1:-1:-1;;;;;8207:526:0;;;;;;;;:::i;21955:165::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21955:165:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21955:165:0;-1:-1:-1;;;;;21955:165:0;;:::i;17503:1887::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17503:1887:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17503:1887:0;-1:-1:-1;;;;;17503:1887:0;;:::i;9387:508::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9387:508:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9387:508:0;;;;;;;:::i;2920:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2920:26:0;;;:::i;22368:181::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22368:181:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22368:181:0;;;;;;;;;;;;:::i;3660:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3660:41:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3660:41:0;-1:-1:-1;;;;;3660:41:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;3055:42;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3055:42:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3055:42:0;-1:-1:-1;;;;;3055:42:0;;:::i;4890:52::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4890:52:0;;;:::i;2609:27::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2609:27:0;;;:::i;9161:218::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9161:218:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9161:218:0;-1:-1:-1;;;;;9161:218:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;21601:165;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21601:165:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21601:165:0;-1:-1:-1;;;;;21601:165:0;;:::i;2953:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2953:26:0;;;:::i;22132:224::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22132:224:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22132:224:0;-1:-1:-1;;;;;22132:224:0;;:::i;22567:105::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22567:105:0;;;:::i;21778:165::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21778:165:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21778:165:0;-1:-1:-1;;;;;21778:165:0;;:::i;3154:42::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3154:42:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3154:42:0;-1:-1:-1;;;;;3154:42:0;;:::i;5734:1567::-;5852:1;5840:9;:13;5832:43;;;;;-1:-1:-1;;;5832:43:0;;;;;;;;;;;;-1:-1:-1;;;5832:43:0;;;;;;;;;;;;;;;5965:10;5886:16;5944:32;;;:20;:32;;;;;;;;;;;;;6010:40;;;:24;:40;;;;;;;;-1:-1:-1;;;;;6064:23:0;;;;;;:45;;;6108:1;6091:14;:18;;;6064:45;6061:495;;;6279:48;;;-1:-1:-1;;;6279:48:0;;-1:-1:-1;;;;;6279:48:0;;;;;;;;6260:4;;-1:-1:-1;6228:3:0;6199:26;;;:9;:26;:32;;-1:-1:-1;;;;;;;;;;;4795:42:0;6279:15;;6199:32;;6279:48;;;;;6174:22;;6279:48;;;;;;;6199:32;4795:42;6279:48;;;2:2:-1;;;;27:1;24;17:12;2:2;6279:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6279:48:0;;;;;6374:1;6357:14;6345:9;:26;:30;6342:128;;;6445:8;;6395:59;;;-1:-1:-1;;;6395:59:0;;-1:-1:-1;;;;;6445:8:0;;;6395:59;;;;;-1:-1:-1;;;;;;;;;;;4795:42:0;6395:15;;6417:9;:26;;;;6395:59;;;;;-1:-1:-1;;6395:59:0;;;;;;;;6417:26;4795:42;6395:59;;;2:2:-1;;;;27:1;24;17:12;2:2;6395:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6395:59:0;;;;;6342:128;6061:495;;;;6535:8;;6502:42;;;-1:-1:-1;;;6502:42:0;;-1:-1:-1;;;;;6535:8:0;;;6502:42;;;;;-1:-1:-1;;;;;;;;;;;4795:42:0;6502:15;;6524:9;;6502:42;;;;;-1:-1:-1;;6502:42:0;;;;;;;;6524:9;4795:42;6502;;;2:2:-1;;;;27:1;24;17:12;2:2;6502:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6502:42:0;;;;;6061:495;6609:18;6630:20;:18;:20::i;:::-;6661:27;;;;:15;:27;;;;;;;;:51;;6703:9;6661:51;;;;;;-1:-1:-1;;;;;6723:22:0;;;;;:12;:22;;;;;;:52;;;-1:-1:-1;6723:40:0;;:52;;;;;:65;;;;;;;;6802:22;;;;;;:37;6609:41;;-1:-1:-1;6802:37:0;;6799:156;;-1:-1:-1;;;;;6885:22:0;;;;;;:12;:22;;;;;:58;;-1:-1:-1;;6885:58:0;;;;;;;6799:156;7049:20;7072:11;:36;;7106:1;7072:36;;;7086:9;7072:36;7124:169;;;;7157:15;7124:169;;;;;;;;;;7221:9;7124:169;;;;;;7049:59;;-1:-1:-1;;;;;;7124:169:0;;;;;;;;;;;;;;;;;;5734:1567;;;;;;;:::o;7309:592::-;7398:31;;:::i;:::-;7432:64;;;;;;;;7451:20;:18;:20::i;:::-;7432:64;;;;7473:22;;7432:64;;;7398:98;;7507:12;7528:1;7522:3;:7;:32;;7538:16;;7522:32;;;7532:3;7522:32;-1:-1:-1;;;;;7573:22:0;;;;;;:12;:22;;;;;:37;7507:47;;-1:-1:-1;7573:37:0;;:44;-1:-1:-1;7565:127:0;;;;-1:-1:-1;;;7565:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7703:26;7717:5;7724:4;7703:13;:26::i;:::-;7830:20;;;;7805:22;:45;7861:32;7878:8;7888:4;7861:16;:32::i;:::-;;7309:592;;;;:::o;3358:55::-;;;;;;;;;;;;;:::o;2643:28::-;;;;:::o;3019:23::-;;;;;;:::o;2986:26::-;;;;:::o;8741:412::-;5370:10;5363:18;;;;:6;:18;;;;;;;;5355:43;;;;;-1:-1:-1;;;5355:43:0;;;;;;;;;;;;-1:-1:-1;;;5355:43:0;;;;;;;;;;;;;;;8867:39:::1;::::0;;::::1;;::::0;;;:24:::1;:39;::::0;;;;;::::1;:44:::0;8859:86:::1;;;::::0;;-1:-1:-1;;;8859:86:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8986:1;8964:19;:23;;;:53;;;;;9014:3;8991:19;:26;;;;8964:53;8956:117;;;;-1:-1:-1::0;;;8956:117:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9084:39;::::0;;::::1;;::::0;;;:24:::1;:39;::::0;;;;:61;;-1:-1:-1;;9084:61:0::1;::::0;;;::::1;;::::0;;8741:412::o;21424:165::-;5268:8;;;;;-1:-1:-1;;;;;5268:8:0;5254:10;:22;5246:49;;;;;-1:-1:-1;;;5246:49:0;;;;;;;;;;;;-1:-1:-1;;;5246:49:0;;;;;;;;;;;;;;;21522:10:::1;:24:::0;;-1:-1:-1;;;;;;21522:24:0;;::::1;-1:-1:-1::0;;;;;21522:24:0;;::::1;;::::0;;;;21557:3:::1;:24:::0;;21570:10;;;::::1;21557:24:::0;::::1;;::::0;;21424:165::o;2751:77::-;;;-1:-1:-1;;;;;2751:77:0;;:::o;2708:36::-;;;;;;-1:-1:-1;;;;;2708:36:0;;:::o;3458:55::-;;;;;;;;;;;;;:::o;7909:290::-;5370:10;5363:18;;;;:6;:18;;;;;;;;5355:43;;;;;-1:-1:-1;;;5355:43:0;;;;;;;;;;;;-1:-1:-1;;;5355:43:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;8036:39:0;::::1;;::::0;;;:20:::1;:39;::::0;;;;;::::1;;:44:::0;8028:97:::1;;;;-1:-1:-1::0;;;8028:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;8136:39:0;;;::::1;;::::0;;;:20:::1;:39;::::0;;;;:55;;-1:-1:-1;;8136:55:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;7909:290::o;20547:772::-;20642:1;20624:15;;:19;20616:28;;12:1:-1;9;2:12;20616:28:0;20655:15;20691:2;20673:15;;:20;;;;;20724:11;;20712:42;;;-1:-1:-1;;;20712:42:0;;-1:-1:-1;;;;;20724:11:0;;;20712:42;;;;20673:20;;;;20751:1;20738:14;;20712:42;;;;;;20673:20;;-1:-1:-1;;;;;;;;;;;;4795:42:0;20712:11;;:42;;;;;;;;;;;;;;;-1:-1:-1;4795:42:0;20712;;;2:2:-1;;;;27:1;24;17:12;2:2;20712:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20712:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20712:42:0;20704:73;;;;;-1:-1:-1;;;20704:73:0;;;;;;;;;;;;-1:-1:-1;;;20704:73:0;;;;;;;;;;;;;;;20808:11;;20796:42;;;-1:-1:-1;;;20796:42:0;;-1:-1:-1;;;;;20808:11:0;;;20796:42;;;;20835:1;20822:14;;20796:42;;;;;-1:-1:-1;;;;;;;;;;;4795:42:0;20796:11;;:42;;;;;;;;;;;;;;-1:-1:-1;4795:42:0;20796;;;2:2:-1;;;;27:1;24;17:12;2:2;20796:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20796:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20796:42:0;20788:73;;;;;-1:-1:-1;;;20788:73:0;;;;;;;;;;;;-1:-1:-1;;;20788:73:0;;;;;;;;;;;;;;;20892:3;;20880:28;;;-1:-1:-1;;;20880:28:0;;-1:-1:-1;;;;;20892:3:0;;;20880:28;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4795:42:0;20880:11;;:28;;;;;;;;;;;;;;-1:-1:-1;4795:42:0;20880:28;;;2:2:-1;;;;27:1;24;17:12;2:2;20880:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20880:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20880:28:0;20872:59;;;;;-1:-1:-1;;;20872:59:0;;;;;;;;;;;;-1:-1:-1;;;20872:59:0;;;;;;;;;;;;;;;20962:3;;20950:28;;;-1:-1:-1;;;20950:28:0;;-1:-1:-1;;;;;20962:3:0;;;20950:28;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4795:42:0;20950:11;;:28;;;;;;;;;;;;;;-1:-1:-1;4795:42:0;20950:28;;;2:2:-1;;;;27:1;24;17:12;2:2;20950:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20950:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20950:28:0;20942:59;;;;;-1:-1:-1;;;20942:59:0;;;;;;;;;;;;-1:-1:-1;;;20942:59:0;;;;;;;;;;;;;;;21032:3;;21020:28;;;-1:-1:-1;;;21020:28:0;;-1:-1:-1;;;;;21032:3:0;;;21020:28;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4795:42:0;21020:11;;:28;;;;;;;;;;;;;;-1:-1:-1;4795:42:0;21020:28;;;2:2:-1;;;;27:1;24;17:12;2:2;21020:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21020:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21020:28:0;21012:59;;;;;-1:-1:-1;;;21012:59:0;;;;;;;;;;;;-1:-1:-1;;;21012:59:0;;;;;;;;;;;;;;;21102:3;;21090:28;;;-1:-1:-1;;;21090:28:0;;-1:-1:-1;;;;;21102:3:0;;;21090:28;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4795:42:0;21090:11;;:28;;;;;;;;;;;;;;-1:-1:-1;4795:42:0;21090:28;;;2:2:-1;;;;27:1;24;17:12;2:2;21090:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21090:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21090:28:0;21082:59;;;;;-1:-1:-1;;;21082:59:0;;;;;;;;;;;;-1:-1:-1;;;21082:59:0;;;;;;;;;;;;;;;21172:3;;21160:28;;;-1:-1:-1;;;21160:28:0;;-1:-1:-1;;;;;21172:3:0;;;21160:28;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4795:42:0;21160:11;;:28;;;;;;;;;;;;;;-1:-1:-1;4795:42:0;21160:28;;;2:2:-1;;;;27:1;24;17:12;2:2;21160:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21160:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21160:28:0;21152:59;;;;;-1:-1:-1;;;21152:59:0;;;;;;;;;;;;-1:-1:-1;;;21152:59:0;;;;;;;;;;;;;;;21242:3;;21230:28;;;-1:-1:-1;;;21230:28:0;;-1:-1:-1;;;;;21242:3:0;;;21230:28;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4795:42:0;21230:11;;:28;;;;;;;;;;;;;;-1:-1:-1;4795:42:0;21230:28;;;2:2:-1;;;;27:1;24;17:12;2:2;21230:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21230:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21230:28:0;21222:59;;;;;-1:-1:-1;;;21222:59:0;;;;;;;;;;;;-1:-1:-1;;;21222:59:0;;;;;;;;;;;;;;;-1:-1:-1;21310:1:0;21292:15;:19;20547:772::o;3253:42::-;;;;;;;;;;;;;:::o;2678:23::-;;;;;;:::o;2576:26::-;;;;:::o;3558:55::-;;;;;;;;;;;;;:::o;19606:929::-;19709:4;19743:10;;-1:-1:-1;;;;;19734:19:0;;;19743:10;;19734:19;19731:797;;;-1:-1:-1;;;;;19772:13:0;;;;;;:6;:13;;;;;:37;19769:234;;-1:-1:-1;19841:5:0;19834:12;;19769:234;-1:-1:-1;19953:10:0;;-1:-1:-1;;;;;19906:13:0;;;;;;:6;:13;;;;;:37;19969:3;19947;:16;;;19906:58;19905:67;;19898:74;;19731:797;20041:10;;-1:-1:-1;;;;;20032:19:0;;;20041:10;;20032:19;20029:499;;;-1:-1:-1;;;;;20070:13:0;;;;;;:6;:13;;;;;:35;;;20067:169;;-1:-1:-1;20137:5:0;20130:12;;20067:169;20202:3;;;:15;;;-1:-1:-1;;;20202:15:0;;;;-1:-1:-1;;;;;20202:3:0;;;;:13;;:15;;;;;;;;;;;;:3;:15;;;2:2:-1;;;;27:1;24;17:12;2:2;20202:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20202:15:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20202:15:0;;-1:-1:-1;20195:22:0;;20029:499;20274:10;;-1:-1:-1;;;;;20265:19:0;;;20274:10;;20265:19;20262:266;;;-1:-1:-1;;;;;20303:13:0;;;;;;:6;:13;;;;;:37;;;20300:164;;-1:-1:-1;20372:5:0;20365:12;;20300:164;-1:-1:-1;20437:11:0;;;;20430:18;;20262:266;-1:-1:-1;20511:5:0;20262:266;19606:929;;;;:::o;5144:55::-;;;;;;;;;;;;;;;:::o;15896:1554::-;15962:35;15979:10;15991:5;15962:16;:35::i;:::-;15959:120;;;16013:15;16022:5;16013:8;:15::i;:::-;16089:8;16147:10;;-1:-1:-1;;;;;16138:19:0;;;16147:10;;16138:19;16135:1257;;;-1:-1:-1;16189:10:0;16179:21;;;;:9;:21;;;;;;16223:7;16215:67;;;;-1:-1:-1;;;16215:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16347:10;16361:1;16337:21;;;:9;:21;;;;;;;;:25;;;16377:22;:34;;;;;:41;;;;;;16433:14;:21;;;;;;16469:6;:18;;;;;16514:3;16469:48;;16135:1257;;;16556:10;;-1:-1:-1;;;;;16547:19:0;;;16556:10;;16547:19;16544:848;;;-1:-1:-1;16598:10:0;16588:21;;;;:9;:21;;;;;;16632:7;16624:65;;;;-1:-1:-1;;;16624:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16754:10;16768:1;16744:21;;;:9;:21;;;;;;;;:25;;;16784:22;:34;;;;;:41;;;;;;16840:14;:21;;;;;;16876:6;:18;;;;;16919:3;-1:-1:-1;16876:40:0;;;;:46;16544:848;;;16961:10;;-1:-1:-1;;;;;16952:19:0;;;16961:10;;16952:19;16949:443;;;-1:-1:-1;17003:10:0;16993:21;;;;:9;:21;;;;;;17037:7;17029:67;;;;-1:-1:-1;;;17029:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17161:10;17175:1;17151:21;;;:9;:21;;;;;;;;:25;;;17191:22;:34;;;;;:41;;;;;;17247:14;:21;;;;;;17283:6;:18;;;;;17328:3;17283:42;;;;:48;16949:443;17407:35;;;;;;;;-1:-1:-1;;;;;17407:35:0;;;17419:10;;17407:35;;;;;;;;;15896:1554;;:::o;8207:526::-;5370:10;5363:18;;;;:6;:18;;;;;;;;5355:43;;;;;-1:-1:-1;;;5355:43:0;;;;;;;;;;;;-1:-1:-1;;;5355:43:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;8353:39:0;::::1;;::::0;;;:20:::1;:39;::::0;;;;;::::1;8336:56:::0;;::::1;8353:39:::0;::::1;8336:56;;8328:119;;;;-1:-1:-1::0;;;8328:119:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;8534:39:0;::::1;8509:65;8534:39:::0;;;:20:::1;:39;::::0;;;;;;;;::::1;::::0;;::::1;8509:65:::0;;:24:::1;:65:::0;;;;;;;8466:39;;::::1;::::0;;;;;8509:65;;::::1;8466:39:::0;::::1;:108;;8458:201;;;;-1:-1:-1::0;;;8458:201:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21955:165:::0;5268:8;;;;;-1:-1:-1;;;;;5268:8:0;5254:10;:22;5246:49;;;;;-1:-1:-1;;;5246:49:0;;;;;;;;;;;;-1:-1:-1;;;5246:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22057:23:0;::::1;22049:32;;12:1:-1;9::::0;2:12:::1;22049:32:0;22092:8;:20:::0;;-1:-1:-1;;;;;;22092:20:0::1;-1:-1:-1::0;;;;;22092:20:0;;;::::1;::::0;;;::::1;::::0;;21955:165::o;17503:1887::-;17568:8;17599:10;;-1:-1:-1;;;;;17590:19:0;;;17599:10;;17590:19;17587:1741;;;17656:10;17670:1;17633:34;;;:22;:34;;;;;;17625:84;;;;-1:-1:-1;;;17625:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17769:35;17786:10;17798:5;17769:16;:35::i;:::-;17761:90;;;;-1:-1:-1;;;17761:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17895:10:0;17872:34;;;;:22;:34;;;;;;;;;;17921:38;;;;17974:6;:18;;;;;:46;;;18035:14;:21;;;;;;;18071:3;;:29;;-1:-1:-1;;;18071:29:0;;;;;;;;;;;;;;;;;17872:34;;-1:-1:-1;;;;;18071:3:0;;;;:12;;:29;;;;;17872:34;;18071:29;;;;;;;;;:3;:29;;;2:2:-1;;;;27:1;24;17:12;2:2;18071:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18071:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17587:1741:0;;-1:-1:-1;17587:1741:0;;18154:10;;-1:-1:-1;;;;;18145:19:0;;;18154:10;;18145:19;18142:1186;;;18211:10;18225:1;18188:34;;;:22;:34;;;;;;18180:84;;;;-1:-1:-1;;;18180:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18324:35;18341:10;18353:5;18324:16;:35::i;:::-;18316:109;;;;-1:-1:-1;;;18316:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18469:10:0;18446:34;;;;:22;:34;;;;;;;;;;18495:38;;;;18548:6;:18;;;;;-1:-1:-1;18548:40:0;:44;;;18607:14;:21;;;;;;;18643:3;;;:29;;-1:-1:-1;;;18643:29:0;;;;;;;;;;;;;;;;;18446:34;;-1:-1:-1;;;;;18643:3:0;;:12;;:29;;;;;18446:34;;18643:29;;;;;;;;;:3;:29;;;2:2:-1;;;;27:1;24;17:12;18142:1186:0;18726:10;;-1:-1:-1;;;;;18717:19:0;;;18726:10;;18717:19;18714:614;;;18783:10;18797:1;18760:34;;;:22;:34;;;;;;18752:84;;;;-1:-1:-1;;;18752:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18896:35;18913:10;18925:5;18896:16;:35::i;:::-;18888:113;;;;-1:-1:-1;;;18888:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19045:10:0;19022:34;;;;:22;:34;;;;;;;;;;19071:38;;;;19124:6;:18;;;;;:42;;:46;;;19185:14;:21;;;;;;;19221:3;;:29;;-1:-1:-1;;;19221:29:0;;;;;;;;;;;;;;;;;19022:34;;-1:-1:-1;;;;;19221:3:0;;;;:12;;:29;;;;;19022:34;;19221:29;;;;;;;;;:3;:29;;;2:2:-1;;;;27:1;24;17:12;18714:614:0;19345:37;;;;;;;;-1:-1:-1;;;;;19345:37:0;;;19359:10;;19345:37;;;;;;;;;17503:1887;;:::o;9387:508::-;9486:20;:18;:20::i;:::-;9480:3;:26;9472:82;;;;-1:-1:-1;;;9472:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9565:45;;:::i;:::-;9613:36;;;-1:-1:-1;;;9613:36:0;;9643:4;9613:36;;;;;;-1:-1:-1;;;;;;;;;;;4795:42:0;9613:21;;:36;;;;;;;;;;;4795:42;9613:36;;;2:2:-1;;;;27:1;24;17:12;2:2;9613:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9613:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15:2;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9613:36:0;-1:-1:-1;9722:3:0;9716:9;;9693:1;:16;;9613:36;9687:1;9680:8;;;9669:20;;;;;;;;;;;:41;9668:58;;9730:1;9668:63;9660:122;;;;-1:-1:-1;;;9660:122:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9813:27;;;-1:-1:-1;;;9813:27:0;;9834:4;9813:27;;;;;;9795:15;;-1:-1:-1;;;;;;;;;;;4795:42:0;9813:12;;:27;;;;;;;;;;;;;;;4795:42;9813:27;;;2:2:-1;;;;27:1;24;17:12;2:2;9813:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9813:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9813:27:0;;-1:-1:-1;9851:36:0;9863:3;9868:9;9813:27;9851:11;:36::i;2920:26::-;;;;:::o;22368:181::-;5268:8;;;;;-1:-1:-1;;;;;5268:8:0;5254:10;:22;5246:49;;;;;-1:-1:-1;;;5246:49:0;;;;;;;;;;;;-1:-1:-1;;;5246:49:0;;;;;;;;;;;;;;;22474:8:::1;:15:::0;;;;22500:8:::1;:15:::0;22526:8:::1;:15:::0;22368:181::o;3660:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3055:42::-;;;;;;;;;;;;;:::o;4890:52::-;4932:10;4890:52;:::o;2609:27::-;;;;:::o;9161:218::-;-1:-1:-1;;;;;9286:39:0;9249:4;9286:39;;;:20;:39;;;;;;;;:43;;;;9161:218::o;21601:165::-;5268:8;;;;;-1:-1:-1;;;;;5268:8:0;5254:10;:22;5246:49;;;;;-1:-1:-1;;;5246:49:0;;;;;;;;;;;;-1:-1:-1;;;5246:49:0;;;;;;;;;;;;;;;21699:10:::1;:24:::0;;-1:-1:-1;;;;;;21699:24:0;;::::1;-1:-1:-1::0;;;;;21699:24:0;;::::1;;::::0;;;;21734:3:::1;:24:::0;;21747:10;;;::::1;21734:24:::0;::::1;;::::0;;21601:165::o;2953:26::-;;;;:::o;22132:224::-;5370:10;5363:18;;;;:6;:18;;;;;;;;5355:43;;;;;-1:-1:-1;;;5355:43:0;;;;;;;;;;;;-1:-1:-1;;;5355:43:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22232:23:0;::::1;22224:32;;12:1:-1;9::::0;2:12:::1;22224:32:0;22276:11;::::0;::::1;;22275:12;22267:21;;12:1:-1;9::::0;2:12:::1;22267:21:0;22299:8;:20:::0;;-1:-1:-1;;;;;;;22299:20:0;;::::1;;;-1:-1:-1::0;;;;;;22299:20:0;;::::1;;22330:18:::0;;;::::1;22299:8;22330:18;::::0;;22132:224::o;22567:105::-;5268:8;;;;;-1:-1:-1;;;;;5268:8:0;5254:10;:22;5246:49;;;;;-1:-1:-1;;;5246:49:0;;;;;;;;;;;;-1:-1:-1;;;5246:49:0;;;;;;;;;;;;;;;22642:11:::1;:18:::0;;-1:-1:-1;;22642:18:0::1;22656:4;22642:18;::::0;;22567:105::o;21778:165::-;5268:8;;;;;-1:-1:-1;;;;;5268:8:0;5254:10;:22;5246:49;;;;;-1:-1:-1;;;5246:49:0;;;;;;;;;;;;-1:-1:-1;;;5246:49:0;;;;;;;;;;;;;;;21876:10:::1;:24:::0;;-1:-1:-1;;;;;;21876:24:0;;::::1;-1:-1:-1::0;;;;;21876:24:0;;::::1;;::::0;;;;21911:3:::1;:24:::0;;21924:10;;;::::1;21911:24:::0;::::1;;::::0;;21778:165::o;3154:42::-;;;;;;;;;;;;;:::o;10302:244::-;10369:7;10420:15;4932:10;10402:33;10394:82;;;;-1:-1:-1;;;10394:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10532:6:0;10495:15;-1:-1:-1;;10495:33:0;10494:44;;10302:244::o;10554:1187::-;10686:27;;;-1:-1:-1;;;10686:27:0;;10707:4;10686:27;;;;;;10665:18;;-1:-1:-1;;;;;;;;;;;4795:42:0;10686:12;;:27;;;;;;;;;;;;;;;4795:42;10686:27;;;2:2:-1;;;;27:1;24;17:12;2:2;10686:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10686:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10686:27:0;;10758;;;10686;;-1:-1:-1;10758:39:0;-1:-1:-1;10755:979:0;;;10813:45;;:::i;:::-;10861:36;;;-1:-1:-1;;;10861:36:0;;10891:4;10861:36;;;;;;-1:-1:-1;;;;;;;;;;;4795:42:0;10861:21;;:36;;;;;;;;;;;4795:42;10861:36;;;2:2:-1;;;;27:1;24;17:12;2:2;10861:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10861:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15:2;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10861:36:0;-1:-1:-1;10912:811:0;10948:9;10918:12;:27;;;:39;10912:811;;;11098:27;;;;11128:3;11098:33;;;11030:1;:40;;;10982:10;;11024:1;10993:32;10982:44;;;;;;;;;;;:89;10981:151;;11136:1;10981:156;10977:683;;;11226:55;11238:12;:27;;;11267:1;11270:10;11226:11;:55::i;:::-;11376:27;;;;;11431:44;;;;:15;:44;;;;;;;:59;;;11309:182;;;11326:15;11309:182;;;;;;;;;;;;;;;;;;;;;;;11213:68;;-1:-1:-1;11309:182:0;;;;;;;;;;10977:683;;;11611:27;;;;;11545:95;;;;11564:15;11545:95;;;;;;;;;;;;;;;;;;;;;;;;;;;10977:683;11678:27;;;:29;;;;;;10912:811;;;10755:979;;10554:1187;;;:::o;12204:3436::-;-1:-1:-1;;;;;12378:22:0;;12291:7;12378:22;;;:12;:22;;;;;12429:19;;12291:7;;12378:22;12429:19;;12462:11;;;;;:31;;;12487:6;12477:7;:16;12462:31;12459:3036;;;12509:520;12525:6;12515:7;:16;12509:520;;;12592:1;12554:24;;;:15;:24;;;;;:35;:39;;;;:86;;-1:-1:-1;12639:1:0;12597:24;;;:15;:24;;;;;:39;;;:43;;12554:86;12551:435;;;12714:1;12672:24;;;:15;:24;;;;;:39;;;12664:104;;;;-1:-1:-1;;;12664:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12931:24;;;;:15;:24;;;;;;;;:35;;12864:39;;;;;12805:22;;;:31;;;;;;12931:35;;12805:98;12931:35;12805:161;;;;;12791:175;;;;12551:435;13004:9;;12509:520;;;13046:14;;13043:2441;;13282:36;;;-1:-1:-1;;;13282:36:0;;-1:-1:-1;;;;;13282:36:0;;;;;;13189:1;13119:3;13113;13100:16;;:22;13160:25;;;13159:31;;;;13230:25;;;13282:36;;;;;;;;13100:22;;13159:31;;13230:25;;-1:-1:-1;;;;;;;;;;;4795:42:0;13282:11;;:36;;;;;;;;;;;;;;13080:17;4795:42;13282:36;;;2:2:-1;;;;27:1;24;17:12;2:2;13282:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13282:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13282:36:0;13320:81;;;;;;;;;;;;-1:-1:-1;;;13282:36:0;13320:81;;;;;13352:23;13361:13;13352:8;:23::i;:::-;13320:81;;;;;;;;;;;;;-1:-1:-1;;;13320:81:0;;;:9;:81::i;:::-;13274:128;;;;;-1:-1:-1;;;13274:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13274:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13421:15:0;:29;;;;;;13563:9;13546:26;;13543:1923;;13648:1;13626:10;-1:-1:-1;;;;;13626:10:0;:24;13623:643;;13768:3;;;;;;;;;-1:-1:-1;;;;;13768:3:0;-1:-1:-1;;;;;13768:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13768:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13768:15:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13768:15:0;13765:478;;;13815:6;13840:8;;13824:13;:24;;;;;13882:3;;:28;;;-1:-1:-1;;;13882:28:0;;13904:4;13882:28;;;;;;13824:24;;;;;-1:-1:-1;13824:24:0;;-1:-1:-1;;;;;13882:3:0;;;;:13;;:28;;;;;;;;;;;;;;:3;:28;;;2:2:-1;;;;27:1;24;17:12;2:2;13882:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13882:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13882:28:0;:33;13879:190;;-1:-1:-1;;;;;14013:19:0;;;;;;:9;:19;;;;;:24;;;;;;13879:190;13765:478;;;;14156:3;;14192:8;;-1:-1:-1;;;;;14156:3:0;;;;:18;;14176:13;14192:8;14176:24;;;;;14203:8;14213:1;14156:59;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14156:59:0;-1:-1:-1;;;;;14156:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14156:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14156:59:0;;;;13765:478;14318:10;;-1:-1:-1;;;;;14318:10:0;:24;14315:767;;14462:3;;;:15;;;-1:-1:-1;;;14462:15:0;;;;-1:-1:-1;;;;;14462:3:0;;;;:13;;:15;;;;;;;;;;;;:3;:15;;;2:2:-1;;;;27:1;24;17:12;2:2;14462:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14462:15:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14462:15:0;14459:600;;;14509:6;14534:8;;14518:13;:24;;;;;14576:3;;;:28;;;-1:-1:-1;;;14576:28:0;;14598:4;14576:28;;;;;;;;14518:24;;;;;-1:-1:-1;14518:24:0;;-1:-1:-1;;;;;14576:3:0;;;;:13;;:28;;;;;;;;;;;;;;;:3;:28;;;2:2:-1;;;;27:1;24;17:12;2:2;14576:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14576:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14576:28:0;:33;14573:191;;-1:-1:-1;;;;;14708:19:0;;;;;;:9;:19;;;;;:24;;;;;;14573:191;14459:600;;;;14858:3;;;14900:15;;;-1:-1:-1;;;14900:15:0;;;;-1:-1:-1;;;;;14858:3:0;;;;:11;;:3;;14900:13;;:15;;;;;;;;;;;;;;14858:3;14900:15;;;2:2:-1;;;;27:1;24;17:12;2:2;14900:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14900:15:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14900:15:0;14888:8;;14872:13;14888:8;14872:24;;;;;14871:44;14926:4;14858:74;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14858:74:0;-1:-1:-1;;;;;14858:74:0;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14858:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14858:74:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14858:74:0;14850:105;;;;;-1:-1:-1;;;14850:105:0;;;;;;;;;;;;-1:-1:-1;;;14850:105:0;;;;;;;;;;;;;;;15023:8;;15007:13;:24;;;;;-1:-1:-1;;;;;14984:19:0;;;;;;:9;:19;;;;;:47;;15007:24;;;;14984:47;;;;;14459:600;15134:10;;-1:-1:-1;;;;;15134:10:0;:24;15131:316;;15186:6;15211:8;;15195:13;:24;;;;;15249:3;;:28;;;-1:-1:-1;;;15249:28:0;;15271:4;15249:28;;;;;;15195:24;;;;;-1:-1:-1;15195:24:0;;-1:-1:-1;;;;;15249:3:0;;;;:13;;:28;;;;;;;;;;;;;;:3;:28;;;2:2:-1;;;;27:1;24;17:12;2:2;15249:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15249:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15249:28:0;:33;15246:178;;-1:-1:-1;;;;;15372:19:0;;;;;;:9;:19;;;;;:24;;;;;;15246:178;15131:316;;13043:2441;;;;15519:19;;;;15508:30;;15505:98;;15554:37;;-1:-1:-1;;15554:37:0;;;;;;;15505:98;-1:-1:-1;15622:10:0;;12204:3436;-1:-1:-1;;;;12204:3436:0:o;11749:447::-;11849:7;-1:-1:-1;;;;;;;;;;;;;;;;11874:14:0;;11889:5;11896:10;11874:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11874:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;11967:27:0;;;-1:-1:-1;;;11967:27:0;;11988:4;11967:27;;;;;;11939:7;;-1:-1:-1;;;;;;;;;;;;4795:42:0;-1:-1:-1;11967:12:0;;:27;;;;;;;;;;;;;;;4795:42;11967:27;;;2:2:-1;;;;27:1;24;17:12;2:2;11967:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11967:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11967:27:0;12005:22;;;;:15;11967:27;12005:22;;;;:37;;:61;;12046:20;;;12005:61;;;;;11967:27;;-1:-1:-1;12077:86:0;;;;;-1:-1:-1;;;12077:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12181:7:0;;11749:447;-1:-1:-1;;;11749:447:0:o;22684:518::-;22743:27;22798:1;22814:7;22810:50;;-1:-1:-1;;22838:10:0;;;;;;;;;;;;-1:-1:-1;;;22838:10:0;;;;;;22810:50;22879:2;22870:6;22911:69;22918:6;;22911:69;;22941:5;;22966:2;22961:7;;;;22911:69;;;22990:17;23020:3;23010:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;23010::0;87:42:-1;143:17;;-1:-1;23010:14:0;-1:-1:-1;22990:34:0;-1:-1:-1;;;23044:7:0;;23062:103;23069:7;;23062:103;;23126:2;23121;:7;23116:2;:12;23105:25;;23093:4;23098:3;;;;;;;23093:9;;;;;;;;;;;:37;-1:-1:-1;;;;;23093:37:0;;;;;;;;-1:-1:-1;23151:2:0;23145:8;;;;23062:103;;;-1:-1:-1;23189:4:0;-1:-1:-1;;;;22684:518:0;;;;:::o;24287:180::-;24397:13;24430:29;24440:2;24444;24448;24430:29;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;24423:36;24287:180;-1:-1:-1;;;;24287:180:0:o;23210:863::-;23362:13;23383:16;23408:2;23383:28;;23418:16;23443:2;23418:28;;23453:16;23478:2;23453:28;;23488:16;23513:2;23488:28;;23523:16;23548:2;23523:28;;23558:19;23643:3;:10;23630:3;:10;23617:3;:10;23604:3;:10;23591:3;:10;:23;:36;:49;:62;23580:74;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;23580:74:0;87:42:-1;143:17;;-1:-1;23580:74:0;-1:-1:-1;23558:96:0;-1:-1:-1;23558:96:0;23702:6;;23719:58;23740:3;:10;23736:1;:14;23719:58;;;23771:3;23775:1;23771:6;;;;;;;;;;;;;;;;23757;23764:3;;;;;;23757:11;;;;;;;;;;;:20;-1:-1:-1;;;;;23757:20:0;;;;;;;;-1:-1:-1;23752:3:0;;23719:58;;;-1:-1:-1;23789:6:0;23784:58;23805:3;:10;23801:1;:14;23784:58;;;23836:3;23840:1;23836:6;;;;;;;;;;;;;;;;23822;23829:3;;;;;;23822:11;;;;;;;;;;;:20;-1:-1:-1;;;;;23822:20:0;;;;;;;;-1:-1:-1;23817:3:0;;23784:58;;;-1:-1:-1;23854:6:0;23849:58;23870:3;:10;23866:1;:14;23849:58;;;23901:3;23905:1;23901:6;;;;;;;;;;;;;;;;23887;23894:3;;;;;;23887:11;;;;;;;;;;;:20;-1:-1:-1;;;;;23887:20:0;;;;;;;;-1:-1:-1;23882:3:0;;23849:58;;;-1:-1:-1;23919:6:0;23914:58;23935:3;:10;23931:1;:14;23914:58;;;23966:3;23970:1;23966:6;;;;;;;;;;;;;;;;23952;23959:3;;;;;;23952:11;;;;;;;;;;;:20;-1:-1:-1;;;;;23952:20:0;;;;;;;;-1:-1:-1;23947:3:0;;23914:58;;;-1:-1:-1;23984:6:0;23979:58;24000:3;:10;23996:1;:14;23979:58;;;24031:3;24035:1;24031:6;;;;;;;;;;;;;;;;24017;24024:3;;;;;;24017:11;;;;;;;;;;;:20;-1:-1:-1;;;;;24017:20:0;;;;;;;;-1:-1:-1;24012:3:0;;23979:58;;;-1:-1:-1;24058:6:0;;23210:863;-1:-1:-1;;;;;;;;;;;;;23210:863:0:o;1389:23251::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;-1:-1;1389:23251:0;;;-1:-1:-1;;1389:23251:0:o

Swarm Source

ipfs://8b548ef9fb3c00bb646a1d8e8a015d97c453e8df7b39158c386a6577f31bd2d9

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

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