ETH Price: $2,947.56 (-0.92%)
Gas: 0.03 Gwei
 

Overview

ETH Balance

0.126824608598416517 ETH

Eth Value

$373.82 (@ $2,947.56/ETH)

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer226202282025-06-02 23:22:47203 days ago1748906567IN
0x695A9C59...7982B170A
0.0001 ETH0.000043542.07339817
Claim220521862025-03-15 12:09:23283 days ago1742040563IN
0x695A9C59...7982B170A
0 ETH0.000213940.88514861
Claim219519692025-03-01 12:18:47297 days ago1740831527IN
0x695A9C59...7982B170A
0 ETH0.000329291.36238083
Claim216828342025-01-22 21:52:23334 days ago1737582743IN
0x695A9C59...7982B170A
0 ETH0.002432689.3998025
Claim214007462024-12-14 12:26:35374 days ago1734179195IN
0x695A9C59...7982B170A
0 ETH0.002143728.86926913
Claim213350572024-12-05 8:19:23383 days ago1733386763IN
0x695A9C59...7982B170A
0 ETH0.0044138518.26155865
Claim213350482024-12-05 8:17:35383 days ago1733386655IN
0x695A9C59...7982B170A
0 ETH0.0044799618.53507514
Claim212726472024-11-26 14:54:11392 days ago1732632851IN
0x695A9C59...7982B170A
0 ETH0.0055191822.83467444
Claim210786912024-10-30 13:15:11419 days ago1730294111IN
0x695A9C59...7982B170A
0 ETH0.0033993514.06425352
Claim210332042024-10-24 4:55:35425 days ago1729745735IN
0x695A9C59...7982B170A
0 ETH0.00136245.63672071
Claim210307412024-10-23 20:40:11425 days ago1729716011IN
0x695A9C59...7982B170A
0 ETH0.0030515412.62524602
Claim210066702024-10-20 12:03:47429 days ago1729425827IN
0x695A9C59...7982B170A
0 ETH0.002541649.82079013
Claim209616192024-10-14 5:07:11435 days ago1728882431IN
0x695A9C59...7982B170A
0 ETH0.002262869.36220504
Claim209494552024-10-12 12:15:11437 days ago1728735311IN
0x695A9C59...7982B170A
0 ETH0.0025846410.69350374
Claim208933292024-10-04 16:22:47445 days ago1728058967IN
0x695A9C59...7982B170A
0 ETH0.0040404616.71672849
Claim208931052024-10-04 15:37:59445 days ago1728056279IN
0x695A9C59...7982B170A
0 ETH0.0025354110.48984413
Claim208120812024-09-23 8:25:47456 days ago1727079947IN
0x695A9C59...7982B170A
0 ETH0.0054006822.3444001
Claim207629682024-09-16 11:45:59463 days ago1726487159IN
0x695A9C59...7982B170A
0 ETH0.001392185.75991657
Claim207629652024-09-16 11:45:23463 days ago1726487123IN
0x695A9C59...7982B170A
0 ETH0.001491325.76243188
Claim207575762024-09-15 17:41:35464 days ago1726422095IN
0x695A9C59...7982B170A
0 ETH0.00070952.93544632
Claim207546632024-09-15 7:56:47464 days ago1726387007IN
0x695A9C59...7982B170A
0 ETH0.000434791.79887669
Claim207462792024-09-14 3:50:35465 days ago1726285835IN
0x695A9C59...7982B170A
0 ETH0.000431451.66710589
Claim207385712024-09-13 2:01:23466 days ago1726192883IN
0x695A9C59...7982B170A
0 ETH0.000696682.88240708
Claim207119512024-09-09 8:46:47470 days ago1725871607IN
0x695A9C59...7982B170A
0 ETH0.000802713.3210816
Claim207027372024-09-08 1:54:35471 days ago1725760475IN
0x695A9C59...7982B170A
0 ETH0.000329351.36263658
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer220521862025-03-15 12:09:23283 days ago1742040563
0x695A9C59...7982B170A
0.00006966 ETH
Transfer219519692025-03-01 12:18:47297 days ago1740831527
0x695A9C59...7982B170A
0.00019521 ETH
Transfer216828342025-01-22 21:52:23334 days ago1737582743
0x695A9C59...7982B170A
0.00004339 ETH
Transfer214007462024-12-14 12:26:35374 days ago1734179195
0x695A9C59...7982B170A
0.00023394 ETH
Transfer213350572024-12-05 8:19:23383 days ago1733386763
0x695A9C59...7982B170A
0.18767068 ETH
Transfer213350482024-12-05 8:17:35383 days ago1733386655
0x695A9C59...7982B170A
0.2416703 ETH
Transfer212726472024-11-26 14:54:11392 days ago1732632851
0x695A9C59...7982B170A
0.00205691 ETH
Transfer210786912024-10-30 13:15:11419 days ago1730294111
0x695A9C59...7982B170A
0.00167108 ETH
Transfer210332042024-10-24 4:55:35425 days ago1729745735
0x695A9C59...7982B170A
0.00051745 ETH
Transfer210307412024-10-23 20:40:11425 days ago1729716011
0x695A9C59...7982B170A
0.00027502 ETH
Transfer210066702024-10-20 12:03:47429 days ago1729425827
0x695A9C59...7982B170A
0.00294529 ETH
Transfer209616192024-10-14 5:07:11435 days ago1728882431
0x695A9C59...7982B170A
0.00685075 ETH
Transfer209494552024-10-12 12:15:11437 days ago1728735311
0x695A9C59...7982B170A
0.00150857 ETH
Transfer208933292024-10-04 16:22:47445 days ago1728058967
0x695A9C59...7982B170A
0.01047721 ETH
Transfer208931052024-10-04 15:37:59445 days ago1728056279
0x695A9C59...7982B170A
0.00046054 ETH
Transfer208120812024-09-23 8:25:47456 days ago1727079947
0x695A9C59...7982B170A
0.02442281 ETH
Transfer207629682024-09-16 11:45:59463 days ago1726487159
0x695A9C59...7982B170A
0.00392665 ETH
Transfer207629652024-09-16 11:45:23463 days ago1726487123
0x695A9C59...7982B170A
0.00127316 ETH
Transfer207575762024-09-15 17:41:35464 days ago1726422095
0x695A9C59...7982B170A
0.00001657 ETH
Transfer207546632024-09-15 7:56:47464 days ago1726387007
0x695A9C59...7982B170A
0.00031455 ETH
Transfer207462792024-09-14 3:50:35465 days ago1726285835
0x695A9C59...7982B170A
0.00000331 ETH
Transfer207385712024-09-13 2:01:23466 days ago1726192883
0x695A9C59...7982B170A
0.00220421 ETH
Transfer207119512024-09-09 8:46:47470 days ago1725871607
0x695A9C59...7982B170A
0.02647117 ETH
Transfer207027372024-09-08 1:54:35471 days ago1725760475
0x695A9C59...7982B170A
0.0000457 ETH
Transfer206390542024-08-30 4:38:23480 days ago1724992703
0x695A9C59...7982B170A
0.00212895 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
oGPUStaking

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2024-04-14
*/

/* 
* OpenGPU Network World's Leading Decentralized GPU Ecosystem
* 
* Website:      https://opengpu.network/
* Staking:      https://stake.opengpu.network/
* Telegram:     https://t.me/opengpuportal
* Twitter:      https://x.com/opengpunetwork
* Whitepaper:   https://opengpu.network/docs/whitepaper.pdf
* Yellowpaper:  https://opengpu.network/docs/yellowpaper.pdf
*
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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);
}


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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
 * consider using {ReentrancyGuardTransient} instead.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract oGPUStaking is Ownable, ReentrancyGuard {
    IERC20  public oGPU;
    uint256 public gpuId;

    struct UserInfo {
        address user;           // User address
        uint256 poolId;         // Pool ID
        uint256 amount;         // How many oGPU tokens the user has provided.
        uint256 stakeTime;      // Time when user staked
        uint256 points;         // How many points the user has, accumulated.
        uint256 gpuId;          // GPU gpuId
        bool    claimed;        // default false
        uint256 lastBoostTime;  // Last time user boosted
        uint256 claimedETH;     // Claimed ETH
        uint256 claimedoGPU;    // Claimed oGPU
    }

    struct UserInfoWithShares {
        address user;           // User address
        uint256 poolId;         // Pool ID
        uint256 amount;         // How many oGPU tokens the user has provided.
        uint256 stakeTime;      // Time when user staked
        uint256 points;         // How many points the user has, accumulated.
        uint256 gpuId;          // GPU gpuId
        bool    claimed;        // default false
        uint256 lastBoostTime;  // Last time user boosted
        uint256 claimedETH;     // Claimed ETH
        uint256 claimedoGPU;    // Claimed oGPU
        uint256 share;          // User share of ETH
    }

    struct PoolInfo {
        uint256 poolId;             // Pool ID
        uint256 totalPoints;        // Total points accumulated by all users
        uint256 totalAmount;        // Total amount of oGPU tokens staked
        uint256 totalETHStaked;      // Total ETH share
        uint256 startTime;          // Start time of the pool
        uint256 duration;           // Duration of the pool
        uint256 endTime;            // End time of the pools
        bool    ended;              // default false
    }

    PoolInfo[] public poolInfo;
    mapping (uint256 => mapping (address => UserInfo)) public userInfoMap;
    mapping (uint256 => UserInfo[]) public poolUsers;
    mapping (address => mapping (uint256 => uint256)) public userPoolIndex;

    event EmergencyWithdraw(address indexed user, uint256 poolId, uint256 amount);
    event Claimed(address indexed user, uint256 poolId, uint256 amount);
    event PoolEnded(uint256 poolId, uint256 endTime);
    event Staked(address indexed user, uint256 amount, uint256 gpuType);
    event PoolCreated(uint256 stakeID, uint256 stakingStartTimestamp, uint256 duration, uint256 stakingEndTimestamp);

    constructor(IERC20 _oGPU) {
        oGPU = _oGPU;
    }

    receive() external payable {
    }

    function createPool(uint256 _duration) external onlyOwner {
        require(_duration <= 90 days, "Staking: duration should be less than 90 days");
        uint256 _poolId = poolInfo.length;
        uint256 _startTime = block.timestamp;
        uint256 _endTime = _startTime + _duration;


        poolInfo.push(PoolInfo({
            poolId: _poolId,
            totalPoints: 0,
            totalAmount: 0,
            totalETHStaked: 0,
            startTime: _startTime,
            duration: _duration,
            endTime: _endTime,
            ended: false
        }));
        emit PoolCreated(_poolId, _startTime, _duration, _endTime);
    }

    function stake(uint256 _poolId, uint256 _amount, uint256 _gpuID) external nonReentrant {
        require(_amount > 0, "Staking: amount must be greater than 0");
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        PoolInfo storage pool = poolInfo[_poolId];
        require(block.timestamp >= pool.startTime, "Staking: pool not started");
        require(block.timestamp < pool.endTime, "Staking: pool ended");
        require(!pool.ended, "Staking: pool ended");
        oGPU.transferFrom(msg.sender, address(this), _amount);
        UserInfo storage user = userInfoMap[_poolId][msg.sender];
        // if user.amount is zero and userpoolindex is zero, then user is new
        if (user.amount == 0 && userPoolIndex[msg.sender][_poolId] == 0) {
            user.user = msg.sender;
            user.stakeTime = block.timestamp;
            user.poolId = _poolId;
            user.lastBoostTime = block.timestamp;
            user.gpuId = _gpuID;
            user.amount = _amount;
            uint256 totalStakeTime = pool.endTime - block.timestamp;
            uint256 _points = _amount * (totalStakeTime / 2 days + 1);
            pool.totalAmount = pool.totalAmount + _amount;
            if (_gpuID < 130) {
                _points += (_points * 15) / 100;
            } else if (_gpuID < 360) {
                _points += (_points * 10) / 100; 
            } else {
                _points += (_points * 5) / 100;
            }
            user.points = _points;
            pool.totalPoints = pool.totalPoints + user.points;
            uint256 userLength = poolUsers[_poolId].length;
            poolUsers[_poolId].push(user);
            userPoolIndex[msg.sender][_poolId] = userLength;

        } else {
            user.gpuId = _gpuID;
            user.amount = user.amount + _amount;
            uint256 totalStakeTime = pool.endTime - block.timestamp;
            uint256 _points = _amount * (totalStakeTime / 2 days + 1);

            if (_gpuID < 130) {
                _points += (_points * 15) / 100;
            } else if (_gpuID < 360) {
                _points += (_points * 10) / 100; 
            } else {
                _points += (_points * 5) / 100;
            }
            user.points += _points;
            pool.totalAmount = pool.totalAmount + _amount;
            pool.totalPoints = pool.totalPoints +  _points;
            uint256 userIndex = userPoolIndex[msg.sender][_poolId];
            poolUsers[_poolId][userIndex] = user;
        }
        emit Staked(msg.sender, _poolId, _amount);
    }

    function boostGPU(uint256 _poolId) external nonReentrant{
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        UserInfo storage user = userInfoMap[_poolId][msg.sender];
        require(user.amount > 0, "Staking: user has no stake");
        require(block.timestamp < poolInfo[_poolId].endTime, "Staking: pool ended");
        require(!user.claimed, "Staking: user already claimed");
        require(!poolInfo[_poolId].ended, "Staking: pool ended");
        // user can boost once every 24 hours
        require(block.timestamp - user.lastBoostTime >= 1 days, "Staking: user can boost once every 24 hours");
        user.lastBoostTime = block.timestamp;
        // update pool points
        PoolInfo storage pool = poolInfo[_poolId];
        pool.totalPoints -= user.points;
        uint256 _gpuID = user.gpuId;
        if (_gpuID < 130) {
            user.points += (user.points * 3) / 100;
        } else if (_gpuID < 360) {
            user.points += (user.points * 2) / 100; 
        } else {
            user.points += user.points / 100;
        }

        pool.totalPoints += user.points;
        uint256 userIndex = userPoolIndex[msg.sender][_poolId];
        poolUsers[_poolId][userIndex] = user;
    }

    function claim(uint256 _poolId) external nonReentrant {
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        PoolInfo storage pool = poolInfo[_poolId];
        UserInfo storage user = userInfoMap[_poolId][msg.sender];
        require(pool.ended, "Staking: claim period is not started");
        require(user.amount > 0, "Staking: user has no stake");
        require(block.timestamp >= pool.endTime, "Staking: pool not ended");
        require(!user.claimed, "Staking: user already claimed");

        user.claimed = true;
        uint256 _amount = user.amount;
        user.claimedoGPU = _amount;
        user.amount = 0;
        oGPU.transfer(msg.sender, _amount);
        uint256 _points = user.points;
        user.points = 0;
        // userpoolindex
        uint256 userIndex = userPoolIndex[msg.sender][_poolId];
        uint256 _share = (_points * pool.totalETHStaked) / pool.totalPoints;
        user.claimedETH = _share;
        poolUsers[_poolId][userIndex] = user;
        payable(msg.sender).transfer(_share);
        emit Claimed(msg.sender, _poolId, _amount);
    }

    function emergencyWithdraw(uint256 _poolId) external nonReentrant {
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        PoolInfo storage pool = poolInfo[_poolId];
        UserInfo storage user = userInfoMap[_poolId][msg.sender];
        require(user.amount > 0, "Staking: user has no stake");
        require(block.timestamp < pool.endTime, "Staking: pool ended");
        uint256 _amount = user.amount;
        pool.totalAmount -= _amount;
        pool.totalPoints -= user.points;
        user.amount = 0;
        user.points = 0;
        uint256 userIndex = userPoolIndex[msg.sender][_poolId];
        poolUsers[_poolId][userIndex] = user;
        oGPU.transfer(msg.sender, (_amount * 90) / 100);
        oGPU.transfer(address(owner()),(_amount * 10)/ 100);
        emit EmergencyWithdraw(msg.sender, _poolId, _amount);
    }

    function endPool(uint256 _poolId) external onlyOwner {
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        PoolInfo storage pool = poolInfo[_poolId];
        require(block.timestamp >= pool.endTime, "Staking: pool not ended");
        pool.ended = true;
        emit PoolEnded(_poolId, block.timestamp);
    }

    function getAllPools() external view returns (PoolInfo[] memory) {
        return poolInfo;
    }

    function getUserInfo(uint256 _poolId, address _user) external view returns (UserInfo memory) {
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        return userInfoMap[_poolId][_user];
    }

    function getPoolUsers(uint256 _poolId) external view returns (UserInfo[] memory) {
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        return poolUsers[_poolId];
    }

    function getPoolUsersWithShares(uint256 _poolId) external view returns (UserInfoWithShares[] memory) {
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        if (poolInfo[_poolId].totalPoints == 0) {
            return new UserInfoWithShares[](0);
        }
        UserInfo[] memory users = poolUsers[_poolId];
        UserInfoWithShares[] memory usersWithShares = new UserInfoWithShares[](users.length);
        for (uint256 i = 0; i < users.length; i++) {
            UserInfo memory user = users[i];
            usersWithShares[i] = UserInfoWithShares({
                user: user.user,
                poolId: user.poolId,
                amount: user.amount,
                stakeTime: user.stakeTime,
                points: user.points,
                gpuId: user.gpuId,
                claimed: user.claimed,
                lastBoostTime: user.lastBoostTime,
                claimedETH: user.claimedETH,
                claimedoGPU: user.claimedoGPU,
                share: (user.points * poolInfo[_poolId].totalETHStaked) / poolInfo[_poolId].totalPoints
            });
        }
        return usersWithShares;
    }

    function getPoolUsersWithSharesRange(uint256 _poolId, uint256 _start, uint256 _end) external view returns (UserInfoWithShares[] memory) {
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        require(_start < poolUsers[_poolId].length, "Staking: invalid start index");
        require(_end < poolUsers[_poolId].length, "Staking: invalid end index");
        UserInfo[] memory users = poolUsers[_poolId];
        UserInfoWithShares[] memory usersWithShares = new UserInfoWithShares[](_end - _start + 1);
        for (uint256 i = _start; i <= _end; i++) {
            UserInfo memory user = users[i];
            usersWithShares[i - _start] = UserInfoWithShares({
                user: user.user,
                poolId: user.poolId,
                amount: user.amount,
                stakeTime: user.stakeTime,
                points: user.points,
                gpuId: user.gpuId,
                claimed: user.claimed,
                lastBoostTime: user.lastBoostTime,
                claimedETH: user.claimedETH,
                claimedoGPU: user.claimedoGPU,
                share: (user.points * poolInfo[_poolId].totalETHStaked) / poolInfo[_poolId].totalPoints
            });
        }
        return usersWithShares;
    }

    function getPoolUser(uint256 _poolId, address _user) external view returns (UserInfo memory) {
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        return userInfoMap[_poolId][_user];
    }

    function getPoolUsersLength(uint256 _poolId) external view returns (uint256) {
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        return poolUsers[_poolId].length;
    }

    function getPoolUserReward(uint256 _poolId, address _user) external view returns (uint256) {
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        UserInfo storage user = userInfoMap[_poolId][_user];
        PoolInfo storage pool = poolInfo[_poolId];

        // Reward on ETH is calculated based on the points
        uint256 _points = user.points;
        uint256 _share = (_points * pool.totalETHStaked) / pool.totalPoints;
        return _share;
    }

    function addETHToPool(uint256 _poolId, uint256 _amount) external payable onlyOwner {
        require(_amount > 0, "Staking: amount must be greater than 0");
        require(_amount == msg.value, "Staking: invalid amount");
        require(_poolId < poolInfo.length, "Staking: invalid pool id");
        PoolInfo storage pool = poolInfo[_poolId];
        require(block.timestamp >= pool.startTime, "Staking: pool not started");
        require(block.timestamp < pool.endTime, "Staking: pool ended");
        require(!pool.ended, "Staking: pool ended");
        pool.totalETHStaked += _amount;
    }

    // retrieve all ETH from the contract
    function retrieveETH() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    // retrieve all oGPU from the contract
    function retrieveoGPU() external onlyOwner {
        oGPU.transfer(msg.sender, oGPU.balanceOf(address(this)));
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract IERC20","name":"_oGPU","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"stakeID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingStartTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingEndTimestamp","type":"uint256"}],"name":"PoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"PoolEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gpuType","type":"uint256"}],"name":"Staked","type":"event"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addETHToPool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"boostGPU","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"createPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"endPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllPools","outputs":[{"components":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"totalPoints","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"totalETHStaked","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bool","name":"ended","type":"bool"}],"internalType":"struct oGPUStaking.PoolInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getPoolUser","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"uint256","name":"lastBoostTime","type":"uint256"},{"internalType":"uint256","name":"claimedETH","type":"uint256"},{"internalType":"uint256","name":"claimedoGPU","type":"uint256"}],"internalType":"struct oGPUStaking.UserInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getPoolUserReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"getPoolUsers","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"uint256","name":"lastBoostTime","type":"uint256"},{"internalType":"uint256","name":"claimedETH","type":"uint256"},{"internalType":"uint256","name":"claimedoGPU","type":"uint256"}],"internalType":"struct oGPUStaking.UserInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"getPoolUsersLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"getPoolUsersWithShares","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"uint256","name":"lastBoostTime","type":"uint256"},{"internalType":"uint256","name":"claimedETH","type":"uint256"},{"internalType":"uint256","name":"claimedoGPU","type":"uint256"},{"internalType":"uint256","name":"share","type":"uint256"}],"internalType":"struct oGPUStaking.UserInfoWithShares[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"}],"name":"getPoolUsersWithSharesRange","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"uint256","name":"lastBoostTime","type":"uint256"},{"internalType":"uint256","name":"claimedETH","type":"uint256"},{"internalType":"uint256","name":"claimedoGPU","type":"uint256"},{"internalType":"uint256","name":"share","type":"uint256"}],"internalType":"struct oGPUStaking.UserInfoWithShares[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getUserInfo","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"uint256","name":"lastBoostTime","type":"uint256"},{"internalType":"uint256","name":"claimedETH","type":"uint256"},{"internalType":"uint256","name":"claimedoGPU","type":"uint256"}],"internalType":"struct oGPUStaking.UserInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gpuId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oGPU","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"totalPoints","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"totalETHStaked","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bool","name":"ended","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolUsers","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"uint256","name":"lastBoostTime","type":"uint256"},{"internalType":"uint256","name":"claimedETH","type":"uint256"},{"internalType":"uint256","name":"claimedoGPU","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"retrieveETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"retrieveoGPU","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gpuID","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfoMap","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"uint256","name":"lastBoostTime","type":"uint256"},{"internalType":"uint256","name":"claimedETH","type":"uint256"},{"internalType":"uint256","name":"claimedoGPU","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userPoolIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50604051620052c3380380620052c38339818101604052810190620000379190620001bc565b6000620000496200013660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620001ee565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001708262000143565b9050919050565b6000620001848262000163565b9050919050565b620001968162000177565b8114620001a257600080fd5b50565b600081519050620001b6816200018b565b92915050565b600060208284031215620001d557620001d46200013e565b5b6000620001e584828501620001a5565b91505092915050565b6150c580620001fe6000396000f3fe6080604052600436106101855760003560e01c806373274b14116100d1578063a638f2e21161008a578063d13284b111610064578063d13284b1146105df578063d5b014c31461060a578063d88ff1f414610621578063f2fde38b1461064c5761018c565b8063a638f2e214610571578063b49947e11461059a578063c964ee9f146105b65761018c565b806373274b141461043b57806373e22641146104785780638259e6a0146104a35780638da5cb5b146104cc5780638eb35251146104f7578063a17be43a146105345761018c565b80634ccb529a1161013e5780635e61b984116101185780635e61b984146103785780635f02c145146103b55780636a23d7f6146103fb578063715018a6146104245761018c565b80634ccb529a146102fb5780635237f731146103125780635312ea8e1461034f5761018c565b80630f2b7cc9146101915780631069f3b5146101d75780631526fe27146102145780632dd896991461025857806335e2ce2114610295578063379607f5146102d25761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101b860048036038101906101b39190613c7c565b610675565b6040516101ce9a99989796959493929190613d27565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f99190613def565b610713565b60405161020b9190613f28565b60405180910390f35b34801561022057600080fd5b5061023b60048036038101906102369190613f44565b610887565b60405161024f989796959493929190613f71565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190613fef565b6108ec565b60405161028c91906141d3565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190613f44565b610ceb565b6040516102c991906141d3565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f49190613f44565b6110a0565b005b34801561030757600080fd5b506103106115cb565b005b34801561031e57600080fd5b5061033960048036038101906103349190613f44565b61179e565b6040516103469190614371565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613f44565b611919565b005b34801561038457600080fd5b5061039f600480360381019061039a9190613def565b611e0e565b6040516103ac9190613f28565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d79190613def565b611f82565b6040516103f29a99989796959493929190613d27565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190613f44565b612010565b005b34801561043057600080fd5b50610439612528565b005b34801561044757600080fd5b50610462600480360381019061045d9190613f44565b61267b565b60405161046f9190614393565b60405180910390f35b34801561048457600080fd5b5061048d6126e2565b60405161049a9190614393565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190613f44565b6126e8565b005b3480156104d857600080fd5b506104e16128f8565b6040516104ee91906143ae565b60405180910390f35b34801561050357600080fd5b5061051e60048036038101906105199190613def565b612921565b60405161052b9190614393565b60405180910390f35b34801561054057600080fd5b5061055b600480360381019061055691906143c9565b612a1d565b6040516105689190614393565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190613fef565b612a42565b005b6105b460048036038101906105af9190613c7c565b61335e565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613f44565b6135e4565b005b3480156105eb57600080fd5b506105f4613787565b6040516106019190614468565b60405180910390f35b34801561061657600080fd5b5061061f6137ad565b005b34801561062d57600080fd5b5061063661388b565b60405161064391906145d5565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e91906145f7565b61394c565b005b6006602052816000526040600020818154811061069157600080fd5b90600052602060002090600a0201600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050154908060060160009054906101000a900460ff1690806007015490806008015490806009015490508a565b61071b613b64565b6004805490508310610762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075990614681565b60405180910390fd5b6005600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff161515151581526020016007820154815260200160088201548152602001600982015481525050905092915050565b6004818154811061089757600080fd5b90600052602060002090600802016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070160009054906101000a900460ff16905088565b60606004805490508410610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c90614681565b60405180910390fd5b6006600085815260200190815260200160002080549050831061098d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610984906146ed565b60405180910390fd5b600660008581526020019081526020016000208054905082106109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc90614759565b60405180910390fd5b600060066000868152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610b0e57838290600052602060002090600a0201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16151515158152602001600782015481526020016008820154815260200160098201548152505081526020019060010190610a1a565b505050509050600060018585610b2491906147a8565b610b2e91906147dc565b67ffffffffffffffff811115610b4757610b46614810565b5b604051908082528060200260200182016040528015610b8057816020015b610b6d613bcf565b815260200190600190039081610b655790505b50905060008590505b848111610cde576000838281518110610ba557610ba461483f565b5b60200260200101519050604051806101600160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a0015181526020018260c00151151581526020018260e0015181526020018261010001518152602001826101200151815260200160048a81548110610c4d57610c4c61483f565b5b90600052602060002090600802016001015460048b81548110610c7357610c7261483f565b5b9060005260206000209060080201600301548460800151610c94919061486e565b610c9e91906148df565b815250838884610cae91906147a8565b81518110610cbf57610cbe61483f565b5b6020026020010181905250508080610cd690614910565b915050610b89565b5080925050509392505050565b60606004805490508210610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90614681565b60405180910390fd5b600060048381548110610d4a57610d4961483f565b5b90600052602060002090600802016001015403610dbd57600067ffffffffffffffff811115610d7c57610d7b614810565b5b604051908082528060200260200182016040528015610db557816020015b610da2613bcf565b815260200190600190039081610d9a5790505b50905061109b565b600060066000848152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610ee657838290600052602060002090600a0201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16151515158152602001600782015481526020016008820154815260200160098201548152505081526020019060010190610df2565b5050505090506000815167ffffffffffffffff811115610f0957610f08614810565b5b604051908082528060200260200182016040528015610f4257816020015b610f2f613bcf565b815260200190600190039081610f275790505b50905060005b8251811015611094576000838281518110610f6657610f6561483f565b5b60200260200101519050604051806101600160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a0015181526020018260c00151151581526020018260e001518152602001826101000151815260200182610120015181526020016004888154811061100e5761100d61483f565b5b906000526020600020906008020160010154600489815481106110345761103361483f565b5b9060005260206000209060080201600301548460800151611055919061486e565b61105f91906148df565b8152508383815181106110755761107461483f565b5b602002602001018190525050808061108c90614910565b915050610f48565b5080925050505b919050565b6110a8613b0d565b60048054905081106110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690614681565b60405180910390fd5b6000600482815481106111055761110461483f565b5b9060005260206000209060080201905060006005600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160070160009054906101000a900460ff166111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b1906149ca565b60405180910390fd5b6000816002015411611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890614a36565b60405180910390fd5b8160060154421015611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90614aa2565b60405180910390fd5b8060060160009054906101000a900460ff161561129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190614b0e565b60405180910390fd5b60018160060160006101000a81548160ff02191690831515021790555060008160020154905080826009018190555060008260020181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611330929190614b2e565b6020604051808303816000875af115801561134f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113739190614b83565b50600082600401549050600083600401819055506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020549050600085600101548660030154846113f3919061486e565b6113fd91906148df565b90508085600801819055508460066000898152602001908152602001600020838154811061142e5761142d61483f565b5b90600052602060002090600a02016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501556006820160009054906101000a900460ff168160060160006101000a81548160ff0219169083151502179055506007820154816007015560088201548160080155600982015481600901559050503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611569573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a88866040516115b2929190614bb0565b60405180910390a25050505050506115c8613b53565b50565b6115d3613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614c25565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116fa91906143ae565b602060405180830381865afa158015611717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173b9190614c5a565b6040518363ffffffff1660e01b8152600401611758929190614b2e565b6020604051808303816000875af1158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b9190614b83565b50565b606060048054905082106117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614681565b60405180910390fd5b60066000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561190e57838290600052602060002090600a0201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff1615151515815260200160078201548152602001600882015481526020016009820154815250508152602001906001019061181a565b505050509050919050565b611921613b0d565b6004805490508110611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90614681565b60405180910390fd5b60006004828154811061197e5761197d61483f565b5b9060005260206000209060080201905060006005600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816002015411611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090614a36565b60405180910390fd5b81600601544210611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690614cd3565b60405180910390fd5b60008160020154905080836002016000828254611a8c91906147a8565b925050819055508160040154836001016000828254611aab91906147a8565b9250508190555060008260020181905550600082600401819055506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002054905082600660008781526020019081526020016000208281548110611b4157611b4061483f565b5b90600052602060002090600a02016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501556006820160009054906101000a900460ff168160060160006101000a81548160ff021916908315150217905550600782015481600701556008820154816008015560098201548160090155905050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336064605a86611c84919061486e565b611c8e91906148df565b6040518363ffffffff1660e01b8152600401611cab929190614b2e565b6020604051808303816000875af1158015611cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cee9190614b83565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611d356128f8565b6064600a86611d44919061486e565b611d4e91906148df565b6040518363ffffffff1660e01b8152600401611d6b929190614b2e565b6020604051808303816000875af1158015611d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dae9190614b83565b503373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05958684604051611df7929190614bb0565b60405180910390a250505050611e0b613b53565b50565b611e16613b64565b6004805490508310611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490614681565b60405180910390fd5b6005600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff161515151581526020016007820154815260200160088201548152602001600982015481525050905092915050565b6005602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050154908060060160009054906101000a900460ff1690806007015490806008015490806009015490508a565b612018613b0d565b600480549050811061205f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205690614681565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160020154116120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f190614a36565b60405180910390fd5b6004828154811061210e5761210d61483f565b5b9060005260206000209060080201600601544210612161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215890614cd3565b60405180910390fd5b8060060160009054906101000a900460ff16156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90614b0e565b60405180910390fd5b600482815481106121c7576121c661483f565b5b906000526020600020906008020160070160009054906101000a900460ff1615612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d90614cd3565b60405180910390fd5b6201518081600701544261223a91906147a8565b101561227b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227290614d65565b60405180910390fd5b42816007018190555060006004838154811061229a5761229961483f565b5b9060005260206000209060080201905081600401548160010160008282546122c291906147a8565b925050819055506000826005015490506082811015612317576064600384600401546122ee919061486e565b6122f891906148df565b83600401600082825461230b91906147dc565b9250508190555061238a565b61016881101561235d57606460028460040154612334919061486e565b61233e91906148df565b83600401600082825461235191906147dc565b92505081905550612389565b6064836004015461236e91906148df565b83600401600082825461238191906147dc565b925050819055505b5b82600401548260010160008282546123a291906147dc565b925050819055506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868152602001908152602001600020549050836006600087815260200190815260200160002082815481106124245761242361483f565b5b90600052602060002090600a02016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501556006820160009054906101000a900460ff168160060160006101000a81548160ff02191690831515021790555060078201548160070155600882015481600801556009820154816009015590505050505050612525613b53565b50565b612530613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b490614c25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060048054905082106126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb90614681565b60405180910390fd5b60066000838152602001908152602001600020805490509050919050565b60035481565b6126f0613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277490614c25565b60405180910390fd5b6276a7008111156127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba90614df7565b60405180910390fd5b600060048054905090506000429050600083826127e091906147dc565b90506004604051806101000160405280858152602001600081526020016000815260200160008152602001848152602001868152602001838152602001600015158152509080600181540180825580915050600190039060005260206000209060080201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548160ff02191690831515021790555050507f370b09ab844737f9ba8d7e02c6bb837b4ecacd3de27024c04e2fc44c1dce65b1838386846040516128ea9493929190614e17565b60405180910390a150505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600480549050831061296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296190614681565b60405180910390fd5b60006005600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600485815481106129d4576129d361483f565b5b9060005260206000209060080201905060008260040154905060008260010154836003015483612a04919061486e565b612a0e91906148df565b90508094505050505092915050565b6007602052816000526040600020602052806000526040600020600091509150505481565b612a4a613b0d565b60008211612a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8490614ece565b60405180910390fd5b6004805490508310612ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acb90614681565b60405180910390fd5b600060048481548110612aea57612ae961483f565b5b906000526020600020906008020190508060040154421015612b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3890614f3a565b60405180910390fd5b80600601544210612b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7e90614cd3565b60405180910390fd5b8060070160009054906101000a900460ff1615612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd090614cd3565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401612c3893929190614f5a565b6020604051808303816000875af1158015612c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7b9190614b83565b5060006005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160020154148015612d3457506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002054145b1561305057338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504281600301819055508481600101819055504281600701819055508281600501819055508381600201819055506000428360060154612dbb91906147a8565b9050600060016202a30083612dd091906148df565b612dda91906147dc565b86612de5919061486e565b9050858460020154612df791906147dc565b84600201819055506082851015612e33576064600f82612e17919061486e565b612e2191906148df565b81612e2c91906147dc565b9050612e90565b610168851015612e68576064600a82612e4c919061486e565b612e5691906148df565b81612e6191906147dc565b9050612e8f565b6064600582612e77919061486e565b612e8191906148df565b81612e8c91906147dc565b90505b5b80836004018190555082600401548460010154612ead91906147dc565b8460010181905550600060066000898152602001908152602001600020805490509050600660008981526020019081526020016000208490806001815401808255809150506001900390600052602060002090600a02016000909190919091506000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501556006820160009054906101000a900460ff168160060160006101000a81548160ff021916908315150217905550600782015481600701556008820154816008015560098201548160090155505080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a8152602001908152602001600020819055505050506132ff565b82816005018190555083816002015461306991906147dc565b8160020181905550600042836006015461308391906147a8565b9050600060016202a3008361309891906148df565b6130a291906147dc565b866130ad919061486e565b905060828510156130e3576064600f826130c7919061486e565b6130d191906148df565b816130dc91906147dc565b9050613140565b610168851015613118576064600a826130fc919061486e565b61310691906148df565b8161311191906147dc565b905061313f565b6064600582613127919061486e565b61313191906148df565b8161313c91906147dc565b90505b5b8083600401600082825461315491906147dc565b9250508190555085846002015461316b91906147dc565b846002018190555080846001015461318391906147dc565b84600101819055506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600089815260200190815260200160002054905083600660008a815260200190815260200160002082815481106132065761320561483f565b5b90600052602060002090600a02016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501556006820160009054906101000a900460ff168160060160006101000a81548160ff0219169083151502179055506007820154816007015560088201548160080155600982015481600901559050505050505b3373ffffffffffffffffffffffffffffffffffffffff167f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee908686604051613347929190614bb0565b60405180910390a25050613359613b53565b505050565b613366613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ea90614c25565b60405180910390fd5b60008111613436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342d90614ece565b60405180910390fd5b348114613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f90614fdd565b60405180910390fd5b60048054905082106134bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b690614681565b60405180910390fd5b6000600483815481106134d5576134d461483f565b5b90600052602060002090600802019050806004015442101561352c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352390614f3a565b60405180910390fd5b80600601544210613572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356990614cd3565b60405180910390fd5b8060070160009054906101000a900460ff16156135c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135bb90614cd3565b60405180910390fd5b818160030160008282546135d891906147dc565b92505081905550505050565b6135ec613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367090614c25565b60405180910390fd5b60048054905081106136c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b790614681565b60405180910390fd5b6000600482815481106136d6576136d561483f565b5b90600052602060002090600802019050806006015442101561372d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372490614aa2565b60405180910390fd5b60018160070160006101000a81548160ff0219169083151502179055507fd716c70bf1c08d6bad08ed17106b326a57bab58f18d5e4b3ccef3f314c5afce1824260405161377b929190614bb0565b60405180910390a15050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6137b5613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383990614c25565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015613888573d6000803e3d6000fd5b50565b60606004805480602002602001604051908101604052809291908181526020016000905b82821015613943578382906000526020600020906008020160405180610100016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900460ff161515151581525050815260200190600101906138af565b50505050905090565b613954613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d890614c25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a479061506f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260015403613b49576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b60018081905550565b600033905090565b604051806101400160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525090565b604051806101600160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081525090565b600080fd5b6000819050919050565b613c5981613c46565b8114613c6457600080fd5b50565b600081359050613c7681613c50565b92915050565b60008060408385031215613c9357613c92613c41565b5b6000613ca185828601613c67565b9250506020613cb285828601613c67565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ce782613cbc565b9050919050565b613cf781613cdc565b82525050565b613d0681613c46565b82525050565b60008115159050919050565b613d2181613d0c565b82525050565b600061014082019050613d3d600083018d613cee565b613d4a602083018c613cfd565b613d57604083018b613cfd565b613d64606083018a613cfd565b613d716080830189613cfd565b613d7e60a0830188613cfd565b613d8b60c0830187613d18565b613d9860e0830186613cfd565b613da6610100830185613cfd565b613db4610120830184613cfd565b9b9a5050505050505050505050565b613dcc81613cdc565b8114613dd757600080fd5b50565b600081359050613de981613dc3565b92915050565b60008060408385031215613e0657613e05613c41565b5b6000613e1485828601613c67565b9250506020613e2585828601613dda565b9150509250929050565b613e3881613cdc565b82525050565b613e4781613c46565b82525050565b613e5681613d0c565b82525050565b61014082016000820151613e736000850182613e2f565b506020820151613e866020850182613e3e565b506040820151613e996040850182613e3e565b506060820151613eac6060850182613e3e565b506080820151613ebf6080850182613e3e565b5060a0820151613ed260a0850182613e3e565b5060c0820151613ee560c0850182613e4d565b5060e0820151613ef860e0850182613e3e565b50610100820151613f0d610100850182613e3e565b50610120820151613f22610120850182613e3e565b50505050565b600061014082019050613f3e6000830184613e5c565b92915050565b600060208284031215613f5a57613f59613c41565b5b6000613f6884828501613c67565b91505092915050565b600061010082019050613f87600083018b613cfd565b613f94602083018a613cfd565b613fa16040830189613cfd565b613fae6060830188613cfd565b613fbb6080830187613cfd565b613fc860a0830186613cfd565b613fd560c0830185613cfd565b613fe260e0830184613d18565b9998505050505050505050565b60008060006060848603121561400857614007613c41565b5b600061401686828701613c67565b935050602061402786828701613c67565b925050604061403886828701613c67565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610160820160008201516140856000850182613e2f565b5060208201516140986020850182613e3e565b5060408201516140ab6040850182613e3e565b5060608201516140be6060850182613e3e565b5060808201516140d16080850182613e3e565b5060a08201516140e460a0850182613e3e565b5060c08201516140f760c0850182613e4d565b5060e082015161410a60e0850182613e3e565b5061010082015161411f610100850182613e3e565b50610120820151614134610120850182613e3e565b50610140820151614149610140850182613e3e565b50505050565b600061415b838361406e565b6101608301905092915050565b6000602082019050919050565b600061418082614042565b61418a818561404d565b93506141958361405e565b8060005b838110156141c65781516141ad888261414f565b97506141b883614168565b925050600181019050614199565b5085935050505092915050565b600060208201905081810360008301526141ed8184614175565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610140820160008201516142386000850182613e2f565b50602082015161424b6020850182613e3e565b50604082015161425e6040850182613e3e565b5060608201516142716060850182613e3e565b5060808201516142846080850182613e3e565b5060a082015161429760a0850182613e3e565b5060c08201516142aa60c0850182613e4d565b5060e08201516142bd60e0850182613e3e565b506101008201516142d2610100850182613e3e565b506101208201516142e7610120850182613e3e565b50505050565b60006142f98383614221565b6101408301905092915050565b6000602082019050919050565b600061431e826141f5565b6143288185614200565b935061433383614211565b8060005b8381101561436457815161434b88826142ed565b975061435683614306565b925050600181019050614337565b5085935050505092915050565b6000602082019050818103600083015261438b8184614313565b905092915050565b60006020820190506143a86000830184613cfd565b92915050565b60006020820190506143c36000830184613cee565b92915050565b600080604083850312156143e0576143df613c41565b5b60006143ee85828601613dda565b92505060206143ff85828601613c67565b9150509250929050565b6000819050919050565b600061442e61442961442484613cbc565b614409565b613cbc565b9050919050565b600061444082614413565b9050919050565b600061445282614435565b9050919050565b61446281614447565b82525050565b600060208201905061447d6000830184614459565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610100820160008201516144c66000850182613e3e565b5060208201516144d96020850182613e3e565b5060408201516144ec6040850182613e3e565b5060608201516144ff6060850182613e3e565b5060808201516145126080850182613e3e565b5060a082015161452560a0850182613e3e565b5060c082015161453860c0850182613e3e565b5060e082015161454b60e0850182613e4d565b50505050565b600061455d83836144af565b6101008301905092915050565b6000602082019050919050565b600061458282614483565b61458c818561448e565b93506145978361449f565b8060005b838110156145c85781516145af8882614551565b97506145ba8361456a565b92505060018101905061459b565b5085935050505092915050565b600060208201905081810360008301526145ef8184614577565b905092915050565b60006020828403121561460d5761460c613c41565b5b600061461b84828501613dda565b91505092915050565b600082825260208201905092915050565b7f5374616b696e673a20696e76616c696420706f6f6c2069640000000000000000600082015250565b600061466b601883614624565b915061467682614635565b602082019050919050565b6000602082019050818103600083015261469a8161465e565b9050919050565b7f5374616b696e673a20696e76616c696420737461727420696e64657800000000600082015250565b60006146d7601c83614624565b91506146e2826146a1565b602082019050919050565b60006020820190508181036000830152614706816146ca565b9050919050565b7f5374616b696e673a20696e76616c696420656e6420696e646578000000000000600082015250565b6000614743601a83614624565b915061474e8261470d565b602082019050919050565b6000602082019050818103600083015261477281614736565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147b382613c46565b91506147be83613c46565b92508282039050818111156147d6576147d5614779565b5b92915050565b60006147e782613c46565b91506147f283613c46565b925082820190508082111561480a57614809614779565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061487982613c46565b915061488483613c46565b925082820261489281613c46565b915082820484148315176148a9576148a8614779565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148ea82613c46565b91506148f583613c46565b925082614905576149046148b0565b5b828204905092915050565b600061491b82613c46565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361494d5761494c614779565b5b600182019050919050565b7f5374616b696e673a20636c61696d20706572696f64206973206e6f742073746160008201527f7274656400000000000000000000000000000000000000000000000000000000602082015250565b60006149b4602483614624565b91506149bf82614958565b604082019050919050565b600060208201905081810360008301526149e3816149a7565b9050919050565b7f5374616b696e673a207573657220686173206e6f207374616b65000000000000600082015250565b6000614a20601a83614624565b9150614a2b826149ea565b602082019050919050565b60006020820190508181036000830152614a4f81614a13565b9050919050565b7f5374616b696e673a20706f6f6c206e6f7420656e646564000000000000000000600082015250565b6000614a8c601783614624565b9150614a9782614a56565b602082019050919050565b60006020820190508181036000830152614abb81614a7f565b9050919050565b7f5374616b696e673a207573657220616c726561647920636c61696d6564000000600082015250565b6000614af8601d83614624565b9150614b0382614ac2565b602082019050919050565b60006020820190508181036000830152614b2781614aeb565b9050919050565b6000604082019050614b436000830185613cee565b614b506020830184613cfd565b9392505050565b614b6081613d0c565b8114614b6b57600080fd5b50565b600081519050614b7d81614b57565b92915050565b600060208284031215614b9957614b98613c41565b5b6000614ba784828501614b6e565b91505092915050565b6000604082019050614bc56000830185613cfd565b614bd26020830184613cfd565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c0f602083614624565b9150614c1a82614bd9565b602082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b600081519050614c5481613c50565b92915050565b600060208284031215614c7057614c6f613c41565b5b6000614c7e84828501614c45565b91505092915050565b7f5374616b696e673a20706f6f6c20656e64656400000000000000000000000000600082015250565b6000614cbd601383614624565b9150614cc882614c87565b602082019050919050565b60006020820190508181036000830152614cec81614cb0565b9050919050565b7f5374616b696e673a20757365722063616e20626f6f7374206f6e63652065766560008201527f727920323420686f757273000000000000000000000000000000000000000000602082015250565b6000614d4f602b83614624565b9150614d5a82614cf3565b604082019050919050565b60006020820190508181036000830152614d7e81614d42565b9050919050565b7f5374616b696e673a206475726174696f6e2073686f756c64206265206c65737360008201527f207468616e203930206461797300000000000000000000000000000000000000602082015250565b6000614de1602d83614624565b9150614dec82614d85565b604082019050919050565b60006020820190508181036000830152614e1081614dd4565b9050919050565b6000608082019050614e2c6000830187613cfd565b614e396020830186613cfd565b614e466040830185613cfd565b614e536060830184613cfd565b95945050505050565b7f5374616b696e673a20616d6f756e74206d75737420626520677265617465722060008201527f7468616e20300000000000000000000000000000000000000000000000000000602082015250565b6000614eb8602683614624565b9150614ec382614e5c565b604082019050919050565b60006020820190508181036000830152614ee781614eab565b9050919050565b7f5374616b696e673a20706f6f6c206e6f74207374617274656400000000000000600082015250565b6000614f24601983614624565b9150614f2f82614eee565b602082019050919050565b60006020820190508181036000830152614f5381614f17565b9050919050565b6000606082019050614f6f6000830186613cee565b614f7c6020830185613cee565b614f896040830184613cfd565b949350505050565b7f5374616b696e673a20696e76616c696420616d6f756e74000000000000000000600082015250565b6000614fc7601783614624565b9150614fd282614f91565b602082019050919050565b60006020820190508181036000830152614ff681614fba565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615059602683614624565b915061506482614ffd565b604082019050919050565b600060208201905081810360008301526150888161504c565b905091905056fea264697066735822122020dadbf6bc462a5e8ddfbfe1fc61705b86dd9c223f35357845f2f696b8e7137e64736f6c63430008130033000000000000000000000000067def80d66fb69c276e53b641f37ff7525162f6

Deployed Bytecode

0x6080604052600436106101855760003560e01c806373274b14116100d1578063a638f2e21161008a578063d13284b111610064578063d13284b1146105df578063d5b014c31461060a578063d88ff1f414610621578063f2fde38b1461064c5761018c565b8063a638f2e214610571578063b49947e11461059a578063c964ee9f146105b65761018c565b806373274b141461043b57806373e22641146104785780638259e6a0146104a35780638da5cb5b146104cc5780638eb35251146104f7578063a17be43a146105345761018c565b80634ccb529a1161013e5780635e61b984116101185780635e61b984146103785780635f02c145146103b55780636a23d7f6146103fb578063715018a6146104245761018c565b80634ccb529a146102fb5780635237f731146103125780635312ea8e1461034f5761018c565b80630f2b7cc9146101915780631069f3b5146101d75780631526fe27146102145780632dd896991461025857806335e2ce2114610295578063379607f5146102d25761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101b860048036038101906101b39190613c7c565b610675565b6040516101ce9a99989796959493929190613d27565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f99190613def565b610713565b60405161020b9190613f28565b60405180910390f35b34801561022057600080fd5b5061023b60048036038101906102369190613f44565b610887565b60405161024f989796959493929190613f71565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190613fef565b6108ec565b60405161028c91906141d3565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190613f44565b610ceb565b6040516102c991906141d3565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f49190613f44565b6110a0565b005b34801561030757600080fd5b506103106115cb565b005b34801561031e57600080fd5b5061033960048036038101906103349190613f44565b61179e565b6040516103469190614371565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613f44565b611919565b005b34801561038457600080fd5b5061039f600480360381019061039a9190613def565b611e0e565b6040516103ac9190613f28565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d79190613def565b611f82565b6040516103f29a99989796959493929190613d27565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190613f44565b612010565b005b34801561043057600080fd5b50610439612528565b005b34801561044757600080fd5b50610462600480360381019061045d9190613f44565b61267b565b60405161046f9190614393565b60405180910390f35b34801561048457600080fd5b5061048d6126e2565b60405161049a9190614393565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190613f44565b6126e8565b005b3480156104d857600080fd5b506104e16128f8565b6040516104ee91906143ae565b60405180910390f35b34801561050357600080fd5b5061051e60048036038101906105199190613def565b612921565b60405161052b9190614393565b60405180910390f35b34801561054057600080fd5b5061055b600480360381019061055691906143c9565b612a1d565b6040516105689190614393565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190613fef565b612a42565b005b6105b460048036038101906105af9190613c7c565b61335e565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613f44565b6135e4565b005b3480156105eb57600080fd5b506105f4613787565b6040516106019190614468565b60405180910390f35b34801561061657600080fd5b5061061f6137ad565b005b34801561062d57600080fd5b5061063661388b565b60405161064391906145d5565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e91906145f7565b61394c565b005b6006602052816000526040600020818154811061069157600080fd5b90600052602060002090600a0201600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050154908060060160009054906101000a900460ff1690806007015490806008015490806009015490508a565b61071b613b64565b6004805490508310610762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075990614681565b60405180910390fd5b6005600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff161515151581526020016007820154815260200160088201548152602001600982015481525050905092915050565b6004818154811061089757600080fd5b90600052602060002090600802016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070160009054906101000a900460ff16905088565b60606004805490508410610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c90614681565b60405180910390fd5b6006600085815260200190815260200160002080549050831061098d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610984906146ed565b60405180910390fd5b600660008581526020019081526020016000208054905082106109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc90614759565b60405180910390fd5b600060066000868152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610b0e57838290600052602060002090600a0201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16151515158152602001600782015481526020016008820154815260200160098201548152505081526020019060010190610a1a565b505050509050600060018585610b2491906147a8565b610b2e91906147dc565b67ffffffffffffffff811115610b4757610b46614810565b5b604051908082528060200260200182016040528015610b8057816020015b610b6d613bcf565b815260200190600190039081610b655790505b50905060008590505b848111610cde576000838281518110610ba557610ba461483f565b5b60200260200101519050604051806101600160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a0015181526020018260c00151151581526020018260e0015181526020018261010001518152602001826101200151815260200160048a81548110610c4d57610c4c61483f565b5b90600052602060002090600802016001015460048b81548110610c7357610c7261483f565b5b9060005260206000209060080201600301548460800151610c94919061486e565b610c9e91906148df565b815250838884610cae91906147a8565b81518110610cbf57610cbe61483f565b5b6020026020010181905250508080610cd690614910565b915050610b89565b5080925050509392505050565b60606004805490508210610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90614681565b60405180910390fd5b600060048381548110610d4a57610d4961483f565b5b90600052602060002090600802016001015403610dbd57600067ffffffffffffffff811115610d7c57610d7b614810565b5b604051908082528060200260200182016040528015610db557816020015b610da2613bcf565b815260200190600190039081610d9a5790505b50905061109b565b600060066000848152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610ee657838290600052602060002090600a0201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16151515158152602001600782015481526020016008820154815260200160098201548152505081526020019060010190610df2565b5050505090506000815167ffffffffffffffff811115610f0957610f08614810565b5b604051908082528060200260200182016040528015610f4257816020015b610f2f613bcf565b815260200190600190039081610f275790505b50905060005b8251811015611094576000838281518110610f6657610f6561483f565b5b60200260200101519050604051806101600160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a0015181526020018260c00151151581526020018260e001518152602001826101000151815260200182610120015181526020016004888154811061100e5761100d61483f565b5b906000526020600020906008020160010154600489815481106110345761103361483f565b5b9060005260206000209060080201600301548460800151611055919061486e565b61105f91906148df565b8152508383815181106110755761107461483f565b5b602002602001018190525050808061108c90614910565b915050610f48565b5080925050505b919050565b6110a8613b0d565b60048054905081106110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690614681565b60405180910390fd5b6000600482815481106111055761110461483f565b5b9060005260206000209060080201905060006005600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160070160009054906101000a900460ff166111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b1906149ca565b60405180910390fd5b6000816002015411611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890614a36565b60405180910390fd5b8160060154421015611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90614aa2565b60405180910390fd5b8060060160009054906101000a900460ff161561129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190614b0e565b60405180910390fd5b60018160060160006101000a81548160ff02191690831515021790555060008160020154905080826009018190555060008260020181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611330929190614b2e565b6020604051808303816000875af115801561134f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113739190614b83565b50600082600401549050600083600401819055506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020549050600085600101548660030154846113f3919061486e565b6113fd91906148df565b90508085600801819055508460066000898152602001908152602001600020838154811061142e5761142d61483f565b5b90600052602060002090600a02016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501556006820160009054906101000a900460ff168160060160006101000a81548160ff0219169083151502179055506007820154816007015560088201548160080155600982015481600901559050503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611569573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a88866040516115b2929190614bb0565b60405180910390a25050505050506115c8613b53565b50565b6115d3613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614c25565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116fa91906143ae565b602060405180830381865afa158015611717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173b9190614c5a565b6040518363ffffffff1660e01b8152600401611758929190614b2e565b6020604051808303816000875af1158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b9190614b83565b50565b606060048054905082106117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614681565b60405180910390fd5b60066000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561190e57838290600052602060002090600a0201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff1615151515815260200160078201548152602001600882015481526020016009820154815250508152602001906001019061181a565b505050509050919050565b611921613b0d565b6004805490508110611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90614681565b60405180910390fd5b60006004828154811061197e5761197d61483f565b5b9060005260206000209060080201905060006005600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816002015411611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090614a36565b60405180910390fd5b81600601544210611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690614cd3565b60405180910390fd5b60008160020154905080836002016000828254611a8c91906147a8565b925050819055508160040154836001016000828254611aab91906147a8565b9250508190555060008260020181905550600082600401819055506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002054905082600660008781526020019081526020016000208281548110611b4157611b4061483f565b5b90600052602060002090600a02016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501556006820160009054906101000a900460ff168160060160006101000a81548160ff021916908315150217905550600782015481600701556008820154816008015560098201548160090155905050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336064605a86611c84919061486e565b611c8e91906148df565b6040518363ffffffff1660e01b8152600401611cab929190614b2e565b6020604051808303816000875af1158015611cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cee9190614b83565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611d356128f8565b6064600a86611d44919061486e565b611d4e91906148df565b6040518363ffffffff1660e01b8152600401611d6b929190614b2e565b6020604051808303816000875af1158015611d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dae9190614b83565b503373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05958684604051611df7929190614bb0565b60405180910390a250505050611e0b613b53565b50565b611e16613b64565b6004805490508310611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490614681565b60405180910390fd5b6005600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff161515151581526020016007820154815260200160088201548152602001600982015481525050905092915050565b6005602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050154908060060160009054906101000a900460ff1690806007015490806008015490806009015490508a565b612018613b0d565b600480549050811061205f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205690614681565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160020154116120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f190614a36565b60405180910390fd5b6004828154811061210e5761210d61483f565b5b9060005260206000209060080201600601544210612161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215890614cd3565b60405180910390fd5b8060060160009054906101000a900460ff16156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90614b0e565b60405180910390fd5b600482815481106121c7576121c661483f565b5b906000526020600020906008020160070160009054906101000a900460ff1615612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d90614cd3565b60405180910390fd5b6201518081600701544261223a91906147a8565b101561227b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227290614d65565b60405180910390fd5b42816007018190555060006004838154811061229a5761229961483f565b5b9060005260206000209060080201905081600401548160010160008282546122c291906147a8565b925050819055506000826005015490506082811015612317576064600384600401546122ee919061486e565b6122f891906148df565b83600401600082825461230b91906147dc565b9250508190555061238a565b61016881101561235d57606460028460040154612334919061486e565b61233e91906148df565b83600401600082825461235191906147dc565b92505081905550612389565b6064836004015461236e91906148df565b83600401600082825461238191906147dc565b925050819055505b5b82600401548260010160008282546123a291906147dc565b925050819055506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868152602001908152602001600020549050836006600087815260200190815260200160002082815481106124245761242361483f565b5b90600052602060002090600a02016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501556006820160009054906101000a900460ff168160060160006101000a81548160ff02191690831515021790555060078201548160070155600882015481600801556009820154816009015590505050505050612525613b53565b50565b612530613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b490614c25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060048054905082106126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb90614681565b60405180910390fd5b60066000838152602001908152602001600020805490509050919050565b60035481565b6126f0613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277490614c25565b60405180910390fd5b6276a7008111156127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba90614df7565b60405180910390fd5b600060048054905090506000429050600083826127e091906147dc565b90506004604051806101000160405280858152602001600081526020016000815260200160008152602001848152602001868152602001838152602001600015158152509080600181540180825580915050600190039060005260206000209060080201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548160ff02191690831515021790555050507f370b09ab844737f9ba8d7e02c6bb837b4ecacd3de27024c04e2fc44c1dce65b1838386846040516128ea9493929190614e17565b60405180910390a150505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600480549050831061296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296190614681565b60405180910390fd5b60006005600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600485815481106129d4576129d361483f565b5b9060005260206000209060080201905060008260040154905060008260010154836003015483612a04919061486e565b612a0e91906148df565b90508094505050505092915050565b6007602052816000526040600020602052806000526040600020600091509150505481565b612a4a613b0d565b60008211612a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8490614ece565b60405180910390fd5b6004805490508310612ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acb90614681565b60405180910390fd5b600060048481548110612aea57612ae961483f565b5b906000526020600020906008020190508060040154421015612b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3890614f3a565b60405180910390fd5b80600601544210612b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7e90614cd3565b60405180910390fd5b8060070160009054906101000a900460ff1615612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd090614cd3565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401612c3893929190614f5a565b6020604051808303816000875af1158015612c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7b9190614b83565b5060006005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160020154148015612d3457506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002054145b1561305057338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504281600301819055508481600101819055504281600701819055508281600501819055508381600201819055506000428360060154612dbb91906147a8565b9050600060016202a30083612dd091906148df565b612dda91906147dc565b86612de5919061486e565b9050858460020154612df791906147dc565b84600201819055506082851015612e33576064600f82612e17919061486e565b612e2191906148df565b81612e2c91906147dc565b9050612e90565b610168851015612e68576064600a82612e4c919061486e565b612e5691906148df565b81612e6191906147dc565b9050612e8f565b6064600582612e77919061486e565b612e8191906148df565b81612e8c91906147dc565b90505b5b80836004018190555082600401548460010154612ead91906147dc565b8460010181905550600060066000898152602001908152602001600020805490509050600660008981526020019081526020016000208490806001815401808255809150506001900390600052602060002090600a02016000909190919091506000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501556006820160009054906101000a900460ff168160060160006101000a81548160ff021916908315150217905550600782015481600701556008820154816008015560098201548160090155505080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a8152602001908152602001600020819055505050506132ff565b82816005018190555083816002015461306991906147dc565b8160020181905550600042836006015461308391906147a8565b9050600060016202a3008361309891906148df565b6130a291906147dc565b866130ad919061486e565b905060828510156130e3576064600f826130c7919061486e565b6130d191906148df565b816130dc91906147dc565b9050613140565b610168851015613118576064600a826130fc919061486e565b61310691906148df565b8161311191906147dc565b905061313f565b6064600582613127919061486e565b61313191906148df565b8161313c91906147dc565b90505b5b8083600401600082825461315491906147dc565b9250508190555085846002015461316b91906147dc565b846002018190555080846001015461318391906147dc565b84600101819055506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600089815260200190815260200160002054905083600660008a815260200190815260200160002082815481106132065761320561483f565b5b90600052602060002090600a02016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501556006820160009054906101000a900460ff168160060160006101000a81548160ff0219169083151502179055506007820154816007015560088201548160080155600982015481600901559050505050505b3373ffffffffffffffffffffffffffffffffffffffff167f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee908686604051613347929190614bb0565b60405180910390a25050613359613b53565b505050565b613366613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ea90614c25565b60405180910390fd5b60008111613436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342d90614ece565b60405180910390fd5b348114613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f90614fdd565b60405180910390fd5b60048054905082106134bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b690614681565b60405180910390fd5b6000600483815481106134d5576134d461483f565b5b90600052602060002090600802019050806004015442101561352c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352390614f3a565b60405180910390fd5b80600601544210613572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356990614cd3565b60405180910390fd5b8060070160009054906101000a900460ff16156135c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135bb90614cd3565b60405180910390fd5b818160030160008282546135d891906147dc565b92505081905550505050565b6135ec613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367090614c25565b60405180910390fd5b60048054905081106136c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b790614681565b60405180910390fd5b6000600482815481106136d6576136d561483f565b5b90600052602060002090600802019050806006015442101561372d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372490614aa2565b60405180910390fd5b60018160070160006101000a81548160ff0219169083151502179055507fd716c70bf1c08d6bad08ed17106b326a57bab58f18d5e4b3ccef3f314c5afce1824260405161377b929190614bb0565b60405180910390a15050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6137b5613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383990614c25565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015613888573d6000803e3d6000fd5b50565b60606004805480602002602001604051908101604052809291908181526020016000905b82821015613943578382906000526020600020906008020160405180610100016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900460ff161515151581525050815260200190600101906138af565b50505050905090565b613954613b5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d890614c25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a479061506f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260015403613b49576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b60018081905550565b600033905090565b604051806101400160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525090565b604051806101600160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081525090565b600080fd5b6000819050919050565b613c5981613c46565b8114613c6457600080fd5b50565b600081359050613c7681613c50565b92915050565b60008060408385031215613c9357613c92613c41565b5b6000613ca185828601613c67565b9250506020613cb285828601613c67565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ce782613cbc565b9050919050565b613cf781613cdc565b82525050565b613d0681613c46565b82525050565b60008115159050919050565b613d2181613d0c565b82525050565b600061014082019050613d3d600083018d613cee565b613d4a602083018c613cfd565b613d57604083018b613cfd565b613d64606083018a613cfd565b613d716080830189613cfd565b613d7e60a0830188613cfd565b613d8b60c0830187613d18565b613d9860e0830186613cfd565b613da6610100830185613cfd565b613db4610120830184613cfd565b9b9a5050505050505050505050565b613dcc81613cdc565b8114613dd757600080fd5b50565b600081359050613de981613dc3565b92915050565b60008060408385031215613e0657613e05613c41565b5b6000613e1485828601613c67565b9250506020613e2585828601613dda565b9150509250929050565b613e3881613cdc565b82525050565b613e4781613c46565b82525050565b613e5681613d0c565b82525050565b61014082016000820151613e736000850182613e2f565b506020820151613e866020850182613e3e565b506040820151613e996040850182613e3e565b506060820151613eac6060850182613e3e565b506080820151613ebf6080850182613e3e565b5060a0820151613ed260a0850182613e3e565b5060c0820151613ee560c0850182613e4d565b5060e0820151613ef860e0850182613e3e565b50610100820151613f0d610100850182613e3e565b50610120820151613f22610120850182613e3e565b50505050565b600061014082019050613f3e6000830184613e5c565b92915050565b600060208284031215613f5a57613f59613c41565b5b6000613f6884828501613c67565b91505092915050565b600061010082019050613f87600083018b613cfd565b613f94602083018a613cfd565b613fa16040830189613cfd565b613fae6060830188613cfd565b613fbb6080830187613cfd565b613fc860a0830186613cfd565b613fd560c0830185613cfd565b613fe260e0830184613d18565b9998505050505050505050565b60008060006060848603121561400857614007613c41565b5b600061401686828701613c67565b935050602061402786828701613c67565b925050604061403886828701613c67565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610160820160008201516140856000850182613e2f565b5060208201516140986020850182613e3e565b5060408201516140ab6040850182613e3e565b5060608201516140be6060850182613e3e565b5060808201516140d16080850182613e3e565b5060a08201516140e460a0850182613e3e565b5060c08201516140f760c0850182613e4d565b5060e082015161410a60e0850182613e3e565b5061010082015161411f610100850182613e3e565b50610120820151614134610120850182613e3e565b50610140820151614149610140850182613e3e565b50505050565b600061415b838361406e565b6101608301905092915050565b6000602082019050919050565b600061418082614042565b61418a818561404d565b93506141958361405e565b8060005b838110156141c65781516141ad888261414f565b97506141b883614168565b925050600181019050614199565b5085935050505092915050565b600060208201905081810360008301526141ed8184614175565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610140820160008201516142386000850182613e2f565b50602082015161424b6020850182613e3e565b50604082015161425e6040850182613e3e565b5060608201516142716060850182613e3e565b5060808201516142846080850182613e3e565b5060a082015161429760a0850182613e3e565b5060c08201516142aa60c0850182613e4d565b5060e08201516142bd60e0850182613e3e565b506101008201516142d2610100850182613e3e565b506101208201516142e7610120850182613e3e565b50505050565b60006142f98383614221565b6101408301905092915050565b6000602082019050919050565b600061431e826141f5565b6143288185614200565b935061433383614211565b8060005b8381101561436457815161434b88826142ed565b975061435683614306565b925050600181019050614337565b5085935050505092915050565b6000602082019050818103600083015261438b8184614313565b905092915050565b60006020820190506143a86000830184613cfd565b92915050565b60006020820190506143c36000830184613cee565b92915050565b600080604083850312156143e0576143df613c41565b5b60006143ee85828601613dda565b92505060206143ff85828601613c67565b9150509250929050565b6000819050919050565b600061442e61442961442484613cbc565b614409565b613cbc565b9050919050565b600061444082614413565b9050919050565b600061445282614435565b9050919050565b61446281614447565b82525050565b600060208201905061447d6000830184614459565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610100820160008201516144c66000850182613e3e565b5060208201516144d96020850182613e3e565b5060408201516144ec6040850182613e3e565b5060608201516144ff6060850182613e3e565b5060808201516145126080850182613e3e565b5060a082015161452560a0850182613e3e565b5060c082015161453860c0850182613e3e565b5060e082015161454b60e0850182613e4d565b50505050565b600061455d83836144af565b6101008301905092915050565b6000602082019050919050565b600061458282614483565b61458c818561448e565b93506145978361449f565b8060005b838110156145c85781516145af8882614551565b97506145ba8361456a565b92505060018101905061459b565b5085935050505092915050565b600060208201905081810360008301526145ef8184614577565b905092915050565b60006020828403121561460d5761460c613c41565b5b600061461b84828501613dda565b91505092915050565b600082825260208201905092915050565b7f5374616b696e673a20696e76616c696420706f6f6c2069640000000000000000600082015250565b600061466b601883614624565b915061467682614635565b602082019050919050565b6000602082019050818103600083015261469a8161465e565b9050919050565b7f5374616b696e673a20696e76616c696420737461727420696e64657800000000600082015250565b60006146d7601c83614624565b91506146e2826146a1565b602082019050919050565b60006020820190508181036000830152614706816146ca565b9050919050565b7f5374616b696e673a20696e76616c696420656e6420696e646578000000000000600082015250565b6000614743601a83614624565b915061474e8261470d565b602082019050919050565b6000602082019050818103600083015261477281614736565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147b382613c46565b91506147be83613c46565b92508282039050818111156147d6576147d5614779565b5b92915050565b60006147e782613c46565b91506147f283613c46565b925082820190508082111561480a57614809614779565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061487982613c46565b915061488483613c46565b925082820261489281613c46565b915082820484148315176148a9576148a8614779565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148ea82613c46565b91506148f583613c46565b925082614905576149046148b0565b5b828204905092915050565b600061491b82613c46565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361494d5761494c614779565b5b600182019050919050565b7f5374616b696e673a20636c61696d20706572696f64206973206e6f742073746160008201527f7274656400000000000000000000000000000000000000000000000000000000602082015250565b60006149b4602483614624565b91506149bf82614958565b604082019050919050565b600060208201905081810360008301526149e3816149a7565b9050919050565b7f5374616b696e673a207573657220686173206e6f207374616b65000000000000600082015250565b6000614a20601a83614624565b9150614a2b826149ea565b602082019050919050565b60006020820190508181036000830152614a4f81614a13565b9050919050565b7f5374616b696e673a20706f6f6c206e6f7420656e646564000000000000000000600082015250565b6000614a8c601783614624565b9150614a9782614a56565b602082019050919050565b60006020820190508181036000830152614abb81614a7f565b9050919050565b7f5374616b696e673a207573657220616c726561647920636c61696d6564000000600082015250565b6000614af8601d83614624565b9150614b0382614ac2565b602082019050919050565b60006020820190508181036000830152614b2781614aeb565b9050919050565b6000604082019050614b436000830185613cee565b614b506020830184613cfd565b9392505050565b614b6081613d0c565b8114614b6b57600080fd5b50565b600081519050614b7d81614b57565b92915050565b600060208284031215614b9957614b98613c41565b5b6000614ba784828501614b6e565b91505092915050565b6000604082019050614bc56000830185613cfd565b614bd26020830184613cfd565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c0f602083614624565b9150614c1a82614bd9565b602082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b600081519050614c5481613c50565b92915050565b600060208284031215614c7057614c6f613c41565b5b6000614c7e84828501614c45565b91505092915050565b7f5374616b696e673a20706f6f6c20656e64656400000000000000000000000000600082015250565b6000614cbd601383614624565b9150614cc882614c87565b602082019050919050565b60006020820190508181036000830152614cec81614cb0565b9050919050565b7f5374616b696e673a20757365722063616e20626f6f7374206f6e63652065766560008201527f727920323420686f757273000000000000000000000000000000000000000000602082015250565b6000614d4f602b83614624565b9150614d5a82614cf3565b604082019050919050565b60006020820190508181036000830152614d7e81614d42565b9050919050565b7f5374616b696e673a206475726174696f6e2073686f756c64206265206c65737360008201527f207468616e203930206461797300000000000000000000000000000000000000602082015250565b6000614de1602d83614624565b9150614dec82614d85565b604082019050919050565b60006020820190508181036000830152614e1081614dd4565b9050919050565b6000608082019050614e2c6000830187613cfd565b614e396020830186613cfd565b614e466040830185613cfd565b614e536060830184613cfd565b95945050505050565b7f5374616b696e673a20616d6f756e74206d75737420626520677265617465722060008201527f7468616e20300000000000000000000000000000000000000000000000000000602082015250565b6000614eb8602683614624565b9150614ec382614e5c565b604082019050919050565b60006020820190508181036000830152614ee781614eab565b9050919050565b7f5374616b696e673a20706f6f6c206e6f74207374617274656400000000000000600082015250565b6000614f24601983614624565b9150614f2f82614eee565b602082019050919050565b60006020820190508181036000830152614f5381614f17565b9050919050565b6000606082019050614f6f6000830186613cee565b614f7c6020830185613cee565b614f896040830184613cfd565b949350505050565b7f5374616b696e673a20696e76616c696420616d6f756e74000000000000000000600082015250565b6000614fc7601783614624565b9150614fd282614f91565b602082019050919050565b60006020820190508181036000830152614ff681614fba565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615059602683614624565b915061506482614ffd565b604082019050919050565b600060208201905081810360008301526150888161504c565b905091905056fea264697066735822122020dadbf6bc462a5e8ddfbfe1fc61705b86dd9c223f35357845f2f696b8e7137e64736f6c63430008130033

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

000000000000000000000000067def80d66fb69c276e53b641f37ff7525162f6

-----Decoded View---------------
Arg [0] : _oGPU (address): 0x067Def80D66fB69C276e53b641f37ff7525162f6

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000067def80d66fb69c276e53b641f37ff7525162f6


Deployed Bytecode Sourcemap

6310:14474:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8312:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;15997:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8203:26;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;17616:1282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16430:1178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13522:1130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20661:118;;;;;;;;;;;;;:::i;:::-;;16224:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14660:871;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18906:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8236:69;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;12252:1262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2083:148;;;;;;;;;;;;;:::i;:::-;;19133:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6392:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8962:667;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1869:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19342:490;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8367:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9637:2607;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19840:606;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15539:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6366:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20497:112;;;;;;;;;;;;;:::i;:::-;;15890:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2239:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8312:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15997:219::-;16073:15;;:::i;:::-;16119:8;:15;;;;16109:7;:25;16101:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;16181:11;:20;16193:7;16181:20;;;;;;;;;;;:27;16202:5;16181:27;;;;;;;;;;;;;;;16174:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15997:219;;;;:::o;8203:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17616:1282::-;17723:27;17781:8;:15;;;;17771:7;:25;17763:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;17853:9;:18;17863:7;17853:18;;;;;;;;;;;:25;;;;17844:6;:34;17836:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;17937:9;:18;17947:7;17937:18;;;;;;;;;;;:25;;;;17930:4;:32;17922:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18004:23;18030:9;:18;18040:7;18030:18;;;;;;;;;;;18004:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18059:43;18146:1;18137:6;18130:4;:13;;;;:::i;:::-;:17;;;;:::i;:::-;18105:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;18059:89;;18164:9;18176:6;18164:18;;18159:699;18189:4;18184:1;:9;18159:699;;18215:20;18238:5;18244:1;18238:8;;;;;;;;:::i;:::-;;;;;;;;18215:31;;18291:555;;;;;;;;18335:4;:9;;;18291:555;;;;;;18371:4;:11;;;18291:555;;;;18409:4;:11;;;18291:555;;;;18450:4;:14;;;18291:555;;;;18491:4;:11;;;18291:555;;;;18528:4;:10;;;18291:555;;;;18566:4;:12;;;18291:555;;;;;;18612:4;:18;;;18291:555;;;;18661:4;:15;;;18291:555;;;;18708:4;:16;;;18291:555;;;;18801:8;18810:7;18801:17;;;;;;;;:::i;:::-;;;;;;;;;;;;:29;;;18765:8;18774:7;18765:17;;;;;;;;:::i;:::-;;;;;;;;;;;;:32;;;18751:4;:11;;;:46;;;;:::i;:::-;18750:80;;;;:::i;:::-;18291:555;;;18261:15;18281:6;18277:1;:10;;;;:::i;:::-;18261:27;;;;;;;;:::i;:::-;;;;;;;:585;;;;18200:658;18195:3;;;;;:::i;:::-;;;;18159:699;;;;18875:15;18868:22;;;;17616:1282;;;;;:::o;16430:1178::-;16502:27;16560:8;:15;;;;16550:7;:25;16542:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;16652:1;16619:8;16628:7;16619:17;;;;;;;;:::i;:::-;;;;;;;;;;;;:29;;;:34;16615:101;;16702:1;16677:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;16670:34;;;;16615:101;16726:23;16752:9;:18;16762:7;16752:18;;;;;;;;;;;16726:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16781:43;16852:5;:12;16827:38;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;16781:84;;16881:9;16876:692;16900:5;:12;16896:1;:16;16876:692;;;16934:20;16957:5;16963:1;16957:8;;;;;;;;:::i;:::-;;;;;;;;16934:31;;17001:555;;;;;;;;17045:4;:9;;;17001:555;;;;;;17081:4;:11;;;17001:555;;;;17119:4;:11;;;17001:555;;;;17160:4;:14;;;17001:555;;;;17201:4;:11;;;17001:555;;;;17238:4;:10;;;17001:555;;;;17276:4;:12;;;17001:555;;;;;;17322:4;:18;;;17001:555;;;;17371:4;:15;;;17001:555;;;;17418:4;:16;;;17001:555;;;;17511:8;17520:7;17511:17;;;;;;;;:::i;:::-;;;;;;;;;;;;:29;;;17475:8;17484:7;17475:17;;;;;;;;:::i;:::-;;;;;;;;;;;;:32;;;17461:4;:11;;;:46;;;;:::i;:::-;17460:80;;;;:::i;:::-;17001:555;;;16980:15;16996:1;16980:18;;;;;;;;:::i;:::-;;;;;;;:576;;;;16919:649;16914:3;;;;;:::i;:::-;;;;16876:692;;;;17585:15;17578:22;;;;16430:1178;;;;:::o;13522:1130::-;4908:21;:19;:21::i;:::-;13605:8:::1;:15;;;;13595:7;:25;13587:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;13660:21;13684:8;13693:7;13684:17;;;;;;;;:::i;:::-;;;;;;;;;;;;13660:41;;13712:21;13736:11;:20;13748:7;13736:20;;;;;;;;;;;:32;13757:10;13736:32;;;;;;;;;;;;;;;13712:56;;13787:4;:10;;;;;;;;;;;;13779:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;13871:1;13857:4;:11;;;:15;13849:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;13941:4;:12;;;13922:15;:31;;13914:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14001:4;:12;;;;;;;;;;;;14000:13;13992:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;14075:4;14060;:12;;;:19;;;;;;;;;;;;;;;;;;14090:15;14108:4;:11;;;14090:29;;14149:7;14130:4;:16;;:26;;;;14181:1;14167:4;:11;;:15;;;;14193:4;;;;;;;;;;;:13;;;14207:10;14219:7;14193:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14238:15;14256:4;:11;;;14238:29;;14292:1;14278:4;:11;;:15;;;;14330:17;14350:13;:25;14364:10;14350:25;;;;;;;;;;;;;;;:34;14376:7;14350:34;;;;;;;;;;;;14330:54;;14395:14;14446:4;:16;;;14423:4;:19;;;14413:7;:29;;;;:::i;:::-;14412:50;;;;:::i;:::-;14395:67;;14491:6;14473:4;:15;;:24;;;;14540:4;14508:9;:18;14518:7;14508:18;;;;;;;;;;;14527:9;14508:29;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14563:10;14555:28;;:36;14584:6;14555:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14615:10;14607:37;;;14627:7;14636;14607:37;;;;;;;:::i;:::-;;;;;;;;13576:1076;;;;;;4952:20:::0;:18;:20::i;:::-;13522:1130;:::o;20661:118::-;2006:12;:10;:12::i;:::-;1996:22;;:6;;;;;;;;;;:22;;;1988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20715:4:::1;;;;;;;;;;;:13;;;20729:10;20741:4;;;;;;;;;;;:14;;;20764:4;20741:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20715:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20661:118::o:0;16224:198::-;16286:17;16334:8;:15;;;;16324:7;:25;16316:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;16396:9;:18;16406:7;16396:18;;;;;;;;;;;16389:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16224:198;;;:::o;14660:871::-;4908:21;:19;:21::i;:::-;14755:8:::1;:15;;;;14745:7;:25;14737:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;14810:21;14834:8;14843:7;14834:17;;;;;;;;:::i;:::-;;;;;;;;;;;;14810:41;;14862:21;14886:11;:20;14898:7;14886:20;;;;;;;;;;;:32;14907:10;14886:32;;;;;;;;;;;;;;;14862:56;;14951:1;14937:4;:11;;;:15;14929:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;15020:4;:12;;;15002:15;:30;14994:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15067:15;15085:4;:11;;;15067:29;;15127:7;15107:4;:16;;;:27;;;;;;;:::i;:::-;;;;;;;;15165:4;:11;;;15145:4;:16;;;:31;;;;;;;:::i;:::-;;;;;;;;15201:1;15187:4;:11;;:15;;;;15227:1;15213:4;:11;;:15;;;;15239:17;15259:13;:25;15273:10;15259:25;;;;;;;;;;;;;;;:34;15285:7;15259:34;;;;;;;;;;;;15239:54;;15336:4;15304:9;:18;15314:7;15304:18;;;;;;;;;;;15323:9;15304:29;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15351:4;;;;;;;;;;;:13;;;15365:10;15394:3;15388:2;15378:7;:12;;;;:::i;:::-;15377:20;;;;:::i;:::-;15351:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15409:4;;;;;;;;;;;:13;;;15431:7;:5;:7::i;:::-;15456:3;15451:2;15441:7;:12;;;;:::i;:::-;15440:19;;;;:::i;:::-;15409:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15494:10;15476:47;;;15506:7;15515;15476:47;;;;;;;:::i;:::-;;;;;;;;14726:805;;;;4952:20:::0;:18;:20::i;:::-;14660:871;:::o;18906:219::-;18982:15;;:::i;:::-;19028:8;:15;;;;19018:7;:25;19010:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19090:11;:20;19102:7;19090:20;;;;;;;;;;;:27;19111:5;19090:27;;;;;;;;;;;;;;;19083:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18906:219;;;;:::o;8236:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12252:1262::-;4908:21;:19;:21::i;:::-;12337:8:::1;:15;;;;12327:7;:25;12319:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;12392:21;12416:11;:20;12428:7;12416:20;;;;;;;;;;;:32;12437:10;12416:32;;;;;;;;;;;;;;;12392:56;;12481:1;12467:4;:11;;;:15;12459:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;12550:8;12559:7;12550:17;;;;;;;;:::i;:::-;;;;;;;;;;;;:25;;;12532:15;:43;12524:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;12619:4;:12;;;;;;;;;;;;12618:13;12610:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;12685:8;12694:7;12685:17;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;;;;;;;;;;12684:24;12676:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;12838:6;12816:4;:18;;;12798:15;:36;;;;:::i;:::-;:46;;12790:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;12924:15;12903:4;:18;;:36;;;;12981:21;13005:8;13014:7;13005:17;;;;;;;;:::i;:::-;;;;;;;;;;;;12981:41;;13053:4;:11;;;13033:4;:16;;;:31;;;;;;;:::i;:::-;;;;;;;;13075:14;13092:4;:10;;;13075:27;;13126:3;13117:6;:12;13113:238;;;13181:3;13176:1;13162:4;:11;;;:15;;;;:::i;:::-;13161:23;;;;:::i;:::-;13146:4;:11;;;:38;;;;;;;:::i;:::-;;;;;;;;13113:238;;;13215:3;13206:6;:12;13202:149;;;13270:3;13265:1;13251:4;:11;;;:15;;;;:::i;:::-;13250:23;;;;:::i;:::-;13235:4;:11;;;:38;;;;;;;:::i;:::-;;;;;;;;13202:149;;;13336:3;13322:4;:11;;;:17;;;;:::i;:::-;13307:4;:11;;;:32;;;;;;;:::i;:::-;;;;;;;;13202:149;13113:238;13383:4;:11;;;13363:4;:16;;;:31;;;;;;;:::i;:::-;;;;;;;;13405:17;13425:13;:25;13439:10;13425:25;;;;;;;;;;;;;;;:34;13451:7;13425:34;;;;;;;;;;;;13405:54;;13502:4;13470:9;:18;13480:7;13470:18;;;;;;;;;;;13489:9;13470:29;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12308:1206;;;;4952:20:::0;:18;:20::i;:::-;12252:1262;:::o;2083:148::-;2006:12;:10;:12::i;:::-;1996:22;;:6;;;;;;;;;;:22;;;1988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2190:1:::1;2153:40;;2174:6;::::0;::::1;;;;;;;;2153:40;;;;;;;;;;;;2221:1;2204:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2083:148::o:0;19133:201::-;19201:7;19239:8;:15;;;;19229:7;:25;19221:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19301:9;:18;19311:7;19301:18;;;;;;;;;;;:25;;;;19294:32;;19133:201;;;:::o;6392:20::-;;;;:::o;8962:667::-;2006:12;:10;:12::i;:::-;1996:22;;:6;;;;;;;;;;:22;;;1988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9052:7:::1;9039:9;:20;;9031:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;9120:15;9138:8;:15;;;;9120:33;;9164:18;9185:15;9164:36;;9211:16;9243:9;9230:10;:22;;;;:::i;:::-;9211:41;;9267:8;9281:270;;;;;;;;9313:7;9281:270;;;;9348:1;9281:270;;;;9377:1;9281:270;;;;9409:1;9281:270;;;;9436:10;9281:270;;;;9471:9;9281:270;;;;9504:8;9281:270;;;;9534:5;9281:270;;;;::::0;9267:285:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9568:53;9580:7;9589:10;9601:9;9612:8;9568:53;;;;;;;;;:::i;:::-;;;;;;;;9020:609;;;8962:667:::0;:::o;1869:79::-;1907:7;1934:6;;;;;;;;;;;1927:13;;1869:79;:::o;19342:490::-;19424:7;19462:8;:15;;;;19452:7;:25;19444:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19517:21;19541:11;:20;19553:7;19541:20;;;;;;;;;;;:27;19562:5;19541:27;;;;;;;;;;;;;;;19517:51;;19579:21;19603:8;19612:7;19603:17;;;;;;;;:::i;:::-;;;;;;;;;;;;19579:41;;19693:15;19711:4;:11;;;19693:29;;19733:14;19784:4;:16;;;19761:4;:19;;;19751:7;:29;;;;:::i;:::-;19750:50;;;;:::i;:::-;19733:67;;19818:6;19811:13;;;;;;19342:490;;;;:::o;8367:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9637:2607::-;4908:21;:19;:21::i;:::-;9753:1:::1;9743:7;:11;9735:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9826:8;:15;;;;9816:7;:25;9808:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9881:21;9905:8;9914:7;9905:17;;;;;;;;:::i;:::-;;;;;;;;;;;;9881:41;;9960:4;:14;;;9941:15;:33;;9933:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10041:4;:12;;;10023:15;:30;10015:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10097:4;:10;;;;;;;;;;;;10096:11;10088:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;10142:4;;;;;;;;;;;:17;;;10160:10;10180:4;10187:7;10142:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10206:21;10230:11;:20;10242:7;10230:20;;;;;;;;;;;:32;10251:10;10230:32;;;;;;;;;;;;;;;10206:56;;10371:1;10356:4;:11;;;:16;:59;;;;;10414:1;10376:13;:25;10390:10;10376:25;;;;;;;;;;;;;;;:34;10402:7;10376:34;;;;;;;;;;;;:39;10356:59;10352:1833;;;10444:10;10432:4;:9;;;:22;;;;;;;;;;;;;;;;;;10486:15;10469:4;:14;;:32;;;;10530:7;10516:4;:11;;:21;;;;10573:15;10552:4;:18;;:36;;;;10616:6;10603:4;:10;;:19;;;;10651:7;10637:4;:11;;:21;;;;10673:22;10713:15;10698:4;:12;;;:30;;;;:::i;:::-;10673:55;;10743:15;10798:1;10789:6;10772:14;:23;;;;:::i;:::-;:27;;;;:::i;:::-;10761:7;:39;;;;:::i;:::-;10743:57;;10853:7;10834:4;:16;;;:26;;;;:::i;:::-;10815:4;:16;;:45;;;;10888:3;10879:6;:12;10875:246;;;10940:3;10934:2;10924:7;:12;;;;:::i;:::-;10923:20;;;;:::i;:::-;10912:31;;;;;:::i;:::-;;;10875:246;;;10978:3;10969:6;:12;10965:156;;;11030:3;11024:2;11014:7;:12;;;;:::i;:::-;11013:20;;;;:::i;:::-;11002:31;;;;;:::i;:::-;;;10965:156;;;11102:3;11097:1;11087:7;:11;;;;:::i;:::-;11086:19;;;;:::i;:::-;11075:30;;;;;:::i;:::-;;;10965:156;10875:246;11149:7;11135:4;:11;;:21;;;;11209:4;:11;;;11190:4;:16;;;:30;;;;:::i;:::-;11171:4;:16;;:49;;;;11235:18;11256:9;:18;11266:7;11256:18;;;;;;;;;;;:25;;;;11235:46;;11296:9;:18;11306:7;11296:18;;;;;;;;;;;11320:4;11296:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11377:10;11340:13;:25;11354:10;11340:25;;;;;;;;;;;;;;;:34;11366:7;11340:34;;;;;;;;;;;:47;;;;10417:984;;;10352:1833;;;11435:6;11422:4;:10;;:19;;;;11484:7;11470:4;:11;;;:21;;;;:::i;:::-;11456:4;:11;;:35;;;;11506:22;11546:15;11531:4;:12;;;:30;;;;:::i;:::-;11506:55;;11576:15;11631:1;11622:6;11605:14;:23;;;;:::i;:::-;:27;;;;:::i;:::-;11594:7;:39;;;;:::i;:::-;11576:57;;11663:3;11654:6;:12;11650:246;;;11715:3;11709:2;11699:7;:12;;;;:::i;:::-;11698:20;;;;:::i;:::-;11687:31;;;;;:::i;:::-;;;11650:246;;;11753:3;11744:6;:12;11740:156;;;11805:3;11799:2;11789:7;:12;;;;:::i;:::-;11788:20;;;;:::i;:::-;11777:31;;;;;:::i;:::-;;;11740:156;;;11877:3;11872:1;11862:7;:11;;;;:::i;:::-;11861:19;;;;:::i;:::-;11850:30;;;;;:::i;:::-;;;11740:156;11650:246;11925:7;11910:4;:11;;;:22;;;;;;;:::i;:::-;;;;;;;;11985:7;11966:4;:16;;;:26;;;;:::i;:::-;11947:4;:16;;:45;;;;12046:7;12026:4;:16;;;:27;;;;:::i;:::-;12007:4;:16;;:46;;;;12068:17;12088:13;:25;12102:10;12088:25;;;;;;;;;;;;;;;:34;12114:7;12088:34;;;;;;;;;;;;12068:54;;12169:4;12137:9;:18;12147:7;12137:18;;;;;;;;;;;12156:9;12137:29;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11407:778;;;10352:1833;12207:10;12200:36;;;12219:7;12228;12200:36;;;;;;;:::i;:::-;;;;;;;;9724:2520;;4952:20:::0;:18;:20::i;:::-;9637:2607;;;:::o;19840:606::-;2006:12;:10;:12::i;:::-;1996:22;;:6;;;;;;;;;;:22;;;1988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19952:1:::1;19942:7;:11;19934:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20026:9;20015:7;:20;20007:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20092:8;:15;;;;20082:7;:25;20074:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20147:21;20171:8;20180:7;20171:17;;;;;;;;:::i;:::-;;;;;;;;;;;;20147:41;;20226:4;:14;;;20207:15;:33;;20199:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20307:4;:12;;;20289:15;:30;20281:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20363:4;:10;;;;;;;;;;;;20362:11;20354:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;20431:7;20408:4;:19;;;:30;;;;;;;:::i;:::-;;;;;;;;19923:523;19840:606:::0;;:::o;15539:343::-;2006:12;:10;:12::i;:::-;1996:22;;:6;;;;;;;;;;:22;;;1988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15621:8:::1;:15;;;;15611:7;:25;15603:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15676:21;15700:8;15709:7;15700:17;;;;;;;;:::i;:::-;;;;;;;;;;;;15676:41;;15755:4;:12;;;15736:15;:31;;15728:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15819:4;15806;:10;;;:17;;;;;;;;;;;;;;;;;;15839:35;15849:7;15858:15;15839:35;;;;;;;:::i;:::-;;;;;;;;15592:290;15539:343:::0;:::o;6366:19::-;;;;;;;;;;;;;:::o;20497:112::-;2006:12;:10;:12::i;:::-;1996:22;;:6;;;;;;;;;;:22;;;1988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20558:10:::1;20550:28;;:51;20579:21;20550:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20497:112::o:0;15890:99::-;15936:17;15973:8;15966:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15890:99;:::o;2239:244::-;2006:12;:10;:12::i;:::-;1996:22;;:6;;;;;;;;;;:22;;;1988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2348:1:::1;2328:22;;:8;:22;;::::0;2320:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2438:8;2409:38;;2430:6;::::0;::::1;;;;;;;;2409:38;;;;;;;;;;;;2467:8;2458:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2239:244:::0;:::o;4988:315::-;4286:1;5117:7;;:18;5113:88;;5159:30;;;;;;;;;;;;;;5113:88;4286:1;5278:7;:17;;;;4988:315::o;5311:212::-;4243:1;5494:7;:21;;;;5311:212::o;1192:98::-;1245:7;1272:10;1265:17;;1192:98;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1207:7;1247:42;1240:5;1236:54;1225:65;;1170:126;;;:::o;1302:96::-;1339:7;1368:24;1386:5;1368:24;:::i;:::-;1357:35;;1302:96;;;:::o;1404:118::-;1491:24;1509:5;1491:24;:::i;:::-;1486:3;1479:37;1404:118;;:::o;1528:::-;1615:24;1633:5;1615:24;:::i;:::-;1610:3;1603:37;1528:118;;:::o;1652:90::-;1686:7;1729:5;1722:13;1715:21;1704:32;;1652:90;;;:::o;1748:109::-;1829:21;1844:5;1829:21;:::i;:::-;1824:3;1817:34;1748:109;;:::o;1863:1207::-;2202:4;2240:3;2229:9;2225:19;2217:27;;2254:71;2322:1;2311:9;2307:17;2298:6;2254:71;:::i;:::-;2335:72;2403:2;2392:9;2388:18;2379:6;2335:72;:::i;:::-;2417;2485:2;2474:9;2470:18;2461:6;2417:72;:::i;:::-;2499;2567:2;2556:9;2552:18;2543:6;2499:72;:::i;:::-;2581:73;2649:3;2638:9;2634:19;2625:6;2581:73;:::i;:::-;2664;2732:3;2721:9;2717:19;2708:6;2664:73;:::i;:::-;2747:67;2809:3;2798:9;2794:19;2785:6;2747:67;:::i;:::-;2824:73;2892:3;2881:9;2877:19;2868:6;2824:73;:::i;:::-;2907;2975:3;2964:9;2960:19;2951:6;2907:73;:::i;:::-;2990;3058:3;3047:9;3043:19;3034:6;2990:73;:::i;:::-;1863:1207;;;;;;;;;;;;;:::o;3076:122::-;3149:24;3167:5;3149:24;:::i;:::-;3142:5;3139:35;3129:63;;3188:1;3185;3178:12;3129:63;3076:122;:::o;3204:139::-;3250:5;3288:6;3275:20;3266:29;;3304:33;3331:5;3304:33;:::i;:::-;3204:139;;;;:::o;3349:474::-;3417:6;3425;3474:2;3462:9;3453:7;3449:23;3445:32;3442:119;;;3480:79;;:::i;:::-;3442:119;3600:1;3625:53;3670:7;3661:6;3650:9;3646:22;3625:53;:::i;:::-;3615:63;;3571:117;3727:2;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3698:118;3349:474;;;;;:::o;3829:108::-;3906:24;3924:5;3906:24;:::i;:::-;3901:3;3894:37;3829:108;;:::o;3943:::-;4020:24;4038:5;4020:24;:::i;:::-;4015:3;4008:37;3943:108;;:::o;4057:99::-;4128:21;4143:5;4128:21;:::i;:::-;4123:3;4116:34;4057:99;;:::o;4228:1940::-;4375:6;4370:3;4366:16;4464:4;4457:5;4453:16;4447:23;4483:63;4540:4;4535:3;4531:14;4517:12;4483:63;:::i;:::-;4392:164;4640:4;4633:5;4629:16;4623:23;4659:63;4716:4;4711:3;4707:14;4693:12;4659:63;:::i;:::-;4566:166;4816:4;4809:5;4805:16;4799:23;4835:63;4892:4;4887:3;4883:14;4869:12;4835:63;:::i;:::-;4742:166;4995:4;4988:5;4984:16;4978:23;5014:63;5071:4;5066:3;5062:14;5048:12;5014:63;:::i;:::-;4918:169;5171:4;5164:5;5160:16;5154:23;5190:63;5247:4;5242:3;5238:14;5224:12;5190:63;:::i;:::-;5097:166;5346:4;5339:5;5335:16;5329:23;5365:63;5422:4;5417:3;5413:14;5399:12;5365:63;:::i;:::-;5273:165;5523:4;5516:5;5512:16;5506:23;5542:57;5593:4;5588:3;5584:14;5570:12;5542:57;:::i;:::-;5448:161;5700:4;5693:5;5689:16;5683:23;5719:63;5776:4;5771:3;5767:14;5753:12;5719:63;:::i;:::-;5619:173;5880:6;5873:5;5869:18;5863:25;5901:65;5958:6;5953:3;5949:16;5935:12;5901:65;:::i;:::-;5802:174;6065:6;6058:5;6054:18;6048:25;6086:65;6143:6;6138:3;6134:16;6120:12;6086:65;:::i;:::-;5986:175;4344:1824;4228:1940;;:::o;6174:323::-;6317:4;6355:3;6344:9;6340:19;6332:27;;6369:121;6487:1;6476:9;6472:17;6463:6;6369:121;:::i;:::-;6174:323;;;;:::o;6503:329::-;6562:6;6611:2;6599:9;6590:7;6586:23;6582:32;6579:119;;;6617:79;;:::i;:::-;6579:119;6737:1;6762:53;6807:7;6798:6;6787:9;6783:22;6762:53;:::i;:::-;6752:63;;6708:117;6503:329;;;;:::o;6838:985::-;7121:4;7159:3;7148:9;7144:19;7136:27;;7173:71;7241:1;7230:9;7226:17;7217:6;7173:71;:::i;:::-;7254:72;7322:2;7311:9;7307:18;7298:6;7254:72;:::i;:::-;7336;7404:2;7393:9;7389:18;7380:6;7336:72;:::i;:::-;7418;7486:2;7475:9;7471:18;7462:6;7418:72;:::i;:::-;7500:73;7568:3;7557:9;7553:19;7544:6;7500:73;:::i;:::-;7583;7651:3;7640:9;7636:19;7627:6;7583:73;:::i;:::-;7666;7734:3;7723:9;7719:19;7710:6;7666:73;:::i;:::-;7749:67;7811:3;7800:9;7796:19;7787:6;7749:67;:::i;:::-;6838:985;;;;;;;;;;;:::o;7829:619::-;7906:6;7914;7922;7971:2;7959:9;7950:7;7946:23;7942:32;7939:119;;;7977:79;;:::i;:::-;7939:119;8097:1;8122:53;8167:7;8158:6;8147:9;8143:22;8122:53;:::i;:::-;8112:63;;8068:117;8224:2;8250:53;8295:7;8286:6;8275:9;8271:22;8250:53;:::i;:::-;8240:63;;8195:118;8352:2;8378:53;8423:7;8414:6;8403:9;8399:22;8378:53;:::i;:::-;8368:63;;8323:118;7829:619;;;;;:::o;8454:149::-;8556:6;8590:5;8584:12;8574:22;;8454:149;;;:::o;8609:219::-;8743:11;8777:6;8772:3;8765:19;8817:4;8812:3;8808:14;8793:29;;8609:219;;;;:::o;8834:167::-;8936:4;8959:3;8951:11;;8989:4;8984:3;8980:14;8972:22;;8834:167;;;:::o;9093:2129::-;9250:6;9245:3;9241:16;9339:4;9332:5;9328:16;9322:23;9358:63;9415:4;9410:3;9406:14;9392:12;9358:63;:::i;:::-;9267:164;9515:4;9508:5;9504:16;9498:23;9534:63;9591:4;9586:3;9582:14;9568:12;9534:63;:::i;:::-;9441:166;9691:4;9684:5;9680:16;9674:23;9710:63;9767:4;9762:3;9758:14;9744:12;9710:63;:::i;:::-;9617:166;9870:4;9863:5;9859:16;9853:23;9889:63;9946:4;9941:3;9937:14;9923:12;9889:63;:::i;:::-;9793:169;10046:4;10039:5;10035:16;10029:23;10065:63;10122:4;10117:3;10113:14;10099:12;10065:63;:::i;:::-;9972:166;10221:4;10214:5;10210:16;10204:23;10240:63;10297:4;10292:3;10288:14;10274:12;10240:63;:::i;:::-;10148:165;10398:4;10391:5;10387:16;10381:23;10417:57;10468:4;10463:3;10459:14;10445:12;10417:57;:::i;:::-;10323:161;10575:4;10568:5;10564:16;10558:23;10594:63;10651:4;10646:3;10642:14;10628:12;10594:63;:::i;:::-;10494:173;10755:6;10748:5;10744:18;10738:25;10776:65;10833:6;10828:3;10824:16;10810:12;10776:65;:::i;:::-;10677:174;10940:6;10933:5;10929:18;10923:25;10961:65;11018:6;11013:3;11009:16;10995:12;10961:65;:::i;:::-;10861:175;11119:6;11112:5;11108:18;11102:25;11140:65;11197:6;11192:3;11188:16;11174:12;11140:65;:::i;:::-;11046:169;9219:2003;9093:2129;;:::o;11228:321::-;11367:10;11388:116;11500:3;11492:6;11388:116;:::i;:::-;11536:6;11531:3;11527:16;11513:30;;11228:321;;;;:::o;11555:148::-;11660:4;11692;11687:3;11683:14;11675:22;;11555:148;;;:::o;11799:1012::-;11988:3;12017:89;12100:5;12017:89;:::i;:::-;12122:121;12236:6;12231:3;12122:121;:::i;:::-;12115:128;;12267:91;12352:5;12267:91;:::i;:::-;12381:7;12412:1;12397:389;12422:6;12419:1;12416:13;12397:389;;;12498:6;12492:13;12525:133;12654:3;12639:13;12525:133;:::i;:::-;12518:140;;12681:95;12769:6;12681:95;:::i;:::-;12671:105;;12457:329;12444:1;12441;12437:9;12432:14;;12397:389;;;12401:14;12802:3;12795:10;;11993:818;;;11799:1012;;;;:::o;12817:513::-;13030:4;13068:2;13057:9;13053:18;13045:26;;13117:9;13111:4;13107:20;13103:1;13092:9;13088:17;13081:47;13145:178;13318:4;13309:6;13145:178;:::i;:::-;13137:186;;12817:513;;;;:::o;13336:139::-;13428:6;13462:5;13456:12;13446:22;;13336:139;;;:::o;13481:209::-;13605:11;13639:6;13634:3;13627:19;13679:4;13674:3;13670:14;13655:29;;13481:209;;;;:::o;13696:157::-;13788:4;13811:3;13803:11;;13841:4;13836:3;13832:14;13824:22;;13696:157;;;:::o;13925:1930::-;14062:6;14057:3;14053:16;14151:4;14144:5;14140:16;14134:23;14170:63;14227:4;14222:3;14218:14;14204:12;14170:63;:::i;:::-;14079:164;14327:4;14320:5;14316:16;14310:23;14346:63;14403:4;14398:3;14394:14;14380:12;14346:63;:::i;:::-;14253:166;14503:4;14496:5;14492:16;14486:23;14522:63;14579:4;14574:3;14570:14;14556:12;14522:63;:::i;:::-;14429:166;14682:4;14675:5;14671:16;14665:23;14701:63;14758:4;14753:3;14749:14;14735:12;14701:63;:::i;:::-;14605:169;14858:4;14851:5;14847:16;14841:23;14877:63;14934:4;14929:3;14925:14;14911:12;14877:63;:::i;:::-;14784:166;15033:4;15026:5;15022:16;15016:23;15052:63;15109:4;15104:3;15100:14;15086:12;15052:63;:::i;:::-;14960:165;15210:4;15203:5;15199:16;15193:23;15229:57;15280:4;15275:3;15271:14;15257:12;15229:57;:::i;:::-;15135:161;15387:4;15380:5;15376:16;15370:23;15406:63;15463:4;15458:3;15454:14;15440:12;15406:63;:::i;:::-;15306:173;15567:6;15560:5;15556:18;15550:25;15588:65;15645:6;15640:3;15636:16;15622:12;15588:65;:::i;:::-;15489:174;15752:6;15745:5;15741:18;15735:25;15773:65;15830:6;15825:3;15821:16;15807:12;15773:65;:::i;:::-;15673:175;14031:1824;13925:1930;;:::o;15861:281::-;15980:10;16001:96;16093:3;16085:6;16001:96;:::i;:::-;16129:6;16124:3;16120:16;16106:30;;15861:281;;;;:::o;16148:138::-;16243:4;16275;16270:3;16266:14;16258:22;;16148:138;;;:::o;16362:932::-;16531:3;16560:79;16633:5;16560:79;:::i;:::-;16655:111;16759:6;16754:3;16655:111;:::i;:::-;16648:118;;16790:81;16865:5;16790:81;:::i;:::-;16894:7;16925:1;16910:359;16935:6;16932:1;16929:13;16910:359;;;17011:6;17005:13;17038:113;17147:3;17132:13;17038:113;:::i;:::-;17031:120;;17174:85;17252:6;17174:85;:::i;:::-;17164:95;;16970:299;16957:1;16954;16950:9;16945:14;;16910:359;;;16914:14;17285:3;17278:10;;16536:758;;;16362:932;;;;:::o;17300:473::-;17493:4;17531:2;17520:9;17516:18;17508:26;;17580:9;17574:4;17570:20;17566:1;17555:9;17551:17;17544:47;17608:158;17761:4;17752:6;17608:158;:::i;:::-;17600:166;;17300:473;;;;:::o;17779:222::-;17872:4;17910:2;17899:9;17895:18;17887:26;;17923:71;17991:1;17980:9;17976:17;17967:6;17923:71;:::i;:::-;17779:222;;;;:::o;18007:::-;18100:4;18138:2;18127:9;18123:18;18115:26;;18151:71;18219:1;18208:9;18204:17;18195:6;18151:71;:::i;:::-;18007:222;;;;:::o;18235:474::-;18303:6;18311;18360:2;18348:9;18339:7;18335:23;18331:32;18328:119;;;18366:79;;:::i;:::-;18328:119;18486:1;18511:53;18556:7;18547:6;18536:9;18532:22;18511:53;:::i;:::-;18501:63;;18457:117;18613:2;18639:53;18684:7;18675:6;18664:9;18660:22;18639:53;:::i;:::-;18629:63;;18584:118;18235:474;;;;;:::o;18715:60::-;18743:3;18764:5;18757:12;;18715:60;;;:::o;18781:142::-;18831:9;18864:53;18882:34;18891:24;18909:5;18891:24;:::i;:::-;18882:34;:::i;:::-;18864:53;:::i;:::-;18851:66;;18781:142;;;:::o;18929:126::-;18979:9;19012:37;19043:5;19012:37;:::i;:::-;18999:50;;18929:126;;;:::o;19061:139::-;19124:9;19157:37;19188:5;19157:37;:::i;:::-;19144:50;;19061:139;;;:::o;19206:157::-;19306:50;19350:5;19306:50;:::i;:::-;19301:3;19294:63;19206:157;;:::o;19369:248::-;19475:4;19513:2;19502:9;19498:18;19490:26;;19526:84;19607:1;19596:9;19592:17;19583:6;19526:84;:::i;:::-;19369:248;;;;:::o;19623:139::-;19715:6;19749:5;19743:12;19733:22;;19623:139;;;:::o;19768:209::-;19892:11;19926:6;19921:3;19914:19;19966:4;19961:3;19957:14;19942:29;;19768:209;;;;:::o;19983:157::-;20075:4;20098:3;20090:11;;20128:4;20123:3;20119:14;20111:22;;19983:157;;;:::o;20212:1576::-;20349:6;20344:3;20340:16;20440:4;20433:5;20429:16;20423:23;20459:63;20516:4;20511:3;20507:14;20493:12;20459:63;:::i;:::-;20366:166;20621:4;20614:5;20610:16;20604:23;20640:63;20697:4;20692:3;20688:14;20674:12;20640:63;:::i;:::-;20542:171;20802:4;20795:5;20791:16;20785:23;20821:63;20878:4;20873:3;20869:14;20855:12;20821:63;:::i;:::-;20723:171;20986:4;20979:5;20975:16;20969:23;21005:63;21062:4;21057:3;21053:14;21039:12;21005:63;:::i;:::-;20904:174;21165:4;21158:5;21154:16;21148:23;21184:63;21241:4;21236:3;21232:14;21218:12;21184:63;:::i;:::-;21088:169;21343:4;21336:5;21332:16;21326:23;21362:63;21419:4;21414:3;21410:14;21396:12;21362:63;:::i;:::-;21267:168;21520:4;21513:5;21509:16;21503:23;21539:63;21596:4;21591:3;21587:14;21573:12;21539:63;:::i;:::-;21445:167;21695:4;21688:5;21684:16;21678:23;21714:57;21765:4;21760:3;21756:14;21742:12;21714:57;:::i;:::-;21622:159;20318:1470;20212:1576;;:::o;21794:281::-;21913:10;21934:96;22026:3;22018:6;21934:96;:::i;:::-;22062:6;22057:3;22053:16;22039:30;;21794:281;;;;:::o;22081:138::-;22176:4;22208;22203:3;22199:14;22191:22;;22081:138;;;:::o;22295:932::-;22464:3;22493:79;22566:5;22493:79;:::i;:::-;22588:111;22692:6;22687:3;22588:111;:::i;:::-;22581:118;;22723:81;22798:5;22723:81;:::i;:::-;22827:7;22858:1;22843:359;22868:6;22865:1;22862:13;22843:359;;;22944:6;22938:13;22971:113;23080:3;23065:13;22971:113;:::i;:::-;22964:120;;23107:85;23185:6;23107:85;:::i;:::-;23097:95;;22903:299;22890:1;22887;22883:9;22878:14;;22843:359;;;22847:14;23218:3;23211:10;;22469:758;;;22295:932;;;;:::o;23233:473::-;23426:4;23464:2;23453:9;23449:18;23441:26;;23513:9;23507:4;23503:20;23499:1;23488:9;23484:17;23477:47;23541:158;23694:4;23685:6;23541:158;:::i;:::-;23533:166;;23233:473;;;;:::o;23712:329::-;23771:6;23820:2;23808:9;23799:7;23795:23;23791:32;23788:119;;;23826:79;;:::i;:::-;23788:119;23946:1;23971:53;24016:7;24007:6;23996:9;23992:22;23971:53;:::i;:::-;23961:63;;23917:117;23712:329;;;;:::o;24047:169::-;24131:11;24165:6;24160:3;24153:19;24205:4;24200:3;24196:14;24181:29;;24047:169;;;;:::o;24222:174::-;24362:26;24358:1;24350:6;24346:14;24339:50;24222:174;:::o;24402:366::-;24544:3;24565:67;24629:2;24624:3;24565:67;:::i;:::-;24558:74;;24641:93;24730:3;24641:93;:::i;:::-;24759:2;24754:3;24750:12;24743:19;;24402:366;;;:::o;24774:419::-;24940:4;24978:2;24967:9;24963:18;24955:26;;25027:9;25021:4;25017:20;25013:1;25002:9;24998:17;24991:47;25055:131;25181:4;25055:131;:::i;:::-;25047:139;;24774:419;;;:::o;25199:178::-;25339:30;25335:1;25327:6;25323:14;25316:54;25199:178;:::o;25383:366::-;25525:3;25546:67;25610:2;25605:3;25546:67;:::i;:::-;25539:74;;25622:93;25711:3;25622:93;:::i;:::-;25740:2;25735:3;25731:12;25724:19;;25383:366;;;:::o;25755:419::-;25921:4;25959:2;25948:9;25944:18;25936:26;;26008:9;26002:4;25998:20;25994:1;25983:9;25979:17;25972:47;26036:131;26162:4;26036:131;:::i;:::-;26028:139;;25755:419;;;:::o;26180:176::-;26320:28;26316:1;26308:6;26304:14;26297:52;26180:176;:::o;26362:366::-;26504:3;26525:67;26589:2;26584:3;26525:67;:::i;:::-;26518:74;;26601:93;26690:3;26601:93;:::i;:::-;26719:2;26714:3;26710:12;26703:19;;26362:366;;;:::o;26734:419::-;26900:4;26938:2;26927:9;26923:18;26915:26;;26987:9;26981:4;26977:20;26973:1;26962:9;26958:17;26951:47;27015:131;27141:4;27015:131;:::i;:::-;27007:139;;26734:419;;;:::o;27159:180::-;27207:77;27204:1;27197:88;27304:4;27301:1;27294:15;27328:4;27325:1;27318:15;27345:194;27385:4;27405:20;27423:1;27405:20;:::i;:::-;27400:25;;27439:20;27457:1;27439:20;:::i;:::-;27434:25;;27483:1;27480;27476:9;27468:17;;27507:1;27501:4;27498:11;27495:37;;;27512:18;;:::i;:::-;27495:37;27345:194;;;;:::o;27545:191::-;27585:3;27604:20;27622:1;27604:20;:::i;:::-;27599:25;;27638:20;27656:1;27638:20;:::i;:::-;27633:25;;27681:1;27678;27674:9;27667:16;;27702:3;27699:1;27696:10;27693:36;;;27709:18;;:::i;:::-;27693:36;27545:191;;;;:::o;27742:180::-;27790:77;27787:1;27780:88;27887:4;27884:1;27877:15;27911:4;27908:1;27901:15;27928:180;27976:77;27973:1;27966:88;28073:4;28070:1;28063:15;28097:4;28094:1;28087:15;28114:410;28154:7;28177:20;28195:1;28177:20;:::i;:::-;28172:25;;28211:20;28229:1;28211:20;:::i;:::-;28206:25;;28266:1;28263;28259:9;28288:30;28306:11;28288:30;:::i;:::-;28277:41;;28467:1;28458:7;28454:15;28451:1;28448:22;28428:1;28421:9;28401:83;28378:139;;28497:18;;:::i;:::-;28378:139;28162:362;28114:410;;;;:::o;28530:180::-;28578:77;28575:1;28568:88;28675:4;28672:1;28665:15;28699:4;28696:1;28689:15;28716:185;28756:1;28773:20;28791:1;28773:20;:::i;:::-;28768:25;;28807:20;28825:1;28807:20;:::i;:::-;28802:25;;28846:1;28836:35;;28851:18;;:::i;:::-;28836:35;28893:1;28890;28886:9;28881:14;;28716:185;;;;:::o;28907:233::-;28946:3;28969:24;28987:5;28969:24;:::i;:::-;28960:33;;29015:66;29008:5;29005:77;29002:103;;29085:18;;:::i;:::-;29002:103;29132:1;29125:5;29121:13;29114:20;;28907:233;;;:::o;29146:223::-;29286:34;29282:1;29274:6;29270:14;29263:58;29355:6;29350:2;29342:6;29338:15;29331:31;29146:223;:::o;29375:366::-;29517:3;29538:67;29602:2;29597:3;29538:67;:::i;:::-;29531:74;;29614:93;29703:3;29614:93;:::i;:::-;29732:2;29727:3;29723:12;29716:19;;29375:366;;;:::o;29747:419::-;29913:4;29951:2;29940:9;29936:18;29928:26;;30000:9;29994:4;29990:20;29986:1;29975:9;29971:17;29964:47;30028:131;30154:4;30028:131;:::i;:::-;30020:139;;29747:419;;;:::o;30172:176::-;30312:28;30308:1;30300:6;30296:14;30289:52;30172:176;:::o;30354:366::-;30496:3;30517:67;30581:2;30576:3;30517:67;:::i;:::-;30510:74;;30593:93;30682:3;30593:93;:::i;:::-;30711:2;30706:3;30702:12;30695:19;;30354:366;;;:::o;30726:419::-;30892:4;30930:2;30919:9;30915:18;30907:26;;30979:9;30973:4;30969:20;30965:1;30954:9;30950:17;30943:47;31007:131;31133:4;31007:131;:::i;:::-;30999:139;;30726:419;;;:::o;31151:173::-;31291:25;31287:1;31279:6;31275:14;31268:49;31151:173;:::o;31330:366::-;31472:3;31493:67;31557:2;31552:3;31493:67;:::i;:::-;31486:74;;31569:93;31658:3;31569:93;:::i;:::-;31687:2;31682:3;31678:12;31671:19;;31330:366;;;:::o;31702:419::-;31868:4;31906:2;31895:9;31891:18;31883:26;;31955:9;31949:4;31945:20;31941:1;31930:9;31926:17;31919:47;31983:131;32109:4;31983:131;:::i;:::-;31975:139;;31702:419;;;:::o;32127:179::-;32267:31;32263:1;32255:6;32251:14;32244:55;32127:179;:::o;32312:366::-;32454:3;32475:67;32539:2;32534:3;32475:67;:::i;:::-;32468:74;;32551:93;32640:3;32551:93;:::i;:::-;32669:2;32664:3;32660:12;32653:19;;32312:366;;;:::o;32684:419::-;32850:4;32888:2;32877:9;32873:18;32865:26;;32937:9;32931:4;32927:20;32923:1;32912:9;32908:17;32901:47;32965:131;33091:4;32965:131;:::i;:::-;32957:139;;32684:419;;;:::o;33109:332::-;33230:4;33268:2;33257:9;33253:18;33245:26;;33281:71;33349:1;33338:9;33334:17;33325:6;33281:71;:::i;:::-;33362:72;33430:2;33419:9;33415:18;33406:6;33362:72;:::i;:::-;33109:332;;;;;:::o;33447:116::-;33517:21;33532:5;33517:21;:::i;:::-;33510:5;33507:32;33497:60;;33553:1;33550;33543:12;33497:60;33447:116;:::o;33569:137::-;33623:5;33654:6;33648:13;33639:22;;33670:30;33694:5;33670:30;:::i;:::-;33569:137;;;;:::o;33712:345::-;33779:6;33828:2;33816:9;33807:7;33803:23;33799:32;33796:119;;;33834:79;;:::i;:::-;33796:119;33954:1;33979:61;34032:7;34023:6;34012:9;34008:22;33979:61;:::i;:::-;33969:71;;33925:125;33712:345;;;;:::o;34063:332::-;34184:4;34222:2;34211:9;34207:18;34199:26;;34235:71;34303:1;34292:9;34288:17;34279:6;34235:71;:::i;:::-;34316:72;34384:2;34373:9;34369:18;34360:6;34316:72;:::i;:::-;34063:332;;;;;:::o;34401:182::-;34541:34;34537:1;34529:6;34525:14;34518:58;34401:182;:::o;34589:366::-;34731:3;34752:67;34816:2;34811:3;34752:67;:::i;:::-;34745:74;;34828:93;34917:3;34828:93;:::i;:::-;34946:2;34941:3;34937:12;34930:19;;34589:366;;;:::o;34961:419::-;35127:4;35165:2;35154:9;35150:18;35142:26;;35214:9;35208:4;35204:20;35200:1;35189:9;35185:17;35178:47;35242:131;35368:4;35242:131;:::i;:::-;35234:139;;34961:419;;;:::o;35386:143::-;35443:5;35474:6;35468:13;35459:22;;35490:33;35517:5;35490:33;:::i;:::-;35386:143;;;;:::o;35535:351::-;35605:6;35654:2;35642:9;35633:7;35629:23;35625:32;35622:119;;;35660:79;;:::i;:::-;35622:119;35780:1;35805:64;35861:7;35852:6;35841:9;35837:22;35805:64;:::i;:::-;35795:74;;35751:128;35535:351;;;;:::o;35892:169::-;36032:21;36028:1;36020:6;36016:14;36009:45;35892:169;:::o;36067:366::-;36209:3;36230:67;36294:2;36289:3;36230:67;:::i;:::-;36223:74;;36306:93;36395:3;36306:93;:::i;:::-;36424:2;36419:3;36415:12;36408:19;;36067:366;;;:::o;36439:419::-;36605:4;36643:2;36632:9;36628:18;36620:26;;36692:9;36686:4;36682:20;36678:1;36667:9;36663:17;36656:47;36720:131;36846:4;36720:131;:::i;:::-;36712:139;;36439:419;;;:::o;36864:230::-;37004:34;37000:1;36992:6;36988:14;36981:58;37073:13;37068:2;37060:6;37056:15;37049:38;36864:230;:::o;37100:366::-;37242:3;37263:67;37327:2;37322:3;37263:67;:::i;:::-;37256:74;;37339:93;37428:3;37339:93;:::i;:::-;37457:2;37452:3;37448:12;37441:19;;37100:366;;;:::o;37472:419::-;37638:4;37676:2;37665:9;37661:18;37653:26;;37725:9;37719:4;37715:20;37711:1;37700:9;37696:17;37689:47;37753:131;37879:4;37753:131;:::i;:::-;37745:139;;37472:419;;;:::o;37897:232::-;38037:34;38033:1;38025:6;38021:14;38014:58;38106:15;38101:2;38093:6;38089:15;38082:40;37897:232;:::o;38135:366::-;38277:3;38298:67;38362:2;38357:3;38298:67;:::i;:::-;38291:74;;38374:93;38463:3;38374:93;:::i;:::-;38492:2;38487:3;38483:12;38476:19;;38135:366;;;:::o;38507:419::-;38673:4;38711:2;38700:9;38696:18;38688:26;;38760:9;38754:4;38750:20;38746:1;38735:9;38731:17;38724:47;38788:131;38914:4;38788:131;:::i;:::-;38780:139;;38507:419;;;:::o;38932:553::-;39109:4;39147:3;39136:9;39132:19;39124:27;;39161:71;39229:1;39218:9;39214:17;39205:6;39161:71;:::i;:::-;39242:72;39310:2;39299:9;39295:18;39286:6;39242:72;:::i;:::-;39324;39392:2;39381:9;39377:18;39368:6;39324:72;:::i;:::-;39406;39474:2;39463:9;39459:18;39450:6;39406:72;:::i;:::-;38932:553;;;;;;;:::o;39491:225::-;39631:34;39627:1;39619:6;39615:14;39608:58;39700:8;39695:2;39687:6;39683:15;39676:33;39491:225;:::o;39722:366::-;39864:3;39885:67;39949:2;39944:3;39885:67;:::i;:::-;39878:74;;39961:93;40050:3;39961:93;:::i;:::-;40079:2;40074:3;40070:12;40063:19;;39722:366;;;:::o;40094:419::-;40260:4;40298:2;40287:9;40283:18;40275:26;;40347:9;40341:4;40337:20;40333:1;40322:9;40318:17;40311:47;40375:131;40501:4;40375:131;:::i;:::-;40367:139;;40094:419;;;:::o;40519:175::-;40659:27;40655:1;40647:6;40643:14;40636:51;40519:175;:::o;40700:366::-;40842:3;40863:67;40927:2;40922:3;40863:67;:::i;:::-;40856:74;;40939:93;41028:3;40939:93;:::i;:::-;41057:2;41052:3;41048:12;41041:19;;40700:366;;;:::o;41072:419::-;41238:4;41276:2;41265:9;41261:18;41253:26;;41325:9;41319:4;41315:20;41311:1;41300:9;41296:17;41289:47;41353:131;41479:4;41353:131;:::i;:::-;41345:139;;41072:419;;;:::o;41497:442::-;41646:4;41684:2;41673:9;41669:18;41661:26;;41697:71;41765:1;41754:9;41750:17;41741:6;41697:71;:::i;:::-;41778:72;41846:2;41835:9;41831:18;41822:6;41778:72;:::i;:::-;41860;41928:2;41917:9;41913:18;41904:6;41860:72;:::i;:::-;41497:442;;;;;;:::o;41945:173::-;42085:25;42081:1;42073:6;42069:14;42062:49;41945:173;:::o;42124:366::-;42266:3;42287:67;42351:2;42346:3;42287:67;:::i;:::-;42280:74;;42363:93;42452:3;42363:93;:::i;:::-;42481:2;42476:3;42472:12;42465:19;;42124:366;;;:::o;42496:419::-;42662:4;42700:2;42689:9;42685:18;42677:26;;42749:9;42743:4;42739:20;42735:1;42724:9;42720:17;42713:47;42777:131;42903:4;42777:131;:::i;:::-;42769:139;;42496:419;;;:::o;42921:225::-;43061:34;43057:1;43049:6;43045:14;43038:58;43130:8;43125:2;43117:6;43113:15;43106:33;42921:225;:::o;43152:366::-;43294:3;43315:67;43379:2;43374:3;43315:67;:::i;:::-;43308:74;;43391:93;43480:3;43391:93;:::i;:::-;43509:2;43504:3;43500:12;43493:19;;43152:366;;;:::o;43524:419::-;43690:4;43728:2;43717:9;43713:18;43705:26;;43777:9;43771:4;43767:20;43763:1;43752:9;43748:17;43741:47;43805:131;43931:4;43805:131;:::i;:::-;43797:139;;43524:419;;;:::o

Swarm Source

ipfs://20dadbf6bc462a5e8ddfbfe1fc61705b86dd9c223f35357845f2f696b8e7137e

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

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