Abstract Testnet

Contract

0x080040A7654aab775CEA9757d0b8A1dADfB61cb0

Overview

ETH Balance

0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To

There are no matching entries

2 Internal Transactions found.

Latest 2 internal transactions

Parent Transaction Hash Block From To
56306762025-02-02 12:04:218 days ago1738497861
0x080040A7...ADfB61cb0
0 ETH
56306762025-02-02 12:04:218 days ago1738497861  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PRESALEZKSYNC

Compiler Version
v0.8.20+commit.a1b79de6

ZkSolc Version
v1.5.11

Optimization Enabled:
Yes with Mode 3

Other Settings:
paris EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 18 : presaleZksync.sol
//SPDX-License-Identifier: Prima Nocta
pragma solidity ^0.8.20;

import "./interfaces/IThresholdERC1155.sol";
import "./interfaces/INftVault.sol";
import "./interfaces/IAggregatorV3.sol";
import "./interfaces/IUniswapV3PoolState.sol";
import "./interfaces/IMagicSwapV2Router.sol";
import "./interfaces/INftVaultFactory.sol";
import "./interfaces/IMagicSwapUniswapV2Factory.sol";
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/proxy/Clones.sol";

// pyth price oracle aggregator for abstract chain
import { IPyth } from "@pythnetwork/pyth-sdk-solidity/IPyth.sol";
import { PythAggregatorV3 } from "@pythnetwork/pyth-sdk-solidity/PythAggregatorV3.sol";

contract PRESALEZKSYNC {

    struct AltPairInfo {
        address lpaddress;
        address vaultaddress;   
        bool approved;
        uint256 tokenid;
        string symbol;
    }

    struct PresaleInfo {
        bool readyToGraduate;           
        bool graduated;  
        uint256 targetBaseTokenToRaise;    
        uint256 presalePrice;          
        uint256 returnForOne;
        uint256 baseTokenRaised;           
        uint256 totalsupply;               
        address paircoin;
        uint256 amounttolp;
        uint256 amounttosell;
        IThresholdERC1155 memecoin;
    }

    IERC20 public baseToken;  
    address public owner;
    address public stakingRewards;

    uint256 public constant MAX_TOTAL_SUPPLY = 1_000_000_000_000; // 1 trillion
    uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000_000;     // 1 billion
    uint256 public TARGETMCAP = 42000;
    uint256[] IDALWAYSZERO;

    mapping(address => PresaleInfo) public presaleInfo;
    mapping(address => AltPairInfo) public approvedpaircoins;
    
    INftVaultFactory factory; 
    IMagicSwapV2Router router; 
    IMagicSwapUniswapV2Factory msUniFactory;

    IThresholdERC1155 memecoinImplementation;

    address public pythPriceFeedsContract = 0x47F2A9BDAd52d65b66287253cf5ca0D2b763b486;
    bytes32 public ethFeedId;

    event MemeMade(string name, string symbol, string uri, uint256 amount, PresaleInfo presaleinfo);
    event Buy(address indexed memeCoinAddress, address indexed buyer, uint256 amountNFT, uint256 amountBaseToken);
    event Sell(address indexed memeCoinAddress, address indexed seller, uint256 amountNFT, uint256 amountBaseToken);
    event GraduationReady(address indexed memeCoinAddress, PresaleInfo presaleinfo);
    event Graduation(address indexed lpaddress, PresaleInfo presaleinfo);
    event PairCoinApproved(address indexed _collectionAddress, AltPairInfo alt);
    event PairCoinRemoved(address indexed _collectionAddress);

    constructor(
        IERC20 _baseToken, 
        address _stakingRewards, 
        
        INftVaultFactory _factory, 
        IMagicSwapV2Router _router, 
        IMagicSwapUniswapV2Factory _msufactory, 
        IThresholdERC1155 _memecoinImplementation,
        address _pythPriceFeed,
        bytes32 _ethFeedId
    ) {
        owner = msg.sender;
        baseToken = _baseToken;
        IDALWAYSZERO.push(0);
        stakingRewards = _stakingRewards;
        factory = _factory;
        router = _router;
        msUniFactory = _msufactory;
        memecoinImplementation = _memecoinImplementation;
        pythPriceFeedsContract = _pythPriceFeed;
        ethFeedId = _ethFeedId;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, 'not owner');
        _;
    }

    function startPresale(
        string memory _name, 
        string memory _symbol, 
        uint256 _totalsupply, 
        string memory _uri, 
        uint256[] memory _thresholds, 
        bytes[] calldata priceUpdateData
    ) external returns (address) {
        require(_totalsupply >= MIN_TOTAL_SUPPLY, "Total supply too low - min 10 million");
        require(_totalsupply <= MAX_TOTAL_SUPPLY, "Total supply too high - max 1 trillion");

        IThresholdERC1155 memecoin = IThresholdERC1155(Clones.clone(address(memecoinImplementation)));
        memecoin.initialize(msg.sender, stakingRewards, _totalsupply, _name, _symbol, _uri, _thresholds);

        (
            uint amountmemecointolp, 
            uint amountmemecointosell, 
            uint baseTokenNeededToFill
        ) = _calculateAmounts(_totalsupply, address(0), priceUpdateData);
        uint adjustment = baseTokenNeededToFill % amountmemecointosell;

        PresaleInfo memory info;
        info.amounttolp = amountmemecointolp;
        info.amounttosell = amountmemecointosell;
        info.totalsupply = _totalsupply;
        info.memecoin = memecoin;
        info.targetBaseTokenToRaise = baseTokenNeededToFill - adjustment;
        info.presalePrice = info.targetBaseTokenToRaise / amountmemecointosell; 
        info.returnForOne = 0;
        info.paircoin = address(baseToken);
        presaleInfo[address(memecoin)] = info;

        emit MemeMade(_name, _symbol, _uri, _totalsupply, info);
        return address(memecoin);
    }  

    function startPresale1155(string memory _name, string memory _symbol, string memory _uri, address _paircoin1155, uint256[] memory _thresholds, bytes[] calldata priceUpdateData) external returns (address) {
        uint256 _totalsupply = 1000000000;
        AltPairInfo memory alt = approvedpaircoins[_paircoin1155];
        require(alt.approved, "not approved");
        IThresholdERC1155 memecoin = IThresholdERC1155(Clones.clone(address(memecoinImplementation)));
        memecoin.initialize(msg.sender, stakingRewards, _totalsupply, _name, _symbol, _uri, _thresholds);
        
        (uint amountmemecointolp, uint amountmemecointosell, uint paircoinneededtofill) = _calculateAmounts(_totalsupply, _paircoin1155, priceUpdateData);
        paircoinneededtofill = paircoinneededtofill / 1e18; 

        PresaleInfo memory info;
        info.amounttolp = amountmemecointolp;
        info.amounttosell = amountmemecointosell;
        info.graduated = false;
        info.totalsupply = _totalsupply;
        info.memecoin = memecoin; 
        info.paircoin = _paircoin1155;
        
        if (paircoinneededtofill > _totalsupply) {            
            // this tweaks the targetBaseTokenToRaise so it is evenly divisable by the presalePrice
            info.presalePrice = paircoinneededtofill / amountmemecointosell;
            info.returnForOne = 0;
            uint adjustment = paircoinneededtofill % amountmemecointosell;
            info.targetBaseTokenToRaise = paircoinneededtofill - adjustment;
        } else {
            info.returnForOne = amountmemecointosell / paircoinneededtofill;  
            info.presalePrice = 0; 
            uint adjustment = amountmemecointosell % paircoinneededtofill;
            info.targetBaseTokenToRaise = paircoinneededtofill - adjustment;
        }

        presaleInfo[address(memecoin)] = info;

        emit MemeMade(_name, _symbol, _uri, _totalsupply, info);
        return address(memecoin);
    }


    function buyPresale(address _memeCoinAddress, uint256 _amountNftToBuy) external {
        PresaleInfo memory info = presaleInfo[_memeCoinAddress];     
        require(!info.readyToGraduate, "already ready to graduate");
        
        (uint totalamountbaseToken, uint tax) = getQuote(_memeCoinAddress, _amountNftToBuy);

        // Check if purchase would exceed target and adjust if needed
        if (info.baseTokenRaised + totalamountbaseToken > info.targetBaseTokenToRaise) {
            totalamountbaseToken = info.targetBaseTokenToRaise - info.baseTokenRaised;
            _amountNftToBuy = totalamountbaseToken / info.presalePrice;
        }
        
        if (info.paircoin == address(baseToken)) {
            bool chaching = IERC20(info.paircoin).transferFrom(msg.sender, address(this), totalamountbaseToken + tax);
            bool taxed = IERC20(info.paircoin).transfer(stakingRewards, tax);
            require(chaching && taxed, "buy failed");
            
            presaleInfo[_memeCoinAddress].baseTokenRaised = info.baseTokenRaised + totalamountbaseToken;        
            info.memecoin.safeTransferFrom(address(this), msg.sender, 0, _amountNftToBuy, "");
        } else {
            IERC1155(info.paircoin).safeTransferFrom(msg.sender, address(this), 0, totalamountbaseToken, "");
            presaleInfo[_memeCoinAddress].baseTokenRaised = info.baseTokenRaised + totalamountbaseToken;        
            info.memecoin.safeTransferFrom(address(this), msg.sender, 0, _amountNftToBuy, "");
        }

        // Mark as ready to graduate if target is met
        if (info.baseTokenRaised + totalamountbaseToken >= info.targetBaseTokenToRaise) {
            _graduate(_memeCoinAddress);
        }

        emit Buy(_memeCoinAddress, msg.sender, _amountNftToBuy, totalamountbaseToken);
    }

    function sellPresale(address _memeCoinAddress, uint256 _sellAmountNFT) external {
        PresaleInfo memory info = presaleInfo[_memeCoinAddress];        
        require(!info.readyToGraduate, "already graduated");
        (uint baseTokenToReturn, uint tax) = getQuote(_memeCoinAddress, _sellAmountNFT);
        require(baseTokenToReturn <= info.baseTokenRaised, "plunge protection");

        if (info.paircoin == address(baseToken)) {
            bool sendtouser = IERC20(info.paircoin).transfer(msg.sender, baseTokenToReturn - tax);
            bool taxed = IERC20(info.paircoin).transfer(stakingRewards, tax);
            require(sendtouser && taxed, "sell failed");
            presaleInfo[_memeCoinAddress].baseTokenRaised = info.baseTokenRaised - baseTokenToReturn;       

            info.memecoin.safeTransferFrom(msg.sender, address(this), 0, _sellAmountNFT, "");
        } else {
            info.memecoin.safeTransferFrom(msg.sender, address(this), 0, _sellAmountNFT, "");
            presaleInfo[_memeCoinAddress].baseTokenRaised = info.baseTokenRaised - baseTokenToReturn;       

            IERC1155(info.paircoin).safeTransferFrom(address(this), msg.sender, 0, baseTokenToReturn, "");   
        } 
        emit Sell(_memeCoinAddress, msg.sender, _sellAmountNFT, baseTokenToReturn);
    }

    function _graduateBaseTokenPool(PresaleInfo memory info, INftVault vaultMemeCoin, IMagicSwapV2Router.NftVaultLiquidityData memory vaultdataMemeCoin) internal returns (address lpaddy) {
            IERC20(info.paircoin).approve(address(router), info.baseTokenRaised); 
            (uint256 amountA, uint256 amountB, uint256 lpAmount) = router.addLiquidityNFT(
                vaultdataMemeCoin, 
                address(info.paircoin), 
                info.baseTokenRaised, 
                info.baseTokenRaised, 
                address(0),
                block.timestamp
            );
            require(lpAmount > 0, "something bad happened");
            lpaddy = msUniFactory.getPair(info.paircoin, address(vaultMemeCoin));
    }

    function _graduate1155Pool(PresaleInfo memory info, INftVault vaultMemeCoin, IMagicSwapV2Router.NftVaultLiquidityData memory vaultdataMemeCoin) internal returns (address lpaddy) {
            IERC1155(info.paircoin).setApprovalForAll(address(router), true);
            AltPairInfo memory alt = approvedpaircoins[info.paircoin];
            INftVault vaultPaircoin = INftVault(alt.vaultaddress);

            address[] memory collection = new address[](1);
            uint256[] memory amount = new uint256[](1);

            collection[0] = info.paircoin; // cd.addr;
            amount[0] = info.baseTokenRaised;
            IMagicSwapV2Router.NftVaultLiquidityData memory vaultdataPairCoin = IMagicSwapV2Router.NftVaultLiquidityData(
                vaultPaircoin,
                collection,
                IDALWAYSZERO,
                amount
            );
            
            (uint256 amountA, uint256 amountB,) = router.addLiquidityNFTNFT(
                vaultdataMemeCoin,      // shitcoin
                vaultdataPairCoin,      // pair coin
                info.memecoin.balanceOf(address(this), 0),
                info.baseTokenRaised,
                address(0),
                block.timestamp
            );

            lpaddy = msUniFactory.getPair(address(vaultPaircoin), address(vaultMemeCoin));
    }

    function _graduate(address _memeCoinAddress) internal {
        PresaleInfo storage info = presaleInfo[_memeCoinAddress];
        require(!info.readyToGraduate, "already ready to graduate");
        require(info.baseTokenRaised >= info.targetBaseTokenToRaise, "target not met");
        
        // Mark the presale as ready to graduate
        info.readyToGraduate = true;

        emit GraduationReady(_memeCoinAddress, info);
    }

    function graduatePresale(address _memeCoinAddress) external returns (address lpaddy) {
        require(
            presaleInfo[_memeCoinAddress].readyToGraduate && 
            !presaleInfo[_memeCoinAddress].graduated, 
            "not ready to graduate or already graduated"
        );
        
        PresaleInfo memory info = presaleInfo[_memeCoinAddress];
        presaleInfo[_memeCoinAddress].graduated = true;

        info.memecoin.setTradingOpen(true);

        (INftVault vaultMemeCoin, IMagicSwapV2Router.NftVaultLiquidityData memory vaultdataMemeCoin) = 
            _createMemeCoinVault(_memeCoinAddress);
      
        info.memecoin.setApprovalForAll(address(router), true);

        if (info.paircoin == address(baseToken)) {
            lpaddy = _graduateBaseTokenPool(info, vaultMemeCoin, vaultdataMemeCoin);
        } else {
            lpaddy = _graduate1155Pool(info, vaultMemeCoin, vaultdataMemeCoin);            
        }
        
        require(lpaddy != address(0), "lp failed");
        
        emit Graduation(lpaddy, presaleInfo[_memeCoinAddress]); 
    }


    function _createMemeCoinVault(address _memeCoinAddress) internal returns (INftVault, IMagicSwapV2Router.NftVaultLiquidityData memory) {
        // creates a magicswap vault for the presaled 1155
        address[] memory collection = new address[](1);
        uint256[] memory amount = new uint256[](1);
        INftVault.CollectionData[] memory vaultCD = new INftVault.CollectionData[](1);
        INftVault.CollectionData memory vaultCDData = INftVault.CollectionData(address(_memeCoinAddress), INftVault.NftType.ERC1155, false, IDALWAYSZERO);

        vaultCD[0] = vaultCDData;
        collection[0] = _memeCoinAddress;                     
        amount[0] = presaleInfo[_memeCoinAddress].memecoin.balanceOf(address(this), 0);
        
        bool exists = factory.exists(vaultCD);
        INftVault vault;
        if (exists) {
            vault = factory.getVault(vaultCD);
        } else {
            vault = factory.createVault(vaultCD);        
        }

        IMagicSwapV2Router.NftVaultLiquidityData memory vaultdata = IMagicSwapV2Router.NftVaultLiquidityData(
            vault, 
            collection, 
            IDALWAYSZERO, 
            amount
        );


        return (vault, vaultdata); 
    }  

    function getQuote(address _memeCoinAddress, uint256 _amountOfNftToBuy) public view returns(uint totalbaseToken, uint tax ){
        PresaleInfo memory info = presaleInfo[_memeCoinAddress];
        if (info.presalePrice > 0) {    
            totalbaseToken = info.presalePrice * _amountOfNftToBuy; 
            tax = totalbaseToken / 200; // 0.5%
        } else {
            require(_amountOfNftToBuy % info.returnForOne == 0, "wrong multiple");            
            totalbaseToken = _amountOfNftToBuy / info.returnForOne; 
            require(totalbaseToken > 0, 'xxxxx');
            tax = 0;
        }
    }

    function getBaseTokenPriceUSD(bytes[] calldata priceUpdateData) public payable returns (uint baseTokenPrice) {
        // Get the latest BASE_TOKEN/USD price from the Pyth ETH/USD oracle
        PythAggregatorV3 ethAggregator = new PythAggregatorV3(
            pythPriceFeedsContract,
            ethFeedId
        );

        //update price data using gas fees if the data is stale
        IPyth pyth = IPyth(pythPriceFeedsContract);
        uint value = pyth.getUpdateFee(priceUpdateData);
        pyth.updatePriceFeeds{ value: value }(priceUpdateData);

        (, int256 answer, , , ) = ethAggregator.latestRoundData();

        // Convert from answers's 8 decimals to 6 decimals
        baseTokenPrice = uint256(answer) / 100;
    }

    function _calculateAmounts(uint256 _totalsupply, address _paircoin1155, bytes[] calldata priceUpdateData) internal returns (uint256, uint256, uint256) {
        require(_totalsupply >= MIN_TOTAL_SUPPLY, "Min 1B");
        require(_totalsupply <= MAX_TOTAL_SUPPLY, "Max 1T");
        require(_totalsupply % 1000 == 0, "Must be divisible by 1000");

        // Calculate initial amount after staking rewards (10%)
        uint256 amount = (_totalsupply * 90) / 100;
        
        // Calculate amounts for LP and presale (50/50 split)
        uint256 amountmemecointolp = amount / 2;
        uint256 amountmemecointosell = amount / 2;
        
        uint256 baseTokenNeededToFill;
        if (_paircoin1155 == address(0)) {
            baseTokenNeededToFill = calculateBaseTokenNeededForTargetMarketCap(
                TARGETMCAP * 1e6, // $42k total target
                amountmemecointolp,
                getBaseTokenPriceUSD(priceUpdateData),
                18
            );
        } else {
            baseTokenNeededToFill = calculateBaseTokenNeededForTargetMarketCap(
                TARGETMCAP * 1e6,
                amountmemecointolp,
                getAltPairCoinPriceUSD(_paircoin1155, priceUpdateData),
                18 // Assuming the ERC1155 are using 18 decimals
            );
        }
        
        require(baseTokenNeededToFill > 0, "bad amounts");
        return (amountmemecointolp, amountmemecointosell, baseTokenNeededToFill);
    }

    function getAltPairCoinPriceUSD(address _altcoin, bytes[] calldata priceUpdateData) public returns(uint256) {
        AltPairInfo memory alt = approvedpaircoins[_altcoin];
        require(alt.approved, "Pair not approved");
        
        uint256 baseTokenBal = baseToken.balanceOf(alt.lpaddress);
        uint256 altPairBal = IERC20(alt.vaultaddress).balanceOf(alt.lpaddress);
        require(altPairBal > 0, "No liquidity");
        
        uint256 altPairValInBaseToken = (baseTokenBal * 1e18) / altPairBal;
        uint256 baseTokenPriceUSD = getBaseTokenPriceUSD(priceUpdateData);
        
        return (altPairValInBaseToken * baseTokenPriceUSD) / 1e18;
    }

    function addAltPair(address _ca, AltPairInfo memory _alp) external onlyOwner {
        require(_ca != address(0), "Zero address not allowed");
        require(_alp.lpaddress != address(0), "Invalid LP address");
        require(_alp.vaultaddress != address(0), "Invalid vault address");
        require(_alp.approved, "Pair must be approved");
        approvedpaircoins[_ca] = _alp;
        emit PairCoinApproved(_ca, _alp);
    }

    function removePairCoin(address _ca) external onlyOwner {
        require(approvedpaircoins[_ca].approved, "Pair not found");
        delete approvedpaircoins[_ca];
        emit PairCoinRemoved(_ca);
    }

    function changeTargetMcap(uint256 _mcapindollars) external onlyOwner {
        require(_mcapindollars > 0, "mcap must be greater than 0");
        TARGETMCAP = _mcapindollars;
    }

    
    function changeOwner(address _newowner) external onlyOwner {
        require(_newowner != address(0), "new owner is the zero address");
        owner = _newowner;
    }   

    function calculateBaseTokenNeededForTargetMarketCap(
        uint256 targetMcapUSD,  // $42k in 6 decimals
        uint256 lpTokenAmount,
        uint256 pairPriceUSD,   // Price in 6 decimals
        uint256 pairDecimals
    ) internal pure returns (uint256) {
        require(pairPriceUSD > 0, "Invalid price");
        
        // We want half the target for each side (presale/LP)
        uint256 valuePerSideUSD = targetMcapUSD / 2;  // $21k in 6 decimals
        
        // Calculate pair tokens needed for one side
        uint256 pairTokensForOneSide = (valuePerSideUSD * (10 ** pairDecimals)) / pairPriceUSD;
        
        // Double it (same amount needed for both presale and LP)
        return pairTokensForOneSide * 2;
    }

    function ceil(uint a, uint m) internal pure returns (uint r) {
        return (a + m - 1) / m * m;
    }

    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return this.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) external virtual returns (bytes4) {
        return this.onERC1155BatchReceived.selector;
    }
}

File 2 of 18 : IThresholdERC1155.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.12;

interface IThresholdERC1155 {
    // Events
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 amount);
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] amounts);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    // ERC1155 core functions
    function setApprovalForAll(address operator, bool approved) external;
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function balanceOfBatch(address[] calldata owners, uint256[] calldata ids) external view returns (uint256[] memory);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function uri(uint256 id) external view returns (string memory);

    // Additional view functions
    function totalBalanceOf(address account) external view returns (uint256);
    function thresholds(uint256 index) external view returns (uint256);

    // Admin functions
    function initialize(address _creator, address _teamwallet, uint256 _totalSupply, string memory _name, string memory _symbol, string memory baseURI, uint256[] memory _thresholds) external;
    function setTradingOpen(bool _x) external;

    // State view functions
    function initialized() external view returns (bool);
    function creator() external view returns (address);
    function presalefactory() external view returns (address);
    function tradingEnabled() external view returns (bool);
}

File 3 of 18 : INftVault.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/// @title Vault contract for wrapping NFTs (ERC721/ERC1155) to ERC20
interface INftVault {
    enum NftType {
        ERC721,
        ERC1155
    }

    /// @notice Vault configuration struct that specifies which NFTs are accepted in vault.
    /// @param addr address of nft contract
    /// @param nftType standard that NFT supports { ERC721, ERC1155 }
    /// @param allowAllIds if true, all tokens are allowed in the vault. If false, tokenIds must be
    ///        listed one by one.
    /// @param tokenIds list of tokens supported by vault. If allowAllIds is true, list must be empty.
    struct CollectionData {
        address addr;
        NftType nftType;
        bool allowAllIds;
        uint256[] tokenIds;
    }

    /// @notice Struct for allowed tokens. Stores data in an optimized way to read it in vault.
    /// @param tokenIds mapping from tokenid to is-allowed
    /// @param tokenIdList list of all tokens that are allowed
    /// @param allowAllIds if true, all tokens are allowed
    struct AllowedTokenIds {
        mapping(uint256 => bool) tokenIds;
        uint256[] tokenIdList;
        bool allowAllIds;
    }

    /// @notice Emitted during initiation when collection added to allowed list
    /// @param collection collection details
    event CollectionAllowed(CollectionData collection);

    /// @notice Emitted on depositing NFT to vault
    /// @param to address that gets vault ERC20 tokens
    /// @param collection NFT address that is deposited
    /// @param tokenId token id that is deposited
    /// @param amount amount of token that is deposited, for ERC721 always 1
    event Deposit(address indexed to, address indexed collection, uint256 tokenId, uint256 amount);

    /// @notice Emitted on withdrawing NFT from vault
    /// @param to address that gets withdrawn NFTs
    /// @param collection NFT address that is withdrawn
    /// @param tokenId token id that is withdrawn
    /// @param amount amount of token that is withdrawn, for ERC721 always 1
    event Withdraw(address indexed to, address indexed collection, uint256 tokenId, uint256 amount);

    /// @dev Contract is already initialized
    error Initialized();
    /// @dev Collection data is empty
    error InvalidCollections();
    /// @dev Collection already added
    error DuplicateCollection();
    /// @dev Token id is listed twice in CollectionData.tokenIds array
    error TokenIdAlreadySet();
    /// @dev Token ids in CollectionData.tokenIds array are not sorted
    error TokenIdsMustBeSorted();
    /// @dev ERC165 suggests that NFT is supporting ERC721 but ERC1155 is claimed
    error ExpectedERC721();
    /// @dev ERC165 suggests that NFT is supporting ERC1155 but ERC721 is claimed
    error ExpectedERC1155();
    /// @dev Collection does not support all token IDs however list of IDs is empty.
    ///      CollectionData.tokenIds is empty and CollectionData.allowAllIds is false.
    error MissingTokenIds();
    /// @dev CollectionData.tokenIds is not empty however Collection supports all token IDs.
    error TokenIdsMustBeEmpty();
    /// @dev Token is not allowed in vault
    error DisallowedToken();
    /// @dev Token amount is invalid eg. amount == 0
    error WrongAmount();
    /// @dev Token amount is invalid for ERC721, amount != 1
    error WrongERC721Amount();
    /// @dev Trying to interact with token that does not support ERC721 nor ERC1155
    error UnsupportedNft();
    /// @dev Token is allowed in vault but must not be
    error MustBeDisallowedToken();

    /// @notice value of 1 token, including decimals
    function ONE() external view returns (uint256);

    /// @notice amount of token required for last NFT to be redeemed
    function LAST_NFT_AMOUNT() external view returns (uint256);

    /// @notice unique id of the vault generated using its configuration
    function VAULT_HASH() external view returns (bytes32);

    /// @notice Initialize Vault with collection config
    /// @dev Called by factory during deployment
    /// @param collections struct array of allowed collections and token IDs
    function init(CollectionData[] memory collections) external;

    /// @notice Returns hash of vault configuration
    /// @param collections struct array of allowed collections and token IDs
    /// @return configuration hash
    function hashVault(CollectionData[] memory collections) external pure returns (bytes32);

    /// @notice Returns balances of NFT deposited to the vault
    /// @param collectionAddr NFT address
    /// @param tokenId NFT's token ID
    /// @return amount amount of NFT deposited to the vault
    function balances(address collectionAddr, uint256 tokenId) external view returns (uint256 amount);

    /// @notice Get array of NFT addresses that are allowed to be deposited to the vault
    /// @dev Keep in mind that returned address(es) can be further restricted on token ID level
    /// @return collections array of NFT addresses that are allowed to be deposited to the vault
    function getAllowedCollections() external view returns (address[] memory collections);

    /// @return number of NFT addresses that are allowed to be deposited to the vault
    function getAllowedCollectionsLength() external view returns (uint256);

    /// @notice Get details of allowed collection
    /// @return struct with details of allowed collection
    function getAllowedCollectionData(address collectionAddr) external view returns (CollectionData memory);

    /// @notice Validates type of collection (ERC721 or ERC1155)
    /// @dev It uses ERC165 to check interface support. If support can not be detected without doubt, user input is trusted.
    /// @param collectionAddr NFT address
    /// @param nftType NFT type, ERC721 or ERC1155
    /// @return validatedNftType returns validated enum NftType as uint256
    function validateNftType(address collectionAddr, NftType nftType)
        external
        view
        returns (uint256 validatedNftType);

    /// @notice Returns if true token can be deposited
    /// @param collection NFT address
    /// @param tokenId NFT token ID
    /// @return true if allowed
    function isTokenAllowed(address collection, uint256 tokenId) external view returns (bool);

    /// @notice Returns balance of token sent to the vault
    /// @dev Reads balance of tokens freshy sent to the vault
    /// @param collection NFT address
    /// @param tokenId NFT token ID
    /// @return balance of sent token, for ERC721 it's always 1
    function getSentTokenBalance(address collection, uint256 tokenId) external view returns (uint256);

    /// @notice Deposit NFT to vault
    /// @dev This low-level function should be called from a contract which performs important safety checks
    /// @param to address that gets minted ERC20 token
    /// @param collection address of deposited NFT
    /// @param tokenId token ID of deposited NFT
    /// @param amount amount of deposited NFT, for ERC721 it's always 1
    /// @return amountMinted amount of minted ERC20 token
    function deposit(address to, address collection, uint256 tokenId, uint256 amount)
        external
        returns (uint256 amountMinted);

    /// @notice Deposit NFTs to vault
    /// @dev This low-level function should be called from a contract which performs important safety checks
    /// @param to address that gets minted ERC20 token
    /// @param collection array of addresses of deposited NFTs
    /// @param tokenId array of token IDs of deposited NFTs
    /// @param amount array if amounts of deposited NFTs, for ERC721 it's always 1
    /// @return amountMinted amount of minted ERC20 token
    function depositBatch(address to, address[] memory collection, uint256[] memory tokenId, uint256[] memory amount)
        external
        returns (uint256 amountMinted);

    /// @notice Withdraw NFT from vault
    /// @dev This low-level function should be called from a contract which performs important safety checks
    /// @param to address that gets NFT
    /// @param collection address of NFT to withdraw
    /// @param tokenId token ID of NFT to withdraw
    /// @param amount amount of NFT to withdraw, for ERC721 it's always 1
    /// @return amountBurned amount of burned ERC20
    function withdraw(address to, address collection, uint256 tokenId, uint256 amount)
        external
        returns (uint256 amountBurned);

    /// @notice Withdraw NFTs from vault
    /// @dev This low-level function should be called from a contract which performs important safety checks
    /// @param to address that gets NFT
    /// @param collection array of addresses of NFTs to withdraw
    /// @param tokenId array of token IDs of NFTs to withdraw
    /// @param amount array of amounts of NFTs to withdraw, for ERC721 it's always 1
    /// @return amountBurned amount of burned ERC20
    function withdrawBatch(address to, address[] memory collection, uint256[] memory tokenId, uint256[] memory amount)
        external
        returns (uint256 amountBurned);

    /// @notice Allow anyone to withdraw tokens sent to this vault by accident
    ///         Only unsupported NFTs can be skimmed.
    /// @param to address that gets NFT
    /// @param nftType NftType of skimmed NFT
    /// @param collection address of NFT to skim
    /// @param tokenId token ID of NFT to skim
    /// @param amount amount of NFT to skim, for ERC721 it's always 1
    function skim(address to, NftType nftType, address collection, uint256 tokenId, uint256 amount) external;
}

File 4 of 18 : IUniswapV3PoolState.sol
//SPDX-License-Identifier: Prima Nocta
pragma solidity ^0.8.20;

interface IUniswapV3PoolState {
    function slot0() external view returns (
        uint160 sqrtPriceX96,
        int24 tick,
        uint16 observationIndex,
        uint16 observationCardinality,
        uint16 observationCardinalityNext,
        uint8 feeProtocol,
        bool unlocked
    );
}

File 5 of 18 : IMagicSwapV2Router.sol
//SPDX-License-Identifier: Prima Nocta
pragma solidity ^0.8.20;

import "./INftVault.sol";

interface IMagicSwapV2Router { 
    struct NftVaultLiquidityData {
        INftVault token;
        address[] collection;
        uint256[] tokenId;
        uint256[] amount;
    }
    
    function addLiquidityNFT(
        NftVaultLiquidityData calldata _vault,
        address _tokenB,
        uint256 _amountBDesired,
        uint256 _amountBMin,
        address _to,
        uint256 _deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 lpAmount);
    
    function addLiquidityNFTNFT(
        NftVaultLiquidityData calldata _vaultA,
        NftVaultLiquidityData calldata _vaultB,
        uint256 _amountAMin,
        uint256 _amountBMin,
        address _to,
        uint256 _deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 lpAmount);
    
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    
    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
}

File 6 of 18 : INftVaultFactory.sol
//SPDX-License-Identifier: Prima Nocta
pragma solidity ^0.8.20;

import "./INftVault.sol";

interface INftVaultFactory {
    function createVault(INftVault.CollectionData[] memory collections) external returns (INftVault vault);
    function getVault(INftVault.CollectionData[] memory collections) external view returns (INftVault vault);
    function getVaultLength() external view returns (uint256);
    function getVaultAt(uint256 index) external view returns (address);
    function exists(INftVault.CollectionData[] memory collections) external view returns (bool);
}

File 7 of 18 : IMagicSwapUniswapV2Factory.sol
//SPDX-License-Identifier: Prima Nocta
pragma solidity ^0.8.20;

interface IMagicSwapUniswapV2Factory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);   
}

File 8 of 18 : IAggregatorV3.sol
//SPDX-License-Identifier: Prima Nocta
pragma solidity ^0.8.20;

interface IAggregatorV3 {
    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );
}

File 9 of 18 : IPyth.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

import "./PythStructs.sol";
import "./IPythEvents.sol";

/// @title Consume prices from the Pyth Network (https://pyth.network/).
/// @dev Please refer to the guidance at https://docs.pyth.network/documentation/pythnet-price-feeds/best-practices for how to consume prices safely.
/// @author Pyth Data Association
interface IPyth is IPythEvents {
    /// @notice Returns the price of a price feed without any sanity checks.
    /// @dev This function returns the most recent price update in this contract without any recency checks.
    /// This function is unsafe as the returned price update may be arbitrarily far in the past.
    ///
    /// Users of this function should check the `publishTime` in the price to ensure that the returned price is
    /// sufficiently recent for their application. If you are considering using this function, it may be
    /// safer / easier to use `getPriceNoOlderThan`.
    /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
    function getPriceUnsafe(
        bytes32 id
    ) external view returns (PythStructs.Price memory price);

    /// @notice Returns the price that is no older than `age` seconds of the current time.
    /// @dev This function is a sanity-checked version of `getPriceUnsafe` which is useful in
    /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently
    /// recently.
    /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
    function getPriceNoOlderThan(
        bytes32 id,
        uint age
    ) external view returns (PythStructs.Price memory price);

    /// @notice Returns the exponentially-weighted moving average price of a price feed without any sanity checks.
    /// @dev This function returns the same price as `getEmaPrice` in the case where the price is available.
    /// However, if the price is not recent this function returns the latest available price.
    ///
    /// The returned price can be from arbitrarily far in the past; this function makes no guarantees that
    /// the returned price is recent or useful for any particular application.
    ///
    /// Users of this function should check the `publishTime` in the price to ensure that the returned price is
    /// sufficiently recent for their application. If you are considering using this function, it may be
    /// safer / easier to use either `getEmaPrice` or `getEmaPriceNoOlderThan`.
    /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
    function getEmaPriceUnsafe(
        bytes32 id
    ) external view returns (PythStructs.Price memory price);

    /// @notice Returns the exponentially-weighted moving average price that is no older than `age` seconds
    /// of the current time.
    /// @dev This function is a sanity-checked version of `getEmaPriceUnsafe` which is useful in
    /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently
    /// recently.
    /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
    function getEmaPriceNoOlderThan(
        bytes32 id,
        uint age
    ) external view returns (PythStructs.Price memory price);

    /// @notice Update price feeds with given update messages.
    /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling
    /// `getUpdateFee` with the length of the `updateData` array.
    /// Prices will be updated if they are more recent than the current stored prices.
    /// The call will succeed even if the update is not the most recent.
    /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid.
    /// @param updateData Array of price update data.
    function updatePriceFeeds(bytes[] calldata updateData) external payable;

    /// @notice Wrapper around updatePriceFeeds that rejects fast if a price update is not necessary. A price update is
    /// necessary if the current on-chain publishTime is older than the given publishTime. It relies solely on the
    /// given `publishTimes` for the price feeds and does not read the actual price update publish time within `updateData`.
    ///
    /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling
    /// `getUpdateFee` with the length of the `updateData` array.
    ///
    /// `priceIds` and `publishTimes` are two arrays with the same size that correspond to senders known publishTime
    /// of each priceId when calling this method. If all of price feeds within `priceIds` have updated and have
    /// a newer or equal publish time than the given publish time, it will reject the transaction to save gas.
    /// Otherwise, it calls updatePriceFeeds method to update the prices.
    ///
    /// @dev Reverts if update is not needed or the transferred fee is not sufficient or the updateData is invalid.
    /// @param updateData Array of price update data.
    /// @param priceIds Array of price ids.
    /// @param publishTimes Array of publishTimes. `publishTimes[i]` corresponds to known `publishTime` of `priceIds[i]`
    function updatePriceFeedsIfNecessary(
        bytes[] calldata updateData,
        bytes32[] calldata priceIds,
        uint64[] calldata publishTimes
    ) external payable;

    /// @notice Returns the required fee to update an array of price updates.
    /// @param updateData Array of price update data.
    /// @return feeAmount The required fee in Wei.
    function getUpdateFee(
        bytes[] calldata updateData
    ) external view returns (uint feeAmount);

    /// @notice Parse `updateData` and return price feeds of the given `priceIds` if they are all published
    /// within `minPublishTime` and `maxPublishTime`.
    ///
    /// You can use this method if you want to use a Pyth price at a fixed time and not the most recent price;
    /// otherwise, please consider using `updatePriceFeeds`. This method may store the price updates on-chain, if they
    /// are more recent than the current stored prices.
    ///
    /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling
    /// `getUpdateFee` with the length of the `updateData` array.
    ///
    ///
    /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is
    /// no update for any of the given `priceIds` within the given time range.
    /// @param updateData Array of price update data.
    /// @param priceIds Array of price ids.
    /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`.
    /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`.
    /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order).
    function parsePriceFeedUpdates(
        bytes[] calldata updateData,
        bytes32[] calldata priceIds,
        uint64 minPublishTime,
        uint64 maxPublishTime
    ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds);

    /// @notice Similar to `parsePriceFeedUpdates` but ensures the updates returned are
    /// the first updates published in minPublishTime. That is, if there are multiple updates for a given timestamp,
    /// this method will return the first update. This method may store the price updates on-chain, if they
    /// are more recent than the current stored prices.
    ///
    ///
    /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is
    /// no update for any of the given `priceIds` within the given time range and uniqueness condition.
    /// @param updateData Array of price update data.
    /// @param priceIds Array of price ids.
    /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`.
    /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`.
    /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order).
    function parsePriceFeedUpdatesUnique(
        bytes[] calldata updateData,
        bytes32[] calldata priceIds,
        uint64 minPublishTime,
        uint64 maxPublishTime
    ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds);
}

File 10 of 18 : PythAggregatorV3.sol
// SPDX-License-Identifier: Apache 2
pragma solidity ^0.8.0;

import {PythStructs} from "./PythStructs.sol";
import {IPyth} from "./IPyth.sol";

// This interface is forked from the Zerolend Adapter found here:
// https://github.com/zerolend/pyth-oracles/blob/master/contracts/PythAggregatorV3.sol
// Original license found under licenses/zerolend-pyth-oracles.md

/**
 * @title A port of the ChainlinkAggregatorV3 interface that supports Pyth price feeds
 * @notice This does not store any roundId information on-chain. Please review the code before using this implementation.
 * Users should deploy an instance of this contract to wrap every price feed id that they need to use.
 */
contract PythAggregatorV3 {
    bytes32 public priceId;
    IPyth public pyth;

    constructor(address _pyth, bytes32 _priceId) {
        priceId = _priceId;
        pyth = IPyth(_pyth);
    }

    // Wrapper function to update the underlying Pyth price feeds. Not part of the AggregatorV3 interface but useful.
    function updateFeeds(bytes[] calldata priceUpdateData) public payable {
        // Update the prices to the latest available values and pay the required fee for it. The `priceUpdateData` data
        // should be retrieved from our off-chain Price Service API using the `pyth-evm-js` package.
        // See section "How Pyth Works on EVM Chains" below for more information.
        uint fee = pyth.getUpdateFee(priceUpdateData);
        pyth.updatePriceFeeds{value: fee}(priceUpdateData);

        // refund remaining eth
        payable(msg.sender).call{value: address(this).balance}("");
    }

    function decimals() public view virtual returns (uint8) {
        PythStructs.Price memory price = pyth.getPriceUnsafe(priceId);
        return uint8(-1 * int8(price.expo));
    }

    function description() public pure returns (string memory) {
        return "A port of a chainlink aggregator powered by pyth network feeds";
    }

    function version() public pure returns (uint256) {
        return 1;
    }

    function latestAnswer() public view virtual returns (int256) {
        PythStructs.Price memory price = pyth.getPriceUnsafe(priceId);
        return int256(price.price);
    }

    function latestTimestamp() public view returns (uint256) {
        PythStructs.Price memory price = pyth.getPriceUnsafe(priceId);
        return price.publishTime;
    }

    function latestRound() public view returns (uint256) {
        // use timestamp as the round id
        return latestTimestamp();
    }

    function getAnswer(uint256) public view returns (int256) {
        return latestAnswer();
    }

    function getTimestamp(uint256) external view returns (uint256) {
        return latestTimestamp();
    }

    function getRoundData(
        uint80 _roundId
    )
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        )
    {
        PythStructs.Price memory price = pyth.getPriceUnsafe(priceId);
        return (
            _roundId,
            int256(price.price),
            price.publishTime,
            price.publishTime,
            _roundId
        );
    }

    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        )
    {
        PythStructs.Price memory price = pyth.getPriceUnsafe(priceId);
        roundId = uint80(price.publishTime);
        return (
            roundId,
            int256(price.price),
            price.publishTime,
            price.publishTime,
            roundId
        );
    }
}

File 11 of 18 : IERC20.sol
// SPDX-License-Identifier: MIT
// 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 12 of 18 : IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.20;

import {IERC165} from "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC-1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[ERC].
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(
        address[] calldata accounts,
        uint256[] calldata ids
    ) external view returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the zero address.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`.
     *
     * WARNING: This function can potentially allow a reentrancy attack when transferring tokens
     * to an untrusted contract, when invoking {onERC1155Received} on the receiver.
     * Ensure to follow the checks-effects-interactions pattern and consider employing
     * reentrancy guards when interacting with untrusted contracts.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `value` amount.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * WARNING: This function can potentially allow a reentrancy attack when transferring tokens
     * to an untrusted contract, when invoking {onERC1155BatchReceived} on the receiver.
     * Ensure to follow the checks-effects-interactions pattern and consider employing
     * reentrancy guards when interacting with untrusted contracts.
     *
     * Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments.
     *
     * Requirements:
     *
     * - `ids` and `values` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external;
}

File 13 of 18 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.20;

import {IERC165} from "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC-721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
     *   a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC-721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or
     *   {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
     *   a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the address zero.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

File 14 of 18 : Clones.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (proxy/Clones.sol)

pragma solidity ^0.8.20;

import {Errors} from "../utils/Errors.sol";

/**
 * @dev https://eips.ethereum.org/EIPS/eip-1167[ERC-1167] is a standard for
 * deploying minimal proxy contracts, also known as "clones".
 *
 * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies
 * > a minimal bytecode implementation that delegates all calls to a known, fixed address.
 *
 * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`
 * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the
 * deterministic method.
 */
library Clones {
    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create opcode, which should never revert.
     */
    function clone(address implementation) internal returns (address instance) {
        return clone(implementation, 0);
    }

    /**
     * @dev Same as {xref-Clones-clone-address-}[clone], but with a `value` parameter to send native currency
     * to the new contract.
     *
     * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory)
     * to always have enough balance for new deployments. Consider exposing this function under a payable method.
     */
    function clone(address implementation, uint256 value) internal returns (address instance) {
        if (address(this).balance < value) {
            revert Errors.InsufficientBalance(address(this).balance, value);
        }
        assembly ("memory-safe") {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create(value, 0x09, 0x37)
        }
        if (instance == address(0)) {
            revert Errors.FailedDeployment();
        }
    }

    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create2 opcode and a `salt` to deterministically deploy
     * the clone. Using the same `implementation` and `salt` multiple time will revert, since
     * the clones cannot be deployed twice at the same address.
     */
    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
        return cloneDeterministic(implementation, salt, 0);
    }

    /**
     * @dev Same as {xref-Clones-cloneDeterministic-address-bytes32-}[cloneDeterministic], but with
     * a `value` parameter to send native currency to the new contract.
     *
     * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory)
     * to always have enough balance for new deployments. Consider exposing this function under a payable method.
     */
    function cloneDeterministic(
        address implementation,
        bytes32 salt,
        uint256 value
    ) internal returns (address instance) {
        if (address(this).balance < value) {
            revert Errors.InsufficientBalance(address(this).balance, value);
        }
        assembly ("memory-safe") {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create2(value, 0x09, 0x37, salt)
        }
        if (instance == address(0)) {
            revert Errors.FailedDeployment();
        }
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt,
        address deployer
    ) internal pure returns (address predicted) {
        assembly ("memory-safe") {
            let ptr := mload(0x40)
            mstore(add(ptr, 0x38), deployer)
            mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)
            mstore(add(ptr, 0x14), implementation)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)
            mstore(add(ptr, 0x58), salt)
            mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))
            predicted := and(keccak256(add(ptr, 0x43), 0x55), 0xffffffffffffffffffffffffffffffffffffffff)
        }
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt
    ) internal view returns (address predicted) {
        return predictDeterministicAddress(implementation, salt, address(this));
    }
}

File 15 of 18 : Errors.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)

pragma solidity ^0.8.20;

/**
 * @dev Collection of common custom errors used in multiple contracts
 *
 * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.
 * It is recommended to avoid relying on the error API for critical functionality.
 *
 * _Available since v5.1._
 */
library Errors {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error InsufficientBalance(uint256 balance, uint256 needed);

    /**
     * @dev A call to an address target failed. The target may have reverted.
     */
    error FailedCall();

    /**
     * @dev The deployment failed.
     */
    error FailedDeployment();

    /**
     * @dev A necessary precompile is missing.
     */
    error MissingPrecompile(address);
}

File 16 of 18 : PythStructs.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

contract PythStructs {
    // A price with a degree of uncertainty, represented as a price +- a confidence interval.
    //
    // The confidence interval roughly corresponds to the standard error of a normal distribution.
    // Both the price and confidence are stored in a fixed-point numeric representation,
    // `x * (10^expo)`, where `expo` is the exponent.
    //
    // Please refer to the documentation at https://docs.pyth.network/documentation/pythnet-price-feeds/best-practices for how
    // to how this price safely.
    struct Price {
        // Price
        int64 price;
        // Confidence interval around the price
        uint64 conf;
        // Price exponent
        int32 expo;
        // Unix timestamp describing when the price was published
        uint publishTime;
    }

    // PriceFeed represents a current aggregate price from pyth publisher feeds.
    struct PriceFeed {
        // The price ID.
        bytes32 id;
        // Latest available price
        Price price;
        // Latest available exponentially-weighted moving average price
        Price emaPrice;
    }
}

File 17 of 18 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 18 of 18 : IPythEvents.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

/// @title IPythEvents contains the events that Pyth contract emits.
/// @dev This interface can be used for listening to the updates for off-chain and testing purposes.
interface IPythEvents {
    /// @dev Emitted when the price feed with `id` has received a fresh update.
    /// @param id The Pyth Price Feed ID.
    /// @param publishTime Publish time of the given price update.
    /// @param price Price of the given price update.
    /// @param conf Confidence interval of the given price update.
    event PriceFeedUpdate(
        bytes32 indexed id,
        uint64 publishTime,
        int64 price,
        uint64 conf
    );
}

Settings
{
  "optimizer": {
    "enabled": true,
    "mode": "3"
  },
  "viaIR": true,
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "abi"
      ]
    }
  },
  "detectMissingLibraries": false,
  "forceEVMLA": false,
  "enableEraVMExtensions": false,
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_baseToken","type":"address"},{"internalType":"address","name":"_stakingRewards","type":"address"},{"internalType":"contract INftVaultFactory","name":"_factory","type":"address"},{"internalType":"contract IMagicSwapV2Router","name":"_router","type":"address"},{"internalType":"contract IMagicSwapUniswapV2Factory","name":"_msufactory","type":"address"},{"internalType":"contract IThresholdERC1155","name":"_memecoinImplementation","type":"address"},{"internalType":"address","name":"_pythPriceFeed","type":"address"},{"internalType":"bytes32","name":"_ethFeedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memeCoinAddress","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountNFT","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBaseToken","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lpaddress","type":"address"},{"components":[{"internalType":"bool","name":"readyToGraduate","type":"bool"},{"internalType":"bool","name":"graduated","type":"bool"},{"internalType":"uint256","name":"targetBaseTokenToRaise","type":"uint256"},{"internalType":"uint256","name":"presalePrice","type":"uint256"},{"internalType":"uint256","name":"returnForOne","type":"uint256"},{"internalType":"uint256","name":"baseTokenRaised","type":"uint256"},{"internalType":"uint256","name":"totalsupply","type":"uint256"},{"internalType":"address","name":"paircoin","type":"address"},{"internalType":"uint256","name":"amounttolp","type":"uint256"},{"internalType":"uint256","name":"amounttosell","type":"uint256"},{"internalType":"contract IThresholdERC1155","name":"memecoin","type":"address"}],"indexed":false,"internalType":"struct PRESALEZKSYNC.PresaleInfo","name":"presaleinfo","type":"tuple"}],"name":"Graduation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memeCoinAddress","type":"address"},{"components":[{"internalType":"bool","name":"readyToGraduate","type":"bool"},{"internalType":"bool","name":"graduated","type":"bool"},{"internalType":"uint256","name":"targetBaseTokenToRaise","type":"uint256"},{"internalType":"uint256","name":"presalePrice","type":"uint256"},{"internalType":"uint256","name":"returnForOne","type":"uint256"},{"internalType":"uint256","name":"baseTokenRaised","type":"uint256"},{"internalType":"uint256","name":"totalsupply","type":"uint256"},{"internalType":"address","name":"paircoin","type":"address"},{"internalType":"uint256","name":"amounttolp","type":"uint256"},{"internalType":"uint256","name":"amounttosell","type":"uint256"},{"internalType":"contract IThresholdERC1155","name":"memecoin","type":"address"}],"indexed":false,"internalType":"struct PRESALEZKSYNC.PresaleInfo","name":"presaleinfo","type":"tuple"}],"name":"GraduationReady","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"string","name":"uri","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"components":[{"internalType":"bool","name":"readyToGraduate","type":"bool"},{"internalType":"bool","name":"graduated","type":"bool"},{"internalType":"uint256","name":"targetBaseTokenToRaise","type":"uint256"},{"internalType":"uint256","name":"presalePrice","type":"uint256"},{"internalType":"uint256","name":"returnForOne","type":"uint256"},{"internalType":"uint256","name":"baseTokenRaised","type":"uint256"},{"internalType":"uint256","name":"totalsupply","type":"uint256"},{"internalType":"address","name":"paircoin","type":"address"},{"internalType":"uint256","name":"amounttolp","type":"uint256"},{"internalType":"uint256","name":"amounttosell","type":"uint256"},{"internalType":"contract IThresholdERC1155","name":"memecoin","type":"address"}],"indexed":false,"internalType":"struct PRESALEZKSYNC.PresaleInfo","name":"presaleinfo","type":"tuple"}],"name":"MemeMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_collectionAddress","type":"address"},{"components":[{"internalType":"address","name":"lpaddress","type":"address"},{"internalType":"address","name":"vaultaddress","type":"address"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"}],"indexed":false,"internalType":"struct PRESALEZKSYNC.AltPairInfo","name":"alt","type":"tuple"}],"name":"PairCoinApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_collectionAddress","type":"address"}],"name":"PairCoinRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memeCoinAddress","type":"address"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountNFT","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBaseToken","type":"uint256"}],"name":"Sell","type":"event"},{"inputs":[],"name":"MAX_TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TARGETMCAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ca","type":"address"},{"components":[{"internalType":"address","name":"lpaddress","type":"address"},{"internalType":"address","name":"vaultaddress","type":"address"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"}],"internalType":"struct PRESALEZKSYNC.AltPairInfo","name":"_alp","type":"tuple"}],"name":"addAltPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedpaircoins","outputs":[{"internalType":"address","name":"lpaddress","type":"address"},{"internalType":"address","name":"vaultaddress","type":"address"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_memeCoinAddress","type":"address"},{"internalType":"uint256","name":"_amountNftToBuy","type":"uint256"}],"name":"buyPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newowner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mcapindollars","type":"uint256"}],"name":"changeTargetMcap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethFeedId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_altcoin","type":"address"},{"internalType":"bytes[]","name":"priceUpdateData","type":"bytes[]"}],"name":"getAltPairCoinPriceUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"priceUpdateData","type":"bytes[]"}],"name":"getBaseTokenPriceUSD","outputs":[{"internalType":"uint256","name":"baseTokenPrice","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_memeCoinAddress","type":"address"},{"internalType":"uint256","name":"_amountOfNftToBuy","type":"uint256"}],"name":"getQuote","outputs":[{"internalType":"uint256","name":"totalbaseToken","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_memeCoinAddress","type":"address"}],"name":"graduatePresale","outputs":[{"internalType":"address","name":"lpaddy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleInfo","outputs":[{"internalType":"bool","name":"readyToGraduate","type":"bool"},{"internalType":"bool","name":"graduated","type":"bool"},{"internalType":"uint256","name":"targetBaseTokenToRaise","type":"uint256"},{"internalType":"uint256","name":"presalePrice","type":"uint256"},{"internalType":"uint256","name":"returnForOne","type":"uint256"},{"internalType":"uint256","name":"baseTokenRaised","type":"uint256"},{"internalType":"uint256","name":"totalsupply","type":"uint256"},{"internalType":"address","name":"paircoin","type":"address"},{"internalType":"uint256","name":"amounttolp","type":"uint256"},{"internalType":"uint256","name":"amounttosell","type":"uint256"},{"internalType":"contract IThresholdERC1155","name":"memecoin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pythPriceFeedsContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ca","type":"address"}],"name":"removePairCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_memeCoinAddress","type":"address"},{"internalType":"uint256","name":"_sellAmountNFT","type":"uint256"}],"name":"sellPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingRewards","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_totalsupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"uint256[]","name":"_thresholds","type":"uint256[]"},{"internalType":"bytes[]","name":"priceUpdateData","type":"bytes[]"}],"name":"startPresale","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"address","name":"_paircoin1155","type":"address"},{"internalType":"uint256[]","name":"_thresholds","type":"uint256[]"},{"internalType":"bytes[]","name":"priceUpdateData","type":"bytes[]"}],"name":"startPresale1155","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"}]

9c4d535b0000000000000000000000000000000000000000000000000000000000000000010008292c06de28dcf6f5c7d36333e239957fe9bb29237bda553485b7bff66300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000e642f7d1f07af75ed8198f0b4d68f14244baaab50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000259a75b880d1ac494fc84d8b77bcb4754eec3435000000000000000000000000a314ca85f158776847ad0a9dbb6c41fd3da5f9530000000000000000000000008cc9c8f3890b16264a70cd7b35fa52fe6e11984a000000000000000000000000756162873526a6b9d6a15064a5be33e2de38bb5c00000000000000000000000047f2a9bdad52d65b66287253cf5ca0d2b763b486ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace

Deployed Bytecode

0x000200000000000200100000000000020000000003020019000100000001035500000060021002700000078b0020019d0000078b022001970000000100300190000000440000c13d0000008003000039000000400030043f000000040020008c00000a390000413d000000000301043b000000e003300270000007930030009c000000c70000213d000007a30030009c000000ec0000213d000007ab0030009c0000013a0000213d000007af0030009c000004070000613d000007b00030009c000001be0000613d000007b10030009c00000a390000c13d000000240020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000401100370000000000101043b001000000001001d0000078e0010009c00000a390000213d0000000101000039000000000101041a0000078e011001970000000002000411000000000012004b000005ab0000c13d0000001001000029000000000010043f0000000601000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b0000000101100039000000000101041a000007d700100198000007380000c13d000000400100043d00000044021000390000080d03000041000000000032043500000024021000390000000e030000390000072d0000013d0000000003000416000000000003004b00000a390000c13d0000001f032000390000078c033001970000008003300039000000400030043f0000001f0420018f0000078d052001980000008003500039000000550000613d0000008006000039000000000701034f000000007807043c0000000006860436000000000036004b000000510000c13d000000000004004b000000620000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000001000020008c00000a390000413d000000800100043d0000078e0010009c00000a390000213d000000a00200043d001000000002001d0000078e0020009c00000a390000213d000000c00200043d000f00000002001d0000078e0020009c00000a390000213d000000e00200043d000e00000002001d0000078e0020009c00000a390000213d000001000200043d000d00000002001d0000078e0020009c00000a390000213d000001200200043d000c00000002001d0000078e0020009c00000a390000213d000001400200043d000b00000002001d0000078e0020009c00000a390000213d0000078e01100197000001600200043d000a00000002001d0000a410020000390000000303000039000000000023041b0000000b03000039000000000203041a0000078f0220019700000790022001c7000000000023041b0000000102000039000000000302041a0000078f033001970000000004000411000000000343019f000000000032041b000000000200041a0000078f02200197000000000112019f000000000010041b0000000401000039000000000301041a000007910030009c0000048f0000813d000900000003001d0000000102300039000000000021041b000000000010043f000000200200003900000000010000191e241e050000040f0000000901100029000000000001041b0000000201000039000000000201041a0000078f0220019700000010022001af000000000021041b0000000701000039000000000201041a0000078f022001970000000f022001af000000000021041b0000000801000039000000000201041a0000078f022001970000000e022001af000000000021041b0000000901000039000000000201041a0000078f022001970000000d022001af000000000021041b0000000a01000039000000000201041a0000078f022001970000000c022001af000000000021041b0000000b03000039000000000103041a0000078f011001970000000b011001af000000000013041b0000000c010000390000000a02000029000000000021041b000000200100003900000100001004430000012000000443000007920100004100001e250001042e000007940030009c000000f90000213d0000079c0030009c0000014a0000213d000007a00030009c000004560000613d000007a10030009c000001c50000613d000007a20030009c00000a390000c13d000000240020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000401100370000000000101043b0000078e0010009c00000a390000213d0000000102000039000000000302041a0000078e043001970000000005000411000000000045004b000005ab0000c13d000000000001004b000005e00000c13d000007b801000041000000800010043f0000002001000039000000840010043f0000001d01000039000000a40010043f000007e501000041000000c40010043f000007e60100004100001e2600010430000007a40030009c000001870000213d000007a80030009c0000045b0000613d000007a90030009c000002cc0000613d000007aa0030009c00000a390000c13d0000000001000416000000000001004b00000a390000c13d00000002010000390000046b0000013d000007950030009c000001a30000213d000007990030009c000004620000613d0000079a0030009c000002e50000613d0000079b0030009c00000a390000c13d000000240020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000401100370000000000101043b0000078e0010009c00000a390000213d000000000010043f0000000601000039000000200010043f000000400200003900000000010000191e241e050000040f0000000202100039000000000202041a000f00000002001d0000000102100039000000000202041a000e00000002001d000000000201041a001000000002001d00000003011000391e2417c80000040f0000000e050000290000078e02500197000000400400043d000d00000004001d00000020034000390000000000230435000007d7005001980000000002000039000000010200c0390000004003400039000000000023043500000060024000390000000f030000290000000000320435000000a0020000390000008003400039000000000023043500000010020000290000078e022001970000000000240435000000a0024000391e2418150000040f0000000d0200002900000000012100490000078b0010009c0000078b010080410000078b0020009c0000078b0200804100000060011002100000004002200210000000000121019f00001e250001042e000007ac0030009c000004670000613d000007ad0030009c000003020000613d000007ae0030009c00000a390000c13d000000240020008c00000a390000413d0000000401100370000000000101043b000007b20010009c00000a390000213d00000004011000391e2417940000040f1e2418aa0000040f000002fb0000013d0000079d0030009c000004700000613d0000079e0030009c000003570000613d0000079f0030009c00000a390000c13d000000a40020008c00000a390000413d0000000003000416000000000003004b00000a390000c13d0000000403100370000000000303043b0000078e0030009c00000a390000213d0000002403100370000000000303043b0000078e0030009c00000a390000213d0000004403100370000000000303043b000007b20030009c00000a390000213d0000002304300039000000000024004b00000a390000813d0000000404300039000000000441034f000000000404043b000007b20040009c00000a390000213d000000050440021000000000034300190000002403300039000000000023004b00000a390000213d0000006403100370000000000303043b000007b20030009c00000a390000213d0000002304300039000000000024004b00000a390000813d0000000404300039000000000441034f000000000404043b000007b20040009c00000a390000213d000000050440021000000000034300190000002403300039000000000023004b00000a390000213d0000008401100370000000000101043b000007b20010009c00000a390000213d00000004011000391e2417af0000040f000007e301000041000002fb0000013d000007a50030009c000004780000613d000007a60030009c0000038e0000613d000007a70030009c00000a390000c13d000000440020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000402100370000000000302043b0000078e0030009c00000a390000213d0000002401100370000000000201043b00000000010300191e2418270000040f000000400300043d0000002004300039000000000024043500000000001304350000078b0030009c0000078b030080410000004001300210000007fa011001c700001e250001042e000007960030009c000004950000613d000007970030009c000003930000613d000007980030009c00000a390000c13d000000a40020008c00000a390000413d0000000003000416000000000003004b00000a390000c13d0000000403100370000000000303043b0000078e0030009c00000a390000213d0000002403100370000000000303043b0000078e0030009c00000a390000213d0000008401100370000000000101043b000007b20010009c00000a390000213d00000004011000391e2417af0000040f000007b301000041000002fb0000013d0000000001000416000000000001004b00000a390000c13d0000080e01000041000000800010043f000007e20100004100001e250001042e000000c40020008c00000a390000413d0000000003000416000000000003004b00000a390000c13d0000000403100370000000000403043b000007b20040009c00000a390000213d0000002303400039000000000023004b00000a390000813d0000000405400039000000000351034f000000000303043b000007b20030009c0000048f0000213d0000001f0630003900000816066001970000003f066000390000081606600197000007cc0060009c0000048f0000213d0000008006600039000000400060043f000000800030043f00000000043400190000002404400039000000000024004b00000a390000213d0000002004500039000000000541034f00000816063001980000001f0730018f000000a004600039000001ef0000613d000000a008000039000000000905034f000000009a09043c0000000008a80436000000000048004b000001eb0000c13d000000000007004b000001fc0000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f0000000000540435000000a00330003900000000000304350000002403100370000000000403043b000007b20040009c00000a390000213d0000002303400039000000000023004b00000a390000813d0000000405400039000000000351034f000000000303043b000007b20030009c0000048f0000213d0000001f0630003900000816066001970000003f066000390000081606600197000000400700043d0000000006670019001000000007001d000000000076004b00000000070000390000000107004039000007b20060009c0000048f0000213d00000001007001900000048f0000c13d000000400060043f00000010060000290000000006360436000f00000006001d00000000043400190000002404400039000000000024004b00000a390000213d0000002004500039000000000541034f00000816063001980000001f0730018f0000000f046000290000022c0000613d000000000805034f0000000f09000029000000008a08043c0000000009a90436000000000049004b000002280000c13d000000000007004b000002390000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000f0330002900000000000304350000006403100370000000000403043b000007b20040009c00000a390000213d0000002303400039000000000023004b00000a390000813d0000000405400039000000000351034f000000000303043b000007b20030009c0000048f0000213d0000001f0630003900000816066001970000003f066000390000081606600197000000400700043d0000000006670019000e00000007001d000000000076004b00000000070000390000000107004039000007b20060009c0000048f0000213d00000001007001900000048f0000c13d000000400060043f0000000e060000290000000006360436000d00000006001d00000000043400190000002404400039000000000024004b00000a390000213d0000002004500039000000000541034f00000816063001980000001f0730018f0000000d04600029000002690000613d000000000805034f0000000d09000029000000008a08043c0000000009a90436000000000049004b000002650000c13d000000000007004b000002760000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000d0330002900000000000304350000008403100370000000000303043b000007b20030009c00000a390000213d0000002304300039000000000024004b00000a390000813d0000000404300039000000000441034f000000000404043b000007b20040009c0000048f0000213d00000005054002100000003f06500039000007e706600197000000400700043d0000000006670019000c00000007001d000000000076004b00000000070000390000000107004039000007b20060009c0000048f0000213d00000001007001900000048f0000c13d000000400060043f0000000c06000029000000000046043500000024033000390000000005350019000000000025004b00000a390000213d000000000004004b000002a20000613d0000000c04000029000000000631034f000000000606043b000000200440003900000000006404350000002003300039000000000053004b0000029b0000413d000000a403100370000000000303043b000007b20030009c00000a390000213d0000002304300039000000000024004b0000000005000019000007e805008041000007e804400197000000000004004b0000000006000019000007e806004041000007e80040009c000000000605c019000000000006004b00000a390000c13d0000000404300039000000000441034f000000000404043b000b00000004001d000007b20040009c00000a390000213d000a00240030003d0000000b0300002900000005033002100000000a03300029000000000023004b00000a390000213d0000004401100370000000000101043b000007e90010009c00000d720000213d000000400100043d0000006402100039000007f80300004100000000003204350000004402100039000007f903000041000000000032043500000024021000390000002503000039000005c20000013d000000240020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000401100370000000000101043b0000000102000039000000000202041a0000078e022001970000000003000411000000000023004b000005ab0000c13d000000000001004b000005b50000c13d000007b801000041000000800010043f0000002001000039000000840010043f0000001b01000039000000a40010043f0000080401000041000000c40010043f000007e60100004100001e2600010430000000440020008c00000a390000413d0000000003000416000000000003004b00000a390000c13d0000000403100370000000000303043b001000000003001d0000078e0030009c00000a390000213d0000002401100370000000000101043b000007b20010009c00000a390000213d00000004011000391e2417940000040f000000000301001900000000040200190000001001000029000000000203001900000000030400191e241ab80000040f000000400200043d00000000001204350000078b0020009c0000078b020080410000004001200210000007b4011001c700001e250001042e000000440020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000402100370000000000202043b001000000002001d0000078e0020009c00000a390000213d0000002401100370000000000101043b000f00000001001d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000400200043d000007c70020009c0000048f0000213d000000000101043b0000016003200039000000400030043f000000000301041a0000ff00003001900000000004000039000000010400c03900000020052000390000000000450435000000ff003001900000000003000039000000010300c03900000000003204350000000103100039000000000303041a000000400420003900000000003404350000000203100039000000000303041a000000600420003900000000003404350000000303100039000000000303041a000000800420003900000000003404350000000403100039000000000303041a000000a00520003900000000003504350000000503100039000000000303041a000000c00420003900000000003404350000000603100039000000000303041a0000078e03300197000000e00620003900000000003604350000000703100039000000000303041a000001000420003900000000003404350000000803100039000000000303041a0000012004200039000000000034043500000140022000390000000901100039000000000101041a0000078e0110019700000000001204350000071d0000613d000000400100043d00000044021000390000080b030000410000072a0000013d000000240020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000401100370000000000101043b0000078e0010009c00000a390000213d000000000010043f0000000501000039000000200010043f000000400200003900000000010000191e241e050000040f0000000902100039000000000202041a0000000803100039000000000303041a0000000704100039000000000404041a0000000605100039000000000505041a0000000506100039000000000606041a0000000407100039000000000707041a0000000308100039000000000808041a0000000209100039000000000909041a000000010a100039000000000a0a041a000000000101041a000000ff00100190000000000b000039000000010b00c0390000008000b0043f0000ff00001001900000000001000039000000010100c039000000a00010043f000000c000a0043f000000e00090043f000001000080043f000001200070043f000001400060043f0000078e01500197000001600010043f000001800040043f000001a00030043f0000078e01200197000001c00010043f000007e40100004100001e250001042e0000000001000416000000000001004b00000a390000c13d0000000c01000039000004740000013d000000440020008c00000a390000413d0000000003000416000000000003004b00000a390000c13d0000000403100370000000000303043b001000000003001d0000078e0030009c00000a390000213d0000002403100370000000000403043b000007b20040009c00000a390000213d0000000003420049000007b50030009c00000a390000213d000000a40030008c00000a390000413d0000012003000039000000400030043f0000000405400039000000000651034f000000000606043b0000078e0060009c00000a390000213d000000800060043f0000002005500039000000000651034f000000000606043b0000078e0060009c00000a390000213d000000a00060043f0000002005500039000000000651034f000000000606043b000000000006004b0000000007000039000000010700c039000000000076004b00000a390000c13d000000c00060043f0000002006500039000000000661034f000000000606043b000000e00060043f0000004005500039000000000551034f000000000505043b000007b20050009c00000a390000213d00000000054500190000002304500039000000000024004b00000a390000813d0000000406500039000000000461034f000000000404043b000007b20040009c0000048f0000213d0000001f0740003900000816077001970000003f077000390000081607700197000007b60070009c0000048f0000213d0000012007700039000000400070043f000001200040043f00000000054500190000002405500039000000000025004b00000a390000213d0000002002600039000000000221034f00000816054001980000001f0640018f0000014001500039000003e80000613d0000014007000039000000000802034f000000008908043c0000000007970436000000000017004b000003e40000c13d000000000006004b000003f50000613d000000000252034f0000000305600210000000000601043300000000065601cf000000000656022f000000000202043b0000010005500089000000000252022f00000000025201cf000000000262019f000000000021043500000140014000390000000000010435000001000030043f0000000101000039000000000101041a0000078e011001970000000002000411000000000012004b00000b3d0000c13d000000100000006b00000b440000c13d000000400100043d0000004402100039000007c3030000410000000000320435000000240210003900000018030000390000072d0000013d000000440020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000402100370000000000202043b001000000002001d0000078e0020009c00000a390000213d0000002401100370000000000101043b000f00000001001d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b000001e002000039000000400020043f000000000301041a000000ff023001900000000004000039000000010400c039000000800040043f0000ff00003001900000000003000039000000010300c039000000a00030043f0000000103100039000000000303041a000000c00030043f0000000203100039000000000303041a000000e00030043f0000000303100039000000000303041a000001000030043f0000000403100039000000000303041a000001200030043f0000000503100039000000000303041a000001400030043f0000000603100039000000000303041a0000078e03300197000001600030043f0000000703100039000000000303041a000001800030043f0000000803100039000000000303041a000001a00030043f0000000901100039000000000101041a0000078e01100197000001c00010043f000000000002004b000005cd0000613d000007b801000041000001e00010043f0000002001000039000001e40010043f0000001901000039000002040010043f0000081001000041000002240010043f000008150100004100001e26000104300000000001000416000000000001004b00000a390000c13d00000001010000390000046b0000013d0000000001000416000000000001004b00000a390000c13d000007fb01000041000000800010043f000007e20100004100001e250001042e0000000001000416000000000001004b00000a390000c13d000000000100041a0000046c0000013d0000000001000416000000000001004b00000a390000c13d0000000b01000039000000000101041a0000078e01100197000000800010043f000007e20100004100001e250001042e0000000001000416000000000001004b00000a390000c13d0000000301000039000000000101041a000000800010043f000007e20100004100001e250001042e000000c40020008c00000a390000413d0000000003000416000000000003004b00000a390000c13d0000000403100370000000000403043b000007b20040009c00000a390000213d0000002303400039000000000023004b00000a390000813d0000000405400039000000000351034f000000000303043b000007b20030009c0000048f0000213d0000001f0630003900000816066001970000003f066000390000081606600197000007cc0060009c000005e50000a13d000007d401000041000000000010043f0000004101000039000000040010043f000007cb0100004100001e2600010430000000240020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000401100370000000000101043b001000000001001d0000078e0010009c00000a390000213d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b000000000101041a000000ff00100190000005b90000613d0000ff0000100190000005b90000c13d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000400200043d000007c70020009c0000048f0000213d000000000101043b0000016003200039000000400030043f000000000301041a0000ff00003001900000000004000039000000010400c03900000020052000390000000000450435000000ff003001900000000003000039000000010300c03900000000003204350000000103100039000000000303041a000000400420003900000000003404350000000203100039000000000303041a000000600420003900000000003404350000000303100039000000000303041a000000800420003900000000003404350000000403100039000000000303041a000000a004200039000d00000004001d00000000003404350000000503100039000000000303041a000000c00420003900000000003404350000000603100039000000000303041a0000078e03300197000000e004200039000e00000004001d00000000003404350000000703100039000000000303041a000001000420003900000000003404350000000803100039000000000303041a0000012004200039000000000034043500000140022000390000000901100039000000000101041a0000078e01100197000f00000002001d00000000001204350000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b000000000201041a000008170220019700000100022001bf000000000021041b0000000f010000290000000001010433000007c80200004100000000002004430000078e01100197000c00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d000007ca010000410000000001130436000a00000001001d0000000401300039000000010200003900000000002104350000078b0030009c000b00000003001d0000078b010000410000000001034019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007cb011001c70000000c020000291e241e1a0000040f000000010020019000000b110000613d0000000b01000029000007b20010009c0000048f0000213d0000000b01000029000000400010043f000007cc0010009c0000048f0000213d0000000b020000290000008001200039000000400010043f000000600120003900000060030000390000000000310435000000400120003900000000003104350000000a0100002900000000003104350000000000020435000000400100043d000a00000001001d000007cd0010009c0000048f0000213d0000000a020000290000004001200039000000400010043f0000000101000039000000000112043600000000020000310000000102200367000000000202043b0000000000210435000000400400043d000800000004001d000007cd0040009c0000048f0000213d00000008050000290000004004500039000000400040043f00000001040000390000000004450436000c00000004001d0000000000240435000000400200043d000b00000002001d000007cd0020009c0000048f0000213d0000000b040000290000004002400039000000400020043f00000001020000390000000002240436000000400400043d000007cc0040009c0000048f0000213d0000008005400039000000400050043f00000060054000390000000000350435000000400340003900000000000304350000002003400039000000000003043500000000000404350000000000420435000000400300043d000007cc0030009c0000048f0000213d0000008004300039000000400040043f00000020043000390000000105000039000000000054043500000010040000290000000000430435000000400430003900000000000404350000000407000039000000000607041a000000400400043d0000000005640436000000000070043f000000000006004b0000058e0000613d000007ce070000410000000008000019000000000907041a000000000595043600000001077000390000000108800039000000000068004b000005880000413d00000000054500490000001f0550003900000816065001970000000005460019000000000065004b00000000060000390000000106004039000007b20050009c0000048f0000213d00000001006001900000048f0000c13d000000400050043f000000600530003900000000004504350000000b040000290000000004040433000000000004004b000005a50000613d00000000003204350000000a020000290000000002020433000000000002004b00000c680000c13d000007d401000041000000000010043f0000003201000039000000040010043f000007cb0100004100001e2600010430000007b801000041000000800010043f0000002001000039000000840010043f0000000901000039000000a40010043f000007b701000041000000c40010043f000007e60100004100001e26000104300000000302000039000000000012041b000000000100001900001e250001042e000000400100043d0000006402100039000007c40300004100000000003204350000004402100039000007c503000041000000000032043500000024021000390000002a030000390000000000320435000007b80200004100000000002104350000000402100039000000200300003900000000003204350000078b0010009c0000078b010080410000004001100210000007c6011001c700001e260001043000000010010000290000000f020000291e2418270000040f0000000004010019000001200100043d000000000041001a000005da0000413d0000000003410019000000c00500043d000000000053004b0000092f0000a13d000000000415004b000008550000813d000007d401000041000000000010043f0000001101000039000000040010043f000007cb0100004100001e26000104300000078f03300197000000000113019f000000000012041b000000000100001900001e250001042e0000008006600039000000400060043f000000800030043f00000000043400190000002404400039000000000024004b00000a390000213d0000002004500039000000000541034f00000816063001980000001f0730018f000000a004600039000005f80000613d000000a008000039000000000905034f000000009a09043c0000000008a80436000000000048004b000005f40000c13d000000000007004b000006050000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f0000000000540435000000a00330003900000000000304350000002403100370000000000403043b000007b20040009c00000a390000213d0000002303400039000000000023004b00000a390000813d0000000405400039000000000351034f000000000303043b000007b20030009c0000048f0000213d0000001f0630003900000816066001970000003f066000390000081606600197000000400700043d0000000006670019001000000007001d000000000076004b00000000070000390000000107004039000007b20060009c0000048f0000213d00000001007001900000048f0000c13d000000400060043f00000010060000290000000006360436000f00000006001d00000000043400190000002404400039000000000024004b00000a390000213d0000002004500039000000000541034f00000816063001980000001f0730018f0000000f04600029000006350000613d000000000805034f0000000f09000029000000008a08043c0000000009a90436000000000049004b000006310000c13d000000000007004b000006420000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000f0330002900000000000304350000004403100370000000000403043b000007b20040009c00000a390000213d0000002303400039000000000023004b00000a390000813d0000000405400039000000000351034f000000000303043b000007b20030009c0000048f0000213d0000001f0630003900000816066001970000003f066000390000081606600197000000400700043d0000000006670019000c00000007001d000000000076004b00000000070000390000000107004039000007b20060009c0000048f0000213d00000001007001900000048f0000c13d000000400060043f0000000c060000290000000006360436000e00000006001d00000000043400190000002404400039000000000024004b00000a390000213d0000002004500039000000000541034f00000816063001980000001f0730018f0000000e04600029000006720000613d000000000805034f0000000e09000029000000008a08043c0000000009a90436000000000049004b0000066e0000c13d000000000007004b0000067f0000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000e0330002900000000000304350000006403100370000000000303043b0000078e0030009c00000a390000213d0000008404100370000000000404043b000007b20040009c00000a390000213d0000002305400039000000000025004b00000a390000813d0000000405400039000000000551034f000000000505043b000007b20050009c0000048f0000213d00000005065002100000003f07600039000007e707700197000000400800043d0000000007780019000d00000008001d000000000087004b00000000080000390000000108004039000007b20070009c0000048f0000213d00000001008001900000048f0000c13d000000400070043f0000000d07000029000000000057043500000024044000390000000006460019000000000026004b00000a390000213d000000000005004b000006af0000613d0000000d05000029000000000741034f000000000707043b000000200550003900000000007504350000002004400039000000000064004b000006a80000413d000000a404100370000000000404043b000007b20040009c00000a390000213d0000002305400039000000000025004b0000000006000019000007e806008041000007e805500197000000000005004b0000000007000019000007e807004041000007e80050009c000000000706c019000000000007004b00000a390000c13d0000000405400039000000000151034f000000000101043b000b00000001001d000007b20010009c00000a390000213d000a00240040003d0000000b0100002900000005011002100000000a01100029000000000021004b00000a390000213d0000078e01300197000000000010043f0000000601000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000400200043d000900000002001d000007d60020009c0000048f0000213d000000000101043b0000000905000029000000a002500039000000400020043f000000000201041a0000078e0220019700000000022504360000000103100039000000000303041a0000078e043001970000000000420435000007d7003001980000000002000039000000010200c0390000004003500039000700000003001d000000000023043500000060025000390000000203100039000000000303041a00000000003204350000000301100039000000000201041a000000010320019000000001042002700000007f0440618f000800000004001d0000001f0040008c00000000040000390000000104002039000000000442013f0000000100400190000007550000c13d000000400400043d000600000004001d00000008050000290000000004540436000500000004001d000000000003004b00000ec00000613d000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000805000029000000000005004b0000000002000019000000050600002900000ec60000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b000007150000413d00000ec60000013d000d00000006001d000c00000002001d00000010010000290000000f02000029000e00000005001d1e2418270000040f0000000e030000290000000003030433000000000031004b0000075b0000a13d000000400100043d00000044021000390000080a030000410000000000320435000000240210003900000011030000390000000000320435000007b80200004100000000002104350000000402100039000000200300003900000000003204350000078b0010009c0000078b010080410000004001100210000007b9011001c700001e26000104300000001001000029000000000010043f0000000601000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b000000000001041b0000000102100039000000000002041b0000000202100039000000000002041b0000000303100039000000000103041a000000010210019000000001041002700000007f0440618f0000001f0040008c00000000010000390000000101002039000000000012004b000008fd0000613d000007d401000041000000000010043f0000002201000039000000040010043f000007cb0100004100001e260001043000000000040200190000000d020000290000000002020433000000000300041a000000000323013f0000078e00300198000b00000001001d0000085e0000c13d000a00000004001d000000000141004b000005da0000413d000000400400043d000900000004001d00000024034000390000000000130435000008070100004100000000001404350000000001000411000800000001001d0000078e031001970000000401400039000700000003001d00000000003104350000078b0040009c0000078b010000410000000001044019000000400110021000000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f000007d0011001c70000078e022001971e241e1a0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000090b00002900000009057000290000078e0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000078a0000c13d000000000006004b0000079b0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000af80000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000600000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000601000029000000400010043f000000200030008c00000a390000413d00000000020b0433000000000002004b0000000001000039000000010100c039000900000002001d000000000012004b00000a390000c13d0000000d0100002900000000020104330000000201000039000000000101041a000000060500002900000024035000390000000a040000290000000000430435000008070300004100000000003504350000078e01100197000000040350003900000000001304350000078b0050009c0000078b010000410000000001054019000000400110021000000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f000007d0011001c70000078e022001971e241e1a0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000605700029000007db0000613d000000000801034f0000000609000029000000008a08043c0000000009a90436000000000059004b000007d70000c13d000000000006004b000007e80000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000b4e0000613d0000001f01400039000000600110018f0000000601100029000007b20010009c0000048f0000213d000000400010043f000000200030008c00000a390000413d00000006020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b00000a390000c13d000000090000006b00000c130000613d000000000002004b00000c130000613d0000000e010000290000000001010433000e000b00100074000005da0000413d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b00000004011000390000000e02000029000000000021041b0000000c010000290000000001010433000007c80200004100000000002004430000078e01100197000e00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000f02000029000000000021043500000000010004100000078e011001970000002402300039000000000012043500000805010000410000000000130435000000040130003900000007020000290000000000210435000000a4013000390000000000010435000000440130003900000000000104350000078b0030009c000d00000003001d0000078b010000410000000001034019000c00400010021800000000010004140000078b0010009c0000078b01008041000000c0011002100000000c011001af00000806011001c70000000e020000291e241e1a0000040f0000000100200190000008e70000c13d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000008500000c13d00000b1d0000013d000000e00100043d000000000001004b0000092e0000c13d000007d401000041000000000010043f0000001201000039000000040010043f000007cb0100004100001e26000104300000000c010000290000000001010433000007c80200004100000000002004430000078e01100197000c00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000f0200002900000000002104350000080501000041000000000013043500000000010004100000078e021001970000002401300039000900000002001d00000000002104350000000001000411000800000001001d0000078e021001970000000401300039000700000002001d0000000000210435000000a4013000390000000000010435000000440130003900000000000104350000078b0030009c000a00000003001d0000078b010000410000000001034019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f00000806011001c70000000c020000291e241e1a0000040f000000010020019000000b040000613d0000000a01000029000007b20010009c0000048f0000213d0000000a01000029000000400010043f0000000e010000290000000001010433000e000b00100074000005da0000413d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b00000004011000390000000e02000029000000000021041b0000000d010000290000000001010433000007c80200004100000000002004430000078e01100197000e00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000b02000029000000000021043500000024013000390000000702000029000000000021043500000805010000410000000000130435000000040130003900000009020000290000000000210435000000a4013000390000000000010435000000440130003900000000000104350000078b0030009c000d00000003001d0000078b010000410000000001034019000c00400010021800000000010004140000078b0010009c0000078b01008041000000c0011002100000000c011001af00000806011001c70000000e020000291e241e1a0000040f000000010020019000000b9c0000613d0000000d01000029000007b20010009c0000048f0000213d0000000d02000029000000400020043f0000000f01000029000000000012043500000020012000390000000b02000029000000000021043500000000010004140000078b0010009c0000078b01008041000000c0011002100000000c011001af000007ba011001c70000800d020000390000000303000039000008080400004100000010050000290000000806000029000009290000013d000f00000003001d000e00000004001d000000000004004b000009200000613d0000000e010000290000001f0010008c0000091e0000a13d0000000f01000029000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b0000000e020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b0000091b0000813d000000000003041b0000000103300039000000000023004b000009170000413d0000000f02000029000000000002041b000f00000001001d0000000f01000029000000000001041b00000000010004140000078b0010009c0000078b01008041000000c001100210000007be011001c70000800d0200003900000002030000390000080c0400004100000010050000291e241e1a0000040f000000010020019000000a390000613d000000000100001900001e250001042e000f0000001400e1000001600100043d0000078e03100197000000000100041a0000078e01100197000000000013004b000e00000004001d00000a290000c13d000000000024001a000005da0000413d000c00000002001d0000000001240019000000400400043d000d00000004001d000000440240003900000000001204350000080f0100004100000000001404350000002401400039000000000200041000000000002104350000000401400039000000000200041100000000002104350000078b0040009c0000078b010000410000000001044019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007b9011001c700000000020300191e241e1a0000040f0000000d0b00002900000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000009620000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000095e0000c13d000000000006004b0000096f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000a3b0000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000b00000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000b01000029000000400010043f000000200030008c00000a390000413d00000000020b0433000000000002004b0000000001000039000000010100c039000d00000002001d000000000012004b00000a390000c13d0000000201000039000000000101041a0000000b050000290000002402500039000001600300043d0000000c040000290000000000420435000008070200004100000000002504350000078e01100197000000040250003900000000001204350000078b0050009c0000078b010000410000000001054019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f0000078e02300197000007d0011001c71e241e1a0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000b05700029000009ae0000613d000000000801034f0000000b09000029000000008a08043c0000000009a90436000000000059004b000009aa0000c13d000000000006004b000009bb0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000b310000613d0000001f01400039000000600110018f0000000b01100029000007b20010009c0000048f0000213d000000400010043f000000200030008c00000a390000413d0000000b020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b00000a390000c13d0000000d0000006b00000b6e0000613d000000000002004b00000b6e0000613d000001200200043d000d00000002001d0000000e0020002a000005da0000413d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000d030000290000000e02300029000000000101043b0000000401100039000000000021041b000001c00100043d000007c80200004100000000002004430000078e01100197000d00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000f02000029000000000021043500000000010004110000078e01100197000000240230003900000000001204350000080501000041000000000013043500000000010004100000078e0110019700000004023000390000000000120435000000a4013000390000000000010435000000440130003900000000000104350000078b0030009c000c00000003001d0000078b010000410000000001034019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f00000806011001c70000000d020000291e241e1a0000040f000000010020019000000aca0000c13d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000a240000c13d00000b1d0000013d000007c8010000410000000000100443000d00000003001d000000040030044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a550000c13d000000000100001900001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000a420000c13d000000000005004b00000a530000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000b2c0000013d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000e0200002900000000002104350000080501000041000000000013043500000000010004100000078e021001970000002401300039000b00000002001d000000000021043500000000010004110000078e021001970000000401300039000a00000002001d0000000000210435000000a4013000390000000000010435000000440130003900000000000104350000078b0030009c000c00000003001d0000078b010000410000000001034019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f00000806011001c70000000d020000291e241e1a0000040f000000010020019000000aeb0000613d0000000c01000029000007b20010009c0000048f0000213d0000000c01000029000000400010043f000001200200043d000d00000002001d0000000e0020002a000005da0000413d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000d030000290000000e02300029000000000101043b0000000401100039000000000021041b000001c00100043d000007c80200004100000000002004430000078e01100197000d00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000f02000029000000000021043500000024013000390000000a0200002900000000002104350000080501000041000000000013043500000004013000390000000b020000290000000000210435000000a4013000390000000000010435000000440130003900000000000104350000078b0030009c000c00000003001d0000078b010000410000000001034019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f00000806011001c70000000d020000291e241e1a0000040f000000010020019000000b5a0000613d0000000c01000029000007b20010009c0000048f0000213d0000000c01000029000000400010043f000001200100043d0000000e02000029000000000021001a000005da0000413d0000000001210019000000c00200043d000000000021004b00000b7e0000813d0000000c0300002900000020013000390000000e0200002900000000002104350000000f0100002900000000001304350000078b0030009c0000078b03008041000000400130021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007ba011001c70000800d02000039000000030300003900000000060004110000081304000041000009280000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000af30000c13d00000b1d0000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000aff0000c13d00000a460000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000b0c0000c13d00000b1d0000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000b190000c13d0000078b06600197000000000004004b00000b2b0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000060016002100000078b0020009c0000078b020080410000004002200210000000000112019f00001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b380000c13d00000a460000013d000000400100043d0000004402100039000007b7030000410000000000320435000000240210003900000009030000390000072d0000013d000000800100043d0000078e0010019800000b670000c13d000000400100043d0000004402100039000007c2030000410000000000320435000000240210003900000012030000390000072d0000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b550000c13d00000a460000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000b620000c13d00000b1d0000013d000000a00100043d0000078e0010019800000b740000c13d000000400100043d0000004402100039000007c10300004100000b7a0000013d00000044021000390000081403000041000000000032043500000024021000390000000a030000390000072d0000013d000000c00100043d000000000001004b00000ba90000c13d000000400100043d0000004402100039000007c0030000410000000000320435000000240210003900000015030000390000072d0000013d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000400200043d000000000101043b000000000401041a000000ff0040019000000c190000c13d0000000103100039000000000503041a0000000403100039000000000303041a000000000053004b00000c290000813d00000044012000390000081203000041000000000031043500000024012000390000000e0300003900000c1e0000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000ba40000c13d00000b1d0000013d0000001001000029000000000010043f0000000601000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000800200043d0000078e02200197000000000101043b000000000301041a0000078f03300197000000000223019f000000000021041b000000a00200043d0000078e022001970000000103100039000000000403041a000007bb04400197000000000224019f000000c00400043d000000000004004b000007bc040000410000000004006019000000000242019f000000000023041b0000000202100039000000e00300043d000000000032041b000001000200043d000e00000002001d0000000032020434000d00000003001d000f00000002001d000007b20020009c0000048f0000213d0000000301100039000c00000001001d000000000101041a000000010010019000000001021002700000007f0220618f000b00000002001d0000001f0020008c00000000020000390000000102002039000000000121013f0000000100100190000007550000c13d0000000b01000029000000200010008c00000bff0000413d0000000c01000029000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000f030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b0000000b010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000bff0000813d000000000002041b0000000102200039000000000012004b00000bfb0000413d0000000f010000290000001f0010008c00000d650000a13d0000000c01000029000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000200200008a0000000f02200180000000000101043b00000dae0000c13d000000200300003900000dbb0000013d00000044021000390000080903000041000000000032043500000024021000390000000b030000390000072d0000013d000000440120003900000810030000410000000000310435000000240120003900000019030000390000000000310435000007b80100004100000000001204350000000401200039000000200300003900000000003104350000078b0020009c0000078b020080410000004001200210000007b9011001c700001e2600010430000008180640019700000001066001bf000000000061041b000000400620003900000000005604350000ff00004001900000000004000039000000010400c03900000020052000390000000000450435000000010400003900000000004204350000000204100039000000000404041a000000600520003900000000004504350000000304100039000000000404041a000000a0052000390000000000350435000000800320003900000000004304350000000503100039000000000303041a000000c00420003900000000003404350000000603100039000000000303041a0000078e03300197000000e00420003900000000003404350000000703100039000000000303041a000001000420003900000000003404350000000803100039000000000303041a000001200420003900000000003404350000000901100039000000000101041a0000078e01100197000001400320003900000000001304350000078b0020009c0000078b02008041000000400120021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007de011001c70000800d020000390000000203000039000008110400004100000010050000291e241e1a0000040f000000010020019000000a390000613d000000400100043d000c00000001001d00000ad70000013d00000010020000290000000000210435000000000020043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b0000000901100039000000000201041a000000400400043d000900000004001d000007cf010000410000000000140435000000040140003900000000030004100000000000310435000000240140003900000000000104350000078b0040009c0000078b010000410000000001044019000000400110021000000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f000007d0011001c70000078e022001971e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000090b000029000000090570002900000c9e0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000c9a0000c13d000000000006004b00000cab0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000d7e0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000007b20010009c0000048f0000213d00000001002001900000048f0000c13d000000400010043f000000200030008c00000a390000413d00000008010000290000000001010433000000000001004b000005a50000613d00000000010b04330000000c0200002900000000001204350000000701000039000000000101041a000000400400043d000007d10200004100000000002404350000000402400039000000200300003900000000003204350000000b02000029000000000302043300000024024000390000000000320435000c00000004001d00000044044000390000000502300210000000000b420019000000000003004b00000ee00000c13d0000078e021001970000000c0300002900000000013b00490000078b0010009c0000078b0100804100000060011002100000078b0030009c0000078b030080410000004003300210000000000131019f00000000030004140000078b0030009c0000078b03008041000000c003300210000000000131019f000700000002001d1e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000c0570002900000cf30000613d000000000801034f0000000c09000029000000008a08043c0000000009a90436000000000059004b00000cef0000c13d000000000006004b00000d000000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000f0c0000613d0000001f01400039000000600110018f0000000c02100029000000000012004b00000000010000390000000101004039000900000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000901000029000000400010043f000000200030008c00000a390000413d0000000c010000290000000002010433000000000002004b0000000001000039000000010100c039000000000012004b00000a390000c13d0000000903000029000000440130003900000024053000390000000403300039000000000002004b00000fef0000c13d000007d30200004100000009040000290000000000240435000000200200003900000000002304350000000b020000290000000003020433000000000035043500000005023002100000000002120019000000000003004b000011bc0000c13d000000090300002900000000013200490000078b0010009c0000078b0100804100000060011002100000078b0030009c0000078b0200004100000000020340190000004002200210000000000121019f00000000020004140000078b0020009c0000078b02008041000000c002200210000000000121019f00000007020000291e241e1a0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000090570002900000d4a0000613d000000000801034f0000000909000029000000008a08043c0000000009a90436000000000059004b00000d460000c13d000000000006004b00000d570000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000102c0000c13d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d600000c13d00000a460000013d0000000f0000006b000000000100001900000d6a0000613d0000000d0100002900000000010104330000000f040000290000000302400210000008190220027f0000081902200167000000000121016f0000000102400210000000000121019f00000dc90000013d000007ea0010009c00000d8a0000413d000000400100043d0000006402100039000007f60300004100000000003204350000004402100039000007f703000041000000000032043500000024021000390000002603000039000005c20000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d850000c13d00000a460000013d0000000a01000039000000000101041a0000008802100270000007eb02200197000007ec022001c7000000000020043f0000007801100210000007ed011001c7000000200010043f000007ee010000410000000002000414000000090010043f0000000d0000043f00000060010000390000004d0010043f0000004d0100008a0000006d0010043f0000078b0020009c0000078b02008041000000c001200210000007ef011001c700008006020000391e241e1a0000040f000000010020019000000da60000613d000000000101043b0009078e0010019c00000e0b0000c13d000000400100043d000008010200004100000000002104350000078b0010009c0000078b01008041000000400110021000000802011001c700001e2600010430000000010320008a00000005033002700000000004310019000000200300003900000001044000390000000e0600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b00000db40000c13d0000000f0020006c00000dc60000813d0000000f020000290000000302200210000000f80220018f000008190220027f00000819022001670000000e033000290000000003030433000000000223016f000000000021041b0000000f01000029000000010110021000000001011001bf0000000c02000029000000000012041b0000002002000039000000400100043d0000000002210436000000800300043d0000078e033001970000000000320435000000a00200043d0000078e0220019700000040031000390000000000230435000000c00200043d000000000002004b0000000002000039000000010200c039000000600310003900000000002304350000008002100039000000e00300043d0000000000320435000000a002100039000000a003000039000001000400043d0000000000320435000000c00210003900000000430404340000000000320435000000e002100039000000000003004b00000df00000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b00000de90000413d0000001f04300039000008160440019700000000033200190000000000030435000000000314004900000000022300190000078b0020009c0000078b0200804100000060022002100000078b0010009c0000078b010080410000004001100210000000000112019f00000000020004140000078b0020009c0000078b02008041000000c002200210000000000121019f000007be011001c70000800d020000390000000203000039000007bf0400004100000010050000291e241e1a0000040f00000001002001900000092c0000c13d00000a390000013d0000000201000039000000000101041a000800000001001d000007c80100004100000000001004430000000901000029000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d00000008010000290000078e01100197000000400400043d000007f00200004100000000002404350000002402400039000700000002001d000000000012043500000004024000390000000001000411000600000002001d000000000012043500000044010000390000000101100367000000000101043b0000006402400039000000e00300003900000000003204350000004402400039000500000002001d0000000000120435000000e401400039000000800200043d0000000000210435000800000004001d0000010401400039000000000002004b00000e420000613d00000000030000190000000004130019000000a005300039000000000505043300000000005404350000002003300039000000000023004b00000e3b0000413d000000000312001900000000000304350000001f02200039000008160220019700000008030000290000008403300039000001000420003900000000004304350000000001120019000000100200002900000000020204330000000001210436000000000002004b0000000f0600002900000e590000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000023004b00000e520000413d000000000312001900000000000304350000001f022000390000081602200197000000000112001900000008030000290000000002310049000000040220008a000000a40330003900000000002304350000000e0200002900000000020204330000000001210436000000000002004b0000000d0600002900000e710000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000023004b00000e6a0000413d000000000312001900000000000304350000001f022000390000081602200197000000000112001900000008030000290000000002310049000000040220008a000000c40330003900000000002304350000000c0200002900000000020204330000000001210436000000000002004b00000e880000613d00000000030000190000000c050000290000002005500039000000000405043300000000014104360000000103300039000000000023004b00000e820000413d000000080300002900000000013100490000078b0010009c0000078b01008041000000600110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000121019f0000078b0030009c0000078b020000410000000002034019000c0040002002180000000c011001af00000009020000291e241e1a0000040f000000010020019000000fd30000613d0000000801000029000007b20010009c0000048f0000213d0000000801000029000000400010043f00000044010000390000000101100367000000000101043b000003e82010011a000000000002004b00000fe00000c13d000c005a001000cd000000000001004b00000eac0000613d0000000c011000f90000005a0010008c000005da0000c13d0000000301000039000000000101041a000807f2001000d5000000000001004b00000eb40000613d00000008011000f9000007f20010009c000005da0000c13d0000000a010000290000000b020000291e2418aa0000040f000000000001004b000011a70000c13d000000400100043d00000044021000390000080003000041000000000032043500000024021000390000000d030000390000072d0000013d000008180120019700000005020000290000000000120435000000080000006b000000200200003900000000020060390000003f0120003900000816021001970000000601200029000000000021004b00000000020000390000000102004039000007b20010009c0000048f0000213d00000001002001900000048f0000c13d000000400010043f000000090100002900000080011000390000000602000029000000000021043500000007010000290000000001010433000000000001004b00000f180000c13d000000400100043d00000044021000390000080303000041000000000032043500000024021000390000000c030000390000072d0000013d0000000b05000029000000000600001900000ee60000013d0000000106600039000000000036004b00000cd30000813d0000000c07b0006a000000440770008a00000000047404360000002005500039000000000705043300000000980704340000078e0880019700000000088b04360000000009090433000000020090008c000012230000813d000000000098043500000040087000390000000008080433000000000008004b0000000008000039000000010800c0390000004009b000390000000000890435000000600770003900000000070704330000006008b00039000000800900003900000000009804350000008009b0003900000000080704330000000000890435000000a00bb00039000000000008004b00000ee30000613d00000000090000190000002007700039000000000a070433000000000bab04360000000109900039000000000089004b00000f050000413d00000ee30000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f130000c13d00000a460000013d0000000a01000039000000000101041a0000008802100270000007eb02200197000007ec022001c7000000000020043f0000007801100210000007ed011001c7000000200010043f000007ee010000410000000002000414000000090010043f0000000d0000043f00000060010000390000004d0010043f0000004d0100008a0000006d0010043f0000078b0020009c0000078b02008041000000c001200210000007ef011001c700008006020000391e241e1a0000040f000000010020019000000da60000613d000000000101043b0009078e0010019c00000da60000613d0000000201000039000000000101041a000800000001001d000007c80100004100000000001004430000000901000029000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d00000008010000290000078e01100197000000400400043d0000006402400039000000e00300003900000000003204350000004402400039000007fb03000041000000000032043500000024024000390000000000120435000007f0010000410000000000140435000000040140003900000000020004110000000000210435000000e401400039000000800200043d0000000000210435000800000004001d0000010401400039000000000002004b00000f660000613d00000000030000190000000004130019000000a005300039000000000505043300000000005404350000002003300039000000000023004b00000f5f0000413d000000000312001900000000000304350000001f02200039000008160220019700000008030000290000008403300039000001000420003900000000004304350000000001120019000000100200002900000000020204330000000001210436000000000002004b00000f7c0000613d000000000300001900000000041300190000000f05300029000000000505043300000000005404350000002003300039000000000023004b00000f750000413d000000000312001900000000000304350000001f022000390000081602200197000000000112001900000008030000290000000002310049000000040220008a000000a40330003900000000002304350000000c0200002900000000020204330000000001210436000000000002004b00000f930000613d000000000300001900000000041300190000000e05300029000000000505043300000000005404350000002003300039000000000023004b00000f8c0000413d000000000312001900000000000304350000001f022000390000081602200197000000000112001900000008030000290000000002310049000000040220008a000000c40330003900000000002304350000000d0200002900000000020204330000000001210436000000000002004b00000fab0000613d00000000030000190000000d040000290000002004400039000d00000004001d000000000404043300000000014104360000000103300039000000000023004b00000fa30000413d000000080200002900000000012100490000078b0010009c0000078b0100804100000060011002100000078b0020009c0000078b020080410000004002200210000000000121019f00000000020004140000078b0020009c0000078b02008041000000c002200210000000000121019f00000009020000291e241e1a0000040f0000000100200190000011e90000613d0000000801000029000007b20010009c0000048f0000213d0000000801000029000000400010043f0000000301000039000000000201041a000d07f2002000d500000064010000390000000101100367000000000101043b0000078e00100198000013410000c13d000000000002004b00000fcf0000613d0000000d012000f9000007f20010009c000005da0000c13d0000000a010000290000000b020000291e2418aa0000040f000013490000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000fdb0000c13d00000b1d0000013d000007b80100004100000008020000290000000000120435000000200100003900000006020000290000000000120435000000190100003900000007020000290000000000120435000007f101000041000000050200002900000000001204350000000c01000029000007b9011001c700001e26000104300000000702000039000000000202041a000007d20400004100000009060000290000000000460435000000200400003900000000004304350000000b030000290000000004030433000000000045043500000005034002100000000003130019000000000004004b000011f60000c13d0000078e02200197000000090400002900000000014300490000078b0010009c0000078b0100804100000060011002100000078b0040009c0000078b0300004100000000030440190000004003300210000000000131019f00000000030004140000078b0030009c0000078b03008041000000c003300210000000000131019f1e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000009057000290000101d0000613d000000000801034f0000000909000029000000008a08043c0000000009a90436000000000059004b000010190000c13d000000000006004b0000102a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000012290000613d0000001f01400039000000600110018f0000000902100029000000000012004b00000000010000390000000101004039000c00000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000c01000029000000400010043f000000200030008c00000a390000413d00000009010000290000000001010433000900000001001d0000078e0010009c00000a390000213d0000000c01000029000007cc0010009c0000048f0000213d0000000c020000290000008001200039000000400010043f000000090100002900000000021204360000000a01000029000700000002001d00000000001204350000000404000039000000000304041a000000400100043d0000000002310436000000000040043f000000000003004b0000105a0000613d000007ce040000410000000005000019000000000604041a000000000262043600000001044000390000000105500039000000000035004b000010540000413d00000000021200490000001f0220003900000816032001970000000002130019000000000032004b00000000030000390000000103004039000007b20020009c0000048f0000213d00000001003001900000048f0000c13d000000400020043f0000000c0400002900000060034000390000000802000029000600000003001d00000000002304350000004002400039000800000002001d00000000001204350000000801000039000000000101041a000a00000001001d0000000f010000290000000001010433000007c80200004100000000002004430000078e01100197000b00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d0000000a010000290000078e01100197000000400300043d000007d502000041000000000023043500000024043000390000000102000039000500000004001d00000000002404350000000402300039000300000002001d00000000001204350000078b0030009c000a00000003001d0000078b010000410000000001034019000400400010021800000000010004140000078b0010009c0000078b01008041000000c00110021000000004011001af000007d0011001c70000000b020000291e241e1a0000040f0000000100200190000014610000613d0000000a01000029000007b20010009c0000048f0000213d0000000a01000029000000400010043f0000000801000039000000000101041a0002078e0010019b0000000e010000290000000001010433000b078e0010019b000000000100041a0000078e011001970000000b0010006b0000146e0000c13d0000000d010000290000000001010433000007dc020000410000000a0300002900000000002304350000000202000029000000030300002900000000002304350000000502000029000000000012043500000000010004140000078b0010009c0000078b01008041000000c00110021000000004011001af000007d0011001c70000000b020000291e241e1a0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000a05700029000010cf0000613d000000000801034f0000000a09000029000000008a08043c0000000009a90436000000000059004b000010cb0000c13d000000000006004b000010dc0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000014ed0000613d0000001f01400039000000600110018f0000000a01100029000b00000001001d000007b20010009c0000048f0000213d0000000b01000029000000400010043f000000200030008c000000800600003900000a390000413d0000000a010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b00000a390000c13d0000000d0100002900000000010104330000000802000039000000000202041a000d00000002001d0000000e020000290000000002020433000007dd030000410000000b0700002900000000003704350000000403700039000000c00400003900000000004304350000000c0300002900000000030304330000078e04300197000000c403700039000000000043043500000007040000290000000005040433000000e40470003900000000006404350000014404700039000000000605043300000000006404350000016404700039000000000006004b000011140000613d0000000007000019000000200550003900000000080504330000078e0880019700000000048404360000000107700039000000000067004b0000110d0000413d0000000006340049000000080500002900000000050504330000000b070000290000010407700039000000000067043500000000060504330000000004640436000000000006004b000011250000613d00000000070000190000002005500039000000000805043300000000048404360000000107700039000000000067004b0000111f0000413d0000078e022001970000000005340049000000060300002900000000030304330000000b060000290000012406600039000000000056043500000000050304330000000004540436000f00000004001d000000000005004b0000113a0000613d0000000004000019000000200330003900000000060304330000000f070000290000000007670436000f00000007001d0000000104400039000000000054004b000011320000413d0000000b0400002900000064034000390000000000130435000000440340003900000000001304350000002401400039000000000021043500000084014000390000000000010435000007d901000041000000000010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007da011001c70000800b020000391e241e1f0000040f00000001002001900000171c0000613d0000000d020000290000078e02200197000000000101043b0000000b04000029000000a40340003900000000001304350000000f014000690000078b0010009c0000078b0100804100000060011002100000078b0040009c0000078b0300004100000000030440190000004003300210000000000131019f00000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f1e241e1a0000040f00000060031002700000078b03300197000000600030008c000000600400003900000000040340190000001f0640018f00000060074001900000000b05700029000011720000613d000000000801034f0000000b09000029000000008a08043c0000000009a90436000000000059004b0000116e0000c13d000000000006004b0000117f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000014f90000613d0000001f01400039000000e00110018f0000000b02100029000000000012004b00000000010000390000000101004039000f00000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000f01000029000000400010043f000000600030008c00000a390000413d0000000f02000029000000240120003900000004022000390000000b0300002900000040033000390000000003030433000000000003004b000015050000c13d000007b8030000410000000f04000029000000000034043500000020030000390000000000320435000000160200003900000000002104350000004401400039000007e10200004100000000002104350000078b0040009c0000078b040080410000004001400210000007b9011001c700001e260001043000000008040000290000000102400270000007f3032000d1000000000004004b000011af0000613d00000000022300d9000007f30020009c000005da0000c13d00000000041300d90000000102400210000000000013004b000011b60000413d00000000014200d9000000020010008c000005da0000c13d000000000002004b000012350000c13d000000400100043d0000004402100039000007ff0300004100000c150000013d0000000004000019000011c10000013d0000000104400039000000000034004b00000d2a0000813d000000090520006a000000440550008a00000000015104360000000b050000290000002005500039000b00000005001d000000000505043300000000760504340000078e0660019700000000066204360000000007070433000000010070008c000012230000213d000000000076043500000040065000390000000006060433000000000006004b0000000006000039000000010600c0390000004007200039000000000067043500000060055000390000000005050433000000600620003900000080070000390000000000760435000000800720003900000000060504330000000000670435000000a002200039000000000006004b000011be0000613d00000000070000190000002005500039000000000805043300000000028204360000000107700039000000000067004b000011e20000413d000011be0000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000011f10000c13d00000b1d0000013d0000000005000019000011fb0000013d0000000105500039000000000045004b00000ffd0000813d000000090630006a000000440660008a00000000016104360000000b060000290000002006600039000b00000006001d000000000606043300000000870604340000078e0770019700000000077304360000000008080433000000010080008c000012230000213d000000000087043500000040076000390000000007070433000000000007004b0000000007000039000000010700c0390000004008300039000000000078043500000060066000390000000006060433000000600730003900000080080000390000000000870435000000800830003900000000070604330000000000780435000000a003300039000000000007004b000011f80000613d00000000080000190000002006600039000000000906043300000000039304360000000108800039000000000078004b0000121c0000413d000011f80000013d000007d401000041000000000010043f0000002101000039000000040010043f000007cb0100004100001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012300000c13d00000a460000013d0000000c01000029000000c80010008c000008580000413d000000400100043d000b00000001001d000007c70010009c0000048f0000213d0000000c01000029000000640110011a000000010110027000000000431200d900000000024200490000000b050000290000016004500039000000400040043f0000012004500039000c00000004001d00000000001404350000010004500039000a00000004001d0000000000140435000000a001500039000700000001001d00000000000104350000002001500039000300000001001d0000000000010435000000000005043500000044010000390000000101100367000000000101043b0000006004500039000400000004001d0000000000340435000000c003500039000600000003001d00000000001304350000004001500039000100000001001d000000000021043500000140015000390000000902000029000800000001001d00000000002104350000008001500039000200000001001d0000000000010435000000e003500039000000000100041a0000078e01100197000500000003001d0000000000130435000000000020043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000b020000290000000002020433000000000002004b000000000101043b000000000201041a000007f402200197000000010220c1bf00000003030000290000000003030433000000000003004b000001000220c1bf000000000021041b000000010200002900000000020204330000000103100039000000000023041b000000040200002900000000020204330000000203100039000000000023041b000000020200002900000000020204330000000303100039000000000023041b000000070200002900000000020204330000000403100039000000000023041b000000060200002900000000020204330000000503100039000000000023041b000000050200002900000000020204330000078e022001970000000603100039000000000403041a0000078f04400197000000000224019f000000000023041b0000000a0200002900000000020204330000000703100039000000000023041b0000000c0200002900000000020204330000000803100039000000000023041b0000000901100039000000080200002900000000020204330000078e02200197000000000301041a0000078f03300197000000000223019f000000000021041b000001e002000039000000400100043d0000000002210436000001e004100039000000800300043d00000000003404350000020004100039000000000003004b000012be0000613d00000000050000190000000006450019000000a007500039000000000707043300000000007604350000002005500039000000000035004b000012b70000413d000000000543001900000000000504350000001f033000390000081603300197000000000443001900000000031400490000000000320435000000100200002900000000030204330000000002340436000000000003004b000012d20000613d000000000400001900000000052400190000000f06400029000000000606043300000000006504350000002004400039000000000034004b000012cb0000413d000000000423001900000000000404350000001f03300039000008160330019700000000022300190000000003120049000000400410003900000000003404350000000e0300002900000000030304330000000002320436000000000003004b000012e70000613d000000000400001900000000052400190000000d06400029000000000606043300000000006504350000002004400039000000000034004b000012e00000413d0000000004230019000000000004043500000044040000390000000104400367000000000404043b000000600510003900000000004504350000000b040000290000000004040433000000000004004b0000000004000039000000010400c0390000008005100039000000000045043500000003040000290000000004040433000000000004004b0000000004000039000000010400c039000000a005100039000000000045043500000001040000290000000004040433000000c005100039000000000045043500000004040000290000000004040433000000e0051000390000000000450435000000020400002900000000040404330000010005100039000000000045043500000007040000290000000004040433000001200510003900000000004504350000000604000029000000000404043300000140051000390000000000450435000000050400002900000000040404330000078e04400197000001600510003900000000004504350000000a040000290000000004040433000001800510003900000000004504350000000c040000290000000004040433000001a0051000390000000000450435000000080400002900000000040404330000078e04400197000001c00510003900000000004504350000001f033000390000081603300197000000000212004900000000023200190000078b0020009c0000078b0200804100000060022002100000078b0010009c0000078b010080410000004001100210000000000112019f00000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007be011001c70000800d020000390000000103000039000007f5040000411e241e1a0000040f000000010020019000000a390000613d000000400100043d000000090200002900000000002104350000078b0010009c0000078b010080410000004001100210000007b4011001c700001e250001042e000000000002004b000013460000613d0000000d022000f9000007f20020009c000005da0000c13d0000000a020000290000000b030000291e241ab80000040f000000000001004b00000eb90000613d0000000d040000290000000102400270000007f3032000d1000000000004004b000013530000613d00000000022300d9000007f30020009c000005da0000c13d00000000041300d90000000102400210000000000013004b0000135a0000413d00000000014200d9000000020010008c000005da0000c13d000000000002004b000011b80000613d000000400100043d000d00000001001d000007c70010009c0000048f0000213d0000000d040000290000016001400039000000400010043f0000012003400039000007fc01000041000700000003001d00000000001304350000010003400039000500000003001d000000000013043500000140034000390000000901000029000600000003001d0000000000130435000000c003400039000007fb01000041000400000003001d0000000000130435000000a001400039000300000001001d00000000000104350000008001400039000800000001001d00000000000104350000006001400039000a00000001001d00000000000104350000004001400039000b00000001001d00000000000104350000000001040436000100000001001d0000000000010435000000e00340003900000064010000390000000101100367000000000101043b0000078e01100197000200000003001d0000000000130435000007f30120012a000007fd0020009c000013950000813d000007f30020009c000008580000413d0000078b02100197000007fc022001290000000803000029000000000023043500000000021200a9000007fc022000990000078b02200197000013990000013d000007fe0220012a0000000a030000290000000000230435000007fc2010012a00000000012100490000000b0200002900000000001204350000000901000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000d020000290000000002020433000000000002004b000000000101043b000000000201041a000007f402200197000000010220c1bf00000001030000290000000003030433000000000003004b000001000220c1bf000000000021041b0000000b0200002900000000020204330000000103100039000000000023041b0000000a0200002900000000020204330000000203100039000000000023041b000000080200002900000000020204330000000303100039000000000023041b000000030200002900000000020204330000000403100039000000000023041b000000040200002900000000020204330000000503100039000000000023041b000000020200002900000000020204330000078e022001970000000603100039000000000403041a0000078f04400197000000000224019f000000000023041b000000050200002900000000020204330000000703100039000000000023041b000000070200002900000000020204330000000803100039000000000023041b0000000901100039000000060200002900000000020204330000078e02200197000000000301041a0000078f03300197000000000223019f000000000021041b000001e002000039000000400100043d0000000002210436000001e004100039000000800300043d00000000003404350000020004100039000000000003004b000013f20000613d00000000050000190000000006450019000000a007500039000000000707043300000000007604350000002005500039000000000035004b000013eb0000413d000000000543001900000000000504350000001f033000390000081603300197000000000443001900000000031400490000000000320435000000100200002900000000030204330000000002340436000000000003004b000014060000613d000000000400001900000000052400190000000f06400029000000000606043300000000006504350000002004400039000000000034004b000013ff0000413d000000000423001900000000000404350000001f03300039000008160330019700000000022300190000000003120049000000400410003900000000003404350000000c0300002900000000030304330000000002320436000000000003004b0000141b0000613d000000000400001900000000052400190000000e06400029000000000606043300000000006504350000002004400039000000000034004b000014140000413d000000000423001900000000000404350000006004100039000007fb0500004100000000005404350000000d040000290000000004040433000000000004004b0000000004000039000000010400c0390000008005100039000000000045043500000001040000290000000004040433000000000004004b0000000004000039000000010400c039000000a00510003900000000004504350000000b040000290000000004040433000000c00510003900000000004504350000000a040000290000000004040433000000e0051000390000000000450435000000080400002900000000040404330000010005100039000000000045043500000003040000290000000004040433000001200510003900000000004504350000000404000029000000000404043300000140051000390000000000450435000000020400002900000000040404330000078e0440019700000160051000390000000000450435000000050400002900000000040404330000018005100039000000000045043500000007040000290000000004040433000001a0051000390000000000450435000000060400002900000000040404330000078e04400197000001c00510003900000000004504350000001f033000390000081603300197000000000212004900000000023200190000078b0020009c0000078b0200804100000060022002100000078b0010009c0000078b010080410000004001100210000000000112019f00000000020004140000132e0000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000014690000c13d00000b1d0000013d000007c80100004100000000001004430000000b01000029000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d000000240130003900000001020000390000000000210435000007d50100004100000000001304350000000401300039000000020200002900000000002104350000078b0030009c000a00000003001d0000078b010000410000000001034019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007d0011001c70000000b020000291e241e1a0000040f0000000100200190000015460000613d0000000a01000029000007b20010009c0000048f0000213d0000000a01000029000000400010043f0000000e0100002900000000010104330000078e01100197000000000010043f0000000601000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000400200043d000500000002001d000007d60020009c0000048f0000213d000000000101043b0000000505000029000000a002500039000000400020043f000000000201041a0000078e0220019700000000062504360000000102100039000000000202041a000007d7002001980000000003000039000000010300c039000000400450003900000000003404350000078e02200197000300000006001d000000000026043500000060025000390000000203100039000000000303041a00000000003204350000000301100039000000000201041a000000010320019000000001042002700000007f0440618f000b00000004001d0000001f0040008c00000000040000390000000104002039000000000442013f0000000100400190000007550000c13d000000400400043d000400000004001d0000000b050000290000000004540436000a00000004001d000000000003004b000015530000613d000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000b0000006b0000000002000019000015590000613d000000000101043b00000000020000190000000a03200029000000000401041a0000000000430435000000010110003900000020022000390000000b0020006c000014e50000413d000015590000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014f40000c13d00000a460000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000015000000c13d00000a460000013d0000000903000039000000000303041a0000000e040000290000000004040433000007db050000410000000f0600002900000000005604350000078e044001970000000000420435000000090200002900000000002104350000078b0060009c0000078b010000410000000001064019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f0000078e02300197000007d0011001c71e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f057000290000152b0000613d000000000801034f0000000f09000029000000008a08043c0000000009a90436000000000059004b000015270000c13d000000000006004b000015380000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000170a0000c13d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000015410000c13d00000a460000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b0000154e0000c13d00000b1d0000013d00000818012001970000000a0200002900000000001204350000000b0000006b000000200200003900000000020060390000003f0120003900000816021001970000000401200029000000000021004b00000000020000390000000102004039000007b20010009c0000048f0000213d00000001002001900000048f0000c13d000000400010043f0000000501000029000000800110003900000004020000290000000000210435000000400200043d000007cd0020009c0000048f0000213d000000030100002900000000030104330000004001200039000000400010043f0000000101000039000000000412043600000000010000310000000101100367000000000601043b0000000000640435000000400100043d000007cd0010009c0000048f0000213d0000004005100039000000400050043f0000000105000039000000000551043600000000006504350000000006020433000000000006004b000005a50000613d0000000e0600002900000000060604330000078e0660019700000000006404350000000004010433000000000004004b000005a50000613d0000000d0400002900000000040404330000000000450435000000400400043d000b00000004001d000007cc0040009c0000048f0000213d0000078e043001970000000b050000290000008003500039000000400030043f000a00000004001d0000000003450436000300000003001d00000000002304350000000405000039000000000405041a000000400200043d0000000003420436000000000050043f000000000004004b000015a50000613d000007ce050000410000000006000019000000000705041a000000000373043600000001055000390000000106600039000000000046004b0000159f0000413d00000000032300490000001f0330003900000816043001970000000003240019000000000043004b00000000040000390000000104004039000007b20030009c0000048f0000213d00000001004001900000048f0000c13d000000400030043f0000000b040000290000006003400039000400000003001d00000000001304350000004001400039000200000001001d00000000002104350000000801000039000000000101041a000500000001001d0000000f010000290000000002010433000000400400043d000f00000004001d000007cf010000410000000000140435000000040140003900000000030004100000000000310435000000240140003900000000000104350000078b0040009c0000078b010000410000000001044019000000400110021000000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f000007d0011001c70000078e022001971e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f0b0000290000000f05700029000015e20000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000015de0000c13d000000000006004b000015ef0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000171d0000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000e00000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000e01000029000000400010043f000000200030008c000000800600003900000a390000413d0000000d01000029000000000201043300000000010b0433000007d8030000410000000e0700002900000000003704350000000403700039000000c00400003900000000004304350000000c0300002900000000030304330000078e04300197000000c403700039000000000043043500000007040000290000000005040433000000e40470003900000000006404350000014404700039000000000605043300000000006404350000016404700039000000000006004b000016210000613d0000000007000019000000200550003900000000080504330000078e0880019700000000048404360000000107700039000000000067004b0000161a0000413d0000000006340049000000080500002900000000050504330000000e070000290000010407700039000000000067043500000000060504330000000004640436000000000006004b000016320000613d00000000070000190000002005500039000000000805043300000000048404360000000107700039000000000067004b0000162c0000413d0000000003340049000000060500002900000000050504330000000e060000290000012406600039000000000036043500000000060504330000000003640436000000000006004b000016430000613d00000000040000190000002005500039000000000705043300000000037304360000000104400039000000000064004b0000163d0000413d0000000e050000290000000004530049000000040440008a000000240550003900000000004504350000000b0400002900000000040404330000078e0440019700000000044304360000000305000029000000000505043300000080060000390000000000640435000000800430003900000000060504330000000000640435000000a004300039000000000006004b0000165e0000613d0000000007000019000000200550003900000000080504330000078e0880019700000000048404360000000107700039000000000067004b000016570000413d0000000205000029000000000505043300000000063400490000004007300039000000000067043500000000060504330000000004640436000000000006004b0000166e0000613d00000000070000190000002005500039000000000805043300000000048404360000000107700039000000000067004b000016680000413d0000000405000029000000000505043300000000063400490000006003300039000000000063043500000000030504330000000004340436000f00000004001d000000000003004b000016810000613d0000000004000019000000200550003900000000060504330000000f070000290000000007670436000f00000007001d0000000104400039000000000034004b000016790000413d0000000e04000029000000640340003900000000002304350000004402400039000000000012043500000084014000390000000000010435000007d901000041000000000010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007da011001c70000800b020000391e241e1f0000040f00000001002001900000171c0000613d00000005020000290000078e02200197000000000101043b0000000e04000029000000a40340003900000000001304350000000f014000690000078b0010009c0000078b0100804100000060011002100000078b0040009c0000078b0300004100000000030440190000004003300210000000000131019f00000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f1e241e1a0000040f00000060031002700000078b03300197000000600030008c000000600400003900000000040340190000001f0640018f00000060074001900000000e05700029000016b70000613d000000000801034f0000000e09000029000000008a08043c0000000009a90436000000000059004b000016b30000c13d000000000006004b000016c40000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000017290000613d0000001f01400039000000e00110018f0000000e02100029000000000012004b00000000010000390000000101004039000f00000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000f01000029000000400010043f000000600030008c00000a390000413d0000000901000039000000000201041a0000000f04000029000000240140003900000009030000290000000000310435000007db01000041000000000014043500000004014000390000000a0300002900000000003104350000078b0040009c0000078b010000410000000001044019000000400110021000000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f000007d0011001c70000078e022001971e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f05700029000016fb0000613d000000000801034f0000000f09000029000000008a08043c0000000009a90436000000000059004b000016f70000c13d000000000006004b000017080000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000017350000613d0000001f01400039000000600110018f0000000f01100029000007b20010009c0000048f0000213d000000400010043f000000200030008c00000a390000413d0000000f020000290000000002020433000f00000002001d0000078e0020009c00000a390000213d0000000f0000006b000017410000c13d0000004402100039000007e00300004100000b400000013d000000000001042f0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017240000c13d00000a460000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017300000c13d00000a460000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000173c0000c13d00000a460000013d00000010010000290000078e01100197000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000201043b000000000302041a0000ff00003001900000000004000039000000010400c039000000400100043d00000020051000390000000000450435000000ff003001900000000003000039000000010300c03900000000003104350000000103200039000000000303041a000000400410003900000000003404350000000203200039000000000303041a000000600410003900000000003404350000000303200039000000000303041a000000800410003900000000003404350000000403200039000000000303041a000000a00410003900000000003404350000000503200039000000000303041a000000c00410003900000000003404350000000603200039000000000303041a0000078e03300197000000e00410003900000000003404350000000703200039000000000303041a000001000410003900000000003404350000000803200039000000000303041a000001200410003900000000003404350000000902200039000000000202041a0000078e02200197000001400310003900000000002304350000078b0010009c0000078b01008041000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007de011001c70000800d020000390000000203000039000007df040000410000000f050000291e241e1a0000040f000000010020019000000a390000613d000000400100043d0000000f020000290000133b0000013d0000001f03100039000000000023004b0000000004000019000007e804004041000007e805200197000007e803300197000000000653013f000000000053004b0000000003000019000007e803002041000007e80060009c000000000304c019000000000003004b000017ad0000613d0000000103100367000000000303043b000007b20030009c000017ad0000213d000000050430021000000020011000390000000004410019000000000024004b000017ad0000213d0000000002030019000000000001042d000000000100001900001e26000104300000001f03100039000000000023004b0000000004000019000007e804004041000007e805200197000007e803300197000000000653013f000000000053004b0000000003000019000007e803002041000007e80060009c000000000304c019000000000003004b000017c60000613d0000000103100367000000000303043b000007b20030009c000017c60000213d00000000013100190000002001100039000000000021004b000017c60000213d000000000001042d000000000100001900001e26000104300003000000000002000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b000018070000c13d000000400500043d0000000004650436000000000003004b000017f20000613d000100000004001d000300000006001d000200000005001d000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f0000000100200190000018130000613d0000000306000029000000000006004b000017f80000613d000000000201043b0000000001000019000000020500002900000001070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000061004b000017ea0000413d000017fa0000013d00000818012001970000000000140435000000000006004b00000020010000390000000001006039000017fa0000013d000000000100001900000002050000290000003f0110003900000816021001970000000001520019000000000021004b00000000020000390000000102004039000007b20010009c0000180d0000213d00000001002001900000180d0000c13d000000400010043f0000000001050019000000000001042d000007d401000041000000000010043f0000002201000039000000040010043f000007cb0100004100001e2600010430000007d401000041000000000010043f0000004101000039000000040010043f000007cb0100004100001e2600010430000000000100001900001e260001043000000000430104340000000001320436000000000003004b000018210000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b0000181a0000413d000000000231001900000000000204350000001f0230003900000816022001970000000001210019000000000001042d0001000000000002000100000002001d0000078e01100197000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f00000001002001900000187e0000613d000000400200043d0000081a0020009c000018800000813d000000000101043b0000016003200039000000400030043f000000000301041a0000ff00003001900000000004000039000000010400c03900000020052000390000000000450435000000ff003001900000000003000039000000010300c03900000000003204350000000103100039000000000303041a000000400420003900000000003404350000000203100039000000000403041a000000600320003900000000004304350000000303100039000000000303041a000000800520003900000000003504350000000405100039000000000505041a000000a00620003900000000005604350000000505100039000000000505041a000000c00620003900000000005604350000000605100039000000000505041a0000078e05500197000000e00620003900000000005604350000000705100039000000000505041a000001000620003900000000005604350000000805100039000000000505041a0000012006200039000000000056043500000140022000390000000901100039000000000101041a0000078e011001970000000000120435000000000004004b000018740000613d00000001014000b900000000024100d9000000010020006c000018860000c13d000000c80210011a000000000001042d000000000003004b0000188c0000613d000000010400002900000000213400d9000000000002004b000018920000c13d000000000043004b0000000002000019000018990000213d000000000001042d000000000100001900001e2600010430000007d401000041000000000010043f0000004101000039000000040010043f000007cb0100004100001e2600010430000007d401000041000000000010043f0000001101000039000000040010043f000007cb0100004100001e2600010430000007d401000041000000000010043f0000001201000039000000040010043f000007cb0100004100001e2600010430000000400100043d00000044021000390000081b03000041000000000032043500000024021000390000000e030000390000189f0000013d000000400100043d00000044021000390000081c030000410000000000320435000000240210003900000005030000390000000000320435000007b80200004100000000002104350000000402100039000000200300003900000000003204350000078b0010009c0000078b010080410000004001100210000007b9011001c700001e26000104300008000000000002000800000002001d000700000001001d000000400100043d0000081d0010009c00001a440000813d0000000b02000039000000000202041a0000000c03000039000000000303041a000000a404100039000000000034043500000024031000390000078a0400004100000000004304350000078e02200197000000840310003900000000002304350000006402100039000000000300041400000040040000390000000000420435000000440210003900000060040000390000000000420435000007ee020000410000000000210435000000040210003900000000000204350000078b0010009c0000078b0100804100000040011002100000078b0030009c0000078b03008041000000c002300210000000000112019f0000081e011001c700008006020000391e241e1a0000040f000000010020019000001a4a0000613d00000001020003670000000003000031000000000101043b000000000001004b00001a4d0000613d0000000b04000039000000000404041a000500000004001d000000400600043d0000081f040000410000000000460435000000040460003900000020050000390000000000540435000000240460003900000008050000290000000000540435000600000006001d000000440460003900040005005002180000000409400029000000000005004b000300000001001d000019380000613d000000070800002900000000058300490000001f0550008a000007e8065001970000000007000019000018fa0000013d0000001f01a000390000081601100197000000000a9a001900000000000a0435000000000991001900000020088000390000000107700039000000080070006c000019380000813d000000060a90006a000000440aa0008a0000000004a40436000000000a82034f000000000a0a043b000007e80ba00197000000000c6b013f00000000006b004b000000000b000019000007e80b00204100000000005a004b000000000d000019000007e80d004041000007e800c0009c000000000b0dc01900000000000b004b00001a420000613d000000070ba00029000000000ab2034f000000000a0a043b000007b200a0009c00001a420000213d000000200bb00039000000000ca300490000000000cb004b000000000d000019000007e80d002041000007e80cc00197000007e80eb00197000000000fce013f0000000000ce004b000000000c000019000007e80c004041000007e800f0009c000000000c0dc01900000000000c004b00001a420000c13d000000000cb2034f0000000009a90436000008160da00198000000000bd900190000192a0000613d000000000e0c034f000000000f09001900000000e10e043c000000000f1f04360000000000bf004b000019260000c13d0000001f0ea00190000018f10000613d0000000001dc034f000000030ce00210000000000d0b0433000000000dcd01cf000000000dcd022f000000000101043b000001000cc000890000000001c1022f0000000001c101cf0000000001d1019f00000000001b0435000018f10000013d00000005010000290000078e02100197000000060300002900000000013900490000078b0010009c0000078b0100804100000060011002100000078b0030009c0000078b030080410000004003300210000000000131019f00000000030004140000078b0030009c0000078b03008041000000c003300210000000000131019f000500000002001d1e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000605700029000019590000613d000000000801034f0000000609000029000000008a08043c0000000009a90436000000000059004b000019550000c13d000000000006004b000019660000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001a6d0000613d0000001f01400039000000600210018f0000000601200029000000000021004b00000000020000390000000102004039000007b20010009c00001a440000213d000000010020019000001a440000c13d000000400010043f000000200030008c00001a420000413d00000006010000290000000001010433000200000001001d000007c80100004100000000001004430000000501000029000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f000000010020019000001a790000613d000000000101043b000000000001004b00001a420000613d000000400900043d00000820010000410000000001190436000100000001001d00000004019000390000002002000039000000000021043500000024019000390000000802000029000000000021043500000044019000390000000408100029000000000002004b000600000009001d000019e70000613d00000000020000310000000707000029000000000472004900000001030003670000001f0440008a000007e8054001970000000006000019000019a90000013d0000001f0a900039000008160aa001970000000009890019000000000009043500000000088a001900000020077000390000000106600039000000080060006c0000000609000029000019e70000813d0000000009980049000000440990008a0000000001910436000000000973034f000000000909043b000007e80a900197000000000b5a013f00000000005a004b000000000a000019000007e80a004041000000000049004b000000000c000019000007e80c008041000007e800b0009c000000000a0cc01900000000000a004b00001a420000c13d000000070a9000290000000009a3034f000000000909043b000007b20090009c00001a420000213d000000200aa00039000000000b9200490000000000ba004b000000000c000019000007e80c002041000007e80bb00197000007e80da00197000000000ebd013f0000000000bd004b000000000b000019000007e80b004041000007e800e0009c000000000b0cc01900000000000b004b00001a420000c13d000000000ba3034f0000000008980436000008160c900198000000000ac80019000019d90000613d000000000d0b034f000000000e08001900000000df0d043c000000000efe04360000000000ae004b000019d50000c13d0000001f0d9001900000199f0000613d000000000bcb034f000000030cd00210000000000d0a0433000000000dcd01cf000000000dcd022f000000000b0b043b000001000cc00089000000000bcb022f000000000bcb01cf000000000bdb019f0000000000ba04350000199f0000013d00000000019800490000078b0010009c0000078b0100804100000060011002100000078b0090009c0000078b020000410000000002094019000800400020021800000008011001af00000000020004140000078b0020009c0000078b02008041000000c002200210000000000121019f0000000203000029000000000003004b000019fd0000613d000007be011001c7000080090200003900000005040000290000000005000019000019fe0000013d00000005020000291e241e1a0000040f0000000100200190000000060200002900001a7a0000613d000007b20020009c00001a440000213d000000400020043f0000082101000041000000000012043500000000010004140000078b0010009c0000078b01008041000000c00110021000000008011001af00000802011001c700000003020000290000078e022001971e241e1f0000040f000000060b00002900000060031002700000078b03300197000000a00030008c000000a00400003900000000040340190000001f0640018f000000e00740019000000000057b001900001a200000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001a1c0000c13d000000000006004b00001a2d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001a9a0000613d0000001f01400039000001e00110018f0000000001b10019000007b20010009c00001a440000213d000000400010043f000000a00030008c00001a420000413d00000000010b0433000008220010009c00001a420000213d0000008001b000390000000001010433000008220010009c00001a420000213d00000001010000290000000001010433000000640110011a000000000001042d000000000100001900001e2600010430000007d401000041000000000010043f0000004101000039000000040010043f000007cb0100004100001e260001043000000060021002700000078b0220019700001a4f0000013d000000000132034f00000000020000190000001f0520018f0000078d06200198000000400300043d000000000463001900001a5a0000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b00001a560000c13d000000000005004b00001a670000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060012002100000078b0030009c0000078b030080410000004002300210000000000112019f00001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900001aa50000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001a740000c13d00001aa50000013d000000000001042f00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900001a860000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00001a820000c13d0000078b06600197000000000004004b00001a940000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000060016002100000078b0020009c0000078b020080410000004002200210000000000121019f00001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900001aa50000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001aa10000c13d000000000005004b00001ab20000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000078b0020009c0000078b020080410000004002200210000000000112019f00001e2600010430000a000000000002000a00000003001d000900000002001d0000078e01100197000000000010043f0000000601000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000001d4f0000613d000000400500043d000008230050009c00001d510000813d000000000101043b000000a002500039000000400020043f000000000201041a0000078e0220019700000000042504360000000102100039000000000202041a0000078e03200197000700000004001d0000000000340435000007d7002001980000000002000039000000010200c0390000004007500039000000000027043500000060025000390000000203100039000000000303041a00000000003204350000000301100039000000000201041a000000010320019000000001082002700000007f0880618f0000001f0080008c00000000040000390000000104002039000000000043004b00001d5d0000c13d000000400600043d0000000004860436000000000003004b000800000005001d00001b0d0000613d000300000004001d000400000008001d000500000006001d000600000007001d000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f0000000805000029000000010020019000001d4f0000613d0000000408000029000000000008004b00001b130000613d000000000201043b00000000010000190000000607000029000000050600002900000003090000290000000003190019000000000402041a000000000043043500000001022000390000002001100039000000000081004b00001b050000413d00001b160000013d00000818012001970000000000140435000000000008004b0000002001000039000000000100603900001b160000013d0000000001000019000000060700002900000005060000290000003f0110003900000816021001970000000001620019000000000021004b00000000020000390000000102004039000007b20010009c00001d510000213d000000010020019000001d510000c13d000000400010043f00000080015000390000000000610435000000400600043d00000004016000390000000002070433000000000002004b00001d630000613d0000000002050433000000000300041a000008240400004100000000004604350000078e0220019700000000002104350000078b0060009c0000078b010000410000000001064019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f0000078e02300197000007cb011001c7000600000006001d1e241e1f0000040f000000060b00002900000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001b4b0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001b470000c13d000000000006004b00001b580000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001d720000613d0000001f01400039000000600110018f0000000005b10019000000000015004b00000000010000390000000101004039000007b20050009c000000080400002900001d510000213d000000010010019000001d510000c13d000000400050043f000000200030008c00001d4f0000413d00000000010b0433000600000001001d000000070100002900000000020104330000000001040433000008240300004100000000003504350000078e01100197000000040350003900000000001304350000078b0050009c0000078b010000410000000001054019000000400110021000000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f000007cb011001c70000078e02200197000800000005001d1e241e1f0000040f000000080b00002900000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001b8f0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001b8b0000c13d000000000006004b00001b9c0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001d7e0000613d0000001f01400039000000600110018f0000000001b10019000007b20010009c00001d510000213d000000400010043f000000200030008c00001d4f0000413d00000000030b0433000000000003004b00001d8a0000613d0000000602000029000007f3042000d1000000000002004b00001bb00000613d00000000022400d9000007f30020009c00001d570000c13d000300000004001d000400000003001d000008250010009c00001d510000213d0000000b02000039000000000202041a0000000c03000039000000000303041a000000a404100039000000000034043500000024031000390000078a0400004100000000004304350000078e02200197000000840310003900000000002304350000006402100039000000000300041400000040040000390000000000420435000000440210003900000060040000390000000000420435000007ee020000410000000000210435000000040210003900000000000204350000078b0010009c0000078b0100804100000040011002100000078b0030009c0000078b03008041000000c002300210000000000112019f0000081e011001c700008006020000391e241e1a0000040f000000010020019000001d9a0000613d00000001020003670000000003000031000000000101043b000500000001001d000000000001004b00001d9d0000613d0000000b01000039000000000101041a000700000001001d000000400500043d0000081f04000041000000000045043500000004045000390000002001000039000000000014043500000024045000390000000a010000290000000000140435000800000005001d000000440450003900060005001002180000000609400029000000000001004b00001c3c0000613d000000090800002900000000058300490000001f0550008a000007e806500197000000000700001900001bfe0000013d0000001f01a000390000081601100197000000000a9a001900000000000a04350000000009910019000000200880003900000001077000390000000a0070006c00001c3c0000813d000000080a90006a000000440aa0008a0000000004a40436000000000a82034f000000000a0a043b000007e80ba00197000000000c6b013f00000000006b004b000000000b000019000007e80b00404100000000005a004b000000000d000019000007e80d008041000007e800c0009c000000000b0dc01900000000000b004b00001d4f0000c13d000000090ba00029000000000ab2034f000000000a0a043b000007b200a0009c00001d4f0000213d000000200bb00039000000000ca300490000000000cb004b000000000d000019000007e80d002041000007e80cc00197000007e80eb00197000000000fce013f0000000000ce004b000000000c000019000007e80c004041000007e800f0009c000000000c0dc01900000000000c004b00001d4f0000c13d000000000cb2034f0000000009a90436000008160da00198000000000bd9001900001c2e0000613d000000000e0c034f000000000f09001900000000e10e043c000000000f1f04360000000000bf004b00001c2a0000c13d0000001f0ea0019000001bf50000613d0000000001dc034f000000030ce00210000000000d0b0433000000000dcd01cf000000000dcd022f000000000101043b000001000cc000890000000001c1022f0000000001c101cf0000000001d1019f00000000001b043500001bf50000013d00000007010000290000078e02100197000000080300002900000000013900490000078b0010009c0000078b0100804100000060011002100000078b0030009c0000078b030080410000004003300210000000000131019f00000000030004140000078b0030009c0000078b03008041000000c003300210000000000131019f000700000002001d1e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000080570002900001c5d0000613d000000000801034f0000000809000029000000008a08043c0000000009a90436000000000059004b00001c590000c13d000000000006004b00001c6a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001dbd0000613d0000001f01400039000000600210018f0000000801200029000000000021004b00000000020000390000000102004039000007b20010009c00001d510000213d000000010020019000001d510000c13d000000400010043f000000200030008c00001d4f0000413d00000008010000290000000001010433000200000001001d000007c80100004100000000001004430000000701000029000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f000000010020019000001dc90000613d000000000101043b000000000001004b00001d4f0000613d000000400900043d00000820010000410000000001190436000100000001001d00000004019000390000002002000039000000000021043500000024019000390000000a02000029000000000021043500000044019000390000000608100029000000000002004b000800000009001d00001ceb0000613d00000000020000310000000907000029000000000472004900000001030003670000001f0440008a000007e805400197000000000600001900001cad0000013d0000001f0a900039000008160aa001970000000009890019000000000009043500000000088a0019000000200770003900000001066000390000000a0060006c000000080900002900001ceb0000813d0000000009980049000000440990008a0000000001910436000000000973034f000000000909043b000007e80a900197000000000b5a013f00000000005a004b000000000a000019000007e80a004041000000000049004b000000000c000019000007e80c008041000007e800b0009c000000000a0cc01900000000000a004b00001d4f0000c13d000000090a9000290000000009a3034f000000000909043b000007b20090009c00001d4f0000213d000000200aa00039000000000b9200490000000000ba004b000000000c000019000007e80c002041000007e80bb00197000007e80da00197000000000ebd013f0000000000bd004b000000000b000019000007e80b004041000007e800e0009c000000000b0cc01900000000000b004b00001d4f0000c13d000000000ba3034f0000000008980436000008160c900198000000000ac8001900001cdd0000613d000000000d0b034f000000000e08001900000000df0d043c000000000efe04360000000000ae004b00001cd90000c13d0000001f0d90019000001ca30000613d000000000bcb034f000000030cd00210000000000d0a0433000000000dcd01cf000000000dcd022f000000000b0b043b000001000cc00089000000000bcb022f000000000bcb01cf000000000bdb019f0000000000ba043500001ca30000013d00000000019800490000078b0010009c0000078b01008041000000600110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000121019f0000078b0090009c0000078b020000410000000002094019000a0040002002180000000a011001af0000000203000029000000000003004b00001d010000613d000007be011001c700008009020000390000000704000029000000000500001900001d020000013d00000007020000291e241e1a0000040f0000000100200190000000080200002900001dca0000613d000007b20020009c00001d510000213d000000400020043f0000082101000041000000000012043500000000010004140000078b0010009c0000078b01008041000000c0011002100000000a011001af00000802011001c700000005020000290000078e022001971e241e1f0000040f000000080b00002900000060031002700000078b03300197000000a00030008c000000a00400003900000000040340190000001f0640018f000000e00740019000000000057b001900001d240000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001d200000c13d000000000006004b00001d310000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001de60000613d0000001f01400039000001e00110018f0000000001b10019000007b20010009c00001d510000213d000000400010043f000000a00030008c00001d4f0000413d00000000010b0433000008220010009c00001d4f0000213d0000008001b000390000000001010433000008220010009c00001d4f0000213d000000030500002900000004025000fa00000001010000290000000001010433000000640310011a00000000012300a9000000040050006b00001d4d0000213d00000000022100d9000000000032004b00001d570000c13d000007f30110012a000000000001042d000000000100001900001e2600010430000007d401000041000000000010043f0000004101000039000000040010043f000007cb0100004100001e2600010430000007d401000041000000000010043f0000001101000039000000040010043f000007cb0100004100001e2600010430000007d401000041000000000010043f0000002201000039000000040010043f000007cb0100004100001e2600010430000007b8020000410000000000260435000000200200003900000000002104350000004401600039000008270200004100000000002104350000002401600039000000110200003900000000002104350000078b0060009c0000078b060080410000004001600210000007b9011001c700001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900001df10000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001d790000c13d00001df10000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900001df10000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001d850000c13d00001df10000013d00000044021000390000082603000041000000000032043500000024021000390000000c030000390000000000320435000007b80200004100000000002104350000000402100039000000200300003900000000003204350000078b0010009c0000078b010080410000004001100210000007b9011001c700001e260001043000000060021002700000078b0220019700001d9f0000013d000000000132034f00000000020000190000001f0520018f0000078d06200198000000400300043d000000000463001900001daa0000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b00001da60000c13d000000000005004b00001db70000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060012002100000078b0030009c0000078b030080410000004002300210000000000112019f00001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900001df10000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001dc40000c13d00001df10000013d000000000001042f00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900001dd60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00001dd20000c13d0000078b06600197000000000004004b00001de40000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000600160021000001dff0000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900001df10000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001ded0000c13d000000000005004b00001dfe0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000078b0020009c0000078b020080410000004002200210000000000112019f00001e2600010430000000000001042f0000078b0010009c0000078b0100804100000040011002100000078b0020009c0000078b020080410000006002200210000000000112019f00000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007be011001c700008010020000391e241e1f0000040f000000010020019000001e180000613d000000000101043b000000000001042d000000000100001900001e260001043000001e1d002104210000000102000039000000000001042d0000000002000019000000000001042d00001e22002104230000000102000039000000000001042d0000000002000019000000000001042d00001e240000043200001e250001042e00001e260001043000000000000000000100016b3a464d69a0e34c8b719f571485a6faabaa092c5a12040dd5321a96c200000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000047f2a9bdad52d65b66287253cf5ca0d2b763b48600000000000000000000000000000000000000000000000100000000000000000000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000008da5cb5a00000000000000000000000000000000000000000000000000000000c55dae6200000000000000000000000000000000000000000000000000000000df2bafcc00000000000000000000000000000000000000000000000000000000df2bafcd00000000000000000000000000000000000000000000000000000000e408247000000000000000000000000000000000000000000000000000000000f23a6e6100000000000000000000000000000000000000000000000000000000c55dae6300000000000000000000000000000000000000000000000000000000d7e606bb00000000000000000000000000000000000000000000000000000000da2de2b400000000000000000000000000000000000000000000000000000000aa6a997300000000000000000000000000000000000000000000000000000000aa6a997400000000000000000000000000000000000000000000000000000000b4423e2600000000000000000000000000000000000000000000000000000000bc197c81000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000a3750e9d00000000000000000000000000000000000000000000000000000000a6f9dae1000000000000000000000000000000000000000000000000000000005122c4080000000000000000000000000000000000000000000000000000000078f9208d0000000000000000000000000000000000000000000000000000000078f9208e000000000000000000000000000000000000000000000000000000007bcf6cde0000000000000000000000000000000000000000000000000000000082c0ab21000000000000000000000000000000000000000000000000000000005122c40900000000000000000000000000000000000000000000000000000000532ab8a10000000000000000000000000000000000000000000000000000000064b87a700000000000000000000000000000000000000000000000000000000048de101d0000000000000000000000000000000000000000000000000000000048de101e0000000000000000000000000000000000000000000000000000000049da42ad000000000000000000000000000000000000000000000000000000004fccc826000000000000000000000000000000000000000000000000000000002649cdfd0000000000000000000000000000000000000000000000000000000033039d3d00000000000000000000000000000000000000000000000000000000367fc743000000000000000000000000000000000000000000000000fffffffffffffffff23a6e610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000fffffffffffffedf6e6f74206f776e6572000000000000000000000000000000000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000020000000000000000000000000000000000002000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002c22db012d065378eeffaebe1908e1afcbdc3be6e6adc686b5239d4e1144e74f50616972206d75737420626520617070726f7665640000000000000000000000496e76616c6964207661756c7420616464726573730000000000000000000000496e76616c6964204c50206164647265737300000000000000000000000000005a65726f2061646472657373206e6f7420616c6c6f776564000000000000000020677261647561746564000000000000000000000000000000000000000000006e6f7420726561647920746f206772616475617465206f7220616c72656164790000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe9f1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000021c03a97000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffffbf8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b00fdd58e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000f68790c700000000000000000000000000000000000000000000000000000000f39645510000000000000000000000000000000000000000000000000000000054af84a1000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000a22cb46500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f0000000000000000000000ff000000000000000000000000000000000000000050838b3400000000000000000000000000000000000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000e6a4390500000000000000000000000000000000000000000000000000000000095ea7b300000000000000000000000000000000000000000000000000000000b3175330000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000160000000000000000000000000ef0331b07d4c03673c89e5c43b02687583aca8fddab934113e3f052d3738bda46c70206661696c65640000000000000000000000000000000000000000000000736f6d657468696e67206261642068617070656e6564000000000000000000000000000000000000000000000000000000000020000000800000000000000000bc197c810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000008000000000000000006e6577206f776e657220697320746865207a65726f206164647265737300000000000000000000000000000000000000000000640000008000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b9ac9ff000000000000000000000000000000000000000000000000000000e8d4a510010000000000000000000000000000000000000000000000000000000000ffffff0000000000000000003d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000000000000000000005af43d82803e903d91602b57fd5bf39c4d535bdea7cd8a978f128b93471df48c7dbab89d703809115bdc118c235bfd0200000000000000000000000000000000000037000000090000000000000000a565dbad000000000000000000000000000000000000000000000000000000004d75737420626520646976697369626c6520627920313030300000000000000000000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000de0b6b3a7640000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009eebf593e2999b320300f54bf9a3684f78f4c621194ff1d94bbf97de231a3b60696c6c696f6e0000000000000000000000000000000000000000000000000000546f74616c20737570706c7920746f6f2068696768202d206d617820312074726c6c696f6e000000000000000000000000000000000000000000000000000000546f74616c20737570706c7920746f6f206c6f77202d206d696e203130206d690000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000001ad274800000000000000000000000000000000000000000033b2e3cadb136f08f640000000000000000000000000000000000000000000001743b34e18439b50200000062616420616d6f756e7473000000000000000000000000000000000000000000496e76616c696420707269636500000000000000000000000000000000000000b06ebf3d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000006e6f7420617070726f76656400000000000000000000000000000000000000006d636170206d7573742062652067726561746572207468616e20300000000000f242432a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4000000000000000000000000a9059cbb00000000000000000000000000000000000000000000000000000000a082022e93cfcd9f1da5f9236718053910f7e840da080c789c7845698dc032ff73656c6c206661696c6564000000000000000000000000000000000000000000706c756e67652070726f74656374696f6e000000000000000000000000000000616c7265616479206772616475617465640000000000000000000000000000001b579ea76e206cbd9ddc721b0fa25e81998b224ad6fba1366e08f6f960f3fe1750616972206e6f7420666f756e64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e8d4a5100023b872dd00000000000000000000000000000000000000000000000000000000616c726561647920726561647920746f20677261647561746500000000000000e9699692476d33666a890b3e41ba09c4c0c1abf5266f070b65764b82033754c0746172676574206e6f74206d657400000000000000000000000000000000000089f5adc174562e07c9c9b1cae7109bbecb21cf9d1b2847e550042b8653c54a0e627579206661696c6564000000000000000000000000000000000000000000000000000000000000000000000000000000000064000001e00000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000fffffffffffffea077726f6e67206d756c7469706c650000000000000000000000000000000000007878787878000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7c02000000000000000000000000000000000000c4000000000000000000000000d47eed4500000000000000000000000000000000000000000000000000000000ef9e5e2800000000000000000000000000000000000000000000000000000000feaf968c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff6070a0823100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7b4e6f206c6971756964697479000000000000000000000000000000000000000050616972206e6f7420617070726f7665640000000000000000000000000000003e48d1eef5e95419ebdeecc8480e9bebdaeef206f00ca86b64f2979c28675e9d

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

000000000000000000000000e642f7d1f07af75ed8198f0b4d68f14244baaab50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000259a75b880d1ac494fc84d8b77bcb4754eec3435000000000000000000000000a314ca85f158776847ad0a9dbb6c41fd3da5f9530000000000000000000000008cc9c8f3890b16264a70cd7b35fa52fe6e11984a000000000000000000000000756162873526a6b9d6a15064a5be33e2de38bb5c00000000000000000000000047f2a9bdad52d65b66287253cf5ca0d2b763b486ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace

-----Decoded View---------------
Arg [0] : _baseToken (address): 0xE642F7D1F07aF75ed8198F0b4D68F14244bAAAB5
Arg [1] : _stakingRewards (address): 0x0000000000000000000000000000000000000001
Arg [2] : _factory (address): 0x259A75B880d1ac494fC84D8b77bcb4754eeC3435
Arg [3] : _router (address): 0xa314cA85f158776847ad0A9dbB6C41Fd3DA5F953
Arg [4] : _msufactory (address): 0x8CC9c8f3890B16264A70Cd7b35FA52fe6E11984A
Arg [5] : _memecoinImplementation (address): 0x756162873526A6B9d6A15064a5bE33e2DE38Bb5C
Arg [6] : _pythPriceFeed (address): 0x47F2A9BDAd52d65b66287253cf5ca0D2b763b486
Arg [7] : _ethFeedId (bytes32): 0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000e642f7d1f07af75ed8198f0b4d68f14244baaab5
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 000000000000000000000000259a75b880d1ac494fc84d8b77bcb4754eec3435
Arg [3] : 000000000000000000000000a314ca85f158776847ad0a9dbb6c41fd3da5f953
Arg [4] : 0000000000000000000000008cc9c8f3890b16264a70cd7b35fa52fe6e11984a
Arg [5] : 000000000000000000000000756162873526a6b9d6a15064a5be33e2de38bb5c
Arg [6] : 00000000000000000000000047f2a9bdad52d65b66287253cf5ca0d2b763b486
Arg [7] : ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace


Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

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

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