ETH Price: $3,388.57 (-0.96%)

Contract

0x3e6aFB2Ba201f4EB028A54708916F9769255f1C6
 
Transaction Hash
Method
Block
From
To
Pinky Finance204536062024-08-04 7:10:35114 days ago1722755435IN
0x3e6aFB2B...69255f1C6
0.0047 ETH0.00012230.99308706
Pinky Finance204155042024-07-29 23:26:59120 days ago1722295619IN
0x3e6aFB2B...69255f1C6
0.00272 ETH0.000121580.98726081
Pinky Finance203957012024-07-27 5:09:47122 days ago1722056987IN
0x3e6aFB2B...69255f1C6
0.005 ETH0.000123090.99945681
Pinky Finance201935302024-06-28 23:40:47151 days ago1719618047IN
0x3e6aFB2B...69255f1C6
0.0011 ETH0.000175841.42777602
Pinky Finance201007942024-06-16 0:33:35164 days ago1718498015IN
0x3e6aFB2B...69255f1C6
0 ETH0.0001432.21419024
Pinky Finance197429762024-04-27 0:04:11214 days ago1714176251IN
0x3e6aFB2B...69255f1C6
0 ETH0.000752184.98518351
Pinky Finance197359582024-04-26 0:27:35215 days ago1714091255IN
0x3e6aFB2B...69255f1C6
0.002 ETH0.000609834.95201566
Pinky Finance197073372024-04-22 0:22:59219 days ago1713745379IN
0x3e6aFB2B...69255f1C6
0.023 ETH0.00058994.78972036
Pinky Finance192935362024-02-23 23:22:23277 days ago1708730543IN
0x3e6aFB2B...69255f1C6
0.07 ETH0.0013385522.87534039
Pinky Finance192929362024-02-23 21:20:59277 days ago1708723259IN
0x3e6aFB2B...69255f1C6
0.014 ETH0.0019238632.87808363
Pinky Finance192929182024-02-23 21:17:23277 days ago1708723043IN
0x3e6aFB2B...69255f1C6
0.014 ETH0.0047978838.96002357
Pinky Finance192902632024-02-23 12:22:47277 days ago1708690967IN
0x3e6aFB2B...69255f1C6
0.0036 ETH0.0017691930.23486716
Pinky Finance192893562024-02-23 9:19:59277 days ago1708679999IN
0x3e6aFB2B...69255f1C6
0.0054 ETH0.0026897445.95734657
Pinky Finance192874392024-02-23 2:52:47278 days ago1708656767IN
0x3e6aFB2B...69255f1C6
0.004 ETH0.0052820542.8915715
Pinky Finance192791502024-02-21 22:57:59279 days ago1708556279IN
0x3e6aFB2B...69255f1C6
0.002 ETH0.0021831937.30993373
Pinky Finance192791212024-02-21 22:52:11279 days ago1708555931IN
0x3e6aFB2B...69255f1C6
0.003 ETH0.0020790635.52318651
Pinky Finance192750592024-02-21 9:11:23279 days ago1708506683IN
0x3e6aFB2B...69255f1C6
0.01 ETH0.0041454433.66201912
Pinky Finance192742932024-02-21 6:36:11279 days ago1708497371IN
0x3e6aFB2B...69255f1C6
0.003 ETH0.0018573131.73426588
Pinky Finance192717912024-02-20 22:09:47280 days ago1708466987IN
0x3e6aFB2B...69255f1C6
0.96 ETH0.0048601383.0409243
Pinky Finance192683282024-02-20 10:29:23280 days ago1708424963IN
0x3e6aFB2B...69255f1C6
0.7522 ETH0.0039574832.1294781
Pinky Finance192679902024-02-20 9:20:11280 days ago1708420811IN
0x3e6aFB2B...69255f1C6
0.1225 ETH0.0023028539.33889095
Pinky Finance192653912024-02-20 0:38:23281 days ago1708389503IN
0x3e6aFB2B...69255f1C6
0 ETH0.0015252923.61615124
Pinky Finance192653912024-02-20 0:38:23281 days ago1708389503IN
0x3e6aFB2B...69255f1C6
0 ETH0.0036113323.60769124
Pinky Finance192651062024-02-19 23:40:35281 days ago1708386035IN
0x3e6aFB2B...69255f1C6
0.0165 ETH0.0034166327.74117322
Pinky Finance192645332024-02-19 21:45:11281 days ago1708379111IN
0x3e6aFB2B...69255f1C6
0.06 ETH0.0021074136.01486861
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
204536062024-08-04 7:10:35114 days ago1722755435
0x3e6aFB2B...69255f1C6
0.0047 ETH
204155042024-07-29 23:26:59120 days ago1722295619
0x3e6aFB2B...69255f1C6
0.00272 ETH
203957012024-07-27 5:09:47122 days ago1722056987
0x3e6aFB2B...69255f1C6
0.005 ETH
201935302024-06-28 23:40:47151 days ago1719618047
0x3e6aFB2B...69255f1C6
0.0011 ETH
197359582024-04-26 0:27:35215 days ago1714091255
0x3e6aFB2B...69255f1C6
0.002 ETH
197073372024-04-22 0:22:59219 days ago1713745379
0x3e6aFB2B...69255f1C6
0.023 ETH
192935362024-02-23 23:22:23277 days ago1708730543
0x3e6aFB2B...69255f1C6
0.07 ETH
192929362024-02-23 21:20:59277 days ago1708723259
0x3e6aFB2B...69255f1C6
0.014 ETH
192929182024-02-23 21:17:23277 days ago1708723043
0x3e6aFB2B...69255f1C6
0.014 ETH
192902632024-02-23 12:22:47277 days ago1708690967
0x3e6aFB2B...69255f1C6
0.0036 ETH
192893562024-02-23 9:19:59277 days ago1708679999
0x3e6aFB2B...69255f1C6
0.0054 ETH
192874392024-02-23 2:52:47278 days ago1708656767
0x3e6aFB2B...69255f1C6
0.004 ETH
192791502024-02-21 22:57:59279 days ago1708556279
0x3e6aFB2B...69255f1C6
0.002 ETH
192791212024-02-21 22:52:11279 days ago1708555931
0x3e6aFB2B...69255f1C6
0.003 ETH
192750592024-02-21 9:11:23279 days ago1708506683
0x3e6aFB2B...69255f1C6
0.01 ETH
192742932024-02-21 6:36:11279 days ago1708497371
0x3e6aFB2B...69255f1C6
0.003 ETH
192717912024-02-20 22:09:47280 days ago1708466987
0x3e6aFB2B...69255f1C6
0.96 ETH
192683282024-02-20 10:29:23280 days ago1708424963
0x3e6aFB2B...69255f1C6
0.7522 ETH
192679902024-02-20 9:20:11280 days ago1708420811
0x3e6aFB2B...69255f1C6
0.1225 ETH
192651062024-02-19 23:40:35281 days ago1708386035
0x3e6aFB2B...69255f1C6
0.0165 ETH
192645332024-02-19 21:45:11281 days ago1708379111
0x3e6aFB2B...69255f1C6
0.06 ETH
192641652024-02-19 20:30:47281 days ago1708374647
0x3e6aFB2B...69255f1C6
0.04 ETH
192639822024-02-19 19:53:59281 days ago1708372439
0x3e6aFB2B...69255f1C6
0.0025 ETH
192639812024-02-19 19:53:47281 days ago1708372427
0x3e6aFB2B...69255f1C6
0.003 ETH
192639812024-02-19 19:53:47281 days ago1708372427
0x3e6aFB2B...69255f1C6
0.002 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PresaleContract

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-31
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.22;

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

pragma solidity ^0.8.22;

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

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

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

pragma solidity ^0.8.22;

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

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

pragma solidity ^0.8.22;

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.22;

contract OwnerWithdrawable is Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    receive() external payable {}

    fallback() external payable {}

    function withdraw(address token, uint256 amt) public onlyOwner {
        IERC20(token).safeTransfer(msg.sender, amt);
    }

    function withdrawAll(address token) public onlyOwner {
        uint256 amt = IERC20(token).balanceOf(address(this));
        withdraw(token, amt);
    }

    function withdrawCurrency(uint256 amt) public onlyOwner {
        payable(msg.sender).transfer(amt);
    }

    // function deposit(address token, uint256 amt) public onlyOwner {
    //     uint256 allowance = IERC20(token).allowance(msg.sender, address(this));
    //     require(allowance >= amt, "Check the token allowance");
    //     IERC20(token).transferFrom(owner(), address(this), amt);
    // }
}

pragma solidity ^0.8.22;

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.22;

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    newAllowance
                )
            );
        }
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

pragma solidity ^0.8.22;

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

pragma solidity ^0.8.22;

contract PresaleContract is OwnerWithdrawable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;
    using SafeERC20 for IERC20Metadata;

    address public LPAddress;

    uint256 public rate;

    address public saleToken;

    uint public saleTokenDec;

    uint256 public totalTokensforSale;

    mapping(address => bool) public payableTokens;

    mapping(address => uint256) public tokenPrices;

    bool public saleStatus;

    address[] public buyers;

    mapping(address => BuyerTokenDetails) public buyersAmount;

    uint256 public totalTokensSold;

    uint256[1] public stagesEndTime;

    bool public unlockingStatus;

    uint256 public unlockingFee;

    uint256[4] public unlockingTimes;

    mapping(address => bool[4]) public isUnlocked;

    mapping(address => uint256) public unlockedAmount;

    struct BuyerTokenDetails {
        uint amount;
        bool exists;
        bool isClaimed;
    }

    constructor(uint256 _firstStageEndTime, address _LPAddress) {
        saleStatus = false;
        LPAddress = _LPAddress;

        stagesEndTime[0] = _firstStageEndTime;
    }

    modifier saleEnabled() {
        require(saleStatus == true, "Presale: is not enabled");
        _;
    }

    modifier saleStoped() {
        require(saleStatus == false, "Presale: is not stopped");
        _;
    }

    modifier unlockEnabled() {
        require(
            unlockingStatus == true,
            "Presale: unlocking token is not enabled"
        );
        _;
    }

    modifier unlockStoped() {
        require(
            unlockingStatus == false,
            "Presale: unlocking token is not stopped"
        );
        _;
    }

    function setLPAddress(address _LPAddress) external onlyOwner {
        LPAddress = _LPAddress;
    }

    function setSaleToken(
        address _saleToken,
        uint256 _totalTokensforSale,
        uint256 _rate,
        bool _saleStatus
    ) external onlyOwner {
        require(_rate != 0);
        rate = _rate;
        saleToken = _saleToken;
        saleStatus = _saleStatus;
        saleTokenDec = IERC20Metadata(saleToken).decimals();
        totalTokensforSale = _totalTokensforSale;
        IERC20(saleToken).safeTransferFrom(
            msg.sender,
            address(this),
            totalTokensforSale
        );
    }

    function stopSale() external onlyOwner saleEnabled {
        saleStatus = false;
    }

    function resumeSale() external onlyOwner saleStoped {
        saleStatus = true;
        unlockingStatus = false;
    }

    function startUnlocking(
        uint256 _unlockingFee,
        uint[4] memory _unlockingTimes
    ) external onlyOwner {
        saleStatus = false;
        unlockingStatus = true;
        unlockingFee = _unlockingFee;
        unlockingTimes = _unlockingTimes;
    }

    function stopUnlocking() external onlyOwner unlockEnabled {
        unlockingStatus = false;
    }

    function addPayableTokens(
        address[] memory _tokens,
        uint256[] memory _prices
    ) external onlyOwner {
        require(
            _tokens.length == _prices.length,
            "Presale: tokens & prices arrays length mismatch"
        );

        for (uint256 i = 0; i < _tokens.length; i++) {
            require(_prices[i] != 0);
            payableTokens[_tokens[i]] = true;
            tokenPrices[_tokens[i]] = _prices[i];
        }
    }

    function payableTokenStatus(
        address _token,
        bool _status
    ) external onlyOwner {
        require(payableTokens[_token] != _status);

        payableTokens[_token] = _status;
    }

    function updateTokenRate(
        address[] memory _tokens,
        uint256[] memory _prices,
        uint256 _rate
    ) external onlyOwner {
        require(
            _tokens.length == _prices.length,
            "Presale: tokens & prices arrays length mismatch"
        );

        if (_rate != 0) {
            rate = _rate;
        }

        for (uint256 i = 0; i < _tokens.length; i += 1) {
            require(payableTokens[_tokens[i]] == true);
            require(_prices[i] != 0);
            tokenPrices[_tokens[i]] = _prices[i];
        }
    }

    function getTokenAmount(
        address token,
        uint256 amount
    ) public view returns (uint256) {
        uint256 amtOut;
        if (token != address(0)) {
            require(payableTokens[token] == true);
            uint256 price = tokenPrices[token];
            amtOut = amount.mul(10 ** saleTokenDec).div(price);
        } else {
            amtOut = amount.mul(10 ** saleTokenDec).div(rate);
        }
        return amtOut;
    }

    function transferETH() private {
        uint256 ownerAmount = msg.value;

        if (block.timestamp > stagesEndTime[0]) {
            uint256 lpAmount = msg.value.mul(10).div(100);
            ownerAmount = msg.value.sub(lpAmount);
            payable(LPAddress).transfer(lpAmount);
        }

        payable(owner()).transfer(ownerAmount);
    }

    function transferToken(address _token, uint256 _amount) private {
        uint256 ownerAmount = _amount;

        if (block.timestamp > stagesEndTime[0]) {
            uint256 lpAmount = _amount.mul(10).div(100);
            ownerAmount = _amount.sub(lpAmount);
            IERC20(_token).safeTransferFrom(msg.sender, LPAddress, lpAmount);
        }

        IERC20(_token).safeTransferFrom(msg.sender, owner(), ownerAmount);
    }

    function pinkyFinance(
        address _token,
        uint256 _amount
    ) external payable saleEnabled {
        uint256 saleTokenAmt;
        if (_token != address(0)) {
            require(_amount > 0);
            require(
                payableTokens[_token] == true,
                "Presale: Token not allowed"
            );

            saleTokenAmt = getTokenAmount(_token, _amount);
            require(
                (totalTokensSold + saleTokenAmt) < totalTokensforSale,
                "Presale: Not enough tokens to be sale"
            );
            transferToken(_token, _amount);
        } else {
            saleTokenAmt = getTokenAmount(address(0), msg.value);
            require((totalTokensSold + saleTokenAmt) < totalTokensforSale);
            transferETH();
        }
        totalTokensSold += saleTokenAmt;
        if (!buyersAmount[msg.sender].exists) {
            buyers.push(msg.sender);
            buyersAmount[msg.sender].exists = true;
        }
        buyersAmount[msg.sender].amount += saleTokenAmt;
    }

    function getUnlockingTimes() external view returns (uint[4] memory) {
        return unlockingTimes;
    }

    function transferFee() private {
        uint256 lpAmount = msg.value.mul(50).div(100);
        payable(LPAddress).transfer(lpAmount);
        uint256 ownerAmount = msg.value.sub(lpAmount);
        payable(owner()).transfer(ownerAmount);
    }

    function getUnlockingFeeAmount(
        address _address
    ) external view returns (uint256) {
        uint256 _fee = 0;

        for (uint i; i < 4; i++) {
            if (
                block.timestamp >= unlockingTimes[i] && !isUnlocked[_address][i]
            ) {
                _fee += unlockingFee;
            }
        }

        return _fee;
    }

    function getAmountToUnlock(
        address _address
    ) external view returns (uint256) {
        uint256 _amount = 0;

        for (uint i; i < 4; i++) {
            if (
                block.timestamp >= unlockingTimes[i] && !isUnlocked[_address][i]
            ) {
                _amount += buyersAmount[_address].amount / 4;
            }
        }

        return _amount;
    }

    function withdrawCoin() external payable unlockEnabled {
        require(
            buyersAmount[msg.sender].amount > 0,
            "Presale: You don't have tokens to claim"
        );

        uint256 _amount = 0;
        uint256 _fee = 0;
        bool[4] memory _isUnlocked;

        for (uint i; i < 4; i++) {
            if (block.timestamp >= unlockingTimes[i]) {
                _isUnlocked[i] = true;

                if (!isUnlocked[msg.sender][i]) {
                    _amount += buyersAmount[msg.sender].amount / 4;
                    _fee += unlockingFee;
                }
            }
        }

        require(_amount > 0, "Presale: You don't have tokens to unlock");
        require(msg.value >= _fee, "Presale: Not enough fee");

        IERC20(saleToken).safeTransfer(msg.sender, _amount);
        transferFee();

        unlockedAmount[msg.sender] += _amount;
        isUnlocked[msg.sender] = _isUnlocked;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_firstStageEndTime","type":"uint256"},{"internalType":"address","name":"_LPAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"LPAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"}],"name":"addPayableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyersAmount","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"bool","name":"isClaimed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getAmountToUnlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getUnlockingFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockingTimes","outputs":[{"internalType":"uint256[4]","name":"","type":"uint256[4]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"payableTokenStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"payableTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"pinkyFinance","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resumeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTokenDec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_LPAddress","type":"address"}],"name":"setLPAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_saleToken","type":"address"},{"internalType":"uint256","name":"_totalTokensforSale","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"bool","name":"_saleStatus","type":"bool"}],"name":"setSaleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stagesEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_unlockingFee","type":"uint256"},{"internalType":"uint256[4]","name":"_unlockingTimes","type":"uint256[4]"}],"name":"startUnlocking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopUnlocking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensforSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"unlockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"unlockingTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateTokenRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawCoin","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801562000010575f80fd5b50604051620042d8380380620042d8833981810160405281019062000036919062000239565b620000566200004a620000d460201b60201c565b620000db60201b60201c565b5f60085f6101000a81548160ff0219169083151502179055508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c5f60018110620000c757620000c66200027e565b5b01819055505050620002ab565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f819050919050565b620001b481620001a0565b8114620001bf575f80fd5b50565b5f81519050620001d281620001a9565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200020382620001d8565b9050919050565b6200021581620001f7565b811462000220575f80fd5b50565b5f8151905062000233816200020a565b92915050565b5f80604083850312156200025257620002516200019c565b5b5f6200026185828601620001c2565b9250506020620002748582860162000223565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61401f80620002b95f395ff3fe608060405260043610610228575f3560e01c8063715018a611610122578063ceacd9d9116100aa578063f2aa82181161006e578063f2aa8218146107c5578063f2fde38b14610801578063f3fef3a314610829578063f9020e3314610851578063fa09e6301461087b5761022f565b8063ceacd9d914610703578063d111d92f1461072d578063d2d272db14610769578063e36b0b3714610785578063e985e3671461079b5761022f565b80638da5cb5b116100f15780638da5cb5b146106335780638f6dd6c41461065d578063a8988ce214610687578063ace1741c146106c3578063b5b0763c146106ed5761022f565b8063715018a61461057d5780637a351a1d1461059357806380655eef146105bb5780638b382020146105f75761022f565b806333e364cb116101b057806354a9f1021161017457806354a9f102146104b95780636220aea8146104f757806363b20117146105015780636ade6e331461052b5780636bcedf9c146105535761022f565b806333e364cb146104015780633874e325146104175780633c00a36c1461043f5780633c76a1c8146104675780635413c1c8146104915761022f565b806329d429a8116101f757806329d429a81461030f5780632c4e722e146103375780632f0eab3a1461036157806330dbb4e41461039d5780633115329e146103d95761022f565b8063115ece4c14610231578063120f2eda1461026d5780631b926a5b14610297578063204120bc146102d35761022f565b3661022f57005b005b34801561023c575f80fd5b5061025760048036038101906102529190612d33565b6108a3565b6040516102649190612d80565b60405180910390f35b348015610278575f80fd5b506102816109ef565b60405161028e9190612da8565b60405180910390f35b3480156102a2575f80fd5b506102bd60048036038101906102b89190612dc1565b610a14565b6040516102ca9190612d80565b60405180910390f35b3480156102de575f80fd5b506102f960048036038101906102f49190612dc1565b610b21565b6040516103069190612d80565b60405180910390f35b34801561031a575f80fd5b5061033560048036038101906103309190612e21565b610b36565b005b348015610342575f80fd5b5061034b610c62565b6040516103589190612d80565b60405180910390f35b34801561036c575f80fd5b5061038760048036038101906103829190612e5f565b610c68565b6040516103949190612d80565b60405180910390f35b3480156103a8575f80fd5b506103c360048036038101906103be9190612d33565b610c81565b6040516103d09190612e99565b60405180910390f35b3480156103e4575f80fd5b506103ff60048036038101906103fa91906130c2565b610cb7565b005b34801561040c575f80fd5b50610415610eb9565b005b348015610422575f80fd5b5061043d6004803603810190610438919061314a565b610fbe565b005b34801561044a575f80fd5b5061046560048036038101906104609190612e5f565b611199565b005b348015610472575f80fd5b5061047b61125c565b6040516104889190613253565b60405180910390f35b34801561049c575f80fd5b506104b760048036038101906104b2919061326c565b6112a7565b005b3480156104c4575f80fd5b506104df60048036038101906104da9190612dc1565b61148e565b6040516104ee939291906132e2565b60405180910390f35b6104ff6114cd565b005b34801561050c575f80fd5b50610515611858565b6040516105229190612d80565b60405180910390f35b348015610536575f80fd5b50610551600480360381019061054c91906133c5565b61185e565b005b34801561055e575f80fd5b5061056761192a565b6040516105749190612d80565b60405180910390f35b348015610588575f80fd5b50610591611930565b005b34801561059e575f80fd5b506105b960048036038101906105b49190612dc1565b6119b7565b005b3480156105c6575f80fd5b506105e160048036038101906105dc9190612dc1565b611a76565b6040516105ee9190612e99565b60405180910390f35b348015610602575f80fd5b5061061d60048036038101906106189190612dc1565b611a93565b60405161062a9190612d80565b60405180910390f35b34801561063e575f80fd5b50610647611b57565b6040516106549190612da8565b60405180910390f35b348015610668575f80fd5b50610671611b7e565b60405161067e9190612e99565b60405180910390f35b348015610692575f80fd5b506106ad60048036038101906106a89190612dc1565b611b90565b6040516106ba9190612d80565b60405180910390f35b3480156106ce575f80fd5b506106d7611ba5565b6040516106e49190612d80565b60405180910390f35b3480156106f8575f80fd5b50610701611bab565b005b34801561070e575f80fd5b50610717611c97565b6040516107249190612d80565b60405180910390f35b348015610738575f80fd5b50610753600480360381019061074e9190612e5f565b611c9d565b6040516107609190612d80565b60405180910390f35b610783600480360381019061077e9190612d33565b611cb6565b005b348015610790575f80fd5b50610799611ff1565b005b3480156107a6575f80fd5b506107af6120dd565b6040516107bc9190612da8565b60405180910390f35b3480156107d0575f80fd5b506107eb60048036038101906107e69190612e5f565b612102565b6040516107f89190612da8565b60405180910390f35b34801561080c575f80fd5b5061082760048036038101906108229190612dc1565b61213d565b005b348015610834575f80fd5b5061084f600480360381019061084a9190612d33565b612233565b005b34801561085c575f80fd5b506108656122de565b6040516108729190612e99565b60405180910390f35b348015610886575f80fd5b506108a1600480360381019061089c9190612dc1565b6122f0565b005b5f805f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146109ad576001151560065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514610931575f80fd5b5f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506109a581610997600454600a610988919061355f565b876123f590919063ffffffff16565b61240a90919063ffffffff16565b9150506109e5565b6109e26002546109d4600454600a6109c5919061355f565b866123f590919063ffffffff16565b61240a90919063ffffffff16565b90505b8091505092915050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f90505f5b6004811015610b1757600f8160048110610a3857610a376135a9565b5b01544210158015610aab575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208160048110610a9357610a926135a9565b5b602091828204019190069054906101000a900460ff16155b15610b0a576004600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154610afc9190613603565b82610b079190613633565b91505b8080600101915050610a1b565b5080915050919050565b6007602052805f5260405f205f915090505481565b610b3e61241f565b73ffffffffffffffffffffffffffffffffffffffff16610b5c611b57565b73ffffffffffffffffffffffffffffffffffffffff1614610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba9906136c0565b60405180910390fd5b80151560065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610c0a575f80fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60025481565b600f8160048110610c77575f80fd5b015f915090505481565b6013602052815f5260405f208160048110610c9a575f80fd5b60209182820401919006915091509054906101000a900460ff1681565b610cbf61241f565b73ffffffffffffffffffffffffffffffffffffffff16610cdd611b57565b73ffffffffffffffffffffffffffffffffffffffff1614610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a906136c0565b60405180910390fd5b8151835114610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e9061374e565b60405180910390fd5b5f8114610d8657806002819055505b5f5b8351811015610eb3576001151560065f868481518110610dab57610daa6135a9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514610e04575f80fd5b5f838281518110610e1857610e176135a9565b5b602002602001015103610e29575f80fd5b828181518110610e3c57610e3b6135a9565b5b602002602001015160075f868481518110610e5a57610e596135a9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600181610eac9190613633565b9050610d88565b50505050565b610ec161241f565b73ffffffffffffffffffffffffffffffffffffffff16610edf611b57565b73ffffffffffffffffffffffffffffffffffffffff1614610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c906136c0565b60405180910390fd5b5f151560085f9054906101000a900460ff16151514610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f80906137b6565b60405180910390fd5b600160085f6101000a81548160ff0219169083151502179055505f600d5f6101000a81548160ff021916908315150217905550565b610fc661241f565b73ffffffffffffffffffffffffffffffffffffffff16610fe4611b57565b73ffffffffffffffffffffffffffffffffffffffff161461103a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611031906136c0565b60405180910390fd5b5f8203611045575f80fd5b816002819055508360035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060085f6101000a81548160ff02191690831515021790555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611133919061380a565b60ff1660048190555082600581905550611193333060055460035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612426909392919063ffffffff16565b50505050565b6111a161241f565b73ffffffffffffffffffffffffffffffffffffffff166111bf611b57565b73ffffffffffffffffffffffffffffffffffffffff1614611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c906136c0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611258573d5f803e3d5ffd5b5050565b611264612b60565b600f60048060200260405190810160405280929190826004801561129d576020028201915b815481526020019060010190808311611289575b5050505050905090565b6112af61241f565b73ffffffffffffffffffffffffffffffffffffffff166112cd611b57565b73ffffffffffffffffffffffffffffffffffffffff1614611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a906136c0565b60405180910390fd5b8051825114611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e9061374e565b60405180910390fd5b5f5b8251811015611489575f828281518110611386576113856135a9565b5b602002602001015103611397575f80fd5b600160065f8584815181106113af576113ae6135a9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550818181518110611419576114186135a9565b5b602002602001015160075f858481518110611437576114366135a9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508080600101915050611369565b505050565b600a602052805f5260405f205f91509050805f015490806001015f9054906101000a900460ff16908060010160019054906101000a900460ff16905083565b60011515600d5f9054906101000a900460ff16151514611522576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611519906138a5565b60405180910390fd5b5f600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154116115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613933565b60405180910390fd5b5f806115ad612b82565b5f5b60048110156116d957600f81600481106115cc576115cb6135a9565b5b015442106116cc5760018282600481106115e9576115e86135a9565b5b60200201901515908115158152505060135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208160048110611647576116466135a9565b5b602091828204019190069054906101000a900460ff166116cb576004600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546116ad9190613603565b846116b89190613633565b9350600e54836116c89190613633565b92505b5b80806001019150506115af565b505f831161171c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611713906139c1565b60405180910390fd5b8134101561175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175690613a29565b60405180910390fd5b6117ab338460035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124af9092919063ffffffff16565b6117b3612535565b8260145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546117ff9190613633565b925050819055508060135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20906004611852929190612ba4565b50505050565b600b5481565b61186661241f565b73ffffffffffffffffffffffffffffffffffffffff16611884611b57565b73ffffffffffffffffffffffffffffffffffffffff16146118da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d1906136c0565b60405180910390fd5b5f60085f6101000a81548160ff0219169083151502179055506001600d5f6101000a81548160ff02191690831515021790555081600e8190555080600f906004611925929190612c3a565b505050565b60055481565b61193861241f565b73ffffffffffffffffffffffffffffffffffffffff16611956611b57565b73ffffffffffffffffffffffffffffffffffffffff16146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a3906136c0565b60405180910390fd5b6119b55f612629565b565b6119bf61241f565b73ffffffffffffffffffffffffffffffffffffffff166119dd611b57565b73ffffffffffffffffffffffffffffffffffffffff1614611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a906136c0565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f805f90505f5b6004811015611b4d57600f8160048110611ab757611ab66135a9565b5b01544210158015611b2a575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208160048110611b1257611b116135a9565b5b602091828204019190069054906101000a900460ff16155b15611b4057600e5482611b3d9190613633565b91505b8080600101915050611a9a565b5080915050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5f9054906101000a900460ff1681565b6014602052805f5260405f205f915090505481565b60045481565b611bb361241f565b73ffffffffffffffffffffffffffffffffffffffff16611bd1611b57565b73ffffffffffffffffffffffffffffffffffffffff1614611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e906136c0565b60405180910390fd5b60011515600d5f9054906101000a900460ff16151514611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c73906138a5565b60405180910390fd5b5f600d5f6101000a81548160ff021916908315150217905550565b600e5481565b600c8160018110611cac575f80fd5b015f915090505481565b6001151560085f9054906101000a900460ff16151514611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0290613a91565b60405180910390fd5b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611e46575f8211611d4a575f80fd5b6001151560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd190613af9565b60405180910390fd5b611de483836108a3565b905060055481600b54611df79190613633565b10611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90613b87565b60405180910390fd5b611e4183836126ea565b611e75565b611e505f346108a3565b905060055481600b54611e639190613633565b10611e6c575f80fd5b611e746127d3565b5b80600b5f828254611e869190613633565b92505081905550600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015f9054906101000a900460ff16611f9757600933908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015f6101000a81548160ff0219169083151502179055505b80600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f828254611fe59190613633565b92505081905550505050565b611ff961241f565b73ffffffffffffffffffffffffffffffffffffffff16612017611b57565b73ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612064906136c0565b60405180910390fd5b6001151560085f9054906101000a900460ff161515146120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b990613a91565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60098181548110612111575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61214561241f565b73ffffffffffffffffffffffffffffffffffffffff16612163611b57565b73ffffffffffffffffffffffffffffffffffffffff16146121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b0906136c0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e90613c15565b60405180910390fd5b61223081612629565b50565b61223b61241f565b73ffffffffffffffffffffffffffffffffffffffff16612259611b57565b73ffffffffffffffffffffffffffffffffffffffff16146122af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a6906136c0565b60405180910390fd5b6122da33828473ffffffffffffffffffffffffffffffffffffffff166124af9092919063ffffffff16565b5050565b60085f9054906101000a900460ff1681565b6122f861241f565b73ffffffffffffffffffffffffffffffffffffffff16612316611b57565b73ffffffffffffffffffffffffffffffffffffffff161461236c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612363906136c0565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123a69190612da8565b602060405180830381865afa1580156123c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123e59190613c47565b90506123f18282612233565b5050565b5f81836124029190613c72565b905092915050565b5f81836124179190613603565b905092915050565b5f33905090565b6124a9846323b872dd60e01b85858560405160240161244793929190613cb3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128e8565b50505050565b6125308363a9059cbb60e01b84846040516024016124ce929190613ce8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128e8565b505050565b5f61255d606461254f6032346123f590919063ffffffff16565b61240a90919063ffffffff16565b905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156125c3573d5f803e3d5ffd5b505f6125d882346129ad90919063ffffffff16565b90506125e2611b57565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612624573d5f803e3d5ffd5b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f819050600c5f60018110612702576127016135a9565b5b015442111561279a575f6127336064612725600a866123f590919063ffffffff16565b61240a90919063ffffffff16565b905061274881846129ad90919063ffffffff16565b91506127983360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838773ffffffffffffffffffffffffffffffffffffffff16612426909392919063ffffffff16565b505b6127ce336127a6611b57565b838673ffffffffffffffffffffffffffffffffffffffff16612426909392919063ffffffff16565b505050565b5f349050600c5f600181106127eb576127ea6135a9565b5b015442111561289a575f61281c606461280e600a346123f590919063ffffffff16565b61240a90919063ffffffff16565b905061283181346129ad90919063ffffffff16565b915060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612897573d5f803e3d5ffd5b50505b6128a2611b57565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156128e4573d5f803e3d5ffd5b5050565b5f612949826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166129c29092919063ffffffff16565b90505f815111156129a857808060200190518101906129689190613d23565b6129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e90613dbe565b60405180910390fd5b5b505050565b5f81836129ba9190613ddc565b905092915050565b60606129d084845f856129d9565b90509392505050565b606082471015612a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1590613e7f565b60405180910390fd5b612a2785612ae9565b612a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5d90613ee7565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff168587604051612a8e9190613f71565b5f6040518083038185875af1925050503d805f8114612ac8576040519150601f19603f3d011682016040523d82523d5f602084013e612acd565b606091505b5091509150612add828286612afa565b92505050949350505050565b5f80823b90505f8111915050919050565b60608315612b0a57829050612b59565b5f83511115612b1c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b509190613fc9565b60405180910390fd5b9392505050565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b826004601f01602090048101928215612c29579160200282015f5b83821115612bfb57835183826101000a81548160ff02191690831515021790555092602001926001016020815f01049283019260010302612bbf565b8015612c275782816101000a81549060ff02191690556001016020815f01049283019260010302612bfb565b505b509050612c369190612c7a565b5090565b8260048101928215612c69579160200282015b82811115612c68578251825591602001919060010190612c4d565b5b509050612c769190612c7a565b5090565b5b80821115612c91575f815f905550600101612c7b565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612ccf82612ca6565b9050919050565b612cdf81612cc5565b8114612ce9575f80fd5b50565b5f81359050612cfa81612cd6565b92915050565b5f819050919050565b612d1281612d00565b8114612d1c575f80fd5b50565b5f81359050612d2d81612d09565b92915050565b5f8060408385031215612d4957612d48612c9e565b5b5f612d5685828601612cec565b9250506020612d6785828601612d1f565b9150509250929050565b612d7a81612d00565b82525050565b5f602082019050612d935f830184612d71565b92915050565b612da281612cc5565b82525050565b5f602082019050612dbb5f830184612d99565b92915050565b5f60208284031215612dd657612dd5612c9e565b5b5f612de384828501612cec565b91505092915050565b5f8115159050919050565b612e0081612dec565b8114612e0a575f80fd5b50565b5f81359050612e1b81612df7565b92915050565b5f8060408385031215612e3757612e36612c9e565b5b5f612e4485828601612cec565b9250506020612e5585828601612e0d565b9150509250929050565b5f60208284031215612e7457612e73612c9e565b5b5f612e8184828501612d1f565b91505092915050565b612e9381612dec565b82525050565b5f602082019050612eac5f830184612e8a565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612efc82612eb6565b810181811067ffffffffffffffff82111715612f1b57612f1a612ec6565b5b80604052505050565b5f612f2d612c95565b9050612f398282612ef3565b919050565b5f67ffffffffffffffff821115612f5857612f57612ec6565b5b602082029050602081019050919050565b5f80fd5b5f612f7f612f7a84612f3e565b612f24565b90508083825260208201905060208402830185811115612fa257612fa1612f69565b5b835b81811015612fcb5780612fb78882612cec565b845260208401935050602081019050612fa4565b5050509392505050565b5f82601f830112612fe957612fe8612eb2565b5b8135612ff9848260208601612f6d565b91505092915050565b5f67ffffffffffffffff82111561301c5761301b612ec6565b5b602082029050602081019050919050565b5f61303f61303a84613002565b612f24565b9050808382526020820190506020840283018581111561306257613061612f69565b5b835b8181101561308b57806130778882612d1f565b845260208401935050602081019050613064565b5050509392505050565b5f82601f8301126130a9576130a8612eb2565b5b81356130b984826020860161302d565b91505092915050565b5f805f606084860312156130d9576130d8612c9e565b5b5f84013567ffffffffffffffff8111156130f6576130f5612ca2565b5b61310286828701612fd5565b935050602084013567ffffffffffffffff81111561312357613122612ca2565b5b61312f86828701613095565b925050604061314086828701612d1f565b9150509250925092565b5f805f806080858703121561316257613161612c9e565b5b5f61316f87828801612cec565b945050602061318087828801612d1f565b935050604061319187828801612d1f565b92505060606131a287828801612e0d565b91505092959194509250565b5f60049050919050565b5f81905092915050565b5f819050919050565b6131d481612d00565b82525050565b5f6131e583836131cb565b60208301905092915050565b5f602082019050919050565b613206816131ae565b61321081846131b8565b925061321b826131c2565b805f5b8381101561324b57815161323287826131da565b965061323d836131f1565b92505060018101905061321e565b505050505050565b5f6080820190506132665f8301846131fd565b92915050565b5f806040838503121561328257613281612c9e565b5b5f83013567ffffffffffffffff81111561329f5761329e612ca2565b5b6132ab85828601612fd5565b925050602083013567ffffffffffffffff8111156132cc576132cb612ca2565b5b6132d885828601613095565b9150509250929050565b5f6060820190506132f55f830186612d71565b6133026020830185612e8a565b61330f6040830184612e8a565b949350505050565b5f67ffffffffffffffff82111561333157613330612ec6565b5b602082029050919050565b5f61334e61334984613317565b612f24565b9050806020840283018581111561336857613367612f69565b5b835b81811015613391578061337d8882612d1f565b84526020840193505060208101905061336a565b5050509392505050565b5f82601f8301126133af576133ae612eb2565b5b60046133bc84828561333c565b91505092915050565b5f8060a083850312156133db576133da612c9e565b5b5f6133e885828601612d1f565b92505060206133f98582860161339b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156134855780860481111561346157613460613403565b5b60018516156134705780820291505b808102905061347e85613430565b9450613445565b94509492505050565b5f8261349d5760019050613558565b816134aa575f9050613558565b81600181146134c057600281146134ca576134f9565b6001915050613558565b60ff8411156134dc576134db613403565b5b8360020a9150848211156134f3576134f2613403565b5b50613558565b5060208310610133831016604e8410600b841016171561352e5782820a90508381111561352957613528613403565b5b613558565b61353b848484600161343c565b9250905081840481111561355257613551613403565b5b81810290505b9392505050565b5f61356982612d00565b915061357483612d00565b92506135a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461348e565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61360d82612d00565b915061361883612d00565b925082613628576136276135d6565b5b828204905092915050565b5f61363d82612d00565b915061364883612d00565b92508282019050808211156136605761365f613403565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136aa602083613666565b91506136b582613676565b602082019050919050565b5f6020820190508181035f8301526136d78161369e565b9050919050565b7f50726573616c653a20746f6b656e7320262070726963657320617272617973205f8201527f6c656e677468206d69736d617463680000000000000000000000000000000000602082015250565b5f613738602f83613666565b9150613743826136de565b604082019050919050565b5f6020820190508181035f8301526137658161372c565b9050919050565b7f50726573616c653a206973206e6f742073746f707065640000000000000000005f82015250565b5f6137a0601783613666565b91506137ab8261376c565b602082019050919050565b5f6020820190508181035f8301526137cd81613794565b9050919050565b5f60ff82169050919050565b6137e9816137d4565b81146137f3575f80fd5b50565b5f81519050613804816137e0565b92915050565b5f6020828403121561381f5761381e612c9e565b5b5f61382c848285016137f6565b91505092915050565b7f50726573616c653a20756e6c6f636b696e6720746f6b656e206973206e6f74205f8201527f656e61626c656400000000000000000000000000000000000000000000000000602082015250565b5f61388f602783613666565b915061389a82613835565b604082019050919050565b5f6020820190508181035f8301526138bc81613883565b9050919050565b7f50726573616c653a20596f7520646f6e2774206861766520746f6b656e7320745f8201527f6f20636c61696d00000000000000000000000000000000000000000000000000602082015250565b5f61391d602783613666565b9150613928826138c3565b604082019050919050565b5f6020820190508181035f83015261394a81613911565b9050919050565b7f50726573616c653a20596f7520646f6e2774206861766520746f6b656e7320745f8201527f6f20756e6c6f636b000000000000000000000000000000000000000000000000602082015250565b5f6139ab602883613666565b91506139b682613951565b604082019050919050565b5f6020820190508181035f8301526139d88161399f565b9050919050565b7f50726573616c653a204e6f7420656e6f756768206665650000000000000000005f82015250565b5f613a13601783613666565b9150613a1e826139df565b602082019050919050565b5f6020820190508181035f830152613a4081613a07565b9050919050565b7f50726573616c653a206973206e6f7420656e61626c65640000000000000000005f82015250565b5f613a7b601783613666565b9150613a8682613a47565b602082019050919050565b5f6020820190508181035f830152613aa881613a6f565b9050919050565b7f50726573616c653a20546f6b656e206e6f7420616c6c6f7765640000000000005f82015250565b5f613ae3601a83613666565b9150613aee82613aaf565b602082019050919050565b5f6020820190508181035f830152613b1081613ad7565b9050919050565b7f50726573616c653a204e6f7420656e6f75676820746f6b656e7320746f2062655f8201527f2073616c65000000000000000000000000000000000000000000000000000000602082015250565b5f613b71602583613666565b9150613b7c82613b17565b604082019050919050565b5f6020820190508181035f830152613b9e81613b65565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613bff602683613666565b9150613c0a82613ba5565b604082019050919050565b5f6020820190508181035f830152613c2c81613bf3565b9050919050565b5f81519050613c4181612d09565b92915050565b5f60208284031215613c5c57613c5b612c9e565b5b5f613c6984828501613c33565b91505092915050565b5f613c7c82612d00565b9150613c8783612d00565b9250828202613c9581612d00565b91508282048414831517613cac57613cab613403565b5b5092915050565b5f606082019050613cc65f830186612d99565b613cd36020830185612d99565b613ce06040830184612d71565b949350505050565b5f604082019050613cfb5f830185612d99565b613d086020830184612d71565b9392505050565b5f81519050613d1d81612df7565b92915050565b5f60208284031215613d3857613d37612c9e565b5b5f613d4584828501613d0f565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f613da8602a83613666565b9150613db382613d4e565b604082019050919050565b5f6020820190508181035f830152613dd581613d9c565b9050919050565b5f613de682612d00565b9150613df183612d00565b9250828203905081811115613e0957613e08613403565b5b92915050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f613e69602683613666565b9150613e7482613e0f565b604082019050919050565b5f6020820190508181035f830152613e9681613e5d565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f613ed1601d83613666565b9150613edc82613e9d565b602082019050919050565b5f6020820190508181035f830152613efe81613ec5565b9050919050565b5f81519050919050565b5f81905092915050565b5f5b83811015613f36578082015181840152602081019050613f1b565b5f8484015250505050565b5f613f4b82613f05565b613f558185613f0f565b9350613f65818560208601613f19565b80840191505092915050565b5f613f7c8284613f41565b915081905092915050565b5f81519050919050565b5f613f9b82613f87565b613fa58185613666565b9350613fb5818560208601613f19565b613fbe81612eb6565b840191505092915050565b5f6020820190508181035f830152613fe18184613f91565b90509291505056fea2646970667358221220616b873ba861b6b630d9de75e0ca701ce752aaea3a764754a859ebdaf637df1464736f6c634300081600330000000000000000000000000000000000000000000000000000000067232a4b000000000000000000000000976a55c485a2836bd1305dccc4132890337bd46c

Deployed Bytecode

0x608060405260043610610228575f3560e01c8063715018a611610122578063ceacd9d9116100aa578063f2aa82181161006e578063f2aa8218146107c5578063f2fde38b14610801578063f3fef3a314610829578063f9020e3314610851578063fa09e6301461087b5761022f565b8063ceacd9d914610703578063d111d92f1461072d578063d2d272db14610769578063e36b0b3714610785578063e985e3671461079b5761022f565b80638da5cb5b116100f15780638da5cb5b146106335780638f6dd6c41461065d578063a8988ce214610687578063ace1741c146106c3578063b5b0763c146106ed5761022f565b8063715018a61461057d5780637a351a1d1461059357806380655eef146105bb5780638b382020146105f75761022f565b806333e364cb116101b057806354a9f1021161017457806354a9f102146104b95780636220aea8146104f757806363b20117146105015780636ade6e331461052b5780636bcedf9c146105535761022f565b806333e364cb146104015780633874e325146104175780633c00a36c1461043f5780633c76a1c8146104675780635413c1c8146104915761022f565b806329d429a8116101f757806329d429a81461030f5780632c4e722e146103375780632f0eab3a1461036157806330dbb4e41461039d5780633115329e146103d95761022f565b8063115ece4c14610231578063120f2eda1461026d5780631b926a5b14610297578063204120bc146102d35761022f565b3661022f57005b005b34801561023c575f80fd5b5061025760048036038101906102529190612d33565b6108a3565b6040516102649190612d80565b60405180910390f35b348015610278575f80fd5b506102816109ef565b60405161028e9190612da8565b60405180910390f35b3480156102a2575f80fd5b506102bd60048036038101906102b89190612dc1565b610a14565b6040516102ca9190612d80565b60405180910390f35b3480156102de575f80fd5b506102f960048036038101906102f49190612dc1565b610b21565b6040516103069190612d80565b60405180910390f35b34801561031a575f80fd5b5061033560048036038101906103309190612e21565b610b36565b005b348015610342575f80fd5b5061034b610c62565b6040516103589190612d80565b60405180910390f35b34801561036c575f80fd5b5061038760048036038101906103829190612e5f565b610c68565b6040516103949190612d80565b60405180910390f35b3480156103a8575f80fd5b506103c360048036038101906103be9190612d33565b610c81565b6040516103d09190612e99565b60405180910390f35b3480156103e4575f80fd5b506103ff60048036038101906103fa91906130c2565b610cb7565b005b34801561040c575f80fd5b50610415610eb9565b005b348015610422575f80fd5b5061043d6004803603810190610438919061314a565b610fbe565b005b34801561044a575f80fd5b5061046560048036038101906104609190612e5f565b611199565b005b348015610472575f80fd5b5061047b61125c565b6040516104889190613253565b60405180910390f35b34801561049c575f80fd5b506104b760048036038101906104b2919061326c565b6112a7565b005b3480156104c4575f80fd5b506104df60048036038101906104da9190612dc1565b61148e565b6040516104ee939291906132e2565b60405180910390f35b6104ff6114cd565b005b34801561050c575f80fd5b50610515611858565b6040516105229190612d80565b60405180910390f35b348015610536575f80fd5b50610551600480360381019061054c91906133c5565b61185e565b005b34801561055e575f80fd5b5061056761192a565b6040516105749190612d80565b60405180910390f35b348015610588575f80fd5b50610591611930565b005b34801561059e575f80fd5b506105b960048036038101906105b49190612dc1565b6119b7565b005b3480156105c6575f80fd5b506105e160048036038101906105dc9190612dc1565b611a76565b6040516105ee9190612e99565b60405180910390f35b348015610602575f80fd5b5061061d60048036038101906106189190612dc1565b611a93565b60405161062a9190612d80565b60405180910390f35b34801561063e575f80fd5b50610647611b57565b6040516106549190612da8565b60405180910390f35b348015610668575f80fd5b50610671611b7e565b60405161067e9190612e99565b60405180910390f35b348015610692575f80fd5b506106ad60048036038101906106a89190612dc1565b611b90565b6040516106ba9190612d80565b60405180910390f35b3480156106ce575f80fd5b506106d7611ba5565b6040516106e49190612d80565b60405180910390f35b3480156106f8575f80fd5b50610701611bab565b005b34801561070e575f80fd5b50610717611c97565b6040516107249190612d80565b60405180910390f35b348015610738575f80fd5b50610753600480360381019061074e9190612e5f565b611c9d565b6040516107609190612d80565b60405180910390f35b610783600480360381019061077e9190612d33565b611cb6565b005b348015610790575f80fd5b50610799611ff1565b005b3480156107a6575f80fd5b506107af6120dd565b6040516107bc9190612da8565b60405180910390f35b3480156107d0575f80fd5b506107eb60048036038101906107e69190612e5f565b612102565b6040516107f89190612da8565b60405180910390f35b34801561080c575f80fd5b5061082760048036038101906108229190612dc1565b61213d565b005b348015610834575f80fd5b5061084f600480360381019061084a9190612d33565b612233565b005b34801561085c575f80fd5b506108656122de565b6040516108729190612e99565b60405180910390f35b348015610886575f80fd5b506108a1600480360381019061089c9190612dc1565b6122f0565b005b5f805f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146109ad576001151560065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514610931575f80fd5b5f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506109a581610997600454600a610988919061355f565b876123f590919063ffffffff16565b61240a90919063ffffffff16565b9150506109e5565b6109e26002546109d4600454600a6109c5919061355f565b866123f590919063ffffffff16565b61240a90919063ffffffff16565b90505b8091505092915050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f90505f5b6004811015610b1757600f8160048110610a3857610a376135a9565b5b01544210158015610aab575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208160048110610a9357610a926135a9565b5b602091828204019190069054906101000a900460ff16155b15610b0a576004600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154610afc9190613603565b82610b079190613633565b91505b8080600101915050610a1b565b5080915050919050565b6007602052805f5260405f205f915090505481565b610b3e61241f565b73ffffffffffffffffffffffffffffffffffffffff16610b5c611b57565b73ffffffffffffffffffffffffffffffffffffffff1614610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba9906136c0565b60405180910390fd5b80151560065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610c0a575f80fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60025481565b600f8160048110610c77575f80fd5b015f915090505481565b6013602052815f5260405f208160048110610c9a575f80fd5b60209182820401919006915091509054906101000a900460ff1681565b610cbf61241f565b73ffffffffffffffffffffffffffffffffffffffff16610cdd611b57565b73ffffffffffffffffffffffffffffffffffffffff1614610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a906136c0565b60405180910390fd5b8151835114610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e9061374e565b60405180910390fd5b5f8114610d8657806002819055505b5f5b8351811015610eb3576001151560065f868481518110610dab57610daa6135a9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514610e04575f80fd5b5f838281518110610e1857610e176135a9565b5b602002602001015103610e29575f80fd5b828181518110610e3c57610e3b6135a9565b5b602002602001015160075f868481518110610e5a57610e596135a9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600181610eac9190613633565b9050610d88565b50505050565b610ec161241f565b73ffffffffffffffffffffffffffffffffffffffff16610edf611b57565b73ffffffffffffffffffffffffffffffffffffffff1614610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c906136c0565b60405180910390fd5b5f151560085f9054906101000a900460ff16151514610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f80906137b6565b60405180910390fd5b600160085f6101000a81548160ff0219169083151502179055505f600d5f6101000a81548160ff021916908315150217905550565b610fc661241f565b73ffffffffffffffffffffffffffffffffffffffff16610fe4611b57565b73ffffffffffffffffffffffffffffffffffffffff161461103a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611031906136c0565b60405180910390fd5b5f8203611045575f80fd5b816002819055508360035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060085f6101000a81548160ff02191690831515021790555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611133919061380a565b60ff1660048190555082600581905550611193333060055460035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612426909392919063ffffffff16565b50505050565b6111a161241f565b73ffffffffffffffffffffffffffffffffffffffff166111bf611b57565b73ffffffffffffffffffffffffffffffffffffffff1614611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c906136c0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611258573d5f803e3d5ffd5b5050565b611264612b60565b600f60048060200260405190810160405280929190826004801561129d576020028201915b815481526020019060010190808311611289575b5050505050905090565b6112af61241f565b73ffffffffffffffffffffffffffffffffffffffff166112cd611b57565b73ffffffffffffffffffffffffffffffffffffffff1614611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a906136c0565b60405180910390fd5b8051825114611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e9061374e565b60405180910390fd5b5f5b8251811015611489575f828281518110611386576113856135a9565b5b602002602001015103611397575f80fd5b600160065f8584815181106113af576113ae6135a9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550818181518110611419576114186135a9565b5b602002602001015160075f858481518110611437576114366135a9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508080600101915050611369565b505050565b600a602052805f5260405f205f91509050805f015490806001015f9054906101000a900460ff16908060010160019054906101000a900460ff16905083565b60011515600d5f9054906101000a900460ff16151514611522576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611519906138a5565b60405180910390fd5b5f600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154116115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613933565b60405180910390fd5b5f806115ad612b82565b5f5b60048110156116d957600f81600481106115cc576115cb6135a9565b5b015442106116cc5760018282600481106115e9576115e86135a9565b5b60200201901515908115158152505060135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208160048110611647576116466135a9565b5b602091828204019190069054906101000a900460ff166116cb576004600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546116ad9190613603565b846116b89190613633565b9350600e54836116c89190613633565b92505b5b80806001019150506115af565b505f831161171c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611713906139c1565b60405180910390fd5b8134101561175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175690613a29565b60405180910390fd5b6117ab338460035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124af9092919063ffffffff16565b6117b3612535565b8260145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546117ff9190613633565b925050819055508060135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20906004611852929190612ba4565b50505050565b600b5481565b61186661241f565b73ffffffffffffffffffffffffffffffffffffffff16611884611b57565b73ffffffffffffffffffffffffffffffffffffffff16146118da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d1906136c0565b60405180910390fd5b5f60085f6101000a81548160ff0219169083151502179055506001600d5f6101000a81548160ff02191690831515021790555081600e8190555080600f906004611925929190612c3a565b505050565b60055481565b61193861241f565b73ffffffffffffffffffffffffffffffffffffffff16611956611b57565b73ffffffffffffffffffffffffffffffffffffffff16146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a3906136c0565b60405180910390fd5b6119b55f612629565b565b6119bf61241f565b73ffffffffffffffffffffffffffffffffffffffff166119dd611b57565b73ffffffffffffffffffffffffffffffffffffffff1614611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a906136c0565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f805f90505f5b6004811015611b4d57600f8160048110611ab757611ab66135a9565b5b01544210158015611b2a575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208160048110611b1257611b116135a9565b5b602091828204019190069054906101000a900460ff16155b15611b4057600e5482611b3d9190613633565b91505b8080600101915050611a9a565b5080915050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5f9054906101000a900460ff1681565b6014602052805f5260405f205f915090505481565b60045481565b611bb361241f565b73ffffffffffffffffffffffffffffffffffffffff16611bd1611b57565b73ffffffffffffffffffffffffffffffffffffffff1614611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e906136c0565b60405180910390fd5b60011515600d5f9054906101000a900460ff16151514611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c73906138a5565b60405180910390fd5b5f600d5f6101000a81548160ff021916908315150217905550565b600e5481565b600c8160018110611cac575f80fd5b015f915090505481565b6001151560085f9054906101000a900460ff16151514611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0290613a91565b60405180910390fd5b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611e46575f8211611d4a575f80fd5b6001151560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd190613af9565b60405180910390fd5b611de483836108a3565b905060055481600b54611df79190613633565b10611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90613b87565b60405180910390fd5b611e4183836126ea565b611e75565b611e505f346108a3565b905060055481600b54611e639190613633565b10611e6c575f80fd5b611e746127d3565b5b80600b5f828254611e869190613633565b92505081905550600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015f9054906101000a900460ff16611f9757600933908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015f6101000a81548160ff0219169083151502179055505b80600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f828254611fe59190613633565b92505081905550505050565b611ff961241f565b73ffffffffffffffffffffffffffffffffffffffff16612017611b57565b73ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612064906136c0565b60405180910390fd5b6001151560085f9054906101000a900460ff161515146120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b990613a91565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60098181548110612111575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61214561241f565b73ffffffffffffffffffffffffffffffffffffffff16612163611b57565b73ffffffffffffffffffffffffffffffffffffffff16146121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b0906136c0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e90613c15565b60405180910390fd5b61223081612629565b50565b61223b61241f565b73ffffffffffffffffffffffffffffffffffffffff16612259611b57565b73ffffffffffffffffffffffffffffffffffffffff16146122af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a6906136c0565b60405180910390fd5b6122da33828473ffffffffffffffffffffffffffffffffffffffff166124af9092919063ffffffff16565b5050565b60085f9054906101000a900460ff1681565b6122f861241f565b73ffffffffffffffffffffffffffffffffffffffff16612316611b57565b73ffffffffffffffffffffffffffffffffffffffff161461236c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612363906136c0565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123a69190612da8565b602060405180830381865afa1580156123c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123e59190613c47565b90506123f18282612233565b5050565b5f81836124029190613c72565b905092915050565b5f81836124179190613603565b905092915050565b5f33905090565b6124a9846323b872dd60e01b85858560405160240161244793929190613cb3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128e8565b50505050565b6125308363a9059cbb60e01b84846040516024016124ce929190613ce8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506128e8565b505050565b5f61255d606461254f6032346123f590919063ffffffff16565b61240a90919063ffffffff16565b905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156125c3573d5f803e3d5ffd5b505f6125d882346129ad90919063ffffffff16565b90506125e2611b57565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612624573d5f803e3d5ffd5b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f819050600c5f60018110612702576127016135a9565b5b015442111561279a575f6127336064612725600a866123f590919063ffffffff16565b61240a90919063ffffffff16565b905061274881846129ad90919063ffffffff16565b91506127983360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838773ffffffffffffffffffffffffffffffffffffffff16612426909392919063ffffffff16565b505b6127ce336127a6611b57565b838673ffffffffffffffffffffffffffffffffffffffff16612426909392919063ffffffff16565b505050565b5f349050600c5f600181106127eb576127ea6135a9565b5b015442111561289a575f61281c606461280e600a346123f590919063ffffffff16565b61240a90919063ffffffff16565b905061283181346129ad90919063ffffffff16565b915060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612897573d5f803e3d5ffd5b50505b6128a2611b57565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156128e4573d5f803e3d5ffd5b5050565b5f612949826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166129c29092919063ffffffff16565b90505f815111156129a857808060200190518101906129689190613d23565b6129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e90613dbe565b60405180910390fd5b5b505050565b5f81836129ba9190613ddc565b905092915050565b60606129d084845f856129d9565b90509392505050565b606082471015612a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1590613e7f565b60405180910390fd5b612a2785612ae9565b612a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5d90613ee7565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff168587604051612a8e9190613f71565b5f6040518083038185875af1925050503d805f8114612ac8576040519150601f19603f3d011682016040523d82523d5f602084013e612acd565b606091505b5091509150612add828286612afa565b92505050949350505050565b5f80823b90505f8111915050919050565b60608315612b0a57829050612b59565b5f83511115612b1c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b509190613fc9565b60405180910390fd5b9392505050565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b826004601f01602090048101928215612c29579160200282015f5b83821115612bfb57835183826101000a81548160ff02191690831515021790555092602001926001016020815f01049283019260010302612bbf565b8015612c275782816101000a81549060ff02191690556001016020815f01049283019260010302612bfb565b505b509050612c369190612c7a565b5090565b8260048101928215612c69579160200282015b82811115612c68578251825591602001919060010190612c4d565b5b509050612c769190612c7a565b5090565b5b80821115612c91575f815f905550600101612c7b565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612ccf82612ca6565b9050919050565b612cdf81612cc5565b8114612ce9575f80fd5b50565b5f81359050612cfa81612cd6565b92915050565b5f819050919050565b612d1281612d00565b8114612d1c575f80fd5b50565b5f81359050612d2d81612d09565b92915050565b5f8060408385031215612d4957612d48612c9e565b5b5f612d5685828601612cec565b9250506020612d6785828601612d1f565b9150509250929050565b612d7a81612d00565b82525050565b5f602082019050612d935f830184612d71565b92915050565b612da281612cc5565b82525050565b5f602082019050612dbb5f830184612d99565b92915050565b5f60208284031215612dd657612dd5612c9e565b5b5f612de384828501612cec565b91505092915050565b5f8115159050919050565b612e0081612dec565b8114612e0a575f80fd5b50565b5f81359050612e1b81612df7565b92915050565b5f8060408385031215612e3757612e36612c9e565b5b5f612e4485828601612cec565b9250506020612e5585828601612e0d565b9150509250929050565b5f60208284031215612e7457612e73612c9e565b5b5f612e8184828501612d1f565b91505092915050565b612e9381612dec565b82525050565b5f602082019050612eac5f830184612e8a565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612efc82612eb6565b810181811067ffffffffffffffff82111715612f1b57612f1a612ec6565b5b80604052505050565b5f612f2d612c95565b9050612f398282612ef3565b919050565b5f67ffffffffffffffff821115612f5857612f57612ec6565b5b602082029050602081019050919050565b5f80fd5b5f612f7f612f7a84612f3e565b612f24565b90508083825260208201905060208402830185811115612fa257612fa1612f69565b5b835b81811015612fcb5780612fb78882612cec565b845260208401935050602081019050612fa4565b5050509392505050565b5f82601f830112612fe957612fe8612eb2565b5b8135612ff9848260208601612f6d565b91505092915050565b5f67ffffffffffffffff82111561301c5761301b612ec6565b5b602082029050602081019050919050565b5f61303f61303a84613002565b612f24565b9050808382526020820190506020840283018581111561306257613061612f69565b5b835b8181101561308b57806130778882612d1f565b845260208401935050602081019050613064565b5050509392505050565b5f82601f8301126130a9576130a8612eb2565b5b81356130b984826020860161302d565b91505092915050565b5f805f606084860312156130d9576130d8612c9e565b5b5f84013567ffffffffffffffff8111156130f6576130f5612ca2565b5b61310286828701612fd5565b935050602084013567ffffffffffffffff81111561312357613122612ca2565b5b61312f86828701613095565b925050604061314086828701612d1f565b9150509250925092565b5f805f806080858703121561316257613161612c9e565b5b5f61316f87828801612cec565b945050602061318087828801612d1f565b935050604061319187828801612d1f565b92505060606131a287828801612e0d565b91505092959194509250565b5f60049050919050565b5f81905092915050565b5f819050919050565b6131d481612d00565b82525050565b5f6131e583836131cb565b60208301905092915050565b5f602082019050919050565b613206816131ae565b61321081846131b8565b925061321b826131c2565b805f5b8381101561324b57815161323287826131da565b965061323d836131f1565b92505060018101905061321e565b505050505050565b5f6080820190506132665f8301846131fd565b92915050565b5f806040838503121561328257613281612c9e565b5b5f83013567ffffffffffffffff81111561329f5761329e612ca2565b5b6132ab85828601612fd5565b925050602083013567ffffffffffffffff8111156132cc576132cb612ca2565b5b6132d885828601613095565b9150509250929050565b5f6060820190506132f55f830186612d71565b6133026020830185612e8a565b61330f6040830184612e8a565b949350505050565b5f67ffffffffffffffff82111561333157613330612ec6565b5b602082029050919050565b5f61334e61334984613317565b612f24565b9050806020840283018581111561336857613367612f69565b5b835b81811015613391578061337d8882612d1f565b84526020840193505060208101905061336a565b5050509392505050565b5f82601f8301126133af576133ae612eb2565b5b60046133bc84828561333c565b91505092915050565b5f8060a083850312156133db576133da612c9e565b5b5f6133e885828601612d1f565b92505060206133f98582860161339b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156134855780860481111561346157613460613403565b5b60018516156134705780820291505b808102905061347e85613430565b9450613445565b94509492505050565b5f8261349d5760019050613558565b816134aa575f9050613558565b81600181146134c057600281146134ca576134f9565b6001915050613558565b60ff8411156134dc576134db613403565b5b8360020a9150848211156134f3576134f2613403565b5b50613558565b5060208310610133831016604e8410600b841016171561352e5782820a90508381111561352957613528613403565b5b613558565b61353b848484600161343c565b9250905081840481111561355257613551613403565b5b81810290505b9392505050565b5f61356982612d00565b915061357483612d00565b92506135a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461348e565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61360d82612d00565b915061361883612d00565b925082613628576136276135d6565b5b828204905092915050565b5f61363d82612d00565b915061364883612d00565b92508282019050808211156136605761365f613403565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136aa602083613666565b91506136b582613676565b602082019050919050565b5f6020820190508181035f8301526136d78161369e565b9050919050565b7f50726573616c653a20746f6b656e7320262070726963657320617272617973205f8201527f6c656e677468206d69736d617463680000000000000000000000000000000000602082015250565b5f613738602f83613666565b9150613743826136de565b604082019050919050565b5f6020820190508181035f8301526137658161372c565b9050919050565b7f50726573616c653a206973206e6f742073746f707065640000000000000000005f82015250565b5f6137a0601783613666565b91506137ab8261376c565b602082019050919050565b5f6020820190508181035f8301526137cd81613794565b9050919050565b5f60ff82169050919050565b6137e9816137d4565b81146137f3575f80fd5b50565b5f81519050613804816137e0565b92915050565b5f6020828403121561381f5761381e612c9e565b5b5f61382c848285016137f6565b91505092915050565b7f50726573616c653a20756e6c6f636b696e6720746f6b656e206973206e6f74205f8201527f656e61626c656400000000000000000000000000000000000000000000000000602082015250565b5f61388f602783613666565b915061389a82613835565b604082019050919050565b5f6020820190508181035f8301526138bc81613883565b9050919050565b7f50726573616c653a20596f7520646f6e2774206861766520746f6b656e7320745f8201527f6f20636c61696d00000000000000000000000000000000000000000000000000602082015250565b5f61391d602783613666565b9150613928826138c3565b604082019050919050565b5f6020820190508181035f83015261394a81613911565b9050919050565b7f50726573616c653a20596f7520646f6e2774206861766520746f6b656e7320745f8201527f6f20756e6c6f636b000000000000000000000000000000000000000000000000602082015250565b5f6139ab602883613666565b91506139b682613951565b604082019050919050565b5f6020820190508181035f8301526139d88161399f565b9050919050565b7f50726573616c653a204e6f7420656e6f756768206665650000000000000000005f82015250565b5f613a13601783613666565b9150613a1e826139df565b602082019050919050565b5f6020820190508181035f830152613a4081613a07565b9050919050565b7f50726573616c653a206973206e6f7420656e61626c65640000000000000000005f82015250565b5f613a7b601783613666565b9150613a8682613a47565b602082019050919050565b5f6020820190508181035f830152613aa881613a6f565b9050919050565b7f50726573616c653a20546f6b656e206e6f7420616c6c6f7765640000000000005f82015250565b5f613ae3601a83613666565b9150613aee82613aaf565b602082019050919050565b5f6020820190508181035f830152613b1081613ad7565b9050919050565b7f50726573616c653a204e6f7420656e6f75676820746f6b656e7320746f2062655f8201527f2073616c65000000000000000000000000000000000000000000000000000000602082015250565b5f613b71602583613666565b9150613b7c82613b17565b604082019050919050565b5f6020820190508181035f830152613b9e81613b65565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613bff602683613666565b9150613c0a82613ba5565b604082019050919050565b5f6020820190508181035f830152613c2c81613bf3565b9050919050565b5f81519050613c4181612d09565b92915050565b5f60208284031215613c5c57613c5b612c9e565b5b5f613c6984828501613c33565b91505092915050565b5f613c7c82612d00565b9150613c8783612d00565b9250828202613c9581612d00565b91508282048414831517613cac57613cab613403565b5b5092915050565b5f606082019050613cc65f830186612d99565b613cd36020830185612d99565b613ce06040830184612d71565b949350505050565b5f604082019050613cfb5f830185612d99565b613d086020830184612d71565b9392505050565b5f81519050613d1d81612df7565b92915050565b5f60208284031215613d3857613d37612c9e565b5b5f613d4584828501613d0f565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f613da8602a83613666565b9150613db382613d4e565b604082019050919050565b5f6020820190508181035f830152613dd581613d9c565b9050919050565b5f613de682612d00565b9150613df183612d00565b9250828203905081811115613e0957613e08613403565b5b92915050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f613e69602683613666565b9150613e7482613e0f565b604082019050919050565b5f6020820190508181035f830152613e9681613e5d565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f613ed1601d83613666565b9150613edc82613e9d565b602082019050919050565b5f6020820190508181035f830152613efe81613ec5565b9050919050565b5f81519050919050565b5f81905092915050565b5f5b83811015613f36578082015181840152602081019050613f1b565b5f8484015250505050565b5f613f4b82613f05565b613f558185613f0f565b9350613f65818560208601613f19565b80840191505092915050565b5f613f7c8284613f41565b915081905092915050565b5f81519050919050565b5f613f9b82613f87565b613fa58185613666565b9350613fb5818560208601613f19565b613fbe81612eb6565b840191505092915050565b5f6020820190508181035f830152613fe18184613f91565b90509291505056fea2646970667358221220616b873ba861b6b630d9de75e0ca701ce752aaea3a764754a859ebdaf637df1464736f6c63430008160033

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

0000000000000000000000000000000000000000000000000000000067232a4b000000000000000000000000976a55c485a2836bd1305dccc4132890337bd46c

-----Decoded View---------------
Arg [0] : _firstStageEndTime (uint256): 1730357835
Arg [1] : _LPAddress (address): 0x976a55c485A2836BD1305dccc4132890337Bd46C

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000067232a4b
Arg [1] : 000000000000000000000000976a55c485a2836bd1305dccc4132890337bd46c


Deployed Bytecode Sourcemap

12606:8833:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16931:462;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12768:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20061:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12991:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16130:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12801:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13326:32;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13367:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16344:579;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15125:122;;;;;;;;;;;;;:::i;:::-;;14471:550;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5294:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19305;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15646:476;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13109:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;20471:965;;;:::i;:::-;;13175:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15255:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12895:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4227:103;;;;;;;;;;;;;:::i;:::-;;14361:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12937:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19677:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4004:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13254:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13421:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12862:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15538:100;;;;;;;;;;;;;:::i;:::-;;13290:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13214:31;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18218:1079;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15029:88;;;;;;;;;;;;;:::i;:::-;;12829:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13077:23;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4338:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4998:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13046:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5131:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16931:462;17032:7;17052:14;17098:1;17081:19;;:5;:19;;;17077:285;;17149:4;17125:28;;:13;:20;17139:5;17125:20;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;17117:37;;;;;;17169:13;17185:11;:18;17197:5;17185:18;;;;;;;;;;;;;;;;17169:34;;17227:41;17262:5;17227:30;17244:12;;17238:2;:18;;;;:::i;:::-;17227:6;:10;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;17218:50;;17102:178;17077:285;;;17310:40;17345:4;;17310:30;17327:12;;17321:2;:18;;;;:::i;:::-;17310:6;:10;;:30;;;;:::i;:::-;:34;;:40;;;;:::i;:::-;17301:49;;17077:285;17379:6;17372:13;;;16931:462;;;;:::o;12768:24::-;;;;;;;;;;;;;:::o;20061:402::-;20145:7;20165:15;20183:1;20165:19;;20202:6;20197:232;20214:1;20210;:5;20197:232;;;20278:14;20293:1;20278:17;;;;;;;:::i;:::-;;;;20259:15;:36;;:64;;;;;20300:10;:20;20311:8;20300:20;;;;;;;;;;;;;;;20321:1;20300:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;20299:24;20259:64;20237:181;;;20401:1;20369:12;:22;20382:8;20369:22;;;;;;;;;;;;;;;:29;;;:33;;;;:::i;:::-;20358:44;;;;;:::i;:::-;;;20237:181;20217:3;;;;;;;20197:232;;;;20448:7;20441:14;;;20061:402;;;:::o;12991:46::-;;;;;;;;;;;;;;;;;:::o;16130:206::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16276:7:::1;16251:32;;:13;:21;16265:6;16251:21;;;;;;;;;;;;;;;;;;;;;;;;;:32;;::::0;16243:41:::1;;;::::0;::::1;;16321:7;16297:13;:21;16311:6;16297:21;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;16130:206:::0;;:::o;12801:19::-;;;;:::o;13326:32::-;;;;;;;;;;;;;;;;;;;;:::o;13367:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16344:579::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16540:7:::1;:14;16522:7;:14;:32;16500:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;16655:1;16646:5;:10;16642:55;;16680:5;16673:4;:12;;;;16642:55;16714:9;16709:207;16733:7;:14;16729:1;:18;16709:207;;;16809:4;16780:33;;:13;:25;16794:7;16802:1;16794:10;;;;;;;;:::i;:::-;;;;;;;;16780:25;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;16772:42;;;::::0;::::1;;16851:1;16837:7;16845:1;16837:10;;;;;;;;:::i;:::-;;;;;;;;:15:::0;16829:24:::1;;;::::0;::::1;;16894:7;16902:1;16894:10;;;;;;;;:::i;:::-;;;;;;;;16868:11;:23;16880:7;16888:1;16880:10;;;;;;;;:::i;:::-;;;;;;;;16868:23;;;;;;;;;;;;;;;:36;;;;16754:1;16749:6;;;;;:::i;:::-;;;16709:207;;;;16344:579:::0;;;:::o;15125:122::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13948:5:::1;13934:19;;:10;;;;;;;;;;;:19;;;13926:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;15201:4:::2;15188:10;;:17;;;;;;;;;;;;;;;;;;15234:5;15216:15;;:23;;;;;;;;;;;;;;;;;;15125:122::o:0;14471:550::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14665:1:::1;14656:5;:10:::0;14648:19:::1;;;::::0;::::1;;14685:5;14678:4;:12;;;;14713:10;14701:9;;:22;;;;;;;;;;;;;;;;;;14747:11;14734:10;;:24;;;;;;;;;;;;;;;;;;14799:9;;;;;;;;;;;14784:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14769:51;;:12;:51;;;;14852:19;14831:18;:40;;;;14882:131;14931:10;14964:4;14984:18;;14889:9;;;;;;;;;;;14882:34;;;;:131;;;;;;:::i;:::-;14471:550:::0;;;;:::o;5294:108::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5369:10:::1;5361:28;;:33;5390:3;5361:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;5294:108:::0;:::o;19305:::-;19357:14;;:::i;:::-;19391;19384:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19305:108;:::o;15646:476::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15819:7:::1;:14;15801:7;:14;:32;15779:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;15926:9;15921:194;15945:7;:14;15941:1;:18;15921:194;;;16003:1;15989:7;15997:1;15989:10;;;;;;;;:::i;:::-;;;;;;;;:15:::0;15981:24:::1;;;::::0;::::1;;16048:4;16020:13;:25;16034:7;16042:1;16034:10;;;;;;;;:::i;:::-;;;;;;;;16020:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;16093:7;16101:1;16093:10;;;;;;;;:::i;:::-;;;;;;;;16067:11;:23;16079:7;16087:1;16079:10;;;;;;;;:::i;:::-;;;;;;;;16067:23;;;;;;;;;;;;;;;:36;;;;15961:3;;;;;;;15921:194;;;;15646:476:::0;;:::o;13109:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20471:965::-;14086:4;14067:23;;:15;;;;;;;;;;;:23;;;14045:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;20593:1:::1;20559:12;:24;20572:10;20559:24;;;;;;;;;;;;;;;:31;;;:35;20537:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;20674:15;20704:12:::0;20731:26:::1;;:::i;:::-;20775:6;20770:333;20787:1;20783;:5;20770:333;;;20833:14;20848:1;20833:17;;;;;;;:::i;:::-;;;;20814:15;:36;20810:282;;20888:4;20871:11;20883:1;20871:14;;;;;;;:::i;:::-;;;;;:21;;;;;;;;;::::0;::::1;20918:10;:22;20929:10;20918:22;;;;;;;;;;;;;;;20941:1;20918:25;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;20913:164;;21013:1;20979:12;:24;20992:10;20979:24;;;;;;;;;;;;;;;:31;;;:35;;;;:::i;:::-;20968:46;;;;;:::i;:::-;;;21045:12;;21037:20;;;;;:::i;:::-;;;20913:164;20810:282;20790:3;;;;;;;20770:333;;;;21133:1;21123:7;:11;21115:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21211:4;21198:9;:17;;21190:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;21256:51;21287:10;21299:7;21263:9;;;;;;;;;;;21256:30;;;;:51;;;;;:::i;:::-;21318:13;:11;:13::i;:::-;21374:7;21344:14;:26;21359:10;21344:26;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;21417:11;21392:10;:22;21403:10;21392:22;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;20526:910;;;20471:965::o:0;13175:30::-;;;;:::o;15255:275::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15402:5:::1;15389:10;;:18;;;;;;;;;;;;;;;;;;15436:4;15418:15;;:22;;;;;;;;;;;;;;;;;;15466:13;15451:12;:28;;;;15507:15;15490:14;:32;;;;;;;:::i;:::-;;15255:275:::0;;:::o;12895:33::-;;;;:::o;4227:103::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4292:30:::1;4319:1;4292:18;:30::i;:::-;4227:103::o:0;14361:102::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14445:10:::1;14433:9;;:22;;;;;;;;;;;;;;;;;;14361:102:::0;:::o;12937:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;19677:376::-;19765:7;19785:12;19800:1;19785:16;;19819:6;19814:208;19831:1;19827;:5;19814:208;;;19895:14;19910:1;19895:17;;;;;;;:::i;:::-;;;;19876:15;:36;;:64;;;;;19917:10;:20;19928:8;19917:20;;;;;;;;;;;;;;;19938:1;19917:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;19916:24;19876:64;19854:157;;;19983:12;;19975:20;;;;;:::i;:::-;;;19854:157;19834:3;;;;;;;19814:208;;;;20041:4;20034:11;;;19677:376;;;:::o;4004:87::-;4050:7;4077:6;;;;;;;;;;;4070:13;;4004:87;:::o;13254:27::-;;;;;;;;;;;;;:::o;13421:49::-;;;;;;;;;;;;;;;;;:::o;12862:24::-;;;;:::o;15538:100::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14086:4:::1;14067:23;;:15;;;;;;;;;;;:23;;;14045:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;15625:5:::2;15607:15;;:23;;;;;;;;;;;;;;;;;;15538:100::o:0;13290:27::-;;;;:::o;13214:31::-;;;;;;;;;;;;;;;;;;;;:::o;18218:1079::-;13833:4;13819:18;;:10;;;;;;;;;;;:18;;;13811:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;18338:20:::1;18391:1:::0;18373:20:::1;;:6;:20;;;18369:670;;18428:1;18418:7;:11;18410:20;;;::::0;::::1;;18496:4;18471:29;;:13;:21;18485:6;18471:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;18445:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;18594:31;18609:6;18617:7;18594:14;:31::i;:::-;18579:46;;18701:18;;18685:12;18667:15;;:30;;;;:::i;:::-;18666:53;18640:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;18807:30;18821:6;18829:7;18807:13;:30::i;:::-;18369:670;;;18885:37;18908:1;18912:9;18885:14;:37::i;:::-;18870:52;;18980:18;;18964:12;18946:15;;:30;;;;:::i;:::-;18945:53;18937:62;;;::::0;::::1;;19014:13;:11;:13::i;:::-;18369:670;19068:12;19049:15;;:31;;;;;;;:::i;:::-;;;;;;;;19096:12;:24;19109:10;19096:24;;;;;;;;;;;;;;;:31;;;;;;;;;;;;19091:141;;19144:6;19156:10;19144:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19216:4;19182:12;:24;19195:10;19182:24;;;;;;;;;;;;;;;:31;;;:38;;;;;;;;;;;;;;;;;;19091:141;19277:12;19242;:24;19255:10;19242:24;;;;;;;;;;;;;;;:31;;;:47;;;;;;;:::i;:::-;;;;;;;;18327:970;18218:1079:::0;;:::o;15029:88::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13833:4:::1;13819:18;;:10;;;;;;;;;;;:18;;;13811:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;15104:5:::2;15091:10;;:18;;;;;;;;;;;;;;;;;;15029:88::o:0;12829:24::-;;;;;;;;;;;;;:::o;13077:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4338:238::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4461:1:::1;4441:22;;:8;:22;;::::0;4419:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4540:28;4559:8;4540:18;:28::i;:::-;4338:238:::0;:::o;4998:125::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5072:43:::1;5099:10;5111:3;5079:5;5072:26;;;;:43;;;;;:::i;:::-;4998:125:::0;;:::o;13046:22::-;;;;;;;;;;;;;:::o;5131:155::-;4150:12;:10;:12::i;:::-;4139:23;;:7;:5;:7::i;:::-;:23;;;4131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5195:11:::1;5216:5;5209:23;;;5241:4;5209:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5195:52;;5258:20;5267:5;5274:3;5258:8;:20::i;:::-;5184:102;5131:155:::0;:::o;1540:98::-;1598:7;1629:1;1625;:5;;;;:::i;:::-;1618:12;;1540:98;;;;:::o;1646:::-;1704:7;1735:1;1731;:5;;;;:::i;:::-;1724:12;;1646:98;;;;:::o;3497:::-;3550:7;3577:10;3570:17;;3497:98;:::o;10052:285::-;10196:133;10230:5;10273:27;;;10302:4;10308:2;10312:5;10250:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10196:19;:133::i;:::-;10052:285;;;;:::o;9830:214::-;9913:123;9947:5;9990:23;;;10015:2;10019:5;9967:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9913:19;:123::i;:::-;9830:214;;;:::o;19421:248::-;19463:16;19482:26;19504:3;19482:17;19496:2;19482:9;:13;;:17;;;;:::i;:::-;:21;;:26;;;;:::i;:::-;19463:45;;19527:9;;;;;;;;;;;19519:27;;:37;19547:8;19519:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19567:19;19589:23;19603:8;19589:9;:13;;:23;;;;:::i;:::-;19567:45;;19631:7;:5;:7::i;:::-;19623:25;;:38;19649:11;19623:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19452:217;;19421:248::o;4584:191::-;4658:16;4677:6;;;;;;;;;;;4658:25;;4703:8;4694:6;;:17;;;;;;;;;;;;;;;;;;4758:8;4727:40;;4748:8;4727:40;;;;;;;;;;;;4647:128;4584:191;:::o;17769:441::-;17844:19;17866:7;17844:29;;17908:13;17922:1;17908:16;;;;;;;:::i;:::-;;;;17890:15;:34;17886:239;;;17941:16;17960:24;17980:3;17960:15;17972:2;17960:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;17941:43;;18013:21;18025:8;18013:7;:11;;:21;;;;:::i;:::-;17999:35;;18049:64;18081:10;18093:9;;;;;;;;;;;18104:8;18056:6;18049:31;;;;:64;;;;;;:::i;:::-;17926:199;17886:239;18137:65;18169:10;18181:7;:5;:7::i;:::-;18190:11;18144:6;18137:31;;;;:65;;;;;;:::i;:::-;17833:377;17769:441;;:::o;17401:360::-;17443:19;17465:9;17443:31;;17509:13;17523:1;17509:16;;;;;;;:::i;:::-;;;;17491:15;:34;17487:216;;;17542:16;17561:26;17583:3;17561:17;17575:2;17561:9;:13;;:17;;;;:::i;:::-;:21;;:26;;;;:::i;:::-;17542:45;;17616:23;17630:8;17616:9;:13;;:23;;;;:::i;:::-;17602:37;;17662:9;;;;;;;;;;;17654:27;;:37;17682:8;17654:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17527:176;17487:216;17723:7;:5;:7::i;:::-;17715:25;;:38;17741:11;17715:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17432:329;17401:360::o;11899:419::-;11980:23;12006:106;12048:4;12006:106;;;;;;;;;;;;;;;;;12014:5;12006:27;;;;:106;;;;;:::i;:::-;11980:132;;12147:1;12127:10;:17;:21;12123:188;;;12202:10;12191:30;;;;;;;;;;;;:::i;:::-;12165:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;12123:188;11969:349;11899:419;;:::o;1434:98::-;1492:7;1523:1;1519;:5;;;;:::i;:::-;1512:12;;1434:98;;;;:::o;6576:229::-;6713:12;6745:52;6767:6;6775:4;6781:1;6784:12;6745:21;:52::i;:::-;6738:59;;6576:229;;;;;:::o;7177:571::-;7347:12;7419:5;7394:21;:30;;7372:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;7509:18;7520:6;7509:10;:18::i;:::-;7501:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;7575:12;7589:23;7616:6;:11;;7635:5;7656:4;7616:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7574:97;;;;7689:51;7706:7;7715:10;7727:12;7689:16;:51::i;:::-;7682:58;;;;7177:571;;;;;;:::o;5765:196::-;5825:4;5842:12;5909:7;5897:20;5889:28;;5952:1;5945:4;:8;5938:15;;;5765:196;;;:::o;9186:550::-;9336:12;9365:7;9361:368;;;9396:10;9389:17;;;;9361:368;9463:1;9443:10;:17;:21;9439:279;;;9546:10;9540:17;9607:15;9594:10;9590:2;9586:19;9579:44;9439:279;9689:12;9682:20;;;;;;;;;;;:::i;:::-;;;;;;;;9186:550;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:118::-;2116:24;2134:5;2116:24;:::i;:::-;2111:3;2104:37;2029:118;;:::o;2153:222::-;2246:4;2284:2;2273:9;2269:18;2261:26;;2297:71;2365:1;2354:9;2350:17;2341:6;2297:71;:::i;:::-;2153:222;;;;:::o;2381:329::-;2440:6;2489:2;2477:9;2468:7;2464:23;2460:32;2457:119;;;2495:79;;:::i;:::-;2457:119;2615:1;2640:53;2685:7;2676:6;2665:9;2661:22;2640:53;:::i;:::-;2630:63;;2586:117;2381:329;;;;:::o;2716:90::-;2750:7;2793:5;2786:13;2779:21;2768:32;;2716:90;;;:::o;2812:116::-;2882:21;2897:5;2882:21;:::i;:::-;2875:5;2872:32;2862:60;;2918:1;2915;2908:12;2862:60;2812:116;:::o;2934:133::-;2977:5;3015:6;3002:20;2993:29;;3031:30;3055:5;3031:30;:::i;:::-;2934:133;;;;:::o;3073:468::-;3138:6;3146;3195:2;3183:9;3174:7;3170:23;3166:32;3163:119;;;3201:79;;:::i;:::-;3163:119;3321:1;3346:53;3391:7;3382:6;3371:9;3367:22;3346:53;:::i;:::-;3336:63;;3292:117;3448:2;3474:50;3516:7;3507:6;3496:9;3492:22;3474:50;:::i;:::-;3464:60;;3419:115;3073:468;;;;;:::o;3547:329::-;3606:6;3655:2;3643:9;3634:7;3630:23;3626:32;3623:119;;;3661:79;;:::i;:::-;3623:119;3781:1;3806:53;3851:7;3842:6;3831:9;3827:22;3806:53;:::i;:::-;3796:63;;3752:117;3547:329;;;;:::o;3882:109::-;3963:21;3978:5;3963:21;:::i;:::-;3958:3;3951:34;3882:109;;:::o;3997:210::-;4084:4;4122:2;4111:9;4107:18;4099:26;;4135:65;4197:1;4186:9;4182:17;4173:6;4135:65;:::i;:::-;3997:210;;;;:::o;4213:117::-;4322:1;4319;4312:12;4336:102;4377:6;4428:2;4424:7;4419:2;4412:5;4408:14;4404:28;4394:38;;4336:102;;;:::o;4444:180::-;4492:77;4489:1;4482:88;4589:4;4586:1;4579:15;4613:4;4610:1;4603:15;4630:281;4713:27;4735:4;4713:27;:::i;:::-;4705:6;4701:40;4843:6;4831:10;4828:22;4807:18;4795:10;4792:34;4789:62;4786:88;;;4854:18;;:::i;:::-;4786:88;4894:10;4890:2;4883:22;4673:238;4630:281;;:::o;4917:129::-;4951:6;4978:20;;:::i;:::-;4968:30;;5007:33;5035:4;5027:6;5007:33;:::i;:::-;4917:129;;;:::o;5052:311::-;5129:4;5219:18;5211:6;5208:30;5205:56;;;5241:18;;:::i;:::-;5205:56;5291:4;5283:6;5279:17;5271:25;;5351:4;5345;5341:15;5333:23;;5052:311;;;:::o;5369:117::-;5478:1;5475;5468:12;5509:710;5605:5;5630:81;5646:64;5703:6;5646:64;:::i;:::-;5630:81;:::i;:::-;5621:90;;5731:5;5760:6;5753:5;5746:21;5794:4;5787:5;5783:16;5776:23;;5847:4;5839:6;5835:17;5827:6;5823:30;5876:3;5868:6;5865:15;5862:122;;;5895:79;;:::i;:::-;5862:122;6010:6;5993:220;6027:6;6022:3;6019:15;5993:220;;;6102:3;6131:37;6164:3;6152:10;6131:37;:::i;:::-;6126:3;6119:50;6198:4;6193:3;6189:14;6182:21;;6069:144;6053:4;6048:3;6044:14;6037:21;;5993:220;;;5997:21;5611:608;;5509:710;;;;;:::o;6242:370::-;6313:5;6362:3;6355:4;6347:6;6343:17;6339:27;6329:122;;6370:79;;:::i;:::-;6329:122;6487:6;6474:20;6512:94;6602:3;6594:6;6587:4;6579:6;6575:17;6512:94;:::i;:::-;6503:103;;6319:293;6242:370;;;;:::o;6618:311::-;6695:4;6785:18;6777:6;6774:30;6771:56;;;6807:18;;:::i;:::-;6771:56;6857:4;6849:6;6845:17;6837:25;;6917:4;6911;6907:15;6899:23;;6618:311;;;:::o;6952:710::-;7048:5;7073:81;7089:64;7146:6;7089:64;:::i;:::-;7073:81;:::i;:::-;7064:90;;7174:5;7203:6;7196:5;7189:21;7237:4;7230:5;7226:16;7219:23;;7290:4;7282:6;7278:17;7270:6;7266:30;7319:3;7311:6;7308:15;7305:122;;;7338:79;;:::i;:::-;7305:122;7453:6;7436:220;7470:6;7465:3;7462:15;7436:220;;;7545:3;7574:37;7607:3;7595:10;7574:37;:::i;:::-;7569:3;7562:50;7641:4;7636:3;7632:14;7625:21;;7512:144;7496:4;7491:3;7487:14;7480:21;;7436:220;;;7440:21;7054:608;;6952:710;;;;;:::o;7685:370::-;7756:5;7805:3;7798:4;7790:6;7786:17;7782:27;7772:122;;7813:79;;:::i;:::-;7772:122;7930:6;7917:20;7955:94;8045:3;8037:6;8030:4;8022:6;8018:17;7955:94;:::i;:::-;7946:103;;7762:293;7685:370;;;;:::o;8061:1039::-;8188:6;8196;8204;8253:2;8241:9;8232:7;8228:23;8224:32;8221:119;;;8259:79;;:::i;:::-;8221:119;8407:1;8396:9;8392:17;8379:31;8437:18;8429:6;8426:30;8423:117;;;8459:79;;:::i;:::-;8423:117;8564:78;8634:7;8625:6;8614:9;8610:22;8564:78;:::i;:::-;8554:88;;8350:302;8719:2;8708:9;8704:18;8691:32;8750:18;8742:6;8739:30;8736:117;;;8772:79;;:::i;:::-;8736:117;8877:78;8947:7;8938:6;8927:9;8923:22;8877:78;:::i;:::-;8867:88;;8662:303;9004:2;9030:53;9075:7;9066:6;9055:9;9051:22;9030:53;:::i;:::-;9020:63;;8975:118;8061:1039;;;;;:::o;9106:759::-;9189:6;9197;9205;9213;9262:3;9250:9;9241:7;9237:23;9233:33;9230:120;;;9269:79;;:::i;:::-;9230:120;9389:1;9414:53;9459:7;9450:6;9439:9;9435:22;9414:53;:::i;:::-;9404:63;;9360:117;9516:2;9542:53;9587:7;9578:6;9567:9;9563:22;9542:53;:::i;:::-;9532:63;;9487:118;9644:2;9670:53;9715:7;9706:6;9695:9;9691:22;9670:53;:::i;:::-;9660:63;;9615:118;9772:2;9798:50;9840:7;9831:6;9820:9;9816:22;9798:50;:::i;:::-;9788:60;;9743:115;9106:759;;;;;;;:::o;9871:104::-;9936:6;9964:4;9954:14;;9871:104;;;:::o;9981:143::-;10078:11;10115:3;10100:18;;9981:143;;;;:::o;10130:98::-;10195:4;10218:3;10210:11;;10130:98;;;:::o;10234:108::-;10311:24;10329:5;10311:24;:::i;:::-;10306:3;10299:37;10234:108;;:::o;10348:179::-;10417:10;10438:46;10480:3;10472:6;10438:46;:::i;:::-;10516:4;10511:3;10507:14;10493:28;;10348:179;;;;:::o;10533:111::-;10601:4;10633;10628:3;10624:14;10616:22;;10533:111;;;:::o;10682:694::-;10818:52;10864:5;10818:52;:::i;:::-;10886:84;10963:6;10958:3;10886:84;:::i;:::-;10879:91;;10994:54;11042:5;10994:54;:::i;:::-;11071:7;11102:1;11087:282;11112:6;11109:1;11106:13;11087:282;;;11188:6;11182:13;11215:63;11274:3;11259:13;11215:63;:::i;:::-;11208:70;;11301:58;11352:6;11301:58;:::i;:::-;11291:68;;11147:222;11134:1;11131;11127:9;11122:14;;11087:282;;;11091:14;10794:582;;;10682:694;;:::o;11382:315::-;11521:4;11559:3;11548:9;11544:19;11536:27;;11573:117;11687:1;11676:9;11672:17;11663:6;11573:117;:::i;:::-;11382:315;;;;:::o;11703:894::-;11821:6;11829;11878:2;11866:9;11857:7;11853:23;11849:32;11846:119;;;11884:79;;:::i;:::-;11846:119;12032:1;12021:9;12017:17;12004:31;12062:18;12054:6;12051:30;12048:117;;;12084:79;;:::i;:::-;12048:117;12189:78;12259:7;12250:6;12239:9;12235:22;12189:78;:::i;:::-;12179:88;;11975:302;12344:2;12333:9;12329:18;12316:32;12375:18;12367:6;12364:30;12361:117;;;12397:79;;:::i;:::-;12361:117;12502:78;12572:7;12563:6;12552:9;12548:22;12502:78;:::i;:::-;12492:88;;12287:303;11703:894;;;;;:::o;12603:418::-;12740:4;12778:2;12767:9;12763:18;12755:26;;12791:71;12859:1;12848:9;12844:17;12835:6;12791:71;:::i;:::-;12872:66;12934:2;12923:9;12919:18;12910:6;12872:66;:::i;:::-;12948;13010:2;12999:9;12995:18;12986:6;12948:66;:::i;:::-;12603:418;;;;;;:::o;13027:249::-;13102:4;13192:18;13184:6;13181:30;13178:56;;;13214:18;;:::i;:::-;13178:56;13264:4;13256:6;13252:17;13244:25;;13027:249;;;:::o;13300:643::-;13394:5;13419:79;13435:62;13490:6;13435:62;:::i;:::-;13419:79;:::i;:::-;13410:88;;13518:5;13571:4;13563:6;13559:17;13551:6;13547:30;13600:3;13592:6;13589:15;13586:122;;;13619:79;;:::i;:::-;13586:122;13734:6;13717:220;13751:6;13746:3;13743:15;13717:220;;;13826:3;13855:37;13888:3;13876:10;13855:37;:::i;:::-;13850:3;13843:50;13922:4;13917:3;13913:14;13906:21;;13793:144;13777:4;13772:3;13768:14;13761:21;;13717:220;;;13721:21;13400:543;;13300:643;;;;;:::o;13967:339::-;14036:5;14085:3;14078:4;14070:6;14066:17;14062:27;14052:122;;14093:79;;:::i;:::-;14052:122;14197:4;14219:81;14296:3;14288:6;14280;14219:81;:::i;:::-;14210:90;;14042:264;13967:339;;;;:::o;14312:521::-;14403:6;14411;14460:3;14448:9;14439:7;14435:23;14431:33;14428:120;;;14467:79;;:::i;:::-;14428:120;14587:1;14612:53;14657:7;14648:6;14637:9;14633:22;14612:53;:::i;:::-;14602:63;;14558:117;14714:2;14740:76;14808:7;14799:6;14788:9;14784:22;14740:76;:::i;:::-;14730:86;;14685:141;14312:521;;;;;:::o;14839:180::-;14887:77;14884:1;14877:88;14984:4;14981:1;14974:15;15008:4;15005:1;14998:15;15025:102;15067:8;15114:5;15111:1;15107:13;15086:34;;15025:102;;;:::o;15133:848::-;15194:5;15201:4;15225:6;15216:15;;15249:5;15240:14;;15263:712;15284:1;15274:8;15271:15;15263:712;;;15379:4;15374:3;15370:14;15364:4;15361:24;15358:50;;;15388:18;;:::i;:::-;15358:50;15438:1;15428:8;15424:16;15421:451;;;15853:4;15846:5;15842:16;15833:25;;15421:451;15903:4;15897;15893:15;15885:23;;15933:32;15956:8;15933:32;:::i;:::-;15921:44;;15263:712;;;15133:848;;;;;;;:::o;15987:1073::-;16041:5;16232:8;16222:40;;16253:1;16244:10;;16255:5;;16222:40;16281:4;16271:36;;16298:1;16289:10;;16300:5;;16271:36;16367:4;16415:1;16410:27;;;;16451:1;16446:191;;;;16360:277;;16410:27;16428:1;16419:10;;16430:5;;;16446:191;16491:3;16481:8;16478:17;16475:43;;;16498:18;;:::i;:::-;16475:43;16547:8;16544:1;16540:16;16531:25;;16582:3;16575:5;16572:14;16569:40;;;16589:18;;:::i;:::-;16569:40;16622:5;;;16360:277;;16746:2;16736:8;16733:16;16727:3;16721:4;16718:13;16714:36;16696:2;16686:8;16683:16;16678:2;16672:4;16669:12;16665:35;16649:111;16646:246;;;16802:8;16796:4;16792:19;16783:28;;16837:3;16830:5;16827:14;16824:40;;;16844:18;;:::i;:::-;16824:40;16877:5;;16646:246;16917:42;16955:3;16945:8;16939:4;16936:1;16917:42;:::i;:::-;16902:57;;;;16991:4;16986:3;16982:14;16975:5;16972:25;16969:51;;;17000:18;;:::i;:::-;16969:51;17049:4;17042:5;17038:16;17029:25;;15987:1073;;;;;;:::o;17066:285::-;17126:5;17150:23;17168:4;17150:23;:::i;:::-;17142:31;;17194:27;17212:8;17194:27;:::i;:::-;17182:39;;17240:104;17277:66;17267:8;17261:4;17240:104;:::i;:::-;17231:113;;17066:285;;;;:::o;17357:180::-;17405:77;17402:1;17395:88;17502:4;17499:1;17492:15;17526:4;17523:1;17516:15;17543:180;17591:77;17588:1;17581:88;17688:4;17685:1;17678:15;17712:4;17709:1;17702:15;17729:185;17769:1;17786:20;17804:1;17786:20;:::i;:::-;17781:25;;17820:20;17838:1;17820:20;:::i;:::-;17815:25;;17859:1;17849:35;;17864:18;;:::i;:::-;17849:35;17906:1;17903;17899:9;17894:14;;17729:185;;;;:::o;17920:191::-;17960:3;17979:20;17997:1;17979:20;:::i;:::-;17974:25;;18013:20;18031:1;18013:20;:::i;:::-;18008:25;;18056:1;18053;18049:9;18042:16;;18077:3;18074:1;18071:10;18068:36;;;18084:18;;:::i;:::-;18068:36;17920:191;;;;:::o;18117:169::-;18201:11;18235:6;18230:3;18223:19;18275:4;18270:3;18266:14;18251:29;;18117:169;;;;:::o;18292:182::-;18432:34;18428:1;18420:6;18416:14;18409:58;18292:182;:::o;18480:366::-;18622:3;18643:67;18707:2;18702:3;18643:67;:::i;:::-;18636:74;;18719:93;18808:3;18719:93;:::i;:::-;18837:2;18832:3;18828:12;18821:19;;18480:366;;;:::o;18852:419::-;19018:4;19056:2;19045:9;19041:18;19033:26;;19105:9;19099:4;19095:20;19091:1;19080:9;19076:17;19069:47;19133:131;19259:4;19133:131;:::i;:::-;19125:139;;18852:419;;;:::o;19277:234::-;19417:34;19413:1;19405:6;19401:14;19394:58;19486:17;19481:2;19473:6;19469:15;19462:42;19277:234;:::o;19517:366::-;19659:3;19680:67;19744:2;19739:3;19680:67;:::i;:::-;19673:74;;19756:93;19845:3;19756:93;:::i;:::-;19874:2;19869:3;19865:12;19858:19;;19517:366;;;:::o;19889:419::-;20055:4;20093:2;20082:9;20078:18;20070:26;;20142:9;20136:4;20132:20;20128:1;20117:9;20113:17;20106:47;20170:131;20296:4;20170:131;:::i;:::-;20162:139;;19889:419;;;:::o;20314:173::-;20454:25;20450:1;20442:6;20438:14;20431:49;20314:173;:::o;20493:366::-;20635:3;20656:67;20720:2;20715:3;20656:67;:::i;:::-;20649:74;;20732:93;20821:3;20732:93;:::i;:::-;20850:2;20845:3;20841:12;20834:19;;20493:366;;;:::o;20865:419::-;21031:4;21069:2;21058:9;21054:18;21046:26;;21118:9;21112:4;21108:20;21104:1;21093:9;21089:17;21082:47;21146:131;21272:4;21146:131;:::i;:::-;21138:139;;20865:419;;;:::o;21290:86::-;21325:7;21365:4;21358:5;21354:16;21343:27;;21290:86;;;:::o;21382:118::-;21453:22;21469:5;21453:22;:::i;:::-;21446:5;21443:33;21433:61;;21490:1;21487;21480:12;21433:61;21382:118;:::o;21506:139::-;21561:5;21592:6;21586:13;21577:22;;21608:31;21633:5;21608:31;:::i;:::-;21506:139;;;;:::o;21651:347::-;21719:6;21768:2;21756:9;21747:7;21743:23;21739:32;21736:119;;;21774:79;;:::i;:::-;21736:119;21894:1;21919:62;21973:7;21964:6;21953:9;21949:22;21919:62;:::i;:::-;21909:72;;21865:126;21651:347;;;;:::o;22004:226::-;22144:34;22140:1;22132:6;22128:14;22121:58;22213:9;22208:2;22200:6;22196:15;22189:34;22004:226;:::o;22236:366::-;22378:3;22399:67;22463:2;22458:3;22399:67;:::i;:::-;22392:74;;22475:93;22564:3;22475:93;:::i;:::-;22593:2;22588:3;22584:12;22577:19;;22236:366;;;:::o;22608:419::-;22774:4;22812:2;22801:9;22797:18;22789:26;;22861:9;22855:4;22851:20;22847:1;22836:9;22832:17;22825:47;22889:131;23015:4;22889:131;:::i;:::-;22881:139;;22608:419;;;:::o;23033:226::-;23173:34;23169:1;23161:6;23157:14;23150:58;23242:9;23237:2;23229:6;23225:15;23218:34;23033:226;:::o;23265:366::-;23407:3;23428:67;23492:2;23487:3;23428:67;:::i;:::-;23421:74;;23504:93;23593:3;23504:93;:::i;:::-;23622:2;23617:3;23613:12;23606:19;;23265:366;;;:::o;23637:419::-;23803:4;23841:2;23830:9;23826:18;23818:26;;23890:9;23884:4;23880:20;23876:1;23865:9;23861:17;23854:47;23918:131;24044:4;23918:131;:::i;:::-;23910:139;;23637:419;;;:::o;24062:227::-;24202:34;24198:1;24190:6;24186:14;24179:58;24271:10;24266:2;24258:6;24254:15;24247:35;24062:227;:::o;24295:366::-;24437:3;24458:67;24522:2;24517:3;24458:67;:::i;:::-;24451:74;;24534:93;24623:3;24534:93;:::i;:::-;24652:2;24647:3;24643:12;24636:19;;24295:366;;;:::o;24667:419::-;24833:4;24871:2;24860:9;24856:18;24848:26;;24920:9;24914:4;24910:20;24906:1;24895:9;24891:17;24884:47;24948:131;25074:4;24948:131;:::i;:::-;24940:139;;24667:419;;;:::o;25092:173::-;25232:25;25228:1;25220:6;25216:14;25209:49;25092:173;:::o;25271:366::-;25413:3;25434:67;25498:2;25493:3;25434:67;:::i;:::-;25427:74;;25510:93;25599:3;25510:93;:::i;:::-;25628:2;25623:3;25619:12;25612:19;;25271:366;;;:::o;25643:419::-;25809:4;25847:2;25836:9;25832:18;25824:26;;25896:9;25890:4;25886:20;25882:1;25871:9;25867:17;25860:47;25924:131;26050:4;25924:131;:::i;:::-;25916:139;;25643:419;;;:::o;26068:173::-;26208:25;26204:1;26196:6;26192:14;26185:49;26068:173;:::o;26247:366::-;26389:3;26410:67;26474:2;26469:3;26410:67;:::i;:::-;26403:74;;26486:93;26575:3;26486:93;:::i;:::-;26604:2;26599:3;26595:12;26588:19;;26247:366;;;:::o;26619:419::-;26785:4;26823:2;26812:9;26808:18;26800:26;;26872:9;26866:4;26862:20;26858:1;26847:9;26843:17;26836:47;26900:131;27026:4;26900:131;:::i;:::-;26892:139;;26619:419;;;:::o;27044:176::-;27184:28;27180:1;27172:6;27168:14;27161:52;27044:176;:::o;27226:366::-;27368:3;27389:67;27453:2;27448:3;27389:67;:::i;:::-;27382:74;;27465:93;27554:3;27465:93;:::i;:::-;27583:2;27578:3;27574:12;27567:19;;27226:366;;;:::o;27598:419::-;27764:4;27802:2;27791:9;27787:18;27779:26;;27851:9;27845:4;27841:20;27837:1;27826:9;27822:17;27815:47;27879:131;28005:4;27879:131;:::i;:::-;27871:139;;27598:419;;;:::o;28023:224::-;28163:34;28159:1;28151:6;28147:14;28140:58;28232:7;28227:2;28219:6;28215:15;28208:32;28023:224;:::o;28253:366::-;28395:3;28416:67;28480:2;28475:3;28416:67;:::i;:::-;28409:74;;28492:93;28581:3;28492:93;:::i;:::-;28610:2;28605:3;28601:12;28594:19;;28253:366;;;:::o;28625:419::-;28791:4;28829:2;28818:9;28814:18;28806:26;;28878:9;28872:4;28868:20;28864:1;28853:9;28849:17;28842:47;28906:131;29032:4;28906:131;:::i;:::-;28898:139;;28625:419;;;:::o;29050:225::-;29190:34;29186:1;29178:6;29174:14;29167:58;29259:8;29254:2;29246:6;29242:15;29235:33;29050:225;:::o;29281:366::-;29423:3;29444:67;29508:2;29503:3;29444:67;:::i;:::-;29437:74;;29520:93;29609:3;29520:93;:::i;:::-;29638:2;29633:3;29629:12;29622:19;;29281:366;;;:::o;29653:419::-;29819:4;29857:2;29846:9;29842:18;29834:26;;29906:9;29900:4;29896:20;29892:1;29881:9;29877:17;29870:47;29934:131;30060:4;29934:131;:::i;:::-;29926:139;;29653:419;;;:::o;30078:143::-;30135:5;30166:6;30160:13;30151:22;;30182:33;30209:5;30182:33;:::i;:::-;30078:143;;;;:::o;30227:351::-;30297:6;30346:2;30334:9;30325:7;30321:23;30317:32;30314:119;;;30352:79;;:::i;:::-;30314:119;30472:1;30497:64;30553:7;30544:6;30533:9;30529:22;30497:64;:::i;:::-;30487:74;;30443:128;30227:351;;;;:::o;30584:410::-;30624:7;30647:20;30665:1;30647:20;:::i;:::-;30642:25;;30681:20;30699:1;30681:20;:::i;:::-;30676:25;;30736:1;30733;30729:9;30758:30;30776:11;30758:30;:::i;:::-;30747:41;;30937:1;30928:7;30924:15;30921:1;30918:22;30898:1;30891:9;30871:83;30848:139;;30967:18;;:::i;:::-;30848:139;30632:362;30584:410;;;;:::o;31000:442::-;31149:4;31187:2;31176:9;31172:18;31164:26;;31200:71;31268:1;31257:9;31253:17;31244:6;31200:71;:::i;:::-;31281:72;31349:2;31338:9;31334:18;31325:6;31281:72;:::i;:::-;31363;31431:2;31420:9;31416:18;31407:6;31363:72;:::i;:::-;31000:442;;;;;;:::o;31448:332::-;31569:4;31607:2;31596:9;31592:18;31584:26;;31620:71;31688:1;31677:9;31673:17;31664:6;31620:71;:::i;:::-;31701:72;31769:2;31758:9;31754:18;31745:6;31701:72;:::i;:::-;31448:332;;;;;:::o;31786:137::-;31840:5;31871:6;31865:13;31856:22;;31887:30;31911:5;31887:30;:::i;:::-;31786:137;;;;:::o;31929:345::-;31996:6;32045:2;32033:9;32024:7;32020:23;32016:32;32013:119;;;32051:79;;:::i;:::-;32013:119;32171:1;32196:61;32249:7;32240:6;32229:9;32225:22;32196:61;:::i;:::-;32186:71;;32142:125;31929:345;;;;:::o;32280:229::-;32420:34;32416:1;32408:6;32404:14;32397:58;32489:12;32484:2;32476:6;32472:15;32465:37;32280:229;:::o;32515:366::-;32657:3;32678:67;32742:2;32737:3;32678:67;:::i;:::-;32671:74;;32754:93;32843:3;32754:93;:::i;:::-;32872:2;32867:3;32863:12;32856:19;;32515:366;;;:::o;32887:419::-;33053:4;33091:2;33080:9;33076:18;33068:26;;33140:9;33134:4;33130:20;33126:1;33115:9;33111:17;33104:47;33168:131;33294:4;33168:131;:::i;:::-;33160:139;;32887:419;;;:::o;33312:194::-;33352:4;33372:20;33390:1;33372:20;:::i;:::-;33367:25;;33406:20;33424:1;33406:20;:::i;:::-;33401:25;;33450:1;33447;33443:9;33435:17;;33474:1;33468:4;33465:11;33462:37;;;33479:18;;:::i;:::-;33462:37;33312:194;;;;:::o;33512:225::-;33652:34;33648:1;33640:6;33636:14;33629:58;33721:8;33716:2;33708:6;33704:15;33697:33;33512:225;:::o;33743:366::-;33885:3;33906:67;33970:2;33965:3;33906:67;:::i;:::-;33899:74;;33982:93;34071:3;33982:93;:::i;:::-;34100:2;34095:3;34091:12;34084:19;;33743:366;;;:::o;34115:419::-;34281:4;34319:2;34308:9;34304:18;34296:26;;34368:9;34362:4;34358:20;34354:1;34343:9;34339:17;34332:47;34396:131;34522:4;34396:131;:::i;:::-;34388:139;;34115:419;;;:::o;34540:179::-;34680:31;34676:1;34668:6;34664:14;34657:55;34540:179;:::o;34725:366::-;34867:3;34888:67;34952:2;34947:3;34888:67;:::i;:::-;34881:74;;34964:93;35053:3;34964:93;:::i;:::-;35082:2;35077:3;35073:12;35066:19;;34725:366;;;:::o;35097:419::-;35263:4;35301:2;35290:9;35286:18;35278:26;;35350:9;35344:4;35340:20;35336:1;35325:9;35321:17;35314:47;35378:131;35504:4;35378:131;:::i;:::-;35370:139;;35097:419;;;:::o;35522:98::-;35573:6;35607:5;35601:12;35591:22;;35522:98;;;:::o;35626:147::-;35727:11;35764:3;35749:18;;35626:147;;;;:::o;35779:246::-;35860:1;35870:113;35884:6;35881:1;35878:13;35870:113;;;35969:1;35964:3;35960:11;35954:18;35950:1;35945:3;35941:11;35934:39;35906:2;35903:1;35899:10;35894:15;;35870:113;;;36017:1;36008:6;36003:3;35999:16;35992:27;35841:184;35779:246;;;:::o;36031:386::-;36135:3;36163:38;36195:5;36163:38;:::i;:::-;36217:88;36298:6;36293:3;36217:88;:::i;:::-;36210:95;;36314:65;36372:6;36367:3;36360:4;36353:5;36349:16;36314:65;:::i;:::-;36404:6;36399:3;36395:16;36388:23;;36139:278;36031:386;;;;:::o;36423:271::-;36553:3;36575:93;36664:3;36655:6;36575:93;:::i;:::-;36568:100;;36685:3;36678:10;;36423:271;;;;:::o;36700:99::-;36752:6;36786:5;36780:12;36770:22;;36700:99;;;:::o;36805:377::-;36893:3;36921:39;36954:5;36921:39;:::i;:::-;36976:71;37040:6;37035:3;36976:71;:::i;:::-;36969:78;;37056:65;37114:6;37109:3;37102:4;37095:5;37091:16;37056:65;:::i;:::-;37146:29;37168:6;37146:29;:::i;:::-;37141:3;37137:39;37130:46;;36897:285;36805:377;;;;:::o;37188:313::-;37301:4;37339:2;37328:9;37324:18;37316:26;;37388:9;37382:4;37378:20;37374:1;37363:9;37359:17;37352:47;37416:78;37489:4;37480:6;37416:78;:::i;:::-;37408:86;;37188:313;;;;:::o

Swarm Source

ipfs://616b873ba861b6b630d9de75e0ca701ce752aaea3a764754a859ebdaf637df14

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.