ETH Price: $2,537.85 (+0.25%)

Contract

0x0453aA2dAffF030614D9AfEF6c724ec2bEE60876
 

Overview

ETH Balance

0.000689361 ETH

Eth Value

$1.75 (@ $2,537.85/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Close Position173708802023-05-30 9:32:47457 days ago1685439167IN
0x0453aA2d...2bEE60876
0 ETH0.003925842.1314233
Stake Tokens173066142023-05-21 8:39:11466 days ago1684658351IN
0x0453aA2d...2bEE60876
0 ETH0.0096428527.62013272
Withdraw Swify172470202023-05-12 22:48:47474 days ago1683931727IN
0x0453aA2d...2bEE60876
0 ETH0.0057052468.60981662
Close Position172445452023-05-12 13:52:11475 days ago1683899531IN
0x0453aA2d...2bEE60876
0 ETH0.0051043563.11021783
Close Position172399712023-05-11 22:20:59475 days ago1683843659IN
0x0453aA2d...2bEE60876
0 ETH0.0067468968.85988481
Close Position172376892023-05-11 14:26:11476 days ago1683815171IN
0x0453aA2d...2bEE60876
0 ETH0.01097753112.03851251
Close Position172361812023-05-11 9:20:23476 days ago1683796823IN
0x0453aA2d...2bEE60876
0 ETH0.0072271789.35678751
Close Position172285962023-05-10 7:42:47477 days ago1683704567IN
0x0453aA2d...2bEE60876
0 ETH0.011332757.84532486
Close Position172277032023-05-10 4:42:35477 days ago1683693755IN
0x0453aA2d...2bEE60876
0 ETH0.0046583557.59594347
Close Position172276912023-05-10 4:40:11477 days ago1683693611IN
0x0453aA2d...2bEE60876
0 ETH0.0052524553.60743615
Close Position172274682023-05-10 3:55:11477 days ago1683690911IN
0x0453aA2d...2bEE60876
0 ETH0.005257265
Close Position172262672023-05-09 23:52:11477 days ago1683676331IN
0x0453aA2d...2bEE60876
0 ETH0.0067632383.62058325
Close Position172259962023-05-09 22:57:35477 days ago1683673055IN
0x0453aA2d...2bEE60876
0 ETH0.0066995382.83299262
Close Position172259662023-05-09 22:51:35477 days ago1683672695IN
0x0453aA2d...2bEE60876
0 ETH0.0071164987.98825894
Close Position172231872023-05-09 13:27:59478 days ago1683638879IN
0x0453aA2d...2bEE60876
0 ETH0.0078079296.53715268
Close Position172222112023-05-09 10:10:35478 days ago1683627035IN
0x0453aA2d...2bEE60876
0 ETH0.005385466.58509456
Close Position172203042023-05-09 3:45:11478 days ago1683603911IN
0x0453aA2d...2bEE60876
0 ETH0.0069320370.74952454
Close Position172202782023-05-09 3:39:47478 days ago1683603587IN
0x0453aA2d...2bEE60876
0 ETH0.0064734566.06914195
Close Position172195302023-05-09 1:08:23478 days ago1683594503IN
0x0453aA2d...2bEE60876
0 ETH0.0132753867.76127892
Close Position172083722023-05-07 11:29:23480 days ago1683458963IN
0x0453aA2d...2bEE60876
0 ETH0.0064826780.15177279
Close Position172061932023-05-07 4:07:47480 days ago1683432467IN
0x0453aA2d...2bEE60876
0 ETH0.0068123284.22756346
Close Position172013262023-05-06 11:42:59481 days ago1683373379IN
0x0453aA2d...2bEE60876
0 ETH0.01109516113.23907813
Close Position171906882023-05-04 23:51:35482 days ago1683244295IN
0x0453aA2d...2bEE60876
0 ETH0.0060418274.70110145
Close Position171897982023-05-04 20:52:35483 days ago1683233555IN
0x0453aA2d...2bEE60876
0 ETH0.0068056984.14555134
Close Position171896902023-05-04 20:30:35483 days ago1683232235IN
0x0453aA2d...2bEE60876
0 ETH0.0077163995.40546935
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
170301572023-04-12 6:28:23505 days ago1681280903
0x0453aA2d...2bEE60876
0.00635719 ETH
170299702023-04-12 5:49:59505 days ago1681278599
0x0453aA2d...2bEE60876
0.00121764 ETH
170299622023-04-12 5:48:23505 days ago1681278503
0x0453aA2d...2bEE60876
0.00430312 ETH
170218972023-04-11 2:25:11506 days ago1681179911
0x0453aA2d...2bEE60876
0.02288945 ETH
170126302023-04-09 18:54:23508 days ago1681066463
0x0453aA2d...2bEE60876
0.01774026 ETH
170119932023-04-09 16:45:35508 days ago1681058735
0x0453aA2d...2bEE60876
0.00573201 ETH
170109862023-04-09 13:17:59508 days ago1681046279
0x0453aA2d...2bEE60876
0.02633737 ETH
170107472023-04-09 12:29:11508 days ago1681043351
0x0453aA2d...2bEE60876
0.03784519 ETH
170107412023-04-09 12:27:59508 days ago1681043279
0x0453aA2d...2bEE60876
0.02356068 ETH
170098892023-04-09 9:34:23508 days ago1681032863
0x0453aA2d...2bEE60876
0.00490446 ETH
170088912023-04-09 6:10:11508 days ago1681020611
0x0453aA2d...2bEE60876
0.01721014 ETH
170047092023-04-08 15:58:47509 days ago1680969527
0x0453aA2d...2bEE60876
0.0319588 ETH
170033572023-04-08 11:22:35509 days ago1680952955
0x0453aA2d...2bEE60876
0.01912443 ETH
169989722023-04-07 20:29:35510 days ago1680899375
0x0453aA2d...2bEE60876
0.07617648 ETH
169976132023-04-07 15:52:35510 days ago1680882755
0x0453aA2d...2bEE60876
0.01139302 ETH
169975222023-04-07 15:33:59510 days ago1680881639
0x0453aA2d...2bEE60876
0.01789779 ETH
169972132023-04-07 14:30:35510 days ago1680877835
0x0453aA2d...2bEE60876
0.00735856 ETH
169972092023-04-07 14:29:47510 days ago1680877787
0x0453aA2d...2bEE60876
0.00655595 ETH
169959422023-04-07 10:10:59510 days ago1680862259
0x0453aA2d...2bEE60876
0.0173215 ETH
169959162023-04-07 10:05:47510 days ago1680861947
0x0453aA2d...2bEE60876
0.00504588 ETH
169959142023-04-07 10:05:23510 days ago1680861923
0x0453aA2d...2bEE60876
0.00788224 ETH
169946762023-04-07 5:51:59510 days ago1680846719
0x0453aA2d...2bEE60876
0.01903725 ETH
169930712023-04-07 0:24:47510 days ago1680827087
0x0453aA2d...2bEE60876
0.03596912 ETH
169902082023-04-06 14:39:47511 days ago1680791987
0x0453aA2d...2bEE60876
0.00397777 ETH
169897522023-04-06 13:06:11511 days ago1680786371
0x0453aA2d...2bEE60876
0.01063161 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SwifyStaking

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-12-27
*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @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 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;

    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
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: stakingswify.sol



pragma solidity ^0.8.0;

// openzeppelin imports



interface IstakingContract {
    function balanceOf(address account) external view returns (uint256);
}

contract SwifyStaking is ReentrancyGuard {

    address public owner;
    uint public currentPositionId;
    uint public currentTokenId;
    string[] public tokenSymbols;
    uint public amountOfTokenPerEth = 174811;
    uint public apr = 100;
    address swifyCoinAddress = 0x9C7376b5060C47E555f5F53005aA3D5A7C66f2fB;
    IstakingContract swifyContract;
    bool public stakingOn = true;

    // Structs
     struct Token {
     uint tokenId;
     string name;
     string symbol;
     address tokenAddress;
     bool exists;
    }

    struct Position {
        uint positionId;
        address walletAddress;
        string symbol;
        uint tokenQuantity;
        uint createdDate;
        uint profitsPerWeek;
        uint nextWeekUnlockDate;
        uint profitsReclaimed;
        uint apy; 
        bool open;
        bool exists;
    }

    mapping(string => Token) public tokens;
    mapping(uint => Position) public positions;
    mapping(address => uint[]) public positionsIdsByAddress;

    modifier onlyOwner {
     require (owner == msg.sender, "Only owner may call this function");
     _;
    }

    constructor() payable {
        owner = msg.sender;
        currentPositionId = 1;
        currentTokenId = 1;

        swifyContract = IstakingContract(swifyCoinAddress);
    }

     receive() external payable {

     }

     function changeAmountOfTokenPerEth(uint newAmount) external onlyOwner {
          amountOfTokenPerEth = newAmount;
     }

     function changeApr(uint newAmount) external onlyOwner {
          apr = newAmount;
     }

     function calculateNumberDays(uint createdDate) public view returns(uint) {
          return (block.timestamp - createdDate) / 60 / 60 / 24;
     }

     function calculatePerWeekPayment(uint apy, uint tokenQuantity) public pure returns(uint) {
          return apy * tokenQuantity / 100 / 12 / 4;
     }

     function withdrawEth() external onlyOwner {
          (bool os,) = payable(owner).call{value:address(this).balance}("");
          require(os);
     }

     function withdrawSwify() external onlyOwner {
          IERC20(swifyCoinAddress).transfer(owner, swifyContract.balanceOf(address(this)));
     }

     // Add SWIFY token, call after deploy
    function addToken(
     string calldata name,
     string calldata symbol,
     address tokenAddress
    ) external onlyOwner {
     tokenSymbols.push(symbol);

     tokens[symbol] = Token(
          currentTokenId,
          name,
          symbol,
          tokenAddress,
          true
     );

     currentTokenId += 1;
    }

    function stakeTokens(string calldata symbol, uint tokenQuantity) external nonReentrant {
          require(tokens[symbol].tokenId > 0, 'This token cannot be staked');
          require(tx.origin == msg.sender, "Nice Try");
          require(stakingOn == true, "Staking Off");

          IERC20(tokens[symbol].tokenAddress).transferFrom(msg.sender, address(this), tokenQuantity);

          uint taxesTaken = (tokenQuantity * 5) / 100;
          uint actualTokensThatWentIn = tokenQuantity - taxesTaken;

          uint stakingApr = apr;
          uint perWeekPayment = calculatePerWeekPayment(stakingApr, actualTokensThatWentIn);

          positions[currentPositionId] = Position(
               currentPositionId,
               msg.sender,
               symbol,
               actualTokensThatWentIn,
               block.timestamp,
               perWeekPayment,
               block.timestamp + (7 * 1 days),
               0,
               apr,
               true,
               true
          );

          positionsIdsByAddress[msg.sender].push(currentPositionId);
          currentPositionId += 1;
     }

     function closePosition(uint positionId) external nonReentrant {
          require(tx.origin == msg.sender, "Nice Try");
          require(positions[positionId].walletAddress == msg.sender, 'Not the owner of this position');
          require(positions[positionId].open == true, 'Position already closed');

          IERC20(tokens[positions[positionId].symbol].tokenAddress).transfer(msg.sender, positions[positionId].tokenQuantity);

          positions[positionId].open = false;
          positions[positionId].tokenQuantity = 0;
          positions[positionId].profitsPerWeek = 0;
     }

     function receiveWeekProfits(uint positionId) external nonReentrant {
          require(tx.origin == msg.sender, "Nice Try");
          require(stakingOn == true, "Staking Off");
          require(positions[positionId].open == true, 'Position already closed');
          require(positions[positionId].walletAddress == msg.sender, 'Not the owner of this position.');
          require(block.timestamp > positions[positionId].nextWeekUnlockDate, 'Weekly profit withdrawal date in a couple days.');

          positions[positionId].apy = apr;
          positions[positionId].profitsPerWeek = calculatePerWeekPayment(positions[positionId].apy, positions[positionId].tokenQuantity);

          positions[positionId].profitsReclaimed += (positions[positionId].profitsPerWeek);
          positions[positionId].nextWeekUnlockDate = block.timestamp + (7 * 1 days); // Change to days

          uint amountToPay = (positions[positionId].profitsPerWeek / amountOfTokenPerEth) * 1000000000;
          (bool os,) = payable(msg.sender).call{value: amountToPay}("");
          require(os);
     }

     function turnStaking (bool newStakingOn) external onlyOwner {
          stakingOn = newStakingOn;
     }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"amountOfTokenPerEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"createdDate","type":"uint256"}],"name":"calculateNumberDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"apy","type":"uint256"},{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"calculatePerWeekPayment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"changeAmountOfTokenPerEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"changeApr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"closePosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentPositionId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"positions","outputs":[{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"tokenQuantity","type":"uint256"},{"internalType":"uint256","name":"createdDate","type":"uint256"},{"internalType":"uint256","name":"profitsPerWeek","type":"uint256"},{"internalType":"uint256","name":"nextWeekUnlockDate","type":"uint256"},{"internalType":"uint256","name":"profitsReclaimed","type":"uint256"},{"internalType":"uint256","name":"apy","type":"uint256"},{"internalType":"bool","name":"open","type":"bool"},{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"positionsIdsByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"receiveWeekProfits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"stakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenSymbols","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"tokens","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newStakingOn","type":"bool"}],"name":"turnStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawSwify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526202aadb6005556064600655600780546001600160a01b0319908116739c7376b5060c47e555f5f53005aa3d5a7c66f2fb179182905560088054600160008190558054841633178155600281905560035560ff60a01b1916600160a01b179091166001600160a01b0392909216919091179055611bab806100866000396000f3fe60806040526004361061012d5760003560e01c8063921cf5f3116100ab578063a126d6011161006f578063a126d60114610333578063aba1209c14610353578063cac7339414610373578063dfc5dbc614610388578063e5751758146103a8578063fa3d24f2146103c857610134565b8063921cf5f314610292578063922f2123146102b2578063933c13e5146102d257806399fbab88146102e7578063a0ef91df1461031e57610134565b80634313a8c6116100f25780634313a8c6146101ec57806357ded9c91461020c5780636e7ddea81461022157806371d772ca1461024e5780638da5cb5b1461027057610134565b80629a9b7b1461013957806304c2320b14610164578063089079b5146101955780631131c8cd146101b75780632406b5c0146101cc57610134565b3661013457005b600080fd5b34801561014557600080fd5b5061014e6103e8565b60405161015b91906119bc565b60405180910390f35b34801561017057600080fd5b5061018461017f366004611578565b6103ee565b60405161015b959493929190611a38565b3480156101a157600080fd5b506101aa610548565b60405161015b91906117b4565b3480156101c357600080fd5b5061014e610558565b3480156101d857600080fd5b5061014e6101e7366004611619565b61055e565b3480156101f857600080fd5b5061014e610207366004611649565b610595565b34801561021857600080fd5b5061014e6105cc565b34801561022d57600080fd5b5061024161023c366004611619565b6105d2565b60405161015b91906117bf565b34801561025a57600080fd5b5061026e61026936600461152e565b61067e565b005b34801561027c57600080fd5b506102856109b9565b60405161015b9190611763565b34801561029e57600080fd5b5061026e6102ad366004611619565b6109c8565b3480156102be57600080fd5b5061026e6102cd366004611619565b6109f7565b3480156102de57600080fd5b5061026e610a26565b3480156102f357600080fd5b50610307610302366004611619565b610b53565b60405161015b9b9a999897969594939291906119c5565b34801561032a57600080fd5b5061026e610c40565b34801561033f57600080fd5b5061026e61034e366004611619565b610cd8565b34801561035f57600080fd5b5061026e61036e366004611478565b610e66565b34801561037f57600080fd5b5061014e610eae565b34801561039457600080fd5b5061026e6103a3366004611619565b610eb4565b3480156103b457600080fd5b5061014e6103c336600461144f565b6110b4565b3480156103d457600080fd5b5061026e6103e33660046114b0565b6110e5565b60035481565b80516020818301810180516009825292820191909301209152805460018201805491929161041b90611b00565b80601f016020809104026020016040519081016040528092919081815260200182805461044790611b00565b80156104945780601f1061046957610100808354040283529160200191610494565b820191906000526020600020905b81548152906001019060200180831161047757829003601f168201915b5050505050908060020180546104a990611b00565b80601f01602080910402602001604051908101604052809291908181526020018280546104d590611b00565b80156105225780601f106104f757610100808354040283529160200191610522565b820191906000526020600020905b81548152906001019060200180831161050557829003601f168201915b505050600390930154919250506001600160a01b0381169060ff600160a01b9091041685565b600854600160a01b900460ff1681565b60025481565b60006018603c8061056f8542611ae9565b6105799190611aaa565b6105839190611aaa565b61058d9190611aaa565b90505b919050565b60006004600c60646105a78587611aca565b6105b19190611aaa565b6105bb9190611aaa565b6105c59190611aaa565b9392505050565b60065481565b600481815481106105e257600080fd5b9060005260206000200160009150905080546105fd90611b00565b80601f016020809104026020016040519081016040528092919081815260200182805461062990611b00565b80156106765780601f1061064b57610100808354040283529160200191610676565b820191906000526020600020905b81548152906001019060200180831161065957829003601f168201915b505050505081565b6106866112b3565b60006009848460405161069a9291906116b5565b90815260405190819003602001902054116106d05760405162461bcd60e51b81526004016106c790611917565b60405180910390fd5b3233146106ef5760405162461bcd60e51b81526004016106c79061186f565b600854600160a01b900460ff16151560011461071d5760405162461bcd60e51b81526004016106c7906117d2565b6009838360405161072f9291906116b5565b908152604051908190036020018120600301546323b872dd60e01b82526001600160a01b0316906323b872dd9061076e90339030908690600401611777565b602060405180830381600087803b15801561078857600080fd5b505af115801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c09190611494565b50600060646107d0836005611aca565b6107da9190611aaa565b905060006107e88284611ae9565b60065490915060006107fa8284610595565b90506040518061016001604052806002548152602001336001600160a01b0316815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602081018590524260408201819052606082018490526080909101906108819062093a80611a92565b8152600060208083018290526006546040808501919091526001606085018190526080909401849052600280548452600a835292819020855181558583015194810180546001600160a01b0319166001600160a01b039096169590951790945584015180516108f79385019291909101906112e4565b50606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e08201516007820155610100808301516008830155610120830151600990920180546101409094015160ff199094169215159290921761ff00191692151502919091179055336000908152600b602090815260408220600280548254600181810185559386529385209093019290925581549092906109a1908490611a92565b92505081905550505050506109b46112dd565b505050565b6001546001600160a01b031681565b6001546001600160a01b031633146109f25760405162461bcd60e51b81526004016106c7906117f7565b600555565b6001546001600160a01b03163314610a215760405162461bcd60e51b81526004016106c7906117f7565b600655565b6001546001600160a01b03163314610a505760405162461bcd60e51b81526004016106c7906117f7565b6007546001546008546040516370a0823160e01b81526001600160a01b039384169363a9059cbb9381169216906370a0823190610a91903090600401611763565b60206040518083038186803b158015610aa957600080fd5b505afa158015610abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae19190611631565b6040518363ffffffff1660e01b8152600401610afe92919061179b565b602060405180830381600087803b158015610b1857600080fd5b505af1158015610b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b509190611494565b50565b600a6020526000908152604090208054600182015460028301805492936001600160a01b0390921692610b8590611b00565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb190611b00565b8015610bfe5780601f10610bd357610100808354040283529160200191610bfe565b820191906000526020600020905b815481529060010190602001808311610be157829003601f168201915b50505050600383015460048401546005850154600686015460078701546008880154600990980154969794969395509193909260ff808216916101009004168b565b6001546001600160a01b03163314610c6a5760405162461bcd60e51b81526004016106c7906117f7565b6001546040516000916001600160a01b0316904790610c8890611760565b60006040518083038185875af1925050503d8060008114610cc5576040519150601f19603f3d011682016040523d82523d6000602084013e610cca565b606091505b5050905080610b5057600080fd5b610ce06112b3565b323314610cff5760405162461bcd60e51b81526004016106c79061186f565b6000818152600a60205260409020600101546001600160a01b03163314610d385760405162461bcd60e51b81526004016106c790611838565b6000818152600a602052604090206009015460ff161515600114610d6e5760405162461bcd60e51b81526004016106c790611985565b6009600a6000838152602001908152602001600020600201604051610d9391906116c5565b9081526040805191829003602090810183206003908101546000868152600a90935292909120015463a9059cbb60e01b83526001600160a01b039091169163a9059cbb91610de69133919060040161179b565b602060405180830381600087803b158015610e0057600080fd5b505af1158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190611494565b506000818152600a6020526040812060098101805460ff191690556003810182905560050155610b506112dd565b6001546001600160a01b03163314610e905760405162461bcd60e51b81526004016106c7906117f7565b60088054911515600160a01b0260ff60a01b19909216919091179055565b60055481565b610ebc6112b3565b323314610edb5760405162461bcd60e51b81526004016106c79061186f565b600854600160a01b900460ff161515600114610f095760405162461bcd60e51b81526004016106c7906117d2565b6000818152600a602052604090206009015460ff161515600114610f3f5760405162461bcd60e51b81526004016106c790611985565b6000818152600a60205260409020600101546001600160a01b03163314610f785760405162461bcd60e51b81526004016106c790611891565b6000818152600a60205260409020600601544211610fa85760405162461bcd60e51b81526004016106c7906118c8565b6006546000828152600a602052604090206008810182905560030154610fce9190610595565b6000828152600a60205260408120600581018390556007018054909190610ff6908490611a92565b9091555061100990504262093a80611a92565b6000828152600a60205260408120600681019290925560058054920154909161103191611aaa565b61103f90633b9aca00611aca565b90506000336001600160a01b03168260405161105a90611760565b60006040518083038185875af1925050503d8060008114611097576040519150601f19603f3d011682016040523d82523d6000602084013e61109c565b606091505b50509050806110aa57600080fd5b5050610b506112dd565b600b60205281600052604060002081815481106110d057600080fd5b90600052602060002001600091509150505481565b6001546001600160a01b0316331461110f5760405162461bcd60e51b81526004016106c7906117f7565b6004805460018101825560009190915261114c907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018484611368565b506040518060a00160405280600354815260200186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f8701819004810282018101909252858152918101919086908690819084018382808284376000920191909152505050908252506001600160a01b03831660208201526001604091820152516009906111fc90869086906116b5565b90815260200160405180910390206000820151816000015560208201518160010190805190602001906112309291906112e4565b506040820151805161124c9160028401916020909101906112e4565b506060820151600391820180546080909401511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b03199095169490941791909116929092179091558054600191906000906112a7908490611a92565b90915550505050505050565b600260005414156112d65760405162461bcd60e51b81526004016106c79061194e565b6002600055565b6001600055565b8280546112f090611b00565b90600052602060002090601f0160209004810192826113125760008555611358565b82601f1061132b57805160ff1916838001178555611358565b82800160010185558215611358579182015b8281111561135857825182559160200191906001019061133d565b506113649291506113dc565b5090565b82805461137490611b00565b90600052602060002090601f0160209004810192826113965760008555611358565b82601f106113af5782800160ff19823516178555611358565b82800160010185558215611358579182015b828111156113585782358255916020019190600101906113c1565b5b8082111561136457600081556001016113dd565b80356001600160a01b038116811461059057600080fd5b60008083601f840112611419578182fd5b50813567ffffffffffffffff811115611430578182fd5b60208301915083602082850101111561144857600080fd5b9250929050565b60008060408385031215611461578182fd5b61146a836113f1565b946020939093013593505050565b600060208284031215611489578081fd5b81356105c581611b67565b6000602082840312156114a5578081fd5b81516105c581611b67565b6000806000806000606086880312156114c7578081fd5b853567ffffffffffffffff808211156114de578283fd5b6114ea89838a01611408565b90975095506020880135915080821115611502578283fd5b5061150f88828901611408565b90945092506115229050604087016113f1565b90509295509295909350565b600080600060408486031215611542578283fd5b833567ffffffffffffffff811115611558578384fd5b61156486828701611408565b909790965060209590950135949350505050565b6000602080838503121561158a578182fd5b823567ffffffffffffffff808211156115a1578384fd5b818501915085601f8301126115b4578384fd5b8135818111156115c6576115c6611b51565b604051601f8201601f19168101850183811182821017156115e9576115e9611b51565b60405281815283820185018810156115ff578586fd5b818585018683013790810190930193909352509392505050565b60006020828403121561162a578081fd5b5035919050565b600060208284031215611642578081fd5b5051919050565b6000806040838503121561165b578182fd5b50508035926020909101359150565b60008151808452815b8181101561168f57602081850181015186830182015201611673565b818111156116a05782602083870101525b50601f01601f19169290920160200192915050565b6000828483379101908152919050565b81546000908190600281046001808316806116e157607f831692505b602080841082141561170157634e487b7160e01b87526022600452602487fd5b818015611715576001811461172657611752565b60ff19861689528489019650611752565b61172f8a611a86565b885b8681101561174a5781548b820152908501908301611731565b505084890196505b509498975050505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602082526105c5602083018461166a565b6020808252600b908201526a29ba30b5b4b7339027b33360a91b604082015260600190565b60208082526021908201527f4f6e6c79206f776e6572206d61792063616c6c20746869732066756e6374696f6040820152603760f91b606082015260800190565b6020808252601e908201527f4e6f7420746865206f776e6572206f66207468697320706f736974696f6e0000604082015260600190565b6020808252600890820152674e6963652054727960c01b604082015260600190565b6020808252601f908201527f4e6f7420746865206f776e6572206f66207468697320706f736974696f6e2e00604082015260600190565b6020808252602f908201527f5765656b6c792070726f666974207769746864726177616c206461746520696e60408201526e10309031b7bab83632903230bcb99760891b606082015260800190565b6020808252601b908201527f5468697320746f6b656e2063616e6e6f74206265207374616b65640000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526017908201527f506f736974696f6e20616c726561647920636c6f736564000000000000000000604082015260600190565b90815260200190565b8b81526001600160a01b038b166020820152610160604082018190526000906119f08382018d61166a565b606084019b909b525050608081019790975260a087019590955260c086019390935260e085019190915261010084015215156101208301521515610140909101529392505050565b600086825260a06020830152611a5160a083018761166a565b8281036040840152611a63818761166a565b6001600160a01b0395909516606084015250509015156080909101529392505050565b60009081526020902090565b60008219821115611aa557611aa5611b3b565b500190565b600082611ac557634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611ae457611ae4611b3b565b500290565b600082821015611afb57611afb611b3b565b500390565b600281046001821680611b1457607f821691505b60208210811415611b3557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610b5057600080fdfea2646970667358221220bf9b308dde95945ce3737b03eea3201282499252c3de10fed962b9db9839b85d64736f6c63430008000033

Deployed Bytecode

0x60806040526004361061012d5760003560e01c8063921cf5f3116100ab578063a126d6011161006f578063a126d60114610333578063aba1209c14610353578063cac7339414610373578063dfc5dbc614610388578063e5751758146103a8578063fa3d24f2146103c857610134565b8063921cf5f314610292578063922f2123146102b2578063933c13e5146102d257806399fbab88146102e7578063a0ef91df1461031e57610134565b80634313a8c6116100f25780634313a8c6146101ec57806357ded9c91461020c5780636e7ddea81461022157806371d772ca1461024e5780638da5cb5b1461027057610134565b80629a9b7b1461013957806304c2320b14610164578063089079b5146101955780631131c8cd146101b75780632406b5c0146101cc57610134565b3661013457005b600080fd5b34801561014557600080fd5b5061014e6103e8565b60405161015b91906119bc565b60405180910390f35b34801561017057600080fd5b5061018461017f366004611578565b6103ee565b60405161015b959493929190611a38565b3480156101a157600080fd5b506101aa610548565b60405161015b91906117b4565b3480156101c357600080fd5b5061014e610558565b3480156101d857600080fd5b5061014e6101e7366004611619565b61055e565b3480156101f857600080fd5b5061014e610207366004611649565b610595565b34801561021857600080fd5b5061014e6105cc565b34801561022d57600080fd5b5061024161023c366004611619565b6105d2565b60405161015b91906117bf565b34801561025a57600080fd5b5061026e61026936600461152e565b61067e565b005b34801561027c57600080fd5b506102856109b9565b60405161015b9190611763565b34801561029e57600080fd5b5061026e6102ad366004611619565b6109c8565b3480156102be57600080fd5b5061026e6102cd366004611619565b6109f7565b3480156102de57600080fd5b5061026e610a26565b3480156102f357600080fd5b50610307610302366004611619565b610b53565b60405161015b9b9a999897969594939291906119c5565b34801561032a57600080fd5b5061026e610c40565b34801561033f57600080fd5b5061026e61034e366004611619565b610cd8565b34801561035f57600080fd5b5061026e61036e366004611478565b610e66565b34801561037f57600080fd5b5061014e610eae565b34801561039457600080fd5b5061026e6103a3366004611619565b610eb4565b3480156103b457600080fd5b5061014e6103c336600461144f565b6110b4565b3480156103d457600080fd5b5061026e6103e33660046114b0565b6110e5565b60035481565b80516020818301810180516009825292820191909301209152805460018201805491929161041b90611b00565b80601f016020809104026020016040519081016040528092919081815260200182805461044790611b00565b80156104945780601f1061046957610100808354040283529160200191610494565b820191906000526020600020905b81548152906001019060200180831161047757829003601f168201915b5050505050908060020180546104a990611b00565b80601f01602080910402602001604051908101604052809291908181526020018280546104d590611b00565b80156105225780601f106104f757610100808354040283529160200191610522565b820191906000526020600020905b81548152906001019060200180831161050557829003601f168201915b505050600390930154919250506001600160a01b0381169060ff600160a01b9091041685565b600854600160a01b900460ff1681565b60025481565b60006018603c8061056f8542611ae9565b6105799190611aaa565b6105839190611aaa565b61058d9190611aaa565b90505b919050565b60006004600c60646105a78587611aca565b6105b19190611aaa565b6105bb9190611aaa565b6105c59190611aaa565b9392505050565b60065481565b600481815481106105e257600080fd5b9060005260206000200160009150905080546105fd90611b00565b80601f016020809104026020016040519081016040528092919081815260200182805461062990611b00565b80156106765780601f1061064b57610100808354040283529160200191610676565b820191906000526020600020905b81548152906001019060200180831161065957829003601f168201915b505050505081565b6106866112b3565b60006009848460405161069a9291906116b5565b90815260405190819003602001902054116106d05760405162461bcd60e51b81526004016106c790611917565b60405180910390fd5b3233146106ef5760405162461bcd60e51b81526004016106c79061186f565b600854600160a01b900460ff16151560011461071d5760405162461bcd60e51b81526004016106c7906117d2565b6009838360405161072f9291906116b5565b908152604051908190036020018120600301546323b872dd60e01b82526001600160a01b0316906323b872dd9061076e90339030908690600401611777565b602060405180830381600087803b15801561078857600080fd5b505af115801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c09190611494565b50600060646107d0836005611aca565b6107da9190611aaa565b905060006107e88284611ae9565b60065490915060006107fa8284610595565b90506040518061016001604052806002548152602001336001600160a01b0316815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602081018590524260408201819052606082018490526080909101906108819062093a80611a92565b8152600060208083018290526006546040808501919091526001606085018190526080909401849052600280548452600a835292819020855181558583015194810180546001600160a01b0319166001600160a01b039096169590951790945584015180516108f79385019291909101906112e4565b50606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e08201516007820155610100808301516008830155610120830151600990920180546101409094015160ff199094169215159290921761ff00191692151502919091179055336000908152600b602090815260408220600280548254600181810185559386529385209093019290925581549092906109a1908490611a92565b92505081905550505050506109b46112dd565b505050565b6001546001600160a01b031681565b6001546001600160a01b031633146109f25760405162461bcd60e51b81526004016106c7906117f7565b600555565b6001546001600160a01b03163314610a215760405162461bcd60e51b81526004016106c7906117f7565b600655565b6001546001600160a01b03163314610a505760405162461bcd60e51b81526004016106c7906117f7565b6007546001546008546040516370a0823160e01b81526001600160a01b039384169363a9059cbb9381169216906370a0823190610a91903090600401611763565b60206040518083038186803b158015610aa957600080fd5b505afa158015610abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae19190611631565b6040518363ffffffff1660e01b8152600401610afe92919061179b565b602060405180830381600087803b158015610b1857600080fd5b505af1158015610b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b509190611494565b50565b600a6020526000908152604090208054600182015460028301805492936001600160a01b0390921692610b8590611b00565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb190611b00565b8015610bfe5780601f10610bd357610100808354040283529160200191610bfe565b820191906000526020600020905b815481529060010190602001808311610be157829003601f168201915b50505050600383015460048401546005850154600686015460078701546008880154600990980154969794969395509193909260ff808216916101009004168b565b6001546001600160a01b03163314610c6a5760405162461bcd60e51b81526004016106c7906117f7565b6001546040516000916001600160a01b0316904790610c8890611760565b60006040518083038185875af1925050503d8060008114610cc5576040519150601f19603f3d011682016040523d82523d6000602084013e610cca565b606091505b5050905080610b5057600080fd5b610ce06112b3565b323314610cff5760405162461bcd60e51b81526004016106c79061186f565b6000818152600a60205260409020600101546001600160a01b03163314610d385760405162461bcd60e51b81526004016106c790611838565b6000818152600a602052604090206009015460ff161515600114610d6e5760405162461bcd60e51b81526004016106c790611985565b6009600a6000838152602001908152602001600020600201604051610d9391906116c5565b9081526040805191829003602090810183206003908101546000868152600a90935292909120015463a9059cbb60e01b83526001600160a01b039091169163a9059cbb91610de69133919060040161179b565b602060405180830381600087803b158015610e0057600080fd5b505af1158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190611494565b506000818152600a6020526040812060098101805460ff191690556003810182905560050155610b506112dd565b6001546001600160a01b03163314610e905760405162461bcd60e51b81526004016106c7906117f7565b60088054911515600160a01b0260ff60a01b19909216919091179055565b60055481565b610ebc6112b3565b323314610edb5760405162461bcd60e51b81526004016106c79061186f565b600854600160a01b900460ff161515600114610f095760405162461bcd60e51b81526004016106c7906117d2565b6000818152600a602052604090206009015460ff161515600114610f3f5760405162461bcd60e51b81526004016106c790611985565b6000818152600a60205260409020600101546001600160a01b03163314610f785760405162461bcd60e51b81526004016106c790611891565b6000818152600a60205260409020600601544211610fa85760405162461bcd60e51b81526004016106c7906118c8565b6006546000828152600a602052604090206008810182905560030154610fce9190610595565b6000828152600a60205260408120600581018390556007018054909190610ff6908490611a92565b9091555061100990504262093a80611a92565b6000828152600a60205260408120600681019290925560058054920154909161103191611aaa565b61103f90633b9aca00611aca565b90506000336001600160a01b03168260405161105a90611760565b60006040518083038185875af1925050503d8060008114611097576040519150601f19603f3d011682016040523d82523d6000602084013e61109c565b606091505b50509050806110aa57600080fd5b5050610b506112dd565b600b60205281600052604060002081815481106110d057600080fd5b90600052602060002001600091509150505481565b6001546001600160a01b0316331461110f5760405162461bcd60e51b81526004016106c7906117f7565b6004805460018101825560009190915261114c907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018484611368565b506040518060a00160405280600354815260200186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f8701819004810282018101909252858152918101919086908690819084018382808284376000920191909152505050908252506001600160a01b03831660208201526001604091820152516009906111fc90869086906116b5565b90815260200160405180910390206000820151816000015560208201518160010190805190602001906112309291906112e4565b506040820151805161124c9160028401916020909101906112e4565b506060820151600391820180546080909401511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b03199095169490941791909116929092179091558054600191906000906112a7908490611a92565b90915550505050505050565b600260005414156112d65760405162461bcd60e51b81526004016106c79061194e565b6002600055565b6001600055565b8280546112f090611b00565b90600052602060002090601f0160209004810192826113125760008555611358565b82601f1061132b57805160ff1916838001178555611358565b82800160010185558215611358579182015b8281111561135857825182559160200191906001019061133d565b506113649291506113dc565b5090565b82805461137490611b00565b90600052602060002090601f0160209004810192826113965760008555611358565b82601f106113af5782800160ff19823516178555611358565b82800160010185558215611358579182015b828111156113585782358255916020019190600101906113c1565b5b8082111561136457600081556001016113dd565b80356001600160a01b038116811461059057600080fd5b60008083601f840112611419578182fd5b50813567ffffffffffffffff811115611430578182fd5b60208301915083602082850101111561144857600080fd5b9250929050565b60008060408385031215611461578182fd5b61146a836113f1565b946020939093013593505050565b600060208284031215611489578081fd5b81356105c581611b67565b6000602082840312156114a5578081fd5b81516105c581611b67565b6000806000806000606086880312156114c7578081fd5b853567ffffffffffffffff808211156114de578283fd5b6114ea89838a01611408565b90975095506020880135915080821115611502578283fd5b5061150f88828901611408565b90945092506115229050604087016113f1565b90509295509295909350565b600080600060408486031215611542578283fd5b833567ffffffffffffffff811115611558578384fd5b61156486828701611408565b909790965060209590950135949350505050565b6000602080838503121561158a578182fd5b823567ffffffffffffffff808211156115a1578384fd5b818501915085601f8301126115b4578384fd5b8135818111156115c6576115c6611b51565b604051601f8201601f19168101850183811182821017156115e9576115e9611b51565b60405281815283820185018810156115ff578586fd5b818585018683013790810190930193909352509392505050565b60006020828403121561162a578081fd5b5035919050565b600060208284031215611642578081fd5b5051919050565b6000806040838503121561165b578182fd5b50508035926020909101359150565b60008151808452815b8181101561168f57602081850181015186830182015201611673565b818111156116a05782602083870101525b50601f01601f19169290920160200192915050565b6000828483379101908152919050565b81546000908190600281046001808316806116e157607f831692505b602080841082141561170157634e487b7160e01b87526022600452602487fd5b818015611715576001811461172657611752565b60ff19861689528489019650611752565b61172f8a611a86565b885b8681101561174a5781548b820152908501908301611731565b505084890196505b509498975050505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602082526105c5602083018461166a565b6020808252600b908201526a29ba30b5b4b7339027b33360a91b604082015260600190565b60208082526021908201527f4f6e6c79206f776e6572206d61792063616c6c20746869732066756e6374696f6040820152603760f91b606082015260800190565b6020808252601e908201527f4e6f7420746865206f776e6572206f66207468697320706f736974696f6e0000604082015260600190565b6020808252600890820152674e6963652054727960c01b604082015260600190565b6020808252601f908201527f4e6f7420746865206f776e6572206f66207468697320706f736974696f6e2e00604082015260600190565b6020808252602f908201527f5765656b6c792070726f666974207769746864726177616c206461746520696e60408201526e10309031b7bab83632903230bcb99760891b606082015260800190565b6020808252601b908201527f5468697320746f6b656e2063616e6e6f74206265207374616b65640000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526017908201527f506f736974696f6e20616c726561647920636c6f736564000000000000000000604082015260600190565b90815260200190565b8b81526001600160a01b038b166020820152610160604082018190526000906119f08382018d61166a565b606084019b909b525050608081019790975260a087019590955260c086019390935260e085019190915261010084015215156101208301521515610140909101529392505050565b600086825260a06020830152611a5160a083018761166a565b8281036040840152611a63818761166a565b6001600160a01b0395909516606084015250509015156080909101529392505050565b60009081526020902090565b60008219821115611aa557611aa5611b3b565b500190565b600082611ac557634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611ae457611ae4611b3b565b500290565b600082821015611afb57611afb611b3b565b500390565b600281046001821680611b1457607f821691505b60208210811415611b3557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610b5057600080fdfea2646970667358221220bf9b308dde95945ce3737b03eea3201282499252c3de10fed962b9db9839b85d64736f6c63430008000033

Deployed Bytecode Sourcemap

6025:5643:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6138:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6912:38;;;;;;;;;;-1:-1:-1;6912:38:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;6394:28::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6102:29::-;;;;;;;;;;;;;:::i;7659:148::-;;;;;;;;;;-1:-1:-1;7659:148:0;;;;;:::i;:::-;;:::i;7816:152::-;;;;;;;;;;-1:-1:-1;7816:152:0;;;;;:::i;:::-;;:::i;6253:21::-;;;;;;;;;;;;;:::i;6171:28::-;;;;;;;;;;-1:-1:-1;6171:28:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8690:1146::-;;;;;;;;;;-1:-1:-1;8690:1146:0;;;;;:::i;:::-;;:::i;:::-;;6075:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7427:123::-;;;;;;;;;;-1:-1:-1;7427:123:0;;;;;:::i;:::-;;:::i;7559:91::-;;;;;;;;;;-1:-1:-1;7559:91:0;;;;;:::i;:::-;;:::i;8139:146::-;;;;;;;;;;;;;:::i;6957:42::-;;;;;;;;;;-1:-1:-1;6957:42:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;7977:153::-;;;;;;;;;;;;;:::i;9845:600::-;;;;;;;;;;-1:-1:-1;9845:600:0;;;;;:::i;:::-;;:::i;11559:106::-;;;;;;;;;;-1:-1:-1;11559:106:0;;;;;:::i;:::-;;:::i;6206:40::-;;;;;;;;;;;;;:::i;10454:1096::-;;;;;;;;;;-1:-1:-1;10454:1096:0;;;;;:::i;:::-;;:::i;7006:55::-;;;;;;;;;;-1:-1:-1;7006:55:0;;;;;:::i;:::-;;:::i;8337:345::-;;;;;;;;;;-1:-1:-1;8337:345:0;;;;;:::i;:::-;;:::i;6138:26::-;;;;:::o;6912:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6912:38:0;;;;;;;-1:-1:-1;;;;;;;6912:38:0;;;;-1:-1:-1;;;6912:38:0;;;;;:::o;6394:28::-;;;-1:-1:-1;;;6394:28:0;;;;;:::o;6102:29::-;;;;:::o;7659:148::-;7726:4;7796:2;7791;;7753:29;7771:11;7753:15;:29;:::i;:::-;7752:36;;;;:::i;:::-;:41;;;;:::i;:::-;:46;;;;:::i;:::-;7745:53;;7659:148;;;;:::o;7816:152::-;7899:4;7958:1;7953:2;7947:3;7925:19;7931:13;7925:3;:19;:::i;:::-;:25;;;;:::i;:::-;:30;;;;:::i;:::-;:34;;;;:::i;:::-;7918:41;7816:152;-1:-1:-1;;;7816:152:0:o;6253:21::-;;;;:::o;6171:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8690:1146::-;2345:21;:19;:21::i;:::-;8823:1:::1;8798:6;8805;;8798:14;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:22;:26:::1;8790:66;;;;-1:-1:-1::0;;;8790:66:0::1;;;;;;;:::i;:::-;;;;;;;;;8877:9;8890:10;8877:23;8869:44;;;;-1:-1:-1::0;;;8869:44:0::1;;;;;;;:::i;:::-;8934:9;::::0;-1:-1:-1;;;8934:9:0;::::1;;;:17;;8947:4;8934:17;8926:41;;;;-1:-1:-1::0;;;8926:41:0::1;;;;;;;:::i;:::-;8989:6;8996;;8989:14;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:27:::1;;::::0;-1:-1:-1;;;8982:90:0;;-1:-1:-1;;;;;8989:27:0::1;::::0;8982:48:::1;::::0;:90:::1;::::0;9031:10:::1;::::0;9051:4:::1;::::0;9058:13;;8982:90:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;9087:15:0::1;9127:3;9106:17;:13:::0;9122:1:::1;9106:17;:::i;:::-;9105:25;;;;:::i;:::-;9087:43:::0;-1:-1:-1;9143:27:0::1;9173:26;9087:43:::0;9173:13;:26:::1;:::i;:::-;9232:3;::::0;9143:56;;-1:-1:-1;9214:15:0::1;9270:59;9232:3:::0;9143:56;9270:23:::1;:59::i;:::-;9248:81;;9375:345;;;;;;;;9401:17;;9375:345;;;;9436:10;-1:-1:-1::0;;;;;9375:345:0::1;;;;;9464:6;;9375:345;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;9375:345:0;;;-1:-1:-1;9375:345:0::1;::::0;::::1;::::0;;;9528:15:::1;9375:345:::0;;;;;;;;;;;;;;;;;9593:30:::1;::::0;9612:10:::1;9593:30;:::i;:::-;9375:345:::0;;9641:1:::1;9375:345;::::0;;::::1;::::0;;;9660:3:::1;::::0;9375:345;;;;;;;;9681:4:::1;9375:345:::0;;;;;;;;;;;;;9354:17:::1;::::0;;9344:28;;:9:::1;:28:::0;;;;;;:376;;;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;9344:376:0::1;-1:-1:-1::0;;;;;9344:376:0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;9344:376:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;;9344:376:0;;::::1;::::0;::::1;;::::0;;;::::1;-1:-1:-1::0;;9344:376:0::1;::::0;::::1;;;::::0;;;::::1;::::0;;9757:10:::1;-1:-1:-1::0;9735:33:0;;;:21:::1;:33;::::0;;;;;;9774:17:::1;::::0;;9735:57;;-1:-1:-1;9735:57:0;;::::1;::::0;;;;;;;;;;::::1;::::0;;;;9805:22;;-1:-1:-1;;;9805:22:0::1;::::0;-1:-1:-1;;9805:22:0::1;:::i;:::-;;;;;;;;2377:1;;;;2389:20:::0;:18;:20::i;:::-;8690:1146;;;:::o;6075:20::-;;;-1:-1:-1;;;;;6075:20:0;;:::o;7427:123::-;7106:5;;-1:-1:-1;;;;;7106:5:0;7115:10;7106:19;7097:66;;;;-1:-1:-1;;;7097:66:0;;;;;;;:::i;:::-;7510:19:::1;:31:::0;7427:123::o;7559:91::-;7106:5;;-1:-1:-1;;;;;7106:5:0;7115:10;7106:19;7097:66;;;;-1:-1:-1;;;7097:66:0;;;;;;;:::i;:::-;7626:3:::1;:15:::0;7559:91::o;8139:146::-;7106:5;;-1:-1:-1;;;;;7106:5:0;7115:10;7106:19;7097:66;;;;-1:-1:-1;;;7097:66:0;;;;;;;:::i;:::-;8203:16:::1;::::0;;8230:5;8237:13:::1;::::0;:38:::1;::::0;-1:-1:-1;;;8237:38:0;;-1:-1:-1;;;;;8203:16:0;;::::1;::::0;8196:33:::1;::::0;8230:5;::::1;::::0;8237:13:::1;::::0;:23:::1;::::0;:38:::1;::::0;8269:4:::1;::::0;8237:38:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8196:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8139:146::o:0;6957:42::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6957:42:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;6957:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6957:42:0;;;;;;;;;;;;;;:::o;7977:153::-;7106:5;;-1:-1:-1;;;;;7106:5:0;7115:10;7106:19;7097:66;;;;-1:-1:-1;;;7097:66:0;;;;;;;:::i;:::-;8053:5:::1;::::0;8045:52:::1;::::0;8033:7:::1;::::0;-1:-1:-1;;;;;8053:5:0::1;::::0;8071:21:::1;::::0;8045:52:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8032:65;;;8118:2;8110:11;;;::::0;::::1;9845:600:::0;2345:21;:19;:21::i;:::-;9928:9:::1;9941:10;9928:23;9920:44;;;;-1:-1:-1::0;;;9920:44:0::1;;;;;;;:::i;:::-;9985:21;::::0;;;:9:::1;:21;::::0;;;;:35:::1;;::::0;-1:-1:-1;;;;;9985:35:0::1;10024:10;9985:49;9977:92;;;;-1:-1:-1::0;;;9977:92:0::1;;;;;;;:::i;:::-;10090:21;::::0;;;:9:::1;:21;::::0;;;;:26:::1;;::::0;::::1;;:34;;:26:::0;:34:::1;10082:70;;;;-1:-1:-1::0;;;10082:70:0::1;;;;;;;:::i;:::-;10174:6;10181:9;:21;10191:10;10181:21;;;;;;;;;;;:28;;10174:36;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;:49:::1;::::0;;::::1;::::0;::::1;10246:21:::0;;;:9:::1;:21:::0;;;;;;;:35:::1;::::0;-1:-1:-1;;;10167:115:0;;-1:-1:-1;;;;;10174:49:0;;::::1;::::0;10167:66:::1;::::0;:115:::1;::::0;10234:10:::1;::::0;10246:35;10167:115:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;10326:5:0::1;10297:21:::0;;;:9:::1;:21;::::0;;;;:26:::1;::::0;::::1;:34:::0;;-1:-1:-1;;10297:34:0::1;::::0;;10344:35:::1;::::0;::::1;:39:::0;;;10396:36:::1;;:40:::0;2389:20;:18;:20::i;11559:106::-;7106:5;;-1:-1:-1;;;;;7106:5:0;7115:10;7106:19;7097:66;;;;-1:-1:-1;;;7097:66:0;;;;;;;:::i;:::-;11632:9:::1;:24:::0;;;::::1;;-1:-1:-1::0;;;11632:24:0::1;-1:-1:-1::0;;;;11632:24:0;;::::1;::::0;;;::::1;::::0;;11559:106::o;6206:40::-;;;;:::o;10454:1096::-;2345:21;:19;:21::i;:::-;10542:9:::1;10555:10;10542:23;10534:44;;;;-1:-1:-1::0;;;10534:44:0::1;;;;;;;:::i;:::-;10599:9;::::0;-1:-1:-1;;;10599:9:0;::::1;;;:17;;10612:4;10599:17;10591:41;;;;-1:-1:-1::0;;;10591:41:0::1;;;;;;;:::i;:::-;10653:21;::::0;;;:9:::1;:21;::::0;;;;:26:::1;;::::0;::::1;;:34;;:26:::0;:34:::1;10645:70;;;;-1:-1:-1::0;;;10645:70:0::1;;;;;;;:::i;:::-;10736:21;::::0;;;:9:::1;:21;::::0;;;;:35:::1;;::::0;-1:-1:-1;;;;;10736:35:0::1;10775:10;10736:49;10728:93;;;;-1:-1:-1::0;;;10728:93:0::1;;;;;;;:::i;:::-;10860:21;::::0;;;:9:::1;:21;::::0;;;;:40:::1;;::::0;10842:15:::1;:58;10834:118;;;;-1:-1:-1::0;;;10834:118:0::1;;;;;;;:::i;:::-;10995:3;::::0;10967:21:::1;::::0;;;:9:::1;:21;::::0;;;;:25:::1;::::0;::::1;:31:::0;;;11101:35:::1;;::::0;11050:87:::1;::::0;10995:3;11050:23:::1;:87::i;:::-;11011:21;::::0;;;:9:::1;:21;::::0;;;;:36:::1;::::0;::::1;:126:::0;;;11152:38:::1;;:80:::0;;:38;;11011:21;11152:80:::1;::::0;11011:126;;11152:80:::1;:::i;:::-;::::0;;;-1:-1:-1;11288:30:0::1;::::0;-1:-1:-1;11288:15:0::1;11307:10;11288:30;:::i;:::-;11245:21;::::0;;;:9:::1;:21;::::0;;;;:40:::1;::::0;::::1;:73:::0;;;;11410:19:::1;::::0;;11371:36;::::1;::::0;11245:21;;11371:58:::1;::::0;::::1;:::i;:::-;11370:73;::::0;11433:10:::1;11370:73;:::i;:::-;11351:92;;11457:7;11477:10;-1:-1:-1::0;;;;;11469:24:0::1;11501:11;11469:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11456:61;;;11538:2;11530:11;;;::::0;::::1;;2377:1;;2389:20:::0;:18;:20::i;7006:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8337:345::-;7106:5;;-1:-1:-1;;;;;7106:5:0;7115:10;7106:19;7097:66;;;;-1:-1:-1;;;7097:66:0;;;;;;;:::i;:::-;8475:12:::1;:25:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;8475:25:0;;;;::::1;::::0;;::::1;8493:6:::0;;8475:25:::1;:::i;:::-;;8527:118;;;;;;;;8545:14;;8527:118;;;;8572:4;;8527:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;8527:118:0;;;-1:-1:-1;8527:118:0::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;8589:6;;;;;;8527:118;::::1;8589:6:::0;;;;8527:118;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;8527:118:0;;;-1:-1:-1;;;;;;8527:118:0;::::1;;::::0;::::1;::::0;8633:4:::1;8527:118:::0;;;;;8510:14;:6:::1;::::0;:14:::1;::::0;8517:6;;;;8510:14:::1;:::i;:::-;;;;;;;;;;;;;:135;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;8510:135:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;8510:135:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;-1:-1:-1::0;;;8510:135:0::1;-1:-1:-1::0;;;;;;;;;8510:135:0;;::::1;-1:-1:-1::0;;;;;;8510:135:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;8655:19;;8510:135;;;::::1;::::0;8655:19:::1;::::0;8510:135;;8655:19:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;8337:345:0:o;2425:293::-;1827:1;2559:7;;:19;;2551:63;;;;-1:-1:-1;;;2551:63:0;;;;;;;:::i;:::-;1827:1;2692:7;:18;2425:293::o;2726:213::-;1783:1;2909:7;:22;2726:213::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:175:1;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:378;;;312:3;305:4;297:6;293:17;289:27;279:2;;337:8;327;320:26;279:2;-1:-1:-1;367:20:1;;410:18;399:30;;396:2;;;449:8;439;432:26;396:2;493:4;485:6;481:17;469:29;;545:3;538:4;529:6;521;517:19;513:30;510:39;507:2;;;562:1;559;552:12;507:2;269:303;;;;;:::o;577:266::-;;;706:2;694:9;685:7;681:23;677:32;674:2;;;727:6;719;712:22;674:2;755:31;776:9;755:31;:::i;:::-;745:41;833:2;818:18;;;;805:32;;-1:-1:-1;;;664:179:1:o;848:253::-;;957:2;945:9;936:7;932:23;928:32;925:2;;;978:6;970;963:22;925:2;1022:9;1009:23;1041:30;1065:5;1041:30;:::i;1106:257::-;;1226:2;1214:9;1205:7;1201:23;1197:32;1194:2;;;1247:6;1239;1232:22;1194:2;1284:9;1278:16;1303:30;1327:5;1303:30;:::i;1368:831::-;;;;;;1554:2;1542:9;1533:7;1529:23;1525:32;1522:2;;;1575:6;1567;1560:22;1522:2;1620:9;1607:23;1649:18;1690:2;1682:6;1679:14;1676:2;;;1711:6;1703;1696:22;1676:2;1755:61;1808:7;1799:6;1788:9;1784:22;1755:61;:::i;:::-;1835:8;;-1:-1:-1;1729:87:1;-1:-1:-1;1923:2:1;1908:18;;1895:32;;-1:-1:-1;1939:16:1;;;1936:2;;;1973:6;1965;1958:22;1936:2;;2017:63;2072:7;2061:8;2050:9;2046:24;2017:63;:::i;:::-;2099:8;;-1:-1:-1;1991:89:1;-1:-1:-1;2153:40:1;;-1:-1:-1;2189:2:1;2174:18;;2153:40;:::i;:::-;2143:50;;1512:687;;;;;;;;:::o;2204:501::-;;;;2353:2;2341:9;2332:7;2328:23;2324:32;2321:2;;;2374:6;2366;2359:22;2321:2;2419:9;2406:23;2452:18;2444:6;2441:30;2438:2;;;2489:6;2481;2474:22;2438:2;2533:61;2586:7;2577:6;2566:9;2562:22;2533:61;:::i;:::-;2613:8;;2507:87;;-1:-1:-1;2695:2:1;2680:18;;;;2667:32;;2311:394;-1:-1:-1;;;;2311:394:1:o;2710:958::-;;2810:2;2853;2841:9;2832:7;2828:23;2824:32;2821:2;;;2874:6;2866;2859:22;2821:2;2919:9;2906:23;2948:18;2989:2;2981:6;2978:14;2975:2;;;3010:6;3002;2995:22;2975:2;3053:6;3042:9;3038:22;3028:32;;3098:7;3091:4;3087:2;3083:13;3079:27;3069:2;;3125:6;3117;3110:22;3069:2;3166;3153:16;3188:2;3184;3181:10;3178:2;;;3194:18;;:::i;:::-;3243:2;3237:9;3312:2;3293:13;;-1:-1:-1;;3289:27:1;3277:40;;3273:49;;3337:18;;;3357:22;;;3334:46;3331:2;;;3383:18;;:::i;:::-;3419:2;3412:22;3443:18;;;3480:11;;;3476:20;;3473:33;-1:-1:-1;3470:2:1;;;3524:6;3516;3509:22;3470:2;3585;3580;3576;3572:11;3567:2;3559:6;3555:15;3542:46;3608:15;;;3604:24;;;3597:40;;;;-1:-1:-1;3612:6:1;2790:878;-1:-1:-1;;;2790:878:1:o;3673:190::-;;3785:2;3773:9;3764:7;3760:23;3756:32;3753:2;;;3806:6;3798;3791:22;3753:2;-1:-1:-1;3834:23:1;;3743:120;-1:-1:-1;3743:120:1:o;3868:194::-;;3991:2;3979:9;3970:7;3966:23;3962:32;3959:2;;;4012:6;4004;3997:22;3959:2;-1:-1:-1;4040:16:1;;3949:113;-1:-1:-1;3949:113:1:o;4067:258::-;;;4196:2;4184:9;4175:7;4171:23;4167:32;4164:2;;;4217:6;4209;4202:22;4164:2;-1:-1:-1;;4245:23:1;;;4315:2;4300:18;;;4287:32;;-1:-1:-1;4154:171:1:o;4330:478::-;;4412:5;4406:12;4439:6;4434:3;4427:19;4464:3;4476:162;4490:6;4487:1;4484:13;4476:162;;;4552:4;4608:13;;;4604:22;;4598:29;4580:11;;;4576:20;;4569:59;4505:12;4476:162;;;4656:6;4653:1;4650:13;4647:2;;;4722:3;4715:4;4706:6;4701:3;4697:16;4693:27;4686:40;4647:2;-1:-1:-1;4790:2:1;4769:15;-1:-1:-1;;4765:29:1;4756:39;;;;4797:4;4752:50;;4382:426;-1:-1:-1;;4382:426:1:o;4813:275::-;;4998:6;4990;4985:3;4972:33;5024:16;;5049:15;;;5024:16;4962:126;-1:-1:-1;4962:126:1:o;5093:1104::-;5279:13;;5093:1104;;;;5352:1;5337:17;;5373:1;5409:18;;;;5436:2;;5490:4;5482:6;5478:17;5468:27;;5436:2;5516;5564;5556:6;5553:14;5533:18;5530:38;5527:2;;;-1:-1:-1;;;5591:33:1;;5647:4;5644:1;5637:15;5677:4;5598:3;5665:17;5527:2;5708:18;5735:104;;;;5853:1;5848:324;;;;5701:471;;5735:104;-1:-1:-1;;5768:24:1;;5756:37;;5813:16;;;;-1:-1:-1;5735:104:1;;5848:324;5884:39;5916:6;5884:39;:::i;:::-;5945:3;5961:165;5975:6;5972:1;5969:13;5961:165;;;6053:14;;6040:11;;;6033:35;6096:16;;;;5990:10;;5961:165;;;5965:3;;6155:6;6150:3;6146:16;6139:23;;5701:471;-1:-1:-1;6188:3:1;;5229:968;-1:-1:-1;;;;;;;;5229:968:1:o;6202:205::-;6402:3;6393:14::o;6412:203::-;-1:-1:-1;;;;;6576:32:1;;;;6558:51;;6546:2;6531:18;;6513:102::o;6620:375::-;-1:-1:-1;;;;;6878:15:1;;;6860:34;;6930:15;;;;6925:2;6910:18;;6903:43;6977:2;6962:18;;6955:34;;;;6810:2;6795:18;;6777:218::o;7000:274::-;-1:-1:-1;;;;;7192:32:1;;;;7174:51;;7256:2;7241:18;;7234:34;7162:2;7147:18;;7129:145::o;7279:187::-;7444:14;;7437:22;7419:41;;7407:2;7392:18;;7374:92::o;7471:222::-;;7620:2;7609:9;7602:21;7640:47;7683:2;7672:9;7668:18;7660:6;7640:47;:::i;7698:335::-;7900:2;7882:21;;;7939:2;7919:18;;;7912:30;-1:-1:-1;;;7973:2:1;7958:18;;7951:41;8024:2;8009:18;;7872:161::o;8038:397::-;8240:2;8222:21;;;8279:2;8259:18;;;8252:30;8318:34;8313:2;8298:18;;8291:62;-1:-1:-1;;;8384:2:1;8369:18;;8362:31;8425:3;8410:19;;8212:223::o;8440:354::-;8642:2;8624:21;;;8681:2;8661:18;;;8654:30;8720:32;8715:2;8700:18;;8693:60;8785:2;8770:18;;8614:180::o;8799:331::-;9001:2;8983:21;;;9040:1;9020:18;;;9013:29;-1:-1:-1;;;9073:2:1;9058:18;;9051:38;9121:2;9106:18;;8973:157::o;9135:355::-;9337:2;9319:21;;;9376:2;9356:18;;;9349:30;9415:33;9410:2;9395:18;;9388:61;9481:2;9466:18;;9309:181::o;9495:411::-;9697:2;9679:21;;;9736:2;9716:18;;;9709:30;9775:34;9770:2;9755:18;;9748:62;-1:-1:-1;;;9841:2:1;9826:18;;9819:45;9896:3;9881:19;;9669:237::o;9911:351::-;10113:2;10095:21;;;10152:2;10132:18;;;10125:30;10191:29;10186:2;10171:18;;10164:57;10253:2;10238:18;;10085:177::o;10267:355::-;10469:2;10451:21;;;10508:2;10488:18;;;10481:30;10547:33;10542:2;10527:18;;10520:61;10613:2;10598:18;;10441:181::o;10627:347::-;10829:2;10811:21;;;10868:2;10848:18;;;10841:30;10907:25;10902:2;10887:18;;10880:53;10965:2;10950:18;;10801:173::o;10979:177::-;11125:25;;;11113:2;11098:18;;11080:76::o;11161:1009::-;11583:25;;;-1:-1:-1;;;;;11644:32:1;;11639:2;11624:18;;11617:60;11571:3;11708:2;11693:18;;11686:30;;;11161:1009;;11733:47;11761:18;;;11753:6;11733:47;:::i;:::-;11811:2;11796:18;;11789:34;;;;-1:-1:-1;;11854:3:1;11839:19;;11832:35;;;;11898:3;11883:19;;11876:35;;;;11942:3;11927:19;;11920:35;;;;11986:3;11971:19;;11964:35;;;;12030:3;12015:19;;12008:35;12087:14;12080:22;12074:3;12059:19;;12052:51;12147:15;12140:23;12134:3;12119:19;;;12112:52;11725:55;11551:619;-1:-1:-1;;;11551:619:1:o;12175:639::-;;12450:6;12439:9;12432:25;12493:3;12488:2;12477:9;12473:18;12466:31;12520:48;12563:3;12552:9;12548:19;12540:6;12520:48;:::i;:::-;12616:9;12608:6;12604:22;12599:2;12588:9;12584:18;12577:50;12644:35;12672:6;12664;12644:35;:::i;:::-;-1:-1:-1;;;;;12715:32:1;;;;12710:2;12695:18;;12688:60;-1:-1:-1;;12792:14:1;;12785:22;12779:3;12764:19;;;12757:51;12636:43;12422:392;-1:-1:-1;;;12422:392:1:o;12819:129::-;;12887:17;;;12937:4;12921:21;;;12877:71::o;12953:128::-;;13024:1;13020:6;13017:1;13014:13;13011:2;;;13030:18;;:::i;:::-;-1:-1:-1;13066:9:1;;13001:80::o;13086:217::-;;13152:1;13142:2;;-1:-1:-1;;;13177:31:1;;13231:4;13228:1;13221:15;13259:4;13184:1;13249:15;13142:2;-1:-1:-1;13288:9:1;;13132:171::o;13308:168::-;;13414:1;13410;13406:6;13402:14;13399:1;13396:21;13391:1;13384:9;13377:17;13373:45;13370:2;;;13421:18;;:::i;:::-;-1:-1:-1;13461:9:1;;13360:116::o;13481:125::-;;13549:1;13546;13543:8;13540:2;;;13554:18;;:::i;:::-;-1:-1:-1;13591:9:1;;13530:76::o;13611:380::-;13696:1;13686:12;;13743:1;13733:12;;;13754:2;;13808:4;13800:6;13796:17;13786:27;;13754:2;13861;13853:6;13850:14;13830:18;13827:38;13824:2;;;13907:10;13902:3;13898:20;13895:1;13888:31;13942:4;13939:1;13932:15;13970:4;13967:1;13960:15;13824:2;;13666:325;;;:::o;13996:127::-;14057:10;14052:3;14048:20;14045:1;14038:31;14088:4;14085:1;14078:15;14112:4;14109:1;14102:15;14128:127;14189:10;14184:3;14180:20;14177:1;14170:31;14220:4;14217:1;14210:15;14244:4;14241:1;14234:15;14260:120;14348:5;14341:13;14334:21;14327:5;14324:32;14314:2;;14370:1;14367;14360:12

Swarm Source

ipfs://bf9b308dde95945ce3737b03eea3201282499252c3de10fed962b9db9839b85d

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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