Contract 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1

 

Contract Overview

Balance:
139.722595150049777538 MATIC

MATIC Value:
$114.57 (@ $0.82/MATIC)

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x4c889c5fec6776fca32fa6be98c4c5c74de4dfa22ecfd377fdf7c5e8578dd91aMulti Call361573982022-11-28 3:45:038 mins ago0xddd3ada257101e0662beba8438e41130456d6fbb IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.073009532865 30.133504067
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062Create Contract361573692022-11-28 3:44:019 mins ago0xddd3ada257101e0662beba8438e41130456d6fbb IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b11.11 MATIC0.79130346552 33.162314613
0x5c8ad3b151b82c0c7b2c2522c8c5add8a37663a15a280c3fed3bda458cca1f4eMulti Call361562342022-11-28 3:05:0148 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.199172664748 30.152385022
0xa6be07993b58b3c1c8d99f4d3ce60dc0c83de51239ea50df900db189532ede47Multi Call361560202022-11-28 2:57:3755 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.209164068126 31.665195384
0x29357f70ebfd616de624265124bcc14ce853b97f938368afffcec3a2eed8c949Multi Call361557422022-11-28 2:48:051 hr 4 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.207161175141 31.362159299
0xf8afadaf83645a7c1e07539553a9edf76fedbec6207bb374c931c2c104a1b7baMulti Call361555282022-11-28 2:40:431 hr 12 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.217408396259 33.214052983
0xfe5439ea088b42d886528926d436d0e1eca0ff8cee12be72fe54ff749aea908dMulti Call361553572022-11-28 2:34:401 hr 18 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.234552677859 35.832545733
0xb165fa093f13f1792498394bba448105e41ea9dd403b7f38c6401ff75c93bc27Harvest361552172022-11-28 2:29:521 hr 23 mins ago0x9aa57b02d524096229b71ac8f9e33a0186eec90d IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.001921123202 39.868080664
0xd1e6437824254fafd35cad46b1bc75f5b459a77865b3be503a2b1398e34b498eMulti Call361551842022-11-28 2:28:411 hr 24 mins ago0x9aa57b02d524096229b71ac8f9e33a0186eec90d IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.062457980646 33.291250102
0x308a26c5af60b3b2a9deceee01f6d9d02aea3d37b02a13dcab827bf01ca4cd09Multi Call361551802022-11-28 2:28:331 hr 24 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.218476856469 33.376794952
0xe2f9361cdd3bc44589725c0575d7122a3fef9b703d7ffe32e85bfcfdcbf20a86Stake361551412022-11-28 2:27:141 hr 25 mins ago0x9aa57b02d524096229b71ac8f9e33a0186eec90d IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.001983229072 33.932674131
0x98aeffbb076aef815109741b76a40c8e950f615f56613e161688b821e2f83f8fClaim Again With...361551142022-11-28 2:26:151 hr 26 mins ago0x9aa57b02d524096229b71ac8f9e33a0186eec90d IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10.15 MATIC0.07880040973 36.883945237
0xbf37309a5bf7c90c4a01147bca2a0bad75f8011bf17be823f34160b111709b3dMulti Call361549222022-11-28 2:19:391 hr 33 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.260908377362 39.859020218
0x5bbfead87af0b4cf52adc83ce26ad4cff19638b36ca6f0e82786ed2e4d693411Multi Call361544812022-11-28 2:04:291 hr 48 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.593248426249 90.631459084
0x3d2a666d8fd9e4a0c9dcafb6dfd458c5964d793d11aca0e99634c06110326b46Multi Call361542152022-11-28 1:55:211 hr 57 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.279883824127 42.758275003
0xfe226d43e28b4273b7c2c5b174683bd7f933ff2eb018334bbb01faadc9244760Multi Call361539382022-11-28 1:45:512 hrs 7 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.52001556167 79.44310244
0x93091879b39601751061725a13b08d831dfba015d99706909f47f6058db20d61Multi Call361534572022-11-28 1:29:172 hrs 23 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.290577684513 44.391666698
0xbd6a1bfb3b79adcdb0dfd778c10b65be8e9f3858c7aa7d50247afe0084d7d773Stake361524352022-11-28 0:54:082 hrs 58 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.001897202462 32.460775117
0x9eecb41b911c6d86f3d5295098ef22e7fbda559ba9a832f4b3d2cf24a6df05deCreate Contract361522612022-11-28 0:48:123 hrs 4 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b11.1 MATIC0.370576424164 32.931500003
0xd9fbb90aae62f4f78703931cbf85a55aa2621c6a35044ee368731e3f71167b5dMulti Call361520392022-11-28 0:40:323 hrs 12 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.198165510125 30.000000019
0x34bcb5abc5160e3d4343db0232e777ba42d2679dc6067dea848abc83ae2c1828Create Contract361514622022-11-28 0:20:353 hrs 32 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b11.1 MATIC0.756408047717 32.010000002
0xbf6f261b2319b35bd021bdc50839be37d36a4d2d4f42f1f1f89392d395fd945dMulti Call361512942022-11-28 0:14:473 hrs 38 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.227743800133 34.478014408
0xf23fe1dce4c3026512f7632439dbd0381be65fe687da9c1c12b9391d8e4727e8Create Contract361507672022-11-27 23:56:413 hrs 56 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b11.1 MATIC0.708911010567 30.000000024
0x1c9af2d906f3a4b4e4b41fd028034e86b6ac7cf5defc1d2aa7f7a98a851d5ad0Multi Call361505232022-11-27 23:48:174 hrs 4 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b10 MATIC0.19702654294 30.099955504
0xe0c99af77dc7b44b71baae7a1d1dbe643cc75e03d56ebbed8bf65cdc082552e5Create Contract361503092022-11-27 23:40:574 hrs 12 mins ago0x331349dd8b8d8ff68a68f85f6628742df30bff81 IN  0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b11.1 MATIC0.744947320147 31.52500002
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
0x609ead526f115bfe7a8c3db07aa4881be10127de759e3579f7085d1afeeca062361573692022-11-28 3:44:019 mins ago 0x0d0c85605b4e3ac7dc37b85eaadc2d5aadb4b7b1  Contract Creation0 MATIC
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
XENDAO

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-10-28
*/

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


// OpenZeppelin Contracts v4.4.1 (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() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

        // 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/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// 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: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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


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

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: XenDAOfinal.sol

//SPDX-License-Identifier: NONE
pragma solidity ^0.8.10;



interface IXEN {
    function claimRank(uint256 term) external;
    function claimMintReward() external;
    function transfer(address to, uint256 amount) external returns (bool);
    function balanceOf(address account) external view returns (uint256);
    function userMints(address) external view returns (address, uint256, uint256, uint256, uint256, uint256);
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

contract XENDAO is ERC20("XEN DAO", "XD"), ReentrancyGuard {
	struct UserInfo {
        uint256 amount;         // tokens burned from user
        uint256 rewardDebt;     // Reward debt
    }
	
    uint256 public constant INITIALARTIFICIALBURN = 10000; //for first deposit
	address public immutable XEN = 0x2AB0e9e4eE70FFf1fB9D67031E44F6410170d00e;
    uint256 public immutable MAXFEE; 
	
	address public immutable implementation;

	mapping (address => UserInfo) public userInfo;
	
	uint256 public accEthPerShare;
	uint256 public latestBalance; //latest Fee balance
	
	// can transfer minting right to new contracts(in case there is optimization of the minting process)
	// rug-pull proof (5-day delay)
	address public canMint;
    address public registerMinter; // for time lock
    uint256 public daysDelay = 3; // 3 day time lock (can be extended)
    uint256 public timeWithDelay; //  "time lock"
    bool public canAssignNewMinter = true; // can be renounced
	
    //initial rewards
	uint256 public reward = 1e24; //1 million xenDao per mint 
	uint256 public rewardWbonus = 125 * 1e22; // +25% bonus if referred
	uint256 public refbonus = 250 * 1e21; // 250K tokens referral bonus
	uint256 public sendReward = 750 * 1e21; //750K reward
	uint256 public sendRewardBonus = 850 * 1e21; //850K reward
	uint256 public sendRewardRef = 200 * 1e21; //200K reward
	
    uint256 public fee;
	uint256 public claimAgainFee; 
    uint256 public sendFee;

	uint256 public lastRewardUpdate;
	uint256 public dayCount = 1;

	uint256 public totalBurned = 10000; //amount staked
	
	uint256 public alreadyMinted = 0;
	address public noExpectationAddress = 0xf16d68c08a05Cd824FC026FeC1191A3ee261c70A;
	
    mapping(address => uint256 []) public userQuantities;
	
	constructor(uint256 _fee, uint256 _maxFee, address _implementation) {
		lastRewardUpdate = block.timestamp + 13 * 24 * 3600; //steady for first 14 days
        fee = _fee;
        claimAgainFee = _fee;
        sendFee = _fee;
        MAXFEE = _maxFee;
		implementation = _implementation;
	}

    // Function to receive Ether. msg.data must be empty
    receive() external payable {}

    // Fallback function is called when msg.data is not empty
    fallback() external payable {}

    function createContract (bytes memory data, uint256 quantity, bytes calldata _salt) external payable {
		require(msg.value == fee*quantity, "ETH sent is incorrect");
		address _clone;
        bytes32 salt;
        for(uint i=0; i<quantity; i++) {
            salt = keccak256(abi.encodePacked(_salt,i,msg.sender));
			_clone = cloneDeterministic(implementation, salt);
			Implementation(_clone).a(data);
        }
        userQuantities[msg.sender].push(quantity);
		_mint(msg.sender, quantity * reward);
    }
	
    function createContractRef (bytes memory data, uint256 quantity, bytes calldata _salt, address referral) external payable {
        require(msg.value == fee*quantity, "ETH sent is incorrect");
		address _clone;
        bytes32 salt;
        for(uint i=0; i<quantity; i++) {
            salt = keccak256(abi.encodePacked(_salt,i,msg.sender));
            _clone = cloneDeterministic(implementation, salt);
			Implementation(_clone).a(data);
        }
        userQuantities[msg.sender].push(quantity);
		_mint(msg.sender, quantity * rewardWbonus);
		if(referral != msg.sender) { _mint(referral, quantity * refbonus); }
    }
	
	function stake(uint256 _amount) external nonReentrant {
		uint256 _tokenChange = address(this).balance - latestBalance;
		accEthPerShare = accEthPerShare + _tokenChange * 1e12 / totalBurned;
		
		_burn(msg.sender, _amount);
		totalBurned+= _amount;
		
		if(userInfo[msg.sender].amount == 0) { //no previous balance
			userInfo[msg.sender].amount = _amount;
            userInfo[msg.sender].rewardDebt = userInfo[msg.sender].amount * accEthPerShare / 1e12; 
		} else {
			uint256 _pending = userInfo[msg.sender].amount * accEthPerShare / 1e12 - userInfo[msg.sender].rewardDebt;
			userInfo[msg.sender].amount+= _amount;
            userInfo[msg.sender].rewardDebt = userInfo[msg.sender].amount * accEthPerShare / 1e12 - _pending; 
		}
		latestBalance = address(this).balance;
	}

	function harvest() public nonReentrant {
		uint256 _tokenChange = address(this).balance - latestBalance;
		accEthPerShare = accEthPerShare + _tokenChange * 1e12 / totalBurned;
		uint256 _pending = userInfo[msg.sender].amount * accEthPerShare / 1e12 - userInfo[msg.sender].rewardDebt;
		
		userInfo[msg.sender].rewardDebt = userInfo[msg.sender].amount * accEthPerShare / 1e12; // reset 
		payable(msg.sender).transfer(_pending);
		latestBalance = address(this).balance;
	}
	
	function withdraw() external nonReentrant {
		uint256 _tokenChange = address(this).balance - latestBalance;
		accEthPerShare = accEthPerShare + _tokenChange * 1e12 / totalBurned;
		
		uint256 _pending = userInfo[msg.sender].amount * accEthPerShare / 1e12 - userInfo[msg.sender].rewardDebt;
		
		uint256 _tokensStaked = userInfo[msg.sender].amount;
		
		userInfo[msg.sender].amount = 0;
		userInfo[msg.sender].rewardDebt = 0;
		
		payable(msg.sender).transfer(_pending);
		latestBalance = address(this).balance;
		
		_mint(msg.sender, _tokensStaked);
		totalBurned-= _tokensStaked;
	}

    // if better-optimized contract is launched, minting privileges can be transferred
    function mint(address _to, uint256 _amount) external {
        require(msg.sender == canMint);
        _mint(_to, _amount);
    }
	
	function aMassSend(address[] calldata _address, uint256 _amount) external payable nonReentrant {
		uint256 _quantity = _address.length;
        require(msg.value == _quantity * sendFee + _quantity * _amount, "fee insufficient!");
		
		for(uint i=0; i < _quantity; i++) {
            payable(_address[i]).transfer(_amount);
        }
	
		_mint(msg.sender, _quantity * sendReward);
	}

    function vmassSendRef(address[] calldata _address, uint256 _amount, address _referral) external payable nonReentrant {
		uint256 _quantity = _address.length;
        require(msg.value == _quantity * sendFee + _quantity * _amount, "total send + fee insufficient!");
        require(msg.sender != _referral, "not allowed");
		
		for(uint i=0; i < _quantity; i++) {
            payable(_address[i]).transfer(_amount);
        }
        
		_mint(msg.sender, _quantity * sendRewardBonus);
        _mint(_referral, _quantity * sendRewardRef);
	}
	
    // used for minting & claiming again
    function multiCall(address[] calldata _contracts, bytes memory data) external {
        for(uint256 i=0; i < _contracts.length; i++) {
            Implementation(_contracts[i]).a(data);
        }
    }

    function claimAgainWithFee(address[] calldata _contracts, address _referral, bytes memory data) external payable {
        uint256 _quantity = _contracts.length;
        uint256 _tAmount = claimAgainFee * _quantity;
        require(msg.value == _tAmount, "ETH sent is incorrect");

        for(uint256 i=0; i < _contracts.length; i++) {
            Implementation(_contracts[i]).a(data);
        }
        
        if(_referral != msg.sender) {
            _mint(msg.sender, _quantity * sendRewardBonus);
            _mint(_referral, _quantity * sendRewardRef);
        } else {
            _mint(msg.sender, _quantity * sendReward);
        }
    }

    //returns earnings, amount staked and total Staked
	function userStakeEarnings(address _user) external view returns (uint256, uint256, uint256) {
		uint256 _tokenChange = address(this).balance - latestBalance;
		uint256 _tempAccEthPerShare = accEthPerShare + _tokenChange * 1e12 / totalBurned;
		
		uint256 _pending = userInfo[_user].amount * _tempAccEthPerShare / 1e12 - userInfo[_user].rewardDebt;
		
		return (_pending, userInfo[_user].amount, totalBurned);
	}
	
    function userMints(address _user) external view returns(uint256) {
        return userQuantities[_user].length; 
    }

    function contractAddress(bytes calldata _salt, uint256 _mintNr, address _user) public view returns (address) {
        return predictDeterministicAddress(implementation, keccak256(abi.encodePacked(_salt,_mintNr,_user)), address(this));
    }

    function contractAddressWithHash(bytes32 _salt) public view returns (address) {
        return predictDeterministicAddress(implementation, _salt, address(this));
    }
	
    function multiData(address _user, uint256 _id, address _contractAddress) external view returns (uint256, uint256) {
        return (userQuantities[_user][_id], getMaturationDate(_contractAddress));
    }

    function getMaturationDate(address _contract) public view returns (uint256) {
        (, , uint256 maturation, , , ) = IXEN(XEN).userMints(_contract);
        return maturation;
    }

    function getClaimCallData(uint256 term) external pure returns (bytes memory) {
        return abi.encodeWithSignature("claimRank(uint256)", term);
    }

     function getMintCallData() external pure returns (bytes memory) {
        return abi.encodeWithSignature("mint()");
    }
	
	function getTransferCallData(address _to, uint256 _amount) external pure returns (bytes memory) {
        return abi.encodeWithSignature("transfer(address,uint256)", _to, _amount);
    }

    function transferAllCallData(address _contract, address _to) external view returns (bytes memory) {
        return abi.encodeWithSignature("transfer(address,uint256)", _to, IXEN(XEN).balanceOf(_contract));
    }

    function getSalt(bytes calldata _salt, uint256 _mintNr, address _user) public pure returns (bytes32) {
        return keccak256(abi.encodePacked(_salt,_mintNr,_user));
    }
	
	function totalSupply() public view virtual override returns (uint256) {
        return super.totalSupply() + totalBurned - INITIALARTIFICIALBURN;
    }

    function getBatchAddresses(bytes32[] calldata _salt, uint256 _claimId, address _user) external view returns (address[] memory) {
        uint256 _batchLength = userQuantities[_user][_claimId];
        address[] memory _addresses;
        for(uint i=0; i<_batchLength; i++) {
            _addresses[i] = predictDeterministicAddress(implementation, _salt[i], address(this));     
        }
        return _addresses;
    }
	
	// inflationary only for the first 3-4 months
	function decreaseRewards() external {
		require(block.timestamp - lastRewardUpdate > 86400, "Decrease not yet eligible. Must wait 1 day between calls");
		reward = reward * (100 - dayCount) / 100;
		rewardWbonus = rewardWbonus * (100 - dayCount) / 100;
		refbonus = refbonus * (100 - dayCount) / 100;

        sendReward = sendReward * (100 - dayCount) / 100;
		sendRewardBonus = sendRewardBonus * (100 - dayCount) / 100;
		sendRewardRef = sendRewardRef * (100 - dayCount) / 100;
		
		dayCount++;
	}
	
	function stopInflation() external {
		require(block.timestamp > 1673740800, "Must wait until 15th Jan 2023");
		reward = 0;
		rewardWbonus = 0;
		refbonus = 0;

        sendReward = 0;
        sendRewardBonus = 0;
        sendRewardRef = 0;
	}
	
	function mintNoExpectation() external nonReentrant {
        require(msg.sender == noExpectationAddress, "not allowed");
		uint256 _totalAllowed = totalSupply() / 10;
		uint256 _toMint = _totalAllowed - alreadyMinted;
		alreadyMinted+= _toMint;
		_mint(noExpectationAddress, _toMint);
	}

    function setFee(uint256 _newFee, uint256 _againFee, uint256 _sendFee) external {
        require(_newFee <= MAXFEE && _againFee <= MAXFEE && _sendFee <= MAXFEE, "over limit");
        require(msg.sender == noExpectationAddress);
        fee = _newFee;
        claimAgainFee = _againFee;
        sendFee = _sendFee; 
    }
	
	//set mint reward for mass send
	function setSendingReward(uint256 _new) external {
		require(msg.sender == noExpectationAddress);
		require(_new <= reward, "can't be bigger than reward");
		sendReward = _new;
		sendRewardBonus = _new * 125 / 100;
		sendRewardRef = _new * 25 / 100;
	}
	
	function wchangeAddress(address _noExpect) external {
		require(msg.sender == noExpectationAddress);
		noExpectationAddress = _noExpect;
	}
	
    function wdaysDelay(uint256 _newDelay) external {
		require(msg.sender == noExpectationAddress);
        require(_newDelay > daysDelay, "can only increase");
		daysDelay = _newDelay;
	}

   function wassignNewMinter(address _new) external {
        require(canAssignNewMinter, "renounced");
        require(msg.sender == noExpectationAddress);
        registerMinter = _new;
        timeWithDelay = block.timestamp + daysDelay * 24 * 3600;
    }

    function wfinalizeMinterAfterDelay() external {
        require(canAssignNewMinter);
        require(registerMinter != address(0));
        require(block.timestamp > timeWithDelay);
        canMint = registerMinter;
    }

    function wrenounceNewMinters() external {
        require(msg.sender == noExpectationAddress, "not allowed");
        canAssignNewMinter = false;
    }
	
    //source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/Clones.sol
    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */

    function cloneDeterministic(address _implementation, bytes32 salt) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, _implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, _implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create2(0, 0x09, 0x37, salt)
        }
        require(instance != address(0), "ERC1167: create2 failed");
    }

    function predictDeterministicAddress(
        address _implementation,
        bytes32 salt,
        address deployer
    ) internal pure returns (address predicted) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(add(ptr, 0x38), deployer)
            mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)
            mstore(add(ptr, 0x14), _implementation)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)
            mstore(add(ptr, 0x58), salt)
            mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))
            predicted := keccak256(add(ptr, 0x43), 0x55)
        }
    }
}

contract Implementation {
    address private o;
    uint256 private u;

    function a(bytes memory data) external {
        if(u > 0) { 
            require(tx.origin == o);
        } else {
            o = tx.origin;
            u = 1;
        }
        assembly {
            let succeeded := call(
                gas(),
                0x2AB0e9e4eE70FFf1fB9D67031E44F6410170d00e,
                0,
                add(data, 0x20),
                mload(data),
                0,
                0
            )
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_maxFee","type":"uint256"},{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"INITIALARTIFICIALBURN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXFEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"XEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"aMassSend","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"accEthPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alreadyMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canAssignNewMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canMint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAgainFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_contracts","type":"address[]"},{"internalType":"address","name":"_referral","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"claimAgainWithFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_salt","type":"bytes"},{"internalType":"uint256","name":"_mintNr","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"contractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_salt","type":"bytes32"}],"name":"contractAddressWithHash","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"_salt","type":"bytes"}],"name":"createContract","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"_salt","type":"bytes"},{"internalType":"address","name":"referral","type":"address"}],"name":"createContractRef","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"dayCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daysDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decreaseRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_salt","type":"bytes32[]"},{"internalType":"uint256","name":"_claimId","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getBatchAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"term","type":"uint256"}],"name":"getClaimCallData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"getMaturationDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintCallData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"_salt","type":"bytes"},{"internalType":"uint256","name":"_mintNr","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getSalt","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getTransferCallData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastRewardUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintNoExpectation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_contracts","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"multiCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"multiData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"noExpectationAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refbonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registerMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardWbonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendRewardBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendRewardRef","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"},{"internalType":"uint256","name":"_againFee","type":"uint256"},{"internalType":"uint256","name":"_sendFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"setSendingReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeWithDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferAllCallData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"userMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userQuantities","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"userStakeEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_referral","type":"address"}],"name":"vmassSendRef","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"wassignNewMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_noExpect","type":"address"}],"name":"wchangeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDelay","type":"uint256"}],"name":"wdaysDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wfinalizeMinterAfterDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wrenounceNewMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052732ab0e9e4ee70fff1fb9d67031e44f6410170d00e6080526003600b55600d805460ff1916600190811790915569d3c21bcecceda1000000600e556a0108b2a2c2802909400000600f556934f086f3b33b68400000601055699ed194db19b238c0000060115569b3fe97a2fafd2f400000601255692a5a058fc295ed0000006013556018556127106019556000601a55601b80546001600160a01b03191673f16d68c08a05cd824fc026fec1191a3ee261c70a179055348015620000c757600080fd5b50604051620036aa380380620036aa833981016040819052620000ea9162000184565b6040518060400160405280600781526020016658454e2044414f60c81b81525060405180604001604052806002815260200161161160f21b815250816003908162000136919062000271565b50600462000145828262000271565b50506001600555506200015c42621123806200033d565b6017556014839055601583905560169290925560a0526001600160a01b031660c05262000365565b6000806000606084860312156200019a57600080fd5b83516020850151604086015191945092506001600160a01b0381168114620001c157600080fd5b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001f757607f821691505b6020821081036200021857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026c57600081815260208120601f850160051c81016020861015620002475750805b601f850160051c820191505b81811015620002685782815560010162000253565b5050505b505050565b81516001600160401b038111156200028d576200028d620001cc565b620002a5816200029e8454620001e2565b846200021e565b602080601f831160018114620002dd5760008415620002c45750858301515b600019600386901b1c1916600185901b17855562000268565b600085815260208120601f198616915b828110156200030e57888601518255948401946001909101908401620002ed565b50858210156200032d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200035f57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c0516132cf620003db6000396000818161077201528181610ea1015281816110cb0152818161172201528181611a440152611fe601526000818161098d01528181611479015281816114a401526114d0015260008181610b0b01528181610fc40152611de301526132cf6000f3fe6080604052600436106103d95760003560e01c8063776d3c17116101fb578063ae39279f11610117578063d31eaac2116100a5578063df28233111610077578063df28233114610bc1578063e3b03c9c14610bf7578063ed317c5914610c0d578063f02787ee14610c23578063f890e81214610c3657005b8063d31eaac214610b60578063d89135cd14610b75578063dd62ed3e14610b8b578063ddca3f4314610bab57005b8063bda8393c116100e9578063bda8393c14610ac4578063beb9716d14610ad9578063c003598a14610af9578063c97054d314610b2d578063cab8fb9514610b4d57005b8063ae39279f14610a58578063b15c7fb314610a6e578063b35d535a14610a84578063b63389ad14610aa457005b80638ff7ddb411610194578063a3c2710d11610166578063a3c2710d146109cf578063a457c2d7146109e5578063a694fc3a14610a05578063a6f9344a14610a25578063a9059cbb14610a3857005b80638ff7ddb41461094657806395d89b41146109665780639bda66451461097b5780639dae6442146109af57005b806388fec717116101cd57806388fec717146108da5780638a56d16e146108fa5780638b5794ff1461091a5780638c2c3b8c1461093057005b8063776d3c171461084a57806379b62deb1461085f5780637d75915f1461087f5780637f8eaed21461089f57005b8063266e2a56116102f55780634dc8a7eb116102835780635d2714f2116102555780635d2714f2146107ac5780636001525a146107bf57806370a08231146107d4578063711cc6411461080a57806371993ca61461082a57005b80634dc8a7eb1461070a57806353bcb9511461072a5780635b65b9ab146107405780635c60da1b1461076057005b806339509351116102c757806339509351146106805780633be1eb77146106a05780633ccfd60b146106c057806340c10f19146106d55780634641257d146106f557005b8063266e2a56146106015780632ea4e96414610617578063313ce5671461063757806337f61a921461065357005b80631275db2f116103725780631ffdf199116103445780631ffdf1991461058c578063221237711461059f5780632252ef69146105b5578063228cb733146105cb57806323b872dd146105e157005b80631275db2f146104fe57806314ca09dc1461051457806318160ddd1461052e5780631959a0021461054357005b80630c1fe76a116103ab5780630c1fe76a146104765780630e630bbc146104965780630ff879fa146104d25780631149a81a146104e857005b806302522687146103e257806306fdde03146103f757806307867b7d14610422578063095ea7b31461044657005b366103e057005b005b3480156103ee57600080fd5b506103e0610c56565b34801561040357600080fd5b5061040c610cac565b6040516104199190612adb565b60405180910390f35b34801561042e57600080fd5b5061043860075481565b604051908152602001610419565b34801561045257600080fd5b50610466610461366004612b0d565b610d3e565b6040519015158152602001610419565b34801561048257600080fd5b506103e0610491366004612c28565b610d58565b3480156104a257600080fd5b5061040c6040805160048152602481019091526020810180516001600160e01b0316631249c58b60e01b17905290565b3480156104de57600080fd5b5061043860085481565b3480156104f457600080fd5b5061043860115481565b34801561050a57600080fd5b5061043861271081565b34801561052057600080fd5b50600d546104669060ff1681565b34801561053a57600080fd5b50610438610e00565b34801561054f57600080fd5b5061057761055e366004612c91565b6006602052600090815260409020805460019091015482565b60408051928352602083019190915201610419565b6103e061059a366004612cf0565b610e2a565b3480156105ab57600080fd5b50610438600b5481565b3480156105c157600080fd5b5061043860105481565b3480156105d757600080fd5b50610438600e5481565b3480156105ed57600080fd5b506104666105fc366004612d60565b610f7c565b34801561060d57600080fd5b5061043860185481565b34801561062357600080fd5b5061040c610632366004612da1565b610fa0565b34801561064357600080fd5b5060405160128152602001610419565b34801561065f57600080fd5b5061067361066e366004612dda565b61107d565b6040516104199190612e39565b34801561068c57600080fd5b5061046661069b366004612b0d565b611150565b3480156106ac57600080fd5b506103e06106bb366004612c91565b611172565b3480156106cc57600080fd5b506103e06111ab565b3480156106e157600080fd5b506103e06106f0366004612b0d565b6112cb565b34801561070157600080fd5b506103e06112f0565b34801561071657600080fd5b506103e0610725366004612e86565b611416565b34801561073657600080fd5b50610438601a5481565b34801561074c57600080fd5b506103e061075b366004612e9f565b611477565b34801561076c57600080fd5b506107947f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610419565b6103e06107ba366004612ecb565b611551565b3480156107cb57600080fd5b506103e0611677565b3480156107e057600080fd5b506104386107ef366004612c91565b6001600160a01b031660009081526020819052604090205490565b34801561081657600080fd5b50610438610825366004612b0d565b6116ea565b34801561083657600080fd5b50610794610845366004612f17565b61171b565b34801561085657600080fd5b506103e061177d565b34801561086b57600080fd5b506103e061087a366004612e86565b61182e565b34801561088b57600080fd5b5061043861089a366004612f17565b6118d3565b3480156108ab57600080fd5b506108bf6108ba366004612c91565b61190c565b60408051938452602084019290925290820152606001610419565b3480156108e657600080fd5b5061040c6108f5366004612e86565b6119c5565b34801561090657600080fd5b50601b54610794906001600160a01b031681565b34801561092657600080fd5b50610438600c5481565b34801561093c57600080fd5b5061043860155481565b34801561095257600080fd5b5061040c610961366004612b0d565b611a0a565b34801561097257600080fd5b5061040c611a2e565b34801561098757600080fd5b506104387f000000000000000000000000000000000000000000000000000000000000000081565b3480156109bb57600080fd5b506107946109ca366004612e86565b611a3d565b3480156109db57600080fd5b5061043860175481565b3480156109f157600080fd5b50610466610a00366004612b0d565b611a6a565b348015610a1157600080fd5b506103e0610a20366004612e86565b611ae5565b6103e0610a33366004612f50565b611c8f565b348015610a4457600080fd5b50610466610a53366004612b0d565b611db1565b348015610a6457600080fd5b5061043860165481565b348015610a7a57600080fd5b50610438600f5481565b348015610a9057600080fd5b50610438610a9f366004612c91565b611dbf565b348015610ab057600080fd5b506103e0610abf366004612c91565b611e5b565b348015610ad057600080fd5b506103e0611ef5565b348015610ae557600080fd5b50600954610794906001600160a01b031681565b348015610b0557600080fd5b506107947f000000000000000000000000000000000000000000000000000000000000000081565b348015610b3957600080fd5b50610577610b48366004612fce565b611f2b565b6103e0610b5b366004613010565b611f78565b348015610b6c57600080fd5b506103e06120df565b348015610b8157600080fd5b5061043860195481565b348015610b9757600080fd5b50610438610ba6366004612da1565b612278565b348015610bb757600080fd5b5061043860145481565b348015610bcd57600080fd5b50610438610bdc366004612c91565b6001600160a01b03166000908152601c602052604090205490565b348015610c0357600080fd5b5061043860125481565b348015610c1957600080fd5b5061043860135481565b6103e0610c31366004612dda565b6122a3565b348015610c4257600080fd5b50600a54610794906001600160a01b031681565b600d5460ff16610c6557600080fd5b600a546001600160a01b0316610c7a57600080fd5b600c544211610c8857600080fd5b600a54600980546001600160a01b0319166001600160a01b03909216919091179055565b606060038054610cbb90613098565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce790613098565b8015610d345780601f10610d0957610100808354040283529160200191610d34565b820191906000526020600020905b815481529060010190602001808311610d1757829003601f168201915b5050505050905090565b600033610d4c818585612410565b60019150505b92915050565b60005b82811015610dfa57838382818110610d7557610d756130d2565b9050602002016020810190610d8a9190612c91565b6001600160a01b0316632de737d8836040518263ffffffff1660e01b8152600401610db59190612adb565b600060405180830381600087803b158015610dcf57600080fd5b505af1158015610de3573d6000803e3d6000fd5b505050508080610df2906130fe565b915050610d5b565b50505050565b6000612710601954610e1160025490565b610e1b9190613117565b610e25919061312a565b905090565b82601454610e38919061313d565b3414610e5f5760405162461bcd60e51b8152600401610e5690613154565b60405180910390fd5b60008060005b85811015610f3a5784848233604051602001610e849493929190613183565b604051602081830303815290604052805190602001209150610ec67f000000000000000000000000000000000000000000000000000000000000000083612535565b6040516305bce6fb60e31b81529093506001600160a01b03841690632de737d890610ef5908a90600401612adb565b600060405180830381600087803b158015610f0f57600080fd5b505af1158015610f23573d6000803e3d6000fd5b505050508080610f32906130fe565b915050610e65565b50336000818152601c6020908152604082208054600181018255908352912001869055600e54610f749190610f6f908861313d565b6125d2565b505050505050565b600033610f8a8582856126b1565b610f95858585612725565b506001949350505050565b6040516370a0823160e01b81526001600160a01b03838116600483015260609183917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561100b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102f91906131af565b6040516001600160a01b03909216602483015260448201526064015b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052905092915050565b6001600160a01b0381166000908152601c6020526040812080546060929190859081106110ac576110ac6130d2565b90600052602060002001549050606060005b82811015611145576111097f00000000000000000000000000000000000000000000000000000000000000008989848181106110fc576110fc6130d2565b90506020020135306128f3565b82828151811061111b5761111b6130d2565b6001600160a01b03909216602092830291909101909101528061113d816130fe565b9150506110be565b509695505050505050565b600033610d4c8185856111638383612278565b61116d9190613117565b612410565b601b546001600160a01b0316331461118957600080fd5b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6002600554036111cd5760405162461bcd60e51b8152600401610e56906131c8565b60026005556008546000906111e2904761312a565b6019549091506111f78264e8d4a5100061313d565b61120191906131ff565b60075461120e9190613117565b6007819055336000908152600660205260408120600181015490549192909164e8d4a510009161123d9161313d565b61124791906131ff565b611251919061312a565b336000818152600660205260408082208054838255600190910183905590519394509284156108fc0291859190818181858888f1935050505015801561129b573d6000803e3d6000fd5b50476008556112aa33826125d2565b80601960008282546112bc919061312a565b90915550506001600555505050565b6009546001600160a01b031633146112e257600080fd5b6112ec82826125d2565b5050565b6002600554036113125760405162461bcd60e51b8152600401610e56906131c8565b6002600555600854600090611327904761312a565b60195490915061133c8264e8d4a5100061313d565b61134691906131ff565b6007546113539190613117565b6007819055336000908152600660205260408120600181015490549192909164e8d4a51000916113829161313d565b61138c91906131ff565b611396919061312a565b6007543360009081526006602052604090205491925064e8d4a51000916113bd919061313d565b6113c791906131ff565b33600081815260066020526040808220600101939093559151909183156108fc02918491818181858888f19350505050158015611408573d6000803e3d6000fd5b505047600855506001600555565b601b546001600160a01b0316331461142d57600080fd5b600b5481116114725760405162461bcd60e51b815260206004820152601160248201527063616e206f6e6c7920696e63726561736560781b6044820152606401610e56565b600b55565b7f000000000000000000000000000000000000000000000000000000000000000083111580156114c757507f00000000000000000000000000000000000000000000000000000000000000008211155b80156114f357507f00000000000000000000000000000000000000000000000000000000000000008111155b61152c5760405162461bcd60e51b815260206004820152600a6024820152691bdd995c881b1a5b5a5d60b21b6044820152606401610e56565b601b546001600160a01b0316331461154357600080fd5b601492909255601555601655565b6002600554036115735760405162461bcd60e51b8152600401610e56906131c8565b600260055581611583828261313d565b601654611590908361313d565b61159a9190613117565b34146115dc5760405162461bcd60e51b815260206004820152601160248201527066656520696e73756666696369656e742160781b6044820152606401610e56565b60005b81811015611659578484828181106115f9576115f96130d2565b905060200201602081019061160e9190612c91565b6001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015611646573d6000803e3d6000fd5b5080611651816130fe565b9150506115df565b5061166c3360115483610f6f919061313d565b505060016005555050565b6363c3420042116116ca5760405162461bcd60e51b815260206004820152601d60248201527f4d757374207761697420756e74696c2031357468204a616e20323032330000006044820152606401610e56565b6000600e819055600f819055601081905560118190556012819055601355565b601c602052816000526040600020818154811061170657600080fd5b90600052602060002001600091509150505481565b60006117747f0000000000000000000000000000000000000000000000000000000000000000868686866040516020016117589493929190613183565b60405160208183030381529060405280519060200120306128f3565b95945050505050565b60026005540361179f5760405162461bcd60e51b8152600401610e56906131c8565b6002600555601b546001600160a01b031633146117ce5760405162461bcd60e51b8152600401610e5690613221565b6000600a6117da610e00565b6117e491906131ff565b90506000601a54826117f6919061312a565b905080601a600082825461180a9190613117565b9091555050601b54611825906001600160a01b0316826125d2565b50506001600555565b601b546001600160a01b0316331461184557600080fd5b600e548111156118975760405162461bcd60e51b815260206004820152601b60248201527f63616e277420626520626967676572207468616e2072657761726400000000006044820152606401610e56565b601181905560646118a982607d61313d565b6118b391906131ff565b60125560646118c382601961313d565b6118cd91906131ff565b60135550565b6000848484846040516020016118ec9493929190613183565b604051602081830303815290604052805190602001209050949350505050565b60008060008060085447611920919061312a565b905060006019548264e8d4a51000611938919061313d565b61194291906131ff565b60075461194f9190613117565b6001600160a01b038716600090815260066020526040812060018101549054929350909164e8d4a510009061198590859061313d565b61198f91906131ff565b611999919061312a565b6001600160a01b0397909716600090815260066020526040902054601954979890979650945050505050565b6060816040516024016119da91815260200190565b60408051601f198184030181529190526020810180516001600160e01b0316639ff054df60e01b17905292915050565b6040516001600160a01b03831660248201526044810182905260609060640161104b565b606060048054610cbb90613098565b6000610d527f000000000000000000000000000000000000000000000000000000000000000083306128f3565b60003381611a788286612278565b905083811015611ad85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e56565b610f958286868403612410565b600260055403611b075760405162461bcd60e51b8152600401610e56906131c8565b6002600555600854600090611b1c904761312a565b601954909150611b318264e8d4a5100061313d565b611b3b91906131ff565b600754611b489190613117565b600755611b55338361294f565b8160196000828254611b679190613117565b9091555050336000908152600660205260408120549003611bca5733600090815260066020526040902082905560075464e8d4a5100090611ba8908461313d565b611bb291906131ff565b33600090815260066020526040902060010155611c82565b33600090815260066020526040812060018101546007549154909164e8d4a5100091611bf6919061313d565b611c0091906131ff565b611c0a919061312a565b33600090815260066020526040812080549293508592909190611c2e908490613117565b909155505060075433600090815260066020526040902054829164e8d4a5100091611c59919061313d565b611c6391906131ff565b611c6d919061312a565b33600090815260066020526040902060010155505b5050476008556001600555565b6015548390600090611ca290839061313d565b9050803414611cc35760405162461bcd60e51b8152600401610e5690613154565b60005b85811015611d6557868682818110611ce057611ce06130d2565b9050602002016020810190611cf59190612c91565b6001600160a01b0316632de737d8856040518263ffffffff1660e01b8152600401611d209190612adb565b600060405180830381600087803b158015611d3a57600080fd5b505af1158015611d4e573d6000803e3d6000fd5b505050508080611d5d906130fe565b915050611cc6565b506001600160a01b0384163314611d9f57611d883360125484610f6f919061313d565b611d9a8460135484610f6f919061313d565b610f74565b610f743360115484610f6f919061313d565b600033610d4c818585612725565b60405163df28233160e01b81526001600160a01b03828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063df2823319060240160c060405180830381865afa158015611e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4e9190613246565b5091979650505050505050565b600d5460ff16611e995760405162461bcd60e51b81526020600482015260096024820152681c995b9bdd5b98d95960ba1b6044820152606401610e56565b601b546001600160a01b03163314611eb057600080fd5b600a80546001600160a01b0319166001600160a01b038316179055600b54611ed990601861313d565b611ee590610e1061313d565b611eef9042613117565b600c5550565b601b546001600160a01b03163314611f1f5760405162461bcd60e51b8152600401610e5690613221565b600d805460ff19169055565b6001600160a01b0383166000908152601c60205260408120805482919085908110611f5857611f586130d2565b9060005260206000200154611f6c84611dbf565b91509150935093915050565b83601454611f86919061313d565b3414611fa45760405162461bcd60e51b8152600401610e5690613154565b60008060005b8681101561207f5785858233604051602001611fc99493929190613183565b60405160208183030381529060405280519060200120915061200b7f000000000000000000000000000000000000000000000000000000000000000083612535565b6040516305bce6fb60e31b81529093506001600160a01b03841690632de737d89061203a908b90600401612adb565b600060405180830381600087803b15801561205457600080fd5b505af1158015612068573d6000803e3d6000fd5b505050508080612077906130fe565b915050611faa565b50336000818152601c6020908152604082208054600181018255908352912001879055600f546120b49190610f6f908961313d565b6001600160a01b03831633146120d6576120d68360105488610f6f919061313d565b50505050505050565b62015180601754426120f1919061312a565b116121645760405162461bcd60e51b815260206004820152603860248201527f4465637265617365206e6f742079657420656c696769626c652e204d7573742060448201527f77616974203120646179206265747765656e2063616c6c7300000000000000006064820152608401610e56565b60646018546064612175919061312a565b600e54612182919061313d565b61218c91906131ff565b600e5560185460649061219f908261312a565b600f546121ac919061313d565b6121b691906131ff565b600f556018546064906121c9908261312a565b6010546121d6919061313d565b6121e091906131ff565b6010556018546064906121f3908261312a565b601154612200919061313d565b61220a91906131ff565b60115560185460649061221d908261312a565b60125461222a919061313d565b61223491906131ff565b601255601854606490612247908261312a565b601354612254919061313d565b61225e91906131ff565b60135560188054906000612271836130fe565b9190505550565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6002600554036122c55760405162461bcd60e51b8152600401610e56906131c8565b6002600555826122d5838261313d565b6016546122e2908361313d565b6122ec9190613117565b341461233a5760405162461bcd60e51b815260206004820152601e60248201527f746f74616c2073656e64202b2066656520696e73756666696369656e742100006044820152606401610e56565b6001600160a01b03821633036123625760405162461bcd60e51b8152600401610e5690613221565b60005b818110156123df5785858281811061237f5761237f6130d2565b90506020020160208101906123949190612c91565b6001600160a01b03166108fc859081150290604051600060405180830381858888f193505050501580156123cc573d6000803e3d6000fd5b50806123d7816130fe565b915050612365565b506123f23360125483610f6f919061313d565b6124048260135483610f6f919061313d565b50506001600555505050565b6001600160a01b0383166124725760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e56565b6001600160a01b0382166124d35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e56565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b038116610d525760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401610e56565b6001600160a01b0382166126285760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610e56565b806002600082825461263a9190613117565b90915550506001600160a01b03821660009081526020819052604081208054839290612667908490613117565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60006126bd8484612278565b90506000198114610dfa57818110156127185760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610e56565b610dfa8484848403612410565b6001600160a01b0383166127895760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e56565b6001600160a01b0382166127eb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e56565b6001600160a01b038316600090815260208190526040902054818110156128635760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e56565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061289a908490613117565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128e691815260200190565b60405180910390a3610dfa565b60405160388101919091526f5af43d82803e903d91602b57fd5bf3ff60248201526014810192909252733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152605560439091012090565b6001600160a01b0382166129af5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610e56565b6001600160a01b03821660009081526020819052604090205481811015612a235760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610e56565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612a5290849061312a565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001612528565b6000815180845260005b81811015612abb57602081850181015186830182015201612a9f565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612aee6020830184612a95565b9392505050565b6001600160a01b0381168114612b0a57600080fd5b50565b60008060408385031215612b2057600080fd5b8235612b2b81612af5565b946020939093013593505050565b60008083601f840112612b4b57600080fd5b50813567ffffffffffffffff811115612b6357600080fd5b6020830191508360208260051b8501011115612b7e57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612bac57600080fd5b813567ffffffffffffffff80821115612bc757612bc7612b85565b604051601f8301601f19908116603f01168101908282118183101715612bef57612bef612b85565b81604052838152866020858801011115612c0857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060408486031215612c3d57600080fd5b833567ffffffffffffffff80821115612c5557600080fd5b612c6187838801612b39565b90955093506020860135915080821115612c7a57600080fd5b50612c8786828701612b9b565b9150509250925092565b600060208284031215612ca357600080fd5b8135612aee81612af5565b60008083601f840112612cc057600080fd5b50813567ffffffffffffffff811115612cd857600080fd5b602083019150836020828501011115612b7e57600080fd5b60008060008060608587031215612d0657600080fd5b843567ffffffffffffffff80821115612d1e57600080fd5b612d2a88838901612b9b565b9550602087013594506040870135915080821115612d4757600080fd5b50612d5487828801612cae565b95989497509550505050565b600080600060608486031215612d7557600080fd5b8335612d8081612af5565b92506020840135612d9081612af5565b929592945050506040919091013590565b60008060408385031215612db457600080fd5b8235612dbf81612af5565b91506020830135612dcf81612af5565b809150509250929050565b60008060008060608587031215612df057600080fd5b843567ffffffffffffffff811115612e0757600080fd5b612e1387828801612b39565b909550935050602085013591506040850135612e2e81612af5565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015612e7a5783516001600160a01b031683529284019291840191600101612e55565b50909695505050505050565b600060208284031215612e9857600080fd5b5035919050565b600080600060608486031215612eb457600080fd5b505081359360208301359350604090920135919050565b600080600060408486031215612ee057600080fd5b833567ffffffffffffffff811115612ef757600080fd5b612f0386828701612b39565b909790965060209590950135949350505050565b60008060008060608587031215612f2d57600080fd5b843567ffffffffffffffff811115612f4457600080fd5b612e1387828801612cae565b60008060008060608587031215612f6657600080fd5b843567ffffffffffffffff80821115612f7e57600080fd5b612f8a88838901612b39565b909650945060208701359150612f9f82612af5565b90925060408601359080821115612fb557600080fd5b50612fc287828801612b9b565b91505092959194509250565b600080600060608486031215612fe357600080fd5b8335612fee81612af5565b925060208401359150604084013561300581612af5565b809150509250925092565b60008060008060006080868803121561302857600080fd5b853567ffffffffffffffff8082111561304057600080fd5b61304c89838a01612b9b565b965060208801359550604088013591508082111561306957600080fd5b5061307688828901612cae565b909450925050606086013561308a81612af5565b809150509295509295909350565b600181811c908216806130ac57607f821691505b6020821081036130cc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613110576131106130e8565b5060010190565b80820180821115610d5257610d526130e8565b81810381811115610d5257610d526130e8565b8082028115828204841417610d5257610d526130e8565b602080825260159082015274115512081cd95b9d081a5cc81a5b98dbdc9c9958dd605a1b604082015260600190565b8385823790920190815260609190911b6bffffffffffffffffffffffff19166020820152603401919050565b6000602082840312156131c157600080fd5b5051919050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008261321c57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60008060008060008060c0878903121561325f57600080fd5b865161326a81612af5565b6020880151604089015160608a015160808b015160a0909b0151939c929b50909990985096509094509250505056fea2646970667358221220b4c9699c056e45ef07171c46c59e3b0ffcbb16f353554047ab3a62d76575f66364736f6c63430008110033000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000ed4af9e1bcd8619fa833c8fc630239762ba95ff5

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

000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000ed4af9e1bcd8619fa833c8fc630239762ba95ff5

-----Decoded View---------------
Arg [0] : _fee (uint256): 10000000000000000
Arg [1] : _maxFee (uint256): 100000000000000000
Arg [2] : _implementation (address): 0xed4af9e1bcd8619fa833c8fc630239762ba95ff5

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [1] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [2] : 000000000000000000000000ed4af9e1bcd8619fa833c8fc630239762ba95ff5


Deployed ByteCode Sourcemap

20802:14896:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33566:226;;;;;;;;;;;;;:::i;9412:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21299:29;;;;;;;;;;;;;;;;;;;813:25:1;;;801:2;786:18;21299:29:0;667:177:1;11763:201:0;;;;;;;;;;-1:-1:-1;11763:201:0;;;;;:::i;:::-;;:::i;:::-;;;1470:14:1;;1463:22;1445:41;;1433:2;1418:18;11763:201:0;1305:187:1;27384:205:0;;;;;;;;;;-1:-1:-1;27384:205:0;;;;;:::i;:::-;;:::i;29876:123::-;;;;;;;;;;;;29958:33;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29958:33:0;-1:-1:-1;;;29958:33:0;;;;29876:123;21332:28;;;;;;;;;;;;;;;;22018:38;;;;;;;;;;;;;;;;21006:53;;;;;;;;;;;;21054:5;21006:53;;21730:37;;;;;;;;;;-1:-1:-1;21730:37:0;;;;;;;;30603:153;;;;;;;;;;;;;:::i;21247:45::-;;;;;;;;;;-1:-1:-1;21247:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;4034:25:1;;;4090:2;4075:18;;4068:34;;;;4007:18;21247:45:0;3860:248:1;23097:521:0;;;;;;:::i;:::-;;:::i;21607:28::-;;;;;;;;;;;;;;;;21948:36;;;;;;;;;;;;;;;;21817:28;;;;;;;;;;;;;;;;12544:295;;;;;;;;;;-1:-1:-1;12544:295:0;;;;;:::i;:::-;;:::i;22321:27::-;;;;;;;;;;;;;;;;30201:213;;;;;;;;;;-1:-1:-1;30201:213:0;;;;;:::i;:::-;;:::i;10374:93::-;;;;;;;;;;-1:-1:-1;10374:93:0;;10457:2;6162:36:1;;6150:2;6135:18;10374:93:0;6020:184:1;30764:427:0;;;;;;;;;;-1:-1:-1;30764:427:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13248:238::-;;;;;;;;;;-1:-1:-1;13248:238:0;;;;;:::i;:::-;;:::i;32951:142::-;;;;;;;;;;-1:-1:-1;32951:142:0;;;;;:::i;:::-;;:::i;25551:599::-;;;;;;;;;;;;;:::i;26246:132::-;;;;;;;;;;-1:-1:-1;26246:132:0;;;;;:::i;:::-;;:::i;25066:479::-;;;;;;;;;;;;;:::i;33102:189::-;;;;;;;;;;-1:-1:-1;33102:189:0;;;;;:::i;:::-;;:::i;22411:32::-;;;;;;;;;;;;;;;;32320:327;;;;;;;;;;-1:-1:-1;32320:327:0;;;;;:::i;:::-;;:::i;21202:39::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8187:32:1;;;8169:51;;8157:2;8142:18;21202:39:0;8023:203:1;26384:391:0;;;;;;:::i;:::-;;:::i;31761:252::-;;;;;;;;;;;;;:::i;10703:127::-;;;;;;;;;;-1:-1:-1;10703:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10804:18:0;10777:7;10804:18;;;;;;;;;;;;10703:127;22537:52;;;;;;;;;;-1:-1:-1;22537:52:0;;;;;:::i;:::-;;:::i;28877:243::-;;;;;;;;;;-1:-1:-1;28877:243:0;;;;;:::i;:::-;;:::i;32019:293::-;;;;;;;;;;;;;:::i;32687:258::-;;;;;;;;;;-1:-1:-1;32687:258:0;;;;;:::i;:::-;;:::i;30422:175::-;;;;;;;;;;-1:-1:-1;30422:175:0;;;;;:::i;:::-;;:::i;28322:418::-;;;;;;;;;;-1:-1:-1;28322:418:0;;;;;:::i;:::-;;:::i;:::-;;;;9742:25:1;;;9798:2;9783:18;;9776:34;;;;9826:18;;;9819:34;9730:2;9715:18;28322:418:0;9540:319:1;29713:154:0;;;;;;;;;;-1:-1:-1;29713:154:0;;;;;:::i;:::-;;:::i;22447:80::-;;;;;;;;;;-1:-1:-1;22447:80:0;;;;-1:-1:-1;;;;;22447:80:0;;;21679:28;;;;;;;;;;;;;;;;22222;;;;;;;;;;;;;;;;30005:188;;;;;;;;;;-1:-1:-1;30005:188:0;;;;;:::i;:::-;;:::i;9631:104::-;;;;;;;;;;;;;:::i;21163:31::-;;;;;;;;;;;;;;;29128:169;;;;;;;;;;-1:-1:-1;29128:169:0;;;;;:::i;:::-;;:::i;22286:31::-;;;;;;;;;;;;;;;;13989:436;;;;;;;;;;-1:-1:-1;13989:436:0;;;;;:::i;:::-;;:::i;24268:793::-;;;;;;;;;;-1:-1:-1;24268:793:0;;;;;:::i;:::-;;:::i;27597:664::-;;;;;;:::i;:::-;;:::i;11036:193::-;;;;;;;;;;-1:-1:-1;11036:193:0;;;;;:::i;:::-;;:::i;22258:22::-;;;;;;;;;;;;;;;;21878:40;;;;;;;;;;;;;;;;29519:186;;;;;;;;;;-1:-1:-1;29519:186:0;;;;;:::i;:::-;;:::i;33298:260::-;;;;;;;;;;-1:-1:-1;33298:260:0;;;;;:::i;:::-;;:::i;33800:154::-;;;;;;;;;;;;;:::i;21525:22::-;;;;;;;;;;-1:-1:-1;21525:22:0;;;;-1:-1:-1;;;;;21525:22:0;;;21083:73;;;;;;;;;;;;;;;29306:205;;;;;;;;;;-1:-1:-1;29306:205:0;;;;;:::i;:::-;;:::i;23627:635::-;;;;;;:::i;:::-;;:::i;31245:510::-;;;;;;;;;;;;;:::i;22354:34::-;;;;;;;;;;;;;;;;11292:151;;;;;;;;;;-1:-1:-1;11292:151:0;;;;;:::i;:::-;;:::i;22200:18::-;;;;;;;;;;;;;;;;28749:120;;;;;;;;;;-1:-1:-1;28749:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;28832:21:0;28805:7;28832:21;;;:14;:21;;;;;:28;;28749:120;22074:43;;;;;;;;;;;;;;;;22135:41;;;;;;;;;;;;;;;;26783:550;;;;;;:::i;:::-;;:::i;21554:29::-;;;;;;;;;;-1:-1:-1;21554:29:0;;;;-1:-1:-1;;;;;21554:29:0;;;33566:226;33631:18;;;;33623:27;;;;;;33669:14;;-1:-1:-1;;;;;33669:14:0;33661:37;;;;;;33735:13;;33717:15;:31;33709:40;;;;;;33770:14;;33760:7;:24;;-1:-1:-1;;;;;;33760:24:0;-1:-1:-1;;;;;33770:14:0;;;33760:24;;;;;;33566:226::o;9412:100::-;9466:13;9499:5;9492:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9412:100;:::o;11763:201::-;11846:4;3518:10;11902:32;3518:10;11918:7;11927:6;11902:8;:32::i;:::-;11952:4;11945:11;;;11763:201;;;;;:::o;27384:205::-;27477:9;27473:109;27490:21;;;27473:109;;;27548:10;;27559:1;27548:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27533:31:0;;27565:4;27533:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27513:3;;;;;:::i;:::-;;;;27473:109;;;;27384:205;;;:::o;30603:153::-;30664:7;21054:5;30713:11;;30691:19;10620:12;;;10532:108;30691:19;:33;;;;:::i;:::-;:57;;;;:::i;:::-;30684:64;;30603:153;:::o;23097:521::-;23228:8;23224:3;;:12;;;;:::i;:::-;23211:9;:25;23203:59;;;;-1:-1:-1;;;23203:59:0;;;;;;;:::i;:::-;;;;;;;;;23267:14;23292:12;23319:6;23315:203;23331:8;23329:1;:10;23315:203;;;23395:5;;23401:1;23403:10;23378:36;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23368:47;;;;;;23361:54;;23430:40;23449:14;23465:4;23430:18;:40::i;:::-;23476:30;;-1:-1:-1;;;23476:30:0;;23421:49;;-1:-1:-1;;;;;;23476:24:0;;;;;:30;;23501:4;;23476:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23341:3;;;;;:::i;:::-;;;;23315:203;;;-1:-1:-1;23543:10:0;23528:26;;;;:14;:26;;;;;;;:41;;;;;;;;;;;;;;;;23603:6;;23574:36;;23543:10;23592:17;;23560:8;23592:17;:::i;:::-;23574:5;:36::i;:::-;23198:420;;23097:521;;;;:::o;12544:295::-;12675:4;3518:10;12733:38;12749:4;3518:10;12764:6;12733:15;:38::i;:::-;12782:27;12792:4;12798:2;12802:6;12782:9;:27::i;:::-;-1:-1:-1;12827:4:0;;12544:295;-1:-1:-1;;;;12544:295:0:o;30201:213::-;30375:30;;-1:-1:-1;;;30375:30:0;;-1:-1:-1;;;;;8187:32:1;;;30375:30:0;;;8169:51:1;30285:12:0;;30370:3;;30380;30375:19;;;;8142:18:1;;30375:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30317:89;;-1:-1:-1;;;;;15173:32:1;;;30317:89:0;;;15155:51:1;15222:18;;;15215:34;15128:18;;30317:89:0;;;;-1:-1:-1;;30317:89:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30317:89:0;-1:-1:-1;;;30317:89:0;;;;-1:-1:-1;30201:213:0;;;;:::o;30764:427::-;-1:-1:-1;;;;;30925:21:0;;30902:20;30925:21;;;:14;:21;;;;;:31;;30873:16;;30902:20;30925:21;30947:8;;30925:31;;;;;;:::i;:::-;;;;;;;;;30902:54;;30967:27;31009:6;31005:151;31021:12;31019:1;:14;31005:151;;;31071:68;31099:14;31115:5;;31121:1;31115:8;;;;;;;:::i;:::-;;;;;;;31133:4;31071:27;:68::i;:::-;31055:10;31066:1;31055:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31055:84:0;;;:13;;;;;;;;;;;:84;31035:3;;;;:::i;:::-;;;;31005:151;;;-1:-1:-1;31173:10:0;30764:427;-1:-1:-1;;;;;;30764:427:0:o;13248:238::-;13336:4;3518:10;13392:64;3518:10;13408:7;13445:10;13417:25;3518:10;13408:7;13417:9;:25::i;:::-;:38;;;;:::i;:::-;13392:8;:64::i;32951:142::-;33030:20;;-1:-1:-1;;;;;33030:20:0;33016:10;:34;33008:43;;;;;;33056:20;:32;;-1:-1:-1;;;;;;33056:32:0;-1:-1:-1;;;;;33056:32:0;;;;;;;;;;32951:142::o;25551:599::-;1812:1;2410:7;;:19;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;25645:13:::1;::::0;25598:20:::1;::::0;25621:37:::1;::::0;:21:::1;:37;:::i;:::-;25719:11;::::0;25598:60;;-1:-1:-1;25697:19:0::1;25598:60:::0;25712:4:::1;25697:19;:::i;:::-;:33;;;;:::i;:::-;25680:14;;:50;;;;:::i;:::-;25663:14;:67:::0;;;25821:10:::1;25739:16;25812:20:::0;;;:8:::1;:20;::::0;;;;:31:::1;::::0;::::1;::::0;25758:27;;25739:16;;25812:31;;25805:4:::1;::::0;25758:44:::1;::::0;::::1;:::i;:::-;:51;;;;:::i;:::-;:85;;;;:::i;:::-;25885:10;25852:21;25876:20:::0;;;:8:::1;:20;::::0;;;;;:27;;25912:31;;;-1:-1:-1;25948:31:0;;::::1;:35:::0;;;25992:38;;25739:104;;-1:-1:-1;25876:27:0;25992:38;::::1;;;::::0;25739:104;;25992:38;;25852:21;25992:38;25739:104;25885:10;25992:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;26051:21:0::1;26035:13;:37:::0;26081:32:::1;26087:10;26099:13:::0;26081:5:::1;:32::i;:::-;26132:13;26118:11;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;1768:1:0;2722:7;:22;-1:-1:-1;;;25551:599:0:o;26246:132::-;26332:7;;-1:-1:-1;;;;;26332:7:0;26318:10;:21;26310:30;;;;;;26351:19;26357:3;26362:7;26351:5;:19::i;:::-;26246:132;;:::o;25066:479::-;1812:1;2410:7;;:19;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;25157:13:::1;::::0;25110:20:::1;::::0;25133:37:::1;::::0;:21:::1;:37;:::i;:::-;25231:11;::::0;25110:60;;-1:-1:-1;25209:19:0::1;25110:60:::0;25224:4:::1;25209:19;:::i;:::-;:33;;;;:::i;:::-;25192:14;;:50;;;;:::i;:::-;25175:14;:67:::0;;;25329:10:::1;25247:16;25320:20:::0;;;:8:::1;:20;::::0;;;;:31:::1;::::0;::::1;::::0;25266:27;;25247:16;;25320:31;;25313:4:::1;::::0;25266:44:::1;::::0;::::1;:::i;:::-;:51;;;;:::i;:::-;:85;;;;:::i;:::-;25424:14;::::0;25403:10:::1;25394:20;::::0;;;:8:::1;:20;::::0;;;;:27;25247:104;;-1:-1:-1;25441:4:0::1;::::0;25394:44:::1;::::0;25424:14;25394:44:::1;:::i;:::-;:51;;;;:::i;:::-;25369:10;25360:20;::::0;;;:8:::1;:20;::::0;;;;;:31:::1;;:85:::0;;;;25460:38;;25369:10;;25460:38;::::1;;;::::0;25489:8;;25460:38;25360:20;25460:38;25489:8;25369:10;25460:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;25519:21:0::1;25503:13;:37:::0;-1:-1:-1;1768:1:0;2722:7;:22;25066:479::o;33102:189::-;33177:20;;-1:-1:-1;;;;;33177:20:0;33163:10;:34;33155:43;;;;;;33229:9;;33217;:21;33209:51;;;;-1:-1:-1;;;33209:51:0;;16044:2:1;33209:51:0;;;16026:21:1;16083:2;16063:18;;;16056:30;-1:-1:-1;;;16102:18:1;;;16095:47;16159:18;;33209:51:0;15842:341:1;33209:51:0;33265:9;:21;33102:189::o;32320:327::-;32429:6;32418:7;:17;;:40;;;;;32452:6;32439:9;:19;;32418:40;:62;;;;;32474:6;32462:8;:18;;32418:62;32410:85;;;;-1:-1:-1;;;32410:85:0;;16390:2:1;32410:85:0;;;16372:21:1;16429:2;16409:18;;;16402:30;-1:-1:-1;;;16448:18:1;;;16441:40;16498:18;;32410:85:0;16188:334:1;32410:85:0;32528:20;;-1:-1:-1;;;;;32528:20:0;32514:10;:34;32506:43;;;;;;32560:3;:13;;;;32584;:25;32620:7;:18;32320:327::o;26384:391::-;1812:1;2410:7;;:19;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;26504:8;26573:19:::1;26585:7:::0;26504:8;26573:19:::1;:::i;:::-;26563:7;::::0;26551:19:::1;::::0;:9;:19:::1;:::i;:::-;:41;;;;:::i;:::-;26538:9;:54;26530:84;;;::::0;-1:-1:-1;;;26530:84:0;;16729:2:1;26530:84:0::1;::::0;::::1;16711:21:1::0;16768:2;16748:18;;;16741:30;-1:-1:-1;;;16787:18:1;;;16780:47;16844:18;;26530:84:0::1;16527:341:1::0;26530:84:0::1;26627:6;26623:99;26641:9;26637:1;:13;26623:99;;;26680:8;;26689:1;26680:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26672:29:0::1;:38;26702:7;26672:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;26652:3:0;::::1;::::0;::::1;:::i;:::-;;;;26623:99;;;;26729:41;26735:10;26759;;26747:9;:22;;;;:::i;26729:41::-;-1:-1:-1::0;;1768:1:0;2722:7;:22;-1:-1:-1;;26384:391:0:o;31761:252::-;31826:10;31808:15;:28;31800:70;;;;-1:-1:-1;;;31800:70:0;;17075:2:1;31800:70:0;;;17057:21:1;17114:2;17094:18;;;17087:30;17153:31;17133:18;;;17126:59;17202:18;;31800:70:0;16873:353:1;31800:70:0;31884:1;31875:6;:10;;;31890:12;:16;;;31911:8;:12;;;31936:10;:14;;;31961:15;:19;;;31991:13;:17;31761:252::o;22537:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28877:243::-;28977:7;29004:108;29032:14;29075:5;;29081:7;29089:5;29058:37;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29048:48;;;;;;29106:4;29004:27;:108::i;:::-;28997:115;28877:243;-1:-1:-1;;;;;28877:243:0:o;32019:293::-;1812:1;2410:7;;:19;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;32103:20:::1;::::0;-1:-1:-1;;;;;32103:20:0::1;32089:10;:34;32081:58;;;;-1:-1:-1::0;;;32081:58:0::1;;;;;;;:::i;:::-;32144:21;32184:2;32168:13;:11;:13::i;:::-;:18;;;;:::i;:::-;32144:42;;32191:15;32225:13;;32209;:29;;;;:::i;:::-;32191:47;;32259:7;32243:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;32277:20:0::1;::::0;32271:36:::1;::::0;-1:-1:-1;;;;;32277:20:0::1;32299:7:::0;32271:5:::1;:36::i;:::-;-1:-1:-1::0;;1768:1:0;2722:7;:22;32019:293::o;32687:258::-;32763:20;;-1:-1:-1;;;;;32763:20:0;32749:10;:34;32741:43;;;;;;32805:6;;32797:4;:14;;32789:54;;;;-1:-1:-1;;;32789:54:0;;17773:2:1;32789:54:0;;;17755:21:1;17812:2;17792:18;;;17785:30;17851:29;17831:18;;;17824:57;17898:18;;32789:54:0;17571:351:1;32789:54:0;32848:10;:17;;;32901:3;32888:10;32861:4;32895:3;32888:10;:::i;:::-;:16;;;;:::i;:::-;32870:15;:34;32937:3;32925:9;:4;32932:2;32925:9;:::i;:::-;:15;;;;:::i;:::-;32909:13;:31;-1:-1:-1;32687:258:0:o;30422:175::-;30514:7;30568:5;;30574:7;30582:5;30551:37;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30541:48;;;;;;30534:55;;30422:175;;;;;;:::o;28322:418::-;28387:7;28396;28405;28419:20;28466:13;;28442:21;:37;;;;:::i;:::-;28419:60;;28484:27;28553:11;;28531:12;28546:4;28531:19;;;;:::i;:::-;:33;;;;:::i;:::-;28514:14;;:50;;;;:::i;:::-;-1:-1:-1;;;;;28646:15:0;;28573:16;28646:15;;;:8;:15;;;;;:26;;;;28592:22;;28484:80;;-1:-1:-1;28573:16:0;;28639:4;;28592:44;;28484:80;;28592:44;:::i;:::-;:51;;;;:::i;:::-;:80;;;;:::i;:::-;-1:-1:-1;;;;;28699:15:0;;;;;;;;:8;:15;;;;;:22;28723:11;;28573:99;;28699:22;;28723:11;-1:-1:-1;28322:418:0;-1:-1:-1;;;;;28322:418:0:o;29713:154::-;29776:12;29854:4;29808:51;;;;;;813:25:1;;801:2;786:18;;667:177;29808:51:0;;;;-1:-1:-1;;29808:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;29808:51:0;-1:-1:-1;;;29808:51:0;;;;29713:154;-1:-1:-1;;29713:154:0:o;30005:188::-;30119:66;;-1:-1:-1;;;;;15173:32:1;;30119:66:0;;;15155:51:1;15222:18;;;15215:34;;;30087:12:0;;15128:18:1;;30119:66:0;14981:274:1;9631:104:0;9687:13;9720:7;9713:14;;;;;:::i;29128:169::-;29197:7;29224:65;29252:14;29268:5;29283:4;29224:27;:65::i;13989:436::-;14082:4;3518:10;14082:4;14165:25;3518:10;14182:7;14165:9;:25::i;:::-;14138:52;;14229:15;14209:16;:35;;14201:85;;;;-1:-1:-1;;;14201:85:0;;18129:2:1;14201:85:0;;;18111:21:1;18168:2;18148:18;;;18141:30;18207:34;18187:18;;;18180:62;-1:-1:-1;;;18258:18:1;;;18251:35;18303:19;;14201:85:0;17927:401:1;14201:85:0;14322:60;14331:5;14338:7;14366:15;14347:16;:34;14322:8;:60::i;24268:793::-;1812:1;2410:7;;:19;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;24374:13:::1;::::0;24327:20:::1;::::0;24350:37:::1;::::0;:21:::1;:37;:::i;:::-;24448:11;::::0;24327:60;;-1:-1:-1;24426:19:0::1;24327:60:::0;24441:4:::1;24426:19;:::i;:::-;:33;;;;:::i;:::-;24409:14;;:50;;;;:::i;:::-;24392:14;:67:::0;24468:26:::1;24474:10;24486:7:::0;24468:5:::1;:26::i;:::-;24513:7;24499:11;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24541:10:0::1;24532:20;::::0;;;:8:::1;:20;::::0;;;;:27;:32;;24529:486:::1;;24603:10;24594:20;::::0;;;:8:::1;:20;::::0;;;;:37;;;24710:14:::1;::::0;24727:4:::1;::::0;24680:44:::1;::::0;24624:7;24680:44:::1;:::i;:::-;:51;;;;:::i;:::-;24655:10;24646:20;::::0;;;:8:::1;:20;::::0;;;;:31:::1;;:85:::0;24529:486:::1;;;24832:10;24750:16;24823:20:::0;;;:8:::1;:20;::::0;;;;:31:::1;::::0;::::1;::::0;24799:14:::1;::::0;24769:27;;24823:31;;24816:4:::1;::::0;24769:44:::1;::::0;24799:14;24769:44:::1;:::i;:::-;:51;;;;:::i;:::-;:85;;;;:::i;:::-;24869:10;24860:20;::::0;;;:8:::1;:20;::::0;;;;:37;;24750:104;;-1:-1:-1;24890:7:0;;24860:20;;;:37:::1;::::0;24890:7;;24860:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;24976:14:0::1;::::0;24955:10:::1;24946:20;::::0;;;:8:::1;:20;::::0;;;;:27;25000:8;;24993:4:::1;::::0;24946:44:::1;::::0;24976:14;24946:44:::1;:::i;:::-;:51;;;;:::i;:::-;:62;;;;:::i;:::-;24921:10;24912:20;::::0;;;:8:::1;:20;::::0;;;;:31:::1;;:96:::0;-1:-1:-1;24529:486:0::1;-1:-1:-1::0;;25035:21:0::1;25019:13;:37:::0;1768:1;2722:7;:22;24268:793::o;27597:664::-;27788:13;;27741:10;;27721:17;;27788:25;;27741:10;;27788:25;:::i;:::-;27769:44;;27845:8;27832:9;:21;27824:55;;;;-1:-1:-1;;;27824:55:0;;;;;;;:::i;:::-;27896:9;27892:109;27909:21;;;27892:109;;;27967:10;;27978:1;27967:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27952:31:0;;27984:4;27952:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27932:3;;;;;:::i;:::-;;;;27892:109;;;-1:-1:-1;;;;;;28024:23:0;;28037:10;28024:23;28021:233;;28064:46;28070:10;28094:15;;28082:9;:27;;;;:::i;28064:46::-;28125:43;28131:9;28154:13;;28142:9;:25;;;;:::i;28125:43::-;28021:233;;;28201:41;28207:10;28231;;28219:9;:22;;;;:::i;11036:193::-;11115:4;3518:10;11171:28;3518:10;11188:2;11192:6;11171:9;:28::i;29519:186::-;29639:30;;-1:-1:-1;;;29639:30:0;;-1:-1:-1;;;;;8187:32:1;;;29639:30:0;;;8169:51:1;29586:7:0;;;;29644:3;29639:19;;;;8142:18:1;;29639:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29606:63:0;;29519:186;-1:-1:-1;;;;;;;29519:186:0:o;33298:260::-;33366:18;;;;33358:40;;;;-1:-1:-1;;;33358:40:0;;19099:2:1;33358:40:0;;;19081:21:1;19138:1;19118:18;;;19111:29;-1:-1:-1;;;19156:18:1;;;19149:39;19205:18;;33358:40:0;18897:332:1;33358:40:0;33431:20;;-1:-1:-1;;;;;33431:20:0;33417:10;:34;33409:43;;;;;;33463:14;:21;;-1:-1:-1;;;;;;33463:21:0;-1:-1:-1;;;;;33463:21:0;;;;;33529:9;;:14;;33541:2;33529:14;:::i;:::-;:21;;33546:4;33529:21;:::i;:::-;33511:39;;:15;:39;:::i;:::-;33495:13;:55;-1:-1:-1;33298:260:0:o;33800:154::-;33873:20;;-1:-1:-1;;;;;33873:20:0;33859:10;:34;33851:58;;;;-1:-1:-1;;;33851:58:0;;;;;;;:::i;:::-;33920:18;:26;;-1:-1:-1;;33920:26:0;;;33800:154::o;29306:205::-;-1:-1:-1;;;;;29439:21:0;;29402:7;29439:21;;;:14;:21;;;;;:26;;29402:7;;29439:21;29461:3;;29439:26;;;;;;:::i;:::-;;;;;;;;;29467:35;29485:16;29467:17;:35::i;:::-;29431:72;;;;29306:205;;;;;;:::o;23627:635::-;23785:8;23781:3;;:12;;;;:::i;:::-;23768:9;:25;23760:59;;;;-1:-1:-1;;;23760:59:0;;;;;;;:::i;:::-;23824:14;23849:12;23876:6;23872:212;23888:8;23886:1;:10;23872:212;;;23952:5;;23958:1;23960:10;23935:36;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23925:47;;;;;;23918:54;;23996:40;24015:14;24031:4;23996:18;:40::i;:::-;24042:30;;-1:-1:-1;;;24042:30:0;;23987:49;;-1:-1:-1;;;;;;24042:24:0;;;;;:30;;24067:4;;24042:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23898:3;;;;;:::i;:::-;;;;23872:212;;;-1:-1:-1;24109:10:0;24094:26;;;;:14;:26;;;;;;;:41;;;;;;;;;;;;;;;;24169:12;;24140:42;;24109:10;24158:23;;24126:8;24158:23;:::i;24140:42::-;-1:-1:-1;;;;;24190:22:0;;24202:10;24190:22;24187:68;;24216:36;24222:8;24243;;24232;:19;;;;:::i;24216:36::-;23749:513;;23627:635;;;;;:::o;31245:510::-;31331:5;31312:16;;31294:15;:34;;;;:::i;:::-;:42;31286:111;;;;-1:-1:-1;;;31286:111:0;;19436:2:1;31286:111:0;;;19418:21:1;19475:2;19455:18;;;19448:30;19514:34;19494:18;;;19487:62;19585:26;19565:18;;;19558:54;19629:19;;31286:111:0;19234:420:1;31286:111:0;31439:3;31427:8;;31421:3;:14;;;;:::i;:::-;31411:6;;:25;;;;:::i;:::-;:31;;;;:::i;:::-;31402:6;:40;31484:8;;31496:3;;31478:14;;31496:3;31478:14;:::i;:::-;31462:12;;:31;;;;:::i;:::-;:37;;;;:::i;:::-;31447:12;:52;31533:8;;31545:3;;31527:14;;31545:3;31527:14;:::i;:::-;31515:8;;:27;;;;:::i;:::-;:33;;;;:::i;:::-;31504:8;:44;31594:8;;31606:3;;31588:14;;31606:3;31588:14;:::i;:::-;31574:10;;:29;;;;:::i;:::-;:35;;;;:::i;:::-;31561:10;:48;31657:8;;31669:3;;31651:14;;31669:3;31651:14;:::i;:::-;31632:15;;:34;;;;:::i;:::-;:40;;;;:::i;:::-;31614:15;:58;31716:8;;31728:3;;31710:14;;31728:3;31710:14;:::i;:::-;31693:13;;:32;;;;:::i;:::-;:38;;;;:::i;:::-;31677:13;:54;31740:8;:10;;;:8;:10;;;:::i;:::-;;;;;;31245:510::o;11292:151::-;-1:-1:-1;;;;;11408:18:0;;;11381:7;11408:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11292:151::o;26783:550::-;1812:1;2410:7;;:19;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;26925:8;26994:19:::1;27006:7:::0;26925:8;26994:19:::1;:::i;:::-;26984:7;::::0;26972:19:::1;::::0;:9;:19:::1;:::i;:::-;:41;;;;:::i;:::-;26959:9;:54;26951:97;;;::::0;-1:-1:-1;;;26951:97:0;;19861:2:1;26951:97:0::1;::::0;::::1;19843:21:1::0;19900:2;19880:18;;;19873:30;19939:32;19919:18;;;19912:60;19989:18;;26951:97:0::1;19659:354:1::0;26951:97:0::1;-1:-1:-1::0;;;;;27067:23:0;::::1;:10;:23:::0;27059:47:::1;;;;-1:-1:-1::0;;;27059:47:0::1;;;;;;;:::i;:::-;27119:6;27115:99;27133:9;27129:1;:13;27115:99;;;27172:8;;27181:1;27172:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27164:29:0::1;:38;27194:7;27164:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27144:3:0;::::1;::::0;::::1;:::i;:::-;;;;27115:99;;;;27228:46;27234:10;27258:15;;27246:9;:27;;;;:::i;27228:46::-;27285:43;27291:9;27314:13;;27302:9;:25;;;;:::i;27285:43::-;-1:-1:-1::0;;1768:1:0;2722:7;:22;-1:-1:-1;;;26783:550:0:o;17623:380::-;-1:-1:-1;;;;;17759:19:0;;17751:68;;;;-1:-1:-1;;;17751:68:0;;20220:2:1;17751:68:0;;;20202:21:1;20259:2;20239:18;;;20232:30;20298:34;20278:18;;;20271:62;-1:-1:-1;;;20349:18:1;;;20342:34;20393:19;;17751:68:0;20018:400:1;17751:68:0;-1:-1:-1;;;;;17838:21:0;;17830:68;;;;-1:-1:-1;;;17830:68:0;;20625:2:1;17830:68:0;;;20607:21:1;20664:2;20644:18;;;20637:30;20703:34;20683:18;;;20676:62;-1:-1:-1;;;20754:18:1;;;20747:32;20796:19;;17830:68:0;20423:398:1;17830:68:0;-1:-1:-1;;;;;17911:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17963:32;;813:25:1;;;17963:32:0;;786:18:1;17963:32:0;;;;;;;;17623:380;;;:::o;34181:808::-;34266:16;34604:48;34585:15;34579:4;34575:26;34569:4;34565:37;34562:91;34556:4;34549:105;34814:32;34796:15;34790:4;34786:26;34783:64;34777:4;34770:78;34897:4;34891;34885;34882:1;34874:28;34862:40;-1:-1:-1;;;;;;34931:22:0;;34923:58;;;;-1:-1:-1;;;34923:58:0;;21028:2:1;34923:58:0;;;21010:21:1;21067:2;21047:18;;;21040:30;21106:25;21086:18;;;21079:53;21149:18;;34923:58:0;20826:347:1;15862:399:0;-1:-1:-1;;;;;15946:21:0;;15938:65;;;;-1:-1:-1;;;15938:65:0;;21380:2:1;15938:65:0;;;21362:21:1;21419:2;21399:18;;;21392:30;21458:33;21438:18;;;21431:61;21509:18;;15938:65:0;21178:355:1;15938:65:0;16094:6;16078:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;16111:18:0;;:9;:18;;;;;;;;;;:28;;16133:6;;16111:9;:28;;16133:6;;16111:28;:::i;:::-;;;;-1:-1:-1;;16155:37:0;;813:25:1;;;-1:-1:-1;;;;;16155:37:0;;;16172:1;;16155:37;;801:2:1;786:18;16155:37:0;;;;;;;26246:132;;:::o;18294:453::-;18429:24;18456:25;18466:5;18473:7;18456:9;:25::i;:::-;18429:52;;-1:-1:-1;;18496:16:0;:37;18492:248;;18578:6;18558:16;:26;;18550:68;;;;-1:-1:-1;;;18550:68:0;;21740:2:1;18550:68:0;;;21722:21:1;21779:2;21759:18;;;21752:30;21818:31;21798:18;;;21791:59;21867:18;;18550:68:0;21538:353:1;18550:68:0;18662:51;18671:5;18678:7;18706:6;18687:16;:25;18662:8;:51::i;14904:671::-;-1:-1:-1;;;;;15035:18:0;;15027:68;;;;-1:-1:-1;;;15027:68:0;;22098:2:1;15027:68:0;;;22080:21:1;22137:2;22117:18;;;22110:30;22176:34;22156:18;;;22149:62;-1:-1:-1;;;22227:18:1;;;22220:35;22272:19;;15027:68:0;21896:401:1;15027:68:0;-1:-1:-1;;;;;15114:16:0;;15106:64;;;;-1:-1:-1;;;15106:64:0;;22504:2:1;15106:64:0;;;22486:21:1;22543:2;22523:18;;;22516:30;22582:34;22562:18;;;22555:62;-1:-1:-1;;;22633:18:1;;;22626:33;22676:19;;15106:64:0;22302:399:1;15106:64:0;-1:-1:-1;;;;;15256:15:0;;15234:19;15256:15;;;;;;;;;;;15290:21;;;;15282:72;;;;-1:-1:-1;;;15282:72:0;;22908:2:1;15282:72:0;;;22890:21:1;22947:2;22927:18;;;22920:30;22986:34;22966:18;;;22959:62;-1:-1:-1;;;23037:18:1;;;23030:36;23083:19;;15282:72:0;22706:402:1;15282:72:0;-1:-1:-1;;;;;15390:15:0;;;:9;:15;;;;;;;;;;;15408:20;;;15390:38;;15450:13;;;;;;;;:23;;15422:6;;15390:9;15450:23;;15422:6;;15450:23;:::i;:::-;;;;;;;;15506:2;-1:-1:-1;;;;;15491:26:0;15500:4;-1:-1:-1;;;;;15491:26:0;;15510:6;15491:26;;;;813:25:1;;801:2;786:18;;667:177;15491:26:0;;;;;;;;15530:37;16594:591;34997:698;35263:4;35257:11;35298:4;35289:14;;35282:32;;;;35351:34;35344:4;35335:14;;35328:58;-1:-1:-1;35407:14:0;;35400:39;;;;35465:42;35453:55;;35538:4;35529:14;;35522:28;35613:4;35606;35597:14;;35587:31;35580:4;35571:14;;35564:55;35672:4;35665;35656:14;;;35646:31;;34997:698::o;16594:591::-;-1:-1:-1;;;;;16678:21:0;;16670:67;;;;-1:-1:-1;;;16670:67:0;;23315:2:1;16670:67:0;;;23297:21:1;23354:2;23334:18;;;23327:30;23393:34;23373:18;;;23366:62;-1:-1:-1;;;23444:18:1;;;23437:31;23485:19;;16670:67:0;23113:397:1;16670:67:0;-1:-1:-1;;;;;16837:18:0;;16812:22;16837:18;;;;;;;;;;;16874:24;;;;16866:71;;;;-1:-1:-1;;;16866:71:0;;23717:2:1;16866:71:0;;;23699:21:1;23756:2;23736:18;;;23729:30;23795:34;23775:18;;;23768:62;-1:-1:-1;;;23846:18:1;;;23839:32;23888:19;;16866:71:0;23515:398:1;16866:71:0;-1:-1:-1;;;;;16973:18:0;;:9;:18;;;;;;;;;;16994:23;;;16973:44;;17039:12;:22;;17011:6;;16973:9;17039:22;;17011:6;;17039:22;:::i;:::-;;;;-1:-1:-1;;17079:37:0;;813:25:1;;;17105:1:0;;-1:-1:-1;;;;;17079:37:0;;;;;801:2:1;786:18;17079:37:0;667:177:1;14:423;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;160:3;363:1;356:4;347:6;342:3;338:16;334:27;327:38;426:4;419:2;415:7;410:2;402:6;398:15;394:29;389:3;385:39;381:50;374:57;;;14:423;;;;:::o;442:220::-;591:2;580:9;573:21;554:4;611:45;652:2;641:9;637:18;629:6;611:45;:::i;:::-;603:53;442:220;-1:-1:-1;;;442:220:1:o;849:131::-;-1:-1:-1;;;;;924:31:1;;914:42;;904:70;;970:1;967;960:12;904:70;849:131;:::o;985:315::-;1053:6;1061;1114:2;1102:9;1093:7;1089:23;1085:32;1082:52;;;1130:1;1127;1120:12;1082:52;1169:9;1156:23;1188:31;1213:5;1188:31;:::i;:::-;1238:5;1290:2;1275:18;;;;1262:32;;-1:-1:-1;;;985:315:1:o;1497:367::-;1560:8;1570:6;1624:3;1617:4;1609:6;1605:17;1601:27;1591:55;;1642:1;1639;1632:12;1591:55;-1:-1:-1;1665:20:1;;1708:18;1697:30;;1694:50;;;1740:1;1737;1730:12;1694:50;1777:4;1769:6;1765:17;1753:29;;1837:3;1830:4;1820:6;1817:1;1813:14;1805:6;1801:27;1797:38;1794:47;1791:67;;;1854:1;1851;1844:12;1791:67;1497:367;;;;;:::o;1869:127::-;1930:10;1925:3;1921:20;1918:1;1911:31;1961:4;1958:1;1951:15;1985:4;1982:1;1975:15;2001:718;2043:5;2096:3;2089:4;2081:6;2077:17;2073:27;2063:55;;2114:1;2111;2104:12;2063:55;2150:6;2137:20;2176:18;2213:2;2209;2206:10;2203:36;;;2219:18;;:::i;:::-;2294:2;2288:9;2262:2;2348:13;;-1:-1:-1;;2344:22:1;;;2368:2;2340:31;2336:40;2324:53;;;2392:18;;;2412:22;;;2389:46;2386:72;;;2438:18;;:::i;:::-;2478:10;2474:2;2467:22;2513:2;2505:6;2498:18;2559:3;2552:4;2547:2;2539:6;2535:15;2531:26;2528:35;2525:55;;;2576:1;2573;2566:12;2525:55;2640:2;2633:4;2625:6;2621:17;2614:4;2606:6;2602:17;2589:54;2687:1;2680:4;2675:2;2667:6;2663:15;2659:26;2652:37;2707:6;2698:15;;;;;;2001:718;;;;:::o;2724:656::-;2828:6;2836;2844;2897:2;2885:9;2876:7;2872:23;2868:32;2865:52;;;2913:1;2910;2903:12;2865:52;2953:9;2940:23;2982:18;3023:2;3015:6;3012:14;3009:34;;;3039:1;3036;3029:12;3009:34;3078:70;3140:7;3131:6;3120:9;3116:22;3078:70;:::i;:::-;3167:8;;-1:-1:-1;3052:96:1;-1:-1:-1;3255:2:1;3240:18;;3227:32;;-1:-1:-1;3271:16:1;;;3268:36;;;3300:1;3297;3290:12;3268:36;;3323:51;3366:7;3355:8;3344:9;3340:24;3323:51;:::i;:::-;3313:61;;;2724:656;;;;;:::o;3608:247::-;3667:6;3720:2;3708:9;3699:7;3695:23;3691:32;3688:52;;;3736:1;3733;3726:12;3688:52;3775:9;3762:23;3794:31;3819:5;3794:31;:::i;4113:347::-;4164:8;4174:6;4228:3;4221:4;4213:6;4209:17;4205:27;4195:55;;4246:1;4243;4236:12;4195:55;-1:-1:-1;4269:20:1;;4312:18;4301:30;;4298:50;;;4344:1;4341;4334:12;4298:50;4381:4;4373:6;4369:17;4357:29;;4433:3;4426:4;4417:6;4409;4405:19;4401:30;4398:39;4395:59;;;4450:1;4447;4440:12;4465:696;4562:6;4570;4578;4586;4639:2;4627:9;4618:7;4614:23;4610:32;4607:52;;;4655:1;4652;4645:12;4607:52;4695:9;4682:23;4724:18;4765:2;4757:6;4754:14;4751:34;;;4781:1;4778;4771:12;4751:34;4804:49;4845:7;4836:6;4825:9;4821:22;4804:49;:::i;:::-;4794:59;;4900:2;4889:9;4885:18;4872:32;4862:42;;4957:2;4946:9;4942:18;4929:32;4913:48;;4986:2;4976:8;4973:16;4970:36;;;5002:1;4999;4992:12;4970:36;;5041:60;5093:7;5082:8;5071:9;5067:24;5041:60;:::i;:::-;4465:696;;;;-1:-1:-1;5120:8:1;-1:-1:-1;;;;4465:696:1:o;5166:456::-;5243:6;5251;5259;5312:2;5300:9;5291:7;5287:23;5283:32;5280:52;;;5328:1;5325;5318:12;5280:52;5367:9;5354:23;5386:31;5411:5;5386:31;:::i;:::-;5436:5;-1:-1:-1;5493:2:1;5478:18;;5465:32;5506:33;5465:32;5506:33;:::i;:::-;5166:456;;5558:7;;-1:-1:-1;;;5612:2:1;5597:18;;;;5584:32;;5166:456::o;5627:388::-;5695:6;5703;5756:2;5744:9;5735:7;5731:23;5727:32;5724:52;;;5772:1;5769;5762:12;5724:52;5811:9;5798:23;5830:31;5855:5;5830:31;:::i;:::-;5880:5;-1:-1:-1;5937:2:1;5922:18;;5909:32;5950:33;5909:32;5950:33;:::i;:::-;6002:7;5992:17;;;5627:388;;;;;:::o;6209:640::-;6313:6;6321;6329;6337;6390:2;6378:9;6369:7;6365:23;6361:32;6358:52;;;6406:1;6403;6396:12;6358:52;6446:9;6433:23;6479:18;6471:6;6468:30;6465:50;;;6511:1;6508;6501:12;6465:50;6550:70;6612:7;6603:6;6592:9;6588:22;6550:70;:::i;:::-;6639:8;;-1:-1:-1;6524:96:1;-1:-1:-1;;6721:2:1;6706:18;;6693:32;;-1:-1:-1;6775:2:1;6760:18;;6747:32;6788:31;6747:32;6788:31;:::i;:::-;6209:640;;;;-1:-1:-1;6209:640:1;;-1:-1:-1;;6209:640:1:o;6854:658::-;7025:2;7077:21;;;7147:13;;7050:18;;;7169:22;;;6996:4;;7025:2;7248:15;;;;7222:2;7207:18;;;6996:4;7291:195;7305:6;7302:1;7299:13;7291:195;;;7370:13;;-1:-1:-1;;;;;7366:39:1;7354:52;;7461:15;;;;7426:12;;;;7402:1;7320:9;7291:195;;;-1:-1:-1;7503:3:1;;6854:658;-1:-1:-1;;;;;;6854:658:1:o;7517:180::-;7576:6;7629:2;7617:9;7608:7;7604:23;7600:32;7597:52;;;7645:1;7642;7635:12;7597:52;-1:-1:-1;7668:23:1;;7517:180;-1:-1:-1;7517:180:1:o;7702:316::-;7779:6;7787;7795;7848:2;7836:9;7827:7;7823:23;7819:32;7816:52;;;7864:1;7861;7854:12;7816:52;-1:-1:-1;;7887:23:1;;;7957:2;7942:18;;7929:32;;-1:-1:-1;8008:2:1;7993:18;;;7980:32;;7702:316;-1:-1:-1;7702:316:1:o;8231:505::-;8326:6;8334;8342;8395:2;8383:9;8374:7;8370:23;8366:32;8363:52;;;8411:1;8408;8401:12;8363:52;8451:9;8438:23;8484:18;8476:6;8473:30;8470:50;;;8516:1;8513;8506:12;8470:50;8555:70;8617:7;8608:6;8597:9;8593:22;8555:70;:::i;:::-;8644:8;;8529:96;;-1:-1:-1;8726:2:1;8711:18;;;;8698:32;;8231:505;-1:-1:-1;;;;8231:505:1:o;8741:612::-;8829:6;8837;8845;8853;8906:2;8894:9;8885:7;8881:23;8877:32;8874:52;;;8922:1;8919;8912:12;8874:52;8962:9;8949:23;8995:18;8987:6;8984:30;8981:50;;;9027:1;9024;9017:12;8981:50;9066:58;9116:7;9107:6;9096:9;9092:22;9066:58;:::i;10049:791::-;10162:6;10170;10178;10186;10239:2;10227:9;10218:7;10214:23;10210:32;10207:52;;;10255:1;10252;10245:12;10207:52;10295:9;10282:23;10324:18;10365:2;10357:6;10354:14;10351:34;;;10381:1;10378;10371:12;10351:34;10420:70;10482:7;10473:6;10462:9;10458:22;10420:70;:::i;:::-;10509:8;;-1:-1:-1;10394:96:1;-1:-1:-1;10594:2:1;10579:18;;10566:32;;-1:-1:-1;10607:31:1;10566:32;10607:31;:::i;:::-;10657:5;;-1:-1:-1;10715:2:1;10700:18;;10687:32;;10731:16;;;10728:36;;;10760:1;10757;10750:12;10728:36;;10783:51;10826:7;10815:8;10804:9;10800:24;10783:51;:::i;:::-;10773:61;;;10049:791;;;;;;;:::o;10845:456::-;10922:6;10930;10938;10991:2;10979:9;10970:7;10966:23;10962:32;10959:52;;;11007:1;11004;10997:12;10959:52;11046:9;11033:23;11065:31;11090:5;11065:31;:::i;:::-;11115:5;-1:-1:-1;11167:2:1;11152:18;;11139:32;;-1:-1:-1;11223:2:1;11208:18;;11195:32;11236:33;11195:32;11236:33;:::i;:::-;11288:7;11278:17;;;10845:456;;;;;:::o;11306:832::-;11412:6;11420;11428;11436;11444;11497:3;11485:9;11476:7;11472:23;11468:33;11465:53;;;11514:1;11511;11504:12;11465:53;11554:9;11541:23;11583:18;11624:2;11616:6;11613:14;11610:34;;;11640:1;11637;11630:12;11610:34;11663:49;11704:7;11695:6;11684:9;11680:22;11663:49;:::i;:::-;11653:59;;11759:2;11748:9;11744:18;11731:32;11721:42;;11816:2;11805:9;11801:18;11788:32;11772:48;;11845:2;11835:8;11832:16;11829:36;;;11861:1;11858;11851:12;11829:36;;11900:60;11952:7;11941:8;11930:9;11926:24;11900:60;:::i;:::-;11979:8;;-1:-1:-1;11874:86:1;-1:-1:-1;;12064:2:1;12049:18;;12036:32;12077:31;12036:32;12077:31;:::i;:::-;12127:5;12117:15;;;11306:832;;;;;;;;:::o;12788:380::-;12867:1;12863:12;;;;12910;;;12931:61;;12985:4;12977:6;12973:17;12963:27;;12931:61;13038:2;13030:6;13027:14;13007:18;13004:38;13001:161;;13084:10;13079:3;13075:20;13072:1;13065:31;13119:4;13116:1;13109:15;13147:4;13144:1;13137:15;13001:161;;12788:380;;;:::o;13173:127::-;13234:10;13229:3;13225:20;13222:1;13215:31;13265:4;13262:1;13255:15;13289:4;13286:1;13279:15;13305:127;13366:10;13361:3;13357:20;13354:1;13347:31;13397:4;13394:1;13387:15;13421:4;13418:1;13411:15;13437:135;13476:3;13497:17;;;13494:43;;13517:18;;:::i;:::-;-1:-1:-1;13564:1:1;13553:13;;13437:135::o;13577:125::-;13642:9;;;13663:10;;;13660:36;;;13676:18;;:::i;13707:128::-;13774:9;;;13795:11;;;13792:37;;;13809:18;;:::i;13840:168::-;13913:9;;;13944;;13961:15;;;13955:22;;13941:37;13931:71;;13982:18;;:::i;14013:345::-;14215:2;14197:21;;;14254:2;14234:18;;;14227:30;-1:-1:-1;;;14288:2:1;14273:18;;14266:51;14349:2;14334:18;;14013:345::o;14363:424::-;14602:6;14594;14589:3;14576:33;14628:16;;;14653:18;;;14708:2;14704:15;;;;-1:-1:-1;;14700:53:1;14695:2;14687:11;;14680:74;14778:2;14770:11;;14363:424;-1:-1:-1;14363:424:1:o;14792:184::-;14862:6;14915:2;14903:9;14894:7;14890:23;14886:32;14883:52;;;14931:1;14928;14921:12;14883:52;-1:-1:-1;14954:16:1;;14792:184;-1:-1:-1;14792:184:1:o;15260:355::-;15462:2;15444:21;;;15501:2;15481:18;;;15474:30;15540:33;15535:2;15520:18;;15513:61;15606:2;15591:18;;15260:355::o;15620:217::-;15660:1;15686;15676:132;;15730:10;15725:3;15721:20;15718:1;15711:31;15765:4;15762:1;15755:15;15793:4;15790:1;15783:15;15676:132;-1:-1:-1;15822:9:1;;15620:217::o;17231:335::-;17433:2;17415:21;;;17472:2;17452:18;;;17445:30;-1:-1:-1;;;17506:2:1;17491:18;;17484:41;17557:2;17542:18;;17231:335::o;18333:559::-;18448:6;18456;18464;18472;18480;18488;18541:3;18529:9;18520:7;18516:23;18512:33;18509:53;;;18558:1;18555;18548:12;18509:53;18590:9;18584:16;18609:31;18634:5;18609:31;:::i;:::-;18704:2;18689:18;;18683:25;18748:2;18733:18;;18727:25;18792:2;18777:18;;18771:25;18836:3;18821:19;;18815:26;18881:3;18866:19;;;18860:26;18659:5;;18683:25;;-1:-1:-1;18727:25:1;;18771;;-1:-1:-1;18815:26:1;-1:-1:-1;18860:26:1;;-1:-1:-1;18333:559:1;-1:-1:-1;;;18333:559:1:o

Swarm Source

ipfs://b4c9699c056e45ef07171c46c59e3b0ffcbb16f353554047ab3a62d76575f663
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.