Donau Testnet

Contract

0x477458c48A244B37C641d2F4F22306b2677CD019
Source Code Source Code

Overview

BTT Balance

Bittorent Chain LogoBittorent Chain LogoBittorent Chain Logo0 BTT

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Amount
Withdraw Launcht...279766462023-10-02 10:11:48852 days ago1696241508IN
0x477458c4...2677CD019
0 BTT281.0259,000,000
Claim Treasury279765722023-10-02 10:09:12852 days ago1696241352IN
0x477458c4...2677CD019
0 BTT451.1529,000,000
Distribute Liqui...279765532023-10-02 10:08:34852 days ago1696241314IN
0x477458c4...2677CD019
0 BTT680.1939,000,000
Set Treasury Add...279765392023-10-02 10:08:06852 days ago1696241286IN
0x477458c4...2677CD019
0 BTT416.6019,000,000
Redeem279763532023-10-02 10:01:42852 days ago1696240902IN
0x477458c4...2677CD019
0 BTT908.2179,000,000
Redeem279763302023-10-02 10:00:56852 days ago1696240856IN
0x477458c4...2677CD019
0 BTT908.2179,000,000
Redeem279762852023-10-02 9:59:22852 days ago1696240762IN
0x477458c4...2677CD019
0 BTT908.2179,000,000
Enable Redeem279762282023-10-02 9:57:24852 days ago1696240644IN
0x477458c4...2677CD019
0 BTT567.8919,000,000
Set Start279743272023-10-02 8:52:02852 days ago1696236722IN
0x477458c4...2677CD019
0 BTT129.7359,000,000
Invest279742382023-10-02 8:49:00852 days ago1696236540IN
0x477458c4...2677CD019
2,200,000 BTT1,226.7189,000,000
Invest279742082023-10-02 8:48:00852 days ago1696236480IN
0x477458c4...2677CD019
800,000 BTT1,226.7189,000,000
Invest279741882023-10-02 8:47:16852 days ago1696236436IN
0x477458c4...2677CD019
4,000,000 BTT1,688.4189,000,000
Enable Sale279741772023-10-02 8:46:54852 days ago1696236414IN
0x477458c4...2677CD019
0 BTT308.1879,000,000
Setup Liquidity279741252023-10-02 8:45:06852 days ago1696236306IN
0x477458c4...2677CD019
0 BTT1,306.7289,000,000
Set Soft Cap279738562023-10-02 8:35:52852 days ago1696235752IN
0x477458c4...2677CD019
0 BTT260.829,000,000
Set Launch Token279738432023-10-02 8:35:26852 days ago1696235726IN
0x477458c4...2677CD019
0 BTT417.0069,000,000
Set Start279738262023-10-02 8:34:52852 days ago1696235692IN
0x477458c4...2677CD019
0 BTT413.7939,000,000

Latest 12 internal transactions

Parent Transaction Hash Block From To Amount
279766462023-10-02 10:11:48852 days ago1696241508
0x477458c4...2677CD019
0 BTT
279765722023-10-02 10:09:12852 days ago1696241352
0x477458c4...2677CD019
0 BTT
279765532023-10-02 10:08:34852 days ago1696241314
0x477458c4...2677CD019
0 BTT
279765532023-10-02 10:08:34852 days ago1696241314
0x477458c4...2677CD019
4,200,000 BTT
279765532023-10-02 10:08:34852 days ago1696241314
0x477458c4...2677CD019
2,800,000 BTT
279763532023-10-02 10:01:42852 days ago1696240902
0x477458c4...2677CD019
0 BTT
279763302023-10-02 10:00:56852 days ago1696240856
0x477458c4...2677CD019
0 BTT
279762852023-10-02 9:59:22852 days ago1696240762
0x477458c4...2677CD019
0 BTT
279742382023-10-02 8:49:00852 days ago1696236540
0x477458c4...2677CD019
0 BTT
279742082023-10-02 8:48:00852 days ago1696236480
0x477458c4...2677CD019
0 BTT
279741882023-10-02 8:47:16852 days ago1696236436
0x477458c4...2677CD019
0 BTT
279741252023-10-02 8:45:06852 days ago1696236306
0x477458c4...2677CD019
0 BTT
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FairLuckPad

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: FairLuckPad.sol
// FairLaunch.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;

import "./Roles.sol";
import "./IERC20.sol";
import "./IBand.sol";

contract FairLuckPad {
    using Roles for Roles.Role;

    bool private _notEntered;			//reentrancyguard state
	Roles.Role private _administrators;

	IBand public bandRef;

    address public launchToken;         //launch token
    address public treasury;            //treasury address
    uint256 public softCap;             //minimum BTT to be raised for a valid launch
    uint256 public totalRaised;         //total BTT raised
    uint256 public totalRaisedLuck;     //total BTT raised factorizing luck
    uint256 public treasuryPerc;        //treasury percentage of tokens (10)
    uint256 public treasuryBttPerc;     //treasury percentage of raised BTT (40)
    uint256 public totalRedeem;         //total redeemed
    uint256 public startTime;           //launch start
    uint256 public duration;            //total duration in seconds (2*86400)
    bool public saleEnabled;            //enable launch
    bool public redeemEnabled;          //redeem enabled
    bool public setup;                  //liquidity setup status
    uint256 public maxInvest;           //max BTT to invest
    uint256 public numInvested;         //numner of launch customers
    uint256 public reedemRatio;         //ratio of tokens to BTT
    uint256 public treasuryShare;       //tokens allocated to treasury (10% of total)
    uint256 public lpShare;             //tokens allocated to LPs
    uint256 public launchShare;         //tokens aloocated to users
    uint256 public minLuck;             //minimum luck factor
    uint256 public maxLuck;             //maximum luck factor

    event SaleEnabled(bool enabled, uint256 time);
    event RedeemEnabled(bool enabled, uint256 time);
    event Invest(address investor, uint256 amount);
    event Redeem(address investor, uint256 amount);
    event AdminAdded(address account);
    event AdminRemoved(address account);

    struct InvestorInfo {
        uint256 amountInvested;         // BTT deposited by user
        uint256 luckFactor;             // How lucky was the user (100->200)
        bool claimed;                   // token has been claimed
    }

    mapping(address => InvestorInfo) public investors;
    mapping(address => uint256) public _prevLuck;          //previous luck factor

    constructor() {
        _notEntered = true;
		_addAdmin(msg.sender);		//default admin
        duration = 24*3600;         //1 day
        softCap = 5000000000 * 10**18;           //5B BTT
        maxInvest = 1000000000 * 10**18;         //1B BTT
        redeemEnabled = false;
        saleEnabled = false;
        treasuryPerc = 10;          //10% of tokens
        treasuryBttPerc = 40;           //40% of BTT
        minLuck = 100;            //base luck: 100%
        maxLuck = 200;            //max luck: 200%
        bandRef = IBand(0x8c064bCf7C0DA3B3b090BAbFE8f3323534D84d68);
    }

	/***********************************|
	|        AdminRole                  |
	|__________________________________*/

	modifier onlyAdmin() {
        require(isAdmin(msg.sender), "AdminRole: caller does not have the Admin role");
        _;
    }

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

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

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

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

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

	/***********************************|
	|        ReentrancyGuard            |
	|__________________________________*/

	/**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_notEntered, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _notEntered = false;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _notEntered = true;
    }

    function getCap() public view returns(uint256){
        return (totalRaised * 100 / softCap);
    }

    function getLuck(address user) public view returns(uint256 luck){
        IBand.ReferenceData memory data;
        data = bandRef.getReferenceData("BTC", "USD");

        uint256 temp = (uint256)(keccak256(abi.encodePacked(data.rate, user, block.timestamp)));
        luck = temp % 100 + 100;        //luck factor 100-200
        if (luck == _prevLuck[user]){
            data = bandRef.getReferenceData("ETH", "USD");
            temp = (uint256)(keccak256(abi.encodePacked(data.rate, user, block.timestamp)));
            luck = temp % 100 + 100;        //luck factor 100-200
        }
        return luck;
    }

    // invest
    function invest() public payable nonReentrant{
        require(block.timestamp >= startTime, "not started yet");
        require(block.timestamp < startTime+duration, "sale ended");
        require(saleEnabled, "not enabled yet");

        InvestorInfo storage investor = investors[msg.sender];

        require(investor.amountInvested + msg.value <= maxInvest, "investment too high");

        totalRaised += msg.value;

        uint256 userLuck = getLuck(msg.sender);   //luck function tbd
        _prevLuck[msg.sender] = userLuck;

        if (investor.amountInvested == 0){
            numInvested += 1;
        }

        investor.luckFactor = (userLuck*msg.value + investor.luckFactor*investor.amountInvested)/(investor.amountInvested + msg.value);
        investor.amountInvested += msg.value;

        totalRaisedLuck += msg.value * userLuck;

        emit Invest(msg.sender, msg.value);
    }

    // claim tokens
    function redeem() public nonReentrant {
        require(redeemEnabled, "redeem not enabled");
        InvestorInfo storage investor = investors[msg.sender];
        uint256 redeemAmount = investor.amountInvested * investor.luckFactor * reedemRatio / 10**9 / 100;
        require(redeemAmount > 0, "nothing to claim");
        require(!investor.claimed, "already claimed");
        if (getCap()>=100) {                        //launch success, send tokens
            require(
                IERC20(launchToken).transfer(
                    msg.sender,
                    redeemAmount
                ),
                "Failed to send tokens"
            );
        } else {                                    //launch failed, return BTT
            address payable rec = payable(msg.sender);
            (bool sent, ) = rec.call{value: investor.amountInvested}("");
            require(sent, "Failed to send BTT");
        }

        totalRedeem += investor.amountInvested;
        emit Redeem(msg.sender, investor.amountInvested);
        investor.claimed = true;
    }

    // define the launch token to be redeemed
    function setLaunchToken(address _launchToken) public onlyAdmin {
        launchToken = _launchToken;
    }

    // define the treasury address
    function setTreasuryAddress(address _treasury) public onlyAdmin {
        treasury = _treasury;
    }

     // set the oracle address
    function setOracleAddress(IBand _band) public onlyAdmin {
        bandRef = _band;
    }

    // withdraw in case some tokens were not redeemed
    function withdrawLaunchtoken(uint256 amount) public onlyAdmin {
        require(launchToken != address(0), "launch token not set");
        require(block.timestamp > startTime + duration + 7*24*3600, "tokens still locked");
        require(
            IERC20(launchToken).transfer(msg.sender, amount),
            "Failed to send tokens"
        );
    }

    // setup liquidity into launch contract
    function setupLiquidity(uint256 amount) public onlyAdmin returns(uint256 team, uint256 lp, uint256 launch) {
        require(amount>0, "Amount cannot be zero");
        require(launchToken != address(0), "launch token not set");
        require(
            IERC20(launchToken).transferFrom(msg.sender, address(this), amount),
            "Failed to transfer tokens"
        );

        team = amount * treasuryPerc / 100;             //team share
        treasuryShare += team;                              //incremental
        amount -= team;

        lp = amount * (100 - treasuryBttPerc) / (200 - treasuryBttPerc);   //LP share
        launch = amount - lp;                           //Launch share

        launchShare += launch;                          //incremental
        lpShare += lp;                                  //incremental

        setup = true;
        return(team, lp, launch);
    }

    // preview setup liquidity into launch contract
    function previewSetupLiquidity(uint256 amount) public view returns(uint256 team, uint256 lp, uint256 launch) {
        team = amount * treasuryPerc / 100;             //team share

        amount -= team;

        lp = amount * (100 - treasuryBttPerc) / (200 - treasuryBttPerc);   //launch share
        launch = amount - lp;                           //LP share

        return(team, lp, launch);
    }

    // transfer liquidity to treasury and LP
    function distributeLiquidity() public onlyAdmin {
        require(setup, "liquidity not setup");
        require(launchToken != address(0), "launch token not set");
        require(getCap()>=100, "launch failed, BTT returns to users");
        require(block.timestamp > startTime + duration, "sale not ended yet");
        uint256 amount=totalRaised * treasuryBttPerc / 100;

        address payable rec = payable(treasury);
		(bool sent, ) = rec.call{value: amount}("");
		require(sent, "Failed to send BTT to treasury");

        rec = payable(msg.sender);
		(sent, ) = rec.call{value: totalRaised-amount}("");
		require(sent, "Failed to send BTT to LP");

        require(
            IERC20(launchToken).transfer(msg.sender, lpShare),
            "Failed to send tokens to LP"
        );
    }

    //claim vested treasury tokens
    function claimTreasury() public onlyAdmin {
        require(launchToken != address(0), "launch token not set");
        require(block.timestamp > startTime + duration, "tokens still locked");
        require(treasuryShare>0, "no tokens to redeem");

        require(
            IERC20(launchToken).transfer(treasury, treasuryShare),
            "Failed to send tokens to Treasury"
        );
    }

    function enableSale() public onlyAdmin {
        require(startTime>0, "start time not set");
        require(duration>0, "duration not set");
        saleEnabled = true;
        emit SaleEnabled(true, block.timestamp);
    }

    function enableRedeem() public onlyAdmin {
        require(launchToken != address(0), "launch token not set");
        require(block.timestamp > startTime+duration, "sale not ended yet");
        require(setup, "liquidity not setup");
        redeemEnabled = true;
        reedemRatio = launchShare * 10**9 * 100 / totalRaisedLuck;    //check
        emit RedeemEnabled(true, block.timestamp);
    }

    function previewRedeem() public view returns(uint256 ratio){
        ratio = launchShare * 10**9 * 100 / totalRaisedLuck;
        return ratio;
    }

    function setSoftCap(uint256 _cap) public onlyAdmin {
        softCap = _cap;
    }

    function setDuration(uint256 _hours) public onlyAdmin {
        duration = _hours * 3600;
    }

    function setStart(uint256 _start) public onlyAdmin {
        startTime = _start;
    }

    function setMax(uint256 _max) public onlyAdmin {
        maxInvest = _max;
    }

    function getTiming() public view returns(uint256 timeToStart, uint256 timeToEnd, uint256 start, uint256 end){
        if (block.timestamp < startTime){
            timeToStart = startTime - block.timestamp;
        } else {
            timeToStart = 0;
        }

        if (block.timestamp < startTime + duration){
            timeToEnd = startTime + duration - block.timestamp;
        } else {
            timeToEnd = 0;
        }
        return(timeToStart, timeToEnd, startTime, startTime + duration);
    }

    function getUserInfo(address user) public view returns(uint256 amount, bool claimed, uint256 share, uint256 tokens, uint256 luck){
        if (totalRaised > 0) {
            share = investors[user].amountInvested * 1000 * investors[user].luckFactor / totalRaisedLuck;
            tokens = investors[user].amountInvested * launchShare * investors[user].luckFactor / totalRaisedLuck;
            luck = investors[user].luckFactor;
        }

        return(investors[user].amountInvested, investors[user].claimed, share, tokens, luck);
    }
}

File 2 of 4: IBand.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

interface IBand {
    /// A structure returned whenever someone requests for standard reference data.
    struct ReferenceData {
        uint256 rate; // base/quote exchange rate, multiplied by 1e18.
        uint256 lastUpdatedBase; // UNIX epoch of the last time when base price gets updated.
        uint256 lastUpdatedQuote; // UNIX epoch of the last time when quote price gets updated.
    }

    /// Returns the price data for the given base/quote pair. Revert if not available.
    function getReferenceData(string memory _base, string memory _quote) external view returns (ReferenceData memory);

    /// Similar to getReferenceData, but with multiple base/quote pairs at once.
    function getReferenceDataBulk(string[] memory _bases, string[] memory _quotes) external view returns (ReferenceData[] memory);
}

File 3 of 4: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

File 4 of 4: Roles.sol
// Roles.sol
// Based on OpenZeppelin contracts v2.5.1
// SPDX-License-Identifier: MIT
// solhint-disable-next-line
pragma solidity ^0.8.0;

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

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

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

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"AdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"AdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"investor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Invest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"investor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"RedeemEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SaleEnabled","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_prevLuck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bandRef","outputs":[{"internalType":"contract IBand","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableRedeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getLuck","outputs":[{"internalType":"uint256","name":"luck","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTiming","outputs":[{"internalType":"uint256","name":"timeToStart","type":"uint256"},{"internalType":"uint256","name":"timeToEnd","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"uint256","name":"share","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"luck","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"invest","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"investors","outputs":[{"internalType":"uint256","name":"amountInvested","type":"uint256"},{"internalType":"uint256","name":"luckFactor","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxInvest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLuck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLuck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numInvested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"previewSetupLiquidity","outputs":[{"internalType":"uint256","name":"team","type":"uint256"},{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"uint256","name":"launch","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reedemRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hours","type":"uint256"}],"name":"setDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_launchToken","type":"address"}],"name":"setLaunchToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IBand","name":"_band","type":"address"}],"name":"setOracleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cap","type":"uint256"}],"name":"setSoftCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_start","type":"uint256"}],"name":"setStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setup","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setupLiquidity","outputs":[{"internalType":"uint256","name":"team","type":"uint256"},{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"uint256","name":"launch","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"softCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRaisedLuck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryBttPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawLaunchtoken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506000805460ff191660011790556200002a336200009c565b62015180600c556b1027e72f1f128130880000006005556b033b2e3c9fd0803ce8000000600e55600d805461ffff19169055600a6008556028600955606460145560c8601555600280546001600160a01b031916738c064bcf7c0da3b3b090babfe8f3323534d84d68179055620001f1565b620000a9600182620000e8565b6040516001600160a01b03821681527f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e3399060200160405180910390a150565b620000f482826200016c565b15620001475760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650060448201526064015b60405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216620001d15760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b60648201526084016200013e565b506001600160a01b03166000908152602091909152604090205460ff1690565b61244a80620002016000396000f3fe6080604052600436106102925760003560e01c80637796ff371161015a578063be040fb0116100c1578063e8b5e51f1161007a578063e8b5e51f146107cb578063ebc38ab0146107d3578063f6a03ebf146107e9578063f6be71d114610809578063ff16e75014610829578063ff9d682a1461084957600080fd5b8063be040fb01461072c578063c5c4744c14610741578063c683d8e414610757578063cbd3b4031461076c578063d2f825361461078c578063d5cf5c72146107ab57600080fd5b8063906a26e011610113578063906a26e014610695578063945cc9f3146106ab578063a28a4d86146106c0578063ab280144146106e0578063ba0bba40146106f6578063bc80e4c61461071657600080fd5b80637796ff371461061257806378e97925146106285780638447e1f91461063e578063861d8e1314610654578063870407bf1461066a5780638bad0c0a1461068057600080fd5b80634c69c00f116101fe5780636386c1c7116101b75780636386c1c7146104fe5780636605bfda146105465780636cb05ea2146105665780636f7bc9be1461057c57806370480275146105d857806371b9b646146105f857600080fd5b80634c69c00f1461043e578063554d578d1461045e57806356f6609414610473578063604a85da1461048957806361d027b3146104a9578063630e799f146104c957600080fd5b80631fb9abf9116102505780631fb9abf9146103505780631fe9eabc1461038b57806324d7806c146103ab57806326b340c3146103db5780633110235a146104085780633c7843931461041e57600080fd5b80623bdc741461029757806302bd7e49146102ae578063061873e8146102d7578063078c74c3146102ec5780630acba5db146103025780630fb5a6b41461033a575b600080fd5b3480156102a357600080fd5b506102ac61085e565b005b3480156102ba57600080fd5b506102c460095481565b6040519081526020015b60405180910390f35b3480156102e357600080fd5b506102ac610a26565b3480156102f857600080fd5b506102c4600a5481565b34801561030e57600080fd5b50600254610322906001600160a01b031681565b6040516001600160a01b0390911681526020016102ce565b34801561034657600080fd5b506102c4600c5481565b34801561035c57600080fd5b5061037061036b3660046121af565b610b8b565b604080519384526020840192909252908201526060016102ce565b34801561039757600080fd5b506102ac6103a63660046121af565b610db3565b3480156103b757600080fd5b506103cb6103c63660046121dd565b610ddd565b60405190151581526020016102ce565b3480156103e757600080fd5b506102c46103f63660046121dd565b60176020526000908152604090205481565b34801561041457600080fd5b506102c4600e5481565b34801561042a57600080fd5b506103706104393660046121af565b610df0565b34801561044a57600080fd5b506102ac6104593660046121dd565b610e62565b34801561046a57600080fd5b506102c4610ea9565b34801561047f57600080fd5b506102c460155481565b34801561049557600080fd5b506102ac6104a43660046121dd565b610ecc565b3480156104b557600080fd5b50600454610322906001600160a01b031681565b3480156104d557600080fd5b506104de610f13565b6040805194855260208501939093529183015260608201526080016102ce565b34801561050a57600080fd5b5061051e6105193660046121dd565b610f9e565b604080519586529315156020860152928401919091526060830152608082015260a0016102ce565b34801561055257600080fd5b506102ac6105613660046121dd565b61108d565b34801561057257600080fd5b506102c460145481565b34801561058857600080fd5b506105bb6105973660046121dd565b60166020526000908152604090208054600182015460029092015490919060ff1683565b6040805193845260208401929092521515908201526060016102ce565b3480156105e457600080fd5b506102ac6105f33660046121dd565b6110d4565b34801561060457600080fd5b50600d546103cb9060ff1681565b34801561061e57600080fd5b506102c460115481565b34801561063457600080fd5b506102c4600b5481565b34801561064a57600080fd5b506102c460075481565b34801561066057600080fd5b506102c4600f5481565b34801561067657600080fd5b506102c460135481565b34801561068c57600080fd5b506102ac611105565b3480156106a157600080fd5b506102c460055481565b3480156106b757600080fd5b506102c461110e565b3480156106cc57600080fd5b50600354610322906001600160a01b031681565b3480156106ec57600080fd5b506102c460085481565b34801561070257600080fd5b50600d546103cb9062010000900460ff1681565b34801561072257600080fd5b506102c460105481565b34801561073857600080fd5b506102ac611130565b34801561074d57600080fd5b506102c460065481565b34801561076357600080fd5b506102ac611489565b34801561077857600080fd5b506102c46107873660046121dd565b61157f565b34801561079857600080fd5b50600d546103cb90610100900460ff1681565b3480156107b757600080fd5b506102ac6107c63660046121af565b611776565b6102ac6117a0565b3480156107df57600080fd5b506102c460125481565b3480156107f557600080fd5b506102ac6108043660046121af565b611a4e565b34801561081557600080fd5b506102ac6108243660046121af565b611a78565b34801561083557600080fd5b506102ac6108443660046121af565b611aaf565b34801561085557600080fd5b506102ac611c16565b61086733610ddd565b61088c5760405162461bcd60e51b815260040161088390612201565b60405180910390fd5b6003546001600160a01b03166108b45760405162461bcd60e51b81526004016108839061224f565b600c54600b546108c49190612293565b42116109085760405162461bcd60e51b81526020600482015260136024820152721d1bdad95b9cc81cdd1a5b1b081b1bd8dad959606a1b6044820152606401610883565b6000601154116109505760405162461bcd60e51b81526020600482015260136024820152726e6f20746f6b656e7320746f2072656465656d60681b6044820152606401610883565b6003546004805460115460405163a9059cbb60e01b81526001600160a01b039283169381019390935260248301529091169063a9059cbb906044016020604051808303816000875af11580156109aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ce91906122a6565b610a245760405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f2073656e6420746f6b656e7320746f20547265617375726044820152607960f81b6064820152608401610883565b565b610a2f33610ddd565b610a4b5760405162461bcd60e51b815260040161088390612201565b6003546001600160a01b0316610a735760405162461bcd60e51b81526004016108839061224f565b600c54600b54610a839190612293565b4211610ac65760405162461bcd60e51b81526020600482015260126024820152711cd85b19481b9bdd08195b991959081e595d60721b6044820152606401610883565b600d5462010000900460ff16610b145760405162461bcd60e51b815260206004820152601360248201527206c6971756964697479206e6f7420736574757606c1b6044820152606401610883565b600d805461ff001916610100179055600754601354610b3790633b9aca006122c8565b610b429060646122c8565b610b4c91906122f5565b60105560408051600181524260208201527fef5fd91dc9b012f3e4b41e00dc71466a39c83d97c3cc3879de5b9193f456c63091015b60405180910390a1565b6000806000610b9933610ddd565b610bb55760405162461bcd60e51b815260040161088390612201565b60008411610bfd5760405162461bcd60e51b8152602060048201526015602482015274416d6f756e742063616e6e6f74206265207a65726f60581b6044820152606401610883565b6003546001600160a01b0316610c255760405162461bcd60e51b81526004016108839061224f565b6003546040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca091906122a6565b610cec5760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f207472616e7366657220746f6b656e73000000000000006044820152606401610883565b606460085485610cfc91906122c8565b610d0691906122f5565b92508260116000828254610d1a9190612293565b90915550610d2a90508385612309565b935060095460c8610d3b9190612309565b600954610d49906064612309565b610d5390866122c8565b610d5d91906122f5565b9150610d698285612309565b90508060136000828254610d7d9190612293565b925050819055508160126000828254610d969190612293565b9091555050600d805462ff00001916620100001790559193909250565b610dbc33610ddd565b610dd85760405162461bcd60e51b815260040161088390612201565b600e55565b6000610dea600183611f9f565b92915050565b6000806000606460085485610e0591906122c8565b610e0f91906122f5565b9250610e1b8385612309565b935060095460c8610e2c9190612309565b600954610e3a906064612309565b610e4490866122c8565b610e4e91906122f5565b9150610e5a8285612309565b929491935050565b610e6b33610ddd565b610e875760405162461bcd60e51b815260040161088390612201565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006005546006546064610ebd91906122c8565b610ec791906122f5565b905090565b610ed533610ddd565b610ef15760405162461bcd60e51b815260040161088390612201565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080600b54421015610f385742600b54610f319190612309565b9350610f3d565b600093505b600c54600b54610f4d9190612293565b421015610f765742600c54600b54610f659190612293565b610f6f9190612309565b9250610f7b565b600092505b8383600b54600c54600b54610f909190612293565b935093509350935090919293565b600080600080600080600654111561105c576007546001600160a01b038716600090815260166020526040902060018101549054610fde906103e86122c8565b610fe891906122c8565b610ff291906122f5565b6007546001600160a01b038816600090815260166020526040902060018101546013549154939650919261102691906122c8565b61103091906122c8565b61103a91906122f5565b6001600160a01b03871660009081526016602052604090206001015490925090505b6001600160a01b0386166000908152601660205260409020805460029091015490955060ff16935091939590929450565b61109633610ddd565b6110b25760405162461bcd60e51b815260040161088390612201565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6110dd33610ddd565b6110f95760405162461bcd60e51b815260040161088390612201565b61110281612022565b50565b610a243361206d565b6000600754601354633b9aca0061112591906122c8565b610ebd9060646122c8565b60005460ff166111825760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610883565b6000805460ff19169055600d54610100900460ff166111d85760405162461bcd60e51b81526020600482015260126024820152711c995919595b481b9bdd08195b98589b195960721b6044820152606401610883565b33600090815260166020526040812060105460018201548254929392606492633b9aca0092909161120991906122c8565b61121391906122c8565b61121d91906122f5565b61122791906122f5565b90506000811161126c5760405162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b6044820152606401610883565b600282015460ff16156112b35760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b6044820152606401610883565b60646112bd610ea9565b106113805760035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133791906122a6565b61137b5760405162461bcd60e51b81526020600482015260156024820152744661696c656420746f2073656e6420746f6b656e7360581b6044820152606401610883565b611413565b815460405133916000918391908381818185875af1925050503d80600081146113c5576040519150601f19603f3d011682016040523d82523d6000602084013e6113ca565b606091505b50509050806114105760405162461bcd60e51b815260206004820152601260248201527111985a5b1959081d1bc81cd95b990810951560721b6044820152606401610883565b50505b8154600a8054600090611427908490612293565b909155505081546040805133815260208101929092527f222838db2794d11532d940e8dec38ae307ed0b63cd97c233322e221f998767a6910160405180910390a1506002018054600160ff199182168117909255600080549091169091179055565b61149233610ddd565b6114ae5760405162461bcd60e51b815260040161088390612201565b6000600b54116114f55760405162461bcd60e51b81526020600482015260126024820152711cdd185c9d081d1a5b59481b9bdd081cd95d60721b6044820152606401610883565b6000600c541161153a5760405162461bcd60e51b815260206004820152601060248201526f191d5c985d1a5bdb881b9bdd081cd95d60821b6044820152606401610883565b600d805460ff19166001908117909155604080519182524260208301527f020b56eb5031e351b28c7914a3185d679342016d533b3fe0d056b43fe5ecb8689101610b81565b60006115a560405180606001604052806000815260200160008152602001600081525090565b60025460405163195556f360e21b81526001600160a01b03909116906365555bcc906115d39060040161231c565b606060405180830381865afa1580156115f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116149190612359565b80516040805160208101929092526bffffffffffffffffffffffff19606087901b169082015242605482015290915060009060740160408051601f198184030181529190528051602090910120905061166e6064826123c3565b611679906064612293565b6001600160a01b038516600090815260176020526040902054909350830361176f5760025460405163195556f360e21b81526001600160a01b03909116906365555bcc906116c9906004016123d7565b606060405180830381865afa1580156116e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170a9190612359565b80516040805160208101929092526bffffffffffffffffffffffff19606088901b169082015242605482015290925060740160408051601f19818403018152919052805160209091012090506117616064826123c3565b61176c906064612293565b92505b5050919050565b61177f33610ddd565b61179b5760405162461bcd60e51b815260040161088390612201565b600555565b60005460ff166117f25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610883565b6000805460ff19169055600b544210156118405760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081cdd185c9d1959081e595d608a1b6044820152606401610883565b600c54600b546118509190612293565b421061188b5760405162461bcd60e51b815260206004820152600a6024820152691cd85b1948195b99195960b21b6044820152606401610883565b600d5460ff166118cf5760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd08195b98589b1959081e595d608a1b6044820152606401610883565b336000908152601660205260409020600e5481546118ee903490612293565b11156119325760405162461bcd60e51b81526020600482015260136024820152720d2dceccae6e8dacadce840e8dede40d0d2ced606b1b6044820152606401610883565b34600660008282546119449190612293565b90915550600090506119553361157f565b33600090815260176020526040812082905583549192500361198a576001600f60008282546119849190612293565b90915550505b8154611997903490612293565b825460018401546119a891906122c8565b6119b234846122c8565b6119bc9190612293565b6119c691906122f5565b60018301558154349083906000906119df908490612293565b909155506119ef905081346122c8565b60076000828254611a009190612293565b9091555050604080513381523460208201527fd90d253a9de34d2fdd5a75ae49ea17fcb43af32fc8ea08cc6d2341991dd3872e910160405180910390a150506000805460ff19166001179055565b611a5733610ddd565b611a735760405162461bcd60e51b815260040161088390612201565b600b55565b611a8133610ddd565b611a9d5760405162461bcd60e51b815260040161088390612201565b611aa981610e106122c8565b600c5550565b611ab833610ddd565b611ad45760405162461bcd60e51b815260040161088390612201565b6003546001600160a01b0316611afc5760405162461bcd60e51b81526004016108839061224f565b600c54600b54611b0c9190612293565b611b199062093a80612293565b4211611b5d5760405162461bcd60e51b81526020600482015260136024820152721d1bdad95b9cc81cdd1a5b1b081b1bd8dad959606a1b6044820152606401610883565b60035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd291906122a6565b6111025760405162461bcd60e51b81526020600482015260156024820152744661696c656420746f2073656e6420746f6b656e7360581b6044820152606401610883565b611c1f33610ddd565b611c3b5760405162461bcd60e51b815260040161088390612201565b600d5462010000900460ff16611c895760405162461bcd60e51b815260206004820152601360248201527206c6971756964697479206e6f7420736574757606c1b6044820152606401610883565b6003546001600160a01b0316611cb15760405162461bcd60e51b81526004016108839061224f565b6064611cbb610ea9565b1015611d155760405162461bcd60e51b815260206004820152602360248201527f6c61756e6368206661696c65642c204254542072657475726e7320746f20757360448201526265727360e81b6064820152608401610883565b600c54600b54611d259190612293565b4211611d685760405162461bcd60e51b81526020600482015260126024820152711cd85b19481b9bdd08195b991959081e595d60721b6044820152606401610883565b60006064600954600654611d7c91906122c8565b611d8691906122f5565b6004546040519192506001600160a01b031690600090829084908381818185875af1925050503d8060008114611dd8576040519150601f19603f3d011682016040523d82523d6000602084013e611ddd565b606091505b5050905080611e2e5760405162461bcd60e51b815260206004820152601e60248201527f4661696c656420746f2073656e642042545420746f20747265617375727900006044820152606401610883565b6006543392508290611e41908590612309565b604051600081818185875af1925050503d8060008114611e7d576040519150601f19603f3d011682016040523d82523d6000602084013e611e82565b606091505b50508091505080611ed55760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f2073656e642042545420746f204c5000000000000000006044820152606401610883565b60035460125460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4e91906122a6565b611f9a5760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f2073656e6420746f6b656e7320746f204c5000000000006044820152606401610883565b505050565b60006001600160a01b0382166120025760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610883565b506001600160a01b03166000908152602091909152604090205460ff1690565b61202d6001826120b1565b6040516001600160a01b03821681527f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339906020015b60405180910390a150565b61207860018261212d565b6040516001600160a01b03821681527fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f90602001612062565b6120bb8282611f9f565b156121085760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610883565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6121378282611f9f565b61218d5760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610883565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6000602082840312156121c157600080fd5b5035919050565b6001600160a01b038116811461110257600080fd5b6000602082840312156121ef57600080fd5b81356121fa816121c8565b9392505050565b6020808252602e908201527f41646d696e526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d7468652041646d696e20726f6c6560901b606082015260800190565b6020808252601490820152731b185d5b98da081d1bdad95b881b9bdd081cd95d60621b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610dea57610dea61227d565b6000602082840312156122b857600080fd5b815180151581146121fa57600080fd5b8082028115828204841417610dea57610dea61227d565b634e487b7160e01b600052601260045260246000fd5b600082612304576123046122df565b500490565b81810381811115610dea57610dea61227d565b60408152600360408201526242544360e81b6060820152608060208201526000610dea6080830160038152621554d160ea1b602082015260400190565b60006060828403121561236b57600080fd5b6040516060810181811067ffffffffffffffff8211171561239c57634e487b7160e01b600052604160045260246000fd5b80604052508251815260208301516020820152604083015160408201528091505092915050565b6000826123d2576123d26122df565b500690565b60408152600360408201526208aa8960eb1b6060820152608060208201526000610dea6080830160038152621554d160ea1b60208201526040019056fea264697066735822122069431d6c2629e1ccf808c1864b535ae1091a31eeffecd6833c14a1777b47ecb064736f6c63430008140033

Deployed Bytecode

0x6080604052600436106102925760003560e01c80637796ff371161015a578063be040fb0116100c1578063e8b5e51f1161007a578063e8b5e51f146107cb578063ebc38ab0146107d3578063f6a03ebf146107e9578063f6be71d114610809578063ff16e75014610829578063ff9d682a1461084957600080fd5b8063be040fb01461072c578063c5c4744c14610741578063c683d8e414610757578063cbd3b4031461076c578063d2f825361461078c578063d5cf5c72146107ab57600080fd5b8063906a26e011610113578063906a26e014610695578063945cc9f3146106ab578063a28a4d86146106c0578063ab280144146106e0578063ba0bba40146106f6578063bc80e4c61461071657600080fd5b80637796ff371461061257806378e97925146106285780638447e1f91461063e578063861d8e1314610654578063870407bf1461066a5780638bad0c0a1461068057600080fd5b80634c69c00f116101fe5780636386c1c7116101b75780636386c1c7146104fe5780636605bfda146105465780636cb05ea2146105665780636f7bc9be1461057c57806370480275146105d857806371b9b646146105f857600080fd5b80634c69c00f1461043e578063554d578d1461045e57806356f6609414610473578063604a85da1461048957806361d027b3146104a9578063630e799f146104c957600080fd5b80631fb9abf9116102505780631fb9abf9146103505780631fe9eabc1461038b57806324d7806c146103ab57806326b340c3146103db5780633110235a146104085780633c7843931461041e57600080fd5b80623bdc741461029757806302bd7e49146102ae578063061873e8146102d7578063078c74c3146102ec5780630acba5db146103025780630fb5a6b41461033a575b600080fd5b3480156102a357600080fd5b506102ac61085e565b005b3480156102ba57600080fd5b506102c460095481565b6040519081526020015b60405180910390f35b3480156102e357600080fd5b506102ac610a26565b3480156102f857600080fd5b506102c4600a5481565b34801561030e57600080fd5b50600254610322906001600160a01b031681565b6040516001600160a01b0390911681526020016102ce565b34801561034657600080fd5b506102c4600c5481565b34801561035c57600080fd5b5061037061036b3660046121af565b610b8b565b604080519384526020840192909252908201526060016102ce565b34801561039757600080fd5b506102ac6103a63660046121af565b610db3565b3480156103b757600080fd5b506103cb6103c63660046121dd565b610ddd565b60405190151581526020016102ce565b3480156103e757600080fd5b506102c46103f63660046121dd565b60176020526000908152604090205481565b34801561041457600080fd5b506102c4600e5481565b34801561042a57600080fd5b506103706104393660046121af565b610df0565b34801561044a57600080fd5b506102ac6104593660046121dd565b610e62565b34801561046a57600080fd5b506102c4610ea9565b34801561047f57600080fd5b506102c460155481565b34801561049557600080fd5b506102ac6104a43660046121dd565b610ecc565b3480156104b557600080fd5b50600454610322906001600160a01b031681565b3480156104d557600080fd5b506104de610f13565b6040805194855260208501939093529183015260608201526080016102ce565b34801561050a57600080fd5b5061051e6105193660046121dd565b610f9e565b604080519586529315156020860152928401919091526060830152608082015260a0016102ce565b34801561055257600080fd5b506102ac6105613660046121dd565b61108d565b34801561057257600080fd5b506102c460145481565b34801561058857600080fd5b506105bb6105973660046121dd565b60166020526000908152604090208054600182015460029092015490919060ff1683565b6040805193845260208401929092521515908201526060016102ce565b3480156105e457600080fd5b506102ac6105f33660046121dd565b6110d4565b34801561060457600080fd5b50600d546103cb9060ff1681565b34801561061e57600080fd5b506102c460115481565b34801561063457600080fd5b506102c4600b5481565b34801561064a57600080fd5b506102c460075481565b34801561066057600080fd5b506102c4600f5481565b34801561067657600080fd5b506102c460135481565b34801561068c57600080fd5b506102ac611105565b3480156106a157600080fd5b506102c460055481565b3480156106b757600080fd5b506102c461110e565b3480156106cc57600080fd5b50600354610322906001600160a01b031681565b3480156106ec57600080fd5b506102c460085481565b34801561070257600080fd5b50600d546103cb9062010000900460ff1681565b34801561072257600080fd5b506102c460105481565b34801561073857600080fd5b506102ac611130565b34801561074d57600080fd5b506102c460065481565b34801561076357600080fd5b506102ac611489565b34801561077857600080fd5b506102c46107873660046121dd565b61157f565b34801561079857600080fd5b50600d546103cb90610100900460ff1681565b3480156107b757600080fd5b506102ac6107c63660046121af565b611776565b6102ac6117a0565b3480156107df57600080fd5b506102c460125481565b3480156107f557600080fd5b506102ac6108043660046121af565b611a4e565b34801561081557600080fd5b506102ac6108243660046121af565b611a78565b34801561083557600080fd5b506102ac6108443660046121af565b611aaf565b34801561085557600080fd5b506102ac611c16565b61086733610ddd565b61088c5760405162461bcd60e51b815260040161088390612201565b60405180910390fd5b6003546001600160a01b03166108b45760405162461bcd60e51b81526004016108839061224f565b600c54600b546108c49190612293565b42116109085760405162461bcd60e51b81526020600482015260136024820152721d1bdad95b9cc81cdd1a5b1b081b1bd8dad959606a1b6044820152606401610883565b6000601154116109505760405162461bcd60e51b81526020600482015260136024820152726e6f20746f6b656e7320746f2072656465656d60681b6044820152606401610883565b6003546004805460115460405163a9059cbb60e01b81526001600160a01b039283169381019390935260248301529091169063a9059cbb906044016020604051808303816000875af11580156109aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ce91906122a6565b610a245760405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f2073656e6420746f6b656e7320746f20547265617375726044820152607960f81b6064820152608401610883565b565b610a2f33610ddd565b610a4b5760405162461bcd60e51b815260040161088390612201565b6003546001600160a01b0316610a735760405162461bcd60e51b81526004016108839061224f565b600c54600b54610a839190612293565b4211610ac65760405162461bcd60e51b81526020600482015260126024820152711cd85b19481b9bdd08195b991959081e595d60721b6044820152606401610883565b600d5462010000900460ff16610b145760405162461bcd60e51b815260206004820152601360248201527206c6971756964697479206e6f7420736574757606c1b6044820152606401610883565b600d805461ff001916610100179055600754601354610b3790633b9aca006122c8565b610b429060646122c8565b610b4c91906122f5565b60105560408051600181524260208201527fef5fd91dc9b012f3e4b41e00dc71466a39c83d97c3cc3879de5b9193f456c63091015b60405180910390a1565b6000806000610b9933610ddd565b610bb55760405162461bcd60e51b815260040161088390612201565b60008411610bfd5760405162461bcd60e51b8152602060048201526015602482015274416d6f756e742063616e6e6f74206265207a65726f60581b6044820152606401610883565b6003546001600160a01b0316610c255760405162461bcd60e51b81526004016108839061224f565b6003546040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca091906122a6565b610cec5760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f207472616e7366657220746f6b656e73000000000000006044820152606401610883565b606460085485610cfc91906122c8565b610d0691906122f5565b92508260116000828254610d1a9190612293565b90915550610d2a90508385612309565b935060095460c8610d3b9190612309565b600954610d49906064612309565b610d5390866122c8565b610d5d91906122f5565b9150610d698285612309565b90508060136000828254610d7d9190612293565b925050819055508160126000828254610d969190612293565b9091555050600d805462ff00001916620100001790559193909250565b610dbc33610ddd565b610dd85760405162461bcd60e51b815260040161088390612201565b600e55565b6000610dea600183611f9f565b92915050565b6000806000606460085485610e0591906122c8565b610e0f91906122f5565b9250610e1b8385612309565b935060095460c8610e2c9190612309565b600954610e3a906064612309565b610e4490866122c8565b610e4e91906122f5565b9150610e5a8285612309565b929491935050565b610e6b33610ddd565b610e875760405162461bcd60e51b815260040161088390612201565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006005546006546064610ebd91906122c8565b610ec791906122f5565b905090565b610ed533610ddd565b610ef15760405162461bcd60e51b815260040161088390612201565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080600b54421015610f385742600b54610f319190612309565b9350610f3d565b600093505b600c54600b54610f4d9190612293565b421015610f765742600c54600b54610f659190612293565b610f6f9190612309565b9250610f7b565b600092505b8383600b54600c54600b54610f909190612293565b935093509350935090919293565b600080600080600080600654111561105c576007546001600160a01b038716600090815260166020526040902060018101549054610fde906103e86122c8565b610fe891906122c8565b610ff291906122f5565b6007546001600160a01b038816600090815260166020526040902060018101546013549154939650919261102691906122c8565b61103091906122c8565b61103a91906122f5565b6001600160a01b03871660009081526016602052604090206001015490925090505b6001600160a01b0386166000908152601660205260409020805460029091015490955060ff16935091939590929450565b61109633610ddd565b6110b25760405162461bcd60e51b815260040161088390612201565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6110dd33610ddd565b6110f95760405162461bcd60e51b815260040161088390612201565b61110281612022565b50565b610a243361206d565b6000600754601354633b9aca0061112591906122c8565b610ebd9060646122c8565b60005460ff166111825760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610883565b6000805460ff19169055600d54610100900460ff166111d85760405162461bcd60e51b81526020600482015260126024820152711c995919595b481b9bdd08195b98589b195960721b6044820152606401610883565b33600090815260166020526040812060105460018201548254929392606492633b9aca0092909161120991906122c8565b61121391906122c8565b61121d91906122f5565b61122791906122f5565b90506000811161126c5760405162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b6044820152606401610883565b600282015460ff16156112b35760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b6044820152606401610883565b60646112bd610ea9565b106113805760035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133791906122a6565b61137b5760405162461bcd60e51b81526020600482015260156024820152744661696c656420746f2073656e6420746f6b656e7360581b6044820152606401610883565b611413565b815460405133916000918391908381818185875af1925050503d80600081146113c5576040519150601f19603f3d011682016040523d82523d6000602084013e6113ca565b606091505b50509050806114105760405162461bcd60e51b815260206004820152601260248201527111985a5b1959081d1bc81cd95b990810951560721b6044820152606401610883565b50505b8154600a8054600090611427908490612293565b909155505081546040805133815260208101929092527f222838db2794d11532d940e8dec38ae307ed0b63cd97c233322e221f998767a6910160405180910390a1506002018054600160ff199182168117909255600080549091169091179055565b61149233610ddd565b6114ae5760405162461bcd60e51b815260040161088390612201565b6000600b54116114f55760405162461bcd60e51b81526020600482015260126024820152711cdd185c9d081d1a5b59481b9bdd081cd95d60721b6044820152606401610883565b6000600c541161153a5760405162461bcd60e51b815260206004820152601060248201526f191d5c985d1a5bdb881b9bdd081cd95d60821b6044820152606401610883565b600d805460ff19166001908117909155604080519182524260208301527f020b56eb5031e351b28c7914a3185d679342016d533b3fe0d056b43fe5ecb8689101610b81565b60006115a560405180606001604052806000815260200160008152602001600081525090565b60025460405163195556f360e21b81526001600160a01b03909116906365555bcc906115d39060040161231c565b606060405180830381865afa1580156115f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116149190612359565b80516040805160208101929092526bffffffffffffffffffffffff19606087901b169082015242605482015290915060009060740160408051601f198184030181529190528051602090910120905061166e6064826123c3565b611679906064612293565b6001600160a01b038516600090815260176020526040902054909350830361176f5760025460405163195556f360e21b81526001600160a01b03909116906365555bcc906116c9906004016123d7565b606060405180830381865afa1580156116e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170a9190612359565b80516040805160208101929092526bffffffffffffffffffffffff19606088901b169082015242605482015290925060740160408051601f19818403018152919052805160209091012090506117616064826123c3565b61176c906064612293565b92505b5050919050565b61177f33610ddd565b61179b5760405162461bcd60e51b815260040161088390612201565b600555565b60005460ff166117f25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610883565b6000805460ff19169055600b544210156118405760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081cdd185c9d1959081e595d608a1b6044820152606401610883565b600c54600b546118509190612293565b421061188b5760405162461bcd60e51b815260206004820152600a6024820152691cd85b1948195b99195960b21b6044820152606401610883565b600d5460ff166118cf5760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd08195b98589b1959081e595d608a1b6044820152606401610883565b336000908152601660205260409020600e5481546118ee903490612293565b11156119325760405162461bcd60e51b81526020600482015260136024820152720d2dceccae6e8dacadce840e8dede40d0d2ced606b1b6044820152606401610883565b34600660008282546119449190612293565b90915550600090506119553361157f565b33600090815260176020526040812082905583549192500361198a576001600f60008282546119849190612293565b90915550505b8154611997903490612293565b825460018401546119a891906122c8565b6119b234846122c8565b6119bc9190612293565b6119c691906122f5565b60018301558154349083906000906119df908490612293565b909155506119ef905081346122c8565b60076000828254611a009190612293565b9091555050604080513381523460208201527fd90d253a9de34d2fdd5a75ae49ea17fcb43af32fc8ea08cc6d2341991dd3872e910160405180910390a150506000805460ff19166001179055565b611a5733610ddd565b611a735760405162461bcd60e51b815260040161088390612201565b600b55565b611a8133610ddd565b611a9d5760405162461bcd60e51b815260040161088390612201565b611aa981610e106122c8565b600c5550565b611ab833610ddd565b611ad45760405162461bcd60e51b815260040161088390612201565b6003546001600160a01b0316611afc5760405162461bcd60e51b81526004016108839061224f565b600c54600b54611b0c9190612293565b611b199062093a80612293565b4211611b5d5760405162461bcd60e51b81526020600482015260136024820152721d1bdad95b9cc81cdd1a5b1b081b1bd8dad959606a1b6044820152606401610883565b60035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd291906122a6565b6111025760405162461bcd60e51b81526020600482015260156024820152744661696c656420746f2073656e6420746f6b656e7360581b6044820152606401610883565b611c1f33610ddd565b611c3b5760405162461bcd60e51b815260040161088390612201565b600d5462010000900460ff16611c895760405162461bcd60e51b815260206004820152601360248201527206c6971756964697479206e6f7420736574757606c1b6044820152606401610883565b6003546001600160a01b0316611cb15760405162461bcd60e51b81526004016108839061224f565b6064611cbb610ea9565b1015611d155760405162461bcd60e51b815260206004820152602360248201527f6c61756e6368206661696c65642c204254542072657475726e7320746f20757360448201526265727360e81b6064820152608401610883565b600c54600b54611d259190612293565b4211611d685760405162461bcd60e51b81526020600482015260126024820152711cd85b19481b9bdd08195b991959081e595d60721b6044820152606401610883565b60006064600954600654611d7c91906122c8565b611d8691906122f5565b6004546040519192506001600160a01b031690600090829084908381818185875af1925050503d8060008114611dd8576040519150601f19603f3d011682016040523d82523d6000602084013e611ddd565b606091505b5050905080611e2e5760405162461bcd60e51b815260206004820152601e60248201527f4661696c656420746f2073656e642042545420746f20747265617375727900006044820152606401610883565b6006543392508290611e41908590612309565b604051600081818185875af1925050503d8060008114611e7d576040519150601f19603f3d011682016040523d82523d6000602084013e611e82565b606091505b50508091505080611ed55760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f2073656e642042545420746f204c5000000000000000006044820152606401610883565b60035460125460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4e91906122a6565b611f9a5760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f2073656e6420746f6b656e7320746f204c5000000000006044820152606401610883565b505050565b60006001600160a01b0382166120025760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610883565b506001600160a01b03166000908152602091909152604090205460ff1690565b61202d6001826120b1565b6040516001600160a01b03821681527f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339906020015b60405180910390a150565b61207860018261212d565b6040516001600160a01b03821681527fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f90602001612062565b6120bb8282611f9f565b156121085760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610883565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6121378282611f9f565b61218d5760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610883565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6000602082840312156121c157600080fd5b5035919050565b6001600160a01b038116811461110257600080fd5b6000602082840312156121ef57600080fd5b81356121fa816121c8565b9392505050565b6020808252602e908201527f41646d696e526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d7468652041646d696e20726f6c6560901b606082015260800190565b6020808252601490820152731b185d5b98da081d1bdad95b881b9bdd081cd95d60621b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610dea57610dea61227d565b6000602082840312156122b857600080fd5b815180151581146121fa57600080fd5b8082028115828204841417610dea57610dea61227d565b634e487b7160e01b600052601260045260246000fd5b600082612304576123046122df565b500490565b81810381811115610dea57610dea61227d565b60408152600360408201526242544360e81b6060820152608060208201526000610dea6080830160038152621554d160ea1b602082015260400190565b60006060828403121561236b57600080fd5b6040516060810181811067ffffffffffffffff8211171561239c57634e487b7160e01b600052604160045260246000fd5b80604052508251815260208301516020820152604083015160408201528091505092915050565b6000826123d2576123d26122df565b500690565b60408152600360408201526208aa8960eb1b6060820152608060208201526000610dea6080830160038152621554d160ea1b60208201526040019056fea264697066735822122069431d6c2629e1ccf808c1864b535ae1091a31eeffecd6833c14a1777b47ecb064736f6c63430008140033

Deployed Bytecode Sourcemap

151:13422:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10880:407;;;;;;;;;;;;;:::i;:::-;;755:30;;;;;;;;;;;;;;;;;;;160:25:4;;;148:2;133:18;755:30:0;;;;;;;;11532:406;;;;;;;;;;;;;:::i;837:26::-;;;;;;;;;;;;;;;;308:20;;;;;;;;;;-1:-1:-1;308:20:0;;;;-1:-1:-1;;;;;308:20:0;;;;;;-1:-1:-1;;;;;374:32:4;;;356:51;;344:2;329:18;308:20:0;196:217:4;951:23:0;;;;;;;;;;;;;;;;8566:927;;;;;;;;;;-1:-1:-1;8566:927:0;;;;;:::i;:::-;;:::i;:::-;;;;805:25:4;;;861:2;846:18;;839:34;;;;889:18;;;882:34;793:2;778:18;8566:927:0;603:319:4;12399:82:0;;;;;;;;;;-1:-1:-1;12399:82:0;;;;;:::i;:::-;;:::i;3309:115::-;;;;;;;;;;-1:-1:-1;3309:115:0;;;;;:::i;:::-;;:::i;:::-;;;1480:14:4;;1473:22;1455:41;;1443:2;1428:18;3309:115:0;1315:187:4;2358:44:0;;;;;;;;;;-1:-1:-1;2358:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;1211:24;;;;;;;;;;;;;;;;9554:412;;;;;;;;;;-1:-1:-1;9554:412:0;;;;;:::i;:::-;;:::i;7998:90::-;;;;;;;;;;-1:-1:-1;7998:90:0;;;;;:::i;:::-;;:::i;4839:101::-;;;;;;;;;;;;;:::i;1694:22::-;;;;;;;;;;;;;;;;7703:108;;;;;;;;;;-1:-1:-1;7703:108:0;;;;;:::i;:::-;;:::i;393:23::-;;;;;;;;;;-1:-1:-1;393:23:0;;;;-1:-1:-1;;;;;393:23:0;;;12489:526;;;;;;;;;;;;;:::i;:::-;;;;2212:25:4;;;2268:2;2253:18;;2246:34;;;;2296:18;;;2289:34;2354:2;2339:18;;2332:34;2199:3;2184:19;12489:526:0;1981:391:4;13023:547:0;;;;;;;;;;-1:-1:-1;13023:547:0;;;;;:::i;:::-;;:::i;:::-;;;;2630:25:4;;;2698:14;;2691:22;2686:2;2671:18;;2664:50;2730:18;;;2723:34;;;;2788:2;2773:18;;2766:34;2831:3;2816:19;;2809:35;2617:3;2602:19;13023:547:0;2377:473:4;7855:103:0;;;;;;;;;;-1:-1:-1;7855:103:0;;;;;:::i;:::-;;:::i;1631:22::-;;;;;;;;;;;;;;;;2302:49;;;;;;;;;;-1:-1:-1;2302:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3051:25:4;;;3107:2;3092:18;;3085:34;;;;3162:14;3155:22;3135:18;;;3128:50;3039:2;3024:18;2302:49:0;2855:329:4;3432:89:0;;;;;;;;;;-1:-1:-1;3432:89:0;;;;;:::i;:::-;;:::i;1030:23::-;;;;;;;;;;-1:-1:-1;1030:23:0;;;;;;;;1408:28;;;;;;;;;;;;;;;;895:24;;;;;;;;;;;;;;;;600:30;;;;;;;;;;;;;;;;1272:26;;;;;;;;;;;;;;;;1562;;;;;;;;;;;;;;;;3529:75;;;;;;;;;;;;;:::i;453:22::-;;;;;;;;;;;;;;;;11946:152;;;;;;;;;;;;;:::i;337:26::-;;;;;;;;;;-1:-1:-1;337:26:0;;;;-1:-1:-1;;;;;337:26:0;;;677:27;;;;;;;;;;;;;;;;1145:17;;;;;;;;;;-1:-1:-1;1145:17:0;;;;;;;;;;;1342:26;;;;;;;;;;;;;;;;6551:1097;;;;;;;;;;;;;:::i;540:26::-;;;;;;;;;;;;;;;;11295:229;;;;;;;;;;;;;:::i;4948:626::-;;;;;;;;;;-1:-1:-1;4948:626:0;;;;;:::i;:::-;;:::i;1087:25::-;;;;;;;;;;-1:-1:-1;1087:25:0;;;;;;;;;;;12106:84;;;;;;;;;;-1:-1:-1;12106:84:0;;;;;:::i;:::-;;:::i;5597:925::-;;;:::i;1495:22::-;;;;;;;;;;;;;;;;12303:88;;;;;;;;;;-1:-1:-1;12303:88:0;;;;;:::i;:::-;;:::i;12198:97::-;;;;;;;;;;-1:-1:-1;12198:97:0;;;;;:::i;:::-;;:::i;8151:362::-;;;;;;;;;;-1:-1:-1;8151:362:0;;;;;:::i;:::-;;:::i;10020:816::-;;;;;;;;;;;;;:::i;10880:407::-;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;;;;;;;;;10941:11:::1;::::0;-1:-1:-1;;;;;10941:11:0::1;10933:58;;;;-1:-1:-1::0;;;10933:58:0::1;;;;;;;:::i;:::-;11040:8;;11028:9;;:20;;;;:::i;:::-;11010:15;:38;11002:70;;;::::0;-1:-1:-1;;;11002:70:0;;4417:2:4;11002:70:0::1;::::0;::::1;4399:21:4::0;4456:2;4436:18;;;4429:30;-1:-1:-1;;;4475:18:4;;;4468:49;4534:18;;11002:70:0::1;4215:343:4::0;11002:70:0::1;11105:1;11091:13;;:15;11083:47;;;::::0;-1:-1:-1;;;11083:47:0;;4765:2:4;11083:47:0::1;::::0;::::1;4747:21:4::0;4804:2;4784:18;;;4777:30;-1:-1:-1;;;4823:18:4;;;4816:49;4882:18;;11083:47:0::1;4563:343:4::0;11083:47:0::1;11172:11;::::0;11194:8:::1;::::0;;11204:13:::1;::::0;11165:53:::1;::::0;-1:-1:-1;;;11165:53:0;;-1:-1:-1;;;;;11194:8:0;;::::1;11165:53:::0;;::::1;5085:51:4::0;;;;5152:18;;;5145:34;11172:11:0;;::::1;::::0;11165:28:::1;::::0;5058:18:4;;11165:53:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11143:136;;;::::0;-1:-1:-1;;;11143:136:0;;5674:2:4;11143:136:0::1;::::0;::::1;5656:21:4::0;5713:2;5693:18;;;5686:30;5752:34;5732:18;;;5725:62;-1:-1:-1;;;5803:18:4;;;5796:31;5844:19;;11143:136:0::1;5472:397:4::0;11143:136:0::1;10880:407::o:0;11532:406::-;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;11592:11:::1;::::0;-1:-1:-1;;;;;11592:11:0::1;11584:58;;;;-1:-1:-1::0;;;11584:58:0::1;;;;;;;:::i;:::-;11689:8;;11679:9;;:18;;;;:::i;:::-;11661:15;:36;11653:67;;;::::0;-1:-1:-1;;;11653:67:0;;6076:2:4;11653:67:0::1;::::0;::::1;6058:21:4::0;6115:2;6095:18;;;6088:30;-1:-1:-1;;;6134:18:4;;;6127:48;6192:18;;11653:67:0::1;5874:342:4::0;11653:67:0::1;11739:5;::::0;;;::::1;;;11731:37;;;::::0;-1:-1:-1;;;11731:37:0;;6423:2:4;11731:37:0::1;::::0;::::1;6405:21:4::0;6462:2;6442:18;;;6435:30;-1:-1:-1;;;6481:18:4;;;6474:49;6540:18;;11731:37:0::1;6221:343:4::0;11731:37:0::1;11779:13;:20:::0;;-1:-1:-1;;11779:20:0::1;;;::::0;;11852:15:::1;::::0;11824:11:::1;::::0;:19:::1;::::0;11838:5:::1;11824:19;:::i;:::-;:25;::::0;11846:3:::1;11824:25;:::i;:::-;:43;;;;:::i;:::-;11810:11;:57:::0;11894:36:::1;::::0;;11908:4:::1;7167:41:4::0;;11914:15:0::1;7239:2:4::0;7224:18;;7217:34;11894:36:0::1;::::0;7140:18:4;11894:36:0::1;;;;;;;;11532:406::o:0;8566:927::-;8631:12;8645:10;8657:14;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;8699:1:::1;8692:6;:8;8684:42;;;::::0;-1:-1:-1;;;8684:42:0;;7464:2:4;8684:42:0::1;::::0;::::1;7446:21:4::0;7503:2;7483:18;;;7476:30;-1:-1:-1;;;7522:18:4;;;7515:51;7583:18;;8684:42:0::1;7262:345:4::0;8684:42:0::1;8745:11;::::0;-1:-1:-1;;;;;8745:11:0::1;8737:58;;;;-1:-1:-1::0;;;8737:58:0::1;;;;;;;:::i;:::-;8835:11;::::0;8828:67:::1;::::0;-1:-1:-1;;;8828:67:0;;8861:10:::1;8828:67;::::0;::::1;7852:34:4::0;8881:4:0::1;7902:18:4::0;;;7895:43;7954:18;;;7947:34;;;-1:-1:-1;;;;;8835:11:0;;::::1;::::0;8828:32:::1;::::0;7787:18:4;;8828:67:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8806:142;;;::::0;-1:-1:-1;;;8806:142:0;;8194:2:4;8806:142:0::1;::::0;::::1;8176:21:4::0;8233:2;8213:18;;;8206:30;8272:27;8252:18;;;8245:55;8317:18;;8806:142:0::1;7992:349:4::0;8806:142:0::1;8992:3;8977:12;;8968:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;8961:34;;9048:4;9031:13;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;9106:14:0::1;::::0;-1:-1:-1;9116:4:0;9106:14;::::1;:::i;:::-;;;9180:15;;9174:3;:21;;;;:::i;:::-;9154:15;::::0;9148:21:::1;::::0;:3:::1;:21;:::i;:::-;9138:32;::::0;:6;:32:::1;:::i;:::-;:58;;;;:::i;:::-;9133:63:::0;-1:-1:-1;9229:11:0::1;9133:63:::0;9229:6;:11:::1;:::i;:::-;9220:20;;9309:6;9294:11;;:21;;;;;;;:::i;:::-;;;;;;;;9376:2;9365:7;;:13;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;9438:5:0::1;:12:::0;;-1:-1:-1;;9438:12:0::1;::::0;::::1;::::0;;8566:927;;;;;:::o;12399:82::-;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;12457:9:::1;:16:::0;12399:82::o;3309:115::-;3364:4;3388:28;:15;3408:7;3388:19;:28::i;:::-;3381:35;3309:115;-1:-1:-1;;3309:115:0:o;9554:412::-;9621:12;9635:10;9647:14;9705:3;9690:12;;9681:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;9674:34;-1:-1:-1;9746:14:0;9674:34;9746:14;;:::i;:::-;;;9820:15;;9814:3;:21;;;;:::i;:::-;9794:15;;9788:21;;:3;:21;:::i;:::-;9778:32;;:6;:32;:::i;:::-;:58;;;;:::i;:::-;9773:63;-1:-1:-1;9873:11:0;9773:63;9873:6;:11;:::i;:::-;9554:412;;;;-1:-1:-1;;9554:412:0:o;7998:90::-;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;8065:7:::1;:15:::0;;-1:-1:-1;;;;;;8065:15:0::1;-1:-1:-1::0;;;;;8065:15:0;;;::::1;::::0;;;::::1;::::0;;7998:90::o;4839:101::-;4877:7;4924;;4904:11;;4918:3;4904:17;;;;:::i;:::-;:27;;;;:::i;:::-;4896:36;;4839:101;:::o;7703:108::-;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;7777:11:::1;:26:::0;;-1:-1:-1;;;;;;7777:26:0::1;-1:-1:-1::0;;;;;7777:26:0;;;::::1;::::0;;;::::1;::::0;;7703:108::o;12489:526::-;12530:19;12551:17;12570:13;12585:11;12630:9;;12612:15;:27;12608:148;;;12681:15;12669:9;;:27;;;;:::i;:::-;12655:41;;12608:148;;;12743:1;12729:15;;12608:148;12802:8;;12790:9;;:20;;;;:::i;:::-;12772:15;:38;12768:166;;;12861:15;12850:8;;12838:9;;:20;;;;:::i;:::-;:38;;;;:::i;:::-;12826:50;;12768:166;;;12921:1;12909:13;;12768:166;12951:11;12964:9;12975;;12998:8;;12986:9;;:20;;;;:::i;:::-;12944:63;;;;;;;;12489:526;;;;:::o;13023:547::-;13078:14;13094:12;13108:13;13123:14;13139:12;13181:1;13167:11;;:15;13163:303;;;13276:15;;-1:-1:-1;;;;;13247:15:0;;;;;;:9;:15;;;;;:26;;;;13207:30;;:37;;13240:4;13207:37;:::i;:::-;:66;;;;:::i;:::-;:84;;;;:::i;:::-;13391:15;;-1:-1:-1;;;;;13362:15:0;;;;;;:9;:15;;;;;:26;;;;13348:11;;13315:30;;13199:92;;-1:-1:-1;13391:15:0;;13315:44;;13348:11;13315:44;:::i;:::-;:73;;;;:::i;:::-;:91;;;;:::i;:::-;-1:-1:-1;;;;;13428:15:0;;;;;;:9;:15;;;;;:26;;;13306:100;;-1:-1:-1;13428:26:0;-1:-1:-1;13163:303:0;-1:-1:-1;;;;;13485:15:0;;;;;;:9;:15;;;;;:30;;13517:23;;;;;13485:30;;-1:-1:-1;13517:23:0;;;-1:-1:-1;13023:547:0;;;;;;;:::o;7855:103::-;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;7930:8:::1;:20:::0;;-1:-1:-1;;;;;;7930:20:0::1;-1:-1:-1::0;;;;;7930:20:0;;;::::1;::::0;;;::::1;::::0;;7855:103::o;3432:89::-;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;3495:18:::1;3505:7;3495:9;:18::i;:::-;3432:89:::0;:::o;3529:75::-;3572:24;3585:10;3572:12;:24::i;11946:152::-;11991:13;12052:15;;12024:11;;12038:5;12024:19;;;;:::i;:::-;:25;;12046:3;12024:25;:::i;6551:1097::-;4500:11;;;;4492:55;;;;-1:-1:-1;;;4492:55:0;;8681:2:4;4492:55:0;;;8663:21:4;8720:2;8700:18;;;8693:30;8759:33;8739:18;;;8732:61;8810:18;;4492:55:0;8479:355:4;4492:55:0;4639:5;4625:19;;-1:-1:-1;;4625:19:0;;;6608:13:::1;::::0;4625:19;6608:13;::::1;4625:19:::0;6608:13:::1;6600:44;;;::::0;-1:-1:-1;;;6600:44:0;;9041:2:4;6600:44:0::1;::::0;::::1;9023:21:4::0;9080:2;9060:18;;;9053:30;-1:-1:-1;;;9099:18:4;;;9092:48;9157:18;;6600:44:0::1;8839:342:4::0;6600:44:0::1;6697:10;6655:29;6687:21:::0;;;:9:::1;:21;::::0;;;;6790:11:::1;::::0;6768:19:::1;::::0;::::1;::::0;6742:23;;6687:21;;6655:29;6812:3:::1;::::0;6804:5:::1;::::0;6790:11;;6742:45:::1;::::0;6768:19;6742:45:::1;:::i;:::-;:59;;;;:::i;:::-;:67;;;;:::i;:::-;:73;;;;:::i;:::-;6719:96;;6849:1;6834:12;:16;6826:45;;;::::0;-1:-1:-1;;;6826:45:0;;9388:2:4;6826:45:0::1;::::0;::::1;9370:21:4::0;9427:2;9407:18;;;9400:30;-1:-1:-1;;;9446:18:4;;;9439:46;9502:18;;6826:45:0::1;9186:340:4::0;6826:45:0::1;6891:16;::::0;::::1;::::0;::::1;;6890:17;6882:45;;;::::0;-1:-1:-1;;;6882:45:0;;9733:2:4;6882:45:0::1;::::0;::::1;9715:21:4::0;9772:2;9752:18;;;9745:30;-1:-1:-1;;;9791:18:4;;;9784:45;9846:18;;6882:45:0::1;9531:339:4::0;6882:45:0::1;6952:3;6942:8;:6;:8::i;:::-;:13;6938:559;;7058:11;::::0;7051:115:::1;::::0;-1:-1:-1;;;7051:115:0;;7102:10:::1;7051:115;::::0;::::1;5085:51:4::0;5152:18;;;5145:34;;;-1:-1:-1;;;;;7058:11:0;;::::1;::::0;7051:28:::1;::::0;5058:18:4;;7051:115:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7025:198;;;::::0;-1:-1:-1;;;7025:198:0;;10077:2:4;7025:198:0::1;::::0;::::1;10059:21:4::0;10116:2;10096:18;;;10089:30;-1:-1:-1;;;10135:18:4;;;10128:51;10196:18;;7025:198:0::1;9875:345:4::0;7025:198:0::1;6938:559;;;7407:23:::0;;7391:44:::1;::::0;7349:10:::1;::::0;7319:19:::1;::::0;7349:10;;7407:23;7319:19;7391:44;7319:19;7391:44;7407:23;7349:10;7391:44:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7375:60;;;7458:4;7450:35;;;::::0;-1:-1:-1;;;7450:35:0;;10637:2:4;7450:35:0::1;::::0;::::1;10619:21:4::0;10676:2;10656:18;;;10649:30;-1:-1:-1;;;10695:18:4;;;10688:48;10753:18;;7450:35:0::1;10435:342:4::0;7450:35:0::1;7241:256;;6938:559;7524:23:::0;;7509:11:::1;:38:::0;;7524:23:::1;::::0;7509:38:::1;::::0;7524:23;;7509:38:::1;:::i;:::-;::::0;;;-1:-1:-1;;7582:23:0;;7563:43:::1;::::0;;7570:10:::1;5085:51:4::0;;5167:2;5152:18;;5145:34;;;;7563:43:0::1;::::0;5058:18:4;7563:43:0::1;;;;;;;-1:-1:-1::0;7617:16:0::1;;:23:::0;;7636:4:::1;-1:-1:-1::0;;7617:23:0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;4805:18:0;;;;;;;;;;6551:1097::o;11295:229::-;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;11363:1:::1;11353:9;;:11;11345:42;;;::::0;-1:-1:-1;;;11345:42:0;;10984:2:4;11345:42:0::1;::::0;::::1;10966:21:4::0;11023:2;11003:18;;;10996:30;-1:-1:-1;;;11042:18:4;;;11035:48;11100:18;;11345:42:0::1;10782:342:4::0;11345:42:0::1;11415:1;11406:8;;:10;11398:39;;;::::0;-1:-1:-1;;;11398:39:0;;11331:2:4;11398:39:0::1;::::0;::::1;11313:21:4::0;11370:2;11350:18;;;11343:30;-1:-1:-1;;;11389:18:4;;;11382:46;11445:18;;11398:39:0::1;11129:340:4::0;11398:39:0::1;11448:11;:18:::0;;-1:-1:-1;;11448:18:0::1;11462:4;11448:18:::0;;::::1;::::0;;;11482:34:::1;::::0;;7167:41:4;;;11500:15:0::1;7239:2:4::0;7224:18;;7217:34;11482::0::1;::::0;7140:18:4;11482:34:0::1;6999:258:4::0;4948:626:0;4999:12;5023:31;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;5023:31:0;5072:7;;:38;;-1:-1:-1;;;5072:38:0;;-1:-1:-1;;;;;5072:7:0;;;;:24;;:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5175:9;;5158:50;;;;;;12989:19:4;;;;-1:-1:-1;;13046:2:4;13042:15;;;13038:53;13024:12;;;13017:75;5192:15:0;13108:12:4;;;13101:28;5065:45:0;;-1:-1:-1;5123:12:0;;13145::4;;5158:50:0;;;-1:-1:-1;;5158:50:0;;;;;;;;;5148:61;;5158:50;5148:61;;;;;-1:-1:-1;5228:10:0;5235:3;5148:61;5228:10;:::i;:::-;:16;;5241:3;5228:16;:::i;:::-;-1:-1:-1;;;;;5296:15:0;;;;;;:9;:15;;;;;;5221:23;;-1:-1:-1;5288:23:0;;5284:261;;5334:7;;:38;;-1:-1:-1;;;5334:38:0;;-1:-1:-1;;;;;5334:7:0;;;;:24;;:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5431:9;;5414:50;;;;;;12989:19:4;;;;-1:-1:-1;;13046:2:4;13042:15;;;13038:53;13024:12;;;13017:75;5448:15:0;13108:12:4;;;13101:28;5431:9:0;;-1:-1:-1;13145:12:4;;5414:50:0;;;-1:-1:-1;;5414:50:0;;;;;;;;;5404:61;;5414:50;5404:61;;;;;-1:-1:-1;5488:10:0;5495:3;5404:61;5488:10;:::i;:::-;:16;;5501:3;5488:16;:::i;:::-;5481:23;;5284:261;5555:11;;4948:626;;;:::o;12106:84::-;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;12168:7:::1;:14:::0;12106:84::o;5597:925::-;4500:11;;;;4492:55;;;;-1:-1:-1;;;4492:55:0;;8681:2:4;4492:55:0;;;8663:21:4;8720:2;8700:18;;;8693:30;8759:33;8739:18;;;8732:61;8810:18;;4492:55:0;8479:355:4;4492:55:0;4639:5;4625:19;;-1:-1:-1;;4625:19:0;;;5680:9:::1;::::0;5661:15:::1;:28;;5653:56;;;::::0;-1:-1:-1;;;5653:56:0;;13993:2:4;5653:56:0::1;::::0;::::1;13975:21:4::0;14032:2;14012:18;;;14005:30;-1:-1:-1;;;14051:18:4;;;14044:45;14106:18;;5653:56:0::1;13791:339:4::0;5653:56:0::1;5756:8;;5746:9;;:18;;;;:::i;:::-;5728:15;:36;5720:59;;;::::0;-1:-1:-1;;;5720:59:0;;14337:2:4;5720:59:0::1;::::0;::::1;14319:21:4::0;14376:2;14356:18;;;14349:30;-1:-1:-1;;;14395:18:4;;;14388:40;14445:18;;5720:59:0::1;14135:334:4::0;5720:59:0::1;5798:11;::::0;::::1;;5790:39;;;::::0;-1:-1:-1;;;5790:39:0;;14676:2:4;5790:39:0::1;::::0;::::1;14658:21:4::0;14715:2;14695:18;;;14688:30;-1:-1:-1;;;14734:18:4;;;14727:45;14789:18;;5790:39:0::1;14474:339:4::0;5790:39:0::1;5884:10;5842:29;5874:21:::0;;;:9:::1;:21;::::0;;;;5955:9:::1;::::0;5916:23;;:35:::1;::::0;5942:9:::1;::::0;5916:35:::1;:::i;:::-;:48;;5908:80;;;::::0;-1:-1:-1;;;5908:80:0;;15020:2:4;5908:80:0::1;::::0;::::1;15002:21:4::0;15059:2;15039:18;;;15032:30;-1:-1:-1;;;15078:18:4;;;15071:49;15137:18;;5908:80:0::1;14818:343:4::0;5908:80:0::1;6016:9;6001:11;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;6038:16:0::1;::::0;-1:-1:-1;6057:19:0::1;6065:10;6057:7;:19::i;:::-;6119:10;6109:21;::::0;;;:9:::1;:21;::::0;;;;:32;;;6158:23;;6038:38;;-1:-1:-1;6158:28:0;6154:76:::1;;6217:1;6202:11;;:16;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;6154:76:0::1;6332:23:::0;;:35:::1;::::0;6358:9:::1;::::0;6332:35:::1;:::i;:::-;6306:23:::0;;6286:19:::1;::::0;::::1;::::0;:43:::1;::::0;6306:23;6286:43:::1;:::i;:::-;6265:18;6274:9;6265:8:::0;:18:::1;:::i;:::-;:64;;;;:::i;:::-;6264:104;;;;:::i;:::-;6242:19;::::0;::::1;:126:::0;6379:36;;6406:9:::1;::::0;6242:8;;6379:23:::1;::::0;:36:::1;::::0;6406:9;;6379:36:::1;:::i;:::-;::::0;;;-1:-1:-1;6447:20:0::1;::::0;-1:-1:-1;6459:8:0;6447:9:::1;:20;:::i;:::-;6428:15;;:39;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;6485:29:0::1;::::0;;6492:10:::1;5085:51:4::0;;6504:9:0::1;5167:2:4::0;5152:18;;5145:34;6485:29:0::1;::::0;5058:18:4;6485:29:0::1;;;;;;;-1:-1:-1::0;;4805:11:0;:18;;-1:-1:-1;;4805:18:0;4819:4;4805:18;;;5597:925::o;12303:88::-;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;12365:9:::1;:18:::0;12303:88::o;12198:97::-;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;12274:13:::1;:6:::0;12283:4:::1;12274:13;:::i;:::-;12263:8;:24:::0;-1:-1:-1;12198:97:0:o;8151:362::-;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;8232:11:::1;::::0;-1:-1:-1;;;;;8232:11:0::1;8224:58;;;;-1:-1:-1::0;;;8224:58:0::1;;;;;;;:::i;:::-;8331:8;;8319:9;;:20;;;;:::i;:::-;:32;::::0;8342:9:::1;8319:32;:::i;:::-;8301:15;:50;8293:82;;;::::0;-1:-1:-1;;;8293:82:0;;4417:2:4;8293:82:0::1;::::0;::::1;4399:21:4::0;4456:2;4436:18;;;4429:30;-1:-1:-1;;;4475:18:4;;;4468:49;4534:18;;8293:82:0::1;4215:343:4::0;8293:82:0::1;8415:11;::::0;8408:48:::1;::::0;-1:-1:-1;;;8408:48:0;;8437:10:::1;8408:48;::::0;::::1;5085:51:4::0;5152:18;;;5145:34;;;-1:-1:-1;;;;;8415:11:0;;::::1;::::0;8408:28:::1;::::0;5058:18:4;;8408:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8386:119;;;::::0;-1:-1:-1;;;8386:119:0;;10077:2:4;8386:119:0::1;::::0;::::1;10059:21:4::0;10116:2;10096:18;;;10089:30;-1:-1:-1;;;10135:18:4;;;10128:51;10196:18;;8386:119:0::1;9875:345:4::0;10020:816:0;3211:19;3219:10;3211:7;:19::i;:::-;3203:78;;;;-1:-1:-1;;;3203:78:0;;;;;;;:::i;:::-;10087:5:::1;::::0;;;::::1;;;10079:37;;;::::0;-1:-1:-1;;;10079:37:0;;6423:2:4;10079:37:0::1;::::0;::::1;6405:21:4::0;6462:2;6442:18;;;6435:30;-1:-1:-1;;;6481:18:4;;;6474:49;6540:18;;10079:37:0::1;6221:343:4::0;10079:37:0::1;10135:11;::::0;-1:-1:-1;;;;;10135:11:0::1;10127:58;;;;-1:-1:-1::0;;;10127:58:0::1;;;;;;;:::i;:::-;10214:3;10204:8;:6;:8::i;:::-;:13;;10196:61;;;::::0;-1:-1:-1;;;10196:61:0;;15368:2:4;10196:61:0::1;::::0;::::1;15350:21:4::0;15407:2;15387:18;;;15380:30;15446:34;15426:18;;;15419:62;-1:-1:-1;;;15497:18:4;;;15490:33;15540:19;;10196:61:0::1;15166:399:4::0;10196:61:0::1;10306:8;;10294:9;;:20;;;;:::i;:::-;10276:15;:38;10268:69;;;::::0;-1:-1:-1;;;10268:69:0;;6076:2:4;10268:69:0::1;::::0;::::1;6058:21:4::0;6115:2;6095:18;;;6088:30;-1:-1:-1;;;6134:18:4;;;6127:48;6192:18;;10268:69:0::1;5874:342:4::0;10268:69:0::1;10348:14;10395:3;10377:15;;10363:11;;:29;;;;:::i;:::-;:35;;;;:::i;:::-;10441:8;::::0;10471:27:::1;::::0;10348:50;;-1:-1:-1;;;;;;10441:8:0::1;::::0;10411:19:::1;::::0;10441:8;;10348:50;;10411:19;10471:27;10411:19;10471:27;10348:50;10441:8;10471:27:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10455:43;;;10511:4;10503:47;;;::::0;-1:-1:-1;;;10503:47:0;;15772:2:4;10503:47:0::1;::::0;::::1;15754:21:4::0;15811:2;15791:18;;;15784:30;15850:32;15830:18;;;15823:60;15900:18;;10503:47:0::1;15570:354:4::0;10503:47:0::1;10620:11;::::0;10577:10:::1;::::0;-1:-1:-1;10577:10:0;;10620:18:::1;::::0;10632:6;;10620:18:::1;:::i;:::-;10604:39;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10593:50;;;;;10656:4;10648:41;;;::::0;-1:-1:-1;;;10648:41:0;;16131:2:4;10648:41:0::1;::::0;::::1;16113:21:4::0;16170:2;16150:18;;;16143:30;16209:26;16189:18;;;16182:54;16253:18;;10648:41:0::1;15929:348:4::0;10648:41:0::1;10731:11;::::0;10765:7:::1;::::0;10724:49:::1;::::0;-1:-1:-1;;;10724:49:0;;10753:10:::1;10724:49;::::0;::::1;5085:51:4::0;5152:18;;;5145:34;;;;-1:-1:-1;;;;;10731:11:0;;::::1;::::0;10724:28:::1;::::0;5058:18:4;;10724:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10702:126;;;::::0;-1:-1:-1;;;10702:126:0;;16484:2:4;10702:126:0::1;::::0;::::1;16466:21:4::0;16523:2;16503:18;;;16496:30;16562:29;16542:18;;;16535:57;16609:18;;10702:126:0::1;16282:351:4::0;10702:126:0::1;10068:768;;;10020:816::o:0;930:203:3:-;1002:4;-1:-1:-1;;;;;1027:21:3;;1019:68;;;;-1:-1:-1;;;1019:68:3;;16840:2:4;1019:68:3;;;16822:21:4;16879:2;16859:18;;;16852:30;16918:34;16898:18;;;16891:62;-1:-1:-1;;;16969:18:4;;;16962:32;17011:19;;1019:68:3;16638:398:4;1019:68:3;-1:-1:-1;;;;;;1105:20:3;:11;:20;;;;;;;;;;;;;;;930:203::o;3612:127:0:-;3668:28;:15;3688:7;3668:19;:28::i;:::-;3712:19;;-1:-1:-1;;;;;374:32:4;;356:51;;3712:19:0;;344:2:4;329:18;3712:19:0;;;;;;;;3612:127;:::o;3747:135::-;3806:31;:15;3829:7;3806:22;:31::i;:::-;3853:21;;-1:-1:-1;;;;;374:32:4;;356:51;;3853:21:0;;344:2:4;329:18;3853:21:0;196:217:4;394:178:3;472:18;476:4;482:7;472:3;:18::i;:::-;471:19;463:63;;;;-1:-1:-1;;;463:63:3;;17243:2:4;463:63:3;;;17225:21:4;17282:2;17262:18;;;17255:30;17321:33;17301:18;;;17294:61;17372:18;;463:63:3;17041:355:4;463:63:3;-1:-1:-1;;;;;537:20:3;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;537:27:3;560:4;537:27;;;394:178::o;652:183::-;732:18;736:4;742:7;732:3;:18::i;:::-;724:64;;;;-1:-1:-1;;;724:64:3;;17603:2:4;724:64:3;;;17585:21:4;17642:2;17622:18;;;17615:30;17681:34;17661:18;;;17654:62;-1:-1:-1;;;17732:18:4;;;17725:31;17773:19;;724:64:3;17401:397:4;724:64:3;-1:-1:-1;;;;;799:20:3;822:5;799:20;;;;;;;;;;;:28;;-1:-1:-1;;799:28:3;;;652:183::o;418:180:4:-;477:6;530:2;518:9;509:7;505:23;501:32;498:52;;;546:1;543;536:12;498:52;-1:-1:-1;569:23:4;;418:180;-1:-1:-1;418:180:4:o;927:131::-;-1:-1:-1;;;;;1002:31:4;;992:42;;982:70;;1048:1;1045;1038:12;1063:247;1122:6;1175:2;1163:9;1154:7;1150:23;1146:32;1143:52;;;1191:1;1188;1181:12;1143:52;1230:9;1217:23;1249:31;1274:5;1249:31;:::i;:::-;1299:5;1063:247;-1:-1:-1;;;1063:247:4:o;3189:410::-;3391:2;3373:21;;;3430:2;3410:18;;;3403:30;3469:34;3464:2;3449:18;;3442:62;-1:-1:-1;;;3535:2:4;3520:18;;3513:44;3589:3;3574:19;;3189:410::o;3604:344::-;3806:2;3788:21;;;3845:2;3825:18;;;3818:30;-1:-1:-1;;;3879:2:4;3864:18;;3857:50;3939:2;3924:18;;3604:344::o;3953:127::-;4014:10;4009:3;4005:20;4002:1;3995:31;4045:4;4042:1;4035:15;4069:4;4066:1;4059:15;4085:125;4150:9;;;4171:10;;;4168:36;;;4184:18;;:::i;5190:277::-;5257:6;5310:2;5298:9;5289:7;5285:23;5281:32;5278:52;;;5326:1;5323;5316:12;5278:52;5358:9;5352:16;5411:5;5404:13;5397:21;5390:5;5387:32;5377:60;;5433:1;5430;5423:12;6569:168;6642:9;;;6673;;6690:15;;;6684:22;;6670:37;6660:71;;6711:18;;:::i;6742:127::-;6803:10;6798:3;6794:20;6791:1;6784:31;6834:4;6831:1;6824:15;6858:4;6855:1;6848:15;6874:120;6914:1;6940;6930:35;;6945:18;;:::i;:::-;-1:-1:-1;6979:9:4;;6874:120::o;8346:128::-;8413:9;;;8434:11;;;8431:37;;;8448:18;;:::i;11630:501::-;11933:2;11922:9;11915:21;11972:1;11967:2;11956:9;11952:18;11945:29;-1:-1:-1;;;12005:2:4;11994:9;11990:18;11983:33;12054:3;12047:4;12036:9;12032:20;12025:33;11896:4;12075:50;12120:3;12109:9;12105:19;11551:1;11539:14;;-1:-1:-1;;;11578:4:4;11569:14;;11562:29;11616:2;11607:12;;11474:151;12136:663;12237:6;12290:2;12278:9;12269:7;12265:23;12261:32;12258:52;;;12306:1;12303;12296:12;12258:52;12339:2;12333:9;12381:2;12373:6;12369:15;12450:6;12438:10;12435:22;12414:18;12402:10;12399:34;12396:62;12393:185;;;12500:10;12495:3;12491:20;12488:1;12481:31;12535:4;12532:1;12525:15;12563:4;12560:1;12553:15;12393:185;12598:10;12594:2;12587:22;;12639:9;12633:16;12625:6;12618:32;12704:2;12693:9;12689:18;12683:25;12678:2;12670:6;12666:15;12659:50;12763:2;12752:9;12748:18;12742:25;12737:2;12729:6;12725:15;12718:50;12787:6;12777:16;;;12136:663;;;;:::o;13168:112::-;13200:1;13226;13216:35;;13231:18;;:::i;:::-;-1:-1:-1;13265:9:4;;13168:112::o;13285:501::-;13588:2;13577:9;13570:21;13627:1;13622:2;13611:9;13607:18;13600:29;-1:-1:-1;;;13660:2:4;13649:9;13645:18;13638:33;13709:3;13702:4;13691:9;13687:20;13680:33;13551:4;13730:50;13775:3;13764:9;13760:19;11551:1;11539:14;;-1:-1:-1;;;11578:4:4;11569:14;;11562:29;11616:2;11607:12;;11474:151

Swarm Source

ipfs://69431d6c2629e1ccf808c1864b535ae1091a31eeffecd6833c14a1777b47ecb0

Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
0x477458c48A244B37C641d2F4F22306b2677CD019
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.