false
true
0

Contract Address Details

0xCbC05cCC8257A085bC55e2EF184e16cd3ECD462A

Contract Name
DegenSwapper
Creator
0xc6eda6–db69f1 at 0x9177a7–679ce3
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
3,375 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25964580
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
DegenSwapper




Optimization enabled
true
Compiler version
v0.8.20+commit.a1b79de6




Optimization runs
200
EVM Version
default




Verified at
2025-06-27T12:51:31.982398Z

Contract source code

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


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

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

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

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

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

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

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

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

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

// File: https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    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);
}

// File: https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: DEGEN-main (9)/DEGEN-main/contracts/interface/IDTX.sol


// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity ^0.8.20;

interface IDTX {
    error ERC20InsufficientAllowance(
        address spender,
        uint256 allowance,
        uint256 needed
    );
    error ERC20InsufficientBalance(
        address sender,
        uint256 balance,
        uint256 needed
    );
    error ERC20InvalidApprover(address approver);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InvalidSender(address sender);
    error ERC20InvalidSpender(address spender);
    error OwnableInvalidOwner(address owner);
    error OwnableUnauthorizedAccount(address account);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function balanceOf(address account) external view returns (uint256);

    function burn(uint256 value) external;

    function burnFrom(address account, uint256 value) external;

    function burnToken(address account, uint256 amount) external returns (bool);

    function decimals() external view returns (uint8);

    function governor() external view returns (address);

    function masterchefAddress() external view returns (address);

    function mint(address to, uint256 amount) external;

    function name() external view returns (string memory);

    function owner() external view returns (address);

    function rebrandName(string memory _newName) external;

    function rebrandSymbol(string memory _newSymbol) external;

    function receiveTax() external view returns (address);

    function renounceOwnership() external;

    function symbol() external view returns (string memory);

    function tax() external view returns (uint256);

    function totalSupply() external view returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function transferOwnership(address newOwner) external;

    function updateTax(address _taxAddress) external;

    function updateTax(uint256 _tax) external;
}

// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchefAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_newName","type":"string"}],"name":"rebrandName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newSymbol","type":"string"}],"name":"rebrandSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"receiveTax","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxAddress","type":"address"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"}]
*/

// File: DEGEN-main (9)/DEGEN-main/contracts/interface/IGovernor.sol


// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity >=0.7.0 <0.9.0;

interface IGovernor {
    event EnforceGovernor(
        address indexed _newGovernor,
        address indexed enforcer
    );
    event GiveRolloverBonus(
        address indexed recipient,
        uint256 amount,
        address indexed poolInto
    );
    event SetInflation(uint256 rewardPerBlock);

    function OINK() external view returns (address);

    function acPool1() external view returns (address);

    function acPool1ID() external view returns (uint256);

    function acPool2() external view returns (address);

    function acPool2ID() external view returns (uint256);

    function acPool3() external view returns (address);

    function acPool3ID() external view returns (uint256);

    function acPool4() external view returns (address);

    function acPool4ID() external view returns (uint256);

    function addNewPool(address _pool) external;

    function addressToUint256(address addr) external pure returns (uint256);

    function basicContract() external view returns (address);

    function blockGovernorProposal() external;

    function burnTokens(uint256 _amount) external;

    function changedName() external view returns (bool);

    function consensusContract() external view returns (address);

    function costToVote() external view returns (uint256);

    function creditContract() external view returns (address);

    function delayBeforeEnforce() external view returns (uint256);

    function depositFee() external view returns (uint256);

    function farmContract() external view returns (address);

    function fundingRate() external view returns (uint256);

    function getRollBonus(address _bonusForPool)
        external
        view
        returns (uint256);

    function governorBlocked(address) external view returns (bool);

    function harvest() external;

    function manageRewardsAddress() external view returns (address);

    function helperToken() external view returns (address);

    function lastHarvestedTime() external view returns (uint256);

    function masterchef() external view returns (address);

    function proposeGovernorTimestamp() external view returns (uint256);

    function proposeNewGovernor(address beneficiary) external;

    function proposedGovernor() external view returns (address);

    function rebalancePools() external;

    function referralBonus() external view returns (uint256);

    function rewardContract() external view returns (address);

    function setCallFee(address _acPool, uint256 _newCallFee) external;

    function setGovernorTax(uint256 _amount) external;

    function setNewGovernor() external;

    function setNewGovernor2(address _new) external;

    function setPool(
        uint256 _pid,
        uint256 _allocPoint,
        bool _withUpdate
    ) external;

    function setReward(uint256 _amount) external;

    function stakeRolloverBonus(
        address _toAddress,
        address _depositToPool,
        uint256 _bonusToPay,
        uint256 _stakeID
    ) external;

    function token() external view returns (address);

    function transferToTreasury(uint256 amount) external;

    function treasuryRequest(
        address _tokenAddr,
        address _recipient,
        uint256 _amountToSend
    ) external;

    function treasuryWallet() external view returns (address);

    function updateCostToVote(uint256 newCostToVote) external;

    function updateDelayBeforeEnforce(uint256 newDelay) external;

    function updateRolloverBonus(address _forPool, uint256 _bonus) external;

    function updateVault(uint256 _type, uint256 _amount) external;
}

// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"EnforceGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"poolInto","type":"address"}],"name":"GiveRolloverBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardPerBlock","type":"uint256"}],"name":"SetInflation","type":"event"},{"inputs":[],"name":"OINK","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool1ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool2ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool3ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool4ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"addNewPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addressToUint256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"basicContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockGovernorProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changedName","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"consensusContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costToVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creditContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBeforeEnforce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundingRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bonusForPool","type":"address"}],"name":"getRollBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"governorBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"helperToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastHarvestedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposeGovernorTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"proposeNewGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposedGovernor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebalancePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"referralBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_acPool","type":"address"},{"internalType":"uint256","name":"_newCallFee","type":"uint256"}],"name":"setCallFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setGovernorTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setNewGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setNewGovernor2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"address","name":"_depositToPool","type":"address"},{"internalType":"uint256","name":"_bonusToPay","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"stakeRolloverBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amountToSend","type":"uint256"}],"name":"treasuryRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCostToVote","type":"uint256"}],"name":"updateCostToVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"updateDelayBeforeEnforce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_forPool","type":"address"},{"internalType":"uint256","name":"_bonus","type":"uint256"}],"name":"updateRolloverBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateVault","outputs":[],"stateMutability":"nonpayable","type":"function"}]
*/

// File: DEGEN-main (9)/DEGEN-main/contracts/buyOINK.sol


pragma solidity 0.8.20;





interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

interface IVault {
    enum SwapKind { GIVEN_IN, GIVEN_OUT }

    struct SingleSwap {
        bytes32 poolId;
        SwapKind kind;
        address assetIn;
        address assetOut;
        uint256 amount;
        bytes userData;
    }

    struct FundManagement {
        address sender;
        bool fromInternalBalance;
        address payable recipient;
        bool toInternalBalance;
    }

    function swap(
        SingleSwap memory singleSwap,
        FundManagement memory funds,
        uint256 limit,
        uint256 deadline
    ) external payable returns (uint256);
}

contract DegenSwapper {
	address public constant UNISWAP_ROUTER_ADDRESS = 0x165C3410fC91EF562C50559f7d2289fEbed552d9;
    address public constant UNISWAP_ROUTER_ADDRESS_V1 = 0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02;
    address public constant OINK = 0xFAaC6a85C3e123AB2CF7669B1024f146cFef0b38;
    address public constant WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
	address public constant DEGEN = 0x3E79130ab714E97ee73f86a56a2427bb1A519896;
	address public  authorizedAddress;
	address public constant WETH_ADDRESS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    bool public allowAll = true;

    IUniswapV2Router02 public constant uniswapRouter = IUniswapV2Router02(UNISWAP_ROUTER_ADDRESS);
    IUniswapV2Router02 public constant uniswapRouterV1 = IUniswapV2Router02(UNISWAP_ROUTER_ADDRESS_V1); //pulsex v1

    mapping(address => bool) public exoticToken;
    mapping(address => bool) public exoticTokenPath;
    mapping(address => bool) public  allowedPhux;
    mapping(bytes32 => bool) public allowedPhuxId;
    mapping(address => bool) public isV1Liquidity;
    mapping(address => bool) public isFeeToken;

    // Balancer V2 Vault address (mainnet)
    IVault public constant vault = IVault(0x7F51AC3df6A034273FB09BB29e383FCF655e473c);

    uint256 public slippageTolerance = 97; //3% slippage(token tax)

	

    constructor() {
		authorizedAddress = msg.sender;

        isFeeToken[0x32fB5663619A657839A80133994E45c5e5cDf427] = true;


        allowedPhux[0x6C203A555824ec90a215f37916cf8Db58EBe2fA3] = true; // print
        allowedPhuxId[0x30dd5508c3b1deb46a69fe29955428bb4e0733d90001000000000000000004b6] = true; // INC

        allowedPhux[0x9663c2d75ffd5F4017310405fCe61720aF45B829] = true; // phux and 2phux
        allowedPhux[0x115f3Fa979a936167f9D208a7B7c4d85081e84BD] = true;

        allowedPhuxId[0x7b70f6c77f7e3effe28495dbbd146f9a8af1afe50001000000000000000003cc] = true; // 2phux -> wpls
        allowedPhuxId[0x545998abcbf0633c83ba20cb94f384925be75dd5000200000000000000000000] = true; // phux -> wpls

        //approval for wpls, PRINT, inc, hex, plsx
        IERC20(WPLS).approve(UNISWAP_ROUTER_ADDRESS, type(uint256).max);
        IERC20(0x2fa878Ab3F87CC1C9737Fc071108F904c0B0C95d).approve(UNISWAP_ROUTER_ADDRESS, type(uint256).max);
        IERC20(0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39).approve(UNISWAP_ROUTER_ADDRESS, type(uint256).max);
        IERC20(0x95B303987A60C71504D99Aa1b13B4DA07b0790ab).approve(UNISWAP_ROUTER_ADDRESS, type(uint256).max);
	IERC20(0x8b4cfb020aF9AcAd95AD80020cE8f67FBB2C700E).approve(UNISWAP_ROUTER_ADDRESS, type(uint256).max); //bbc
	IERC20(0xefD766cCb38EaF1dfd701853BFCe31359239F305).approve(UNISWAP_ROUTER_ADDRESS, type(uint256).max); // edai

        IERC20(0x85DF7cE20A4CE0cF859804b45cB540FFE42074Da).approve(UNISWAP_ROUTER_ADDRESS_V1, type(uint256).max); //actr
        IERC20(0x32fB5663619A657839A80133994E45c5e5cDf427).approve(UNISWAP_ROUTER_ADDRESS_V1, type(uint256).max); // emit
    }

    event BoughtOink(uint256 amountSpent, uint256 amountReceived);
	
	modifier onlyAuthorized() {
        if(!allowAll) {
            require(msg.sender == authorizedAddress, "authorized address only");        
        }
        _;
	}
	
    function buyOink(uint256 _swapAmount) public onlyAuthorized {
        uint deadline = block.timestamp + 15; 

        uint[] memory amountsOut = uniswapRouter.getAmountsOut(_swapAmount, getTokenPath());
        uint minOut = (amountsOut[amountsOut.length-1] * slippageTolerance) / 100; 
        
        uint[] memory amounts = uniswapRouter.swapExactTokensForTokens(
            _swapAmount,      // amountIn
            minOut,           // amountOutMin
            getTokenPath(), 
            treasury(), 
            deadline
        );

        emit BoughtOink(_swapAmount, amounts[amounts.length - 1]);
    }

    function buyOinkFixed(uint256 _swapAmount, uint256 _minOut) public onlyAuthorized {
        uint deadline = block.timestamp + 15; 
        
        uint[] memory amounts = uniswapRouter.swapExactTokensForTokens(
            _swapAmount,      // amountIn
            _minOut,          // amountOutMin (caller provides this)
            getTokenPath(), 
            treasury(), 
            deadline
        );

        emit BoughtOink(_swapAmount, amounts[amounts.length - 1]);
    }

    function swapForWpls(uint256 _swapAmount, address _token, uint256 _minOut) public onlyAuthorized {
        require(_token != OINK && _token != WPLS && _token != DEGEN, "not allowed for these tokens");
        uint deadline = block.timestamp + 15; 

        IUniswapV2Router02 _router;
        if(isV1Liquidity[_token]) {
            _router = uniswapRouterV1;
        } else {
            _router = uniswapRouter;
        }
        _router.swapExactTokensForTokens(
            _swapAmount,      // amountIn
            _minOut,          // amountOutMin
            getTokenPath2(_token), 
            address(this), 
            deadline
        );
    }

    function swapForWplsFeeToken(uint256 _swapAmount, address _token, uint256 _minOut) public onlyAuthorized {
        require(_token != OINK && _token != WPLS && _token != DEGEN, "not allowed for these tokens");
        require(isFeeToken[_token], "only fee tokens!");
        uint deadline = block.timestamp + 15; 

        IUniswapV2Router02 _router;
        if(isV1Liquidity[_token]) {
            _router = uniswapRouterV1;
        } else {
            _router = uniswapRouter;
        }
        _router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            _swapAmount,      // amountIn
            _minOut,          // amountOutMin
            getTokenPath2(_token), 
            address(this), 
            deadline
        );
    }


    function swapExoticTokenForWPLS(address _token, address _into) external onlyAuthorized {
        require(exoticToken[_token], "submitted exotic token is not enabled");
        require(exoticTokenPath[_into], "submitted exotic token path is not enabled");

        uint deadline = block.timestamp + 15; 
        uint256 tokenBalance = IERC20(_token).balanceOf(address(this));

        address[] memory path = new address[](3);
        path[0] = _token;
        path[1] = _into;
        path[2] = WPLS;

        IUniswapV2Router02 _router;
        if(isV1Liquidity[_token]) {
            _router = uniswapRouterV1;
        } else {
            _router = uniswapRouter;
        }

        // Get expected output amounts
        uint[] memory amountsOut = _router.getAmountsOut(tokenBalance, path);
        
        // Apply slippage tolerance (e.g., 3% slippage)
        uint256 minAmountOut = amountsOut[amountsOut.length - 1] ;

        // Use swapExactTokensForTokens instead
        _router.swapExactTokensForTokens(
            tokenBalance,      // amountIn
            minAmountOut,      // amountOutMin  
            path,              // path
            address(this),     // to
            deadline           // deadline
        );
    }


    //swap on phux
    function swapOnPhuxForWPLS(
        address tokenIn, // Address of the input token (e.g., DAI)
        bytes32 poolId // Balancer pool ID (e.g., DAI/WETH pool)
    ) external onlyAuthorized {
        require(allowedPhux[tokenIn], "token is not enabled");
        require(allowedPhuxId[poolId], "phux pool is not enabled");
        uint256 deadline = block.timestamp + 15;
        uint256 amountIn = IERC20(tokenIn).balanceOf(address(this));


        IERC20(tokenIn).approve(address(vault), amountIn);

        // Define the swap parameters
        IVault.SingleSwap memory singleSwap = IVault.SingleSwap({
            poolId: poolId,
            kind: IVault.SwapKind.GIVEN_IN, // Specify exact amount in
            assetIn: tokenIn,
            assetOut: WPLS,
            amount: amountIn,
            userData: "0x" // No additional data needed for standard swaps
        });

        // Define fund management parameters
        IVault.FundManagement memory funds = IVault.FundManagement({
            sender: address(this), // This contract sends the tokens
            fromInternalBalance: false, // Use external balance
            recipient: payable(address(this)), // Send WETH to the caller
            toInternalBalance: false // Do not use internal balance
        });

        // Execute the swap with no minimum amount out (ignoring slippage)
        // small amount of rewards from constant rewards so no care for slippage
        uint256 amountOut = vault.swap(singleSwap, funds, 0, deadline);
    }

	function enableToken(address _token) external {
        IERC20(_token).approve(UNISWAP_ROUTER_ADDRESS, type(uint256).max);
    }
    function enableTokenV1(address _token) external {
        IERC20(_token).approve(UNISWAP_ROUTER_ADDRESS_V1, type(uint256).max);
    }

	function getTokenPath() private pure returns (address[] memory) {
        address[] memory path = new address[](2);
        path[0] = WPLS;
        path[1] = OINK;
        return path;
    }

	 function getTokenPath2(address _token) private pure returns (address[] memory) {
        address[] memory path = new address[](2);
        path[0] = _token;
        path[1] = WPLS;
        return path;
    }

	function getMinOut(uint256 _swapAmount, address[] memory _path) external view returns (uint256) {
        IUniswapV2Router02 _router;
        if(isV1Liquidity[_path[0]]) {
            _router = uniswapRouterV1;
        } else {
            _router = uniswapRouter;
        }

	    uint[] memory _minOutT = _router.getAmountsOut(_swapAmount, _path);
        uint _minOut = _minOutT[_minOutT.length-1];
	    return _minOut;
    }

    function wrapPls() external {
        uint256 amount = address(this).balance;
        require(amount > 0, "No PLS balance");
        
        // Get WETH contract
        IWETH weth = IWETH(WETH_ADDRESS);
        
        // Wrap ETH to WETH
        weth.deposit{value: amount}();
    }

    function withdraw(address _token) external {
        require(msg.sender == governor(), "only thru decentralized Governance");
        IERC20(_token).transfer(treasury(), IERC20(_token).balanceOf(address(this)));
    }
    
    function sendToTreasury(address _token, uint256 _amount) external  {
      require(msg.sender == governor() || msg.sender == authorizedAddress, "only thru decentralized Governance");
	  IERC20(_token).transfer(treasury(), _amount);
    }

	function recoverETH() external {
        require(msg.sender == governor() || msg.sender == authorizedAddress, "governor only");
        address payable recipient = payable(treasury());
        recipient.transfer(address(this).balance);
    }

    function recoverToken(address _token) external {
        require(msg.sender == governor(), "governor only");
        IERC20(_token).transfer(treasury(), IERC20(_token).balanceOf(address(this)));
    }

	function modifyAuthorized(address _newAddress) external  {
		require(msg.sender == authorizedAddress, "authorized address only");
        authorizedAddress = _newAddress;
	}

    function modifyAllowAll(bool _setting) external  {
		require(msg.sender == authorizedAddress, "authorized address only");
        allowAll = _setting;
	}

    function modifyExotic(address _token, bool _setting) external {
		require(msg.sender == authorizedAddress, "authorized address only");
        exoticToken[_token] = _setting;
	}
    function modifyExoticPath(address _token, bool _setting) external {
		require(msg.sender == authorizedAddress, "authorized address only");
        exoticTokenPath[_token] = _setting;
	}
    function modifyPhux(address _token, bool _setting) external {
		require(msg.sender == authorizedAddress, "authorized address only");
        allowedPhux[_token] = _setting;
	}
    function modifyPhuxPool(bytes32 _poolId, bool _setting) external {
		require(msg.sender == authorizedAddress, "authorized address only");
        allowedPhuxId[_poolId] = _setting;
	}
    function modifyV1Liquidity(address _token, bool _setting) external {
		require(msg.sender == authorizedAddress, "authorized address only");
        isV1Liquidity[_token] = _setting;
	}
    function modifySlippageTolerance(uint256 _amount) external {
		require(msg.sender == authorizedAddress, "authorized address only");
        slippageTolerance = _amount;
	}
    function modifyisFeeToken(address _token, bool _s) external {
		require(msg.sender == authorizedAddress, "authorized address only");
        isFeeToken[_token] = _s;
	}

	function governor() public view returns (address) {
		return IDTX(DEGEN).governor();
	}

  	function treasury() public view returns (address) {
		return IGovernor(governor()).treasuryWallet();
	}

	// Simple ETH receiver functions
    receive() external payable {}
    fallback() external payable {}
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"BoughtOink","inputs":[{"type":"uint256","name":"amountSpent","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountReceived","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"fallback","stateMutability":"payable"},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"DEGEN","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"OINK","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"UNISWAP_ROUTER_ADDRESS","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"UNISWAP_ROUTER_ADDRESS_V1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"WETH_ADDRESS","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"WPLS","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"allowAll","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"allowedPhux","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"allowedPhuxId","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"authorizedAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"buyOink","inputs":[{"type":"uint256","name":"_swapAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"buyOinkFixed","inputs":[{"type":"uint256","name":"_swapAmount","internalType":"uint256"},{"type":"uint256","name":"_minOut","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"enableToken","inputs":[{"type":"address","name":"_token","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"enableTokenV1","inputs":[{"type":"address","name":"_token","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"exoticToken","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"exoticTokenPath","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getMinOut","inputs":[{"type":"uint256","name":"_swapAmount","internalType":"uint256"},{"type":"address[]","name":"_path","internalType":"address[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"governor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isFeeToken","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isV1Liquidity","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"modifyAllowAll","inputs":[{"type":"bool","name":"_setting","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"modifyAuthorized","inputs":[{"type":"address","name":"_newAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"modifyExotic","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"bool","name":"_setting","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"modifyExoticPath","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"bool","name":"_setting","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"modifyPhux","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"bool","name":"_setting","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"modifyPhuxPool","inputs":[{"type":"bytes32","name":"_poolId","internalType":"bytes32"},{"type":"bool","name":"_setting","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"modifySlippageTolerance","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"modifyV1Liquidity","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"bool","name":"_setting","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"modifyisFeeToken","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"bool","name":"_s","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"recoverETH","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"recoverToken","inputs":[{"type":"address","name":"_token","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"sendToTreasury","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"slippageTolerance","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"swapExoticTokenForWPLS","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"address","name":"_into","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"swapForWpls","inputs":[{"type":"uint256","name":"_swapAmount","internalType":"uint256"},{"type":"address","name":"_token","internalType":"address"},{"type":"uint256","name":"_minOut","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"swapForWplsFeeToken","inputs":[{"type":"uint256","name":"_swapAmount","internalType":"uint256"},{"type":"address","name":"_token","internalType":"address"},{"type":"uint256","name":"_minOut","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"swapOnPhuxForWPLS","inputs":[{"type":"address","name":"tokenIn","internalType":"address"},{"type":"bytes32","name":"poolId","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"treasury","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IUniswapV2Router02"}],"name":"uniswapRouter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IUniswapV2Router02"}],"name":"uniswapRouterV1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IVault"}],"name":"vault","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[{"type":"address","name":"_token","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"wrapPls","inputs":[]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x60806040525f805460ff60a01b1916600160a01b179055606160075534801562000027575f80fd5b505f80546001600160a01b031916331781557f238a1e30575e6919c312f0809796b9ae37fca3315a0cf72757ab91df115d1e96805460ff1990811660019081179092557fb5d5c2219d4a6c1ea067eb676b8f79eb887d879e54047e83b6bbd0409fb19c3280548216831790557ff6ce72f957e7b9c210904f372ad0be240173025ad9cf16031d858ce16a807f8180548216831790557f5b26b8aecf35300d0c49f33bc1fe3c873521430e5f57995928f57e41d2fa821480548216831790557fba4795b0619f84b0f2866f065b44f4274053616b3a970c6901f0537039ee04d48054821683179055600460208190527fa439d80f7ee560f5565ecd23282d6478f9c3f6d1912cc3518a7aa5083de4645080548316841790557f545998abcbf0633c83ba20cb94f384925be75dd50002000000000000000000009093527f9b1e0fe3da40ea760fd6ad65d8de9736bb43a3050e62b0c57b49a1f09c17db948054909116909117905560405163095ea7b360e01b81525f8051602062002c62833981519152918101919091525f19602482015273a1077a294dde1b09bb078844df40758a5d0f9a279063095ea7b3906044016020604051808303815f875af1158015620001f3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002199190620005f9565b5060405163095ea7b360e01b81525f8051602062002c6283398151915260048201525f196024820152732fa878ab3f87cc1c9737fc071108f904c0b0c95d9063095ea7b3906044016020604051808303815f875af11580156200027e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a49190620005f9565b5060405163095ea7b360e01b81525f8051602062002c6283398151915260048201525f196024820152732b591e99afe9f32eaa6214f7b7629768c40eeb399063095ea7b3906044016020604051808303815f875af115801562000309573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200032f9190620005f9565b5060405163095ea7b360e01b81525f8051602062002c6283398151915260048201525f1960248201527395b303987a60c71504d99aa1b13b4da07b0790ab9063095ea7b3906044016020604051808303815f875af115801562000394573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003ba9190620005f9565b5060405163095ea7b360e01b81525f8051602062002c6283398151915260048201525f196024820152738b4cfb020af9acad95ad80020ce8f67fbb2c700e9063095ea7b3906044016020604051808303815f875af11580156200041f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004459190620005f9565b5060405163095ea7b360e01b81525f8051602062002c6283398151915260048201525f19602482015273efd766ccb38eaf1dfd701853bfce31359239f3059063095ea7b3906044016020604051808303815f875af1158015620004aa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004d09190620005f9565b5060405163095ea7b360e01b81527398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0260048201525f1960248201527385df7ce20a4ce0cf859804b45cb540ffe42074da9063095ea7b3906044016020604051808303815f875af11580156200053b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005619190620005f9565b5060405163095ea7b360e01b81527398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0260048201525f1960248201527332fb5663619a657839a80133994e45c5e5cdf4279063095ea7b3906044016020604051808303815f875af1158015620005cc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005f29190620005f9565b5062000621565b5f602082840312156200060a575f80fd5b815180151581146200061a575f80fd5b9392505050565b612633806200062f5f395ff3fe608060405260043610610247575f3560e01c8063735de9f711610137578063c690908a116100af578063d11196e011610076578063d11196e014610704578063d1a4dfdf14610723578063d7e7beb314610742578063eaf7e7a614610770578063ef8ef56f14610250578063fbfa77cf1461078f57005b8063c690908a1461068e578063c90bf57b1461046f578063cd6c8f8f146106ad578063cdc70a00146106db578063d03153aa146106ef57005b80639be65a60116100fe5780639be65a60146105bd5780639d1e07bf146105dc578063a06d0d11146105fb578063ab84aaa214610622578063c47e956314610641578063c67a0e2d1461066057005b8063735de9f71461053957806378edce551461056057806379b369431461053957806384f654a41461057f57806391f952fb1461059e57005b80634ee643a5116101ca578063622ba51211610191578063622ba5121461046f57806362bbf7cc146104965780636822e8d9146104b55780636c639e75146104d45780636d25c6fc146104fb5780636df240f71461051a57005b80634ee643a5146103d25780635167e2f9146103f157806351cff8d91461041e5780635539d4001461043d57806361d027b31461045b57005b8063306588911161020e578063306588911461032857806330f3f38314610356578063345dba631461037557806339118715146103945780633d4f93ed146103b357005b8063040141e5146102505780630614117a146102945780630c340a24146102a857806316ad82d7146102bc578063303e27c3146102fa57005b3661024e57005b005b34801561025b575f80fd5b5061027773a1077a294dde1b09bb078844df40758a5d0f9a2781565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561029f575f80fd5b5061024e6107b6565b3480156102b3575f80fd5b50610277610869565b3480156102c7575f80fd5b506102ea6102d6366004611ff8565b60066020525f908152604090205460ff1681565b604051901515815260200161028b565b348015610305575f80fd5b506102ea610314366004611ff8565b60016020525f908152604090205460ff1681565b348015610333575f80fd5b506102ea610342366004611ff8565b60026020525f908152604090205460ff1681565b348015610361575f80fd5b5061024e610370366004612027565b6108e3565b348015610380575f80fd5b5061024e61038f366004612042565b610929565b34801561039f575f80fd5b5061024e6103ae366004612077565b610b09565b3480156103be575f80fd5b5061024e6103cd3660046120a1565b610bdf565b3480156103dd575f80fd5b505f546102ea90600160a01b900460ff1681565b3480156103fc575f80fd5b5061041061040b366004612140565b610c32565b60405190815260200161028b565b348015610429575f80fd5b5061024e610438366004611ff8565b610d50565b348015610448575f80fd5b505f54610277906001600160a01b031681565b348015610466575f80fd5b50610277610e72565b34801561047a575f80fd5b506102777398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0281565b3480156104a1575f80fd5b5061024e6104b03660046120a1565b610eb6565b3480156104c0575f80fd5b5061024e6104cf3660046121e6565b610f09565b3480156104df575f80fd5b50610277733e79130ab714e97ee73f86a56a2427bb1a51989681565b348015610506575f80fd5b5061024e6105153660046121fd565b611118565b348015610525575f80fd5b5061024e610534366004612077565b611160565b348015610544575f80fd5b5061027773165c3410fc91ef562c50559f7d2289febed552d981565b34801561056b575f80fd5b5061024e61057a366004612042565b61145b565b34801561058a575f80fd5b5061024e6105993660046120a1565b61167f565b3480156105a9575f80fd5b5061024e6105b83660046120a1565b6116d2565b3480156105c8575f80fd5b5061024e6105d7366004611ff8565b611725565b3480156105e7575f80fd5b5061024e6105f63660046120a1565b61177d565b348015610606575f80fd5b5061027773faac6a85c3e123ab2cf7669b1024f146cfef0b3881565b34801561062d575f80fd5b5061024e61063c366004612220565b6117d0565b34801561064c575f80fd5b5061024e61065b36600461224c565b611b9c565b34801561066b575f80fd5b506102ea61067a366004611ff8565b60056020525f908152604090205460ff1681565b348015610699575f80fd5b5061024e6106a8366004611ff8565b611ce3565b3480156106b8575f80fd5b506102ea6106c73660046121e6565b60046020525f908152604090205460ff1681565b3480156106e6575f80fd5b5061024e611d2a565b3480156106fa575f80fd5b5061041060075481565b34801561070f575f80fd5b5061024e61071e3660046121e6565b611dd5565b34801561072e575f80fd5b5061024e61073d366004611ff8565b611e03565b34801561074d575f80fd5b506102ea61075c366004611ff8565b60036020525f908152604090205460ff1681565b34801561077b575f80fd5b5061024e61078a366004611ff8565b611e4d565b34801561079a575f80fd5b50610277737f51ac3df6a034273fb09bb29e383fcf655e473c81565b6107be610869565b6001600160a01b0316336001600160a01b031614806107e657505f546001600160a01b031633145b6108275760405162461bcd60e51b815260206004820152600d60248201526c676f7665726e6f72206f6e6c7960981b60448201526064015b60405180910390fd5b5f610830610e72565b6040519091506001600160a01b038216904780156108fc02915f818181858888f19350505050158015610865573d5f803e3d5ffd5b5050565b5f733e79130ab714e97ee73f86a56a2427bb1a5198966001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108de919061226c565b905090565b5f546001600160a01b0316331461090c5760405162461bcd60e51b815260040161081e90612287565b5f8054911515600160a01b0260ff60a01b19909216919091179055565b5f54600160a01b900460ff16610962575f546001600160a01b031633146109625760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03821673faac6a85c3e123ab2cf7669b1024f146cfef0b38148015906109ac57506001600160a01b03821673a1077a294dde1b09bb078844df40758a5d0f9a2714155b80156109d557506001600160a01b038216733e79130ab714e97ee73f86a56a2427bb1a51989614155b610a215760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420616c6c6f77656420666f7220746865736520746f6b656e7300000000604482015260640161081e565b5f610a2d42600f6122d2565b6001600160a01b0384165f908152600560205260408120549192509060ff1615610a6c57507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02610a83565b5073165c3410fc91ef562c50559f7d2289febed552d95b806001600160a01b03166338ed17398685610a9d88611e94565b30876040518663ffffffff1660e01b8152600401610abf959493929190612327565b5f604051808303815f875af1158015610ada573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b019190810190612362565b505050505050565b610b11610869565b6001600160a01b0316336001600160a01b03161480610b3957505f546001600160a01b031633145b610b555760405162461bcd60e51b815260040161081e906123ee565b816001600160a01b031663a9059cbb610b6c610e72565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610bb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bda9190612430565b505050565b5f546001600160a01b03163314610c085760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03919091165f908152600160205260409020805460ff1916911515919091179055565b5f8060055f845f81518110610c4957610c4961244b565b6020908102919091018101516001600160a01b031682528101919091526040015f205460ff1615610c8f57507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02610ca6565b5073165c3410fc91ef562c50559f7d2289febed552d95b60405163d06ca61f60e01b81525f906001600160a01b0383169063d06ca61f90610cd6908890889060040161245f565b5f60405180830381865afa158015610cf0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d179190810190612362565b90505f8160018351610d29919061247f565b81518110610d3957610d3961244b565b602002602001015190508093505050505b92915050565b610d58610869565b6001600160a01b0316336001600160a01b031614610d885760405162461bcd60e51b815260040161081e906123ee565b806001600160a01b031663a9059cbb610d9f610e72565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610de1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e059190612492565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b6020604051808303815f875af1158015610e4e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108659190612430565b5f610e7b610869565b6001600160a01b0316634626402b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ba573d5f803e3d5ffd5b5f546001600160a01b03163314610edf5760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b5f54600160a01b900460ff16610f42575f546001600160a01b03163314610f425760405162461bcd60e51b815260040161081e90612287565b5f610f4e42600f6122d2565b90505f73165c3410fc91ef562c50559f7d2289febed552d963d06ca61f84610f74611f31565b6040518363ffffffff1660e01b8152600401610f9192919061245f565b5f60405180830381865afa158015610fab573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fd29190810190612362565b90505f60646007548360018551610fe9919061247f565b81518110610ff957610ff961244b565b602002602001015161100b91906124a9565b61101591906124c0565b90505f73165c3410fc91ef562c50559f7d2289febed552d96338ed1739868461103c611f31565b611044610e72565b896040518663ffffffff1660e01b8152600401611065959493929190612327565b5f604051808303815f875af1158015611080573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110a79190810190612362565b90507f61d7807933e181594731ff5dfca72dfaabdcaf3e72951decc38ff78fcbba88ad8582600184516110da919061247f565b815181106110ea576110ea61244b565b6020026020010151604051611109929190918252602082015260400190565b60405180910390a15050505050565b5f546001600160a01b031633146111415760405162461bcd60e51b815260040161081e90612287565b5f91825260046020526040909120805460ff1916911515919091179055565b5f54600160a01b900460ff16611199575f546001600160a01b031633146111995760405162461bcd60e51b815260040161081e90612287565b6001600160a01b0382165f9081526003602052604090205460ff166111f75760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b881a5cc81b9bdd08195b98589b195960621b604482015260640161081e565b5f8181526004602052604090205460ff166112545760405162461bcd60e51b815260206004820152601860248201527f7068757820706f6f6c206973206e6f7420656e61626c65640000000000000000604482015260640161081e565b5f61126042600f6122d2565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156112a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cb9190612492565b60405163095ea7b360e01b8152737f51ac3df6a034273fb09bb29e383fcf655e473c6004820152602481018290529091506001600160a01b0385169063095ea7b3906044016020604051808303815f875af115801561132c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113509190612430565b506040805160c0810182528481525f60208083018290526001600160a01b0388168385015273a1077a294dde1b09bb078844df40758a5d0f9a276060808501919091526080808501879052855180870187526002815261060f60f31b8185015260a0860152855190810186523080825292810184905280860192909252810182905292516352bbbe2960e01b8152919291737f51ac3df6a034273fb09bb29e383fcf655e473c906352bbbe2990611411908690869086908b90600401612522565b6020604051808303815f875af115801561142d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114519190612492565b5050505050505050565b5f54600160a01b900460ff16611494575f546001600160a01b031633146114945760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03821673faac6a85c3e123ab2cf7669b1024f146cfef0b38148015906114de57506001600160a01b03821673a1077a294dde1b09bb078844df40758a5d0f9a2714155b801561150757506001600160a01b038216733e79130ab714e97ee73f86a56a2427bb1a51989614155b6115535760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420616c6c6f77656420666f7220746865736520746f6b656e7300000000604482015260640161081e565b6001600160a01b0382165f9081526006602052604090205460ff166115ad5760405162461bcd60e51b815260206004820152601060248201526f6f6e6c792066656520746f6b656e732160801b604482015260640161081e565b5f6115b942600f6122d2565b6001600160a01b0384165f908152600560205260408120549192509060ff16156115f857507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0261160f565b5073165c3410fc91ef562c50559f7d2289febed552d95b806001600160a01b0316635c11d795868561162988611e94565b30876040518663ffffffff1660e01b815260040161164b959493929190612327565b5f604051808303815f87803b158015611662575f80fd5b505af1158015611674573d5f803e3d5ffd5b505050505050505050565b5f546001600160a01b031633146116a85760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03919091165f908152600360205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146116fb5760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b61172d610869565b6001600160a01b0316336001600160a01b031614610d885760405162461bcd60e51b815260206004820152600d60248201526c676f7665726e6f72206f6e6c7960981b604482015260640161081e565b5f546001600160a01b031633146117a65760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03919091165f908152600260205260409020805460ff1916911515919091179055565b5f54600160a01b900460ff16611809575f546001600160a01b031633146118095760405162461bcd60e51b815260040161081e90612287565b6001600160a01b0382165f9081526001602052604090205460ff1661187e5760405162461bcd60e51b815260206004820152602560248201527f7375626d69747465642065786f74696320746f6b656e206973206e6f7420656e60448201526418589b195960da1b606482015260840161081e565b6001600160a01b0381165f9081526002602052604090205460ff166118f85760405162461bcd60e51b815260206004820152602a60248201527f7375626d69747465642065786f74696320746f6b656e2070617468206973206e6044820152691bdd08195b98589b195960b21b606482015260840161081e565b5f61190442600f6122d2565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038516906370a0823190602401602060405180830381865afa15801561194b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196f9190612492565b604080516003808252608082019092529192505f91906020820160608036833701905050905084815f815181106119a8576119a861244b565b60200260200101906001600160a01b031690816001600160a01b03168152505083816001815181106119dc576119dc61244b565b60200260200101906001600160a01b031690816001600160a01b03168152505073a1077a294dde1b09bb078844df40758a5d0f9a2781600281518110611a2457611a2461244b565b6001600160a01b039283166020918202929092018101919091529086165f9081526005909152604081205460ff1615611a7257507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02611a89565b5073165c3410fc91ef562c50559f7d2289febed552d95b60405163d06ca61f60e01b81525f906001600160a01b0383169063d06ca61f90611ab9908790879060040161245f565b5f60405180830381865afa158015611ad3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611afa9190810190612362565b90505f8160018351611b0c919061247f565b81518110611b1c57611b1c61244b565b60200260200101519050826001600160a01b03166338ed1739868387308b6040518663ffffffff1660e01b8152600401611b5a959493929190612327565b5f604051808303815f875af1158015611b75573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116749190810190612362565b5f54600160a01b900460ff16611bd5575f546001600160a01b03163314611bd55760405162461bcd60e51b815260040161081e90612287565b5f611be142600f6122d2565b90505f73165c3410fc91ef562c50559f7d2289febed552d96338ed17398585611c08611f31565b611c10610e72565b876040518663ffffffff1660e01b8152600401611c31959493929190612327565b5f604051808303815f875af1158015611c4c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c739190810190612362565b90507f61d7807933e181594731ff5dfca72dfaabdcaf3e72951decc38ff78fcbba88ad848260018451611ca6919061247f565b81518110611cb657611cb661244b565b6020026020010151604051611cd5929190918252602082015260400190565b60405180910390a150505050565b60405163095ea7b360e01b815273165c3410fc91ef562c50559f7d2289febed552d960048201525f1960248201526001600160a01b0382169063095ea7b390604401610e32565b4780611d695760405162461bcd60e51b815260206004820152600e60248201526d4e6f20504c532062616c616e636560901b604482015260640161081e565b5f73a1077a294dde1b09bb078844df40758a5d0f9a279050806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015611dba575f80fd5b505af1158015611dcc573d5f803e3d5ffd5b50505050505050565b5f546001600160a01b03163314611dfe5760405162461bcd60e51b815260040161081e90612287565b600755565b5f546001600160a01b03163314611e2c5760405162461bcd60e51b815260040161081e90612287565b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b60405163095ea7b360e01b81527398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0260048201525f1960248201526001600160a01b0382169063095ea7b390604401610e32565b60408051600280825260608083018452925f92919060208301908036833701905050905082815f81518110611ecb57611ecb61244b565b60200260200101906001600160a01b031690816001600160a01b03168152505073a1077a294dde1b09bb078844df40758a5d0f9a2781600181518110611f1357611f1361244b565b6001600160a01b039092166020928302919091019091015292915050565b60408051600280825260608083018452925f92919060208301908036833701905050905073a1077a294dde1b09bb078844df40758a5d0f9a27815f81518110611f7c57611f7c61244b565b60200260200101906001600160a01b031690816001600160a01b03168152505073faac6a85c3e123ab2cf7669b1024f146cfef0b3881600181518110611fc457611fc461244b565b6001600160a01b0390921660209283029190910190910152919050565b6001600160a01b0381168114611ff5575f80fd5b50565b5f60208284031215612008575f80fd5b813561201381611fe1565b9392505050565b8015158114611ff5575f80fd5b5f60208284031215612037575f80fd5b81356120138161201a565b5f805f60608486031215612054575f80fd5b83359250602084013561206681611fe1565b929592945050506040919091013590565b5f8060408385031215612088575f80fd5b823561209381611fe1565b946020939093013593505050565b5f80604083850312156120b2575f80fd5b82356120bd81611fe1565b915060208301356120cd8161201a565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612115576121156120d8565b604052919050565b5f67ffffffffffffffff821115612136576121366120d8565b5060051b60200190565b5f8060408385031215612151575f80fd5b8235915060208084013567ffffffffffffffff81111561216f575f80fd5b8401601f8101861361217f575f80fd5b803561219261218d8261211d565b6120ec565b81815260059190911b820183019083810190888311156121b0575f80fd5b928401925b828410156121d75783356121c881611fe1565b825292840192908401906121b5565b80955050505050509250929050565b5f602082840312156121f6575f80fd5b5035919050565b5f806040838503121561220e575f80fd5b8235915060208301356120cd8161201a565b5f8060408385031215612231575f80fd5b823561223c81611fe1565b915060208301356120cd81611fe1565b5f806040838503121561225d575f80fd5b50508035926020909101359150565b5f6020828403121561227c575f80fd5b815161201381611fe1565b60208082526017908201527f617574686f72697a65642061646472657373206f6e6c79000000000000000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610d4a57610d4a6122be565b5f8151808452602080850194508084015f5b8381101561231c5781516001600160a01b0316875295820195908201906001016122f7565b509495945050505050565b85815284602082015260a060408201525f61234560a08301866122e5565b6001600160a01b0394909416606083015250608001529392505050565b5f6020808385031215612373575f80fd5b825167ffffffffffffffff811115612389575f80fd5b8301601f81018513612399575f80fd5b80516123a761218d8261211d565b81815260059190911b820183019083810190878311156123c5575f80fd5b928401925b828410156123e3578351825292840192908401906123ca565b979650505050505050565b60208082526022908201527f6f6e6c79207468727520646563656e7472616c697a656420476f7665726e616e604082015261636560f01b606082015260800190565b5f60208284031215612440575f80fd5b81516120138161201a565b634e487b7160e01b5f52603260045260245ffd5b828152604060208201525f61247760408301846122e5565b949350505050565b81810381811115610d4a57610d4a6122be565b5f602082840312156124a2575f80fd5b5051919050565b8082028115828204841417610d4a57610d4a6122be565b5f826124da57634e487b7160e01b5f52601260045260245ffd5b500490565b5f81518084525f5b81811015612503576020818501810151868301820152016124e7565b505f602082860101526020601f19601f83011685010191505092915050565b60e08152845160e08201525f60208601516002811061254f57634e487b7160e01b5f52602160045260245ffd5b61010083015260408601516001600160a01b031661012083015260608601516125846101408401826001600160a01b03169052565b50608086015161016083015260a086015160c06101808401526125ab6101a08401826124df565b9150506125eb602083018680516001600160a01b039081168352602080830151151590840152604080830151909116908301526060908101511515910152565b60a082019390935260c001529291505056fea2646970667358221220a3c7bea6e9bc9918112f55bb25402174963520386027b5cd525f3c8a4a4ba6db64736f6c63430008140033000000000000000000000000165c3410fc91ef562c50559f7d2289febed552d9

Deployed ByteCode

0x608060405260043610610247575f3560e01c8063735de9f711610137578063c690908a116100af578063d11196e011610076578063d11196e014610704578063d1a4dfdf14610723578063d7e7beb314610742578063eaf7e7a614610770578063ef8ef56f14610250578063fbfa77cf1461078f57005b8063c690908a1461068e578063c90bf57b1461046f578063cd6c8f8f146106ad578063cdc70a00146106db578063d03153aa146106ef57005b80639be65a60116100fe5780639be65a60146105bd5780639d1e07bf146105dc578063a06d0d11146105fb578063ab84aaa214610622578063c47e956314610641578063c67a0e2d1461066057005b8063735de9f71461053957806378edce551461056057806379b369431461053957806384f654a41461057f57806391f952fb1461059e57005b80634ee643a5116101ca578063622ba51211610191578063622ba5121461046f57806362bbf7cc146104965780636822e8d9146104b55780636c639e75146104d45780636d25c6fc146104fb5780636df240f71461051a57005b80634ee643a5146103d25780635167e2f9146103f157806351cff8d91461041e5780635539d4001461043d57806361d027b31461045b57005b8063306588911161020e578063306588911461032857806330f3f38314610356578063345dba631461037557806339118715146103945780633d4f93ed146103b357005b8063040141e5146102505780630614117a146102945780630c340a24146102a857806316ad82d7146102bc578063303e27c3146102fa57005b3661024e57005b005b34801561025b575f80fd5b5061027773a1077a294dde1b09bb078844df40758a5d0f9a2781565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561029f575f80fd5b5061024e6107b6565b3480156102b3575f80fd5b50610277610869565b3480156102c7575f80fd5b506102ea6102d6366004611ff8565b60066020525f908152604090205460ff1681565b604051901515815260200161028b565b348015610305575f80fd5b506102ea610314366004611ff8565b60016020525f908152604090205460ff1681565b348015610333575f80fd5b506102ea610342366004611ff8565b60026020525f908152604090205460ff1681565b348015610361575f80fd5b5061024e610370366004612027565b6108e3565b348015610380575f80fd5b5061024e61038f366004612042565b610929565b34801561039f575f80fd5b5061024e6103ae366004612077565b610b09565b3480156103be575f80fd5b5061024e6103cd3660046120a1565b610bdf565b3480156103dd575f80fd5b505f546102ea90600160a01b900460ff1681565b3480156103fc575f80fd5b5061041061040b366004612140565b610c32565b60405190815260200161028b565b348015610429575f80fd5b5061024e610438366004611ff8565b610d50565b348015610448575f80fd5b505f54610277906001600160a01b031681565b348015610466575f80fd5b50610277610e72565b34801561047a575f80fd5b506102777398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0281565b3480156104a1575f80fd5b5061024e6104b03660046120a1565b610eb6565b3480156104c0575f80fd5b5061024e6104cf3660046121e6565b610f09565b3480156104df575f80fd5b50610277733e79130ab714e97ee73f86a56a2427bb1a51989681565b348015610506575f80fd5b5061024e6105153660046121fd565b611118565b348015610525575f80fd5b5061024e610534366004612077565b611160565b348015610544575f80fd5b5061027773165c3410fc91ef562c50559f7d2289febed552d981565b34801561056b575f80fd5b5061024e61057a366004612042565b61145b565b34801561058a575f80fd5b5061024e6105993660046120a1565b61167f565b3480156105a9575f80fd5b5061024e6105b83660046120a1565b6116d2565b3480156105c8575f80fd5b5061024e6105d7366004611ff8565b611725565b3480156105e7575f80fd5b5061024e6105f63660046120a1565b61177d565b348015610606575f80fd5b5061027773faac6a85c3e123ab2cf7669b1024f146cfef0b3881565b34801561062d575f80fd5b5061024e61063c366004612220565b6117d0565b34801561064c575f80fd5b5061024e61065b36600461224c565b611b9c565b34801561066b575f80fd5b506102ea61067a366004611ff8565b60056020525f908152604090205460ff1681565b348015610699575f80fd5b5061024e6106a8366004611ff8565b611ce3565b3480156106b8575f80fd5b506102ea6106c73660046121e6565b60046020525f908152604090205460ff1681565b3480156106e6575f80fd5b5061024e611d2a565b3480156106fa575f80fd5b5061041060075481565b34801561070f575f80fd5b5061024e61071e3660046121e6565b611dd5565b34801561072e575f80fd5b5061024e61073d366004611ff8565b611e03565b34801561074d575f80fd5b506102ea61075c366004611ff8565b60036020525f908152604090205460ff1681565b34801561077b575f80fd5b5061024e61078a366004611ff8565b611e4d565b34801561079a575f80fd5b50610277737f51ac3df6a034273fb09bb29e383fcf655e473c81565b6107be610869565b6001600160a01b0316336001600160a01b031614806107e657505f546001600160a01b031633145b6108275760405162461bcd60e51b815260206004820152600d60248201526c676f7665726e6f72206f6e6c7960981b60448201526064015b60405180910390fd5b5f610830610e72565b6040519091506001600160a01b038216904780156108fc02915f818181858888f19350505050158015610865573d5f803e3d5ffd5b5050565b5f733e79130ab714e97ee73f86a56a2427bb1a5198966001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108de919061226c565b905090565b5f546001600160a01b0316331461090c5760405162461bcd60e51b815260040161081e90612287565b5f8054911515600160a01b0260ff60a01b19909216919091179055565b5f54600160a01b900460ff16610962575f546001600160a01b031633146109625760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03821673faac6a85c3e123ab2cf7669b1024f146cfef0b38148015906109ac57506001600160a01b03821673a1077a294dde1b09bb078844df40758a5d0f9a2714155b80156109d557506001600160a01b038216733e79130ab714e97ee73f86a56a2427bb1a51989614155b610a215760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420616c6c6f77656420666f7220746865736520746f6b656e7300000000604482015260640161081e565b5f610a2d42600f6122d2565b6001600160a01b0384165f908152600560205260408120549192509060ff1615610a6c57507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02610a83565b5073165c3410fc91ef562c50559f7d2289febed552d95b806001600160a01b03166338ed17398685610a9d88611e94565b30876040518663ffffffff1660e01b8152600401610abf959493929190612327565b5f604051808303815f875af1158015610ada573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b019190810190612362565b505050505050565b610b11610869565b6001600160a01b0316336001600160a01b03161480610b3957505f546001600160a01b031633145b610b555760405162461bcd60e51b815260040161081e906123ee565b816001600160a01b031663a9059cbb610b6c610e72565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610bb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bda9190612430565b505050565b5f546001600160a01b03163314610c085760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03919091165f908152600160205260409020805460ff1916911515919091179055565b5f8060055f845f81518110610c4957610c4961244b565b6020908102919091018101516001600160a01b031682528101919091526040015f205460ff1615610c8f57507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02610ca6565b5073165c3410fc91ef562c50559f7d2289febed552d95b60405163d06ca61f60e01b81525f906001600160a01b0383169063d06ca61f90610cd6908890889060040161245f565b5f60405180830381865afa158015610cf0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d179190810190612362565b90505f8160018351610d29919061247f565b81518110610d3957610d3961244b565b602002602001015190508093505050505b92915050565b610d58610869565b6001600160a01b0316336001600160a01b031614610d885760405162461bcd60e51b815260040161081e906123ee565b806001600160a01b031663a9059cbb610d9f610e72565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610de1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e059190612492565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b6020604051808303815f875af1158015610e4e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108659190612430565b5f610e7b610869565b6001600160a01b0316634626402b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ba573d5f803e3d5ffd5b5f546001600160a01b03163314610edf5760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b5f54600160a01b900460ff16610f42575f546001600160a01b03163314610f425760405162461bcd60e51b815260040161081e90612287565b5f610f4e42600f6122d2565b90505f73165c3410fc91ef562c50559f7d2289febed552d963d06ca61f84610f74611f31565b6040518363ffffffff1660e01b8152600401610f9192919061245f565b5f60405180830381865afa158015610fab573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fd29190810190612362565b90505f60646007548360018551610fe9919061247f565b81518110610ff957610ff961244b565b602002602001015161100b91906124a9565b61101591906124c0565b90505f73165c3410fc91ef562c50559f7d2289febed552d96338ed1739868461103c611f31565b611044610e72565b896040518663ffffffff1660e01b8152600401611065959493929190612327565b5f604051808303815f875af1158015611080573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110a79190810190612362565b90507f61d7807933e181594731ff5dfca72dfaabdcaf3e72951decc38ff78fcbba88ad8582600184516110da919061247f565b815181106110ea576110ea61244b565b6020026020010151604051611109929190918252602082015260400190565b60405180910390a15050505050565b5f546001600160a01b031633146111415760405162461bcd60e51b815260040161081e90612287565b5f91825260046020526040909120805460ff1916911515919091179055565b5f54600160a01b900460ff16611199575f546001600160a01b031633146111995760405162461bcd60e51b815260040161081e90612287565b6001600160a01b0382165f9081526003602052604090205460ff166111f75760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b881a5cc81b9bdd08195b98589b195960621b604482015260640161081e565b5f8181526004602052604090205460ff166112545760405162461bcd60e51b815260206004820152601860248201527f7068757820706f6f6c206973206e6f7420656e61626c65640000000000000000604482015260640161081e565b5f61126042600f6122d2565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156112a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cb9190612492565b60405163095ea7b360e01b8152737f51ac3df6a034273fb09bb29e383fcf655e473c6004820152602481018290529091506001600160a01b0385169063095ea7b3906044016020604051808303815f875af115801561132c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113509190612430565b506040805160c0810182528481525f60208083018290526001600160a01b0388168385015273a1077a294dde1b09bb078844df40758a5d0f9a276060808501919091526080808501879052855180870187526002815261060f60f31b8185015260a0860152855190810186523080825292810184905280860192909252810182905292516352bbbe2960e01b8152919291737f51ac3df6a034273fb09bb29e383fcf655e473c906352bbbe2990611411908690869086908b90600401612522565b6020604051808303815f875af115801561142d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114519190612492565b5050505050505050565b5f54600160a01b900460ff16611494575f546001600160a01b031633146114945760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03821673faac6a85c3e123ab2cf7669b1024f146cfef0b38148015906114de57506001600160a01b03821673a1077a294dde1b09bb078844df40758a5d0f9a2714155b801561150757506001600160a01b038216733e79130ab714e97ee73f86a56a2427bb1a51989614155b6115535760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420616c6c6f77656420666f7220746865736520746f6b656e7300000000604482015260640161081e565b6001600160a01b0382165f9081526006602052604090205460ff166115ad5760405162461bcd60e51b815260206004820152601060248201526f6f6e6c792066656520746f6b656e732160801b604482015260640161081e565b5f6115b942600f6122d2565b6001600160a01b0384165f908152600560205260408120549192509060ff16156115f857507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0261160f565b5073165c3410fc91ef562c50559f7d2289febed552d95b806001600160a01b0316635c11d795868561162988611e94565b30876040518663ffffffff1660e01b815260040161164b959493929190612327565b5f604051808303815f87803b158015611662575f80fd5b505af1158015611674573d5f803e3d5ffd5b505050505050505050565b5f546001600160a01b031633146116a85760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03919091165f908152600360205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146116fb5760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b61172d610869565b6001600160a01b0316336001600160a01b031614610d885760405162461bcd60e51b815260206004820152600d60248201526c676f7665726e6f72206f6e6c7960981b604482015260640161081e565b5f546001600160a01b031633146117a65760405162461bcd60e51b815260040161081e90612287565b6001600160a01b03919091165f908152600260205260409020805460ff1916911515919091179055565b5f54600160a01b900460ff16611809575f546001600160a01b031633146118095760405162461bcd60e51b815260040161081e90612287565b6001600160a01b0382165f9081526001602052604090205460ff1661187e5760405162461bcd60e51b815260206004820152602560248201527f7375626d69747465642065786f74696320746f6b656e206973206e6f7420656e60448201526418589b195960da1b606482015260840161081e565b6001600160a01b0381165f9081526002602052604090205460ff166118f85760405162461bcd60e51b815260206004820152602a60248201527f7375626d69747465642065786f74696320746f6b656e2070617468206973206e6044820152691bdd08195b98589b195960b21b606482015260840161081e565b5f61190442600f6122d2565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038516906370a0823190602401602060405180830381865afa15801561194b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196f9190612492565b604080516003808252608082019092529192505f91906020820160608036833701905050905084815f815181106119a8576119a861244b565b60200260200101906001600160a01b031690816001600160a01b03168152505083816001815181106119dc576119dc61244b565b60200260200101906001600160a01b031690816001600160a01b03168152505073a1077a294dde1b09bb078844df40758a5d0f9a2781600281518110611a2457611a2461244b565b6001600160a01b039283166020918202929092018101919091529086165f9081526005909152604081205460ff1615611a7257507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02611a89565b5073165c3410fc91ef562c50559f7d2289febed552d95b60405163d06ca61f60e01b81525f906001600160a01b0383169063d06ca61f90611ab9908790879060040161245f565b5f60405180830381865afa158015611ad3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611afa9190810190612362565b90505f8160018351611b0c919061247f565b81518110611b1c57611b1c61244b565b60200260200101519050826001600160a01b03166338ed1739868387308b6040518663ffffffff1660e01b8152600401611b5a959493929190612327565b5f604051808303815f875af1158015611b75573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116749190810190612362565b5f54600160a01b900460ff16611bd5575f546001600160a01b03163314611bd55760405162461bcd60e51b815260040161081e90612287565b5f611be142600f6122d2565b90505f73165c3410fc91ef562c50559f7d2289febed552d96338ed17398585611c08611f31565b611c10610e72565b876040518663ffffffff1660e01b8152600401611c31959493929190612327565b5f604051808303815f875af1158015611c4c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c739190810190612362565b90507f61d7807933e181594731ff5dfca72dfaabdcaf3e72951decc38ff78fcbba88ad848260018451611ca6919061247f565b81518110611cb657611cb661244b565b6020026020010151604051611cd5929190918252602082015260400190565b60405180910390a150505050565b60405163095ea7b360e01b815273165c3410fc91ef562c50559f7d2289febed552d960048201525f1960248201526001600160a01b0382169063095ea7b390604401610e32565b4780611d695760405162461bcd60e51b815260206004820152600e60248201526d4e6f20504c532062616c616e636560901b604482015260640161081e565b5f73a1077a294dde1b09bb078844df40758a5d0f9a279050806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015611dba575f80fd5b505af1158015611dcc573d5f803e3d5ffd5b50505050505050565b5f546001600160a01b03163314611dfe5760405162461bcd60e51b815260040161081e90612287565b600755565b5f546001600160a01b03163314611e2c5760405162461bcd60e51b815260040161081e90612287565b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b60405163095ea7b360e01b81527398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0260048201525f1960248201526001600160a01b0382169063095ea7b390604401610e32565b60408051600280825260608083018452925f92919060208301908036833701905050905082815f81518110611ecb57611ecb61244b565b60200260200101906001600160a01b031690816001600160a01b03168152505073a1077a294dde1b09bb078844df40758a5d0f9a2781600181518110611f1357611f1361244b565b6001600160a01b039092166020928302919091019091015292915050565b60408051600280825260608083018452925f92919060208301908036833701905050905073a1077a294dde1b09bb078844df40758a5d0f9a27815f81518110611f7c57611f7c61244b565b60200260200101906001600160a01b031690816001600160a01b03168152505073faac6a85c3e123ab2cf7669b1024f146cfef0b3881600181518110611fc457611fc461244b565b6001600160a01b0390921660209283029190910190910152919050565b6001600160a01b0381168114611ff5575f80fd5b50565b5f60208284031215612008575f80fd5b813561201381611fe1565b9392505050565b8015158114611ff5575f80fd5b5f60208284031215612037575f80fd5b81356120138161201a565b5f805f60608486031215612054575f80fd5b83359250602084013561206681611fe1565b929592945050506040919091013590565b5f8060408385031215612088575f80fd5b823561209381611fe1565b946020939093013593505050565b5f80604083850312156120b2575f80fd5b82356120bd81611fe1565b915060208301356120cd8161201a565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612115576121156120d8565b604052919050565b5f67ffffffffffffffff821115612136576121366120d8565b5060051b60200190565b5f8060408385031215612151575f80fd5b8235915060208084013567ffffffffffffffff81111561216f575f80fd5b8401601f8101861361217f575f80fd5b803561219261218d8261211d565b6120ec565b81815260059190911b820183019083810190888311156121b0575f80fd5b928401925b828410156121d75783356121c881611fe1565b825292840192908401906121b5565b80955050505050509250929050565b5f602082840312156121f6575f80fd5b5035919050565b5f806040838503121561220e575f80fd5b8235915060208301356120cd8161201a565b5f8060408385031215612231575f80fd5b823561223c81611fe1565b915060208301356120cd81611fe1565b5f806040838503121561225d575f80fd5b50508035926020909101359150565b5f6020828403121561227c575f80fd5b815161201381611fe1565b60208082526017908201527f617574686f72697a65642061646472657373206f6e6c79000000000000000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610d4a57610d4a6122be565b5f8151808452602080850194508084015f5b8381101561231c5781516001600160a01b0316875295820195908201906001016122f7565b509495945050505050565b85815284602082015260a060408201525f61234560a08301866122e5565b6001600160a01b0394909416606083015250608001529392505050565b5f6020808385031215612373575f80fd5b825167ffffffffffffffff811115612389575f80fd5b8301601f81018513612399575f80fd5b80516123a761218d8261211d565b81815260059190911b820183019083810190878311156123c5575f80fd5b928401925b828410156123e3578351825292840192908401906123ca565b979650505050505050565b60208082526022908201527f6f6e6c79207468727520646563656e7472616c697a656420476f7665726e616e604082015261636560f01b606082015260800190565b5f60208284031215612440575f80fd5b81516120138161201a565b634e487b7160e01b5f52603260045260245ffd5b828152604060208201525f61247760408301846122e5565b949350505050565b81810381811115610d4a57610d4a6122be565b5f602082840312156124a2575f80fd5b5051919050565b8082028115828204841417610d4a57610d4a6122be565b5f826124da57634e487b7160e01b5f52601260045260245ffd5b500490565b5f81518084525f5b81811015612503576020818501810151868301820152016124e7565b505f602082860101526020601f19601f83011685010191505092915050565b60e08152845160e08201525f60208601516002811061254f57634e487b7160e01b5f52602160045260245ffd5b61010083015260408601516001600160a01b031661012083015260608601516125846101408401826001600160a01b03169052565b50608086015161016083015260a086015160c06101808401526125ab6101a08401826124df565b9150506125eb602083018680516001600160a01b039081168352602080830151151590840152604080830151909116908301526060908101511515910152565b60a082019390935260c001529291505056fea2646970667358221220a3c7bea6e9bc9918112f55bb25402174963520386027b5cd525f3c8a4a4ba6db64736f6c63430008140033