ETH Price: $3,235.98 (-0.61%)
 

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Collect Eggs187043572023-12-03 7:23:35739 days ago1701588215IN
0x6eB5A3fE...9770437e0
0 ETH0.0045094625.70020179
Exit Position186797832023-11-29 20:54:35743 days ago1701291275IN
0x6eB5A3fE...9770437e0
0 ETH0.0120483445.1580235
Mint Position186797222023-11-29 20:42:23743 days ago1701290543IN
0x6eB5A3fE...9770437e0
0 ETH0.0235196942.44076664
Mint Position186797012023-11-29 20:38:11743 days ago1701290291IN
0x6eB5A3fE...9770437e0
0 ETH0.0279766640.86116949
Swap V2186796792023-11-29 20:33:47743 days ago1701290027IN
0x6eB5A3fE...9770437e0
0 ETH0.0072101744.62376524
Wrap ETH186158572023-11-20 22:04:47752 days ago1700517887IN
0x6eB5A3fE...9770437e0
0 ETH0.0020364348.09833882
Exit Position185893482023-11-17 4:53:59755 days ago1700196839IN
0x6eB5A3fE...9770437e0
0 ETH0.0063624623.66380896
Exit Position185893462023-11-17 4:53:35755 days ago1700196815IN
0x6eB5A3fE...9770437e0
0 ETH0.0061023323.39970896
Exit Position185893432023-11-17 4:52:59755 days ago1700196779IN
0x6eB5A3fE...9770437e0
0 ETH0.0068621125.07459789
Swap V3185893142023-11-17 4:47:11755 days ago1700196431IN
0x6eB5A3fE...9770437e0
0 ETH0.0067122924.18776132
Mint Position185892532023-11-17 4:34:59755 days ago1700195699IN
0x6eB5A3fE...9770437e0
0 ETH0.0129389925.44606992
Mint Position185892432023-11-17 4:32:59755 days ago1700195579IN
0x6eB5A3fE...9770437e0
0 ETH0.0129502325.02348748
Mint Position185892132023-11-17 4:26:59755 days ago1700195219IN
0x6eB5A3fE...9770437e0
0 ETH0.0152287225.26763483
Swap V3185892052023-11-17 4:25:23755 days ago1700195123IN
0x6eB5A3fE...9770437e0
0 ETH0.0030151323.22369056
Swap V3185892002023-11-17 4:24:23755 days ago1700195063IN
0x6eB5A3fE...9770437e0
0 ETH0.0074617925.25149858
Swap V2185891732023-11-17 4:18:59755 days ago1700194739IN
0x6eB5A3fE...9770437e0
0 ETH0.0027271724.31457208
Wrap ETH185891682023-11-17 4:17:59755 days ago1700194679IN
0x6eB5A3fE...9770437e0
0 ETH0.0011862828.01084825
Swap V2185891612023-11-17 4:16:35755 days ago1700194595IN
0x6eB5A3fE...9770437e0
0 ETH0.0039018525.73222519
Swap V2185891542023-11-17 4:15:11755 days ago1700194511IN
0x6eB5A3fE...9770437e0
0 ETH0.0036212624.9451512
Swap V2185891492023-11-17 4:14:11755 days ago1700194451IN
0x6eB5A3fE...9770437e0
0 ETH0.0037802726.86896984
Swap V2185891422023-11-17 4:12:47755 days ago1700194367IN
0x6eB5A3fE...9770437e0
0 ETH0.0042260725.5310596
Swap V2185891372023-11-17 4:11:47755 days ago1700194307IN
0x6eB5A3fE...9770437e0
0 ETH0.0038045627.43409987
Swap V2185891302023-11-17 4:10:23755 days ago1700194223IN
0x6eB5A3fE...9770437e0
0 ETH0.0035894425.01912347
Swap V2185891242023-11-17 4:09:11755 days ago1700194151IN
0x6eB5A3fE...9770437e0
0 ETH0.0035876225.00643014
Exit Position185891072023-11-17 4:05:47755 days ago1700193947IN
0x6eB5A3fE...9770437e0
0 ETH0.0089843127.12556111
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Deposit186158572023-11-20 22:04:47752 days ago1700517887
0x6eB5A3fE...9770437e0
0.01137435 ETH
Transfer186050612023-11-19 9:47:47753 days ago1700387267
0x6eB5A3fE...9770437e0
0.01137435 ETH
Deposit185891682023-11-17 4:17:59755 days ago1700194679
0x6eB5A3fE...9770437e0
0.11959402 ETH
Transfer185885502023-11-17 2:13:59755 days ago1700187239
0x6eB5A3fE...9770437e0
0.1058709 ETH
Deposit185844602023-11-16 12:30:59756 days ago1700137859
0x6eB5A3fE...9770437e0
0.8 ETH
Transfer185793452023-11-15 19:23:11757 days ago1700076191
0x6eB5A3fE...9770437e0
0.33083787 ETH
Transfer185646592023-11-13 18:06:11759 days ago1699898771
0x6eB5A3fE...9770437e0
0.47716117 ETH
Deposit185610642023-11-13 6:00:47759 days ago1699855247
0x6eB5A3fE...9770437e0
2.7 ETH
Deposit185596652023-11-13 1:20:11760 days ago1699838411
0x6eB5A3fE...9770437e0
1 ETH
Deposit185594532023-11-13 0:37:47760 days ago1699835867
0x6eB5A3fE...9770437e0
1 ETH
Deposit185588702023-11-12 22:39:59760 days ago1699828799
0x6eB5A3fE...9770437e0
3 ETH
Transfer185588322023-11-12 22:32:23760 days ago1699828343
0x6eB5A3fE...9770437e0
0.12813931 ETH
Transfer185585472023-11-12 21:34:59760 days ago1699824899
0x6eB5A3fE...9770437e0
4 ETH
Deposit185566952023-11-12 15:22:35760 days ago1699802555
0x6eB5A3fE...9770437e0
5 ETH
Deposit185545672023-11-12 8:13:11760 days ago1699776791
0x6eB5A3fE...9770437e0
5 ETH
Deposit185443852023-11-10 21:59:47762 days ago1699653587
0x6eB5A3fE...9770437e0
1.5 ETH
Transfer185437702023-11-10 19:56:23762 days ago1699646183
0x6eB5A3fE...9770437e0
0.0829157 ETH
Transfer185429602023-11-10 17:13:23762 days ago1699636403
0x6eB5A3fE...9770437e0
5 ETH
Transfer185420582023-11-10 14:11:35762 days ago1699625495
0x6eB5A3fE...9770437e0
0.0025 ETH
Transfer185399882023-11-10 7:14:47762 days ago1699600487
0x6eB5A3fE...9770437e0
1.38812354 ETH
Deposit185387442023-11-10 3:04:35762 days ago1699585475
0x6eB5A3fE...9770437e0
5 ETH
Deposit185373942023-11-09 22:33:11763 days ago1699569191
0x6eB5A3fE...9770437e0
5 ETH
Transfer185332302023-11-09 8:35:47763 days ago1699518947
0x6eB5A3fE...9770437e0
2.06550894 ETH
Deposit185277842023-11-08 14:18:23764 days ago1699453103
0x6eB5A3fE...9770437e0
7 ETH
Transfer185261122023-11-08 8:41:35764 days ago1699432895
0x6eB5A3fE...9770437e0
2.9268842 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
XBC_Cock_Coup

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-11-05
*/

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

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


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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

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

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

// 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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: bag.sol


pragma solidity 0.8.19;



interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);

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

library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA');
    }
}

interface IV3SwapRouter {
    struct ExactInputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint256 deadline;
        uint256 amountIn;
        uint256 amountOutMinimum;
        uint160 sqrtPriceLimitX96;
    }

    function exactInputSingle(ExactInputSingleParams calldata params) external returns (uint256 amountOut);
    function factory() external view returns (address);
	function positionManager() external view returns (address);
	function WETH9() external view returns (address);
}

interface IV3Factory {
	function createPool(address _tokenA, address _tokenB, uint24 _fee) external returns (address);
    function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool);

}

interface IV3Pool {
	function initialize(uint160 _sqrtPriceX96) external;
    function slot0() external view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint32 feeProtocol, bool unlocked);
    }

interface IV3NonfungiblePositionManager {
    struct MintParams {
        address token0;
        address token1;
        uint24 fee;
        int24 tickLower;
        int24 tickUpper;
        uint256 amount0Desired;
        uint256 amount1Desired;
        uint256 amount0Min;
        uint256 amount1Min;
        address recipient;
        uint256 deadline;
    }

    struct IncreaseLiquidityParams {
        uint256 tokenId;
        uint256 amount0Desired;
        uint256 amount1Desired;
        uint256 amount0Min;
        uint256 amount1Min;
        uint256 deadline;
    }

     struct DecreaseLiquidityParams {
        uint256 tokenId;
        uint128 liquidity;
        uint256 amount0Min;
        uint256 amount1Min;
        uint256 deadline;
    }

    struct CollectParams {
        uint256 tokenId;
        address recipient;
        uint128 amount0Max;
        uint128 amount1Max;
    }

    function positions(uint256 tokenId)external view returns (uint96 nonce, address operator, address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1);
    function mint(MintParams calldata params) external payable returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);
    function increaseLiquidity(IncreaseLiquidityParams calldata params) external payable returns (uint128 liquidity, uint256 amount0, uint256 amount1);
    function createAndInitializePoolIfNecessary(address token0, address token1, uint24 fee, uint160 sqrtPriceX96) external payable returns (address pool);
    function decreaseLiquidity(DecreaseLiquidityParams calldata params) external payable returns (uint256 amount0, uint256 amount1);
    function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1);
    function burn(uint256 tokenId) external payable;

}

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
    function token0() external view returns (address);
    function token1() external view returns (address);
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface IWETH {
    function deposit() external payable;
    function withdraw(uint256 wad) external;
}





contract XBC_Cock_Coup is  Ownable, ReentrancyGuard{

    IV3NonfungiblePositionManager public immutable nonfungiblePositionManager;
    IV3Factory public immutable V3Factory;
    IFactoryV2 public immutable V2Factory;
    IV3SwapRouter public immutable V3swapRouter;  
    IRouter02 public immutable V2swapRouter;

    address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;  // Weth 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
    address public constant Dead = 0x000000000000000000000000000000000000dEaD; 
    IERC20 public XBCToken; 
    
    uint256 private tokenId;
    uint256 private amount0;
    uint256 private amount1;
    bool public isCockSet;
    

    mapping(uint256 => Position) public positions;
    uint256[] public allTokenIds;

    address[] public claimableTokens;
    mapping(address => bool) public tokenIsActive;

    mapping(address => bool) private _authorizedAccounts;
    event AccountAuthorized(address indexed account);
    event AccountDeauthorized(address indexed account);

    modifier onlyAuthorized() {
        require(_authorizedAccounts[msg.sender] || msg.sender == owner(), "Not authorized");
        _;
    }

    

    struct Position {
        address owner;
        uint256 tokenId;
        address token0;
        address token1;
        uint24 mintFee;
        int24 lowerTick;
        int24 upperTick;
        bool useV2;
    }

    constructor(
        address _nonfungiblePositionManager,
        address _V3Factory,
        address _V3swapRouter,
        address _V2Factory,
        address _V2swapRouter    

    ) {
        nonfungiblePositionManager = IV3NonfungiblePositionManager(_nonfungiblePositionManager);
        V3Factory = IV3Factory(_V3Factory);
        V3swapRouter = IV3SwapRouter(_V3swapRouter);
        V2Factory = IFactoryV2 (_V2Factory);
        V2swapRouter = IRouter02(_V2swapRouter);
        
        
        
       
    }

    receive() external payable {}

    function authorizeAccount(address account) external onlyOwner {
        require(account != address(0), "Zero address cannot be authorized");
        require(!_authorizedAccounts[account], "Account already authorized");

        _authorizedAccounts[account] = true;

        emit AccountAuthorized(account);
    }

//  function to deauthorize an account, callable only by the owner
    function deauthorizeAccount(address account) external onlyOwner {
        require(account != address(0), "Zero address cannot be deauthorized");
        require(_authorizedAccounts[account], "Account is not authorized");

        _authorizedAccounts[account] = false;

        emit AccountDeauthorized(account);
    }

//  function to check if an account is authorized
    function isAccountAuthorized(address account) external view returns (bool) {
        return _authorizedAccounts[account];
    }


     function getAllTokenIds() public view returns (uint256[] memory) {
        return allTokenIds;
    }

    // Wrap Specified Amount of Contract's ETH to WETH
    function wrapETH(uint256 amount) external onlyAuthorized {
        require(amount <= address(this).balance, "Insufficient ETH balance");
        
        IWETH(WETH).deposit{value: amount}();
    }

    // Unwrap Specified Amount of Contract's WETH to ETH
    function unwrapWETH(uint256 amount) external onlyAuthorized {
        require(amount > 0, "Amount must be greater than 0");
        IERC20 weth = IERC20(WETH);
        require(weth.balanceOf(address(this)) >= amount, "Insufficient WETH balance");

        // Ensure that the contract is approved to spend its own WETH
        if (weth.allowance(address(this), address(WETH)) < amount) {
            weth.approve(address(WETH), amount);
        }

        IWETH(WETH).withdraw(amount);
    }

    function createAndInitializePoolIfNecessary(
        address _tokenA, 
        address _tokenB, 
        uint24 _fee, 
        uint160 _sqrtPriceX96
    ) external onlyAuthorized returns (address pool) {
        pool = V3Factory.getPool(_tokenA, _tokenB, _fee);
        
        // Create the pool if it doesn't exist
        if (pool == address(0)) {
            pool = V3Factory.createPool(_tokenA, _tokenB, _fee);
            require(pool != address(0), "Failed to create pool");
            IV3Pool(pool).initialize(_sqrtPriceX96);
        } else {
            // Check if the pool is already initialized
            (uint160 sqrtPriceX96,,,,,,) = IV3Pool(pool).slot0();
            if (sqrtPriceX96 == 0) {
                IV3Pool(pool).initialize(_sqrtPriceX96);
            }
        }

        require(pool != address(0), "Pool creation failed");
        return pool;
    }




    function setCock(address _Cock) external onlyOwner {
        require(!isCockSet, "Cock can only be set once");
        require(_Cock != address(0), "Cock address cannot be zero");

       XBCToken = IERC20(_Cock);
        isCockSet = true;
    }

    function onERC721Received(
        address,
        address,
        uint256 _tokenId,
        bytes memory
     ) public virtual  returns (bytes4) {
        
        return this.onERC721Received.selector;
    }

    function getV3poolAddress (address token0, address token1, uint24 poolFee) public view returns (address) {
        address poolAddress = V3Factory.getPool(token0, token1, poolFee);
        return poolAddress;
    }


    function getAmountsOut(address inputToken, address outputToken, uint256 amountIn) public view returns (uint256) {
      address[] memory path = new address[](2);
      path[0] = inputToken;
      path[1] = outputToken;
      uint256[] memory amounts = V2swapRouter.getAmountsOut(amountIn, path);
      return amounts[1];
    }

    function getLiquidity(uint256 __tokenId) public view returns (uint128 liquidity) {
        (, , , , , , , liquidity, , , , ) = nonfungiblePositionManager.positions(__tokenId);
    }

 
    function getCurrentTick(address token0, address token1, uint24 poolFee) public view returns (int24) {
        address poolAddress = V3Factory.getPool(token0, token1, poolFee);

        IV3Pool pool = IV3Pool(poolAddress);

        (, int24 currentTick, , , , , ) = pool.slot0();

        return currentTick;
    }

    function _getCurrentTickByTokenId(uint256 tokenIDS) public view returns (int24) {
        Position memory position = positions[tokenIDS];
        address token0 = position.token0;
        address token1 = position.token1;
        uint24 poolFee = position.mintFee;

        address poolAddress = V3Factory.getPool(token0, token1, poolFee);
        IV3Pool pool = IV3Pool(poolAddress);
        (, int24 currentTick, , , , , ) = pool.slot0();

        return currentTick;
    }

    

     function SwapV2(address inputTokens, address outputToken, uint256 amountIn) external onlyAuthorized {
      _swapV2(inputTokens, outputToken, amountIn);
    }

    function SwapV3(address inputToken, address outputToken, uint24 swapFee, uint256 amountIn) external onlyAuthorized {
      _swapV3(inputToken, outputToken, swapFee, amountIn);
    }

    function _swapV2(address inputToken, address outputToken, uint256 amountIn) internal returns (uint256 amountOut) {
               require(address(inputToken) != address(XBCToken), "Selling COCK token is not allowed");


        if (amountIn == 0) {
        return 0;
        }
        IERC20(inputToken).approve(address(V2swapRouter), amountIn);

        address[] memory path = new address[](2);
        path[0] = inputToken;
        path[1] = outputToken;

        uint256 balanceBefore = IERC20(outputToken).balanceOf(address(this));

   
        V2swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            amountIn,
            0,
            path,
            address(this),
            block.timestamp + 60
        );

    
        amountOut = IERC20(outputToken).balanceOf(address(this)) - balanceBefore;

        return amountOut;
    }


    function _swapV3(address inputToken, address outputToken, uint24 swapFee, uint256 amountIn) internal returns (uint256 amountOut) {

        require(address(inputToken) != address(XBCToken), "Selling COCK token is not allowed");

        if (amountIn == 0) {
        return 0;
        }
        
          
            IERC20(inputToken).approve(address(V3swapRouter), amountIn);

            IV3SwapRouter.ExactInputSingleParams memory swapParams = IV3SwapRouter
            .ExactInputSingleParams({
                tokenIn: inputToken,
                tokenOut: outputToken,
                fee: swapFee,
                recipient: address(this),
                deadline: block.timestamp + 600,  // Deadline
                amountIn: amountIn,
                amountOutMinimum: 0,// amountsOut - amountsOut / slippage,  
                sqrtPriceLimitX96: 0  
            });

            
            amountOut = V3swapRouter.exactInputSingle(swapParams);
    
        return amountOut;
    }

    
    function CollectEggs(uint256 tokenID) external nonReentrant{
      _collect(tokenID);
    }

    

    function _decreaseLiquidity(uint256 _tokenId) internal returns (uint256 _amount0, uint256 _amount1){
        (, , , , , , , uint128 _liquidityt, , , , ) = nonfungiblePositionManager.positions(_tokenId);

        // Execute the decrease liquidity operation
        (amount0, amount1) = nonfungiblePositionManager.decreaseLiquidity(
            IV3NonfungiblePositionManager.DecreaseLiquidityParams({
                tokenId: _tokenId,
                liquidity: _liquidityt,
                amount0Min: 0,
                amount1Min: 0,
                deadline: block.timestamp + 600 // 10 minutes from the current block time
            })
        );
        
        return (amount0, amount1);
    }

    function _collect(uint256 _tokenId) internal returns (uint256 collectedAmount0, uint256 collectedAmount1) {
         (collectedAmount0, collectedAmount1) = nonfungiblePositionManager.collect(
            IV3NonfungiblePositionManager.CollectParams({
                tokenId: _tokenId,
                recipient: address(this),
                amount0Max: type(uint128).max,
                amount1Max: type(uint128).max
            })
        );
        return (collectedAmount0, collectedAmount1);
    }

    function increaseLiquidity(uint256 _tokenId, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min) external onlyAuthorized {
         // Get the position details
        Position storage position = positions[_tokenId];

        // Approve the position manager to pull tokens
        IERC20(position.token0).approve(address(nonfungiblePositionManager), amount0Desired);
        IERC20(position.token1).approve(address(nonfungiblePositionManager), amount1Desired);

         // Set the parameters for the increase liquidity operation
        IV3NonfungiblePositionManager.IncreaseLiquidityParams memory params = IV3NonfungiblePositionManager.IncreaseLiquidityParams({
         tokenId: _tokenId,
         amount0Desired: amount0Desired,
          amount1Desired: amount1Desired,
            amount0Min: amount0Min,
            amount1Min: amount1Min,
            deadline: block.timestamp + 600 // 10 minutes from the current block time
        });

            // Execute the increase liquidity operation
        (, amount0, amount1) = nonfungiblePositionManager.increaseLiquidity(params);

    
    }


    function mintPosition(address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint256 amount0Desired, uint256 amount1Desired, bool useV2) external onlyAuthorized {
        // Approve the position manager to pull tokens
        IERC20(token0).approve(address(nonfungiblePositionManager), amount0Desired);
        IERC20(token1).approve(address(nonfungiblePositionManager), amount1Desired);

        IV3NonfungiblePositionManager.MintParams memory params = IV3NonfungiblePositionManager.MintParams({
            token0: token0,
            token1: token1,
            fee: fee,
         tickLower: tickLower,
         tickUpper: tickUpper,
         amount0Desired: amount0Desired,
         amount1Desired: amount1Desired,
         amount0Min: 0,
         amount1Min: 0,
         recipient: address(this),
         deadline: block.timestamp + 600 // 10 minutes from the current block time
        });

        (tokenId,, amount0, amount1) = nonfungiblePositionManager.mint(params);

        positions[tokenId] = Position({
        owner: address(this),
        tokenId: tokenId,
        token0: token0,
        token1: token1,
        mintFee: fee,
        lowerTick: tickLower,
        upperTick: tickUpper,
        useV2: useV2
        });
    
        allTokenIds.push(tokenId);
    }

    function enterPositionSwap(address token0, address token1, uint24 mintFee, int24 lowerTick, int24 upperTick, uint256 swapAmountInEth, bool useV2, uint256 mintSlippage) external onlyAuthorized {
        
        address tokenIn = WETH;  
        address tokenOut = token0 == WETH ? token1 : token0; 
        

        if (useV2) {

            _swapV2(tokenIn, tokenOut, swapAmountInEth);

        } else {
           
           _swapV3(tokenIn, tokenOut, mintFee, swapAmountInEth);

        }

        uint256 maxAmount0 = IERC20(token0).balanceOf(address(this));
        uint256 maxAmount1 = IERC20(token1).balanceOf(address(this));
        TransferHelper.safeApprove(token0, address(nonfungiblePositionManager), maxAmount0);
        TransferHelper.safeApprove(token1, address(nonfungiblePositionManager), maxAmount1);


        IV3NonfungiblePositionManager.MintParams
            memory mintParams = IV3NonfungiblePositionManager.MintParams({
                token0: token0,
                token1: token1,
                fee: mintFee,
                tickLower: lowerTick,
                tickUpper: upperTick,
                amount0Desired: maxAmount0,
                amount1Desired: maxAmount1,
                amount0Min: maxAmount0 - maxAmount0 / mintSlippage,
                amount1Min: maxAmount1 - maxAmount1 / mintSlippage,
                recipient: address(this),
                deadline: block.timestamp + 600
            });

        (tokenId, , amount0, amount1) = nonfungiblePositionManager.mint(mintParams);

        positions[tokenId] = Position({
        owner: address(this),
        tokenId: tokenId,
        token0: token0,
        token1: token1,
        mintFee: mintFee,
        lowerTick: lowerTick,
        upperTick: upperTick,
        useV2: useV2
    });

        allTokenIds.push(tokenId);

    }

    function exitPosition(uint256 _tokenId) external onlyAuthorized{
       

         
            nonfungiblePositionManager.collect(
            IV3NonfungiblePositionManager.CollectParams({
                tokenId: _tokenId,
                recipient: address(this),
                amount0Max: type(uint128).max,
                amount1Max: type(uint128).max
            })
        );
          



        (, , , , , , , uint128 liquidity, , , , ) = nonfungiblePositionManager
            .positions(_tokenId);

        nonfungiblePositionManager.decreaseLiquidity(
            IV3NonfungiblePositionManager.DecreaseLiquidityParams({
                tokenId: _tokenId,
                liquidity: liquidity,
                amount0Min: 0,
                amount1Min: 0,
                deadline: block.timestamp + 600
            })
        );

        nonfungiblePositionManager.collect(
            IV3NonfungiblePositionManager.CollectParams({
                tokenId: _tokenId,
                recipient: address(this),
                amount0Max: type(uint128).max,
                amount1Max: type(uint128).max
            })
        );

        nonfungiblePositionManager.burn(_tokenId);

        for (uint256 i = 0; i < allTokenIds.length; i++) {
        if (allTokenIds[i] == _tokenId) {
            allTokenIds[i] = allTokenIds[allTokenIds.length - 1];
            allTokenIds.pop();
            break;
        }
        }
    }


     // Function to add a token to the claimable list
    function addTokenToClaimable(address _token) external onlyAuthorized {
        require(!tokenIsActive[_token], "Token already claimable");
        claimableTokens.push(_token);
        tokenIsActive[_token] = true;
    }

    // Function to remove a token from the claimable list
    function removeTokenFromClaimable(address _token) external onlyAuthorized {
        require(tokenIsActive[_token], "Token not claimable");
        tokenIsActive[_token] = false;
        // This is a gas-intensive operation because it requires shifting array elements
        for (uint256 i = 0; i < claimableTokens.length; i++) {
            if (claimableTokens[i] == _token) {
                claimableTokens[i] = claimableTokens[claimableTokens.length - 1];
                claimableTokens.pop();
                break;
            }
        }
    }

    function claimFunds(uint256 amountOfXBC) external nonReentrant{
        require(amountOfXBC > 0, "Amount must be greater than 0");
        uint256 userBalance = XBCToken.balanceOf(msg.sender);
        require(userBalance >= amountOfXBC, "Insufficient XBC balance");

            XBCToken.transferFrom(msg.sender, Dead, amountOfXBC);


        // Calculate the user's share percentage based on the specified amount of COCK
        uint256 userSharePercentage = (amountOfXBC * 1e18) / getCirculatingSupply();

        for (uint256 i = 0; i < claimableTokens.length; i++) {
            address token = claimableTokens[i];
            if (!tokenIsActive[token]) continue; // Skip inactive tokens
            uint256 tokenBalance = IERC20(token).balanceOf(address(this));
            if (tokenBalance == 0) continue; // Skip if no balance

           
            
            // Calculate claimable amount based on the user's share percentage
            uint256 claimableAmount = (tokenBalance * userSharePercentage) / 1e18;
            if (claimableAmount > 0) {
                IERC20(token).transfer(msg.sender, claimableAmount);
            }
        }
    }

    
    function getCirculatingSupply() public view returns (uint256) {
        uint256 totalSupply = XBCToken.totalSupply();
        uint256 burnedAmount = XBCToken.balanceOf(address(Dead)); // Assuming address(0) is the burn address
        uint256 contractBalance = XBCToken.balanceOf(address(this));
        return totalSupply - burnedAmount - contractBalance;
    }

    struct ClaimableToken {
    address tokenAddress;
    uint256 claimableAmount;
    }

    function getClaimableAmounts(address userAddress) public view returns (ClaimableToken[] memory) {
    uint256 userBalance = XBCToken.balanceOf(userAddress);
    uint256 userSharePercentage = (userBalance * 1e18) / getCirculatingSupply();

    ClaimableToken[] memory claimableAmounts = new ClaimableToken[](claimableTokens.length);

    for (uint256 i = 0; i < claimableTokens.length; i++) {
        address token = claimableTokens[i];
        uint256 tokenBalance = IERC20(token).balanceOf(address(this));
        
        // Calculate claimable amount based on the user's share percentage
        uint256 claimableAmount = (tokenBalance * userSharePercentage) / 1e18;
        
        claimableAmounts[i] = ClaimableToken({
            tokenAddress: token,
            claimableAmount: claimableAmount
        });
    }

    return claimableAmounts;
   }

    function WithdrawERC20( address _contract, address _to) external onlyOwner {
        require(!isCockSet, "No withdraw once Cock is set");
        uint256 amount = IERC20(_contract).balanceOf(address(this));
        IERC20(_contract).transfer(_to, amount);
    }


}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_nonfungiblePositionManager","type":"address"},{"internalType":"address","name":"_V3Factory","type":"address"},{"internalType":"address","name":"_V3swapRouter","type":"address"},{"internalType":"address","name":"_V2Factory","type":"address"},{"internalType":"address","name":"_V2swapRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AccountAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AccountDeauthorized","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"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"CollectEggs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"inputTokens","type":"address"},{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"SwapV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint24","name":"swapFee","type":"uint24"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"SwapV3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"V2Factory","outputs":[{"internalType":"contract IFactoryV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V2swapRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3Factory","outputs":[{"internalType":"contract IV3Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3swapRouter","outputs":[{"internalType":"contract IV3SwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"WithdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"XBCToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenIDS","type":"uint256"}],"name":"_getCurrentTickByTokenId","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"addTokenToClaimable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allTokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"authorizeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfXBC","type":"uint256"}],"name":"claimFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimableTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"},{"internalType":"uint24","name":"_fee","type":"uint24"},{"internalType":"uint160","name":"_sqrtPriceX96","type":"uint160"}],"name":"createAndInitializePoolIfNecessary","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"deauthorizeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"mintFee","type":"uint24"},{"internalType":"int24","name":"lowerTick","type":"int24"},{"internalType":"int24","name":"upperTick","type":"int24"},{"internalType":"uint256","name":"swapAmountInEth","type":"uint256"},{"internalType":"bool","name":"useV2","type":"bool"},{"internalType":"uint256","name":"mintSlippage","type":"uint256"}],"name":"enterPositionSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"exitPosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllTokenIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getClaimableAmounts","outputs":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"claimableAmount","type":"uint256"}],"internalType":"struct XBC_Cock_Coup.ClaimableToken[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"poolFee","type":"uint24"}],"name":"getCurrentTick","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"__tokenId","type":"uint256"}],"name":"getLiquidity","outputs":[{"internalType":"uint128","name":"liquidity","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"poolFee","type":"uint24"}],"name":"getV3poolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"amount0Desired","type":"uint256"},{"internalType":"uint256","name":"amount1Desired","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"}],"name":"increaseLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAccountAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCockSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"uint256","name":"amount0Desired","type":"uint256"},{"internalType":"uint256","name":"amount1Desired","type":"uint256"},{"internalType":"bool","name":"useV2","type":"bool"}],"name":"mintPosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nonfungiblePositionManager","outputs":[{"internalType":"contract IV3NonfungiblePositionManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"positions","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"mintFee","type":"uint24"},{"internalType":"int24","name":"lowerTick","type":"int24"},{"internalType":"int24","name":"upperTick","type":"int24"},{"internalType":"bool","name":"useV2","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"removeTokenFromClaimable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_Cock","type":"address"}],"name":"setCock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unwrapWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"wrapETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101206040523480156200001257600080fd5b5060405162004c1238038062004c128339810160408190526200003591620000db565b62000040336200006e565b600180556001600160a01b0394851660805292841660a05290831660e052821660c05216610100526200014b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000d657600080fd5b919050565b600080600080600060a08688031215620000f457600080fd5b620000ff86620000be565b94506200010f60208701620000be565b93506200011f60408701620000be565b92506200012f60608701620000be565b91506200013f60808701620000be565b90509295509295909350565b60805160a05160c05160e051610100516149cc620002466000396000818161078f0152818161189c01528181613aaf0152613c0b01526000818161027e0152818161371501526138650152600061047501526000818161060301528181610a1a01528181610abb0152818161116a015281816115430152611e5001526000818161080b01528181611a2b01528181611abc01528181611b3f01528181611c7a01528181611d0801528181611f7501528181612063015281816120f5015281816121ff0152818161297f015281816129aa01528181612a8601528181612eb001528181612f480152818161303c01526139ca01526149cc6000f3fe6080604052600436106102605760003560e01c80638da5cb5b11610144578063b44a2722116100b6578063d304277b1161007a578063d304277b146108af578063d6281921146108cf578063d62a853a146108ff578063ef10a2f71461092c578063f018a8c11461094c578063f2fde38b1461096c57600080fd5b8063b44a2722146107f9578063bc4a05051461082d578063bdbed7221461084d578063c04bc3521461086f578063c691b0a11461088f57600080fd5b8063a44616ec11610108578063a44616ec1461071d578063a9996e6c1461073d578063a9a8679b1461075d578063a9bbe4b61461077d578063abb6555a146107b1578063ad5c4648146107d157600080fd5b80638da5cb5b1461059b578063951583c3146105b957806397d56997146105f157806399fbab8814610625578063a2c1a3c3146106fd57600080fd5b806330ce76fa116101dd5780635d0d1ae2116101a15780635d0d1ae2146104f0578063715018a61461051057806378dc9059146105255780637d07b2d21461054557806382c4767b146105655780638b17c5bf1461057b57600080fd5b806330ce76fa1461041057806331c4e1251461044357806341690d571461046357806345608d001461049757806347539058146104b757600080fd5b80631c58db4f116102245780631c58db4f1461036357806326872330146103835780632689a5d2146103ad5780632a66f4bf146103cd5780632b112e49146103ed57600080fd5b80630165b0a41461026c5780630217ce49146102bd57806313ead562146102dd578063150b7a02146102fd5780631b55e3381461034157600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102a07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102c957600080fd5b506102a06102d8366004613e09565b61098c565b3480156102e957600080fd5b506102a06102f8366004613e48565b6109b6565b34801561030957600080fd5b50610328610318366004613eeb565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016102b4565b34801561034d57600080fd5b5061036161035c366004613e09565b610d17565b005b34801561036f57600080fd5b5061036161037e366004613e09565b611066565b34801561038f57600080fd5b5060065461039d9060ff1681565b60405190151581526020016102b4565b3480156103b957600080fd5b506102a06103c8366004613faf565b611165565b3480156103d957600080fd5b506103616103e8366004613ffa565b611204565b3480156103f957600080fd5b50610402611318565b6040519081526020016102b4565b34801561041c57600080fd5b5061043061042b366004613e09565b611497565b60405160029190910b81526020016102b4565b34801561044f57600080fd5b5061036161045e366004613ffa565b61163c565b34801561046f57600080fd5b506102a07f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a357600080fd5b506104026104b2366004614017565b611807565b3480156104c357600080fd5b5061039d6104d2366004613ffa565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156104fc57600080fd5b5061036161050b366004614058565b611940565b34801561051c57600080fd5b50610361611997565b34801561053157600080fd5b50610361610540366004613e09565b6119ab565b34801561055157600080fd5b50610402610560366004613e09565b611e2a565b34801561057157600080fd5b506102a061dead81565b34801561058757600080fd5b50610430610596366004613faf565b611e4b565b3480156105a757600080fd5b506000546001600160a01b03166102a0565b3480156105c557600080fd5b506105d96105d4366004613e09565b611f5c565b6040516001600160801b0390911681526020016102b4565b3480156105fd57600080fd5b506102a07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063157600080fd5b506106a4610640366004613e09565b6007602052600090815260409020805460018201546002808401546003909401546001600160a01b0393841694929392831692811691600160a01b820462ffffff1691600160b81b8104820b91600160d01b8204900b90600160e81b900460ff1688565b604080516001600160a01b03998a16815260208101989098529588169587019590955292909516606085015262ffffff166080840152600293840b60a084015290920b60c082015290151560e0820152610100016102b4565b34801561070957600080fd5b506103616107183660046140c6565b611ffb565b34801561072957600080fd5b5061036161073836600461415d565b612470565b34801561074957600080fd5b50610361610758366004613e09565b6125b0565b34801561076957600080fd5b50610361610778366004613ffa565b6125cc565b34801561078957600080fd5b506102a07f000000000000000000000000000000000000000000000000000000000000000081565b3480156107bd57600080fd5b506103616107cc366004613ffa565b6126e9565b3480156107dd57600080fd5b506102a073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561080557600080fd5b506102a07f000000000000000000000000000000000000000000000000000000000000000081565b34801561083957600080fd5b50610361610848366004614196565b612804565b34801561085957600080fd5b50610862612cfb565b6040516102b4919061422d565b34801561087b57600080fd5b5061036161088a366004613ffa565b612d53565b34801561089b57600080fd5b506103616108aa366004614271565b612e33565b3480156108bb57600080fd5b506103616108ca366004614017565b6130c1565b3480156108db57600080fd5b5061039d6108ea366004613ffa565b600a6020526000908152604090205460ff1681565b34801561090b57600080fd5b5061091f61091a366004613ffa565b613110565b6040516102b491906142ac565b34801561093857600080fd5b506002546102a0906001600160a01b031681565b34801561095857600080fd5b50610361610967366004613e09565b61332a565b34801561097857600080fd5b50610361610987366004613ffa565b6135e1565b6009818154811061099c57600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600b602052604081205460ff16806109de57506000546001600160a01b031633145b610a035760405162461bcd60e51b81526004016109fa90614304565b60405180910390fd5b604051630b4c774160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631698ee8290610a539088908890889060040161432c565b602060405180830381865afa158015610a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a949190614364565b90506001600160a01b038116610be75760405163a167129560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a167129590610af49088908890889060040161432c565b6020604051808303816000875af1158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190614364565b90506001600160a01b038116610b875760405162461bcd60e51b815260206004820152601560248201527411985a5b1959081d1bc818dc99585d19481c1bdbdb605a1b60448201526064016109fa565b60405163f637731d60e01b81526001600160a01b03838116600483015282169063f637731d90602401600060405180830381600087803b158015610bca57600080fd5b505af1158015610bde573d6000803e3d6000fd5b50505050610cc2565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4b919061439e565b5050505050509050806001600160a01b0316600003610cc05760405163f637731d60e01b81526001600160a01b03848116600483015283169063f637731d90602401600060405180830381600087803b158015610ca757600080fd5b505af1158015610cbb573d6000803e3d6000fd5b505050505b505b6001600160a01b038116610d0f5760405162461bcd60e51b8152602060048201526014602482015273141bdbdb0818dc99585d1a5bdb8819985a5b195960621b60448201526064016109fa565b949350505050565b610d1f613657565b60008111610d6f5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016109fa565b6002546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc9190614439565b905081811015610e2e5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74205842432062616c616e6365000000000000000060448201526064016109fa565b6002546040516323b872dd60e01b815233600482015261dead6024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab9190614452565b506000610eb6611318565b610ec884670de0b6b3a7640000614485565b610ed291906144a2565b905060005b60095481101561105757600060098281548110610ef657610ef66144c4565b60009182526020808320909101546001600160a01b0316808352600a90915260409091205490915060ff16610f2b5750611045565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f969190614439565b905080600003610fa7575050611045565b6000670de0b6b3a7640000610fbc8684614485565b610fc691906144a2565b905080156110415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610ffc90339085906004016144da565b6020604051808303816000875af115801561101b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103f9190614452565b505b5050505b8061104f816144f3565b915050610ed7565b50505061106360018055565b50565b336000908152600b602052604090205460ff168061108e57506000546001600160a01b031633145b6110aa5760405162461bcd60e51b81526004016109fa90614304565b478111156110fa5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e6365000000000000000060448201526064016109fa565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561114957600080fd5b505af115801561115d573d6000803e3d6000fd5b505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b81526004016111b89392919061432c565b602060405180830381865afa1580156111d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f99190614364565b9150505b9392505050565b336000908152600b602052604090205460ff168061122c57506000546001600160a01b031633145b6112485760405162461bcd60e51b81526004016109fa90614304565b6001600160a01b0381166000908152600a602052604090205460ff16156112b15760405162461bcd60e51b815260206004820152601760248201527f546f6b656e20616c726561647920636c61696d61626c6500000000000000000060448201526064016109fa565b6009805460018181019092557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b039093166001600160a01b0319909316831790556000918252600a6020526040909120805460ff19169091179055565b600080600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113929190614439565b6002546040516370a0823160e01b815261dead60048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156113e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114069190614439565b6002546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114789190614439565b905080611485838561450c565b61148f919061450c565b935050505090565b600081815260076020908152604080832081516101008101835281546001600160a01b039081168252600183015494820194909452600280830154851682850181905260039093015480861660608401819052600160a01b820462ffffff1660808501819052600160b81b8304840b60a0860152600160d01b830490930b60c0850152600160e81b90910460ff16151560e08401529351630b4c774160e11b81529194929392909186917f00000000000000000000000000000000000000000000000000000000000000001690631698ee829061157c9087908790879060040161432c565b602060405180830381865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd9190614364565b905060008190506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611604573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611628919061439e565b50939e9d5050505050505050505050505050565b336000908152600b602052604090205460ff168061166457506000546001600160a01b031633145b6116805760405162461bcd60e51b81526004016109fa90614304565b6001600160a01b0381166000908152600a602052604090205460ff166116de5760405162461bcd60e51b8152602060048201526013602482015272546f6b656e206e6f7420636c61696d61626c6560681b60448201526064016109fa565b6001600160a01b0381166000908152600a60205260408120805460ff191690555b60095481101561180357816001600160a01b031660098281548110611726576117266144c4565b6000918252602090912001546001600160a01b0316036117f157600980546117509060019061450c565b81548110611760576117606144c4565b600091825260209091200154600980546001600160a01b03909216918390811061178c5761178c6144c4565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060098054806117cb576117cb61451f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806117fb816144f3565b9150506116ff565b5050565b604080516002808252606082018352600092839291906020830190803683370190505090508481600081518110611840576118406144c4565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110611874576118746144c4565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81526000917f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f906118d39087908690600401614579565b600060405180830381865afa1580156118f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119189190810190614592565b90508060018151811061192d5761192d6144c4565b6020026020010151925050509392505050565b336000908152600b602052604090205460ff168061196857506000546001600160a01b031633145b6119845760405162461bcd60e51b81526004016109fa90614304565b611990848484846136b0565b5050505050565b61199f6138df565b6119a96000613939565b565b336000908152600b602052604090205460ff16806119d357506000546001600160a01b031633145b6119ef5760405162461bcd60e51b81526004016109fa90614304565b604080516080810182528281523060208201526001600160801b038183018190526060820152905163fc6f786560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163fc6f786591611a5f9190600401614638565b60408051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa1919061467b565b505060405163133f757160e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3091906146c1565b505050509750505050505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630c49ccbe6040518060a00160405280858152602001846001600160801b03168152602001600081526020016000815260200142610258611ba891906147a2565b9052604080516001600160e01b031960e085901b1681528251600482015260208301516001600160801b0316602482015290820151604482015260608201516064820152608090910151608482015260a40160408051808303816000875af1158015611c18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3c919061467b565b5050604080516080810182528381523060208201526001600160801b038183018190526060820152905163fc6f786560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163fc6f786591611cae9190600401614638565b60408051808303816000875af1158015611ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf0919061467b565b5050604051630852cd8d60e31b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b158015611d5457600080fd5b505af1158015611d68573d6000803e3d6000fd5b5050505060005b600854811015611e25578260088281548110611d8d57611d8d6144c4565b906000526020600020015403611e135760088054611dad9060019061450c565b81548110611dbd57611dbd6144c4565b906000526020600020015460088281548110611ddb57611ddb6144c4565b6000918252602090912001556008805480611df857611df861451f565b60019003818190600052602060002001600090559055505050565b80611e1d816144f3565b915050611d6f565b505050565b60088181548110611e3a57600080fd5b600091825260209091200154905081565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b8152600401611e9e9392919061432c565b602060405180830381865afa158015611ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edf9190614364565b905060008190506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4a919061439e565b50939c9b505050505050505050505050565b60405163133f757160e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa158015611fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe991906146c1565b50929c9b505050505050505050505050565b336000908152600b602052604090205460ff168061202357506000546001600160a01b031633145b61203f5760405162461bcd60e51b81526004016109fa90614304565b60405163095ea7b360e01b81526001600160a01b0389169063095ea7b39061208d907f00000000000000000000000000000000000000000000000000000000000000009087906004016144da565b6020604051808303816000875af11580156120ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d09190614452565b5060405163095ea7b360e01b81526001600160a01b0388169063095ea7b39061211f907f00000000000000000000000000000000000000000000000000000000000000009086906004016144da565b6020604051808303816000875af115801561213e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121629190614452565b5060006040518061016001604052808a6001600160a01b03168152602001896001600160a01b031681526020018862ffffff1681526020018760020b81526020018660020b81526020018581526020018481526020016000815260200160008152602001306001600160a01b03168152602001426102586121e391906147a2565b9052604051634418b22b60e11b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906388316456906122349084906004016147b5565b6080604051808303816000875af1158015612253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122779190614879565b909150600360006004600060056000869190505585919050558491905055505050604051806101000160405280306001600160a01b0316815260200160035481526020018a6001600160a01b03168152602001896001600160a01b031681526020018862ffffff1681526020018760020b81526020018660020b815260200183151581525060076000600354815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548162ffffff021916908362ffffff16021790555060a08201518160030160176101000a81548162ffffff021916908360020b62ffffff16021790555060c082015181600301601a6101000a81548162ffffff021916908360020b62ffffff16021790555060e082015181600301601d6101000a81548160ff02191690831515021790555090505060086003549080600181540180825580915050600190039060005260206000200160009091909190915055505050505050505050565b6124786138df565b60065460ff16156124cb5760405162461bcd60e51b815260206004820152601c60248201527f4e6f207769746864726177206f6e636520436f636b206973207365740000000060448201526064016109fa565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015612512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125369190614439565b60405163a9059cbb60e01b81529091506001600160a01b0384169063a9059cbb9061256790859085906004016144da565b6020604051808303816000875af1158015612586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125aa9190614452565b50505050565b6125b8613657565b6125c181613989565b505061106360018055565b6125d46138df565b6001600160a01b0381166126345760405162461bcd60e51b815260206004820152602160248201527f5a65726f20616464726573732063616e6e6f7420626520617574686f72697a656044820152601960fa1b60648201526084016109fa565b6001600160a01b0381166000908152600b602052604090205460ff161561269d5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420616c726561647920617574686f72697a656400000000000060448201526064016109fa565b6001600160a01b0381166000818152600b6020526040808220805460ff19166001179055517f10e4428e2647e1f920c2b46454982af8924babe9f09c0c629254a87a3b06d9ab9190a250565b6126f16138df565b6001600160a01b0381166127535760405162461bcd60e51b815260206004820152602360248201527f5a65726f20616464726573732063616e6e6f74206265206465617574686f72696044820152621e995960ea1b60648201526084016109fa565b6001600160a01b0381166000908152600b602052604090205460ff166127bb5760405162461bcd60e51b815260206004820152601960248201527f4163636f756e74206973206e6f7420617574686f72697a65640000000000000060448201526064016109fa565b6001600160a01b0381166000818152600b6020526040808220805460ff19169055517fc2e0a577963cbf13d6b3b04206effff57f0b291f749f2b6623784d061a070f889190a250565b336000908152600b602052604090205460ff168061282c57506000546001600160a01b031633145b6128485760405162461bcd60e51b81526004016109fa90614304565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260006001600160a01b038a1682146128755789612877565b885b905083156128905761288a828287613a4a565b5061289e565b61289c82828a886136b0565b505b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa1580156128e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129099190614439565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015612953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129779190614439565b90506129a48c7f000000000000000000000000000000000000000000000000000000000000000084613d06565b6129cf8b7f000000000000000000000000000000000000000000000000000000000000000083613d06565b60006040518061016001604052808e6001600160a01b031681526020018d6001600160a01b031681526020018c62ffffff1681526020018b60020b81526020018a60020b81526020018481526020018381526020018785612a3091906144a2565b612a3a908661450c565b8152602001612a4988856144a2565b612a53908561450c565b8152306020820152604001612a6a426102586147a2565b9052604051634418b22b60e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638831645690612abb9084906004016147b5565b6080604051808303816000875af1158015612ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afe9190614879565b909150600360006004600060056000869190505585919050558491905055505050604051806101000160405280306001600160a01b0316815260200160035481526020018e6001600160a01b031681526020018d6001600160a01b031681526020018c62ffffff1681526020018b60020b81526020018a60020b815260200188151581525060076000600354815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548162ffffff021916908362ffffff16021790555060a08201518160030160176101000a81548162ffffff021916908360020b62ffffff16021790555060c082015181600301601a6101000a81548162ffffff021916908360020b62ffffff16021790555060e082015181600301601d6101000a81548160ff0219169083151502179055509050506008600354908060018154018082558091505060019003906000526020600020016000909190919091505550505050505050505050505050565b60606008805480602002602001604051908101604052809291908181526020018280548015612d4957602002820191906000526020600020905b815481526020019060010190808311612d35575b5050505050905090565b612d5b6138df565b60065460ff1615612dae5760405162461bcd60e51b815260206004820152601960248201527f436f636b2063616e206f6e6c7920626520736574206f6e63650000000000000060448201526064016109fa565b6001600160a01b038116612e045760405162461bcd60e51b815260206004820152601b60248201527f436f636b20616464726573732063616e6e6f74206265207a65726f000000000060448201526064016109fa565b600280546001600160a01b0319166001600160a01b03929092169190911790556006805460ff19166001179055565b336000908152600b602052604090205460ff1680612e5b57506000546001600160a01b031633145b612e775760405162461bcd60e51b81526004016109fa90614304565b600085815260076020526040908190206002810154915163095ea7b360e01b815290916001600160a01b03169063095ea7b390612eda907f00000000000000000000000000000000000000000000000000000000000000009089906004016144da565b6020604051808303816000875af1158015612ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1d9190614452565b50600381015460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390612f72907f00000000000000000000000000000000000000000000000000000000000000009088906004016144da565b6020604051808303816000875af1158015612f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb59190614452565b5060006040518060c0016040528088815260200187815260200186815260200185815260200184815260200142610258612fef91906147a2565b90526040805163219f5d1760e01b81528251600482015260208301516024820152908201516044820152606082015160648201526080820151608482015260a082015160a48201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063219f5d179060c4016060604051808303816000875af115801561308d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b191906148b5565b6005556004555050505050505050565b336000908152600b602052604090205460ff16806130e957506000546001600160a01b031633145b6131055760405162461bcd60e51b81526004016109fa90614304565b6125aa838383613a4a565b6002546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a0823190602401602060405180830381865afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131839190614439565b9050600061318f611318565b6131a183670de0b6b3a7640000614485565b6131ab91906144a2565b60095490915060009067ffffffffffffffff8111156131cc576131cc613ea4565b60405190808252806020026020018201604052801561321157816020015b60408051808201909152600080825260208201528152602001906001900390816131ea5790505b50905060005b60095481101561332157600060098281548110613236576132366144c4565b60009182526020822001546040516370a0823160e01b81523060048201526001600160a01b03909116925082906370a0823190602401602060405180830381865afa158015613289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ad9190614439565b90506000670de0b6b3a76400006132c48784614485565b6132ce91906144a2565b90506040518060400160405280846001600160a01b0316815260200182815250858581518110613300576133006144c4565b60200260200101819052505050508080613319906144f3565b915050613217565b50949350505050565b336000908152600b602052604090205460ff168061335257506000546001600160a01b031633145b61336e5760405162461bcd60e51b81526004016109fa90614304565b600081116133be5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016109fa565b6040516370a0823160e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290829082906370a0823190602401602060405180830381865afa158015613411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134359190614439565b10156134835760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420574554482062616c616e63650000000000000060448201526064016109fa565b604051636eb1769f60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602482015282906001600160a01b0383169063dd62ed3e90604401602060405180830381865afa1580156134e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135079190614439565b10156135945760405163095ea7b360e01b81526001600160a01b0382169063095ea7b39061354f9073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29086906004016144da565b6020604051808303816000875af115801561356e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135929190614452565b505b604051632e1a7d4d60e01b81526004810183905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b15801561114957600080fd5b6135e96138df565b6001600160a01b03811661364e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b61106381613939565b6002600154036136a95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109fa565b6002600155565b6002546000906001600160a01b03908116908616036136e15760405162461bcd60e51b81526004016109fa906148ea565b816000036136f157506000610d0f565b60405163095ea7b360e01b81526001600160a01b0386169063095ea7b39061373f907f00000000000000000000000000000000000000000000000000000000000000009086906004016144da565b6020604051808303816000875af115801561375e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137829190614452565b506000604051806101000160405280876001600160a01b03168152602001866001600160a01b031681526020018562ffffff168152602001306001600160a01b03168152602001426102586137d791906147a2565b8152602080820186905260006040808401829052606093840191909152805163414bf38960e01b815284516001600160a01b03908116600483015292850151831660248201529084015162ffffff16604482015291830151811660648301526080830151608483015260a083015160a483015260c083015160c483015260e0830151811660e48301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063414bf38990610104016020604051808303816000875af11580156138b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d59190614439565b9695505050505050565b6000546001600160a01b031633146119a95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516080810182528281523060208201526001600160801b038183018190526060820152905163fc6f786560e01b815260009182916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163fc6f7865916139fe9190600401614638565b60408051808303816000875af1158015613a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a40919061467b565b9094909350915050565b6002546000906001600160a01b0390811690851603613a7b5760405162461bcd60e51b81526004016109fa906148ea565b81600003613a8b575060006111fd565b60405163095ea7b360e01b81526001600160a01b0385169063095ea7b390613ad9907f00000000000000000000000000000000000000000000000000000000000000009086906004016144da565b6020604051808303816000875af1158015613af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1c9190614452565b506040805160028082526060820183526000926020830190803683370190505090508481600081518110613b5257613b526144c4565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110613b8657613b866144c4565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000918616906370a0823190602401602060405180830381865afa158015613bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bff9190614439565b90506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016635c11d7958560008530613c4042603c6147a2565b6040518663ffffffff1660e01b8152600401613c6095949392919061492b565b600060405180830381600087803b158015613c7a57600080fd5b505af1158015613c8e573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b03881691506370a0823190602401602060405180830381865afa158015613cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cfc9190614439565b6138d5919061450c565b600080846001600160a01b031663095ea7b360e01b8585604051602401613d2e9291906144da565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613d6c9190614967565b6000604051808303816000865af19150503d8060008114613da9576040519150601f19603f3d011682016040523d82523d6000602084013e613dae565b606091505b5091509150818015613dd8575080511580613dd8575080806020019051810190613dd89190614452565b6119905760405162461bcd60e51b8152602060048201526002602482015261534160f01b60448201526064016109fa565b600060208284031215613e1b57600080fd5b5035919050565b6001600160a01b038116811461106357600080fd5b62ffffff8116811461106357600080fd5b60008060008060808587031215613e5e57600080fd5b8435613e6981613e22565b93506020850135613e7981613e22565b92506040850135613e8981613e37565b91506060850135613e9981613e22565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ee357613ee3613ea4565b604052919050565b60008060008060808587031215613f0157600080fd5b8435613f0c81613e22565b9350602085810135613f1d81613e22565b935060408601359250606086013567ffffffffffffffff80821115613f4157600080fd5b818801915088601f830112613f5557600080fd5b813581811115613f6757613f67613ea4565b613f79601f8201601f19168501613eba565b91508082528984828501011115613f8f57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080600060608486031215613fc457600080fd5b8335613fcf81613e22565b92506020840135613fdf81613e22565b91506040840135613fef81613e37565b809150509250925092565b60006020828403121561400c57600080fd5b81356111fd81613e22565b60008060006060848603121561402c57600080fd5b833561403781613e22565b9250602084013561404781613e22565b929592945050506040919091013590565b6000806000806080858703121561406e57600080fd5b843561407981613e22565b9350602085013561408981613e22565b9250604085013561409981613e37565b9396929550929360600135925050565b8060020b811461106357600080fd5b801515811461106357600080fd5b600080600080600080600080610100898b0312156140e357600080fd5b88356140ee81613e22565b975060208901356140fe81613e22565b9650604089013561410e81613e37565b9550606089013561411e816140a9565b9450608089013561412e816140a9565b935060a0890135925060c0890135915060e089013561414c816140b8565b809150509295985092959890939650565b6000806040838503121561417057600080fd5b823561417b81613e22565b9150602083013561418b81613e22565b809150509250929050565b600080600080600080600080610100898b0312156141b357600080fd5b88356141be81613e22565b975060208901356141ce81613e22565b965060408901356141de81613e37565b955060608901356141ee816140a9565b945060808901356141fe816140a9565b935060a0890135925060c0890135614215816140b8565b8092505060e089013590509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b8181101561426557835183529284019291840191600101614249565b50909695505050505050565b600080600080600060a0868803121561428957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b602080825282518282018190526000919060409081850190868401855b828110156142f757815180516001600160a01b031685528601518685015292840192908501906001016142c9565b5091979650505050505050565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b805161435f81613e22565b919050565b60006020828403121561437657600080fd5b81516111fd81613e22565b805161435f816140a9565b805161ffff8116811461435f57600080fd5b600080600080600080600060e0888a0312156143b957600080fd5b87516143c481613e22565b60208901519097506143d5816140a9565b95506143e36040890161438c565b94506143f16060890161438c565b93506143ff6080890161438c565b925060a088015163ffffffff8116811461441857600080fd5b60c0890151909250614429816140b8565b8091505092959891949750929550565b60006020828403121561444b57600080fd5b5051919050565b60006020828403121561446457600080fd5b81516111fd816140b8565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761449c5761449c61446f565b92915050565b6000826144bf57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03929092168252602082015260400190565b6000600182016145055761450561446f565b5060010190565b8181038181111561449c5761449c61446f565b634e487b7160e01b600052603160045260246000fd5b600081518084526020808501945080840160005b8381101561456e5781516001600160a01b031687529582019590820190600101614549565b509495945050505050565b828152604060208201526000610d0f6040830184614535565b600060208083850312156145a557600080fd5b825167ffffffffffffffff808211156145bd57600080fd5b818501915085601f8301126145d157600080fd5b8151818111156145e3576145e3613ea4565b8060051b91506145f4848301613eba565b818152918301840191848101908884111561460e57600080fd5b938501935b8385101561462c57845182529385019390850190614613565b98975050505050505050565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b6000806040838503121561468e57600080fd5b505080516020909101519092909150565b805161435f81613e37565b80516001600160801b038116811461435f57600080fd5b6000806000806000806000806000806000806101808d8f0312156146e457600080fd5b8c516bffffffffffffffffffffffff8116811461470057600080fd5b9b5061470e60208e01614354565b9a5061471c60408e01614354565b995061472a60608e01614354565b985061473860808e0161469f565b975061474660a08e01614381565b965061475460c08e01614381565b955061476260e08e016146aa565b94506101008d015193506101208d015192506147816101408e016146aa565b91506147906101608e016146aa565b90509295989b509295989b509295989b565b8082018082111561449c5761449c61446f565b81516001600160a01b03168152610160810160208301516147e160208401826001600160a01b03169052565b5060408301516147f8604084018262ffffff169052565b50606083015161480d606084018260020b9052565b506080830151614822608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151614868828501826001600160a01b03169052565b505061014092830151919092015290565b6000806000806080858703121561488f57600080fd5b8451935061489f602086016146aa565b6040860151606090960151949790965092505050565b6000806000606084860312156148ca57600080fd5b6148d3846146aa565b925060208401519150604084015190509250925092565b60208082526021908201527f53656c6c696e6720434f434b20746f6b656e206973206e6f7420616c6c6f77656040820152601960fa1b606082015260800190565b85815284602082015260a06040820152600061494a60a0830186614535565b6001600160a01b0394909416606083015250608001529392505050565b6000825160005b81811015614988576020818601810151858301520161496e565b50600092019182525091905056fea26469706673582212208e65e89c6a397554b980dc77ccb027e32b134f9a7425b2d5213630d1f7ef45b164736f6c63430008130033000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe880000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984000000000000000000000000e592427a0aece92de3edee1f18e0157c058615640000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106102605760003560e01c80638da5cb5b11610144578063b44a2722116100b6578063d304277b1161007a578063d304277b146108af578063d6281921146108cf578063d62a853a146108ff578063ef10a2f71461092c578063f018a8c11461094c578063f2fde38b1461096c57600080fd5b8063b44a2722146107f9578063bc4a05051461082d578063bdbed7221461084d578063c04bc3521461086f578063c691b0a11461088f57600080fd5b8063a44616ec11610108578063a44616ec1461071d578063a9996e6c1461073d578063a9a8679b1461075d578063a9bbe4b61461077d578063abb6555a146107b1578063ad5c4648146107d157600080fd5b80638da5cb5b1461059b578063951583c3146105b957806397d56997146105f157806399fbab8814610625578063a2c1a3c3146106fd57600080fd5b806330ce76fa116101dd5780635d0d1ae2116101a15780635d0d1ae2146104f0578063715018a61461051057806378dc9059146105255780637d07b2d21461054557806382c4767b146105655780638b17c5bf1461057b57600080fd5b806330ce76fa1461041057806331c4e1251461044357806341690d571461046357806345608d001461049757806347539058146104b757600080fd5b80631c58db4f116102245780631c58db4f1461036357806326872330146103835780632689a5d2146103ad5780632a66f4bf146103cd5780632b112e49146103ed57600080fd5b80630165b0a41461026c5780630217ce49146102bd57806313ead562146102dd578063150b7a02146102fd5780631b55e3381461034157600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102a07f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156481565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102c957600080fd5b506102a06102d8366004613e09565b61098c565b3480156102e957600080fd5b506102a06102f8366004613e48565b6109b6565b34801561030957600080fd5b50610328610318366004613eeb565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016102b4565b34801561034d57600080fd5b5061036161035c366004613e09565b610d17565b005b34801561036f57600080fd5b5061036161037e366004613e09565b611066565b34801561038f57600080fd5b5060065461039d9060ff1681565b60405190151581526020016102b4565b3480156103b957600080fd5b506102a06103c8366004613faf565b611165565b3480156103d957600080fd5b506103616103e8366004613ffa565b611204565b3480156103f957600080fd5b50610402611318565b6040519081526020016102b4565b34801561041c57600080fd5b5061043061042b366004613e09565b611497565b60405160029190910b81526020016102b4565b34801561044f57600080fd5b5061036161045e366004613ffa565b61163c565b34801561046f57600080fd5b506102a07f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b3480156104a357600080fd5b506104026104b2366004614017565b611807565b3480156104c357600080fd5b5061039d6104d2366004613ffa565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156104fc57600080fd5b5061036161050b366004614058565b611940565b34801561051c57600080fd5b50610361611997565b34801561053157600080fd5b50610361610540366004613e09565b6119ab565b34801561055157600080fd5b50610402610560366004613e09565b611e2a565b34801561057157600080fd5b506102a061dead81565b34801561058757600080fd5b50610430610596366004613faf565b611e4b565b3480156105a757600080fd5b506000546001600160a01b03166102a0565b3480156105c557600080fd5b506105d96105d4366004613e09565b611f5c565b6040516001600160801b0390911681526020016102b4565b3480156105fd57600080fd5b506102a07f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f98481565b34801561063157600080fd5b506106a4610640366004613e09565b6007602052600090815260409020805460018201546002808401546003909401546001600160a01b0393841694929392831692811691600160a01b820462ffffff1691600160b81b8104820b91600160d01b8204900b90600160e81b900460ff1688565b604080516001600160a01b03998a16815260208101989098529588169587019590955292909516606085015262ffffff166080840152600293840b60a084015290920b60c082015290151560e0820152610100016102b4565b34801561070957600080fd5b506103616107183660046140c6565b611ffb565b34801561072957600080fd5b5061036161073836600461415d565b612470565b34801561074957600080fd5b50610361610758366004613e09565b6125b0565b34801561076957600080fd5b50610361610778366004613ffa565b6125cc565b34801561078957600080fd5b506102a07f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156107bd57600080fd5b506103616107cc366004613ffa565b6126e9565b3480156107dd57600080fd5b506102a073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561080557600080fd5b506102a07f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8881565b34801561083957600080fd5b50610361610848366004614196565b612804565b34801561085957600080fd5b50610862612cfb565b6040516102b4919061422d565b34801561087b57600080fd5b5061036161088a366004613ffa565b612d53565b34801561089b57600080fd5b506103616108aa366004614271565b612e33565b3480156108bb57600080fd5b506103616108ca366004614017565b6130c1565b3480156108db57600080fd5b5061039d6108ea366004613ffa565b600a6020526000908152604090205460ff1681565b34801561090b57600080fd5b5061091f61091a366004613ffa565b613110565b6040516102b491906142ac565b34801561093857600080fd5b506002546102a0906001600160a01b031681565b34801561095857600080fd5b50610361610967366004613e09565b61332a565b34801561097857600080fd5b50610361610987366004613ffa565b6135e1565b6009818154811061099c57600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600b602052604081205460ff16806109de57506000546001600160a01b031633145b610a035760405162461bcd60e51b81526004016109fa90614304565b60405180910390fd5b604051630b4c774160e11b81526001600160a01b037f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9841690631698ee8290610a539088908890889060040161432c565b602060405180830381865afa158015610a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a949190614364565b90506001600160a01b038116610be75760405163a167129560e01b81526001600160a01b037f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984169063a167129590610af49088908890889060040161432c565b6020604051808303816000875af1158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190614364565b90506001600160a01b038116610b875760405162461bcd60e51b815260206004820152601560248201527411985a5b1959081d1bc818dc99585d19481c1bdbdb605a1b60448201526064016109fa565b60405163f637731d60e01b81526001600160a01b03838116600483015282169063f637731d90602401600060405180830381600087803b158015610bca57600080fd5b505af1158015610bde573d6000803e3d6000fd5b50505050610cc2565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4b919061439e565b5050505050509050806001600160a01b0316600003610cc05760405163f637731d60e01b81526001600160a01b03848116600483015283169063f637731d90602401600060405180830381600087803b158015610ca757600080fd5b505af1158015610cbb573d6000803e3d6000fd5b505050505b505b6001600160a01b038116610d0f5760405162461bcd60e51b8152602060048201526014602482015273141bdbdb0818dc99585d1a5bdb8819985a5b195960621b60448201526064016109fa565b949350505050565b610d1f613657565b60008111610d6f5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016109fa565b6002546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc9190614439565b905081811015610e2e5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74205842432062616c616e6365000000000000000060448201526064016109fa565b6002546040516323b872dd60e01b815233600482015261dead6024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab9190614452565b506000610eb6611318565b610ec884670de0b6b3a7640000614485565b610ed291906144a2565b905060005b60095481101561105757600060098281548110610ef657610ef66144c4565b60009182526020808320909101546001600160a01b0316808352600a90915260409091205490915060ff16610f2b5750611045565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f969190614439565b905080600003610fa7575050611045565b6000670de0b6b3a7640000610fbc8684614485565b610fc691906144a2565b905080156110415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610ffc90339085906004016144da565b6020604051808303816000875af115801561101b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103f9190614452565b505b5050505b8061104f816144f3565b915050610ed7565b50505061106360018055565b50565b336000908152600b602052604090205460ff168061108e57506000546001600160a01b031633145b6110aa5760405162461bcd60e51b81526004016109fa90614304565b478111156110fa5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e6365000000000000000060448201526064016109fa565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561114957600080fd5b505af115801561115d573d6000803e3d6000fd5b505050505050565b6000807f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9846001600160a01b0316631698ee828686866040518463ffffffff1660e01b81526004016111b89392919061432c565b602060405180830381865afa1580156111d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f99190614364565b9150505b9392505050565b336000908152600b602052604090205460ff168061122c57506000546001600160a01b031633145b6112485760405162461bcd60e51b81526004016109fa90614304565b6001600160a01b0381166000908152600a602052604090205460ff16156112b15760405162461bcd60e51b815260206004820152601760248201527f546f6b656e20616c726561647920636c61696d61626c6500000000000000000060448201526064016109fa565b6009805460018181019092557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b039093166001600160a01b0319909316831790556000918252600a6020526040909120805460ff19169091179055565b600080600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113929190614439565b6002546040516370a0823160e01b815261dead60048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156113e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114069190614439565b6002546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114789190614439565b905080611485838561450c565b61148f919061450c565b935050505090565b600081815260076020908152604080832081516101008101835281546001600160a01b039081168252600183015494820194909452600280830154851682850181905260039093015480861660608401819052600160a01b820462ffffff1660808501819052600160b81b8304840b60a0860152600160d01b830490930b60c0850152600160e81b90910460ff16151560e08401529351630b4c774160e11b81529194929392909186917f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9841690631698ee829061157c9087908790879060040161432c565b602060405180830381865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd9190614364565b905060008190506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611604573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611628919061439e565b50939e9d5050505050505050505050505050565b336000908152600b602052604090205460ff168061166457506000546001600160a01b031633145b6116805760405162461bcd60e51b81526004016109fa90614304565b6001600160a01b0381166000908152600a602052604090205460ff166116de5760405162461bcd60e51b8152602060048201526013602482015272546f6b656e206e6f7420636c61696d61626c6560681b60448201526064016109fa565b6001600160a01b0381166000908152600a60205260408120805460ff191690555b60095481101561180357816001600160a01b031660098281548110611726576117266144c4565b6000918252602090912001546001600160a01b0316036117f157600980546117509060019061450c565b81548110611760576117606144c4565b600091825260209091200154600980546001600160a01b03909216918390811061178c5761178c6144c4565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060098054806117cb576117cb61451f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806117fb816144f3565b9150506116ff565b5050565b604080516002808252606082018352600092839291906020830190803683370190505090508481600081518110611840576118406144c4565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110611874576118746144c4565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81526000917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063d06ca61f906118d39087908690600401614579565b600060405180830381865afa1580156118f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119189190810190614592565b90508060018151811061192d5761192d6144c4565b6020026020010151925050509392505050565b336000908152600b602052604090205460ff168061196857506000546001600160a01b031633145b6119845760405162461bcd60e51b81526004016109fa90614304565b611990848484846136b0565b5050505050565b61199f6138df565b6119a96000613939565b565b336000908152600b602052604090205460ff16806119d357506000546001600160a01b031633145b6119ef5760405162461bcd60e51b81526004016109fa90614304565b604080516080810182528281523060208201526001600160801b038183018190526060820152905163fc6f786560e01b81526001600160a01b037f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88169163fc6f786591611a5f9190600401614638565b60408051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa1919061467b565b505060405163133f757160e31b8152600481018290526000907f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b0316906399fbab889060240161018060405180830381865afa158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3091906146c1565b505050509750505050505050507f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b0316630c49ccbe6040518060a00160405280858152602001846001600160801b03168152602001600081526020016000815260200142610258611ba891906147a2565b9052604080516001600160e01b031960e085901b1681528251600482015260208301516001600160801b0316602482015290820151604482015260608201516064820152608090910151608482015260a40160408051808303816000875af1158015611c18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3c919061467b565b5050604080516080810182528381523060208201526001600160801b038183018190526060820152905163fc6f786560e01b81526001600160a01b037f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88169163fc6f786591611cae9190600401614638565b60408051808303816000875af1158015611ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf0919061467b565b5050604051630852cd8d60e31b8152600481018390527f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b0316906342966c6890602401600060405180830381600087803b158015611d5457600080fd5b505af1158015611d68573d6000803e3d6000fd5b5050505060005b600854811015611e25578260088281548110611d8d57611d8d6144c4565b906000526020600020015403611e135760088054611dad9060019061450c565b81548110611dbd57611dbd6144c4565b906000526020600020015460088281548110611ddb57611ddb6144c4565b6000918252602090912001556008805480611df857611df861451f565b60019003818190600052602060002001600090559055505050565b80611e1d816144f3565b915050611d6f565b505050565b60088181548110611e3a57600080fd5b600091825260209091200154905081565b6000807f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9846001600160a01b0316631698ee828686866040518463ffffffff1660e01b8152600401611e9e9392919061432c565b602060405180830381865afa158015611ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edf9190614364565b905060008190506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4a919061439e565b50939c9b505050505050505050505050565b60405163133f757160e31b8152600481018290526000907f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b0316906399fbab889060240161018060405180830381865afa158015611fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe991906146c1565b50929c9b505050505050505050505050565b336000908152600b602052604090205460ff168061202357506000546001600160a01b031633145b61203f5760405162461bcd60e51b81526004016109fa90614304565b60405163095ea7b360e01b81526001600160a01b0389169063095ea7b39061208d907f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe889087906004016144da565b6020604051808303816000875af11580156120ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d09190614452565b5060405163095ea7b360e01b81526001600160a01b0388169063095ea7b39061211f907f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe889086906004016144da565b6020604051808303816000875af115801561213e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121629190614452565b5060006040518061016001604052808a6001600160a01b03168152602001896001600160a01b031681526020018862ffffff1681526020018760020b81526020018660020b81526020018581526020018481526020016000815260200160008152602001306001600160a01b03168152602001426102586121e391906147a2565b9052604051634418b22b60e11b81529091506001600160a01b037f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8816906388316456906122349084906004016147b5565b6080604051808303816000875af1158015612253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122779190614879565b909150600360006004600060056000869190505585919050558491905055505050604051806101000160405280306001600160a01b0316815260200160035481526020018a6001600160a01b03168152602001896001600160a01b031681526020018862ffffff1681526020018760020b81526020018660020b815260200183151581525060076000600354815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548162ffffff021916908362ffffff16021790555060a08201518160030160176101000a81548162ffffff021916908360020b62ffffff16021790555060c082015181600301601a6101000a81548162ffffff021916908360020b62ffffff16021790555060e082015181600301601d6101000a81548160ff02191690831515021790555090505060086003549080600181540180825580915050600190039060005260206000200160009091909190915055505050505050505050565b6124786138df565b60065460ff16156124cb5760405162461bcd60e51b815260206004820152601c60248201527f4e6f207769746864726177206f6e636520436f636b206973207365740000000060448201526064016109fa565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015612512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125369190614439565b60405163a9059cbb60e01b81529091506001600160a01b0384169063a9059cbb9061256790859085906004016144da565b6020604051808303816000875af1158015612586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125aa9190614452565b50505050565b6125b8613657565b6125c181613989565b505061106360018055565b6125d46138df565b6001600160a01b0381166126345760405162461bcd60e51b815260206004820152602160248201527f5a65726f20616464726573732063616e6e6f7420626520617574686f72697a656044820152601960fa1b60648201526084016109fa565b6001600160a01b0381166000908152600b602052604090205460ff161561269d5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420616c726561647920617574686f72697a656400000000000060448201526064016109fa565b6001600160a01b0381166000818152600b6020526040808220805460ff19166001179055517f10e4428e2647e1f920c2b46454982af8924babe9f09c0c629254a87a3b06d9ab9190a250565b6126f16138df565b6001600160a01b0381166127535760405162461bcd60e51b815260206004820152602360248201527f5a65726f20616464726573732063616e6e6f74206265206465617574686f72696044820152621e995960ea1b60648201526084016109fa565b6001600160a01b0381166000908152600b602052604090205460ff166127bb5760405162461bcd60e51b815260206004820152601960248201527f4163636f756e74206973206e6f7420617574686f72697a65640000000000000060448201526064016109fa565b6001600160a01b0381166000818152600b6020526040808220805460ff19169055517fc2e0a577963cbf13d6b3b04206effff57f0b291f749f2b6623784d061a070f889190a250565b336000908152600b602052604090205460ff168061282c57506000546001600160a01b031633145b6128485760405162461bcd60e51b81526004016109fa90614304565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260006001600160a01b038a1682146128755789612877565b885b905083156128905761288a828287613a4a565b5061289e565b61289c82828a886136b0565b505b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa1580156128e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129099190614439565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015612953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129779190614439565b90506129a48c7f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8884613d06565b6129cf8b7f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8883613d06565b60006040518061016001604052808e6001600160a01b031681526020018d6001600160a01b031681526020018c62ffffff1681526020018b60020b81526020018a60020b81526020018481526020018381526020018785612a3091906144a2565b612a3a908661450c565b8152602001612a4988856144a2565b612a53908561450c565b8152306020820152604001612a6a426102586147a2565b9052604051634418b22b60e11b81529091506001600160a01b037f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe881690638831645690612abb9084906004016147b5565b6080604051808303816000875af1158015612ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afe9190614879565b909150600360006004600060056000869190505585919050558491905055505050604051806101000160405280306001600160a01b0316815260200160035481526020018e6001600160a01b031681526020018d6001600160a01b031681526020018c62ffffff1681526020018b60020b81526020018a60020b815260200188151581525060076000600354815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548162ffffff021916908362ffffff16021790555060a08201518160030160176101000a81548162ffffff021916908360020b62ffffff16021790555060c082015181600301601a6101000a81548162ffffff021916908360020b62ffffff16021790555060e082015181600301601d6101000a81548160ff0219169083151502179055509050506008600354908060018154018082558091505060019003906000526020600020016000909190919091505550505050505050505050505050565b60606008805480602002602001604051908101604052809291908181526020018280548015612d4957602002820191906000526020600020905b815481526020019060010190808311612d35575b5050505050905090565b612d5b6138df565b60065460ff1615612dae5760405162461bcd60e51b815260206004820152601960248201527f436f636b2063616e206f6e6c7920626520736574206f6e63650000000000000060448201526064016109fa565b6001600160a01b038116612e045760405162461bcd60e51b815260206004820152601b60248201527f436f636b20616464726573732063616e6e6f74206265207a65726f000000000060448201526064016109fa565b600280546001600160a01b0319166001600160a01b03929092169190911790556006805460ff19166001179055565b336000908152600b602052604090205460ff1680612e5b57506000546001600160a01b031633145b612e775760405162461bcd60e51b81526004016109fa90614304565b600085815260076020526040908190206002810154915163095ea7b360e01b815290916001600160a01b03169063095ea7b390612eda907f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe889089906004016144da565b6020604051808303816000875af1158015612ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1d9190614452565b50600381015460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390612f72907f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe889088906004016144da565b6020604051808303816000875af1158015612f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb59190614452565b5060006040518060c0016040528088815260200187815260200186815260200185815260200184815260200142610258612fef91906147a2565b90526040805163219f5d1760e01b81528251600482015260208301516024820152908201516044820152606082015160648201526080820151608482015260a082015160a48201529091507f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b03169063219f5d179060c4016060604051808303816000875af115801561308d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b191906148b5565b6005556004555050505050505050565b336000908152600b602052604090205460ff16806130e957506000546001600160a01b031633145b6131055760405162461bcd60e51b81526004016109fa90614304565b6125aa838383613a4a565b6002546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a0823190602401602060405180830381865afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131839190614439565b9050600061318f611318565b6131a183670de0b6b3a7640000614485565b6131ab91906144a2565b60095490915060009067ffffffffffffffff8111156131cc576131cc613ea4565b60405190808252806020026020018201604052801561321157816020015b60408051808201909152600080825260208201528152602001906001900390816131ea5790505b50905060005b60095481101561332157600060098281548110613236576132366144c4565b60009182526020822001546040516370a0823160e01b81523060048201526001600160a01b03909116925082906370a0823190602401602060405180830381865afa158015613289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ad9190614439565b90506000670de0b6b3a76400006132c48784614485565b6132ce91906144a2565b90506040518060400160405280846001600160a01b0316815260200182815250858581518110613300576133006144c4565b60200260200101819052505050508080613319906144f3565b915050613217565b50949350505050565b336000908152600b602052604090205460ff168061335257506000546001600160a01b031633145b61336e5760405162461bcd60e51b81526004016109fa90614304565b600081116133be5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016109fa565b6040516370a0823160e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290829082906370a0823190602401602060405180830381865afa158015613411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134359190614439565b10156134835760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420574554482062616c616e63650000000000000060448201526064016109fa565b604051636eb1769f60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602482015282906001600160a01b0383169063dd62ed3e90604401602060405180830381865afa1580156134e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135079190614439565b10156135945760405163095ea7b360e01b81526001600160a01b0382169063095ea7b39061354f9073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29086906004016144da565b6020604051808303816000875af115801561356e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135929190614452565b505b604051632e1a7d4d60e01b81526004810183905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b15801561114957600080fd5b6135e96138df565b6001600160a01b03811661364e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b61106381613939565b6002600154036136a95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109fa565b6002600155565b6002546000906001600160a01b03908116908616036136e15760405162461bcd60e51b81526004016109fa906148ea565b816000036136f157506000610d0f565b60405163095ea7b360e01b81526001600160a01b0386169063095ea7b39061373f907f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615649086906004016144da565b6020604051808303816000875af115801561375e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137829190614452565b506000604051806101000160405280876001600160a01b03168152602001866001600160a01b031681526020018562ffffff168152602001306001600160a01b03168152602001426102586137d791906147a2565b8152602080820186905260006040808401829052606093840191909152805163414bf38960e01b815284516001600160a01b03908116600483015292850151831660248201529084015162ffffff16604482015291830151811660648301526080830151608483015260a083015160a483015260c083015160c483015260e0830151811660e48301529192507f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615649091169063414bf38990610104016020604051808303816000875af11580156138b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d59190614439565b9695505050505050565b6000546001600160a01b031633146119a95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516080810182528281523060208201526001600160801b038183018190526060820152905163fc6f786560e01b815260009182916001600160a01b037f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88169163fc6f7865916139fe9190600401614638565b60408051808303816000875af1158015613a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a40919061467b565b9094909350915050565b6002546000906001600160a01b0390811690851603613a7b5760405162461bcd60e51b81526004016109fa906148ea565b81600003613a8b575060006111fd565b60405163095ea7b360e01b81526001600160a01b0385169063095ea7b390613ad9907f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9086906004016144da565b6020604051808303816000875af1158015613af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1c9190614452565b506040805160028082526060820183526000926020830190803683370190505090508481600081518110613b5257613b526144c4565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110613b8657613b866144c4565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000918616906370a0823190602401602060405180830381865afa158015613bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bff9190614439565b90506001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d16635c11d7958560008530613c4042603c6147a2565b6040518663ffffffff1660e01b8152600401613c6095949392919061492b565b600060405180830381600087803b158015613c7a57600080fd5b505af1158015613c8e573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b03881691506370a0823190602401602060405180830381865afa158015613cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cfc9190614439565b6138d5919061450c565b600080846001600160a01b031663095ea7b360e01b8585604051602401613d2e9291906144da565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613d6c9190614967565b6000604051808303816000865af19150503d8060008114613da9576040519150601f19603f3d011682016040523d82523d6000602084013e613dae565b606091505b5091509150818015613dd8575080511580613dd8575080806020019051810190613dd89190614452565b6119905760405162461bcd60e51b8152602060048201526002602482015261534160f01b60448201526064016109fa565b600060208284031215613e1b57600080fd5b5035919050565b6001600160a01b038116811461106357600080fd5b62ffffff8116811461106357600080fd5b60008060008060808587031215613e5e57600080fd5b8435613e6981613e22565b93506020850135613e7981613e22565b92506040850135613e8981613e37565b91506060850135613e9981613e22565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ee357613ee3613ea4565b604052919050565b60008060008060808587031215613f0157600080fd5b8435613f0c81613e22565b9350602085810135613f1d81613e22565b935060408601359250606086013567ffffffffffffffff80821115613f4157600080fd5b818801915088601f830112613f5557600080fd5b813581811115613f6757613f67613ea4565b613f79601f8201601f19168501613eba565b91508082528984828501011115613f8f57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080600060608486031215613fc457600080fd5b8335613fcf81613e22565b92506020840135613fdf81613e22565b91506040840135613fef81613e37565b809150509250925092565b60006020828403121561400c57600080fd5b81356111fd81613e22565b60008060006060848603121561402c57600080fd5b833561403781613e22565b9250602084013561404781613e22565b929592945050506040919091013590565b6000806000806080858703121561406e57600080fd5b843561407981613e22565b9350602085013561408981613e22565b9250604085013561409981613e37565b9396929550929360600135925050565b8060020b811461106357600080fd5b801515811461106357600080fd5b600080600080600080600080610100898b0312156140e357600080fd5b88356140ee81613e22565b975060208901356140fe81613e22565b9650604089013561410e81613e37565b9550606089013561411e816140a9565b9450608089013561412e816140a9565b935060a0890135925060c0890135915060e089013561414c816140b8565b809150509295985092959890939650565b6000806040838503121561417057600080fd5b823561417b81613e22565b9150602083013561418b81613e22565b809150509250929050565b600080600080600080600080610100898b0312156141b357600080fd5b88356141be81613e22565b975060208901356141ce81613e22565b965060408901356141de81613e37565b955060608901356141ee816140a9565b945060808901356141fe816140a9565b935060a0890135925060c0890135614215816140b8565b8092505060e089013590509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b8181101561426557835183529284019291840191600101614249565b50909695505050505050565b600080600080600060a0868803121561428957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b602080825282518282018190526000919060409081850190868401855b828110156142f757815180516001600160a01b031685528601518685015292840192908501906001016142c9565b5091979650505050505050565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b805161435f81613e22565b919050565b60006020828403121561437657600080fd5b81516111fd81613e22565b805161435f816140a9565b805161ffff8116811461435f57600080fd5b600080600080600080600060e0888a0312156143b957600080fd5b87516143c481613e22565b60208901519097506143d5816140a9565b95506143e36040890161438c565b94506143f16060890161438c565b93506143ff6080890161438c565b925060a088015163ffffffff8116811461441857600080fd5b60c0890151909250614429816140b8565b8091505092959891949750929550565b60006020828403121561444b57600080fd5b5051919050565b60006020828403121561446457600080fd5b81516111fd816140b8565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761449c5761449c61446f565b92915050565b6000826144bf57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03929092168252602082015260400190565b6000600182016145055761450561446f565b5060010190565b8181038181111561449c5761449c61446f565b634e487b7160e01b600052603160045260246000fd5b600081518084526020808501945080840160005b8381101561456e5781516001600160a01b031687529582019590820190600101614549565b509495945050505050565b828152604060208201526000610d0f6040830184614535565b600060208083850312156145a557600080fd5b825167ffffffffffffffff808211156145bd57600080fd5b818501915085601f8301126145d157600080fd5b8151818111156145e3576145e3613ea4565b8060051b91506145f4848301613eba565b818152918301840191848101908884111561460e57600080fd5b938501935b8385101561462c57845182529385019390850190614613565b98975050505050505050565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b6000806040838503121561468e57600080fd5b505080516020909101519092909150565b805161435f81613e37565b80516001600160801b038116811461435f57600080fd5b6000806000806000806000806000806000806101808d8f0312156146e457600080fd5b8c516bffffffffffffffffffffffff8116811461470057600080fd5b9b5061470e60208e01614354565b9a5061471c60408e01614354565b995061472a60608e01614354565b985061473860808e0161469f565b975061474660a08e01614381565b965061475460c08e01614381565b955061476260e08e016146aa565b94506101008d015193506101208d015192506147816101408e016146aa565b91506147906101608e016146aa565b90509295989b509295989b509295989b565b8082018082111561449c5761449c61446f565b81516001600160a01b03168152610160810160208301516147e160208401826001600160a01b03169052565b5060408301516147f8604084018262ffffff169052565b50606083015161480d606084018260020b9052565b506080830151614822608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151614868828501826001600160a01b03169052565b505061014092830151919092015290565b6000806000806080858703121561488f57600080fd5b8451935061489f602086016146aa565b6040860151606090960151949790965092505050565b6000806000606084860312156148ca57600080fd5b6148d3846146aa565b925060208401519150604084015190509250925092565b60208082526021908201527f53656c6c696e6720434f434b20746f6b656e206973206e6f7420616c6c6f77656040820152601960fa1b606082015260800190565b85815284602082015260a06040820152600061494a60a0830186614535565b6001600160a01b0394909416606083015250608001529392505050565b6000825160005b81811015614988576020818601810151858301520161496e565b50600092019182525091905056fea26469706673582212208e65e89c6a397554b980dc77ccb027e32b134f9a7425b2d5213630d1f7ef45b164736f6c63430008130033

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

000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe880000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984000000000000000000000000e592427a0aece92de3edee1f18e0157c058615640000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _nonfungiblePositionManager (address): 0xC36442b4a4522E871399CD717aBDD847Ab11FE88
Arg [1] : _V3Factory (address): 0x1F98431c8aD98523631AE4a59f267346ea31F984
Arg [2] : _V3swapRouter (address): 0xE592427A0AEce92De3Edee1F18E0157C05861564
Arg [3] : _V2Factory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [4] : _V2swapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88
Arg [1] : 0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984
Arg [2] : 000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564
Arg [3] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [4] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

13885:20176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14113:43;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;199:32:1;;;181:51;;169:2;154:18;14113:43:0;;;;;;;;14677:32;;;;;;;;;;-1:-1:-1;14677:32:0;;;;;:::i;:::-;;:::i;17767:904::-;;;;;;;;;;-1:-1:-1;17767:904:0;;;;;:::i;:::-;;:::i;18944:219::-;;;;;;;;;;-1:-1:-1;18944:219:0;;;;;:::i;:::-;-1:-1:-1;;;18944:219:0;;;;;;;;;;-1:-1:-1;;;;;;3366:33:1;;;3348:52;;3336:2;3321:18;18944:219:0;3204:202:1;31237:1184:0;;;;;;;;;;-1:-1:-1;31237:1184:0;;;;;:::i;:::-;;:::i;:::-;;16991:201;;;;;;;;;;-1:-1:-1;16991:201:0;;;;;:::i;:::-;;:::i;14552:21::-;;;;;;;;;;-1:-1:-1;14552:21:0;;;;;;;;;;;3576:14:1;;3569:22;3551:41;;3539:2;3524:18;14552:21:0;3411:187:1;19171:217:0;;;;;;;;;;-1:-1:-1;19171:217:0;;;;;:::i;:::-;;:::i;30376:224::-;;;;;;;;;;-1:-1:-1;30376:224:0;;;;;:::i;:::-;;:::i;32435:367::-;;;;;;;;;;;;;:::i;:::-;;;4533:25:1;;;4521:2;4506:18;32435:367:0;4387:177:1;20261:486:0;;;;;;;;;;-1:-1:-1;20261:486:0;;;;;:::i;:::-;;:::i;:::-;;;4836:1:1;4825:21;;;;4807:40;;4795:2;4780:18;20261:486:0;4665:188:1;30667:562:0;;;;;;;;;;-1:-1:-1;30667:562:0;;;;;:::i;:::-;;:::i;14069:37::-;;;;;;;;;;;;;;;19398:332;;;;;;;;;;-1:-1:-1;19398:332:0;;;;;:::i;:::-;;:::i;16685:129::-;;;;;;;;;;-1:-1:-1;16685:129:0;;;;;:::i;:::-;-1:-1:-1;;;;;16778:28:0;16754:4;16778:28;;;:19;:28;;;;;;;;;16685:129;20932:183;;;;;;;;;;-1:-1:-1;20932:183:0;;;;;:::i;:::-;;:::i;6076:103::-;;;;;;;;;;;;;:::i;28825:1486::-;;;;;;;;;;-1:-1:-1;28825:1486:0;;;;;:::i;:::-;;:::i;14640:28::-;;;;;;;;;;-1:-1:-1;14640:28:0;;;;;:::i;:::-;;:::i;14345:73::-;;;;;;;;;;;;14376:42;14345:73;;19932:321;;;;;;;;;;-1:-1:-1;19932:321:0;;;;;:::i;:::-;;:::i;5428:87::-;;;;;;;;;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;5428:87;;19738:183;;;;;;;;;;-1:-1:-1;19738:183:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6310:47:1;;;6292:66;;6280:2;6265:18;19738:183:0;6146:218:1;14025:37:0;;;;;;;;;;;;;;;14588:45;;;;;;;;;;-1:-1:-1;14588:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14588:45:0;;;;;;;;;;;;;-1:-1:-1;;;14588:45:0;;;;;-1:-1:-1;;;14588:45:0;;;;;-1:-1:-1;;;14588:45:0;;;;;-1:-1:-1;;;14588:45:0;;;;;;;;;;-1:-1:-1;;;;;7075:15:1;;;7057:34;;7122:2;7107:18;;7100:34;;;;7170:15;;;7150:18;;;7143:43;;;;7222:15;;;;7217:2;7202:18;;7195:43;7287:8;7275:21;7269:3;7254:19;;7247:50;7345:1;7334:21;;;7037:3;7313:19;;7306:50;7393:21;;;7387:3;7372:19;;7365:50;7459:14;;7452:22;7446:3;7431:19;;7424:51;7006:3;6991:19;14588:45:0;6692:789:1;25583:1339:0;;;;;;;;;;-1:-1:-1;25583:1339:0;;;;;:::i;:::-;;:::i;33789:265::-;;;;;;;;;;-1:-1:-1;33789:265:0;;;;;:::i;:::-;;:::i;23062:93::-;;;;;;;;;;-1:-1:-1;23062:93:0;;;;;:::i;:::-;;:::i;15907:319::-;;;;;;;;;;-1:-1:-1;15907:319:0;;;;;:::i;:::-;;:::i;14165:39::-;;;;;;;;;;;;;;;16302:324;;;;;;;;;;-1:-1:-1;16302:324:0;;;;;:::i;:::-;;:::i;14213:73::-;;;;;;;;;;;;14244:42;14213:73;;13945;;;;;;;;;;;;;;;26930:1887;;;;;;;;;;-1:-1:-1;26930:1887:0;;;;;:::i;:::-;;:::i;16825:102::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18685:251::-;;;;;;;;;;-1:-1:-1;18685:251:0;;;;;:::i;:::-;;:::i;24417:1156::-;;;;;;;;;;-1:-1:-1;24417:1156:0;;;;;:::i;:::-;;:::i;20764:160::-;;;;;;;;;;-1:-1:-1;20764:160:0;;;;;:::i;:::-;;:::i;14716:45::-;;;;;;;;;;-1:-1:-1;14716:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32905:876;;;;;;;;;;-1:-1:-1;32905:876:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14426:22::-;;;;;;;;;;-1:-1:-1;14426:22:0;;;;-1:-1:-1;;;;;14426:22:0;;;17258:501;;;;;;;;;;-1:-1:-1;17258:501:0;;;;;:::i;:::-;;:::i;6334:201::-;;;;;;;;;;-1:-1:-1;6334:201:0;;;;;:::i;:::-;;:::i;14677:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14677:32:0;;-1:-1:-1;14677:32:0;:::o;17767:904::-;15008:10;17960:12;14988:31;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;;;;;;;;;17992:41:::1;::::0;-1:-1:-1;;;17992:41:0;;-1:-1:-1;;;;;17992:9:0::1;:17;::::0;::::1;::::0;:41:::1;::::0;18010:7;;18019;;18028:4;;17992:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17985:48:::0;-1:-1:-1;;;;;;18106:18:0;::::1;18102:476;;18148:44;::::0;-1:-1:-1;;;18148:44:0;;-1:-1:-1;;;;;18148:9:0::1;:20;::::0;::::1;::::0;:44:::1;::::0;18169:7;;18178;;18187:4;;18148:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18141:51:::0;-1:-1:-1;;;;;;18215:18:0;::::1;18207:52;;;::::0;-1:-1:-1;;;18207:52:0;;14247:2:1;18207:52:0::1;::::0;::::1;14229:21:1::0;14286:2;14266:18;;;14259:30;-1:-1:-1;;;14305:18:1;;;14298:51;14366:18;;18207:52:0::1;14045:345:1::0;18207:52:0::1;18274:39;::::0;-1:-1:-1;;;18274:39:0;;-1:-1:-1;;;;;199:32:1;;;18274:39:0::1;::::0;::::1;181:51:1::0;18274:24:0;::::1;::::0;::::1;::::0;154:18:1;;18274:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18102:476;;;18404:20;18442:4;-1:-1:-1::0;;;;;18434:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18403:52;;;;;;;;18474:12;-1:-1:-1::0;;;;;18474:17:0::1;18490:1;18474:17:::0;18470:97:::1;;18512:39;::::0;-1:-1:-1;;;18512:39:0;;-1:-1:-1;;;;;199:32:1;;;18512:39:0::1;::::0;::::1;181:51:1::0;18512:24:0;::::1;::::0;::::1;::::0;154:18:1;;18512:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18470:97;18331:247;18102:476;-1:-1:-1::0;;;;;18598:18:0;::::1;18590:51;;;::::0;-1:-1:-1;;;18590:51:0;;16044:2:1;18590:51:0::1;::::0;::::1;16026:21:1::0;16083:2;16063:18;;;16056:30;-1:-1:-1;;;16102:18:1;;;16095:50;16162:18;;18590:51:0::1;15842:344:1::0;18590:51:0::1;17767:904:::0;;;;;;:::o;31237:1184::-;2405:21;:19;:21::i;:::-;31332:1:::1;31318:11;:15;31310:57;;;::::0;-1:-1:-1;;;31310:57:0;;16393:2:1;31310:57:0::1;::::0;::::1;16375:21:1::0;16432:2;16412:18;;;16405:30;16471:31;16451:18;;;16444:59;16520:18;;31310:57:0::1;16191:353:1::0;31310:57:0::1;31400:8;::::0;:30:::1;::::0;-1:-1:-1;;;31400:30:0;;31419:10:::1;31400:30;::::0;::::1;181:51:1::0;31378:19:0::1;::::0;-1:-1:-1;;;;;31400:8:0::1;::::0;:18:::1;::::0;154::1;;31400:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31378:52;;31464:11;31449;:26;;31441:63;;;::::0;-1:-1:-1;;;31441:63:0;;16940:2:1;31441:63:0::1;::::0;::::1;16922:21:1::0;16979:2;16959:18;;;16952:30;17018:26;16998:18;;;16991:54;17062:18;;31441:63:0::1;16738:348:1::0;31441:63:0::1;31521:8;::::0;:52:::1;::::0;-1:-1:-1;;;31521:52:0;;31543:10:::1;31521:52;::::0;::::1;17331:34:1::0;14376:42:0::1;17381:18:1::0;;;17374:43;17433:18;;;17426:34;;;-1:-1:-1;;;;;31521:8:0;;::::1;::::0;:21:::1;::::0;17266:18:1;;31521:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31676:27;31729:22;:20;:22::i;:::-;31707:18;:11:::0;31721:4:::1;31707:18;:::i;:::-;31706:45;;;;:::i;:::-;31676:75;;31769:9;31764:650;31788:15;:22:::0;31784:26;::::1;31764:650;;;31832:13;31848:15;31864:1;31848:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;31848:18:0::1;31886:20:::0;;;:13:::1;:20:::0;;;;;;;;31848:18;;-1:-1:-1;31886:20:0::1;;31881:35;;31908:8;;;31881:35;31978:38;::::0;-1:-1:-1;;;31978:38:0;;32010:4:::1;31978:38;::::0;::::1;181:51:1::0;31955:20:0::1;::::0;-1:-1:-1;;;;;31978:23:0;::::1;::::0;::::1;::::0;154:18:1;;31978:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31955:61;;32035:12;32051:1;32035:17:::0;32031:31:::1;;32054:8;;;;32031:31;32208:23;32273:4;32235:34;32250:19:::0;32235:12;:34:::1;:::i;:::-;32234:43;;;;:::i;:::-;32208:69:::0;-1:-1:-1;32296:19:0;;32292:111:::1;;32336:51;::::0;-1:-1:-1;;;32336:51:0;;-1:-1:-1;;;;;32336:22:0;::::1;::::0;::::1;::::0;:51:::1;::::0;32359:10:::1;::::0;32371:15;;32336:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32292:111;31817:597;;;31764:650;31812:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31764:650;;;;31299:1122;;2449:20:::0;1843:1;2969:22;;2786:213;2449:20;31237:1184;:::o;16991:201::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;17077:21:::1;17067:6;:31;;17059:68;;;::::0;-1:-1:-1;;;17059:68:0;;19001:2:1;17059:68:0::1;::::0;::::1;18983:21:1::0;19040:2;19020:18;;;19013:30;19079:26;19059:18;;;19052:54;19123:18;;17059:68:0::1;18799:348:1::0;17059:68:0::1;14244:42;-1:-1:-1::0;;;;;17148:19:0::1;;17175:6;17148:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;16991:201:::0;:::o;19171:217::-;19267:7;19287:19;19309:9;-1:-1:-1;;;;;19309:17:0;;19327:6;19335;19343:7;19309:42;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19287:64;-1:-1:-1;;19171:217:0;;;;;;:::o;30376:224::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30465:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;::::1;;30464:22;30456:58;;;::::0;-1:-1:-1;;;30456:58:0;;19354:2:1;30456:58:0::1;::::0;::::1;19336:21:1::0;19393:2;19373:18;;;19366:30;19432:25;19412:18;;;19405:53;19475:18;;30456:58:0::1;19152:347:1::0;30456:58:0::1;30525:15;:28:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;30525:28:0;;::::1;-1:-1:-1::0;;;;;;30525:28:0;;::::1;::::0;::::1;::::0;;-1:-1:-1;30564:21:0;;;:13:::1;30525:28;30564:21:::0;;;;;:28;;-1:-1:-1;;30564:28:0::1;::::0;;::::1;::::0;;30376:224::o;32435:367::-;32488:7;32508:19;32530:8;;;;;;;;;-1:-1:-1;;;;;32530:8:0;-1:-1:-1;;;;;32530:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32586:8;;:33;;-1:-1:-1;;;32586:33:0;;14376:42;32586:33;;;181:51:1;32508:44:0;;-1:-1:-1;32563:20:0;;-1:-1:-1;;;;;32586:8:0;;;;:18;;154::1;;32586:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32699:8;;:33;;-1:-1:-1;;;32699:33:0;;32726:4;32699:33;;;181:51:1;32563:56:0;;-1:-1:-1;32673:23:0;;-1:-1:-1;;;;;32699:8:0;;;;:18;;154::1;;32699:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32673:59;-1:-1:-1;32673:59:0;32750:26;32764:12;32750:11;:26;:::i;:::-;:44;;;;:::i;:::-;32743:51;;;;;32435:367;:::o;20261:486::-;20334:5;20379:19;;;:9;:19;;;;;;;;20352:46;;;;;;;;;-1:-1:-1;;;;;20352:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20352:46:0;;;;;;;;;;-1:-1:-1;;;20352:46:0;;;;;;;;-1:-1:-1;;;20352:46:0;;;;;;;;;-1:-1:-1;;;20352:46:0;;;;;;;;;;;20563:42;;-1:-1:-1;;;20563:42:0;;20352:46;;;;;;;20334:5;;20563:9;:17;;;;:42;;20352:46;;;;;;20563:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20541:64;;20616:12;20639:11;20616:35;;20665:17;20696:4;-1:-1:-1;;;;;20696:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20662:46:0;;20261:486;-1:-1:-1;;;;;;;;;;;;;;20261:486:0:o;30667:562::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30760:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;::::1;;30752:53;;;::::0;-1:-1:-1;;;30752:53:0;;19839:2:1;30752:53:0::1;::::0;::::1;19821:21:1::0;19878:2;19858:18;;;19851:30;-1:-1:-1;;;19897:18:1;;;19890:49;19956:18;;30752:53:0::1;19637:343:1::0;30752:53:0::1;-1:-1:-1::0;;;;;30816:21:0;::::1;30840:5;30816:21:::0;;;:13:::1;:21;::::0;;;;:29;;-1:-1:-1;;30816:29:0::1;::::0;;30946:276:::1;30970:15;:22:::0;30966:26;::::1;30946:276;;;31040:6;-1:-1:-1::0;;;;;31018:28:0::1;:15;31034:1;31018:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31018:18:0::1;:28:::0;31014:197:::1;;31088:15;31104:22:::0;;:26:::1;::::0;31129:1:::1;::::0;31104:26:::1;:::i;:::-;31088:43;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;31067:15:::1;:18:::0;;-1:-1:-1;;;;;31088:43:0;;::::1;::::0;31083:1;;31067:18;::::1;;;;;:::i;:::-;;;;;;;;;:64;;;;;-1:-1:-1::0;;;;;31067:64:0::1;;;;;-1:-1:-1::0;;;;;31067:64:0::1;;;;;;31150:15;:21;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;31150:21:0;;;;;-1:-1:-1;;;;;;31150:21:0::1;::::0;;;;;30946:276:::1;30667:562:::0;:::o;31014:197::-:1;30994:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30946:276;;;;30667:562:::0;:::o;19398:332::-;19543:16;;;19557:1;19543:16;;;;;;;;19501:7;;;;19543:16;19557:1;19543:16;;;;;;;;;;-1:-1:-1;19543:16:0;19519:40;;19578:10;19568:4;19573:1;19568:7;;;;;;;;:::i;:::-;;;;;;:20;-1:-1:-1;;;;;19568:20:0;;;-1:-1:-1;;;;;19568:20:0;;;;;19607:11;19597:4;19602:1;19597:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19597:21:0;;;:7;;;;;;;;;:21;19654:42;;-1:-1:-1;;;19654:42:0;;19627:24;;19654:12;:26;;;;:42;;19681:8;;19691:4;;19654:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19654:42:0;;;;;;;;;;;;:::i;:::-;19627:69;;19712:7;19720:1;19712:10;;;;;;;;:::i;:::-;;;;;;;19705:17;;;;19398:332;;;;;:::o;20932:183::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;21056:51:::1;21064:10;21076:11;21089:7;21098:8;21056:7;:51::i;:::-;;20932:183:::0;;;;:::o;6076:103::-;5314:13;:11;:13::i;:::-;6141:30:::1;6168:1;6141:18;:30::i;:::-;6076:103::o:0;28825:1486::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;28974:235:::1;::::0;;::::1;::::0;::::1;::::0;;;;;29092:4:::1;28974:235;::::0;::::1;::::0;-1:-1:-1;;;;;28974:235:0;;;;;;;;;;28925:295;;-1:-1:-1;;;28925:295:0;;-1:-1:-1;;;;;28925:26:0::1;:34;::::0;::::1;::::0;:295:::1;::::0;28974:235;28925:295:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29293:60:0::1;::::0;-1:-1:-1;;;29293:60:0;;::::1;::::0;::::1;4533:25:1::0;;;29264:17:0::1;::::0;29293:26:::1;-1:-1:-1::0;;;;;29293:50:0::1;::::0;::::1;::::0;4506:18:1;;29293:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29249:104;;;;;;;;;;;;;29366:26;-1:-1:-1::0;;;;;29366:44:0::1;;29425:259;;;;;;;;29507:8;29425:259;;;;29545:9;-1:-1:-1::0;;;;;29425:259:0::1;;;;;29585:1;29425:259;;;;29617:1;29425:259;;;;29647:15;29665:3;29647:21;;;;:::i;:::-;29425:259:::0;;29366:329:::1;::::0;;-1:-1:-1;;;;;;29366:329:0::1;::::0;;;;;;24592:13:1;;29366:329:0::1;::::0;::::1;24574:32:1::0;24666:4;24654:17;;24648:24;-1:-1:-1;;;;;24644:65:1;24622:20;;;24615:95;24754:17;;;24748:24;24726:20;;;24719:54;24829:4;24817:17;;24811:24;24789:20;;;24782:54;24892:4;24880:17;;;24874:24;24852:20;;;24845:54;24546:19;;29366:329:0::1;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29757:235:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;29875:4:::1;29757:235;::::0;::::1;::::0;-1:-1:-1;;;;;29757:235:0;;;;;;;;;;29708:295;;-1:-1:-1;;;29708:295:0;;-1:-1:-1;;;;;29708:26:0::1;:34;::::0;::::1;::::0;:295:::1;::::0;29757:235;29708:295:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;30016:41:0::1;::::0;-1:-1:-1;;;30016:41:0;;::::1;::::0;::::1;4533:25:1::0;;;30016:26:0::1;-1:-1:-1::0;;;;;30016:31:0::1;::::0;::::1;::::0;4506:18:1;;30016:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30075:9;30070:234;30094:11;:18:::0;30090:22;::::1;30070:234;;;30152:8;30134:11;30146:1;30134:14;;;;;;;;:::i;:::-;;;;;;;;;:26:::0;30130:163:::1;;30194:11;30206:18:::0;;:22:::1;::::0;30227:1:::1;::::0;30206:22:::1;:::i;:::-;30194:35;;;;;;;;:::i;:::-;;;;;;;;;30177:11;30189:1;30177:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:52:::0;30244:11:::1;:17:::0;;;::::1;;;;:::i;:::-;;;;;;;;;;;;;;;;;;30070:234;28888:1423;28825:1486:::0;:::o;30130:163::-:1;30114:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30070:234;;;;28888:1423;28825:1486:::0;:::o;14640:28::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14640:28:0;:::o;19932:321::-;20025:5;20043:19;20065:9;-1:-1:-1;;;;;20065:17:0;;20083:6;20091;20099:7;20065:42;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20043:64;;20120:12;20143:11;20120:35;;20171:17;20202:4;-1:-1:-1;;;;;20202:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20168:46:0;;19932:321;-1:-1:-1;;;;;;;;;;;;19932:321:0:o;19738:183::-;19866:47;;-1:-1:-1;;;19866:47:0;;;;;4533:25:1;;;19800:17:0;;19866:26;-1:-1:-1;;;;;19866:36:0;;;;4506:18:1;;19866:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19830:83:0;;19738:183;-1:-1:-1;;;;;;;;;;;;19738:183:0:o;25583:1339::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;25834:75:::1;::::0;-1:-1:-1;;;25834:75:0;;-1:-1:-1;;;;;25834:22:0;::::1;::::0;::::1;::::0;:75:::1;::::0;25865:26:::1;::::0;25894:14;;25834:75:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25920:75:0::1;::::0;-1:-1:-1;;;25920:75:0;;-1:-1:-1;;;;;25920:22:0;::::1;::::0;::::1;::::0;:75:::1;::::0;25951:26:::1;::::0;25980:14;;25920:75:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26008:54;26065:453;;;;;;;;26129:6;-1:-1:-1::0;;;;;26065:453:0::1;;;;;26158:6;-1:-1:-1::0;;;;;26065:453:0::1;;;;;26184:3;26065:453;;;;;;26210:9;26065:453;;;;;;26242:9;26065:453;;;;;;26279:14;26065:453;;;;26321:14;26065:453;;;;26359:1;26065:453;;;;26384:1;26065:453;;;;26416:4;-1:-1:-1::0;;;;;26065:453:0::1;;;;;26443:15;26461:3;26443:21;;;;:::i;:::-;26065:453:::0;;26562:39:::1;::::0;-1:-1:-1;;;26562:39:0;;26008:510;;-1:-1:-1;;;;;;26562:26:0::1;:31;::::0;::::1;::::0;:39:::1;::::0;26008:510;;26562:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26531:70;;;26532:7;;26542;;26551;;26531:70;;;;;;;;;;;;;;;;;;26635:237;;;;;;;;26670:4;-1:-1:-1::0;;;;;26635:237:0::1;;;;;26695:7;;26635:237;;;;26721:6;-1:-1:-1::0;;;;;26635:237:0::1;;;;;26746:6;-1:-1:-1::0;;;;;26635:237:0::1;;;;;26772:3;26635:237;;;;;;26797:9;26635:237;;;;;;26828:9;26635:237;;;;;;26855:5;26635:237;;;;::::0;26614:9:::1;:18;26624:7;;26614:18;;;;;;;;;;;:258;;;;;;;;;;;;;-1:-1:-1::0;;;;;26614:258:0::1;;;;;-1:-1:-1::0;;;;;26614:258:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26614:258:0::1;;;;;-1:-1:-1::0;;;;;26614:258:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26614:258:0::1;;;;;-1:-1:-1::0;;;;;26614:258:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26889:11;26906:7;;26889:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25767:1155;25583:1339:::0;;;;;;;;:::o;33789:265::-;5314:13;:11;:13::i;:::-;33884:9:::1;::::0;::::1;;33883:10;33875:51;;;::::0;-1:-1:-1;;;33875:51:0;;26734:2:1;33875:51:0::1;::::0;::::1;26716:21:1::0;26773:2;26753:18;;;26746:30;26812;26792:18;;;26785:58;26860:18;;33875:51:0::1;26532:352:1::0;33875:51:0::1;33954:42;::::0;-1:-1:-1;;;33954:42:0;;33990:4:::1;33954:42;::::0;::::1;181:51:1::0;33937:14:0::1;::::0;-1:-1:-1;;;;;33954:27:0;::::1;::::0;::::1;::::0;154:18:1;;33954:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34007:39;::::0;-1:-1:-1;;;34007:39:0;;33937:59;;-1:-1:-1;;;;;;34007:26:0;::::1;::::0;::::1;::::0;:39:::1;::::0;34034:3;;33937:59;;34007:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33864:190;33789:265:::0;;:::o;23062:93::-;2405:21;:19;:21::i;:::-;23130:17:::1;23139:7;23130:8;:17::i;:::-;;;2449:20:::0;1843:1;2969:22;;2786:213;15907:319;5314:13;:11;:13::i;:::-;-1:-1:-1;;;;;15988:21:0;::::1;15980:67;;;::::0;-1:-1:-1;;;15980:67:0;;27091:2:1;15980:67:0::1;::::0;::::1;27073:21:1::0;27130:2;27110:18;;;27103:30;27169:34;27149:18;;;27142:62;-1:-1:-1;;;27220:18:1;;;27213:31;27261:19;;15980:67:0::1;26889:397:1::0;15980:67:0::1;-1:-1:-1::0;;;;;16067:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;16066:29;16058:68;;;::::0;-1:-1:-1;;;16058:68:0;;27493:2:1;16058:68:0::1;::::0;::::1;27475:21:1::0;27532:2;27512:18;;;27505:30;27571:28;27551:18;;;27544:56;27617:18;;16058:68:0::1;27291:350:1::0;16058:68:0::1;-1:-1:-1::0;;;;;16139:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:35;;-1:-1:-1;;16139:35:0::1;16170:4;16139:35;::::0;;16192:26;::::1;::::0;16139:28;16192:26:::1;15907:319:::0;:::o;16302:324::-;5314:13;:11;:13::i;:::-;-1:-1:-1;;;;;16385:21:0;::::1;16377:69;;;::::0;-1:-1:-1;;;16377:69:0;;27848:2:1;16377:69:0::1;::::0;::::1;27830:21:1::0;27887:2;27867:18;;;27860:30;27926:34;27906:18;;;27899:62;-1:-1:-1;;;27977:18:1;;;27970:33;28020:19;;16377:69:0::1;27646:399:1::0;16377:69:0::1;-1:-1:-1::0;;;;;16465:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;16457:66;;;::::0;-1:-1:-1;;;16457:66:0;;28252:2:1;16457:66:0::1;::::0;::::1;28234:21:1::0;28291:2;28271:18;;;28264:30;28330:27;28310:18;;;28303:55;28375:18;;16457:66:0::1;28050:349:1::0;16457:66:0::1;-1:-1:-1::0;;;;;16536:28:0;::::1;16567:5;16536:28:::0;;;:19:::1;:28;::::0;;;;;:36;;-1:-1:-1;;16536:36:0::1;::::0;;16590:28;::::1;::::0;16567:5;16590:28:::1;16302:324:::0;:::o;26930:1887::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;14244:42:::1;27143:15;-1:-1:-1::0;;;;;27197:14:0;::::1;::::0;::::1;:32;;27223:6;27197:32;;;27214:6;27197:32;27178:51;;27257:5;27253:184;;;27281:43;27289:7;27298:8;27308:15;27281:7;:43::i;:::-;;27253:184;;;27371:52;27379:7;27388:8;27398:7;27407:15;27371:7;:52::i;:::-;;27253:184;27470:39;::::0;-1:-1:-1;;;27470:39:0;;27503:4:::1;27470:39;::::0;::::1;181:51:1::0;27449:18:0::1;::::0;-1:-1:-1;;;;;27470:24:0;::::1;::::0;::::1;::::0;154:18:1;;27470:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27541;::::0;-1:-1:-1;;;27541:39:0;;27574:4:::1;27541:39;::::0;::::1;181:51:1::0;27449:60:0;;-1:-1:-1;27520:18:0::1;::::0;-1:-1:-1;;;;;27541:24:0;::::1;::::0;::::1;::::0;154:18:1;;27541:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27520:60;;27591:83;27618:6;27634:26;27663:10;27591:26;:83::i;:::-;27685;27712:6;27728:26;27757:10;27685:26;:83::i;:::-;27783:71;27857:553;;;;;;;;27925:6;-1:-1:-1::0;;;;;27857:553:0::1;;;;;27958:6;-1:-1:-1::0;;;;;27857:553:0::1;;;;;27988:7;27857:553;;;;;;28025:9;27857:553;;;;;;28064:9;27857:553;;;;;;28108:10;27857:553;;;;28153:10;27857:553;;;;28220:12;28207:10;:25;;;;:::i;:::-;28194:38;::::0;:10;:38:::1;:::i;:::-;27857:553:::0;;::::1;;28276:25;28289:12:::0;28276:10;:25:::1;:::i;:::-;28263:38;::::0;:10;:38:::1;:::i;:::-;27857:553:::0;;28339:4:::1;27857:553;::::0;::::1;::::0;;;28373:21:::1;:15;28391:3;28373:21;:::i;:::-;27857:553:::0;;28455:43:::1;::::0;-1:-1:-1;;;28455:43:0;;27783:627;;-1:-1:-1;;;;;;28455:26:0::1;:31;::::0;::::1;::::0;:43:::1;::::0;27783:627;;28455:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28423:75;;;28424:7;;28435;;28444;;28423:75;;;;;;;;;;;;;;;;;;28532:237;;;;;;;;28567:4;-1:-1:-1::0;;;;;28532:237:0::1;;;;;28592:7;;28532:237;;;;28618:6;-1:-1:-1::0;;;;;28532:237:0::1;;;;;28643:6;-1:-1:-1::0;;;;;28532:237:0::1;;;;;28669:7;28532:237;;;;;;28698:9;28532:237;;;;;;28729:9;28532:237;;;;;;28756:5;28532:237;;;;::::0;28511:9:::1;:18;28521:7;;28511:18;;;;;;;;;;;:258;;;;;;;;;;;;;-1:-1:-1::0;;;;;28511:258:0::1;;;;;-1:-1:-1::0;;;;;28511:258:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28511:258:0::1;;;;;-1:-1:-1::0;;;;;28511:258:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28511:258:0::1;;;;;-1:-1:-1::0;;;;;28511:258:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28782:11;28799:7;;28782:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27122:1695;;;;;26930:1887:::0;;;;;;;;:::o;16825:102::-;16872:16;16908:11;16901:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16825:102;:::o;18685:251::-;5314:13;:11;:13::i;:::-;18756:9:::1;::::0;::::1;;18755:10;18747:48;;;::::0;-1:-1:-1;;;18747:48:0;;28606:2:1;18747:48:0::1;::::0;::::1;28588:21:1::0;28645:2;28625:18;;;28618:30;28684:27;28664:18;;;28657:55;28729:18;;18747:48:0::1;28404:349:1::0;18747:48:0::1;-1:-1:-1::0;;;;;18814:19:0;::::1;18806:59;;;::::0;-1:-1:-1;;;18806:59:0;;28960:2:1;18806:59:0::1;::::0;::::1;28942:21:1::0;28999:2;28979:18;;;28972:30;29038:29;29018:18;;;29011:57;29085:18;;18806:59:0::1;28758:351:1::0;18806:59:0::1;18877:8;:24:::0;;-1:-1:-1;;;;;;18877:24:0::1;-1:-1:-1::0;;;;;18877:24:0;;;::::1;::::0;;;::::1;::::0;;18912:9:::1;:16:::0;;-1:-1:-1;;18912:16:0::1;-1:-1:-1::0;18912:16:0::1;::::0;;18685:251::o;24417:1156::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;24623:25:::1;24651:19:::0;;;:9:::1;:19;::::0;;;;;;24746:15:::1;::::0;::::1;::::0;24739:84;;-1:-1:-1;;;24739:84:0;;24651:19;;-1:-1:-1;;;;;24746:15:0::1;::::0;24739:31:::1;::::0;:84:::1;::::0;24779:26:::1;::::0;24808:14;;24739:84:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;24841:15:0::1;::::0;::::1;::::0;24834:84:::1;::::0;-1:-1:-1;;;24834:84:0;;-1:-1:-1;;;;;24841:15:0;;::::1;::::0;24834:31:::1;::::0;:84:::1;::::0;24874:26:::1;::::0;24903:14;;24834:84:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25000:67;25070:342;;;;;;;;25145:8;25070:342;;;;25181:14;25070:342;;;;25224:14;25070:342;;;;25265:10;25070:342;;;;25302:10;25070:342;;;;25337:15;25355:3;25337:21;;;;:::i;:::-;25070:342:::0;;25505:52:::1;::::0;;-1:-1:-1;;;25505:52:0;;29359:13:1;;25505:52:0::1;::::0;::::1;29341:32:1::0;29429:4;29417:17;;29411:24;29389:20;;;29382:54;29480:17;;;29474:24;29452:20;;;29445:54;29555:4;29543:17;;29537:24;29515:20;;;29508:54;29618:4;29606:17;;29600:24;29578:20;;;29571:54;29681:4;29669:17;;29663:24;29641:20;;;29634:54;25000:412:0;;-1:-1:-1;25505:26:0::1;-1:-1:-1::0;;;;;25505:44:0::1;::::0;::::1;::::0;29313:19:1;;25505:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25494:7;25482:75:::0;25485:7:::1;25482:75:::0;-1:-1:-1;;;;;;;;24417:1156:0:o;20764:160::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;20873:43:::1;20881:11;20894;20907:8;20873:7;:43::i;32905:876::-:0;33030:8;;:31;;-1:-1:-1;;;33030:31:0;;-1:-1:-1;;;;;199:32:1;;;33030:31:0;;;181:51:1;32976:23:0;;33008:19;;33030:8;;;:18;;154::1;;33030:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33008:53;;33068:27;33121:22;:20;:22::i;:::-;33099:18;:11;33113:4;33099:18;:::i;:::-;33098:45;;;;:::i;:::-;33216:15;:22;33068:75;;-1:-1:-1;33152:40:0;;33195:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;33195:44:0;;;;;;;;;;;;;;;;33152:87;;33253:9;33248:495;33272:15;:22;33268:26;;33248:495;;;33312:13;33328:15;33344:1;33328:18;;;;;;;;:::i;:::-;;;;;;;;;;33380:38;;-1:-1:-1;;;33380:38:0;;33412:4;33380:38;;;181:51:1;-1:-1:-1;;;;;33328:18:0;;;;-1:-1:-1;33328:18:0;;33380:23;;154:18:1;;33380:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33357:61;-1:-1:-1;33515:23:0;33580:4;33542:34;33557:19;33357:61;33542:34;:::i;:::-;33541:43;;;;:::i;:::-;33515:69;;33627:108;;;;;;;;33671:5;-1:-1:-1;;;;;33627:108:0;;;;;33708:15;33627:108;;;33605:16;33622:1;33605:19;;;;;;;;:::i;:::-;;;;;;:130;;;;33301:442;;;33296:3;;;;;:::i;:::-;;;;33248:495;;;-1:-1:-1;33758:16:0;32905:876;-1:-1:-1;;;;32905:876:0:o;17258:501::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;17346:1:::1;17337:6;:10;17329:52;;;::::0;-1:-1:-1;;;17329:52:0;;16393:2:1;17329:52:0::1;::::0;::::1;16375:21:1::0;16432:2;16412:18;;;16405:30;16471:31;16451:18;;;16444:59;16520:18;;17329:52:0::1;16191:353:1::0;17329:52:0::1;17437:29;::::0;-1:-1:-1;;;17437:29:0;;17460:4:::1;17437:29;::::0;::::1;181:51:1::0;14244:42:0::1;::::0;17470:6;;14244:42;;17437:14:::1;::::0;154:18:1;;17437:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;17429:77;;;::::0;-1:-1:-1;;;17429:77:0;;30236:2:1;17429:77:0::1;::::0;::::1;30218:21:1::0;30275:2;30255:18;;;30248:30;30314:27;30294:18;;;30287:55;30359:18;;17429:77:0::1;30034:349:1::0;17429:77:0::1;17594:44;::::0;-1:-1:-1;;;17594:44:0;;17617:4:::1;17594:44;::::0;::::1;30600:34:1::0;14244:42:0::1;30650:18:1::0;;;30643:43;17641:6:0;;-1:-1:-1;;;;;17594:14:0;::::1;::::0;::::1;::::0;30535:18:1;;17594:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;17590:121;;;17664:35;::::0;-1:-1:-1;;;17664:35:0;;-1:-1:-1;;;;;17664:12:0;::::1;::::0;::::1;::::0;:35:::1;::::0;14244:42:::1;::::0;17692:6;;17664:35:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17590:121;17723:28;::::0;-1:-1:-1;;;17723:28:0;;::::1;::::0;::::1;4533:25:1::0;;;14244:42:0::1;::::0;17723:20:::1;::::0;4506:18:1;;17723:28:0::1;;;;;;;;;;;;;;;;;::::0;::::1;6334:201:::0;5314:13;:11;:13::i;:::-;-1:-1:-1;;;;;6423:22:0;::::1;6415:73;;;::::0;-1:-1:-1;;;6415:73:0;;30899:2:1;6415:73:0::1;::::0;::::1;30881:21:1::0;30938:2;30918:18;;;30911:30;30977:34;30957:18;;;30950:62;-1:-1:-1;;;31028:18:1;;;31021:36;31074:19;;6415:73:0::1;30697:402:1::0;6415:73:0::1;6499:28;6518:8;6499:18;:28::i;2485:293::-:0;1887:1;2619:7;;:19;2611:63;;;;-1:-1:-1;;;2611:63:0;;31306:2:1;2611:63:0;;;31288:21:1;31345:2;31325:18;;;31318:30;31384:33;31364:18;;;31357:61;31435:18;;2611:63:0;31104:355:1;2611:63:0;1887:1;2752:7;:18;2485:293::o;22025:1023::-;22206:8;;22135:17;;-1:-1:-1;;;;;22206:8:0;;;22175:40;;;;22167:86;;;;-1:-1:-1;;;22167:86:0;;;;;;;:::i;:::-;22270:8;22282:1;22270:13;22266:50;;-1:-1:-1;22303:1:0;22296:8;;22266:50;22352:59;;-1:-1:-1;;;22352:59:0;;-1:-1:-1;;;;;22352:26:0;;;;;:59;;22387:12;;22402:8;;22352:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22428:54;22485:438;;;;;;;;22564:10;-1:-1:-1;;;;;22485:438:0;;;;;22603:11;-1:-1:-1;;;;;22485:438:0;;;;;22638:7;22485:438;;;;;;22683:4;-1:-1:-1;;;;;22485:438:0;;;;;22717:15;22735:3;22717:21;;;;:::i;:::-;22485:438;;;;;;;;;-1:-1:-1;22485:438:0;;;;;;;;;;;;;;;22966:41;;-1:-1:-1;;;22966:41:0;;32151:13:1;;-1:-1:-1;;;;;32147:22:1;;;22966:41:0;;;32129::1;32218:17;;;32212:24;32208:33;;32186:20;;;32179:63;32290:17;;;32284:24;32310:8;32280:39;32258:20;;;32251:69;32368:17;;;32362:24;32358:33;;32336:20;;;32329:63;32448:4;32436:17;;32430:24;32408:20;;;32401:54;32109:3;32499:17;;32493:24;32471:20;;;32464:54;32574:4;32562:17;;32556:24;32534:20;;;32527:54;32641:4;32629:17;;32623:24;32619:33;;32597:20;;;32590:63;32151:13;;-1:-1:-1;22966:12:0;:29;;;;;;32063:19:1;;22966:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22954:53;22025:1023;-1:-1:-1;;;;;;22025:1023:0:o;5593:132::-;5474:7;5501:6;-1:-1:-1;;;;;5501:6:0;4059:10;5657:23;5649:68;;;;-1:-1:-1;;;5649:68:0;;32866:2:1;5649:68:0;;;32848:21:1;;;32885:18;;;32878:30;32944:34;32924:18;;;32917:62;32996:18;;5649:68:0;32664:356:1;6695:191:0;6769:16;6788:6;;-1:-1:-1;;;;;6805:17:0;;;-1:-1:-1;;;;;;6805:17:0;;;;;;6838:40;;6788:6;;;;;;;6838:40;;6769:16;6838:40;6758:128;6695:191;:::o;23895:514::-;24101:235;;;;;;;;;;;24219:4;24101:235;;;;-1:-1:-1;;;;;24101:235:0;;;;;;;;;;24052:295;;-1:-1:-1;;;24052:295:0;;23949:24;;;;-1:-1:-1;;;;;24052:26:0;:34;;;;:295;;24101:235;24052:295;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24013:334;;;;-1:-1:-1;23895:514:0;-1:-1:-1;;23895:514:0:o;21123:892::-;21293:8;;21217:17;;-1:-1:-1;;;;;21293:8:0;;;21262:40;;;;21254:86;;;;-1:-1:-1;;;21254:86:0;;;;;;;:::i;:::-;21359:8;21371:1;21359:13;21355:50;;-1:-1:-1;21392:1:0;21385:8;;21355:50;21415:59;;-1:-1:-1;;;21415:59:0;;-1:-1:-1;;;;;21415:26:0;;;;;:59;;21450:12;;21465:8;;21415:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21511:16:0;;;21525:1;21511:16;;;;;;;;21487:21;;21511:16;;;;;;;;;;-1:-1:-1;21511:16:0;21487:40;;21548:10;21538:4;21543:1;21538:7;;;;;;;;:::i;:::-;;;;;;:20;-1:-1:-1;;;;;21538:20:0;;;-1:-1:-1;;;;;21538:20:0;;;;;21579:11;21569:4;21574:1;21569:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21569:21:0;;;:7;;;;;;;;;:21;21627:44;;-1:-1:-1;;;21627:44:0;;21665:4;21627:44;;;181:51:1;21603:21:0;;21627:29;;;;;154:18:1;;21627:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21603:68;-1:-1:-1;;;;;;21689:12:0;:66;;21770:8;21793:1;21809:4;21836;21856:20;:15;21874:2;21856:20;:::i;:::-;21689:198;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21918:44:0;;-1:-1:-1;;;21918:44:0;;21956:4;21918:44;;;181:51:1;21965:13:0;;-1:-1:-1;;;;;;21918:29:0;;;-1:-1:-1;21918:29:0;;154:18:1;;21918:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;:::i;7655:314::-;7773:12;7787:17;7808:5;-1:-1:-1;;;;;7808:10:0;7842:23;;;7867:2;7871:5;7819:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7819:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;7819:58:0;-1:-1:-1;;;;;;7819:58:0;;;;;;;;;;7808:70;;;;7819:58;7808:70;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7772:106;;;;7897:7;:57;;;;-1:-1:-1;7909:11:0;;:16;;:44;;;7940:4;7929:24;;;;;;;;;;;;:::i;:::-;7889:72;;;;-1:-1:-1;;;7889:72:0;;34231:2:1;7889:72:0;;;34213:21:1;34270:1;34250:18;;;34243:29;-1:-1:-1;;;34288:18:1;;;34281:32;34330:18;;7889:72:0;34029:325:1;243:180;302:6;355:2;343:9;334:7;330:23;326:32;323:52;;;371:1;368;361:12;323:52;-1:-1:-1;394:23:1;;243:180;-1:-1:-1;243:180:1:o;745:131::-;-1:-1:-1;;;;;820:31:1;;810:42;;800:70;;866:1;863;856:12;881:119;966:8;959:5;955:20;948:5;945:31;935:59;;990:1;987;980:12;1005:669;1090:6;1098;1106;1114;1167:3;1155:9;1146:7;1142:23;1138:33;1135:53;;;1184:1;1181;1174:12;1135:53;1223:9;1210:23;1242:31;1267:5;1242:31;:::i;:::-;1292:5;-1:-1:-1;1349:2:1;1334:18;;1321:32;1362:33;1321:32;1362:33;:::i;:::-;1414:7;-1:-1:-1;1473:2:1;1458:18;;1445:32;1486;1445;1486;:::i;:::-;1537:7;-1:-1:-1;1596:2:1;1581:18;;1568:32;1609:33;1568:32;1609:33;:::i;:::-;1005:669;;;;-1:-1:-1;1005:669:1;;-1:-1:-1;;1005:669:1:o;1679:127::-;1740:10;1735:3;1731:20;1728:1;1721:31;1771:4;1768:1;1761:15;1795:4;1792:1;1785:15;1811:275;1882:2;1876:9;1947:2;1928:13;;-1:-1:-1;;1924:27:1;1912:40;;1982:18;1967:34;;2003:22;;;1964:62;1961:88;;;2029:18;;:::i;:::-;2065:2;2058:22;1811:275;;-1:-1:-1;1811:275:1:o;2091:1108::-;2186:6;2194;2202;2210;2263:3;2251:9;2242:7;2238:23;2234:33;2231:53;;;2280:1;2277;2270:12;2231:53;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2412:2:1;2451:18;;;2438:32;2479:33;2438:32;2479:33;:::i;:::-;2531:7;-1:-1:-1;2585:2:1;2570:18;;2557:32;;-1:-1:-1;2640:2:1;2625:18;;2612:32;2663:18;2693:14;;;2690:34;;;2720:1;2717;2710:12;2690:34;2758:6;2747:9;2743:22;2733:32;;2803:7;2796:4;2792:2;2788:13;2784:27;2774:55;;2825:1;2822;2815:12;2774:55;2861:2;2848:16;2883:2;2879;2876:10;2873:36;;;2889:18;;:::i;:::-;2931:53;2974:2;2955:13;;-1:-1:-1;;2951:27:1;2947:36;;2931:53;:::i;:::-;2918:66;;3007:2;3000:5;2993:17;3047:7;3042:2;3037;3033;3029:11;3025:20;3022:33;3019:53;;;3068:1;3065;3058:12;3019:53;3123:2;3118;3114;3110:11;3105:2;3098:5;3094:14;3081:45;3167:1;3162:2;3157;3150:5;3146:14;3142:23;3135:34;;3188:5;3178:15;;;;;2091:1108;;;;;;;:::o;3603:527::-;3679:6;3687;3695;3748:2;3736:9;3727:7;3723:23;3719:32;3716:52;;;3764:1;3761;3754:12;3716:52;3803:9;3790:23;3822:31;3847:5;3822:31;:::i;:::-;3872:5;-1:-1:-1;3929:2:1;3914:18;;3901:32;3942:33;3901:32;3942:33;:::i;:::-;3994:7;-1:-1:-1;4053:2:1;4038:18;;4025:32;4066;4025;4066;:::i;:::-;4117:7;4107:17;;;3603:527;;;;;:::o;4135:247::-;4194:6;4247:2;4235:9;4226:7;4222:23;4218:32;4215:52;;;4263:1;4260;4253:12;4215:52;4302:9;4289:23;4321:31;4346:5;4321:31;:::i;5084:456::-;5161:6;5169;5177;5230:2;5218:9;5209:7;5205:23;5201:32;5198:52;;;5246:1;5243;5236:12;5198:52;5285:9;5272:23;5304:31;5329:5;5304:31;:::i;:::-;5354:5;-1:-1:-1;5411:2:1;5396:18;;5383:32;5424:33;5383:32;5424:33;:::i;:::-;5084:456;;5476:7;;-1:-1:-1;;;5530:2:1;5515:18;;;;5502:32;;5084:456::o;5545:596::-;5630:6;5638;5646;5654;5707:3;5695:9;5686:7;5682:23;5678:33;5675:53;;;5724:1;5721;5714:12;5675:53;5763:9;5750:23;5782:31;5807:5;5782:31;:::i;:::-;5832:5;-1:-1:-1;5889:2:1;5874:18;;5861:32;5902:33;5861:32;5902:33;:::i;:::-;5954:7;-1:-1:-1;6013:2:1;5998:18;;5985:32;6026;5985;6026;:::i;:::-;5545:596;;;;-1:-1:-1;6077:7:1;;6131:2;6116:18;6103:32;;-1:-1:-1;;5545:596:1:o;7486:118::-;7573:5;7570:1;7559:20;7552:5;7549:31;7539:59;;7594:1;7591;7584:12;7609:118;7695:5;7688:13;7681:21;7674:5;7671:32;7661:60;;7717:1;7714;7707:12;7732:1077;7846:6;7854;7862;7870;7878;7886;7894;7902;7955:3;7943:9;7934:7;7930:23;7926:33;7923:53;;;7972:1;7969;7962:12;7923:53;8011:9;7998:23;8030:31;8055:5;8030:31;:::i;:::-;8080:5;-1:-1:-1;8137:2:1;8122:18;;8109:32;8150:33;8109:32;8150:33;:::i;:::-;8202:7;-1:-1:-1;8261:2:1;8246:18;;8233:32;8274;8233;8274;:::i;:::-;8325:7;-1:-1:-1;8384:2:1;8369:18;;8356:32;8397:31;8356:32;8397:31;:::i;:::-;8447:7;-1:-1:-1;8506:3:1;8491:19;;8478:33;8520:31;8478:33;8520:31;:::i;:::-;8570:7;-1:-1:-1;8624:3:1;8609:19;;8596:33;;-1:-1:-1;8676:3:1;8661:19;;8648:33;;-1:-1:-1;8733:3:1;8718:19;;8705:33;8747:30;8705:33;8747:30;:::i;:::-;8796:7;8786:17;;;7732:1077;;;;;;;;;;;:::o;8814:388::-;8882:6;8890;8943:2;8931:9;8922:7;8918:23;8914:32;8911:52;;;8959:1;8956;8949:12;8911:52;8998:9;8985:23;9017:31;9042:5;9017:31;:::i;:::-;9067:5;-1:-1:-1;9124:2:1;9109:18;;9096:32;9137:33;9096:32;9137:33;:::i;:::-;9189:7;9179:17;;;8814:388;;;;;:::o;9677:1077::-;9791:6;9799;9807;9815;9823;9831;9839;9847;9900:3;9888:9;9879:7;9875:23;9871:33;9868:53;;;9917:1;9914;9907:12;9868:53;9956:9;9943:23;9975:31;10000:5;9975:31;:::i;:::-;10025:5;-1:-1:-1;10082:2:1;10067:18;;10054:32;10095:33;10054:32;10095:33;:::i;:::-;10147:7;-1:-1:-1;10206:2:1;10191:18;;10178:32;10219;10178;10219;:::i;:::-;10270:7;-1:-1:-1;10329:2:1;10314:18;;10301:32;10342:31;10301:32;10342:31;:::i;:::-;10392:7;-1:-1:-1;10451:3:1;10436:19;;10423:33;10465:31;10423:33;10465:31;:::i;:::-;10515:7;-1:-1:-1;10569:3:1;10554:19;;10541:33;;-1:-1:-1;10626:3:1;10611:19;;10598:33;10640:30;10598:33;10640:30;:::i;:::-;10689:7;10679:17;;;10743:3;10732:9;10728:19;10715:33;10705:43;;9677:1077;;;;;;;;;;;:::o;10759:632::-;10930:2;10982:21;;;11052:13;;10955:18;;;11074:22;;;10901:4;;10930:2;11153:15;;;;11127:2;11112:18;;;10901:4;11196:169;11210:6;11207:1;11204:13;11196:169;;;11271:13;;11259:26;;11340:15;;;;11305:12;;;;11232:1;11225:9;11196:169;;;-1:-1:-1;11382:3:1;;10759:632;-1:-1:-1;;;;;;10759:632:1:o;11396:454::-;11491:6;11499;11507;11515;11523;11576:3;11564:9;11555:7;11551:23;11547:33;11544:53;;;11593:1;11590;11583:12;11544:53;-1:-1:-1;;11616:23:1;;;11686:2;11671:18;;11658:32;;-1:-1:-1;11737:2:1;11722:18;;11709:32;;11788:2;11773:18;;11760:32;;-1:-1:-1;11839:3:1;11824:19;11811:33;;-1:-1:-1;11396:454:1;-1:-1:-1;11396:454:1:o;11855:828::-;12090:2;12142:21;;;12212:13;;12115:18;;;12234:22;;;12061:4;;12090:2;12275;;12293:18;;;;12334:15;;;12061:4;12377:280;12391:6;12388:1;12385:13;12377:280;;;12450:13;;12492:9;;-1:-1:-1;;;;;12488:35:1;12476:48;;12564:11;;12558:18;12544:12;;;12537:40;12597:12;;;;12632:15;;;;12520:1;12406:9;12377:280;;;-1:-1:-1;12674:3:1;;11855:828;-1:-1:-1;;;;;;;11855:828:1:o;12910:338::-;13112:2;13094:21;;;13151:2;13131:18;;;13124:30;-1:-1:-1;;;13185:2:1;13170:18;;13163:44;13239:2;13224:18;;12910:338::o;13253:388::-;-1:-1:-1;;;;;13509:15:1;;;13491:34;;13561:15;;;;13556:2;13541:18;;13534:43;13625:8;13613:21;;;13608:2;13593:18;;13586:49;13441:2;13426:18;;13253:388::o;13646:138::-;13725:13;;13747:31;13725:13;13747:31;:::i;:::-;13646:138;;;:::o;13789:251::-;13859:6;13912:2;13900:9;13891:7;13887:23;13883:32;13880:52;;;13928:1;13925;13918:12;13880:52;13960:9;13954:16;13979:31;14004:5;13979:31;:::i;14603:134::-;14680:13;;14702:29;14680:13;14702:29;:::i;14742:163::-;14820:13;;14873:6;14862:18;;14852:29;;14842:57;;14895:1;14892;14885:12;14910:927;15025:6;15033;15041;15049;15057;15065;15073;15126:3;15114:9;15105:7;15101:23;15097:33;15094:53;;;15143:1;15140;15133:12;15094:53;15175:9;15169:16;15194:31;15219:5;15194:31;:::i;:::-;15294:2;15279:18;;15273:25;15244:5;;-1:-1:-1;15307:31:1;15273:25;15307:31;:::i;:::-;15357:7;-1:-1:-1;15383:48:1;15427:2;15412:18;;15383:48;:::i;:::-;15373:58;;15450:48;15494:2;15483:9;15479:18;15450:48;:::i;:::-;15440:58;;15517:49;15561:3;15550:9;15546:19;15517:49;:::i;:::-;15507:59;;15611:3;15600:9;15596:19;15590:26;15660:10;15651:7;15647:24;15638:7;15635:37;15625:65;;15686:1;15683;15676:12;15625:65;15761:3;15746:19;;15740:26;15709:7;;-1:-1:-1;15775:30:1;15740:26;15775:30;:::i;:::-;15824:7;15814:17;;;14910:927;;;;;;;;;;:::o;16549:184::-;16619:6;16672:2;16660:9;16651:7;16647:23;16643:32;16640:52;;;16688:1;16685;16678:12;16640:52;-1:-1:-1;16711:16:1;;16549:184;-1:-1:-1;16549:184:1:o;17471:245::-;17538:6;17591:2;17579:9;17570:7;17566:23;17562:32;17559:52;;;17607:1;17604;17597:12;17559:52;17639:9;17633:16;17658:28;17680:5;17658:28;:::i;17721:127::-;17782:10;17777:3;17773:20;17770:1;17763:31;17813:4;17810:1;17803:15;17837:4;17834:1;17827:15;17853:168;17926:9;;;17957;;17974:15;;;17968:22;;17954:37;17944:71;;17995:18;;:::i;:::-;17853:168;;;;:::o;18026:217::-;18066:1;18092;18082:132;;18136:10;18131:3;18127:20;18124:1;18117:31;18171:4;18168:1;18161:15;18199:4;18196:1;18189:15;18082:132;-1:-1:-1;18228:9:1;;18026:217::o;18248:127::-;18309:10;18304:3;18300:20;18297:1;18290:31;18340:4;18337:1;18330:15;18364:4;18361:1;18354:15;18380:274;-1:-1:-1;;;;;18572:32:1;;;;18554:51;;18636:2;18621:18;;18614:34;18542:2;18527:18;;18380:274::o;18659:135::-;18698:3;18719:17;;;18716:43;;18739:18;;:::i;:::-;-1:-1:-1;18786:1:1;18775:13;;18659:135::o;19504:128::-;19571:9;;;19592:11;;;19589:37;;;19606:18;;:::i;19985:127::-;20046:10;20041:3;20037:20;20034:1;20027:31;20077:4;20074:1;20067:15;20101:4;20098:1;20091:15;20117:461;20170:3;20208:5;20202:12;20235:6;20230:3;20223:19;20261:4;20290:2;20285:3;20281:12;20274:19;;20327:2;20320:5;20316:14;20348:1;20358:195;20372:6;20369:1;20366:13;20358:195;;;20437:13;;-1:-1:-1;;;;;20433:39:1;20421:52;;20493:12;;;;20528:15;;;;20469:1;20387:9;20358:195;;;-1:-1:-1;20569:3:1;;20117:461;-1:-1:-1;;;;;20117:461:1:o;20583:332::-;20790:6;20779:9;20772:25;20833:2;20828;20817:9;20813:18;20806:30;20753:4;20853:56;20905:2;20894:9;20890:18;20882:6;20853:56;:::i;20920:936::-;21015:6;21046:2;21089;21077:9;21068:7;21064:23;21060:32;21057:52;;;21105:1;21102;21095:12;21057:52;21138:9;21132:16;21167:18;21208:2;21200:6;21197:14;21194:34;;;21224:1;21221;21214:12;21194:34;21262:6;21251:9;21247:22;21237:32;;21307:7;21300:4;21296:2;21292:13;21288:27;21278:55;;21329:1;21326;21319:12;21278:55;21358:2;21352:9;21380:2;21376;21373:10;21370:36;;;21386:18;;:::i;:::-;21432:2;21429:1;21425:10;21415:20;;21455:28;21479:2;21475;21471:11;21455:28;:::i;:::-;21517:15;;;21587:11;;;21583:20;;;21548:12;;;;21615:19;;;21612:39;;;21647:1;21644;21637:12;21612:39;21671:11;;;;21691:135;21707:6;21702:3;21699:15;21691:135;;;21773:10;;21761:23;;21724:12;;;;21804;;;;21691:135;;;21845:5;20920:936;-1:-1:-1;;;;;;;;20920:936:1:o;21861:572::-;22086:13;;22068:32;;22160:4;22148:17;;;22142:24;-1:-1:-1;;;;;22138:50:1;22116:20;;;22109:80;22236:4;22224:17;;;22218:24;-1:-1:-1;;;;;22333:21:1;;;22311:20;;;22304:51;;;;22415:4;22403:17;;;22397:24;22393:33;22371:20;;;22364:63;;;;22055:3;22040:19;;21861:572::o;22438:245::-;22517:6;22525;22578:2;22566:9;22557:7;22553:23;22549:32;22546:52;;;22594:1;22591;22584:12;22546:52;-1:-1:-1;;22617:16:1;;22673:2;22658:18;;;22652:25;22617:16;;22652:25;;-1:-1:-1;22438:245:1:o;22688:136::-;22766:13;;22788:30;22766:13;22788:30;:::i;22829:192::-;22908:13;;-1:-1:-1;;;;;22950:46:1;;22940:57;;22930:85;;23011:1;23008;23001:12;23026:1186;23189:6;23197;23205;23213;23221;23229;23237;23245;23253;23261;23269:7;23278;23332:3;23320:9;23311:7;23307:23;23303:33;23300:53;;;23349:1;23346;23339:12;23300:53;23381:9;23375:16;23431:26;23424:5;23420:38;23413:5;23410:49;23400:77;;23473:1;23470;23463:12;23400:77;23496:5;-1:-1:-1;23520:49:1;23565:2;23550:18;;23520:49;:::i;:::-;23510:59;;23588:49;23633:2;23622:9;23618:18;23588:49;:::i;:::-;23578:59;;23656:49;23701:2;23690:9;23686:18;23656:49;:::i;:::-;23646:59;;23724:49;23768:3;23757:9;23753:19;23724:49;:::i;:::-;23714:59;;23792:48;23835:3;23824:9;23820:19;23792:48;:::i;:::-;23782:58;;23859:48;23902:3;23891:9;23887:19;23859:48;:::i;:::-;23849:58;;23926:50;23971:3;23960:9;23956:19;23926:50;:::i;:::-;23916:60;;24016:3;24005:9;24001:19;23995:26;23985:36;;24061:3;24050:9;24046:19;24040:26;24030:36;;24086:50;24131:3;24120:9;24116:19;24086:50;:::i;:::-;24075:61;;24156:50;24201:3;24190:9;24186:19;24156:50;:::i;:::-;24145:61;;23026:1186;;;;;;;;;;;;;;:::o;24217:125::-;24282:9;;;24303:10;;;24300:36;;;24316:18;;:::i;24910:1220::-;25130:13;;-1:-1:-1;;;;;494:31:1;482:44;;25098:3;25083:19;;25202:4;25194:6;25190:17;25184:24;25217:54;25265:4;25254:9;25250:20;25236:12;-1:-1:-1;;;;;494:31:1;482:44;;428:104;25217:54;;25320:4;25312:6;25308:17;25302:24;25335:55;25384:4;25373:9;25369:20;25353:14;6671:8;6660:20;6648:33;;6595:92;25335:55;;25439:4;25431:6;25427:17;25421:24;25454:54;25502:4;25491:9;25487:20;25471:14;4644:1;4633:20;4621:33;;4569:91;25454:54;;25557:4;25549:6;25545:17;25539:24;25572:54;25620:4;25609:9;25605:20;25589:14;4644:1;4633:20;4621:33;;4569:91;25572:54;;25682:4;25674:6;25670:17;25664:24;25657:4;25646:9;25642:20;25635:54;25745:4;25737:6;25733:17;25727:24;25720:4;25709:9;25705:20;25698:54;25808:4;25800:6;25796:17;25790:24;25783:4;25772:9;25768:20;25761:54;25834:6;25894:2;25886:6;25882:15;25876:22;25871:2;25860:9;25856:18;25849:50;;25918:6;25973:2;25965:6;25961:15;25955:22;25986:54;26036:2;26025:9;26021:18;26005:14;-1:-1:-1;;;;;494:31:1;482:44;;428:104;25986:54;-1:-1:-1;;26059:6:1;26107:15;;;26101:22;26081:18;;;;26074:50;24910:1220;:::o;26135:392::-;26232:6;26240;26248;26256;26309:3;26297:9;26288:7;26284:23;26280:33;26277:53;;;26326:1;26323;26316:12;26277:53;26355:9;26349:16;26339:26;;26384:49;26429:2;26418:9;26414:18;26384:49;:::i;:::-;26473:2;26458:18;;26452:25;26517:2;26502:18;;;26496:25;26135:392;;26374:59;;-1:-1:-1;26135:392:1;-1:-1:-1;;;26135:392:1:o;29699:330::-;29787:6;29795;29803;29856:2;29844:9;29835:7;29831:23;29827:32;29824:52;;;29872:1;29869;29862:12;29824:52;29895:40;29925:9;29895:40;:::i;:::-;29885:50;;29975:2;29964:9;29960:18;29954:25;29944:35;;30019:2;30008:9;30004:18;29998:25;29988:35;;29699:330;;;;;:::o;31464:397::-;31666:2;31648:21;;;31705:2;31685:18;;;31678:30;31744:34;31739:2;31724:18;;31717:62;-1:-1:-1;;;31810:2:1;31795:18;;31788:31;31851:3;31836:19;;31464:397::o;33025:582::-;33324:6;33313:9;33306:25;33367:6;33362:2;33351:9;33347:18;33340:34;33410:3;33405:2;33394:9;33390:18;33383:31;33287:4;33431:57;33483:3;33472:9;33468:19;33460:6;33431:57;:::i;:::-;-1:-1:-1;;;;;33524:32:1;;;;33519:2;33504:18;;33497:60;-1:-1:-1;33588:3:1;33573:19;33566:35;33423:65;33025:582;-1:-1:-1;;;33025:582:1:o;33612:412::-;33741:3;33779:6;33773:13;33804:1;33814:129;33828:6;33825:1;33822:13;33814:129;;;33926:4;33910:14;;;33906:25;;33900:32;33887:11;;;33880:53;33843:12;33814:129;;;-1:-1:-1;33998:1:1;33962:16;;33987:13;;;-1:-1:-1;33962:16:1;33612:412;-1:-1:-1;33612:412:1:o

Swarm Source

ipfs://8e65e89c6a397554b980dc77ccb027e32b134f9a7425b2d5213630d1f7ef45b1

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

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