Contract 0xdf47e7a036A6a85F92898176b5A8B4B4b9fBF25A

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8e1a009e7d05c15541e5ee92ec285b5133ca720e28a5e21c289cfecd8278e2f6Vote Rewards Red...300587262022-06-27 12:14:305 days 10 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.005398037031 63.443620787
0xf7c189d72ffb954bec4cb159e121700adc9c853baffdacc8e263c9ae60da1fe7Vote Rewards Red...300585512022-06-27 12:08:285 days 11 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.006932190926 81.486163791
0xb5b4cccf3dab92b84825be8948d722b304399c7b961fa97228514eca2cd0447bInitiate Rewards...300583692022-06-27 12:02:165 days 11 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.01867003555 104.015396424
0xa768952b6a009f35c8b0735ca2fe5b6fb26424fa8d0515f5b9dc384e91a4666aVote Governor Tr...300582152022-06-27 11:56:085 days 11 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.004974787066 58.484247572
0x325cb0e8627f140b36081f7039c612c728cd1e5a24d353edcece93bf66a1b398Vote Governor Tr...300582052022-06-27 11:55:285 days 11 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.004285729827 50.390709313
0x4876fa1dfd865403b20ad3643b550ae862153f1c50a717274bfd9b913c2aa632Propose Governor...300581662022-06-27 11:53:065 days 11 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.005975440845 32.51392062
0xd983c50495916327d86e9a7a7c7dd5b74098527b8e3c886e7915440d4b3497aaPropose Governor...300581092022-06-27 11:51:085 days 11 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.006432083191 32.02128348
0xce0f431b6fa92757562028461154c5e7658745e58c2cfcf5c6b8146f4dae49bcInitiate Rewards...300580522022-06-27 11:49:145 days 11 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.006317245431 32.133623431
0x52efcd323de5af48aff7aec939632717f896c0ca114919c514a06799fde55d87Execute Burn300551092022-06-27 10:01:165 days 13 hrs ago0x3016cbb6cbf8b87ae56cfe943aa445058bdbab3b IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.007162470335 38.45291323
0xc27a5d2c36bba52c7fbb2b407b0d4bfa7a0f07ae5c2415e98a31be8887a6f49aVote Burn N299436192022-06-24 11:54:318 days 11 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.002303160085 30.00000112
0x05f9a8252417eaef90c65a733bd7971af692cf32d04f9e931363c145350acd88Initiate Farm Pr...299225912022-06-23 22:43:059 days 29 mins ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.006157210207 32.039100249
0x32c030bb0c1376c61c0b041765b29a4665e10023e7a4f40856b403a90e5a1522Update Farm297133062022-06-18 11:45:5514 days 11 hrs ago0xe8acfcf8bf5bed4579b44a5b8a67d455272271e2 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.01220340504 32.107802231
0xf8c72179307f13fcf2bdcc8fc8ec7119b82433a01d3d24e38508981d4a7c7907Update Farm297132812022-06-18 11:45:0514 days 11 hrs ago0xe8acfcf8bf5bed4579b44a5b8a67d455272271e2 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.011441282916 30.102618731
0x308c135caf6043c0a4f433e7d6d9d42733707195ed3c5d88f83943dd62813222Propose Burn297072132022-06-18 8:03:3714 days 15 hrs ago0x3016cbb6cbf8b87ae56cfe943aa445058bdbab3b IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.011044136194 58.869720605
0xb0095c71423e04f02186ed3744fb1e7198f2d60cf43f41a240b2cc4449686fecVote Farm Propos...296398112022-06-16 14:17:0716 days 8 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.017065806 222
0x9a62d9cfc55252f08827e50ea8663e22277ca7ab4ab393e83bb8344bb9fff7ceVote Farm Propos...295546832022-06-14 11:05:3018 days 12 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.004587145681 77.05473924
0xcf4b13daf867db1541e3bc34dfdb45a5ec6ca134e3dd86a69fe54902d7a307c5Vote Farm Propos...295545782022-06-14 10:59:5618 days 12 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.003371224107 39.632551639
0x5fe816d08d34238f1bb6a4f21f3025c5dffb6e4ba5c7561ae5e8e70359848e70Vote Farm Propos...295509652022-06-14 8:45:0218 days 14 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.002905617314 34.153999039
0x30723f849b8f3f6d52ecc0421b60ec2ba4d0d45ac6ee394aed7710d1edaa3f99Initiate Farm Pr...294911502022-06-12 20:59:5720 days 2 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.00534608128 31.04
0xac318fdbc6abad37190a24f2124c6b7defaca51de03481779ce50a07e236980dInitiate Farm Pr...294911212022-06-12 20:58:5520 days 2 hrs ago0x50adcc4b9e741d549803d2ddaa4288f8c150acf9 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.005764980002 30.000000012
0x858b8491b8ef1063b9cfff0dffb9f7466632ebdcb3931fb20a0543a1cd74b0fdVote Farm Propos...294779512022-06-12 13:08:2520 days 10 hrs ago0x468bc13ced12f10cbfc068194887ab430699f919 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.002136567589 35.889999994
0x6050bea711ba7bc282ee201a040b0a46307b7ae0f25b391948dc2c3f95104c27Initiate Farm Pr...294779012022-06-12 13:06:4520 days 10 hrs ago0x468bc13ced12f10cbfc068194887ab430699f919 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.006870741597 35.7542
0xe1856a15c74365b8baad6e599007d549ee47e0d0d20d3b809edb8c893fc2f5d8Vote Farm Propos...294776932022-06-12 12:59:3320 days 10 hrs ago0x468bc13ced12f10cbfc068194887ab430699f919 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.002084203244 35.010385246
0x9c82f00c7b36b5c2de648525554b7cf38e1c27bfae72495d8102d137e4d44180Initiate Farm Pr...294776572022-06-12 12:58:2120 days 10 hrs ago0x468bc13ced12f10cbfc068194887ab430699f919 IN  0xdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a0 MATIC0.006769843244 35.754199998
0x246474b50196fcab67c9ad35cf2b8ff415a8effb4bc5febe1672c2f9691b756c0x60a06040292122752022-06-05 22:18:4027 days 53 mins ago0x77447f2ca205d6405206d1af316f1f5954bc2bb5 IN  Create: XVMCfarms0 MATIC0.230994192 44
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
XVMCfarms

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-06-05
*/

// File: xvmc-contracts/libs/standard/Address.sol


pragma solidity >=0.6.12 <=0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: xvmc-contracts/libs/custom/IERC20.sol


pragma solidity >=0.6.12 <=0.8.0;
//original: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol

//added functions for mint, burn, burnXVMC, transferXVMC and transferOwnership
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
	
	function mint(address to, uint256 amount) external;
	function burn(uint256 amount) external;
    function burnXVMC(address account, uint256 amount) external returns (bool);
	function transferXVMC(address _sender, address _recipient, uint256 _amount) external returns (bool);
	function transferOwnership(address newOwner) external;

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

// File: xvmc-contracts/libs/custom/SafeERC20.sol


pragma solidity >=0.6.12 <=0.8.0;
//original: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol
//using transferXVMC instead of transferFrom for safeTransferFrom



/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

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

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

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

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

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

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

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

// 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/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: xvmc-contracts/farms.sol



pragma solidity 0.8.0;






interface IXVMCgovernor {
    function costToVote() external view returns (uint256);
    function maximumVoteTokens() external view returns (uint256);
    function delayBeforeEnforce() external view returns (uint256);
    function setPool(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, bool _withUpdate) external; 
    function changeGovernorEnforced() external returns (bool);
    function eligibleNewGovernor() external returns (address);
    function setDurationForCalculation(uint256 _newDuration) external;
    function updateAllPools() external;
	function treasuryWallet() external view returns (address);
	function burnFromOldChef(uint256 _amount) external;
	function setGovernorTax(uint256 _amount) external;
	function eventFibonacceningActive() external view returns (bool);
}

interface IMasterChef {
    function totalAllocPoint() external returns (uint256);
    function poolInfo(uint256) external returns (address, uint256, uint256, uint256, uint16);
    function XVMCPerBlock() external returns (uint256);
    function owner() external view returns (address);
	function massUpdatePools() external;
}

interface IOldChefOwner {
	function burnDelay() external view returns(uint256);
}

interface IToken {
    function governor() external view returns (address);
	function owner() external view returns (address);
}

//contract that regulates the farms for XVMC
contract XVMCfarms is Ownable {
    using SafeERC20 for IERC20;
    
	struct ProposalFarm {
        bool valid;
        uint256 poolid;
        uint256 newAllocation;
        uint256 valueSacrificedForVote;
		uint256 valueSacrificedAgainst;
		uint256 delay;
        uint256 firstCallTimestamp;
        uint16 newDepositFee;
    }
    struct ProposalDecreaseLeaks {
        bool valid;
        uint256 farmMultiplier;
        uint256 memeMultiplier;
        uint256 valueSacrificedForVote;
		uint256 valueSacrificedAgainst;
		uint256 delay;
        uint256 firstCallTimestamp;
    }
     struct ProposalGovTransfer {
        bool valid;
        uint256 firstCallTimestamp;
        uint256 proposedValue;
		uint256 valueSacrificedForVote;
		uint256 valueSacrificedAgainst;
		uint256 delay;
		bool isBurn; //if burn, burns tokens. Else transfers into treasury
		uint256 startTimestamp; //can schedule in advance when they are burned
    }
	
	//burns from old masterchef
   struct ProposalBurn {
        bool valid;
        uint256 firstCallTimestamp;
        uint256 proposedValue;
		uint256 valueSacrificedForVote;
		uint256 valueSacrificedAgainst;
		uint256 delay;
		uint256 startTimestamp; //can schedule in advance when they are burned
    }
	
   struct ProposalTax {
        bool valid;
        uint256 firstCallTimestamp;
        uint256 proposedValue;
		uint256 valueSacrificedForVote;
		uint256 valueSacrificedAgainst;
		uint256 delay;
    }
	
    ProposalBurn[] public burnProposals; 
    ProposalFarm[] public proposalFarmUpdate;
    ProposalDecreaseLeaks[] public proposeRewardReduction;
	ProposalGovTransfer[] public governorTransferProposals; 
	ProposalTax[] public govTaxProposals; 
    
    address public immutable token; //XVMC token(address!)
	
	address public masterchef;
	
	address public oldChef = 0x9BD741F077241b594EBdD745945B577d59C8768e;
    
	uint256 public maxLpAllocation = 1250;
	uint256 public maxNftAllocation = 1000;
	uint256 public maxMemeAllocation = 500;
	
    //farms and meme pools rewards have no lock 
    //reduce the rewards during inflation boost
    //to prevent tokens reaching the market
    uint256 public farmMultiplierDuringBoost = 500;
    uint256 public memeMultiplierDuringBoost = 500;
    bool public isReductionEnforced; 
    
    event InitiateFarmProposal(
            uint256 proposalID, uint256 depositingTokens, uint256 poolid,
            uint256 newAllocation, uint16 depositFee, address indexed enforcer, uint256 delay
        );
    
    //reward reduction for farms and meme pools during reward boosts
    event ProposeRewardReduction(address enforcer, uint256 proposalID, uint256 farmMultiplier, uint256 memeMultiplier, uint256 depositingTokens, uint256 delay);
	
    event ProposeGovernorTransfer(uint256 proposalID, uint256 valueSacrificedForVote, uint256 proposedAmount, address indexed enforcer, bool isBurn, uint256 startTimestamp, uint256 delay);
	
    event ProposeBurn(uint256 proposalID, uint256 valueSacrificedForVote, uint256 proposedBurn, address indexed enforcer, uint256 startTimestamp, uint256 delay);
	
	event ProposeGovTax(uint256 proposalID, uint256 valueSacrificedForVote, uint256 proposedTax, address indexed enforcer, uint256 delay);
	
	event AddVotes(uint256 _type, uint256 proposalID, address indexed voter, uint256 tokensSacrificed, bool _for);
	event EnforceProposal(uint256 _type, uint256 proposalID, address indexed enforcer, bool isSuccess);
    
	constructor (address _XVMC, address _masterchef)  {
		token = _XVMC;
		masterchef = _masterchef;
	}

	//ability to change max allocations without launching new contract
	function changeMaxAllocations(uint256 _lp, uint256 _nft, uint256 _meme) external onlyOwner {
		maxLpAllocation = _lp;
		maxNftAllocation = _nft;
		maxMemeAllocation = _meme;
	}
    
    /**
     * Regulatory process to regulate farm rewards 
     * And Meme pools
    */    
    function initiateFarmProposal(
            uint256 depositingTokens, uint256 poolid, uint256 newAllocation, uint16 depositFee, uint256 delay
        ) external { 
    	require(delay <= IXVMCgovernor(owner()).delayBeforeEnforce(), "must be shorter than Delay before enforce");
    	require(depositingTokens >= IXVMCgovernor(owner()).costToVote(), "there is a minimum cost to vote");
    	require(poolid == 0 || poolid == 1 || poolid == 8 || poolid == 9 || poolid == 10, "only allowed for these pools"); 
		
		//0 and 1 are XVMC-USDC and XVMC-wMatic pools
		//8 and 9 are meme pools
		//10 is for NFT staking(nfts and virtual land)
    	if(poolid == 0 || poolid == 1) {
    	    require(
    	        newAllocation <= (IMasterChef(masterchef).totalAllocPoint() * maxLpAllocation / 10000),
    	        "exceeds max allocation"
    	       );
    	} else if(poolid == 10) {
			require(
    	        newAllocation <= (IMasterChef(masterchef).totalAllocPoint() * maxNftAllocation / 10000),
    	        "exceeds max allocation"
    	       );
			require(depositFee == 0, "deposit fee must be 0 for NFTs");
		} else {
    	    require(
    	        newAllocation <= (IMasterChef(masterchef).totalAllocPoint() * maxMemeAllocation / 10000),
    	        "exceeds max allocation"
    	       ); 
    	}
    
    	IERC20(token).safeTransferFrom(msg.sender, owner(), depositingTokens); 
    	proposalFarmUpdate.push(
    	    ProposalFarm(true, poolid, newAllocation, depositingTokens, 0, delay, block.timestamp, depositFee)
    	    ); 
    	emit InitiateFarmProposal(proposalFarmUpdate.length - 1, depositingTokens, poolid, newAllocation, depositFee, msg.sender, delay);
    }
	function voteFarmProposalY(uint256 proposalID, uint256 withTokens) external {
		require(proposalFarmUpdate[proposalID].valid, "invalid");
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);

		proposalFarmUpdate[proposalID].valueSacrificedForVote+= withTokens;
			
		emit AddVotes(0, proposalID, msg.sender, withTokens, true);
	}
	function voteFarmProposalN(uint256 proposalID, uint256 withTokens, bool withAction) external {
		require(proposalFarmUpdate[proposalID].valid, "invalid");
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);
		
		proposalFarmUpdate[proposalID].valueSacrificedAgainst+= withTokens;
		if(withAction) { vetoFarmProposal(proposalID); }

		emit AddVotes(0, proposalID, msg.sender, withTokens, false);
	}
    function vetoFarmProposal(uint256 proposalID) public {
    	require(proposalFarmUpdate[proposalID].valid, "already invalid");
		require(proposalFarmUpdate[proposalID].firstCallTimestamp + proposalFarmUpdate[proposalID].delay <= block.timestamp, "pending delay");
		require(proposalFarmUpdate[proposalID].valueSacrificedForVote < proposalFarmUpdate[proposalID].valueSacrificedAgainst, "needs more votes");
		
    	proposalFarmUpdate[proposalID].valid = false; 
    	
    	emit EnforceProposal(0, proposalID, msg.sender, false);
    }
    
    /**
     * Updates the rewards for the corresponding farm in the proposal
    */
    function updateFarm(uint256 proposalID) public {
        require(!isReductionEnforced, "reward reduction is active"); //only when reduction is not enforced
        require(proposalFarmUpdate[proposalID].valid, "invalid proposal");
        require(
            proposalFarmUpdate[proposalID].firstCallTimestamp + IXVMCgovernor(owner()).delayBeforeEnforce() + proposalFarmUpdate[proposalID].delay  < block.timestamp,
            "delay before enforce not met"
            );
        
		if(proposalFarmUpdate[proposalID].valueSacrificedForVote >= proposalFarmUpdate[proposalID].valueSacrificedAgainst) {
			IXVMCgovernor(owner()).setPool(proposalFarmUpdate[proposalID].poolid, proposalFarmUpdate[proposalID].newAllocation, proposalFarmUpdate[proposalID].newDepositFee, true);
			proposalFarmUpdate[proposalID].valid = false;
			
			emit EnforceProposal(0, proposalID, msg.sender, true);
		} else {
			vetoFarmProposal(proposalID);
		}
    }

    /**
     * Regulatory process for determining rewards for 
     * farms and meme pools during inflation boosts
     * The rewards should be reduced for farms and pool tha toperate without time lock
     * to prevent tokens from hitting the market
    */
    function initiateRewardsReduction(uint256 depositingTokens, uint256 multiplierFarms, uint256 multiplierMemePools, uint256 delay) external {
    	require(depositingTokens >= IXVMCgovernor(owner()).costToVote(), "minimum cost to vote");
		require(delay <= IXVMCgovernor(owner()).delayBeforeEnforce(), "must be shorter than Delay before enforce");
		require(multiplierFarms <= 10000 && multiplierMemePools <= 10000, "out of range");
    	
		IERC20(token).safeTransferFrom(msg.sender, owner(), depositingTokens); 
		    proposeRewardReduction.push(
		        ProposalDecreaseLeaks(true, multiplierFarms, multiplierMemePools, depositingTokens, 0, delay, block.timestamp)
		        );
    	
    	emit ProposeRewardReduction(msg.sender, proposeRewardReduction.length - 1, multiplierFarms, multiplierMemePools, depositingTokens, delay);
    }
	function voteRewardsReductionY(uint256 proposalID, uint256 withTokens) external {
		require(proposeRewardReduction[proposalID].valid, "invalid");
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);

		proposeRewardReduction[proposalID].valueSacrificedForVote+= withTokens;

		emit AddVotes(1, proposalID, msg.sender, withTokens, true);
	}
	function voteRewardsReductionN(uint256 proposalID, uint256 withTokens, bool withAction) external {
		require(proposeRewardReduction[proposalID].valid, "invalid");
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);

		proposeRewardReduction[proposalID].valueSacrificedAgainst+= withTokens;
		if(withAction) { vetoRewardsReduction(proposalID); }

		emit AddVotes(1, proposalID, msg.sender, withTokens, false);
	}
    function vetoRewardsReduction(uint256 proposalID) public {
    	require(proposeRewardReduction[proposalID].valid == true, "Proposal already invalid");
		require(proposeRewardReduction[proposalID].firstCallTimestamp + proposeRewardReduction[proposalID].delay <= block.timestamp, "pending delay");
		require(proposeRewardReduction[proposalID].valueSacrificedForVote < proposeRewardReduction[proposalID].valueSacrificedAgainst, "needs more votes");
		
    	proposeRewardReduction[proposalID].valid = false;  
    	
    	emit EnforceProposal(1, proposalID, msg.sender, false);
    }
    function executeRewardsReduction(uint256 proposalID) public {
		require(!isReductionEnforced, "reward reduction is active"); //only when reduction is not enforced
    	require(
    	    proposeRewardReduction[proposalID].valid &&
    	    proposeRewardReduction[proposalID].firstCallTimestamp + IXVMCgovernor(owner()).delayBeforeEnforce() + proposeRewardReduction[proposalID].delay < block.timestamp,
    	    "Conditions not met"
    	   );
		   
		if(proposeRewardReduction[proposalID].valueSacrificedForVote >= proposeRewardReduction[proposalID].valueSacrificedAgainst) {
			farmMultiplierDuringBoost = proposeRewardReduction[proposalID].farmMultiplier;
			memeMultiplierDuringBoost = proposeRewardReduction[proposalID].memeMultiplier;
			proposeRewardReduction[proposalID].valid = false;
			
			emit EnforceProposal(1, proposalID, msg.sender, true);
		} else {
			vetoRewardsReduction(proposalID);
		}
    }
    
    /**
     * When event is active, reduction of rewards must be manually activated
     * Reduces the rewards by a factor
     * Call this to enforce and "un-enforce"
    */
    function enforceRewardReduction(bool withUpdate) public {
        uint256 allocPoint; uint16 depositFeeBP;
        if (IXVMCgovernor(owner()).eventFibonacceningActive() && !isReductionEnforced) {
            
            (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(0);
            IXVMCgovernor(owner()).setPool(
                0, allocPoint * farmMultiplierDuringBoost / 10000, depositFeeBP, false
            );
            
            (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(1);
            IXVMCgovernor(owner()).setPool(
                1, allocPoint * farmMultiplierDuringBoost / 10000, depositFeeBP, false
            );

            (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(8);
            IXVMCgovernor(owner()).setPool(
                8, allocPoint * memeMultiplierDuringBoost / 10000, depositFeeBP, false
            );

            (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(9);
            IXVMCgovernor(owner()).setPool(
                9, allocPoint * memeMultiplierDuringBoost / 10000, depositFeeBP, false
            );
            
            isReductionEnforced = true;
            
        } else if(!(IXVMCgovernor(owner()).eventFibonacceningActive()) && isReductionEnforced) {

        //inverses the formula... perhaps should keep last Reward
        //the mutliplier shall not change during event!
            (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(0);
            IXVMCgovernor(owner()).setPool(
                0, allocPoint * 10000 / farmMultiplierDuringBoost, depositFeeBP, false
            );
            
            (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(1);
            IXVMCgovernor(owner()).setPool(
                1, allocPoint * 10000 / farmMultiplierDuringBoost, depositFeeBP, false
            );

            (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(8);
            IXVMCgovernor(owner()).setPool(
                8, allocPoint * 10000 / memeMultiplierDuringBoost, depositFeeBP, false
            );

            (, allocPoint, , , depositFeeBP) = IMasterChef(masterchef).poolInfo(9);
            IXVMCgovernor(owner()).setPool(
                9, allocPoint * 10000 / memeMultiplierDuringBoost, depositFeeBP, false
            );
            
            isReductionEnforced = false;
        }
	
	if(withUpdate) { updateAllPools(); }
    }

	//updates all pools in masterchef
    function updateAllPools() public {
        IMasterChef(IToken(token).owner()).massUpdatePools();
    }

	/*
	* Transfer tokens from governor into treasury wallet OR burn them from governor
	* alternatively could change devaddr to the treasury wallet in masterchef(portion of inflation goes to devaddr)
	*/
  function proposeGovernorTransfer(uint256 depositingTokens, uint256 _amount, bool _isBurn, uint256 _timestamp, uint256 delay) external {
        require(depositingTokens >= IXVMCgovernor(owner()).costToVote(), "Costs to vote");
        require(delay <= IXVMCgovernor(owner()).delayBeforeEnforce(), "must be shorter than Delay before enforce");
		require(_amount <= IERC20(token).balanceOf(owner()), "insufficient balance");
        
    	IERC20(token).safeTransferFrom(msg.sender, owner(), depositingTokens);
    	governorTransferProposals.push(
    	    ProposalGovTransfer(true, block.timestamp, _amount, depositingTokens, 0, delay, _isBurn, _timestamp)
    	    );
		
    	emit ProposeGovernorTransfer(
    	    governorTransferProposals.length - 1, depositingTokens, _amount, msg.sender, _isBurn, _timestamp, delay
    	   );
    }
	function voteGovernorTransferY(uint256 proposalID, uint256 withTokens) external {
		require(governorTransferProposals[proposalID].valid, "invalid");
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);

		governorTransferProposals[proposalID].valueSacrificedForVote+= withTokens;
			
		emit AddVotes(2, proposalID, msg.sender, withTokens, true);
	}
	function voteGovernorTransferN(uint256 proposalID, uint256 withTokens, bool withAction) external {
		require(governorTransferProposals[proposalID].valid, "invalid");
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);
		
		governorTransferProposals[proposalID].valueSacrificedAgainst+= withTokens;
		if(withAction) { vetoGovernorTransfer(proposalID); }

		emit AddVotes(2, proposalID, msg.sender, withTokens, false);
	}
    function vetoGovernorTransfer(uint256 proposalID) public {
    	require(governorTransferProposals[proposalID].valid == true, "Invalid proposal"); 
		require(governorTransferProposals[proposalID].firstCallTimestamp + governorTransferProposals[proposalID].delay <= block.timestamp, "pending delay");
		require(governorTransferProposals[proposalID].valueSacrificedForVote < governorTransferProposals[proposalID].valueSacrificedAgainst, "needs more votes");
		
    	governorTransferProposals[proposalID].valid = false;

		emit EnforceProposal(2, proposalID, msg.sender, false);
    }
    function executeGovernorTransfer(uint256 proposalID) public {
    	require(
    	    governorTransferProposals[proposalID].valid == true &&
    	    governorTransferProposals[proposalID].firstCallTimestamp + IXVMCgovernor(owner()).delayBeforeEnforce() + governorTransferProposals[proposalID].delay  < block.timestamp,
    	    "conditions not met"
        );
		require(governorTransferProposals[proposalID].startTimestamp < block.timestamp, "Not yet eligible");
    	
		if(governorTransferProposals[proposalID].valueSacrificedForVote >= governorTransferProposals[proposalID].valueSacrificedAgainst) {
			if(governorTransferProposals[proposalID].isBurn) {
				IERC20(token).burnXVMC(owner(), governorTransferProposals[proposalID].proposedValue);
			} else {
				IERC20(token).safeTransferFrom(owner(), IXVMCgovernor(owner()).treasuryWallet(), governorTransferProposals[proposalID].proposedValue);
			}

			governorTransferProposals[proposalID].valid = false; 
			
			emit EnforceProposal(2, proposalID, msg.sender, true);
		} else {
			vetoGovernorTransfer(proposalID);
		}
    }
	
	//in case masterchef is changed
   function setMasterchef() external {
		address _chefo = IMasterChef(token).owner();
		
        masterchef = _chefo;
    }
   
    //transfers ownership of this contract to new governor
    //masterchef is the token owner, governor is the owner of masterchef
    function changeGovernor() external {
		_transferOwnership(IToken(token).governor());
    }
	
	//burn from old masterchef
	// 0 as proposed value will burn all the tokens held by contract
  function proposeBurn(uint256 depositingTokens, uint256 _amount, uint256 _timestamp, uint256 delay) external {
        require(depositingTokens >= IXVMCgovernor(owner()).costToVote(), "Costs to vote");
        require(delay <= IXVMCgovernor(owner()).delayBeforeEnforce(), "must be shorter than Delay before enforce");
		require(_amount <= IERC20(token).balanceOf(IMasterChef(oldChef).owner()), "insufficient balance");
        
    	IERC20(token).safeTransferFrom(msg.sender, owner(), depositingTokens);
    	burnProposals.push(
    	    ProposalBurn(true, block.timestamp, _amount, depositingTokens, 0, delay, _timestamp)
    	    );
		
    	emit ProposeBurn(
    	    burnProposals.length - 1, depositingTokens, _amount, msg.sender, _timestamp, delay
    	   );
    }
	function voteBurnY(uint256 proposalID, uint256 withTokens) external {
		require(burnProposals[proposalID].valid, "invalid");
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);

		burnProposals[proposalID].valueSacrificedForVote+= withTokens;

		emit AddVotes(3, proposalID, msg.sender, withTokens, true);
	}
	function voteBurnN(uint256 proposalID, uint256 withTokens, bool withAction) external {
		require(burnProposals[proposalID].valid, "invalid");
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);
		
		burnProposals[proposalID].valueSacrificedAgainst+= withTokens;
		if(withAction) { vetoBurn(proposalID); }

		emit AddVotes(3, proposalID, msg.sender, withTokens, false);
	}
    function vetoBurn(uint256 proposalID) public {
    	require(burnProposals[proposalID].valid == true, "Invalid proposal");
		require(burnProposals[proposalID].firstCallTimestamp + burnProposals[proposalID].delay <= block.timestamp, "pending delay");
		require(burnProposals[proposalID].valueSacrificedForVote < burnProposals[proposalID].valueSacrificedAgainst, "needs more votes");
		
    	burnProposals[proposalID].valid = false;
    	
    	emit EnforceProposal(3, proposalID, msg.sender, false);
    }
    function executeBurn(uint256 proposalID) public {
    	require(
    	    burnProposals[proposalID].valid == true &&
    	    burnProposals[proposalID].firstCallTimestamp + IOldChefOwner(IMasterChef(oldChef).owner()).burnDelay() + burnProposals[proposalID].delay  < block.timestamp,
    	    "conditions not met"
        );
    	require(burnProposals[proposalID].startTimestamp <= block.timestamp, "Not yet eligible");
		
		if(burnProposals[proposalID].valueSacrificedForVote >= burnProposals[proposalID].valueSacrificedAgainst) {
			IXVMCgovernor(owner()).burnFromOldChef(burnProposals[proposalID].proposedValue); //burns the tokens
			burnProposals[proposalID].valid = false; 
			
			emit EnforceProposal(3, proposalID, msg.sender, true);
		} else {
			vetoBurn(proposalID);
		}
    }
	
	//Proposals to set governor 'tax'(in masterchef, on every mint this % of inflation goes to the governor)
	//1000 = 10%. Max 10%
	// ( mintTokens * thisAmount / 10 000 ) in the masterchef contract
  function proposeGovTax(uint256 depositingTokens, uint256 _amount, uint256 delay) external {
        require(depositingTokens >= IXVMCgovernor(owner()).costToVote(), "Costs to vote");
        require(delay <= IXVMCgovernor(owner()).delayBeforeEnforce(), "must be shorter than Delay before enforce");
		require(_amount <= 1000 && _amount > 0, "max 1000");
        
    	IERC20(token).safeTransferFrom(msg.sender, owner(), depositingTokens);
    	govTaxProposals.push(
    	    ProposalTax(true, block.timestamp, _amount, depositingTokens, 0, delay)
    	    );
		
    	emit ProposeGovTax(
    	    govTaxProposals.length - 1, depositingTokens, _amount, msg.sender, delay
    	   );
    }
	function voteGovTaxY(uint256 proposalID, uint256 withTokens) external {
		require(govTaxProposals[proposalID].valid, "invalid");
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);

		govTaxProposals[proposalID].valueSacrificedForVote+= withTokens;

		emit AddVotes(4, proposalID, msg.sender, withTokens, true);
	}
	function voteGovTaxN(uint256 proposalID, uint256 withTokens, bool withAction) external {
		require(govTaxProposals[proposalID].valid, "invalid");
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);
		
		govTaxProposals[proposalID].valueSacrificedAgainst+= withTokens;
		if(withAction) { vetoGovTax(proposalID); }

		emit AddVotes(4, proposalID, msg.sender, withTokens, false);
	}
    function vetoGovTax(uint256 proposalID) public {
    	require(govTaxProposals[proposalID].valid == true, "Invalid proposal");
		require(govTaxProposals[proposalID].firstCallTimestamp + govTaxProposals[proposalID].delay <= block.timestamp, "pending delay");
		require(govTaxProposals[proposalID].valueSacrificedForVote < govTaxProposals[proposalID].valueSacrificedAgainst, "needs more votes");
		
    	govTaxProposals[proposalID].valid = false;
    	
    	emit EnforceProposal(4, proposalID, msg.sender, false);
    }
    function executeGovTax(uint256 proposalID) public {
    	require(
    	    govTaxProposals[proposalID].valid == true &&
    	    govTaxProposals[proposalID].firstCallTimestamp + IXVMCgovernor(owner()).delayBeforeEnforce() + govTaxProposals[proposalID].delay  < block.timestamp,
    	    "conditions not met"
        );
		
		if(govTaxProposals[proposalID].valueSacrificedForVote >= govTaxProposals[proposalID].valueSacrificedAgainst) {
			IXVMCgovernor(owner()).setGovernorTax(govTaxProposals[proposalID].proposedValue); //burns the tokens
			govTaxProposals[proposalID].valid = false; 
			
			emit EnforceProposal(4, proposalID, msg.sender, true);
		} else {
			vetoGovTax(proposalID);
		}
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_XVMC","type":"address"},{"internalType":"address","name":"_masterchef","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_type","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSacrificed","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_for","type":"bool"}],"name":"AddVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_type","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"bool","name":"isSuccess","type":"bool"}],"name":"EnforceProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAllocation","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"depositFee","type":"uint16"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"InitiateFarmProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposedBurn","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"ProposeBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposedTax","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"ProposeGovTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposedAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"bool","name":"isBurn","type":"bool"},{"indexed":false,"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"ProposeGovernorTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"farmMultiplier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"memeMultiplier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"ProposeRewardReduction","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"burnProposals","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"},{"internalType":"uint256","name":"proposedValue","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedAgainst","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"uint256","name":"startTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lp","type":"uint256"},{"internalType":"uint256","name":"_nft","type":"uint256"},{"internalType":"uint256","name":"_meme","type":"uint256"}],"name":"changeMaxAllocations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"withUpdate","type":"bool"}],"name":"enforceRewardReduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"executeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"executeGovTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"executeGovernorTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"executeRewardsReduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"farmMultiplierDuringBoost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"govTaxProposals","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"},{"internalType":"uint256","name":"proposedValue","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedAgainst","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"governorTransferProposals","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"},{"internalType":"uint256","name":"proposedValue","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedAgainst","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"bool","name":"isBurn","type":"bool"},{"internalType":"uint256","name":"startTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"internalType":"uint256","name":"poolid","type":"uint256"},{"internalType":"uint256","name":"newAllocation","type":"uint256"},{"internalType":"uint16","name":"depositFee","type":"uint16"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"initiateFarmProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"internalType":"uint256","name":"multiplierFarms","type":"uint256"},{"internalType":"uint256","name":"multiplierMemePools","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"initiateRewardsReduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isReductionEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLpAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMemeAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNftAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"memeMultiplierDuringBoost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldChef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalFarmUpdate","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"uint256","name":"poolid","type":"uint256"},{"internalType":"uint256","name":"newAllocation","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedAgainst","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"},{"internalType":"uint16","name":"newDepositFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"proposeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"proposeGovTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_isBurn","type":"bool"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"proposeGovernorTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposeRewardReduction","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"uint256","name":"farmMultiplier","type":"uint256"},{"internalType":"uint256","name":"memeMultiplier","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedAgainst","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setMasterchef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateAllPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"updateFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"vetoBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"vetoFarmProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"vetoGovTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"vetoGovernorTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"vetoRewardsReduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"},{"internalType":"bool","name":"withAction","type":"bool"}],"name":"voteBurnN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"}],"name":"voteBurnY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"},{"internalType":"bool","name":"withAction","type":"bool"}],"name":"voteFarmProposalN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"}],"name":"voteFarmProposalY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"},{"internalType":"bool","name":"withAction","type":"bool"}],"name":"voteGovTaxN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"}],"name":"voteGovTaxY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"},{"internalType":"bool","name":"withAction","type":"bool"}],"name":"voteGovernorTransferN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"}],"name":"voteGovernorTransferY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"},{"internalType":"bool","name":"withAction","type":"bool"}],"name":"voteRewardsReductionN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"}],"name":"voteRewardsReductionY","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a0604052600780546001600160a01b031916739bd741f077241b594ebdd745945b577d59c8768e1790556104e26008556103e86009556101f4600a819055600b819055600c553480156200005357600080fd5b5060405162005c9b38038062005c9b833981016040819052620000769162000133565b6200008a62000084620000c2565b620000c6565b60609190911b6001600160601b031916608052600680546001600160a01b0319166001600160a01b039092169190911790556200016a565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200012e57600080fd5b919050565b6000806040838503121562000146578182fd5b620001518362000116565b9150620001616020840162000116565b90509250929050565b60805160601c615abe620001dd60003960008181610ab401528181610f6c0152818161169401528181611c57015281816124a0015281816128f901528181612de3015281816130ea015281816146d50152818161486a015281816149f901528181614ab00152614c950152615abe6000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063972d56fd11610167578063d4353f7f116100ce578063f2fde38b11610087578063f2fde38b146105ab578063f679b9ec146105be578063facb4ca8146105d1578063fb1db278146105d9578063fc0c546a146105e1578063fca47bec146105e957610295565b8063d4353f7f1461054f578063dc73276b14610562578063e09af3bd14610575578063eb6e9ff414610588578063f08669dc1461059b578063f26d5d26146105a357610295565b8063b9ec7d7411610120578063b9ec7d74146104f3578063b9f9d24c146104fb578063bd32f47a14610503578063c53ceaeb14610516578063cc430ced14610529578063d0bf4f021461053c57610295565b8063972d56fd146104785780639c9022111461048b578063a68a132d146104b2578063a6f7f901146104c5578063ab658dca146104d8578063b7752968146104e057610295565b80633f45799c1161020b578063715018a6116101c4578063715018a61461040f578063777164051461041757806388d90a831461042a5780638da5cb5b1461043d57806391d3b9f91461045257806395a09a751461046557610295565b80633f45799c146103b357806344707238146103bb5780634ecb7cb1146103ce57806353e78c6b146103e157806360de2460146103e9578063675525cc146103fc57610295565b80631ad3a72b1161025d5780631ad3a72b1461032b5780631f45f6051461034057806330726048146103535780633200b003146103665780633da13129146103795780633dc2958a1461038c57610295565b8063049dfc251461029a578063094c30aa146102c857806315dec3cf146102ee57806317197e49146103035780631a7aa55614610318575b600080fd5b6102ad6102a836600461500c565b6105fc565b6040516102bf9695949392919061522c565b60405180910390f35b6102db6102d636600461500c565b610646565b6040516102bf9796959493929190615290565b6103016102fc36600461500c565b610699565b005b61030b610a47565b6040516102bf91906152fe565b61030161032636600461505d565b610a4d565b610333610b6e565b6040516102bf9190615221565b61030161034e366004615108565b610b77565b61030161036136600461500c565b611194565b61030161037436600461500c565b611368565b61030161038736600461503c565b61162d565b61039f61039a36600461500c565b611737565b6040516102bf9897969594939291906152c2565b61030b611795565b6103016103c936600461503c565b61179b565b6103016103dc36600461500c565b611867565b61030b611b21565b6103016103f7366004615095565b611b27565b61030161040a36600461500c565b611f0b565b6103016120da565b6103016104253660046150dd565b612125565b61030161043836600461503c565b612172565b61044561223d565b6040516102bf919061519d565b61030161046036600461505d565b61224c565b6103016104733660046150dd565b61232e565b61030161048636600461505d565b612647565b61049e61049936600461500c565b612729565b6040516102bf989796959493929190615256565b6103016104c0366004615150565b612785565b6103016104d336600461500c565b612ade565b61030b612cad565b6103016104ee366004615150565b612cb3565b6103016130e8565b6104456131cd565b61030161051136600461503c565b6131dc565b61030161052436600461505d565b6132a8565b61030161053736600461500c565b61338a565b61030161054a36600461500c565b6136f6565b61030161055d366004614fd4565b6138c5565b61030161057036600461500c565b6142b9565b61030161058336600461500c565b614488565b61030161059636600461505d565b614913565b6103016149f5565b610301614aab565b6103016105b9366004614f45565b614b44565b6103016105cc36600461503c565b614bb2565b61030b614c7e565b610445614c84565b610445614c93565b6102db6105f736600461500c565b614cb7565b6005818154811061060c57600080fd5b600091825260209091206006909102018054600182015460028301546003840154600485015460059095015460ff90941695509193909286565b6001818154811061065657600080fd5b6000918252602090912060079091020180546001820154600283015460038401546004850154600586015460069096015460ff9095169650929491939092919087565b600181815481106106ba57634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102015460ff161515600114801561084d575042600182815481106106fc57634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160050154600760009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561075c57600080fd5b505afa158015610770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107949190614f61565b6001600160a01b031663e91983c96040518163ffffffff1660e01b815260040160206040518083038186803b1580156107cc57600080fd5b505afa1580156107e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108049190615024565b6001848154811061082557634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600101546108419190615965565b61084b9190615965565b105b6108725760405162461bcd60e51b8152600401610869906155b8565b60405180910390fd5b426001828154811061089457634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016006015411156108c45760405162461bcd60e51b81526004016108699061561b565b600181815481106108e557634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600401546001828154811061091857634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016003015410610a3b5761093761223d565b6001600160a01b031663d28708646001838154811061096657634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600201546040518263ffffffff1660e01b815260040161099491906152fe565b600060405180830381600087803b1580156109ae57600080fd5b505af11580156109c2573d6000803e3d6000fd5b505050506000600182815481106109e957634e487b7160e01b600052603260045260246000fd5b60009182526020909120600790910201805460ff19169115159190911790556040513390600080516020615a4983398151915290610a2e906003908590600190615307565b60405180910390a2610a44565b610a4481612ade565b50565b600c5481565b60028381548110610a6e57634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff16610a9e5760405162461bcd60e51b8152600401610869906158b0565b610adc33610aaa61223d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919085614cc7565b8160028481548110610afe57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600802016004016000828254610b1e9190615965565b90915550508015610b3257610b3283611194565b336001600160a01b0316600080516020615a69833981519152600085856000604051610b619493929190615340565b60405180910390a2505050565b600d5460ff1681565b610b7f61223d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb757600080fd5b505afa158015610bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bef9190615024565b811115610c0e5760405162461bcd60e51b81526004016108699061567a565b610c1661223d565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4e57600080fd5b505afa158015610c62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c869190615024565b851015610ca55760405162461bcd60e51b81526004016108699061574b565b831580610cb25750836001145b80610cbd5750836008145b80610cc85750836009145b80610cd3575083600a145b610cef5760405162461bcd60e51b8152600401610869906153b2565b831580610cfc5750836001145b15610dbd57600854600654604080516317caf6f160e01b8152905161271093926001600160a01b0316916317caf6f19160048083019260209291908290030181600087803b158015610d4d57600080fd5b505af1158015610d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d859190615024565b610d8f919061599d565b610d99919061597d565b831115610db85760405162461bcd60e51b8152600401610869906156c3565b610f56565b83600a1415610e9f57600954600654604080516317caf6f160e01b8152905161271093926001600160a01b0316916317caf6f19160048083019260209291908290030181600087803b158015610e1257600080fd5b505af1158015610e26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4a9190615024565b610e54919061599d565b610e5e919061597d565b831115610e7d5760405162461bcd60e51b8152600401610869906156c3565b61ffff821615610db85760405162461bcd60e51b81526004016108699061554a565b600a54600654604080516317caf6f160e01b8152905161271093926001600160a01b0316916317caf6f19160048083019260209291908290030181600087803b158015610eeb57600080fd5b505af1158015610eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f239190615024565b610f2d919061599d565b610f37919061597d565b831115610f565760405162461bcd60e51b8152600401610869906156c3565b610f9433610f6261223d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919088614cc7565b60408051610100810182526001808252602082018781529282018681526060830189815260006080850181815260a086018881524260c0880190815261ffff8b811660e08a0190815260028054808b0182559681905299517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace6008909702968701805460ff191691151591909117905599517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf86015595517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad085015593517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad184015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2830155517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad382015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad482015593517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5909401805461ffff191694909116939093179092555433917f14b0d225d1c7509b815d31593a85b78a43d9b2202744ff25834030f416cae0e09161116e91906159bc565b878787878760405161118596959493929190615916565b60405180910390a25050505050565b600281815481106111b557634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff166111e55760405162461bcd60e51b81526004016108699061582f565b426002828154811061120757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600501546002838154811061123a57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600601546112569190615965565b11156112745760405162461bcd60e51b81526004016108699061542f565b6002818154811061129557634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160040154600282815481106112c857634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160030154106112f75760405162461bcd60e51b8152600401610869906154e9565b60006002828154811061131a57634e487b7160e01b600052603260045260246000fd5b60009182526020822060089190910201805460ff1916921515929092179091556040513391600080516020615a498339815191529161135d919085908290615307565b60405180910390a250565b6005818154811061138957634e487b7160e01b600052603260045260246000fd5b600091825260209091206006909102015460ff161515600114801561149e575042600582815481106113cb57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060060201600501546113e561223d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b15801561141d57600080fd5b505afa158015611431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114559190615024565b6005848154811061147657634e487b7160e01b600052603260045260246000fd5b9060005260206000209060060201600101546114929190615965565b61149c9190615965565b105b6114ba5760405162461bcd60e51b8152600401610869906155b8565b600581815481106114db57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060060201600401546005828154811061150e57634e487b7160e01b600052603260045260246000fd5b906000526020600020906006020160030154106116245761152d61223d565b6001600160a01b031663d06482e56005838154811061155c57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060060201600201546040518263ffffffff1660e01b815260040161158a91906152fe565b600060405180830381600087803b1580156115a457600080fd5b505af11580156115b8573d6000803e3d6000fd5b505050506000600582815481106115df57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600690910201805460ff19169115159190911790556040513390600080516020615a4983398151915290610a2e906004908590600190615307565b610a44816142b9565b6002828154811061164e57634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff1661167e5760405162461bcd60e51b8152600401610869906158b0565b6116bc3361168a61223d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919084614cc7565b80600283815481106116de57634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160030160008282546116fe9190615965565b90915550506040513390600080516020615a698339815191529061172b9060009086908690600190615340565b60405180910390a25050565b6002818154811061174757600080fd5b60009182526020909120600890910201805460018201546002830154600384015460048501546005860154600687015460079097015460ff90961697509395929491939092909161ffff1688565b60085481565b600482815481106117bc57634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff166117ec5760405162461bcd60e51b8152600401610869906158b0565b6117f83361168a61223d565b806004838154811061181a57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600301600082825461183a9190615965565b90915550506040513390600080516020615a698339815191529061172b9060029086908690600190615340565b600d5460ff161561188a5760405162461bcd60e51b815260040161086990615581565b600381815481106118ab57634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102015460ff1680156119bb575042600382815481106118e857634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016005015461190261223d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b15801561193a57600080fd5b505afa15801561194e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119729190615024565b6003848154811061199357634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600601546119af9190615965565b6119b99190615965565b105b6119d75760405162461bcd60e51b8152600401610869906157b9565b600381815481106119f857634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016004015460038281548110611a2b57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016003015410611b185760038181548110611a6357634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160010154600b8190555060038181548110611a9c57634e487b7160e01b600052603260045260246000fd5b60009182526020822060026007909202010154600c556003805483908110611ad457634e487b7160e01b600052603260045260246000fd5b60009182526020909120600790910201805460ff19169115159190911790556040513390600080516020615a4983398151915290610a2e9060019085908290615307565b610a4481611f0b565b60095481565b611b2f61223d565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b6757600080fd5b505afa158015611b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9f9190615024565b851015611bbe5760405162461bcd60e51b815260040161086990615456565b611bc661223d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b158015611bfe57600080fd5b505afa158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190615024565b811115611c555760405162461bcd60e51b81526004016108699061567a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231611c8c61223d565b6040518263ffffffff1660e01b8152600401611ca8919061519d565b60206040518083038186803b158015611cc057600080fd5b505afa158015611cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf89190615024565b841115611d175760405162461bcd60e51b81526004016108699061571d565b611d2333610f6261223d565b6040805161010081018252600180825242602083019081529282018781526060830189815260006080850181815260a086018881528a151560c0880190815260e088018b815260048054808a01825595819052985160089095027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b8101805496151560ff1997881617905599517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c8b015595517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d8a015593517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e89015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f880155517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a087015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a18601805491151591909216179055517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a2909301929092555433917feceef62dbf32d0a625e50c3cdb617d9078f42e1d04bda82ecac72ee3dad72a0391611ef491906159bc565b8787878787604051611185969594939291906158d1565b60038181548110611f2c57634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102015460ff161515600114611f615760405162461bcd60e51b8152600401610869906155e4565b4260038281548110611f8357634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016005015460038381548110611fb657634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160060154611fd29190615965565b1115611ff05760405162461bcd60e51b81526004016108699061542f565b6003818154811061201157634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600401546003828154811061204457634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160030154106120735760405162461bcd60e51b8152600401610869906154e9565b60006003828154811061209657634e487b7160e01b600052603260045260246000fd5b60009182526020822060079190910201805460ff1916921515929092179091556040513391600080516020615a498339815191529161135d91600191869190615307565b6120e2614d1f565b6001600160a01b03166120f361223d565b6001600160a01b0316146121195760405162461bcd60e51b815260040161086990615645565b6121236000614d23565b565b61212d614d1f565b6001600160a01b031661213e61223d565b6001600160a01b0316146121645760405162461bcd60e51b815260040161086990615645565b600892909255600955600a55565b6003828154811061219357634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102015460ff166121c35760405162461bcd60e51b8152600401610869906158b0565b6121cf3361168a61223d565b80600383815481106121f157634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160030160008282546122119190615965565b90915550506040513390600080516020615a698339815191529061172b90600190869086908390615340565b6000546001600160a01b031690565b6003838154811061226d57634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102015460ff1661229d5760405162461bcd60e51b8152600401610869906158b0565b6122a933610aaa61223d565b81600384815481106122cb57634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160040160008282546122eb9190615965565b909155505080156122ff576122ff83611f0b565b336001600160a01b0316600080516020615a69833981519152600185856000604051610b619493929190615340565b61233661223d565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561236e57600080fd5b505afa158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a69190615024565b8310156123c55760405162461bcd60e51b815260040161086990615456565b6123cd61223d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b15801561240557600080fd5b505afa158015612419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243d9190615024565b81111561245c5760405162461bcd60e51b81526004016108699061567a565b6103e8821115801561246e5750600082115b61248a5760405162461bcd60e51b815260040161086990615390565b6124c83361249661223d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919086614cc7565b6040805160c081018252600180825242602083019081529282018581526060830187815260006080850181815260a086018881526005805480880182559381905296517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db06006909402938401805460ff191691151591909117905596517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db183015592517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db282015590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db382015590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db482015592517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db5909301929092555433917f2ebbe68836f379ec0dcf75e0a50e931bfc2464ac9221ff980d893fbd927563019161263491906159bc565b858585604051610b6194939291906158fb565b6001838154811061266857634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102015460ff166126985760405162461bcd60e51b8152600401610869906158b0565b6126a433610aaa61223d565b81600184815481106126c657634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160040160008282546126e69190615965565b909155505080156126fa576126fa83612ade565b336001600160a01b0316600080516020615a69833981519152600385856000604051610b619493929190615340565b6004818154811061273957600080fd5b60009182526020909120600890910201805460018201546002830154600384015460048501546005860154600687015460079097015460ff968716985094969395929491939092169088565b61278d61223d565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127c557600080fd5b505afa1580156127d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fd9190615024565b84101561281c5760405162461bcd60e51b815260040161086990615882565b61282461223d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b15801561285c57600080fd5b505afa158015612870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128949190615024565b8111156128b35760405162461bcd60e51b81526004016108699061567a565b61271083111580156128c757506127108211155b6128e35760405162461bcd60e51b81526004016108699061547d565b612921336128ef61223d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919087614cc7565b6040805160e0810182526001808252602082018681529282018581526060830188815260006080850181815260a086018881524260c088019081526003805480890182559481905297517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b6007909502948501805460ff191691151591909117905597517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c84015593517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d83015591517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85e82015590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85f82015590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f86082015592517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f86190930192909255547f09c8943550f2ff2631ff789518d81a463498fb8a96fabaad972c69bc647b395f913391612aba91906159bc565b85858886604051612ad0969594939291906151ee565b60405180910390a150505050565b60018181548110612aff57634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102015460ff161515600114612b345760405162461bcd60e51b815260040161086990615858565b4260018281548110612b5657634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016005015460018381548110612b8957634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160010154612ba59190615965565b1115612bc35760405162461bcd60e51b81526004016108699061542f565b60018181548110612be457634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016004015460018281548110612c1757634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016003015410612c465760405162461bcd60e51b8152600401610869906154e9565b600060018281548110612c6957634e487b7160e01b600052603260045260246000fd5b60009182526020822060079190910201805460ff1916921515929092179091556040513391600080516020615a498339815191529161135d91600391869190615307565b600a5481565b612cbb61223d565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b158015612cf357600080fd5b505afa158015612d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2b9190615024565b841015612d4a5760405162461bcd60e51b815260040161086990615456565b612d5261223d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b158015612d8a57600080fd5b505afa158015612d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc29190615024565b811115612de15760405162461bcd60e51b81526004016108699061567a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231600760009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e5e57600080fd5b505afa158015612e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e969190614f61565b6040518263ffffffff1660e01b8152600401612eb2919061519d565b60206040518083038186803b158015612eca57600080fd5b505afa158015612ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f029190615024565b831115612f215760405162461bcd60e51b81526004016108699061571d565b612f2d336128ef61223d565b6040805160e081018252600180825242602083019081529282018681526060830188815260006080850181815260a0860188815260c087018a8152865480880188559387905296517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf66007909402938401805460ff191691151591909117905596517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf783015592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf882015590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf982015590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa82015592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfb84015590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfc90920191909155805433917fd8217c4c6eb7b2a0ee44e4a8e02afb9621d5a5bf335f69b2db4c80d8dd772864916130c591906159bc565b868686866040516130da959493929190615942565b60405180910390a250505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561314157600080fd5b505afa158015613155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131799190614f61565b6001600160a01b031663630b5ba16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131b357600080fd5b505af11580156131c7573d6000803e3d6000fd5b50505050565b6007546001600160a01b031681565b600182815481106131fd57634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102015460ff1661322d5760405162461bcd60e51b8152600401610869906158b0565b6132393361168a61223d565b806001838154811061325b57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600301600082825461327b9190615965565b90915550506040513390600080516020615a698339815191529061172b9060039086908690600190615340565b600483815481106132c957634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff166132f95760405162461bcd60e51b8152600401610869906158b0565b61330533610aaa61223d565b816004848154811061332757634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160040160008282546133479190615965565b9091555050801561335b5761335b836136f6565b336001600160a01b0316600080516020615a69833981519152600285856000604051610b619493929190615340565b600d5460ff16156133ad5760405162461bcd60e51b815260040161086990615581565b600281815481106133ce57634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff166133fe5760405162461bcd60e51b8152600401610869906156f3565b426002828154811061342057634e487b7160e01b600052603260045260246000fd5b90600052602060002090600802016005015461343a61223d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b15801561347257600080fd5b505afa158015613486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134aa9190615024565b600284815481106134cb57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600601546134e79190615965565b6134f19190615965565b1061350e5760405162461bcd60e51b815260040161086990615513565b6002818154811061352f57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600401546002828154811061356257634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160030154106136ed5761358161223d565b6001600160a01b0316636d557c2e600283815481106135b057634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160010154600284815481106135e357634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600201546002858154811061361657634e487b7160e01b600052603260045260246000fd5b60009182526020909120600760089092020101546040516001600160e01b031960e086901b16815261365493929161ffff169060019060040161531f565b600060405180830381600087803b15801561366e57600080fd5b505af1158015613682573d6000803e3d6000fd5b505050506000600282815481106136a957634e487b7160e01b600052603260045260246000fd5b60009182526020822060089190910201805460ff1916921515929092179091556040513391600080516020615a4983398151915291610a2e91908590600190615307565b610a4481611194565b6004818154811061371757634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff16151560011461374c5760405162461bcd60e51b815260040161086990615858565b426004828154811061376e57634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160050154600483815481106137a157634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600101546137bd9190615965565b11156137db5760405162461bcd60e51b81526004016108699061542f565b600481815481106137fc57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600401546004828154811061382f57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600301541061385e5760405162461bcd60e51b8152600401610869906154e9565b60006004828154811061388157634e487b7160e01b600052603260045260246000fd5b60009182526020822060089190910201805460ff1916921515929092179091556040513391600080516020615a498339815191529161135d91600291869190615307565b6000806138d061223d565b6001600160a01b0316632a5626f26040518163ffffffff1660e01b815260040160206040518083038186803b15801561390857600080fd5b505afa15801561391c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139409190614ff0565b801561394f5750600d5460ff16155b15613dbb57600654604051631526fe2760e01b81526001600160a01b0390911690631526fe2790613985906000906004016152fe565b60a060405180830381600087803b15801561399f57600080fd5b505af11580156139b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d79190614f7d565b9295509193506139ea925061223d915050565b6001600160a01b0316636d557c2e6000612710600b5486613a0b919061599d565b613a15919061597d565b8460006040518563ffffffff1660e01b8152600401613a37949392919061531f565b600060405180830381600087803b158015613a5157600080fd5b505af1158015613a65573d6000803e3d6000fd5b5050600654604051631526fe2760e01b81526001600160a01b039091169250631526fe279150613a9a906001906004016152fe565b60a060405180830381600087803b158015613ab457600080fd5b505af1158015613ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aec9190614f7d565b929550919350613aff925061223d915050565b6001600160a01b0316636d557c2e6001612710600b5486613b20919061599d565b613b2a919061597d565b8460006040518563ffffffff1660e01b8152600401613b4c949392919061531f565b600060405180830381600087803b158015613b6657600080fd5b505af1158015613b7a573d6000803e3d6000fd5b5050600654604051631526fe2760e01b81526001600160a01b039091169250631526fe279150613baf906008906004016152fe565b60a060405180830381600087803b158015613bc957600080fd5b505af1158015613bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c019190614f7d565b929550919350613c14925061223d915050565b6001600160a01b0316636d557c2e6008612710600c5486613c35919061599d565b613c3f919061597d565b8460006040518563ffffffff1660e01b8152600401613c61949392919061531f565b600060405180830381600087803b158015613c7b57600080fd5b505af1158015613c8f573d6000803e3d6000fd5b5050600654604051631526fe2760e01b81526001600160a01b039091169250631526fe279150613cc4906009906004016152fe565b60a060405180830381600087803b158015613cde57600080fd5b505af1158015613cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d169190614f7d565b929550919350613d29925061223d915050565b6001600160a01b0316636d557c2e6009612710600c5486613d4a919061599d565b613d54919061597d565b8460006040518563ffffffff1660e01b8152600401613d76949392919061531f565b600060405180830381600087803b158015613d9057600080fd5b505af1158015613da4573d6000803e3d6000fd5b5050600d805460ff19166001179055506142a69050565b613dc361223d565b6001600160a01b0316632a5626f26040518163ffffffff1660e01b815260040160206040518083038186803b158015613dfb57600080fd5b505afa158015613e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e339190614ff0565b158015613e425750600d5460ff165b156142a657600654604051631526fe2760e01b81526001600160a01b0390911690631526fe2790613e78906000906004016152fe565b60a060405180830381600087803b158015613e9257600080fd5b505af1158015613ea6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eca9190614f7d565b929550919350613edd925061223d915050565b6001600160a01b0316636d557c2e6000600b5485612710613efe919061599d565b613f08919061597d565b8460006040518563ffffffff1660e01b8152600401613f2a949392919061531f565b600060405180830381600087803b158015613f4457600080fd5b505af1158015613f58573d6000803e3d6000fd5b5050600654604051631526fe2760e01b81526001600160a01b039091169250631526fe279150613f8d906001906004016152fe565b60a060405180830381600087803b158015613fa757600080fd5b505af1158015613fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fdf9190614f7d565b929550919350613ff2925061223d915050565b6001600160a01b0316636d557c2e6001600b5485612710614013919061599d565b61401d919061597d565b8460006040518563ffffffff1660e01b815260040161403f949392919061531f565b600060405180830381600087803b15801561405957600080fd5b505af115801561406d573d6000803e3d6000fd5b5050600654604051631526fe2760e01b81526001600160a01b039091169250631526fe2791506140a2906008906004016152fe565b60a060405180830381600087803b1580156140bc57600080fd5b505af11580156140d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f49190614f7d565b929550919350614107925061223d915050565b6001600160a01b0316636d557c2e6008600c5485612710614128919061599d565b614132919061597d565b8460006040518563ffffffff1660e01b8152600401614154949392919061531f565b600060405180830381600087803b15801561416e57600080fd5b505af1158015614182573d6000803e3d6000fd5b5050600654604051631526fe2760e01b81526001600160a01b039091169250631526fe2791506141b7906009906004016152fe565b60a060405180830381600087803b1580156141d157600080fd5b505af11580156141e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142099190614f7d565b92955091935061421c925061223d915050565b6001600160a01b0316636d557c2e6009600c548561271061423d919061599d565b614247919061597d565b8460006040518563ffffffff1660e01b8152600401614269949392919061531f565b600060405180830381600087803b15801561428357600080fd5b505af1158015614297573d6000803e3d6000fd5b5050600d805460ff1916905550505b82156142b4576142b46130e8565b505050565b600581815481106142da57634e487b7160e01b600052603260045260246000fd5b600091825260209091206006909102015460ff16151560011461430f5760405162461bcd60e51b815260040161086990615858565b426005828154811061433157634e487b7160e01b600052603260045260246000fd5b9060005260206000209060060201600501546005838154811061436457634e487b7160e01b600052603260045260246000fd5b9060005260206000209060060201600101546143809190615965565b111561439e5760405162461bcd60e51b81526004016108699061542f565b600581815481106143bf57634e487b7160e01b600052603260045260246000fd5b906000526020600020906006020160040154600582815481106143f257634e487b7160e01b600052603260045260246000fd5b906000526020600020906006020160030154106144215760405162461bcd60e51b8152600401610869906154e9565b60006005828154811061444457634e487b7160e01b600052603260045260246000fd5b60009182526020822060069190910201805460ff1916921515929092179091556040513391600080516020615a498339815191529161135d91600491869190615307565b600481815481106144a957634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff16151560011480156145be575042600482815481106144eb57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600802016005015461450561223d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b15801561453d57600080fd5b505afa158015614551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145759190615024565b6004848154811061459657634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600101546145b29190615965565b6145bc9190615965565b105b6145da5760405162461bcd60e51b8152600401610869906155b8565b42600482815481106145fc57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600701541061462b5760405162461bcd60e51b81526004016108699061561b565b6004818154811061464c57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600401546004828154811061467f57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600301541061490a57600481815481106146b757634e487b7160e01b600052603260045260246000fd5b600091825260209091206006600890920201015460ff16156147b2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ea09478061470a61223d565b6004848154811061472b57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600201546040518363ffffffff1660e01b815260040161475a9291906151d5565b602060405180830381600087803b15801561477457600080fd5b505af1158015614788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147ac9190614ff0565b506148a2565b6148a26147bd61223d565b6147c561223d565b6001600160a01b0316634626402b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156147fd57600080fd5b505afa158015614811573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148359190614f61565b6004848154811061485657634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600201547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316614cc7909392919063ffffffff16565b6000600482815481106148c557634e487b7160e01b600052603260045260246000fd5b60009182526020909120600890910201805460ff19169115159190911790556040513390600080516020615a4983398151915290610a2e906002908590600190615307565b610a44816136f6565b6005838154811061493457634e487b7160e01b600052603260045260246000fd5b600091825260209091206006909102015460ff166149645760405162461bcd60e51b8152600401610869906158b0565b61497033610aaa61223d565b816005848154811061499257634e487b7160e01b600052603260045260246000fd5b906000526020600020906006020160040160008282546149b29190615965565b909155505080156149c6576149c6836142b9565b336001600160a01b0316600080516020615a69833981519152600485856000604051610b619493929190615340565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015614a5057600080fd5b505afa158015614a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a889190614f61565b600680546001600160a01b0319166001600160a01b039290921691909117905550565b6121237f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015614b0757600080fd5b505afa158015614b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b3f9190614f61565b614d23565b614b4c614d1f565b6001600160a01b0316614b5d61223d565b6001600160a01b031614614b835760405162461bcd60e51b815260040161086990615645565b6001600160a01b038116614ba95760405162461bcd60e51b8152600401610869906153e9565b610a4481614d23565b60058281548110614bd357634e487b7160e01b600052603260045260246000fd5b600091825260209091206006909102015460ff16614c035760405162461bcd60e51b8152600401610869906158b0565b614c0f3361168a61223d565b8060058381548110614c3157634e487b7160e01b600052603260045260246000fd5b90600052602060002090600602016003016000828254614c519190615965565b90915550506040513390600080516020615a698339815191529061172b9060049086908690600190615340565b600b5481565b6006546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6003818154811061065657600080fd5b6131c784630c3023b960e01b858585604051602401614ce8939291906151b1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614d73565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000614dc8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614e029092919063ffffffff16565b8051909150156142b45780806020019051810190614de69190614ff0565b6142b45760405162461bcd60e51b8152600401610869906157e5565b6060614e118484600085614e1b565b90505b9392505050565b606082471015614e3d5760405162461bcd60e51b8152600401610869906154a3565b614e4685614edb565b614e625760405162461bcd60e51b815260040161086990615782565b600080866001600160a01b03168587604051614e7e9190615181565b60006040518083038185875af1925050503d8060008114614ebb576040519150601f19603f3d011682016040523d82523d6000602084013e614ec0565b606091505b5091509150614ed0828286614f0c565b979650505050505050565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b60608315614f1b575081614e14565b825115614f2b5782518084602001fd5b8160405162461bcd60e51b8152600401610869919061535d565b600060208284031215614f56578081fd5b8135614e1481615a15565b600060208284031215614f72578081fd5b8151614e1481615a15565b600080600080600060a08688031215614f94578081fd5b8551614f9f81615a15565b809550506020860151935060408601519250606086015191506080860151614fc681615a38565b809150509295509295909350565b600060208284031215614fe5578081fd5b8135614e1481615a2a565b600060208284031215615001578081fd5b8151614e1481615a2a565b60006020828403121561501d578081fd5b5035919050565b600060208284031215615035578081fd5b5051919050565b6000806040838503121561504e578182fd5b50508035926020909101359150565b600080600060608486031215615071578283fd5b8335925060208401359150604084013561508a81615a2a565b809150509250925092565b600080600080600060a086880312156150ac578081fd5b853594506020860135935060408601356150c581615a2a565b94979396509394606081013594506080013592915050565b6000806000606084860312156150f1578283fd5b505081359360208301359350604090920135919050565b600080600080600060a0868803121561511f578081fd5b853594506020860135935060408601359250606086013561513f81615a38565b949793965091946080013592915050565b60008060008060808587031215615165578182fd5b5050823594602084013594506040840135936060013592509050565b600082516151938184602087016159d3565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03969096168652602086019490945260408501929092526060840152608083015260a082015260c00190565b901515815260200190565b9515158652602086019490945260408501929092526060840152608083015260a082015260c00190565b9715158852602088019690965260408701949094526060860192909252608085015260a0840152151560c083015260e08201526101000190565b9615158752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b9715158852602088019690965260408701949094526060860192909252608085015260a084015260c083015261ffff1660e08201526101000190565b90815260200190565b92835260208301919091521515604082015260600190565b938452602084019290925261ffff1660408301521515606082015260800190565b938452602084019290925260408301521515606082015260800190565b600060208252825180602084015261537c8160408501602087016159d3565b601f01601f19169190910160400192915050565b60208082526008908201526706d617820313030360c41b604082015260600190565b6020808252601c908201527f6f6e6c7920616c6c6f77656420666f7220746865736520706f6f6c7300000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600d908201526c70656e64696e672064656c617960981b604082015260600190565b6020808252600d908201526c436f73747320746f20766f746560981b604082015260600190565b6020808252600c908201526b6f7574206f662072616e676560a01b604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b60208082526010908201526f6e65656473206d6f726520766f74657360801b604082015260600190565b6020808252601c908201527f64656c6179206265666f726520656e666f726365206e6f74206d657400000000604082015260600190565b6020808252601e908201527f6465706f73697420666565206d757374206265203020666f72204e4654730000604082015260600190565b6020808252601a908201527f72657761726420726564756374696f6e20697320616374697665000000000000604082015260600190565b60208082526012908201527118dbdb991a5d1a5bdb9cc81b9bdd081b595d60721b604082015260600190565b60208082526018908201527f50726f706f73616c20616c726561647920696e76616c69640000000000000000604082015260600190565b60208082526010908201526f4e6f742079657420656c696769626c6560801b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f6d7573742062652073686f72746572207468616e2044656c6179206265666f726040820152686520656e666f72636560b81b606082015260800190565b60208082526016908201527532bc31b2b2b2399036b0bc1030b63637b1b0ba34b7b760511b604082015260600190565b60208082526010908201526f1a5b9d985b1a59081c1c9bdc1bdcd85b60821b604082015260600190565b602080825260149082015273696e73756666696369656e742062616c616e636560601b604082015260600190565b6020808252601f908201527f74686572652069732061206d696e696d756d20636f737420746f20766f746500604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526012908201527110dbdb991a5d1a5bdb9cc81b9bdd081b595d60721b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252600f908201526e185b1c9958591e481a5b9d985b1a59608a1b604082015260600190565b60208082526010908201526f125b9d985b1a59081c1c9bdc1bdcd85b60821b604082015260600190565b6020808252601490820152736d696e696d756d20636f737420746f20766f746560601b604082015260600190565b6020808252600790820152661a5b9d985b1a5960ca1b604082015260600190565b9586526020860194909452604085019290925215156060840152608083015260a082015260c00190565b93845260208401929092526040830152606082015260800190565b95865260208601949094526040850192909252606084015261ffff16608083015260a082015260c00190565b948552602085019390935260408401919091526060830152608082015260a00190565b60008219821115615978576159786159ff565b500190565b60008261599857634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156159b7576159b76159ff565b500290565b6000828210156159ce576159ce6159ff565b500390565b60005b838110156159ee5781810151838201526020016159d6565b838111156131c75750506000910152565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610a4457600080fd5b8015158114610a4457600080fd5b61ffff81168114610a4457600080fdfef2bb4a4a13cf6aeac92de647c51be644b020e0438e1f43d39af5cd361525b05f417668270754634975f63e2a103ec6546e665d5068d4f888385de42fcc113a12a2646970667358221220f4404e6c53ce2d0abb7e11c5cd069e6c18ea7bd23f060d34ea159ec8490cf59364736f6c63430008000033000000000000000000000000970ccee657dd831e9c37511aa3eb5302c1eb5eee0000000000000000000000006ff40a8a1fe16075bd6008a48befb768be08b4b0

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

000000000000000000000000970ccee657dd831e9c37511aa3eb5302c1eb5eee0000000000000000000000006ff40a8a1fe16075bd6008a48befb768be08b4b0

-----Decoded View---------------
Arg [0] : _XVMC (address): 0x970ccee657dd831e9c37511aa3eb5302c1eb5eee
Arg [1] : _masterchef (address): 0x6ff40a8a1fe16075bd6008a48befb768be08b4b0

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000970ccee657dd831e9c37511aa3eb5302c1eb5eee
Arg [1] : 0000000000000000000000006ff40a8a1fe16075bd6008a48befb768be08b4b0


Deployed ByteCode Sourcemap

20833:24235:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22545:36;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;22339:35;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;41361:801::-;;;;;;:::i;:::-;;:::i;:::-;;23092:46;;;:::i;:::-;;;;;;;:::i;26889:424::-;;;;;;:::i;:::-;;:::i;23145:31::-;;;:::i;:::-;;;;;;;:::i;24828:1700::-;;;;;;:::i;:::-;;:::i;27319:540::-;;;;;;:::i;:::-;;:::i;44355:710::-;;;;;;:::i;:::-;;:::i;26531:355::-;;;;;;:::i;:::-;;:::i;22382:40::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;22764:37::-;;;:::i;36294:373::-;;;;;;:::i;:::-;;:::i;31435:928::-;;;;;;:::i;:::-;;:::i;22805:38::-;;;:::i;35444:847::-;;;;;;:::i;:::-;;:::i;30843:586::-;;;;;;:::i;:::-;;:::i;18523:103::-;;;:::i;24539:180::-;;;;;;:::i;:::-;;:::i;30032:364::-;;;;;;:::i;:::-;;:::i;17872:87::-;;;:::i;:::-;;;;;;;:::i;30399:438::-;;;;;;:::i;:::-;;:::i;42369:698::-;;;;;;:::i;:::-;;:::i;40441:398::-;;;;;;:::i;:::-;;:::i;22486:54::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;29184:845::-;;;;;;:::i;:::-;;:::i;40845:510::-;;;;;;:::i;:::-;;:::i;22847:38::-;;;:::i;39320:781::-;;;;;;:::i;:::-;;:::i;35128:104::-;;;:::i;22687:67::-;;;:::i;40104:334::-;;;;;;:::i;:::-;;:::i;36670:446::-;;;;;;:::i;:::-;;:::i;27959:953::-;;;;;;:::i;:::-;;:::i;37122:587::-;;;;;;:::i;:::-;;:::i;32556:2528::-;;;;;;:::i;:::-;;:::i;43825:524::-;;;;;;:::i;:::-;;:::i;37715:1099::-;;;;;;:::i;:::-;;:::i;43413:406::-;;;;;;:::i;:::-;;:::i;38856:124::-;;;:::i;39125:92::-;;;:::i;18781:201::-;;;;;;:::i;:::-;;:::i;43070:340::-;;;;;;:::i;:::-;;:::i;23039:46::-;;;:::i;22655:25::-;;;:::i;22595:30::-;;;:::i;22429:53::-;;;;;;:::i;:::-;;:::i;22545:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22545:36:0;;;;;:::o;22339:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22339:35:0;;;;;;;;;:::o;41361:801::-;41436:13;41450:10;41436:25;;;;;;-1:-1:-1;;;41436:25:0;;;;;;;;;;;;;;;;;;;;;;:31;;;:39;;:31;:39;:208;;;;;41629:15;41594:13;41608:10;41594:25;;;;;;-1:-1:-1;;;41594:25:0;;;;;;;;;;;;;;;;;;;:31;;;41562:7;;;;;;;;;-1:-1:-1;;;;;41562:7:0;-1:-1:-1;;;;;41550:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41536:53:0;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41489:13;41503:10;41489:25;;;;;;-1:-1:-1;;;41489:25:0;;;;;;;;;;;;;;;;;;;:44;;;:102;;;;:::i;:::-;:136;;;;:::i;:::-;:155;41436:208;41417:270;;;;-1:-1:-1;;;41417:270:0;;;;;;;:::i;:::-;;;;;;;;;41747:15;41703:13;41717:10;41703:25;;;;;;-1:-1:-1;;;41703:25:0;;;;;;;;;;;;;;;;;;;:40;;;:59;;41695:88;;;;-1:-1:-1;;;41695:88:0;;;;;;;:::i;:::-;41847:13;41861:10;41847:25;;;;;;-1:-1:-1;;;41847:25:0;;;;;;;;;;;;;;;;;;;:48;;;41795:13;41809:10;41795:25;;;;;;-1:-1:-1;;;41795:25:0;;;;;;;;;;;;;;;;;;;:48;;;:100;41792:363;;41917:7;:5;:7::i;:::-;-1:-1:-1;;;;;41903:38:0;;41942:13;41956:10;41942:25;;;;;;-1:-1:-1;;;41942:25:0;;;;;;;;;;;;;;;;;;;:39;;;41903:79;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42041:5;42007:13;42021:10;42007:25;;;;;;-1:-1:-1;;;42007:25:0;;;;;;;;;;;;;;;;;;;;;;:39;;-1:-1:-1;;42007:39:0;;;;;;;;;;42063:48;;42094:10;;-1:-1:-1;;;;;;;;;;;42063:48:0;;;42079:1;;42082:10;;-1:-1:-1;;42063:48:0;:::i;:::-;;;;;;;;41792:363;;;42129:20;42138:10;42129:8;:20::i;:::-;41361:801;:::o;23092:46::-;;;;:::o;26889:424::-;26995:18;27014:10;26995:30;;;;;;-1:-1:-1;;;26995:30:0;;;;;;;;;;;;;;;;;;;;;;:36;;;26987:56;;;;-1:-1:-1;;;26987:56:0;;;;;;;:::i;:::-;27052:63;27083:10;27095:7;:5;:7::i;:::-;-1:-1:-1;;;;;27059:5:0;27052:30;;:63;27104:10;27052:30;:63::i;:::-;27180:10;27124:18;27143:10;27124:30;;;;;;-1:-1:-1;;;27124:30:0;;;;;;;;;;;;;;;;;;;:53;;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;27195:48:0;;;;27212:28;27229:10;27212:16;:28::i;:::-;27278:10;-1:-1:-1;;;;;27254:54:0;-1:-1:-1;;;;;;;;;;;27263:1:0;27266:10;27290;27302:5;27254:54;;;;;;;;;:::i;:::-;;;;;;;;26889:424;;;:::o;23145:31::-;;;;;;:::o;24828:1700::-;25030:7;:5;:7::i;:::-;-1:-1:-1;;;;;25016:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25007:5;:52;;24999:106;;;;-1:-1:-1;;;24999:106:0;;;;;;;:::i;:::-;25155:7;:5;:7::i;:::-;-1:-1:-1;;;;;25141:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25121:16;:55;;25113:99;;;;-1:-1:-1;;;25113:99:0;;;;;;;:::i;:::-;25228:11;;;:26;;;25243:6;25253:1;25243:11;25228:26;:41;;;;25258:6;25268:1;25258:11;25228:41;:56;;;;25273:6;25283:1;25273:11;25228:56;:72;;;;25288:6;25298:2;25288:12;25228:72;25220:113;;;;-1:-1:-1;;;25220:113:0;;;;;;;:::i;:::-;25476:11;;;:26;;;25491:6;25501:1;25491:11;25476:26;25473:674;;;25601:15;;25569:10;;25557:41;;;-1:-1:-1;;;25557:41:0;;;;25619:5;;25601:15;-1:-1:-1;;;;;25569:10:0;;25557:39;;:41;;;;;;;;;;;;;;25569:10;;25557:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;;;:::i;:::-;:67;;;;:::i;:::-;25539:13;:86;;25516:164;;;;-1:-1:-1;;;25516:164:0;;;;;;;:::i;:::-;25473:674;;;25698:6;25708:2;25698:12;25695:452;;;25803:16;;25771:10;;25759:41;;;-1:-1:-1;;;25759:41:0;;;;25822:5;;25803:16;-1:-1:-1;;;;;25771:10:0;;25759:39;;:41;;;;;;;;;;;;;;25771:10;;25759:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;:::i;:::-;:68;;;;:::i;:::-;25741:13;:87;;25718:165;;;;-1:-1:-1;;;25718:165:0;;;;;;;:::i;:::-;25897:15;;;;25889:58;;;;-1:-1:-1;;;25889:58:0;;;;;;;:::i;25695:452::-;26056:17;;26024:10;;26012:41;;;-1:-1:-1;;;26012:41:0;;;;26076:5;;26056:17;-1:-1:-1;;;;;26024:10:0;;26012:39;;:41;;;;;;;;;;;;;;26024:10;;26012:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;;:::i;:::-;:69;;;;:::i;:::-;25994:13;:88;;25971:166;;;;-1:-1:-1;;;25971:166:0;;;;;;;:::i;:::-;26160:69;26191:10;26203:7;:5;:7::i;:::-;-1:-1:-1;;;;;26167:5:0;26160:30;;:69;26212:16;26160:30;:69::i;:::-;26273:98;;;;;;;;26286:4;26273:98;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26273:98:0;;;;;;;;;;;;26343:15;26273:98;;;;;;;;;;;;;;;;26238:18;:145;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26238:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26238:145:0;;;;;;;;;;;;26418:25;26502:10;;26397:123;;26418:29;;26286:4;26418:29;:::i;:::-;26449:16;26467:6;26475:13;26490:10;26514:5;26397:123;;;;;;;;;;;:::i;:::-;;;;;;;;24828:1700;;;;;:::o;27319:540::-;27388:18;27407:10;27388:30;;;;;;-1:-1:-1;;;27388:30:0;;;;;;;;;;;;;;;;;;;;;;:36;;;27380:64;;;;-1:-1:-1;;;27380:64:0;;;;;;;:::i;:::-;27549:15;27509:18;27528:10;27509:30;;;;;;-1:-1:-1;;;27509:30:0;;;;;;;;;;;;;;;;;;;:36;;;27457:18;27476:10;27457:30;;;;;;-1:-1:-1;;;27457:30:0;;;;;;;;;;;;;;;;;;;:49;;;:88;;;;:::i;:::-;:107;;27449:133;;;;-1:-1:-1;;;27449:133:0;;;;;;;:::i;:::-;27651:18;27670:10;27651:30;;;;;;-1:-1:-1;;;27651:30:0;;;;;;;;;;;;;;;;;;;:53;;;27595:18;27614:10;27595:30;;;;;;-1:-1:-1;;;27595:30:0;;;;;;;;;;;;;;;;;;;:53;;;:109;27587:138;;;;-1:-1:-1;;;27587:138:0;;;;;;;:::i;:::-;27776:5;27737:18;27756:10;27737:30;;;;;;-1:-1:-1;;;27737:30:0;;;;;;;;;;;;;;;;;;;;;;:44;;-1:-1:-1;;27737:44:0;;;;;;;;;;;27802:49;;27833:10;;-1:-1:-1;;;;;;;;;;;27802:49:0;;;27737:30;27821:10;;27737:30;;27802:49;:::i;:::-;;;;;;;;27319:540;:::o;44355:710::-;44432:15;44448:10;44432:27;;;;;;-1:-1:-1;;;44432:27:0;;;;;;;;;;;;;;;;;;;;;;:33;;;:41;;:33;:41;:202;;;;;44619:15;44582;44598:10;44582:27;;;;;;-1:-1:-1;;;44582:27:0;;;;;;;;;;;;;;;;;;;:33;;;44550:7;:5;:7::i;:::-;-1:-1:-1;;;;;44536:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44487:15;44503:10;44487:27;;;;;;-1:-1:-1;;;44487:27:0;;;;;;;;;;;;;;;;;;;:46;;;:92;;;;:::i;:::-;:128;;;;:::i;:::-;:147;44432:202;44413:264;;;;-1:-1:-1;;;44413:264:0;;;;;;;:::i;:::-;44743:15;44759:10;44743:27;;;;;;-1:-1:-1;;;44743:27:0;;;;;;;;;;;;;;;;;;;:50;;;44689:15;44705:10;44689:27;;;;;;-1:-1:-1;;;44689:27:0;;;;;;;;;;;;;;;;;;;:50;;;:104;44686:372;;44815:7;:5;:7::i;:::-;-1:-1:-1;;;;;44801:37:0;;44839:15;44855:10;44839:27;;;;;;-1:-1:-1;;;44839:27:0;;;;;;;;;;;;;;;;;;;:41;;;44801:80;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44942:5;44906:15;44922:10;44906:27;;;;;;-1:-1:-1;;;44906:27:0;;;;;;;;;;;;;;;;;;;;;;:41;;-1:-1:-1;;44906:41:0;;;;;;;;;;44964:48;;44995:10;;-1:-1:-1;;;;;;;;;;;44964:48:0;;;44980:1;;44983:10;;-1:-1:-1;;44964:48:0;:::i;44686:372::-;45030:22;45041:10;45030;:22::i;26531:355::-;26620:18;26639:10;26620:30;;;;;;-1:-1:-1;;;26620:30:0;;;;;;;;;;;;;;;;;;;;;;:36;;;26612:56;;;;-1:-1:-1;;;26612:56:0;;;;;;;:::i;:::-;26677:63;26708:10;26720:7;:5;:7::i;:::-;-1:-1:-1;;;;;26684:5:0;26677:30;;:63;26729:10;26677:30;:63::i;:::-;26803:10;26747:18;26766:10;26747:30;;;;;;-1:-1:-1;;;26747:30:0;;;;;;;;;;;;;;;;;;;:53;;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;26828:53:0;;26852:10;;-1:-1:-1;;;;;;;;;;;26828:53:0;;;26837:1;;26840:10;;26864;;26876:4;;26828:53;:::i;:::-;;;;;;;;26531:355;;:::o;22382:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22382:40:0;;;;;;;;;;;;;:::o;22764:37::-;;;;:::o;36294:373::-;36387:25;36413:10;36387:37;;;;;;-1:-1:-1;;;36387:37:0;;;;;;;;;;;;;;;;;;;;;;:43;;;36379:63;;;;-1:-1:-1;;;36379:63:0;;;;;;;:::i;:::-;36451;36482:10;36494:7;:5;:7::i;36451:63::-;36584:10;36521:25;36547:10;36521:37;;;;;;-1:-1:-1;;;36521:37:0;;;;;;;;;;;;;;;;;;;:60;;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;36609:53:0;;36633:10;;-1:-1:-1;;;;;;;;;;;36609:53:0;;;36618:1;;36621:10;;36645;;36657:4;;36609:53;:::i;31435:928::-;31509:19;;;;31508:20;31500:59;;;;-1:-1:-1;;;31500:59:0;;;;;;;:::i;:::-;31624:22;31647:10;31624:34;;;;;;-1:-1:-1;;;31624:34:0;;;;;;;;;;;;;;;;;;;;;;:40;;;:214;;;;;31823:15;31780:22;31803:10;31780:34;;;;;;-1:-1:-1;;;31780:34:0;;;;;;;;;;;;;;;;;;;:40;;;31748:7;:5;:7::i;:::-;-1:-1:-1;;;;;31734:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31678:22;31701:10;31678:34;;;;;;-1:-1:-1;;;31678:34:0;;;;;;;;;;;;;;;;;;;:53;;;:99;;;;:::i;:::-;:142;;;;:::i;:::-;:160;31624:214;31605:276;;;;-1:-1:-1;;;31605:276:0;;;;;;;:::i;:::-;31957:22;31980:10;31957:34;;;;;;-1:-1:-1;;;31957:34:0;;;;;;;;;;;;;;;;;;;:57;;;31896:22;31919:10;31896:34;;;;;;-1:-1:-1;;;31896:34:0;;;;;;;;;;;;;;;;;;;:57;;;:118;31893:463;;32050:22;32073:10;32050:34;;;;;;-1:-1:-1;;;32050:34:0;;;;;;;;;;;;;;;;;;;:49;;;32022:25;:77;;;;32133:22;32156:10;32133:34;;;;;;-1:-1:-1;;;32133:34:0;;;;;;;;;;;;;;;;:49;:34;;;;;:49;;32105:25;:77;32188:22;:34;;32211:10;;32188:34;;;;-1:-1:-1;;;32188:34:0;;;;;;;;;;;;;;;;;;;;;;:48;;-1:-1:-1;;32188:48:0;;;;;;;;;;32252;;32283:10;;-1:-1:-1;;;;;;;;;;;32252:48:0;;;-1:-1:-1;;32271:10:0;;-1:-1:-1;;32252:48:0;:::i;31893:463::-;32318:32;32339:10;32318:20;:32::i;22805:38::-;;;;:::o;35444:847::-;35631:7;:5;:7::i;:::-;-1:-1:-1;;;;;35617:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35597:16;:55;;35589:81;;;;-1:-1:-1;;;35589:81:0;;;;;;;:::i;:::-;35712:7;:5;:7::i;:::-;-1:-1:-1;;;;;35698:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35689:5;:52;;35681:106;;;;-1:-1:-1;;;35681:106:0;;;;;;;:::i;:::-;35818:5;-1:-1:-1;;;;;35811:23:0;;35835:7;:5;:7::i;:::-;35811:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35800:7;:43;;35792:76;;;;-1:-1:-1;;;35792:76:0;;;;;;;:::i;:::-;35886:69;35917:10;35929:7;:5;:7::i;35886:69::-;36005:100;;;;;;;;36025:4;36005:100;;;36031:15;36005:100;;;;;;;;;;;;;;;;;;-1:-1:-1;36005:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;35963:25;:154;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35963:154:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36169:32;36234:10;;36134:149;;36169:36;;36025:4;36169:36;:::i;:::-;36207:16;36225:7;36246;36255:10;36267:5;36134:149;;;;;;;;;;;:::i;30843:586::-;30916:22;30939:10;30916:34;;;;;;-1:-1:-1;;;30916:34:0;;;;;;;;;;;;;;;;;;;;;;:40;;;:48;;:40;:48;30908:85;;;;-1:-1:-1;;;30908:85:0;;;;;;;:::i;:::-;31106:15;31062:22;31085:10;31062:34;;;;;;-1:-1:-1;;;31062:34:0;;;;;;;;;;;;;;;;;;;:40;;;31006:22;31029:10;31006:34;;;;;;-1:-1:-1;;;31006:34:0;;;;;;;;;;;;;;;;;;;:53;;;:96;;;;:::i;:::-;:115;;30998:141;;;;-1:-1:-1;;;30998:141:0;;;;;;;:::i;:::-;31212:22;31235:10;31212:34;;;;;;-1:-1:-1;;;31212:34:0;;;;;;;;;;;;;;;;;;;:57;;;31152:22;31175:10;31152:34;;;;;;-1:-1:-1;;;31152:34:0;;;;;;;;;;;;;;;;;;;:57;;;:117;31144:146;;;;-1:-1:-1;;;31144:146:0;;;;;;;:::i;:::-;31345:5;31302:22;31325:10;31302:34;;;;;;-1:-1:-1;;;31302:34:0;;;;;;;;;;;;;;;;;;;;;;:48;;-1:-1:-1;;31302:48:0;;;;;;;;;;;31372:49;;31403:10;;-1:-1:-1;;;;;;;;;;;31372:49:0;;;-1:-1:-1;;31391:10:0;;31302:34;31372:49;:::i;18523:103::-;18103:12;:10;:12::i;:::-;-1:-1:-1;;;;;18092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;18092:23:0;;18084:68;;;;-1:-1:-1;;;18084:68:0;;;;;;;:::i;:::-;18588:30:::1;18615:1;18588:18;:30::i;:::-;18523:103::o:0;24539:180::-;18103:12;:10;:12::i;:::-;-1:-1:-1;;;;;18092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;18092:23:0;;18084:68;;;;-1:-1:-1;;;18084:68:0;;;;;;;:::i;:::-;24635:15:::1;:21:::0;;;;24661:16:::1;:23:::0;24689:17:::1;:25:::0;24539:180::o;30032:364::-;30125:22;30148:10;30125:34;;;;;;-1:-1:-1;;;30125:34:0;;;;;;;;;;;;;;;;;;;;;;:40;;;30117:60;;;;-1:-1:-1;;;30117:60:0;;;;;;;:::i;:::-;30186:63;30217:10;30229:7;:5;:7::i;30186:63::-;30316:10;30256:22;30279:10;30256:34;;;;;;-1:-1:-1;;;30256:34:0;;;;;;;;;;;;;;;;;;;:57;;;:70;;;;;;;:::i;:::-;;;;-1:-1:-1;;30338:53:0;;30362:10;;-1:-1:-1;;;;;;;;;;;30338:53:0;;;30347:1;;30350:10;;30374;;30347:1;;30338:53;:::i;17872:87::-;17918:7;17945:6;-1:-1:-1;;;;;17945:6:0;17872:87;:::o;30399:438::-;30509:22;30532:10;30509:34;;;;;;-1:-1:-1;;;30509:34:0;;;;;;;;;;;;;;;;;;;;;;:40;;;30501:60;;;;-1:-1:-1;;;30501:60:0;;;;;;;:::i;:::-;30570:63;30601:10;30613:7;:5;:7::i;30570:63::-;30700:10;30640:22;30663:10;30640:34;;;;;;-1:-1:-1;;;30640:34:0;;;;;;;;;;;;;;;;;;;:57;;;:70;;;;;;;:::i;:::-;;;;-1:-1:-1;;30715:52:0;;;;30732:32;30753:10;30732:20;:32::i;:::-;30802:10;-1:-1:-1;;;;;30778:54:0;-1:-1:-1;;;;;;;;;;;30787:1:0;30790:10;30814;30826:5;30778:54;;;;;;;;;:::i;42369:698::-;42512:7;:5;:7::i;:::-;-1:-1:-1;;;;;42498:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42478:16;:55;;42470:81;;;;-1:-1:-1;;;42470:81:0;;;;;;;:::i;:::-;42593:7;:5;:7::i;:::-;-1:-1:-1;;;;;42579:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42570:5;:52;;42562:106;;;;-1:-1:-1;;;42562:106:0;;;;;;;:::i;:::-;42692:4;42681:7;:15;;:30;;;;;42710:1;42700:7;:11;42681:30;42673:51;;;;-1:-1:-1;;;42673:51:0;;;;;;;:::i;:::-;42742:69;42773:10;42785:7;:5;:7::i;:::-;-1:-1:-1;;;;;42749:5:0;42742:30;;:69;42794:16;42742:30;:69::i;:::-;42851:71;;;;;;;;42863:4;42851:71;;;42869:15;42851:71;;;;;;;;;;;;;;;;;;-1:-1:-1;42851:71:0;;;;;;;;;;;;42819:15;:115;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42819:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42976:22;43031:10;;42951:108;;42976:26;;42863:4;42976:26;:::i;:::-;43004:16;43022:7;43043:5;42951:108;;;;;;;;;:::i;40441:398::-;40539:13;40553:10;40539:25;;;;;;-1:-1:-1;;;40539:25:0;;;;;;;;;;;;;;;;;;;;;;:31;;;40531:51;;;;-1:-1:-1;;;40531:51:0;;;;;;;:::i;:::-;40591:63;40622:10;40634:7;:5;:7::i;40591:63::-;40714:10;40663:13;40677:10;40663:25;;;;;;-1:-1:-1;;;40663:25:0;;;;;;;;;;;;;;;;;;;:48;;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;40729:40:0;;;;40746:20;40755:10;40746:8;:20::i;:::-;40804:10;-1:-1:-1;;;;;40780:54:0;-1:-1:-1;;;;;;;;;;;40789:1:0;40792:10;40816;40828:5;40780:54;;;;;;;;;:::i;22486:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22486:54:0;;;;;;;;;;;;;:::o;29184:845::-;29372:7;:5;:7::i;:::-;-1:-1:-1;;;;;29358:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29338:16;:55;;29330:88;;;;-1:-1:-1;;;29330:88:0;;;;;;;:::i;:::-;29454:7;:5;:7::i;:::-;-1:-1:-1;;;;;29440:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29431:5;:52;;29423:106;;;;-1:-1:-1;;;29423:106:0;;;;;;;:::i;:::-;29561:5;29542:15;:24;;:56;;;;;29593:5;29570:19;:28;;29542:56;29534:81;;;;-1:-1:-1;;;29534:81:0;;;;;;;:::i;:::-;29627:69;29658:10;29670:7;:5;:7::i;:::-;-1:-1:-1;;;;;29634:5:0;29627:30;;:69;29679:16;29627:30;:69::i;:::-;29746:110;;;;;;;;29768:4;29746:110;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29746:110:0;;;;;;;;;;;;29840:15;29746:110;;;;;;29706:22;:163;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29706:163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29924:29;29889:132;;29912:10;;29924:33;;29768:4;29924:33;:::i;:::-;29959:15;29976:19;29997:16;30015:5;29889:132;;;;;;;;;;;:::i;:::-;;;;;;;;29184:845;;;;:::o;40845:510::-;40906:13;40920:10;40906:25;;;;;;-1:-1:-1;;;40906:25:0;;;;;;;;;;;;;;;;;;;;;;:31;;;:39;;:31;:39;40898:68;;;;-1:-1:-1;;;40898:68:0;;;;;;;:::i;:::-;41061:15;41026:13;41040:10;41026:25;;;;;;-1:-1:-1;;;41026:25:0;;;;;;;;;;;;;;;;;;;:31;;;40979:13;40993:10;40979:25;;;;;;-1:-1:-1;;;40979:25:0;;;;;;;;;;;;;;;;;;;:44;;;:78;;;;:::i;:::-;:97;;40971:123;;;;-1:-1:-1;;;40971:123:0;;;;;;;:::i;:::-;41158:13;41172:10;41158:25;;;;;;-1:-1:-1;;;41158:25:0;;;;;;;;;;;;;;;;;;;:48;;;41107:13;41121:10;41107:25;;;;;;-1:-1:-1;;;41107:25:0;;;;;;;;;;;;;;;;;;;:48;;;:99;41099:128;;;;-1:-1:-1;;;41099:128:0;;;;;;;:::i;:::-;41273:5;41239:13;41253:10;41239:25;;;;;;-1:-1:-1;;;41239:25:0;;;;;;;;;;;;;;;;;;;;;;:39;;-1:-1:-1;;41239:39:0;;;;;;;;;;;41298:49;;41329:10;;-1:-1:-1;;;;;;;;;;;41298:49:0;;;41314:1;;41317:10;;41239:25;41298:49;:::i;22847:38::-;;;;:::o;39320:781::-;39481:7;:5;:7::i;:::-;-1:-1:-1;;;;;39467:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39447:16;:55;;39439:81;;;;-1:-1:-1;;;39439:81:0;;;;;;;:::i;:::-;39562:7;:5;:7::i;:::-;-1:-1:-1;;;;;39548:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39539:5;:52;;39531:106;;;;-1:-1:-1;;;39531:106:0;;;;;;;:::i;:::-;39668:5;-1:-1:-1;;;;;39661:23:0;;39697:7;;;;;;;;;-1:-1:-1;;;;;39697:7:0;-1:-1:-1;;;;;39685:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39661:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39650:7;:64;;39642:97;;;;-1:-1:-1;;;39642:97:0;;;;;;;:::i;:::-;39757:69;39788:10;39800:7;:5;:7::i;39757:69::-;39864:84;;;;;;;;39834:13;39864:84;;;39883:15;39864:84;;;;;;;;;;;;;;;;;;-1:-1:-1;39864:84:0;;;;;;;;;;;;;;;;;;39834:126;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39834:126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40000:20;;40053:10;;39977:116;;40000:24;;39834:13;40000:24;:::i;:::-;40026:16;40044:7;40065:10;40077:5;39977:116;;;;;;;;;;:::i;:::-;;;;;;;;39320:781;;;;:::o;35128:104::-;35191:5;-1:-1:-1;;;;;35184:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35172:50:0;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35128:104::o;22687:67::-;;;-1:-1:-1;;;;;22687:67:0;;:::o;40104:334::-;40185:13;40199:10;40185:25;;;;;;-1:-1:-1;;;40185:25:0;;;;;;;;;;;;;;;;;;;;;;:31;;;40177:51;;;;-1:-1:-1;;;40177:51:0;;;;;;;:::i;:::-;40237:63;40268:10;40280:7;:5;:7::i;40237:63::-;40358:10;40307:13;40321:10;40307:25;;;;;;-1:-1:-1;;;40307:25:0;;;;;;;;;;;;;;;;;;;:48;;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;40380:53:0;;40404:10;;-1:-1:-1;;;;;;;;;;;40380:53:0;;;40389:1;;40392:10;;40416;;40428:4;;40380:53;:::i;36670:446::-;36780:25;36806:10;36780:37;;;;;;-1:-1:-1;;;36780:37:0;;;;;;;;;;;;;;;;;;;;;;:43;;;36772:63;;;;-1:-1:-1;;;36772:63:0;;;;;;;:::i;:::-;36844;36875:10;36887:7;:5;:7::i;36844:63::-;36979:10;36916:25;36942:10;36916:37;;;;;;-1:-1:-1;;;36916:37:0;;;;;;;;;;;;;;;;;;;:60;;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;36994:52:0;;;;37011:32;37032:10;37011:20;:32::i;:::-;37081:10;-1:-1:-1;;;;;37057:54:0;-1:-1:-1;;;;;;;;;;;37066:1:0;37069:10;37093;37105:5;37057:54;;;;;;;;;:::i;27959:953::-;28026:19;;;;28025:20;28017:59;;;;-1:-1:-1;;;28017:59:0;;;;;;;:::i;:::-;28133:18;28152:10;28133:30;;;;;;-1:-1:-1;;;28133:30:0;;;;;;;;;;;;;;;;;;;;;;:36;;;28125:65;;;;-1:-1:-1;;;28125:65:0;;;;;;;:::i;:::-;28361:15;28321:18;28340:10;28321:30;;;;;;-1:-1:-1;;;28321:30:0;;;;;;;;;;;;;;;;;;;:36;;;28289:7;:5;:7::i;:::-;-1:-1:-1;;;;;28275:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28223:18;28242:10;28223:30;;;;;;-1:-1:-1;;;28223:30:0;;;;;;;;;;;;;;;;;;;:49;;;:95;;;;:::i;:::-;:134;;;;:::i;:::-;:153;28201:235;;;;-1:-1:-1;;;28201:235:0;;;;;;;:::i;:::-;28511:18;28530:10;28511:30;;;;;;-1:-1:-1;;;28511:30:0;;;;;;;;;;;;;;;;;;;:53;;;28454:18;28473:10;28454:30;;;;;;-1:-1:-1;;;28454:30:0;;;;;;;;;;;;;;;;;;;:53;;;:110;28451:454;;28586:7;:5;:7::i;:::-;-1:-1:-1;;;;;28572:30:0;;28603:18;28622:10;28603:30;;;;;;-1:-1:-1;;;28603:30:0;;;;;;;;;;;;;;;;;;;:37;;;28642:18;28661:10;28642:30;;;;;;-1:-1:-1;;;28642:30:0;;;;;;;;;;;;;;;;;;;:44;;;28688:18;28707:10;28688:30;;;;;;-1:-1:-1;;;28688:30:0;;;;;;;;;;;;;;;;;:44;:30;;;;;:44;;28572:167;;-1:-1:-1;;;;;;28572:167:0;;;;;;;;;;;28688:44;;;;;28572:167;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28784:5;28745:18;28764:10;28745:30;;;;;;-1:-1:-1;;;28745:30:0;;;;;;;;;;;;;;;;;;;;;;:44;;-1:-1:-1;;28745:44:0;;;;;;;;;;;28805:48;;28836:10;;-1:-1:-1;;;;;;;;;;;28805:48:0;;;28745:30;28824:10;;-1:-1:-1;;28805:48:0;:::i;28451:454::-;28871:28;28888:10;28871:16;:28::i;37122:587::-;37195:25;37221:10;37195:37;;;;;;-1:-1:-1;;;37195:37:0;;;;;;;;;;;;;;;;;;;;;;:43;;;:51;;:43;:51;37187:80;;;;-1:-1:-1;;;37187:80:0;;;;;;;:::i;:::-;37387:15;37340:25;37366:10;37340:37;;;;;;-1:-1:-1;;;37340:37:0;;;;;;;;;;;;;;;;;;;:43;;;37281:25;37307:10;37281:37;;;;;;-1:-1:-1;;;37281:37:0;;;;;;;;;;;;;;;;;;;:56;;;:102;;;;:::i;:::-;:121;;37273:147;;;;-1:-1:-1;;;37273:147:0;;;;;;;:::i;:::-;37496:25;37522:10;37496:37;;;;;;-1:-1:-1;;;37496:37:0;;;;;;;;;;;;;;;;;;;:60;;;37433:25;37459:10;37433:37;;;;;;-1:-1:-1;;;37433:37:0;;;;;;;;;;;;;;;;;;;:60;;;:123;37425:152;;;;-1:-1:-1;;;37425:152:0;;;;;;;:::i;:::-;37635:5;37589:25;37615:10;37589:37;;;;;;-1:-1:-1;;;37589:37:0;;;;;;;;;;;;;;;;;;;;;;:51;;-1:-1:-1;;37589:51:0;;;;;;;;;;;37652:49;;37683:10;;-1:-1:-1;;;;;;;;;;;37652:49:0;;;37668:1;;37671:10;;37589:37;37652:49;:::i;32556:2528::-;32623:18;32643:19;32691:7;:5;:7::i;:::-;-1:-1:-1;;;;;32677:47:0;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:73;;;;-1:-1:-1;32731:19:0;;;;32730:20;32677:73;32673:2362;;;32828:10;;32816:35;;-1:-1:-1;;;32816:35:0;;-1:-1:-1;;;;;32828:10:0;;;;32816:32;;:35;;32828:10;;32816:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32781:70;;-1:-1:-1;32781:70:0;;-1:-1:-1;32880:7:0;;-1:-1:-1;32880:5:0;;-1:-1:-1;;32880:7:0:i;:::-;-1:-1:-1;;;;;32866:30:0;;32915:1;32959:5;32931:25;;32918:10;:38;;;;:::i;:::-;:46;;;;:::i;:::-;32966:12;32980:5;32866:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33076:10:0;;33064:35;;-1:-1:-1;;;33064:35:0;;-1:-1:-1;;;;;33076:10:0;;;;-1:-1:-1;33064:32:0;;-1:-1:-1;33064:35:0;;33076:10;;33064:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33029:70;;-1:-1:-1;33029:70:0;;-1:-1:-1;33128:7:0;;-1:-1:-1;33128:5:0;;-1:-1:-1;;33128:7:0:i;:::-;-1:-1:-1;;;;;33114:30:0;;33163:1;33207:5;33179:25;;33166:10;:38;;;;:::i;:::-;:46;;;;:::i;:::-;33214:12;33228:5;33114:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33312:10:0;;33300:35;;-1:-1:-1;;;33300:35:0;;-1:-1:-1;;;;;33312:10:0;;;;-1:-1:-1;33300:32:0;;-1:-1:-1;33300:35:0;;33333:1;;33300:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33265:70;;-1:-1:-1;33265:70:0;;-1:-1:-1;33364:7:0;;-1:-1:-1;33364:5:0;;-1:-1:-1;;33364:7:0:i;:::-;-1:-1:-1;;;;;33350:30:0;;33399:1;33443:5;33415:25;;33402:10;:38;;;;:::i;:::-;:46;;;;:::i;:::-;33450:12;33464:5;33350:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33548:10:0;;33536:35;;-1:-1:-1;;;33536:35:0;;-1:-1:-1;;;;;33548:10:0;;;;-1:-1:-1;33536:32:0;;-1:-1:-1;33536:35:0;;33569:1;;33536:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33501:70;;-1:-1:-1;33501:70:0;;-1:-1:-1;33600:7:0;;-1:-1:-1;33600:5:0;;-1:-1:-1;;33600:7:0:i;:::-;-1:-1:-1;;;;;33586:30:0;;33635:1;33679:5;33651:25;;33638:10;:38;;;;:::i;:::-;:46;;;;:::i;:::-;33686:12;33700:5;33586:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33749:19:0;:26;;-1:-1:-1;;33749:26:0;33771:4;33749:26;;;-1:-1:-1;32673:2362:0;;-1:-1:-1;32673:2362:0;;33826:7;:5;:7::i;:::-;-1:-1:-1;;;;;33812:47:0;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33810:52;:75;;;;-1:-1:-1;33866:19:0;;;;33810:75;33807:1228;;;34075:10;;34063:35;;-1:-1:-1;;;34063:35:0;;-1:-1:-1;;;;;34075:10:0;;;;34063:32;;:35;;34075:10;;34063:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34028:70;;-1:-1:-1;34028:70:0;;-1:-1:-1;34127:7:0;;-1:-1:-1;34127:5:0;;-1:-1:-1;;34127:7:0:i;:::-;-1:-1:-1;;;;;34113:30:0;;34162:1;34186:25;;34165:10;34178:5;34165:18;;;;:::i;:::-;:46;;;;:::i;:::-;34213:12;34227:5;34113:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34323:10:0;;34311:35;;-1:-1:-1;;;34311:35:0;;-1:-1:-1;;;;;34323:10:0;;;;-1:-1:-1;34311:32:0;;-1:-1:-1;34311:35:0;;34323:10;;34311:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34276:70;;-1:-1:-1;34276:70:0;;-1:-1:-1;34375:7:0;;-1:-1:-1;34375:5:0;;-1:-1:-1;;34375:7:0:i;:::-;-1:-1:-1;;;;;34361:30:0;;34410:1;34434:25;;34413:10;34426:5;34413:18;;;;:::i;:::-;:46;;;;:::i;:::-;34461:12;34475:5;34361:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34559:10:0;;34547:35;;-1:-1:-1;;;34547:35:0;;-1:-1:-1;;;;;34559:10:0;;;;-1:-1:-1;34547:32:0;;-1:-1:-1;34547:35:0;;34580:1;;34547:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34512:70;;-1:-1:-1;34512:70:0;;-1:-1:-1;34611:7:0;;-1:-1:-1;34611:5:0;;-1:-1:-1;;34611:7:0:i;:::-;-1:-1:-1;;;;;34597:30:0;;34646:1;34670:25;;34649:10;34662:5;34649:18;;;;:::i;:::-;:46;;;;:::i;:::-;34697:12;34711:5;34597:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34795:10:0;;34783:35;;-1:-1:-1;;;34783:35:0;;-1:-1:-1;;;;;34795:10:0;;;;-1:-1:-1;34783:32:0;;-1:-1:-1;34783:35:0;;34816:1;;34783:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34748:70;;-1:-1:-1;34748:70:0;;-1:-1:-1;34847:7:0;;-1:-1:-1;34847:5:0;;-1:-1:-1;;34847:7:0:i;:::-;-1:-1:-1;;;;;34833:30:0;;34882:1;34906:25;;34885:10;34898:5;34885:18;;;;:::i;:::-;:46;;;;:::i;:::-;34933:12;34947:5;34833:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34996:19:0;:27;;-1:-1:-1;;34996:27:0;;;-1:-1:-1;;33807:1228:0;35044:10;35041:36;;;35058:16;:14;:16::i;:::-;32556:2528;;;:::o;43825:524::-;43888:15;43904:10;43888:27;;;;;;-1:-1:-1;;;43888:27:0;;;;;;;;;;;;;;;;;;;;;;:33;;;:41;;:33;:41;43880:70;;;;-1:-1:-1;;;43880:70:0;;;;;;;:::i;:::-;44049:15;44012;44028:10;44012:27;;;;;;-1:-1:-1;;;44012:27:0;;;;;;;;;;;;;;;;;;;:33;;;43963:15;43979:10;43963:27;;;;;;-1:-1:-1;;;43963:27:0;;;;;;;;;;;;;;;;;;;:46;;;:82;;;;:::i;:::-;:101;;43955:127;;;;-1:-1:-1;;;43955:127:0;;;;;;;:::i;:::-;44148:15;44164:10;44148:27;;;;;;-1:-1:-1;;;44148:27:0;;;;;;;;;;;;;;;;;;;:50;;;44095:15;44111:10;44095:27;;;;;;-1:-1:-1;;;44095:27:0;;;;;;;;;;;;;;;;;;;:50;;;:103;44087:132;;;;-1:-1:-1;;;44087:132:0;;;;;;;:::i;:::-;44267:5;44231:15;44247:10;44231:27;;;;;;-1:-1:-1;;;44231:27:0;;;;;;;;;;;;;;;;;;;;;;:41;;-1:-1:-1;;44231:41:0;;;;;;;;;;;44292:49;;44323:10;;-1:-1:-1;;;;;;;;;;;44292:49:0;;;44308:1;;44311:10;;44231:27;44292:49;:::i;37715:1099::-;37802:25;37828:10;37802:37;;;;;;-1:-1:-1;;;37802:37:0;;;;;;;;;;;;;;;;;;;;;;:43;;;:51;;:43;:51;:232;;;;;38019:15;37972:25;37998:10;37972:37;;;;;;-1:-1:-1;;;37972:37:0;;;;;;;;;;;;;;;;;;;:43;;;37940:7;:5;:7::i;:::-;-1:-1:-1;;;;;37926:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37867:25;37893:10;37867:37;;;;;;-1:-1:-1;;;37867:37:0;;;;;;;;;;;;;;;;;;;:56;;;:102;;;;:::i;:::-;:148;;;;:::i;:::-;:167;37802:232;37783:294;;;;-1:-1:-1;;;37783:294:0;;;;;;;:::i;:::-;38145:15;38090:25;38116:10;38090:37;;;;;;-1:-1:-1;;;38090:37:0;;;;;;;;;;;;;;;;;;;:52;;;:70;38082:99;;;;-1:-1:-1;;;38082:99:0;;;;;;;:::i;:::-;38260:25;38286:10;38260:37;;;;;;-1:-1:-1;;;38260:37:0;;;;;;;;;;;;;;;;;;;:60;;;38196:25;38222:10;38196:37;;;;;;-1:-1:-1;;;38196:37:0;;;;;;;;;;;;;;;;;;;:60;;;:124;38193:614;;38331:25;38357:10;38331:37;;;;;;-1:-1:-1;;;38331:37:0;;;;;;;;;;;;;;;;;:44;:37;;;;;:44;;;;38328:300;;;38391:5;-1:-1:-1;;;;;38384:22:0;;38407:7;:5;:7::i;:::-;38416:25;38442:10;38416:37;;;;;;-1:-1:-1;;;38416:37:0;;;;;;;;;;;;;;;;;;;:51;;;38384:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38328:300;;;38488:133;38519:7;:5;:7::i;:::-;38542;:5;:7::i;:::-;-1:-1:-1;;;;;38528:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38569:25;38595:10;38569:37;;;;;;-1:-1:-1;;;38569:37:0;;;;;;;;;;;;;;;;;;;:51;;;38495:5;-1:-1:-1;;;;;38488:30:0;;;:133;;;;;;:::i;:::-;38681:5;38635:25;38661:10;38635:37;;;;;;-1:-1:-1;;;38635:37:0;;;;;;;;;;;;;;;;;;;;;;:51;;-1:-1:-1;;38635:51:0;;;;;;;;;;38703:48;;38734:10;;-1:-1:-1;;;;;;;;;;;38703:48:0;;;38719:1;;38722:10;;-1:-1:-1;;38703:48:0;:::i;38193:614::-;38769:32;38790:10;38769:20;:32::i;43413:406::-;43513:15;43529:10;43513:27;;;;;;-1:-1:-1;;;43513:27:0;;;;;;;;;;;;;;;;;;;;;;:33;;;43505:53;;;;-1:-1:-1;;;43505:53:0;;;;;;;:::i;:::-;43567:63;43598:10;43610:7;:5;:7::i;43567:63::-;43692:10;43639:15;43655:10;43639:27;;;;;;-1:-1:-1;;;43639:27:0;;;;;;;;;;;;;;;;;;;:50;;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;43707:42:0;;;;43724:22;43735:10;43724;:22::i;:::-;43784:10;-1:-1:-1;;;;;43760:54:0;-1:-1:-1;;;;;;;;;;;43769:1:0;43772:10;43796;43808:5;43760:54;;;;;;;;;:::i;38856:124::-;38895:14;38924:5;-1:-1:-1;;;;;38912:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38953:10;:19;;-1:-1:-1;;;;;;38953:19:0;-1:-1:-1;;;;;38953:19:0;;;;;;;;;;-1:-1:-1;38856:124:0:o;39125:92::-;39165:44;39191:5;-1:-1:-1;;;;;39184:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39165:18;:44::i;18781:201::-;18103:12;:10;:12::i;:::-;-1:-1:-1;;;;;18092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;18092:23:0;;18084:68;;;;-1:-1:-1;;;18084:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18870:22:0;::::1;18862:73;;;;-1:-1:-1::0;;;18862:73:0::1;;;;;;;:::i;:::-;18946:28;18965:8;18946:18;:28::i;43070:340::-:0;43153:15;43169:10;43153:27;;;;;;-1:-1:-1;;;43153:27:0;;;;;;;;;;;;;;;;;;;;;;:33;;;43145:53;;;;-1:-1:-1;;;43145:53:0;;;;;;;:::i;:::-;43207:63;43238:10;43250:7;:5;:7::i;43207:63::-;43330:10;43277:15;43293:10;43277:27;;;;;;-1:-1:-1;;;43277:27:0;;;;;;;;;;;;;;;;;;;:50;;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;43352:53:0;;43376:10;;-1:-1:-1;;;;;;;;;;;43352:53:0;;;43361:1;;43364:10;;43388;;43400:4;;43352:53;:::i;23039:46::-;;;;:::o;22655:25::-;;;-1:-1:-1;;;;;22655:25:0;;:::o;22595:30::-;;;:::o;22429:53::-;;;;;;;;;;;;12840:248;12984:96;13004:5;13034:27;;;13063:4;13069:2;13073:5;13011:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;13011:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13011:68:0;-1:-1:-1;;;;;;13011:68:0;;;;;;;;;;12984:19;:96::i;16596:98::-;16676:10;16596:98;:::o;19142:191::-;19216:16;19235:6;;-1:-1:-1;;;;;19252:17:0;;;-1:-1:-1;;;;;;19252:17:0;;;;;;19285:40;;19235:6;;;;;;;19285:40;;19216:16;19285:40;19142:191;;:::o;15194:716::-;15618:23;15644:69;15672:4;15644:69;;;;;;;;;;;;;;;;;15652:5;-1:-1:-1;;;;;15644:27:0;;;:69;;;;;:::i;:::-;15728:17;;15618:95;;-1:-1:-1;15728:21:0;15724:179;;15825:10;15814:30;;;;;;;;;;;;:::i;:::-;15806:85;;;;-1:-1:-1;;;15806:85:0;;;;;;;:::i;3916:229::-;4053:12;4085:52;4107:6;4115:4;4121:1;4124:12;4085:21;:52::i;:::-;4078:59;;3916:229;;;;;;:::o;5036:510::-;5206:12;5264:5;5239:21;:30;;5231:81;;;;-1:-1:-1;;;5231:81:0;;;;;;;:::i;:::-;5331:18;5342:6;5331:10;:18::i;:::-;5323:60;;;;-1:-1:-1;;;5323:60:0;;;;;;;:::i;:::-;5397:12;5411:23;5438:6;-1:-1:-1;;;;;5438:11:0;5457:5;5464:4;5438:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5396:73;;;;5487:51;5504:7;5513:10;5525:12;5487:16;:51::i;:::-;5480:58;5036:510;-1:-1:-1;;;;;;;5036:510:0:o;1171:326::-;1231:4;1488:1;1466:7;-1:-1:-1;;;;;1466:12:0;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;;1171:326;-1:-1:-1;;1171:326:0:o;7722:712::-;7872:12;7901:7;7897:530;;;-1:-1:-1;7932:10:0;7925:17;;7897:530;8046:17;;:21;8042:374;;8244:10;8238:17;8305:15;8292:10;8288:2;8284:19;8277:44;8192:148;8387:12;8380:20;;-1:-1:-1;;;8380:20:0;;;;;;;;:::i;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:582::-;;;;;;736:3;724:9;715:7;711:23;707:33;704:2;;;758:6;750;743:22;704:2;795:9;789:16;814:33;841:5;814:33;:::i;:::-;866:5;856:15;;;911:2;900:9;896:18;890:25;880:35;;955:2;944:9;940:18;934:25;924:35;;999:2;988:9;984:18;978:25;968:35;;1048:3;1037:9;1033:19;1027:26;1062:34;1088:7;1062:34;:::i;:::-;1115:7;1105:17;;;694:434;;;;;;;;:::o;1133:253::-;;1242:2;1230:9;1221:7;1217:23;1213:32;1210:2;;;1263:6;1255;1248:22;1210:2;1307:9;1294:23;1326:30;1350:5;1326:30;:::i;1391:257::-;;1511:2;1499:9;1490:7;1486:23;1482:32;1479:2;;;1532:6;1524;1517:22;1479:2;1569:9;1563:16;1588:30;1612:5;1588:30;:::i;1653:190::-;;1765:2;1753:9;1744:7;1740:23;1736:32;1733:2;;;1786:6;1778;1771:22;1733:2;-1:-1:-1;1814:23:1;;1723:120;-1:-1:-1;1723:120:1:o;1848:194::-;;1971:2;1959:9;1950:7;1946:23;1942:32;1939:2;;;1992:6;1984;1977:22;1939:2;-1:-1:-1;2020:16:1;;1929:113;-1:-1:-1;1929:113:1:o;2047:258::-;;;2176:2;2164:9;2155:7;2151:23;2147:32;2144:2;;;2197:6;2189;2182:22;2144:2;-1:-1:-1;;2225:23:1;;;2295:2;2280:18;;;2267:32;;-1:-1:-1;2134:171:1:o;2310:389::-;;;;2453:2;2441:9;2432:7;2428:23;2424:32;2421:2;;;2474:6;2466;2459:22;2421:2;2515:9;2502:23;2492:33;;2572:2;2561:9;2557:18;2544:32;2534:42;;2626:2;2615:9;2611:18;2598:32;2639:30;2663:5;2639:30;:::i;:::-;2688:5;2678:15;;;2411:288;;;;;:::o;2704:527::-;;;;;;2881:3;2869:9;2860:7;2856:23;2852:33;2849:2;;;2903:6;2895;2888:22;2849:2;2944:9;2931:23;2921:33;;3001:2;2990:9;2986:18;2973:32;2963:42;;3055:2;3044:9;3040:18;3027:32;3068:30;3092:5;3068:30;:::i;:::-;2839:392;;;;-1:-1:-1;3117:5:1;;3169:2;3154:18;;3141:32;;-1:-1:-1;3220:3:1;3205:19;3192:33;;2839:392;-1:-1:-1;;2839:392:1:o;3236:326::-;;;;3382:2;3370:9;3361:7;3357:23;3353:32;3350:2;;;3403:6;3395;3388:22;3350:2;-1:-1:-1;;3431:23:1;;;3501:2;3486:18;;3473:32;;-1:-1:-1;3552:2:1;3537:18;;;3524:32;;3340:222;-1:-1:-1;3340:222:1:o;3567:531::-;;;;;;3746:3;3734:9;3725:7;3721:23;3717:33;3714:2;;;3768:6;3760;3753:22;3714:2;3809:9;3796:23;3786:33;;3866:2;3855:9;3851:18;3838:32;3828:42;;3917:2;3906:9;3902:18;3889:32;3879:42;;3971:2;3960:9;3956:18;3943:32;3984;4010:5;3984:32;:::i;:::-;3704:394;;;;-1:-1:-1;3704:394:1;;4087:3;4072:19;4059:33;;3704:394;-1:-1:-1;;3704:394:1:o;4103:395::-;;;;;4266:3;4254:9;4245:7;4241:23;4237:33;4234:2;;;4288:6;4280;4273:22;4234:2;-1:-1:-1;;4316:23:1;;;4386:2;4371:18;;4358:32;;-1:-1:-1;4437:2:1;4422:18;;4409:32;;4488:2;4473:18;4460:32;;-1:-1:-1;4224:274:1;-1:-1:-1;4224:274:1:o;4503:::-;;4670:6;4664:13;4686:53;4732:6;4727:3;4720:4;4712:6;4708:17;4686:53;:::i;:::-;4755:16;;;;;4640:137;-1:-1:-1;;4640:137:1:o;4782:203::-;-1:-1:-1;;;;;4946:32:1;;;;4928:51;;4916:2;4901:18;;4883:102::o;4990:375::-;-1:-1:-1;;;;;5248:15:1;;;5230:34;;5300:15;;;;5295:2;5280:18;;5273:43;5347:2;5332:18;;5325:34;;;;5180:2;5165:18;;5147:218::o;5370:274::-;-1:-1:-1;;;;;5562:32:1;;;;5544:51;;5626:2;5611:18;;5604:34;5532:2;5517:18;;5499:145::o;5649:561::-;-1:-1:-1;;;;;5954:32:1;;;;5936:51;;6018:2;6003:18;;5996:34;;;;6061:2;6046:18;;6039:34;;;;6104:2;6089:18;;6082:34;6147:3;6132:19;;6125:35;5974:3;6176:19;;6169:35;5923:3;5908:19;;5890:320::o;6215:187::-;6380:14;;6373:22;6355:41;;6343:2;6328:18;;6310:92::o;6407:545::-;6713:14;;6706:22;6688:41;;6760:2;6745:18;;6738:34;;;;6803:2;6788:18;;6781:34;;;;6846:2;6831:18;;6824:34;6889:3;6874:19;;6867:35;6933:3;6918:19;;6911:35;6675:3;6660:19;;6642:310::o;6957:699::-;7313:14;;7306:22;7288:41;;7360:2;7345:18;;7338:34;;;;7403:2;7388:18;;7381:34;;;;7446:2;7431:18;;7424:34;;;;7489:3;7474:19;;7467:35;7533:3;7518:19;;7511:35;7590:14;7583:22;7577:3;7562:19;;7555:51;7637:3;7622:19;;7615:35;7275:3;7260:19;;7242:414::o;7661:617::-;7995:14;;7988:22;7970:41;;8042:2;8027:18;;8020:34;;;;8085:2;8070:18;;8063:34;;;;8128:2;8113:18;;8106:34;;;;8171:3;8156:19;;8149:35;8215:3;8200:19;;8193:35;8259:3;8244:19;;8237:35;7957:3;7942:19;;7924:354::o;8283:700::-;8643:14;;8636:22;8618:41;;8690:2;8675:18;;8668:34;;;;8733:2;8718:18;;8711:34;;;;8776:2;8761:18;;8754:34;;;;8819:3;8804:19;;8797:35;8863:3;8848:19;;8841:35;8907:3;8892:19;;8885:35;8969:6;8957:19;8951:3;8936:19;;8929:48;8605:3;8590:19;;8572:411::o;8988:185::-;9142:25;;;9130:2;9115:18;;9097:76::o;9178:337::-;9382:25;;;9438:2;9423:18;;9416:34;;;;9493:14;9486:22;9481:2;9466:18;;9459:50;9370:2;9355:18;;9337:178::o;9520:420::-;9751:25;;;9807:2;9792:18;;9785:34;;;;9867:6;9855:19;9850:2;9835:18;;9828:47;9918:14;9911:22;9906:2;9891:18;;9884:50;9738:3;9723:19;;9705:235::o;9945:409::-;10178:25;;;10234:2;10219:18;;10212:34;;;;10277:2;10262:18;;10255:34;10332:14;10325:22;10320:2;10305:18;;10298:50;10165:3;10150:19;;10132:222::o;15228:383::-;;15377:2;15366:9;15359:21;15409:6;15403:13;15452:6;15447:2;15436:9;15432:18;15425:34;15468:66;15527:6;15522:2;15511:9;15507:18;15502:2;15494:6;15490:15;15468:66;:::i;:::-;15595:2;15574:15;-1:-1:-1;;15570:29:1;15555:45;;;;15602:2;15551:54;;15349:262;-1:-1:-1;;15349:262:1:o;15616:331::-;15818:2;15800:21;;;15857:1;15837:18;;;15830:29;-1:-1:-1;;;15890:2:1;15875:18;;15868:38;15938:2;15923:18;;15790:157::o;15952:352::-;16154:2;16136:21;;;16193:2;16173:18;;;16166:30;16232;16227:2;16212:18;;16205:58;16295:2;16280:18;;16126:178::o;16309:402::-;16511:2;16493:21;;;16550:2;16530:18;;;16523:30;16589:34;16584:2;16569:18;;16562:62;-1:-1:-1;;;16655:2:1;16640:18;;16633:36;16701:3;16686:19;;16483:228::o;16716:337::-;16918:2;16900:21;;;16957:2;16937:18;;;16930:30;-1:-1:-1;;;16991:2:1;16976:18;;16969:43;17044:2;17029:18;;16890:163::o;17058:337::-;17260:2;17242:21;;;17299:2;17279:18;;;17272:30;-1:-1:-1;;;17333:2:1;17318:18;;17311:43;17386:2;17371:18;;17232:163::o;17400:336::-;17602:2;17584:21;;;17641:2;17621:18;;;17614:30;-1:-1:-1;;;17675:2:1;17660:18;;17653:42;17727:2;17712:18;;17574:162::o;17741:402::-;17943:2;17925:21;;;17982:2;17962:18;;;17955:30;18021:34;18016:2;18001:18;;17994:62;-1:-1:-1;;;18087:2:1;18072:18;;18065:36;18133:3;18118:19;;17915:228::o;18148:340::-;18350:2;18332:21;;;18389:2;18369:18;;;18362:30;-1:-1:-1;;;18423:2:1;18408:18;;18401:46;18479:2;18464:18;;18322:166::o;18493:352::-;18695:2;18677:21;;;18734:2;18714:18;;;18707:30;18773;18768:2;18753:18;;18746:58;18836:2;18821:18;;18667:178::o;18850:354::-;19052:2;19034:21;;;19091:2;19071:18;;;19064:30;19130:32;19125:2;19110:18;;19103:60;19195:2;19180:18;;19024:180::o;19209:350::-;19411:2;19393:21;;;19450:2;19430:18;;;19423:30;19489:28;19484:2;19469:18;;19462:56;19550:2;19535:18;;19383:176::o;19564:342::-;19766:2;19748:21;;;19805:2;19785:18;;;19778:30;-1:-1:-1;;;19839:2:1;19824:18;;19817:48;19897:2;19882:18;;19738:168::o;19911:348::-;20113:2;20095:21;;;20152:2;20132:18;;;20125:30;20191:26;20186:2;20171:18;;20164:54;20250:2;20235:18;;20085:174::o;20264:340::-;20466:2;20448:21;;;20505:2;20485:18;;;20478:30;-1:-1:-1;;;20539:2:1;20524:18;;20517:46;20595:2;20580:18;;20438:166::o;20609:356::-;20811:2;20793:21;;;20830:18;;;20823:30;20889:34;20884:2;20869:18;;20862:62;20956:2;20941:18;;20783:182::o;20970:405::-;21172:2;21154:21;;;21211:2;21191:18;;;21184:30;21250:34;21245:2;21230:18;;21223:62;-1:-1:-1;;;21316:2:1;21301:18;;21294:39;21365:3;21350:19;;21144:231::o;21380:346::-;21582:2;21564:21;;;21621:2;21601:18;;;21594:30;-1:-1:-1;;;21655:2:1;21640:18;;21633:52;21717:2;21702:18;;21554:172::o;21731:340::-;21933:2;21915:21;;;21972:2;21952:18;;;21945:30;-1:-1:-1;;;22006:2:1;21991:18;;21984:46;22062:2;22047:18;;21905:166::o;22076:344::-;22278:2;22260:21;;;22317:2;22297:18;;;22290:30;-1:-1:-1;;;22351:2:1;22336:18;;22329:50;22411:2;22396:18;;22250:170::o;22425:355::-;22627:2;22609:21;;;22666:2;22646:18;;;22639:30;22705:33;22700:2;22685:18;;22678:61;22771:2;22756:18;;22599:181::o;22785:353::-;22987:2;22969:21;;;23026:2;23006:18;;;22999:30;23065:31;23060:2;23045:18;;23038:59;23129:2;23114:18;;22959:179::o;23143:342::-;23345:2;23327:21;;;23384:2;23364:18;;;23357:30;-1:-1:-1;;;23418:2:1;23403:18;;23396:48;23476:2;23461:18;;23317:168::o;23490:406::-;23692:2;23674:21;;;23731:2;23711:18;;;23704:30;23770:34;23765:2;23750:18;;23743:62;-1:-1:-1;;;23836:2:1;23821:18;;23814:40;23886:3;23871:19;;23664:232::o;23901:339::-;24103:2;24085:21;;;24142:2;24122:18;;;24115:30;-1:-1:-1;;;24176:2:1;24161:18;;24154:45;24231:2;24216:18;;24075:165::o;24245:340::-;24447:2;24429:21;;;24486:2;24466:18;;;24459:30;-1:-1:-1;;;24520:2:1;24505:18;;24498:46;24576:2;24561:18;;24419:166::o;24590:344::-;24792:2;24774:21;;;24831:2;24811:18;;;24804:30;-1:-1:-1;;;24865:2:1;24850:18;;24843:50;24925:2;24910:18;;24764:170::o;24939:330::-;25141:2;25123:21;;;25180:1;25160:18;;;25153:29;-1:-1:-1;;;25213:2:1;25198:18;;25191:37;25260:2;25245:18;;25113:156::o;25873:545::-;26154:25;;;26210:2;26195:18;;26188:34;;;;26253:2;26238:18;;26231:34;;;;26308:14;26301:22;26296:2;26281:18;;26274:50;26355:3;26340:19;;26333:35;26399:3;26384:19;;26377:35;26141:3;26126:19;;26108:310::o;26423:391::-;26654:25;;;26710:2;26695:18;;26688:34;;;;26753:2;26738:18;;26731:34;26796:2;26781:18;;26774:34;26641:3;26626:19;;26608:206::o;26819:546::-;27104:25;;;27160:2;27145:18;;27138:34;;;;27203:2;27188:18;;27181:34;;;;27246:2;27231:18;;27224:34;27307:6;27295:19;27289:3;27274:19;;27267:48;27346:3;27331:19;;27324:35;27091:3;27076:19;;27058:307::o;27370:463::-;27629:25;;;27685:2;27670:18;;27663:34;;;;27728:2;27713:18;;27706:34;;;;27771:2;27756:18;;27749:34;27814:3;27799:19;;27792:35;27616:3;27601:19;;27583:250::o;27838:128::-;;27909:1;27905:6;27902:1;27899:13;27896:2;;;27915:18;;:::i;:::-;-1:-1:-1;27951:9:1;;27886:80::o;27971:217::-;;28037:1;28027:2;;-1:-1:-1;;;28062:31:1;;28116:4;28113:1;28106:15;28144:4;28069:1;28134:15;28027:2;-1:-1:-1;28173:9:1;;28017:171::o;28193:168::-;;28299:1;28295;28291:6;28287:14;28284:1;28281:21;28276:1;28269:9;28262:17;28258:45;28255:2;;;28306:18;;:::i;:::-;-1:-1:-1;28346:9:1;;28245:116::o;28366:125::-;;28434:1;28431;28428:8;28425:2;;;28439:18;;:::i;:::-;-1:-1:-1;28476:9:1;;28415:76::o;28496:258::-;28568:1;28578:113;28592:6;28589:1;28586:13;28578:113;;;28668:11;;;28662:18;28649:11;;;28642:39;28614:2;28607:10;28578:113;;;28709:6;28706:1;28703:13;28700:2;;;-1:-1:-1;;28744:1:1;28726:16;;28719:27;28549:205::o;28759:127::-;28820:10;28815:3;28811:20;28808:1;28801:31;28851:4;28848:1;28841:15;28875:4;28872:1;28865:15;28891:133;-1:-1:-1;;;;;28968:31:1;;28958:42;;28948:2;;29014:1;29011;29004:12;29029:120;29117:5;29110:13;29103:21;29096:5;29093:32;29083:2;;29139:1;29136;29129:12;29154:119;29241:6;29234:5;29230:18;29223:5;29220:29;29210:2;;29263:1;29260;29253:12

Swarm Source

ipfs://f4404e6c53ce2d0abb7e11c5cd069e6c18ea7bd23f060d34ea159ec8490cf593
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.