Token NFTISMUS

NFT  
 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
416,296,226.296222 NFM

Holders:
213 addresses

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

The vision is to open the way for NFTs to be listed, insured and traded on exchanges. The valuation of the NFT results in a securitizable and salable value. The NFM is the main currency of the project.


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NFM

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-28
*/

//SPDX-License-Identifier:MIT

pragma solidity ^0.8.13;

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// LIBRARIES
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// SAFEMATH its a Openzeppelin Lib. Check out for more info @ https://docs.openzeppelin.com/contracts/2.x/api/math
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// INTERFACES
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// INFMCONTROLLER
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
interface INfmController {
    function _checkWLSC(address Controller, address Client)
        external
        pure
        returns (bool);

    function _getController() external pure returns (address);

    function _getNFM() external pure returns (address);

    function _getTimer() external pure returns (address);

    function _getPad() external pure returns (address);

    function _getMinting() external pure returns (address);

    function _getBurning() external pure returns (address);

    function _getSwap() external pure returns (address);

    function _getLiquidity() external pure returns (address);

    function _getUV2Pool() external pure returns (address);

    function _getBonusBuyBack() external pure returns (address, address);

    function _getNFMStaking() external pure returns (address);

    function _getNFMStakingTreasuryERC20() external view returns (address);

    function _getTreasury() external view returns (address);

    function _getAirdrop() external view returns (address);
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// INFMTIMER
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
interface INfmTimer {
    function _getStartTime() external pure returns (uint256);

    function _getEndMintTime() external pure returns (uint256);

    function _getDailyMintTime() external pure returns (uint256);

    function _getStartBurnTime() external pure returns (uint256);

    function _getUV2_LiquidityTime() external pure returns (uint256);

    function _getUV2_SwapTime() external pure returns (uint256);

    function _getExtraBonusAllTime() external view returns (uint256);

    function _getEndExtraBonusAllTime() external view returns (uint256);

    function _updateExtraBonusAll() external returns (bool);

    function _getLogicCountdown() external view returns (uint256);

    function _getStartBuyBackTime() external view returns (uint256);

    function _updateStartBuyBack() external returns (bool);

    function _getExtraBonusAirdropTime() external view returns (uint256);

    function _getEndExtraBonusAirdropTime() external view returns (uint256);

    function _getUV2_RemoveLiquidityTime() external view returns (uint256);

    function _updateExtraBonusAirdrop() external returns (bool);

    function _updateUV2_RemoveLiquidity_event() external returns (bool);
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// INFMPAD
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
interface INfmPad {
    function balancePAD(address account) external pure returns (uint256);

    function _PADCHECK(address from, uint256 amount) external returns (bool);
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// INFMMINTING
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
interface INfmMinting {
    function _minting(address sender) external returns (bool);

    function _updateBNFTAmount(address minter) external returns (bool);
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// INFMSWAP
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
interface INfmSwap {
    function _LiquifyAndSwap() external returns (bool);
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// INFMLIQUIDITY
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
interface INfmAddLiquidity {
    function _addLiquidity() external returns (bool);
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// INFMBURNING
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
interface INfmBurning {
    function checkburn(uint256 amount)
        external
        view
        returns (
            bool state,
            bool typ,
            uint256 bfee,
            uint256 stakefee
        );
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// INFMBUYBACK
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
interface INfmBuyBack {
    function _BuyBack() external returns (bool);
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// INFMBUYBACK
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
interface INfmUV2Pool {
    function redeemLPToken() external returns (bool);
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// INFMAIRDROP
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
interface INfmAirdrop {
    function _checkPayment(address sender) external view returns (uint256);

    function _getAirdrop(address Sender) external returns (bool);

    function _getWithdraw() external returns (bool);
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// INFMBONUS
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
interface INfmExtraBonus {
    function _getBonus(address winner) external returns (bool);

    function _returnPayoutRule() external view returns (uint256);

    function updateSchalter() external returns (bool);

    function _getWithdraw(
        address To,
        uint256 amount,
        bool percent
    ) external returns (bool);

    function updatePayoutRule() external returns (bool);
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/// @title NFM.sol
/// @author Fernando Viktor Seidl E-mail: [email protected]
/// @notice ERC20 Token Standard Contract with special extensions in the "_transfer" functionality *** NFM ERC20 TOKEN ***
/// @dev This ERC20 contract includes all functionalities of an ERC20 standard. The only difference to the standard are the built-in
///            extensions in the _transfer function.
///            The following interfaces are required for the smooth functionality of the extensions:
///            -    Controller Interface
///            -    Timer Interface
///            -    PAD Interface
///            -    Minting Interface
///            -    Swap Interface
///            -    Liquidity Interface
///            -    Burning Interface
///            -    Bonus Interface
///            -    Airdrop Interface
///            -    Vault Interface
///            -    LP-Redemption Interface
///            -    BuyBack Interface
///
///            TOKEN DETAILS:
///            -    Inicial total supply 400,000,000 NFM
///            -    Final total supply 1,000,000,000 NFM
///            -    Token Decimals 18
///            -    Token Name: Nftismus
///            -    Token Symbol: NFM
///
///            TOKEN EXTENSIONS:
///            -    PAD (Pump and Dump security): Used to protect against pump and dump actions. All accounts have a daily
///                 transaction limit of 1 million NFM. Large investors can whitelist this up to 1.5 million for a fee of 10,000 NFM
///            -    Minting: 7,600,000,000 NFM are created by minting in 8 years. 60% of the amount can only be obtained via
///                 the staking pool. 15% is allocated to the Uniswap protocol. 5% goes to AFT Governance. 10% to the developers
///                 and 10% to the NFM Treasury for investments to generate profits for the Bonus Event.
///            -    Burning and Community: 7,000,000,000 NFM are destroyed by burning process starting after 4 years with a burning
///                 fee of 2%  and a Community Fee of 2%. The burning fee will be maintained until the total amount has shrunk back to
///                 1 billion. When this is done, the burning fee will be credited to the community. The community fee is a staking contribution.
///                 Since the staking pool is funded by the minting protocol, which is finite. An infinite interest system is created by the
///                 community fee, so that interest can still be generated in the stake even after minting.
///            -    Liquidity: extension implements Uniswapv2 Protocol and adds liquidity to different markets.
///            -    Swap: extension implements Uniswapv2 Protocol and exchanges the NFM for different currencies for the Liquidity extension
///                 10% of every realized swap goes into the Bonus Event.
///            -    Timer: controls the timing of all extensions of the protocol
///            -    Bonus: allows NFM owners to receive profit distributions of the protocol in other currencies such
///                 as WBTC,WBNB,WETH,WMATIC,DAI,... every 100 days
///            -    Airdrop: allows NFM owners to receive profit distributions of the protocol in other currencies from the IDO
///                 Launchpad or listed Airdrops from other projects... every 6 days
///            -    LP-Redemption: Redeem the locked LP tokens step by step. 20% goes to the NFM Community through the Bonus Event. The
///                 remaining 80% goes to NFM Treasury, AFT Governance and Developers on a 40/30/10 split
///            -    Vault Interface: Makes investments in different protocols like Aave, Uniswap,... to generate additional profits for the bonus payouts.
///            -    BuyBack: Buyback program will start after reaching the final total supply of 1 billion NFM. Buybacks are executed monthly (30 day interval)
///                 via the decentralized markets on UniswapV2.
///
///            TOKEN USE CASE:
///            -    The principal application of the NFM token is the creation of value. This should not only be borne by the token itself,
///                 but also by future projects in the art, real estate and financial sectors
///            -    We as founders have the idea of ​​creating something completely new, which not only refers to the digital values, but also
///                 includes the physical real value.
///            -    The token can be viewed as an auto-generating yield token. With the help of the extensions, the NFM receives a share
///                 of bonus payments and airdrops. These are distributed via the stake or via trading
///            -    Our vision is to add real products to the returns in the future.
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
contract NFM {
    //include SafeMath
    using SafeMath for uint256;
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    STANDARD ERC20 MAPPINGS:
    _balances(owner address, nfm amount)
    _allowances(owner address, spender address, nfm amount)
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    mapping(address => uint256) public _balances;
    mapping(address => mapping(address => uint256)) public _allowances;
    mapping(address => uint256) private _BonusTracker;
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    CONTRACT EVENTS
    STANDARD ERC20 EVENTS:
    Transfer(sender, receiver, amount);
    Approval(owner, spender, amount);
    SPECIAL EVENT:
    Burning(sender, receiver, BurningFee, Timestamp
    );
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Burning(
        address indexed sender,
        address indexed receiver,
        uint256 BFee,
        uint256 Time
    );

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    ERC20 STANDARD ATTRIBUTES
    _TokenName           => Name of the Token (Nftismus)
    _TokenSymbol         => Symbol of the Token (NFM)
    _TokenDecimals      =>  Precision of the Token (18 Decimals)
    _TotalSupply            =>  Total Amount of Tokens (Inicial 400 Million NFM)
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    string private _TokenName;
    string private _TokenSymbol;
    uint256 private _TokenDecimals;
    uint256 private _TotalSupply;

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    SECURITY ATTRIBUTES
    _paused        => Pausing can only be commissioned by the Dao.
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    uint256 private _paused;
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    CONTROLLER
    OWNER = MSG.SENDER ownership will be handed over to dao
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    address private _Owner;
    INfmController public _Controller;
    address private _SController;

    constructor(
        string memory TokenName,
        string memory TokenSymbol,
        uint256 TokenDecimals,
        address Controller
    ) {
        _TokenName = TokenName;
        _TokenSymbol = TokenSymbol;
        _TokenDecimals = TokenDecimals;
        _TotalSupply = 400000000 * 10**TokenDecimals;
        _Owner = msg.sender;
        _SController = Controller;
        INfmController Cont = INfmController(Controller);
        _Controller = Cont;
        _balances[_Owner] = _TotalSupply;
        emit Transfer(address(0), _Owner, _TotalSupply);
        _paused = 0;
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @name() returns (string);
    Strandard ERC20 Function
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function name() public view returns (string memory) {
        return _TokenName;
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @symbol() returns (string);
    Strandard ERC20 Function
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function symbol() public view returns (string memory) {
        return _TokenSymbol;
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @decimals() returns (uint256);
    Strandard ERC20 Function
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function decimals() public view returns (uint256) {
        return _TokenDecimals;
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @totalSupply() returns (uint256);
    Strandard ERC20 Function
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function totalSupply() public view returns (uint256) {
        return _TotalSupply;
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @balanceOf(address account) returns (uint256);
    Strandard ERC20 Function
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @bonusCheck(address account) returns (uint256, uint256, bool);
    Special Function for Bonus Extension
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function bonusCheck(address account) public view returns (uint256) {
        require(
            _Controller._checkWLSC(_SController, msg.sender) == true ||
                msg.sender == _Owner,
            "oO"
        );
        return _BonusTracker[account];
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @allowance(address owner, address spender) returns (uint256);
    Strandard ERC20 Function
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function allowance(address owner, address spender)
        public
        view
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @onOffNFM() returns (bool);
    This function can only be executed by the Dao and is used to pause the protocol
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function onOffNFM() public returns (bool) {
        require(msg.sender != address(0), "0A");
        require(
            _Controller._checkWLSC(_SController, msg.sender) == true ||
                msg.sender == _Owner,
            "oO"
        );
        if (_paused == 0) {
            _paused = 1;
        } else {
            _paused = 0;
        }
        return true;
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @transfer(address to, uint256 amount)  returns (bool);
    Strandard ERC20 Function 
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function transfer(address to, uint256 amount) public returns (bool) {
        address owner = msg.sender;
        _transfer(owner, to, amount);
        return true;
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @transferFrom(address from, address to, uint256 amount)   returns (bool);
    Strandard ERC20 Function
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @_transfer(address from, address to, uint256 amount)  returns (bool);
    Strandard ERC20 Function with implemented Extensions and ReentrancyGuard as safety mechanism
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "0A");
        require(to != address(0), "0A");
        require(_paused == 0, "_P");
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "<B");
        //--------------------------------------------------------------------------------------------
        /**
        IF ADDRESS IS WHITELISTED
        THEN DON'T APPLY LOGIC SMART CONTRACT IS CALLING
        */
        //--------------------------------------------------------------------------------------------
        if (_Controller._checkWLSC(_SController, msg.sender) == true) {
            unchecked {
                _balances[from] = SafeMath.sub(fromBalance, amount);
            }
            if (
                block.timestamp <
                INfmTimer(address(_Controller._getTimer()))
                    ._getExtraBonusAllTime() &&
                block.timestamp <
                INfmTimer(address(_Controller._getTimer()))
                    ._getExtraBonusAirdropTime()
            ) {
                _BonusTracker[to] = _balances[to] + amount;
                _BonusTracker[from] = _balances[from];
            }

            _balances[to] += amount;

            emit Transfer(from, to, amount);
        } else {
            //--------------------------------------------------------------------------------------------
            /**
            IF ADDRESS IS NOT WHITELISTED 
            LOGIC MUST BE APPLIED
             */
            //--------------------------------------------------------------------------------------------

            //--------------------------------------------------------------------------------------------
            /**
            1 - )   APPLY PAD SECURITY
             */
            //--------------------------------------------------------------------------------------------
            require(
                INfmPad(_Controller._getPad())._PADCHECK(from, amount) == true,
                "PAD"
            );

            //--------------------------------------------------------------------------------------------
            /**
            INICIALIZE TIMER INTERFACE FOR ALL OTHER EXTENSION-CHECKS
             */
            //--------------------------------------------------------------------------------------------
            INfmTimer Timer = INfmTimer(_Controller._getTimer());

            //--------------------------------------------------------------------------------------------
            /**
            CHECK IF THE LOGIC OF THE PROTOCOL HAS BEEN INICIALIZED, IF NOT THEN
            NO EXTENSIONS  CAN BE APPLIED (TOKEN IS ALREADY ON
             */
            //--------------------------------------------------------------------------------------------
            if (
                Timer._getStartTime() > 0 &&
                Timer._getStartTime() < block.timestamp
            ) {
                //--------------------------------------------------------------------------------------------
                /**
                INICIALIZE TLOCKER VARIABLE
                (ALLOWS ONLY ONE EXTENSION TO BE EXECUTED AT A TIME)
                */
                //--------------------------------------------------------------------------------------------
                bool tlocker = false;

                //--------------------------------------------------------------------------------------------
                /**
                2 - )   MINTING EXTENSION 
                */
                //--------------------------------------------------------------------------------------------
                if (
                    block.timestamp <= Timer._getEndMintTime() &&
                    block.timestamp >= Timer._getDailyMintTime()
                ) {
                    INfmMinting Minter = INfmMinting(_Controller._getMinting());
                    if (Minter._minting(from) == true) {
                        tlocker = true;
                    }
                }
                //--------------------------------------------------------------------------------------------
                /**
                3 - )   LIQUIDITY EXTENSION 
                */
                //--------------------------------------------------------------------------------------------
                if (
                    tlocker == false &&
                    block.timestamp >= Timer._getUV2_LiquidityTime() &&
                    block.timestamp <= Timer._getEndMintTime()
                ) {
                    INfmAddLiquidity Liquidity = INfmAddLiquidity(
                        _Controller._getLiquidity()
                    );
                    if (Liquidity._addLiquidity() == true) {
                        INfmMinting(_Controller._getMinting())
                            ._updateBNFTAmount(msg.sender);
                        tlocker = true;
                    }
                }
                //--------------------------------------------------------------------------------------------
                /**
                4 - )   SWAP EXTENSION 
                */
                //--------------------------------------------------------------------------------------------
                if (
                    tlocker == false &&
                    block.timestamp >= Timer._getUV2_SwapTime() &&
                    block.timestamp <= Timer._getEndMintTime()
                ) {
                    //Start Swapping
                    INfmSwap Swapper = INfmSwap(_Controller._getSwap());
                    if (Swapper._LiquifyAndSwap() == true) {
                        INfmMinting(_Controller._getMinting())
                            ._updateBNFTAmount(msg.sender);
                        tlocker = true;
                    }
                }
                //--------------------------------------------------------------------------------------------
                /**
                7 - )   LP-TOKEN REDEMPTION 
                */
                //--------------------------------------------------------------------------------------------
                if (
                    tlocker == false &&
                    block.timestamp >= Timer._getUV2_RemoveLiquidityTime()
                ) {
                    //Start LP-Redemption
                    INfmUV2Pool UV2Pool = INfmUV2Pool(
                        _Controller._getUV2Pool()
                    );
                    if (UV2Pool.redeemLPToken() == true) {
                        tlocker = true;
                    }
                }
                //--------------------------------------------------------------------------------------------
                /**
                8 - )   BUYBACK EXTENSION 
                */
                //--------------------------------------------------------------------------------------------
                if (
                    tlocker == false &&
                    block.timestamp >= Timer._getStartBuyBackTime()
                ) {
                    //Start BuyBack
                    (, address BBack) = _Controller._getBonusBuyBack();
                    INfmBuyBack BuyBack = INfmBuyBack(BBack);
                    if (BuyBack._BuyBack() == true) {
                        tlocker = true;
                    }
                }
                //--------------------------------------------------------------------------------------------
                /**
                5 - )   BONUS EXTENSION 
                */
                //--------------------------------------------------------------------------------------------
                if (
                    tlocker == false &&
                    block.timestamp >= Timer._getExtraBonusAllTime() &&
                    _BonusTracker[from] >= 150 * 10**18
                ) {
                    if (block.timestamp >= Timer._getEndExtraBonusAllTime()) {
                        //bonus finalized
                        (address IBonus, ) = _Controller._getBonusBuyBack();
                        INfmExtraBonus Bonus = INfmExtraBonus(IBonus);
                        if (Bonus._returnPayoutRule() == 0) {
                            //Make Withdraw to Stake 50%
                            if (
                                Bonus._getWithdraw(
                                    address(
                                        _Controller
                                            ._getNFMStakingTreasuryERC20()
                                    ),
                                    50,
                                    true
                                ) == true
                            ) {
                                Bonus.updatePayoutRule();
                                tlocker = true;
                            }
                        } else if (Bonus._returnPayoutRule() == 1) {
                            //Make Withdraw to Treasury 50%
                            if (
                                Bonus._getWithdraw(
                                    address(_Controller._getTreasury()),
                                    0,
                                    false
                                ) == true
                            ) {
                                Bonus.updatePayoutRule();
                                tlocker = true;
                            }
                        } else {
                            Bonus.updatePayoutRule();
                            if (Bonus.updateSchalter() == true) {
                                Timer._updateExtraBonusAll();
                                tlocker = true;
                            }
                        }
                    } else {
                        //Bonus still going
                        (address IBonus, ) = _Controller._getBonusBuyBack();
                        INfmExtraBonus Bonus = INfmExtraBonus(IBonus);
                        if (Bonus._getBonus(from) == true) {
                            tlocker = true;
                        }
                    }
                }
                //--------------------------------------------------------------------------------------------
                /**
                6 - )   AIRDROP EXTENSION 
                */
                //--------------------------------------------------------------------------------------------
                if (
                    tlocker == false &&
                    block.timestamp >= Timer._getExtraBonusAirdropTime() &&
                    _BonusTracker[from] >= 150 * 10**18
                ) {
                    if (
                        block.timestamp >= Timer._getEndExtraBonusAirdropTime()
                    ) {
                        INfmAirdrop Airdrop = INfmAirdrop(
                            address(_Controller._getAirdrop())
                        );
                        if (Airdrop._getWithdraw() == true) {
                            tlocker = true;
                        }
                    } else {
                        //Airdrop already in place
                        INfmAirdrop Airdrop = INfmAirdrop(
                            address(_Controller._getAirdrop())
                        );
                        if (
                            Airdrop._checkPayment(from) !=
                            Timer._getEndExtraBonusAirdropTime()
                        ) {
                            if (Airdrop._getAirdrop(from) == true) {
                                tlocker = true;
                            }
                        }
                    }
                }
                //--------------------------------------------------------------------------------------------
                /**
                9 - )   BURNING EXTENSION 
                */
                //--------------------------------------------------------------------------------------------
                if (
                    tlocker == false &&
                    block.timestamp >= Timer._getStartBurnTime()
                ) {
                    //Start Burning

                    INfmBurning Burner = INfmBurning(_Controller._getBurning());
                    (
                        bool state,
                        bool typ,
                        uint256 bfee,
                        uint256 stakefee
                    ) = Burner.checkburn(amount);
                    if (state == true) {
                        tlocker = true;
                        if (typ == true) {
                            _burn(from, bfee);
                            fromBalance = _balances[from];
                            unchecked {
                                _balances[from] = SafeMath.sub(
                                    fromBalance,
                                    stakefee
                                );
                            }
                            _balances[
                                address(
                                    _Controller._getNFMStakingTreasuryERC20()
                                )
                            ] += stakefee;
                            emit Transfer(
                                from,
                                address(
                                    _Controller._getNFMStakingTreasuryERC20()
                                ),
                                stakefee
                            );
                            amount = SafeMath.sub(amount, (bfee + stakefee));
                        } else {
                            fromBalance = _balances[from];
                            unchecked {
                                _balances[from] = SafeMath.sub(
                                    fromBalance,
                                    stakefee * 2
                                );
                            }
                            _balances[
                                address(
                                    _Controller._getNFMStakingTreasuryERC20()
                                )
                            ] += stakefee * 2;
                            emit Transfer(
                                from,
                                address(
                                    _Controller._getNFMStakingTreasuryERC20()
                                ),
                                stakefee * 2
                            );
                            amount = SafeMath.sub(amount, stakefee * 2);
                        }
                    }
                }
            }
            fromBalance = _balances[from];
            unchecked {
                _balances[from] = SafeMath.sub(fromBalance, amount);
            }
            if (
                block.timestamp <
                INfmTimer(address(_Controller._getTimer()))
                    ._getExtraBonusAllTime() &&
                block.timestamp <
                INfmTimer(address(_Controller._getTimer()))
                    ._getExtraBonusAirdropTime()
            ) {
                _BonusTracker[to] = _balances[to] + amount;
                _BonusTracker[from] = _balances[from];
            }
            _balances[to] += amount;
            emit Transfer(from, to, amount);
        }
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @_spendAllowance(address owner, address spender, uint256 amount);
    Strandard ERC20 Function
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "<A");
            unchecked {
                _approve(
                    owner,
                    spender,
                    SafeMath.sub(currentAllowance, amount)
                );
            }
        }
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @_approve(address owner, address spender, uint256 amount);
    Strandard ERC20 Function
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "0A");
        require(spender != address(0), "0A");
        require(_paused == 0, "_P");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @approve(address spender, uint256 amount) return (bool);
    Strandard ERC20 Function
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @increaseAllowance(address spender, uint256 amount) return (bool);
    Strandard ERC20 Function
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = msg.sender;
        _approve(
            owner,
            spender,
            SafeMath.add(allowance(owner, spender), addedValue)
        );
        return true;
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @decreaseAllowance(address spender, uint256 amount) return (bool);
    Strandard ERC20 Function
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        address owner = msg.sender;
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "_D");
        unchecked {
            _approve(
                owner,
                spender,
                SafeMath.sub(currentAllowance, subtractedValue)
            );
        }
        return true;
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @_mint(address to, uint256 amount);
    Strandard ERC20 Function has been modified for the protocol
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function _mint(address to, uint256 amount) public virtual {
        require(msg.sender != address(0), "0A");
        require(to != address(0), "0A");
        require(_Controller._checkWLSC(_SController, msg.sender) == true, "oO");
        _TotalSupply += amount;
        _balances[to] += amount;
        _BonusTracker[to] = _balances[to];
        emit Transfer(address(0), to, amount);
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @_burn(address account, uint256 amount);
    Strandard ERC20 Function has been modified for the protocol
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "0A");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "A>B");
        unchecked {
            _balances[account] = SafeMath.sub(accountBalance, amount);
        }
        _BonusTracker[account] = _balances[account];
        _TotalSupply = SafeMath.sub(_TotalSupply, amount);
        emit Burning(account, address(0), amount, block.timestamp);
        emit Transfer(account, address(0), amount);
    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
    @_bridgeImp(address account, uint256 amount, uint256 amount) returns (bool);
    Bridge Implementation Function. This feature allows for future bridge implementations. Only allowed 
    addresses by the controller can call this function.
     */
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function _bridgeImp(
        address sender,
        uint256 amount,
        uint256 typ
    ) public virtual returns (bool) {
        require(msg.sender != address(0), "0A");
        require(sender != address(0), "0A");
        require(_Controller._checkWLSC(_SController, msg.sender) == true, "oO");
        if (typ == 0) {
            //mint
            _mint(sender, amount);
            return true;
        } else {
            //burn
            _burn(sender, amount);
            return true;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"TokenName","type":"string"},{"internalType":"string","name":"TokenSymbol","type":"string"},{"internalType":"uint256","name":"TokenDecimals","type":"uint256"},{"internalType":"address","name":"Controller","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"BFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"Time","type":"uint256"}],"name":"Burning","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_Controller","outputs":[{"internalType":"contract INfmController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"typ","type":"uint256"}],"name":"_bridgeImp","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"bonusCheck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onOffNFM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200591e3803806200591e833981810160405281019062000037919062000551565b83600390805190602001906200004f92919062000264565b5082600490805190602001906200006892919062000264565b508160058190555081600a6200007f919062000784565b6317d78400620000909190620007d5565b60068190555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600081905080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600654600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000249919062000847565b60405180910390a360006007819055505050505050620008c8565b828054620002729062000893565b90600052602060002090601f016020900481019282620002965760008555620002e2565b82601f10620002b157805160ff1916838001178555620002e2565b82800160010185558215620002e2579182015b82811115620002e1578251825591602001919060010190620002c4565b5b509050620002f19190620002f5565b5090565b5b8082111562000310576000816000905550600101620002f6565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200037d8262000332565b810181811067ffffffffffffffff821117156200039f576200039e62000343565b5b80604052505050565b6000620003b462000314565b9050620003c2828262000372565b919050565b600067ffffffffffffffff821115620003e557620003e462000343565b5b620003f08262000332565b9050602081019050919050565b60005b838110156200041d57808201518184015260208101905062000400565b838111156200042d576000848401525b50505050565b60006200044a6200044484620003c7565b620003a8565b9050828152602081018484840111156200046957620004686200032d565b5b62000476848285620003fd565b509392505050565b600082601f83011262000496576200049562000328565b5b8151620004a884826020860162000433565b91505092915050565b6000819050919050565b620004c681620004b1565b8114620004d257600080fd5b50565b600081519050620004e681620004bb565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200051982620004ec565b9050919050565b6200052b816200050c565b81146200053757600080fd5b50565b6000815190506200054b8162000520565b92915050565b600080600080608085870312156200056e576200056d6200031e565b5b600085015167ffffffffffffffff8111156200058f576200058e62000323565b5b6200059d878288016200047e565b945050602085015167ffffffffffffffff811115620005c157620005c062000323565b5b620005cf878288016200047e565b9350506040620005e287828801620004d5565b9250506060620005f5878288016200053a565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200068f5780860481111562000667576200066662000601565b5b6001851615620006775780820291505b8081029050620006878562000630565b945062000647565b94509492505050565b600082620006aa57600190506200077d565b81620006ba57600090506200077d565b8160018114620006d35760028114620006de5762000714565b60019150506200077d565b60ff841115620006f357620006f262000601565b5b8360020a9150848211156200070d576200070c62000601565b5b506200077d565b5060208310610133831016604e8410600b84101617156200074e5782820a90508381111562000748576200074762000601565b5b6200077d565b6200075d84848460016200063d565b9250905081840481111562000777576200077662000601565b5b81810290505b9392505050565b60006200079182620004b1565b91506200079e83620004b1565b9250620007cd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000698565b905092915050565b6000620007e282620004b1565b9150620007ef83620004b1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200082b576200082a62000601565b5b828202905092915050565b6200084181620004b1565b82525050565b60006020820190506200085e600083018462000836565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008ac57607f821691505b602082108103620008c257620008c162000864565b5b50919050565b61504680620008d86000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80634e6ec247116100a25780639f760e82116100715780639f760e821461030b578063a457c2d71461033b578063a9059cbb1461036b578063c85ec3a51461039b578063dd62ed3e146103cb57610116565b80634e6ec247146102715780636ebcf6071461028d57806370a08231146102bd57806395d89b41146102ed57610116565b806318160ddd116100e957806318160ddd146101b75780631f4a68cc146101d557806323b872dd146101f3578063313ce56714610223578063395093511461024157610116565b8063024c2ddd1461011b57806302c5fdd61461014b57806306fdde0314610169578063095ea7b314610187575b600080fd5b610135600480360381019061013091906144a6565b6103fb565b60405161014291906144ff565b60405180910390f35b610153610420565b6040516101609190614535565b60405180910390f35b610171610615565b60405161017e91906145e9565b60405180910390f35b6101a1600480360381019061019c9190614637565b6106a7565b6040516101ae9190614535565b60405180910390f35b6101bf6106be565b6040516101cc91906144ff565b60405180910390f35b6101dd6106c8565b6040516101ea91906146d6565b60405180910390f35b61020d600480360381019061020891906146f1565b6106ee565b60405161021a9190614535565b60405180910390f35b61022b610716565b60405161023891906144ff565b60405180910390f35b61025b60048036038101906102569190614637565b610720565b6040516102689190614535565b60405180910390f35b61028b60048036038101906102869190614637565b61074e565b005b6102a760048036038101906102a29190614744565b610a8c565b6040516102b491906144ff565b60405180910390f35b6102d760048036038101906102d29190614744565b610aa4565b6040516102e491906144ff565b60405180910390f35b6102f5610aec565b60405161030291906145e9565b60405180910390f35b61032560048036038101906103209190614744565b610b7e565b60405161033291906144ff565b60405180910390f35b61035560048036038101906103509190614637565b610d25565b6040516103629190614535565b60405180910390f35b61038560048036038101906103809190614637565b610d9c565b6040516103929190614535565b60405180910390f35b6103b560048036038101906103b09190614771565b610db8565b6040516103c29190614535565b60405180910390f35b6103e560048036038101906103e091906144a6565b610fce565b6040516103f291906144ff565b60405180910390f35b6001602052816000526040600020602052806000526040600020600091509150505481565b60008073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048790614810565b60405180910390fd5b60011515600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f40cbcd600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040518363ffffffff1660e01b815260040161051392919061483f565b602060405180830381865afa158015610530573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105549190614894565b151514806105af5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6105ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e59061490d565b60405180910390fd5b60006007540361060557600160078190555061060e565b60006007819055505b6001905090565b6060600380546106249061495c565b80601f01602080910402602001604051908101604052809291908181526020018280546106509061495c565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b5050505050905090565b60006106b4338484611055565b6001905092915050565b6000600654905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000803390506106ff858285611263565b61070a8585856112f6565b60019150509392505050565b6000600554905090565b600080339050610743818561073e6107388589610fce565b8761408f565b611055565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036107bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b490614810565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361082c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082390614810565b60405180910390fd5b60011515600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f40cbcd600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040518363ffffffff1660e01b81526004016108af92919061483f565b602060405180830381865afa1580156108cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f09190614894565b151514610932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109299061490d565b60405180910390fd5b806006600082825461094491906149bc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461099991906149bc565b925050819055506000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a8091906144ff565b60405180910390a35050565b60006020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054610afb9061495c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b279061495c565b8015610b745780601f10610b4957610100808354040283529160200191610b74565b820191906000526020600020905b815481529060010190602001808311610b5757829003601f168201915b5050505050905090565b600060011515600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f40cbcd600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040518363ffffffff1660e01b8152600401610c0392919061483f565b602060405180830381865afa158015610c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c449190614894565b15151480610c9f5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd59061490d565b60405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000803390506000610d378286610fce565b905083811015610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7390614a5e565b60405180910390fd5b610d908286610d8b84886140ed565b611055565b60019250505092915050565b600080339050610dad8185856112f6565b600191505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1f90614810565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90614810565b60405180910390fd5b60011515600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f40cbcd600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040518363ffffffff1660e01b8152600401610f1a92919061483f565b602060405180830381865afa158015610f37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5b9190614894565b151514610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f949061490d565b60405180910390fd5b60008203610fb857610faf848461074e565b60019050610fc7565b610fc28484614137565b600190505b9392505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb90614810565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90614810565b60405180910390fd5b600060075414611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90614aca565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161125691906144ff565b60405180910390a3505050565b600061126f8484610fce565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112f057818110156112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d290614b36565b60405180910390fd5b6112ef84846112ea84866140ed565b611055565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90614810565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90614810565b60405180910390fd5b600060075414611419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141090614aca565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690614ba2565b60405180910390fd5b60011515600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f40cbcd600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040518363ffffffff1660e01b815260040161152292919061483f565b602060405180830381865afa15801561153f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115639190614894565b1515036119945761157481836140ed565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663278abd2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611623573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116479190614bd7565b73ffffffffffffffffffffffffffffffffffffffff166315929a1c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b59190614c19565b421080156117c05750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663278abd2a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174f9190614bd7565b73ffffffffffffffffffffffffffffffffffffffff1663a707d8ab6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd9190614c19565b42105b156118d557816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461180f91906149bc565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461192391906149bc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161198791906144ff565b60405180910390a3614089565b60011515600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9a468ee6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a299190614bd7565b73ffffffffffffffffffffffffffffffffffffffff16636b2ab61f86856040518363ffffffff1660e01b8152600401611a63929190614c46565b6020604051808303816000875af1158015611a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa69190614894565b151514611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90614cbb565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663278abd2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7b9190614bd7565b905060008173ffffffffffffffffffffffffffffffffffffffff166320bb75176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bee9190614c19565b118015611c685750428173ffffffffffffffffffffffffffffffffffffffff166320bb75176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c669190614c19565b105b15613c215760008173ffffffffffffffffffffffffffffffffffffffff1663611bee096040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cde9190614c19565b4211158015611d5b57508173ffffffffffffffffffffffffffffffffffffffff1663c3b38b596040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d579190614c19565b4210155b15611e83576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7d80f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df39190614bd7565b9050600115158173ffffffffffffffffffffffffffffffffffffffff1663f086ebb5896040518263ffffffff1660e01b8152600401611e329190614cdb565b6020604051808303816000875af1158015611e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e759190614894565b151503611e8157600191505b505b60001515811515148015611f0557508173ffffffffffffffffffffffffffffffffffffffff16631719254e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f019190614c19565b4210155b8015611f7f57508173ffffffffffffffffffffffffffffffffffffffff1663611bee096040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7b9190614c19565b4211155b156121a9576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166326dc53c86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120179190614bd7565b9050600115158173ffffffffffffffffffffffffffffffffffffffff1663395d33846040518163ffffffff1660e01b81526004016020604051808303816000875af115801561206a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208e9190614894565b1515036121a757600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7d80f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121269190614bd7565b73ffffffffffffffffffffffffffffffffffffffff16631f2c8a6c336040518263ffffffff1660e01b815260040161215e9190614cdb565b6020604051808303816000875af115801561217d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a19190614894565b50600191505b505b6000151581151514801561222b57508173ffffffffffffffffffffffffffffffffffffffff1663098176956040518163ffffffff1660e01b8152600401602060405180830381865afa158015612203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122279190614c19565b4210155b80156122a557508173ffffffffffffffffffffffffffffffffffffffff1663611bee096040518163ffffffff1660e01b8152600401602060405180830381865afa15801561227d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a19190614c19565b4211155b156124cf576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663476247af6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233d9190614bd7565b9050600115158173ffffffffffffffffffffffffffffffffffffffff16632e59fb656040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b49190614894565b1515036124cd57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7d80f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244c9190614bd7565b73ffffffffffffffffffffffffffffffffffffffff16631f2c8a6c336040518263ffffffff1660e01b81526004016124849190614cdb565b6020604051808303816000875af11580156124a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c79190614894565b50600191505b505b6000151581151514801561255157508173ffffffffffffffffffffffffffffffffffffffff1663e2bee9016040518163ffffffff1660e01b8152600401602060405180830381865afa158015612529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254d9190614c19565b4210155b1561266e576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e02b73a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e99190614bd7565b9050600115158173ffffffffffffffffffffffffffffffffffffffff1663fdde317e6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190614894565b15150361266c57600191505b505b600015158115151480156126f057508173ffffffffffffffffffffffffffffffffffffffff16639c0f0c296040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ec9190614c19565b4210155b15612813576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8206e986040518163ffffffff1660e01b81526004016040805180830381865afa158015612763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127879190614cf6565b9150506000819050600115158173ffffffffffffffffffffffffffffffffffffffff166384b5680c6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156127e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128049190614894565b15150361281057600192505b50505b6000151581151514801561289557508173ffffffffffffffffffffffffffffffffffffffff166315929a1c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128919190614c19565b4210155b80156128e95750680821ab0d4414980000600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b156130b2578173ffffffffffffffffffffffffffffffffffffffff1663533f391d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295d9190614c19565b4210612f88576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8206e986040518163ffffffff1660e01b81526004016040805180830381865afa1580156129d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f59190614cf6565b509050600081905060008173ffffffffffffffffffffffffffffffffffffffff16632441ca236040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6e9190614c19565b03612c0c57600115158173ffffffffffffffffffffffffffffffffffffffff1663bb09edae600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375e4ebcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b249190614bd7565b603260016040518463ffffffff1660e01b8152600401612b4693929190614d71565b6020604051808303816000875af1158015612b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b899190614894565b151503612c07578073ffffffffffffffffffffffffffffffffffffffff1663280ae6a26040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c019190614894565b50600192505b612f81565b60018173ffffffffffffffffffffffffffffffffffffffff16632441ca236040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7d9190614c19565b03612e1a57600115158173ffffffffffffffffffffffffffffffffffffffff1663bb09edae600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dccf9d866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d339190614bd7565b6000806040518463ffffffff1660e01b8152600401612d5493929190614de3565b6020604051808303816000875af1158015612d73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d979190614894565b151503612e15578073ffffffffffffffffffffffffffffffffffffffff1663280ae6a26040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0f9190614894565b50600192505b612f80565b8073ffffffffffffffffffffffffffffffffffffffff1663280ae6a26040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8b9190614894565b50600115158173ffffffffffffffffffffffffffffffffffffffff166365058c186040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f019190614894565b151503612f7f578373ffffffffffffffffffffffffffffffffffffffff166398d350f16040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f799190614894565b50600192505b5b5b50506130b1565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8206e986040518163ffffffff1660e01b81526004016040805180830381865afa158015612ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301a9190614cf6565b5090506000819050600115158173ffffffffffffffffffffffffffffffffffffffff166302b23efd8a6040518263ffffffff1660e01b815260040161305f9190614cdb565b6020604051808303816000875af115801561307e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a29190614894565b1515036130ae57600192505b50505b5b6000151581151514801561313457508173ffffffffffffffffffffffffffffffffffffffff1663a707d8ab6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561310c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131309190614c19565b4210155b80156131885750680821ab0d4414980000600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b15613531578173ffffffffffffffffffffffffffffffffffffffff1663262fa37d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fc9190614c19565b421061331e576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663474193966040518163ffffffff1660e01b8152600401602060405180830381865afa158015613271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132959190614bd7565b9050600115158173ffffffffffffffffffffffffffffffffffffffff16638878f99e6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156132e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330c9190614894565b15150361331857600191505b50613530565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663474193966040518163ffffffff1660e01b8152600401602060405180830381865afa15801561338d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b19190614bd7565b90508273ffffffffffffffffffffffffffffffffffffffff1663262fa37d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134229190614c19565b8173ffffffffffffffffffffffffffffffffffffffff166379c7869a896040518263ffffffff1660e01b815260040161345b9190614cdb565b602060405180830381865afa158015613478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061349c9190614c19565b1461352e57600115158173ffffffffffffffffffffffffffffffffffffffff1663fd697d44896040518263ffffffff1660e01b81526004016134de9190614cdb565b6020604051808303816000875af11580156134fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135219190614894565b15150361352d57600191505b5b505b5b600015158115151480156135b357508173ffffffffffffffffffffffffffffffffffffffff1663cdf0f0656040518163ffffffff1660e01b8152600401602060405180830381865afa15801561358b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135af9190614c19565b4210155b15613c1f576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16629c3f316040518163ffffffff1660e01b8152600401602060405180830381865afa158015613626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061364a9190614bd7565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff166373bf85f68a6040518263ffffffff1660e01b815260040161368b91906144ff565b608060405180830381865afa1580156136a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136cc9190614e1a565b93509350935093506001151584151503613c195760019550600115158315150361397d576136fa8b83614137565b6000808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054975061374588826140ed565b6000808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375e4ebcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381c9190614bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461386591906149bc565b92505081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375e4ebcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138fd9190614bd7565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161395991906144ff565b60405180910390a361397689828461397191906149bc565b6140ed565b9850613c18565b6000808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205497506139cb88600283026140ed565b6000808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600281613a1a9190614e81565b600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375e4ebcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aae9190614bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613af791906149bc565b92505081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375e4ebcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8f9190614bd7565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600284613bea9190614e81565b604051613bf791906144ff565b60405180910390a3613c1589600283613c109190614e81565b6140ed565b98505b5b50505050505b505b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150613c6c82846140ed565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663278abd2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d3f9190614bd7565b73ffffffffffffffffffffffffffffffffffffffff166315929a1c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dad9190614c19565b42108015613eb85750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663278abd2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e479190614bd7565b73ffffffffffffffffffffffffffffffffffffffff1663a707d8ab6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eb59190614c19565b42105b15613fcd57826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f0791906149bc565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461401b91906149bc565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161407f91906144ff565b60405180910390a3505b50505050565b600080828461409e91906149bc565b9050838110156140e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140da90614f27565b60405180910390fd5b8091505092915050565b600061412f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506143df565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036141a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161419d90614810565b60405180910390fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561422c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161422390614f93565b60405180910390fd5b61423681836140ed565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614306600654836140ed565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167ff77158c6553fbad9c7c3e2f144cfd53961dd824a4953d83068340c3d3d18068b844260405161436c929190614fb3565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516143d291906144ff565b60405180910390a3505050565b6000838311158290614427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161441e91906145e9565b60405180910390fd5b50600083856144369190614fdc565b9050809150509392505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061447382614448565b9050919050565b61448381614468565b811461448e57600080fd5b50565b6000813590506144a08161447a565b92915050565b600080604083850312156144bd576144bc614443565b5b60006144cb85828601614491565b92505060206144dc85828601614491565b9150509250929050565b6000819050919050565b6144f9816144e6565b82525050565b600060208201905061451460008301846144f0565b92915050565b60008115159050919050565b61452f8161451a565b82525050565b600060208201905061454a6000830184614526565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561458a57808201518184015260208101905061456f565b83811115614599576000848401525b50505050565b6000601f19601f8301169050919050565b60006145bb82614550565b6145c5818561455b565b93506145d581856020860161456c565b6145de8161459f565b840191505092915050565b6000602082019050818103600083015261460381846145b0565b905092915050565b614614816144e6565b811461461f57600080fd5b50565b6000813590506146318161460b565b92915050565b6000806040838503121561464e5761464d614443565b5b600061465c85828601614491565b925050602061466d85828601614622565b9150509250929050565b6000819050919050565b600061469c61469761469284614448565b614677565b614448565b9050919050565b60006146ae82614681565b9050919050565b60006146c0826146a3565b9050919050565b6146d0816146b5565b82525050565b60006020820190506146eb60008301846146c7565b92915050565b60008060006060848603121561470a57614709614443565b5b600061471886828701614491565b935050602061472986828701614491565b925050604061473a86828701614622565b9150509250925092565b60006020828403121561475a57614759614443565b5b600061476884828501614491565b91505092915050565b60008060006060848603121561478a57614789614443565b5b600061479886828701614491565b93505060206147a986828701614622565b92505060406147ba86828701614622565b9150509250925092565b7f3041000000000000000000000000000000000000000000000000000000000000600082015250565b60006147fa60028361455b565b9150614805826147c4565b602082019050919050565b60006020820190508181036000830152614829816147ed565b9050919050565b61483981614468565b82525050565b60006040820190506148546000830185614830565b6148616020830184614830565b9392505050565b6148718161451a565b811461487c57600080fd5b50565b60008151905061488e81614868565b92915050565b6000602082840312156148aa576148a9614443565b5b60006148b88482850161487f565b91505092915050565b7f6f4f000000000000000000000000000000000000000000000000000000000000600082015250565b60006148f760028361455b565b9150614902826148c1565b602082019050919050565b60006020820190508181036000830152614926816148ea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061497457607f821691505b6020821081036149875761498661492d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149c7826144e6565b91506149d2836144e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a0757614a0661498d565b5b828201905092915050565b7f5f44000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a4860028361455b565b9150614a5382614a12565b602082019050919050565b60006020820190508181036000830152614a7781614a3b565b9050919050565b7f5f50000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ab460028361455b565b9150614abf82614a7e565b602082019050919050565b60006020820190508181036000830152614ae381614aa7565b9050919050565b7f3c41000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b2060028361455b565b9150614b2b82614aea565b602082019050919050565b60006020820190508181036000830152614b4f81614b13565b9050919050565b7f3c42000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b8c60028361455b565b9150614b9782614b56565b602082019050919050565b60006020820190508181036000830152614bbb81614b7f565b9050919050565b600081519050614bd18161447a565b92915050565b600060208284031215614bed57614bec614443565b5b6000614bfb84828501614bc2565b91505092915050565b600081519050614c138161460b565b92915050565b600060208284031215614c2f57614c2e614443565b5b6000614c3d84828501614c04565b91505092915050565b6000604082019050614c5b6000830185614830565b614c6860208301846144f0565b9392505050565b7f5041440000000000000000000000000000000000000000000000000000000000600082015250565b6000614ca560038361455b565b9150614cb082614c6f565b602082019050919050565b60006020820190508181036000830152614cd481614c98565b9050919050565b6000602082019050614cf06000830184614830565b92915050565b60008060408385031215614d0d57614d0c614443565b5b6000614d1b85828601614bc2565b9250506020614d2c85828601614bc2565b9150509250929050565b6000819050919050565b6000614d5b614d56614d5184614d36565b614677565b6144e6565b9050919050565b614d6b81614d40565b82525050565b6000606082019050614d866000830186614830565b614d936020830185614d62565b614da06040830184614526565b949350505050565b6000819050919050565b6000614dcd614dc8614dc384614da8565b614677565b6144e6565b9050919050565b614ddd81614db2565b82525050565b6000606082019050614df86000830186614830565b614e056020830185614dd4565b614e126040830184614526565b949350505050565b60008060008060808587031215614e3457614e33614443565b5b6000614e428782880161487f565b9450506020614e538782880161487f565b9350506040614e6487828801614c04565b9250506060614e7587828801614c04565b91505092959194509250565b6000614e8c826144e6565b9150614e97836144e6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ed057614ecf61498d565b5b828202905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614f11601b8361455b565b9150614f1c82614edb565b602082019050919050565b60006020820190508181036000830152614f4081614f04565b9050919050565b7f413e420000000000000000000000000000000000000000000000000000000000600082015250565b6000614f7d60038361455b565b9150614f8882614f47565b602082019050919050565b60006020820190508181036000830152614fac81614f70565b9050919050565b6000604082019050614fc860008301856144f0565b614fd560208301846144f0565b9392505050565b6000614fe7826144e6565b9150614ff2836144e6565b9250828210156150055761500461498d565b5b82820390509291505056fea2646970667358221220581abc9957424178eac13677ae8f5d6f1e44c6b6cbaf1583fef600bdfafd28fb64736f6c634300080d0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000f4dc0c3c0141477742078e4676c909650e29a71b00000000000000000000000000000000000000000000000000000000000000084e465449534d55530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004204e464d00000000000000000000000000000000000000000000000000000000

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000f4dc0c3c0141477742078e4676c909650e29a71b00000000000000000000000000000000000000000000000000000000000000084e465449534d55530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004204e464d00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : TokenName (string): NFTISMUS
Arg [1] : TokenSymbol (string): NFM
Arg [2] : TokenDecimals (uint256): 18
Arg [3] : Controller (address): 0xf4dc0c3c0141477742078e4676c909650e29a71b

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 000000000000000000000000f4dc0c3c0141477742078e4676c909650e29a71b
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 4e465449534d5553000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 204e464d00000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

16448:34764:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17102:66;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25477:392;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21153:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46052:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22824:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20013:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27045:276;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22264:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46705:331;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48554:399;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17051:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23398:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21705:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24019:275;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47539:508;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26361:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50676:533;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24792:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17102:66;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25477:392::-;25513:4;25560:1;25538:24;;:10;:24;;;25530:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;25654:4;25602:56;;:11;;;;;;;;;;;:22;;;25625:12;;;;;;;;;;;25639:10;25602:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;:97;;;;25693:6;;;;;;;;;;;25679:20;;:10;:20;;;25602:97;25580:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;25755:1;25744:7;;:12;25740:100;;25783:1;25773:7;:11;;;;25740:100;;;25827:1;25817:7;:11;;;;25740:100;25857:4;25850:11;;25477:392;:::o;21153:88::-;21190:13;21223:10;21216:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21153:88;:::o;46052:150::-;46118:4;46135:37;46144:10;46156:7;46165:6;46135:8;:37::i;:::-;46190:4;46183:11;;46052:150;;;;:::o;22824:91::-;22868:7;22895:12;;22888:19;;22824:91;:::o;20013:33::-;;;;;;;;;;;;;:::o;27045:276::-;27159:4;27176:15;27194:10;27176:28;;27215:38;27231:4;27237:7;27246:6;27215:15;:38::i;:::-;27264:27;27274:4;27280:2;27284:6;27264:9;:27::i;:::-;27309:4;27302:11;;;27045:276;;;;;:::o;22264:90::-;22305:7;22332:14;;22325:21;;22264:90;:::o;46705:331::-;46820:4;46842:13;46858:10;46842:26;;46879:127;46902:5;46922:7;46944:51;46957:25;46967:5;46974:7;46957:9;:25::i;:::-;46984:10;46944:12;:51::i;:::-;46879:8;:127::i;:::-;47024:4;47017:11;;;46705:331;;;;:::o;48554:399::-;48653:1;48631:24;;:10;:24;;;48623:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;48695:1;48681:16;;:2;:16;;;48673:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;48775:4;48723:56;;:11;;;;;;;;;;;:22;;;48746:12;;;;;;;;;;;48760:10;48723:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;48715:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48813:6;48797:12;;:22;;;;;;;:::i;:::-;;;;;;;;48847:6;48830:9;:13;48840:2;48830:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;48884:9;:13;48894:2;48884:13;;;;;;;;;;;;;;;;48864;:17;48878:2;48864:17;;;;;;;;;;;;;;;:33;;;;48934:2;48913:32;;48930:1;48913:32;;;48938:6;48913:32;;;;;;:::i;:::-;;;;;;;;48554:399;;:::o;17051:44::-;;;;;;;;;;;;;;;;;:::o;23398:110::-;23455:7;23482:9;:18;23492:7;23482:18;;;;;;;;;;;;;;;;23475:25;;23398:110;;;:::o;21705:92::-;21744:13;21777:12;21770:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21705:92;:::o;24019:275::-;24077:7;24171:4;24119:56;;:11;;;;;;;;;;;:22;;;24142:12;;;;;;;;;;;24156:10;24119:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;:97;;;;24210:6;;;;;;;;;;;24196:20;;:10;:20;;;24119:97;24097:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;24264:13;:22;24278:7;24264:22;;;;;;;;;;;;;;;;24257:29;;24019:275;;;:::o;47539:508::-;47659:4;47681:13;47697:10;47681:26;;47718:24;47745:25;47755:5;47762:7;47745:9;:25::i;:::-;47718:52;;47809:15;47789:16;:35;;47781:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;47867:139;47894:5;47918:7;47944:47;47957:16;47975:15;47944:12;:47::i;:::-;47867:8;:139::i;:::-;48035:4;48028:11;;;;47539:508;;;;:::o;26361:174::-;26423:4;26440:13;26456:10;26440:26;;26477:28;26487:5;26494:2;26498:6;26477:9;:28::i;:::-;26523:4;26516:11;;;26361:174;;;;:::o;50676:533::-;50799:4;50846:1;50824:24;;:10;:24;;;50816:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;50892:1;50874:20;;:6;:20;;;50866:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;50972:4;50920:56;;:11;;;;;;;;;;;:22;;;50943:12;;;;;;;;;;;50957:10;50920:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;50912:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51005:1;50998:3;:8;50994:208;;51043:21;51049:6;51057;51043:5;:21::i;:::-;51086:4;51079:11;;;;50994:208;51143:21;51149:6;51157;51143:5;:21::i;:::-;51186:4;51179:11;;50676:533;;;;;;:::o;24792:166::-;24891:7;24923:11;:18;24935:5;24923:18;;;;;;;;;;;;;;;:27;24942:7;24923:27;;;;;;;;;;;;;;;;24916:34;;24792:166;;;;:::o;45209:350::-;45362:1;45345:19;;:5;:19;;;45337:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;45409:1;45390:21;;:7;:21;;;45382:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;45448:1;45437:7;;:12;45429:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;45497:6;45467:11;:18;45479:5;45467:18;;;;;;;;;;;;;;;:27;45486:7;45467:27;;;;;;;;;;;;;;;:36;;;;45535:7;45519:32;;45528:5;45519:32;;;45544:6;45519:32;;;;;;:::i;:::-;;;;;;;;45209:350;;;:::o;44193:521::-;44328:24;44355:25;44365:5;44372:7;44355:9;:25::i;:::-;44328:52;;44415:17;44395:16;:37;44391:316;;44477:6;44457:16;:26;;44449:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;44534:146;44565:5;44593:7;44623:38;44636:16;44654:6;44623:12;:38::i;:::-;44534:8;:146::i;:::-;44391:316;44317:397;44193:521;;;:::o;27895:15796::-;28042:1;28026:18;;:4;:18;;;28018:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;28084:1;28070:16;;:2;:16;;;28062:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;28123:1;28112:7;;:12;28104:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;28142:19;28164:9;:15;28174:4;28164:15;;;;;;;;;;;;;;;;28142:37;;28213:6;28198:11;:21;;28190:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;28619:4;28567:56;;:11;;;;;;;;;;;:22;;;28590:12;;;;;;;;;;;28604:10;28567:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;28563:15121;;28687:33;28700:11;28713:6;28687:12;:33::i;:::-;28669:9;:15;28679:4;28669:15;;;;;;;;;;;;;;;:51;;;;28825:11;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28807:87;;;:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28772:15;:124;:273;;;;;28970:11;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28952:91;;;:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28917:15;:128;28772:273;28750:444;;;29116:6;29100:9;:13;29110:2;29100:13;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;29080:13;:17;29094:2;29080:17;;;;;;;;;;;;;;;:42;;;;29163:9;:15;29173:4;29163:15;;;;;;;;;;;;;;;;29141:13;:19;29155:4;29141:19;;;;;;;;;;;;;;;:37;;;;28750:444;29227:6;29210:9;:13;29220:2;29210:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;29270:2;29255:26;;29264:4;29255:26;;;29274:6;29255:26;;;;;;:::i;:::-;;;;;;;;28563:15121;;;30019:4;29961:62;;29969:11;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29961:40;;;30002:4;30008:6;29961:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;29935:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;30400:15;30428:11;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30400:52;;30911:1;30887:5;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:25;:85;;;;;30957:15;30933:5;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;30887:85;30865:12112;;;31387:12;31782:5;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31763:15;:42;;:111;;;;;31849:5;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31830:15;:44;;31763:111;31737:381;;;31917:18;31950:11;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31917:59;;32028:4;32003:29;;:6;:15;;;32019:4;32003:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;;31999:100;;32071:4;32061:14;;31999:100;31894:224;31737:381;32484:5;32473:16;;:7;:16;;;:89;;;;;32533:5;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32514:15;:48;;32473:89;:156;;;;;32606:5;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32587:15;:42;;32473:156;32447:618;;;32672:26;32744:11;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32672:122;;32850:4;32821:33;;:9;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;;32817:229;;32895:11;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32883:86;;;32970:10;32883:98;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33018:4;33008:14;;32817:229;32649:416;32447:618;33426:5;33415:16;;:7;:16;;;:84;;;;;33475:5;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33456:15;:43;;33415:84;:151;;;;;33543:5;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33524:15;:42;;33415:151;33389:580;;;33647:16;33675:11;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33647:51;;33754:4;33725:33;;:7;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;;33721:229;;33799:11;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33787:86;;;33874:10;33787:98;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33922:4;33912:14;;33721:229;33586:383;33389:580;34335:5;34324:16;;:7;:16;;;:95;;;;;34384:5;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34365:15;:54;;34324:95;34298:459;;;34505:19;34565:11;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34505:108;;34667:4;34640:31;;:7;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;;;34636:102;;34710:4;34700:14;;34636:102;34439:318;34298:459;35121:5;35110:16;;:7;:16;;;:88;;;;;35170:5;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35151:15;:47;;35110:88;35084:446;;;35281:13;35298:11;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35278:50;;;35351:19;35385:5;35351:40;;35440:4;35418:26;;:7;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;;35414:97;;35483:4;35473:14;;35414:97;35218:312;;35084:446;35892:5;35881:16;;:7;:16;;;:89;;;;;35941:5;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35922:15;:48;;35881:89;:149;;;;;36018:12;35995:13;:19;36009:4;35995:19;;;;;;;;;;;;;;;;:35;;35881:149;35855:2507;;;36096:5;:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36077:15;:51;36073:2270;;36201:14;36221:11;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36200:51;;;36278:20;36316:6;36278:45;;36383:1;36354:5;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;36350:1611;;36869:4;36513:360;;:5;:18;;;36620:11;;;;;;;;;;;:85;;;:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36785:2;36826:4;36513:352;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:360;;;36475:570;;36940:5;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37009:4;36999:14;;36475:570;36350:1611;;;37111:1;37082:5;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;37078:883;;37459:4;37244:219;;:5;:18;;;37309:11;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37375:1;37415:5;37244:211;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:219;;;37206:429;;37530:5;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37599:4;37589:14;;37206:429;37078:883;;;37699:5;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37784:4;37758:30;;:5;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;;;37754:180;;37825:5;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37898:4;37888:14;;37754:180;37078:883;36350:1611;36130:1854;;36073:2270;;;38063:14;38083:11;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38062:51;;;38140:20;38178:6;38140:45;;38241:4;38216:29;;:5;:15;;;38232:4;38216:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;;38212:108;;38288:4;38278:14;;38212:108;37990:353;;36073:2270;35855:2507;38726:5;38715:16;;:7;:16;;;:93;;;;;38775:5;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38756:15;:52;;38715:93;:153;;;;;38856:12;38833:13;:19;38847:4;38833:19;;;;;;;;;;;;;;;;:35;;38715:153;38689:1257;;;38960:5;:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38941:15;:55;38911:1016;;39047:19;39119:11;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39047:125;;39229:4;39203:30;;:7;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;;;39199:109;;39276:4;39266:14;;39199:109;39020:311;38911:1016;;;39416:19;39488:11;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39416:125;;39662:5;:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39602:7;:21;;;39624:4;39602:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:96;39568:336;;39790:4;39761:33;;:7;:19;;;39781:4;39761:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;;39757:120;;39841:4;39831:14;;39757:120;39568:336;39337:590;38911:1016;38689:1257;40310:5;40299:16;;:7;:16;;;:85;;;;;40359:5;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40340:15;:44;;40299:85;40273:2689;;;40466:18;40499:11;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40466:59;;40575:10;40612:8;40647:12;40686:16;40728:6;:16;;;40745:6;40728:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40548:204;;;;;;;;40788:4;40779:13;;:5;:13;;;40775:2168;;40831:4;40821:14;;40873:4;40866:11;;:3;:11;;;40862:2058;;40910:17;40916:4;40922;40910:5;:17::i;:::-;40972:9;:15;40982:4;40972:15;;;;;;;;;;;;;;;;40958:29;;41081:144;41132:11;41182:8;41081:12;:144::i;:::-;41063:9;:15;41073:4;41063:15;;;;;;;;;;;;;;;:162;;;;41488:8;41287:9;:197;41377:11;;;;;;;;;;;:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41287:197;;;;;;;;;;;;;;;;:209;;;;;;;:::i;:::-;;;;;;;;41660:11;;;;;;;;;;;:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41532:278;;41575:4;41532:278;;;41771:8;41532:278;;;;;;:::i;:::-;;;;;;;;41850:39;41863:6;41879:8;41872:4;:15;;;;:::i;:::-;41850:12;:39::i;:::-;41841:48;;40862:2058;;;41968:9;:15;41978:4;41968:15;;;;;;;;;;;;;;;;41954:29;;42077:148;42128:11;42189:1;42178:8;:12;42077;:148::i;:::-;42059:9;:15;42069:4;42059:15;;;;;;;;;;;;;;;:166;;;;42499:1;42488:8;:12;;;;:::i;:::-;42287:9;:197;42377:11;;;;;;;;;;;:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42287:197;;;;;;;;;;;;;;;;:213;;;;;;;:::i;:::-;;;;;;;;42664:11;;;;;;;;;;;:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42536:282;;42579:4;42536:282;;;42786:1;42775:8;:12;;;;:::i;:::-;42536:282;;;;;;:::i;:::-;;;;;;;;42858:34;42871:6;42890:1;42879:8;:12;;;;:::i;:::-;42858;:34::i;:::-;42849:43;;40862:2058;40775:2168;40404:2558;;;;;40273:2689;30988:11989;30865:12112;43005:9;:15;43015:4;43005:15;;;;;;;;;;;;;;;;42991:29;;43082:33;43095:11;43108:6;43082:12;:33::i;:::-;43064:9;:15;43074:4;43064:15;;;;;;;;;;;;;;;:51;;;;43220:11;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43202:87;;;:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43167:15;:124;:273;;;;;43365:11;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43347:91;;;:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43312:15;:128;43167:273;43145:444;;;43511:6;43495:9;:13;43505:2;43495:13;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;43475:13;:17;43489:2;43475:17;;;;;;;;;;;;;;;:42;;;;43558:9;:15;43568:4;43558:15;;;;;;;;;;;;;;;;43536:13;:19;43550:4;43536:19;;;;;;;;;;;;;;;:37;;;;43145:444;43620:6;43603:9;:13;43613:2;43603:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;43661:2;43646:26;;43655:4;43646:26;;;43665:6;43646:26;;;;;;:::i;:::-;;;;;;;;29299:14385;28563:15121;28007:15684;27895:15796;;;:::o;951:181::-;1009:7;1029:9;1045:1;1041;:5;;;;:::i;:::-;1029:17;;1070:1;1065;:6;;1057:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1123:1;1116:8;;;951:181;;;;:::o;1140:136::-;1198:7;1225:43;1229:1;1232;1225:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1218:50;;1140:136;;;;:::o;49465:565::-;49568:1;49549:21;;:7;:21;;;49541:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;49588:22;49613:9;:18;49623:7;49613:18;;;;;;;;;;;;;;;;49588:43;;49668:6;49650:14;:24;;49642:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;49739:36;49752:14;49768:6;49739:12;:36::i;:::-;49718:9;:18;49728:7;49718:18;;;;;;;;;;;;;;;:57;;;;49822:9;:18;49832:7;49822:18;;;;;;;;;;;;;;;;49797:13;:22;49811:7;49797:22;;;;;;;;;;;;;;;:43;;;;49866:34;49879:12;;49893:6;49866:12;:34::i;:::-;49851:12;:49;;;;49941:1;49916:53;;49924:7;49916:53;;;49945:6;49953:15;49916:53;;;;;;;:::i;:::-;;;;;;;;50011:1;49985:37;;49994:7;49985:37;;;50015:6;49985:37;;;;;;:::i;:::-;;;;;;;;49530:500;49465:565;;:::o;1284:226::-;1404:7;1437:1;1432;:6;;1440:12;1424:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1464:9;1480:1;1476;:5;;;;:::i;:::-;1464:17;;1501:1;1494:8;;;1284:226;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:474::-;909:6;917;966:2;954:9;945:7;941:23;937:32;934:119;;;972:79;;:::i;:::-;934:119;1092:1;1117:53;1162:7;1153:6;1142:9;1138:22;1117:53;:::i;:::-;1107:63;;1063:117;1219:2;1245:53;1290:7;1281:6;1270:9;1266:22;1245:53;:::i;:::-;1235:63;;1190:118;841:474;;;;;:::o;1321:77::-;1358:7;1387:5;1376:16;;1321:77;;;:::o;1404:118::-;1491:24;1509:5;1491:24;:::i;:::-;1486:3;1479:37;1404:118;;:::o;1528:222::-;1621:4;1659:2;1648:9;1644:18;1636:26;;1672:71;1740:1;1729:9;1725:17;1716:6;1672:71;:::i;:::-;1528:222;;;;:::o;1756:90::-;1790:7;1833:5;1826:13;1819:21;1808:32;;1756:90;;;:::o;1852:109::-;1933:21;1948:5;1933:21;:::i;:::-;1928:3;1921:34;1852:109;;:::o;1967:210::-;2054:4;2092:2;2081:9;2077:18;2069:26;;2105:65;2167:1;2156:9;2152:17;2143:6;2105:65;:::i;:::-;1967:210;;;;:::o;2183:99::-;2235:6;2269:5;2263:12;2253:22;;2183:99;;;:::o;2288:169::-;2372:11;2406:6;2401:3;2394:19;2446:4;2441:3;2437:14;2422:29;;2288:169;;;;:::o;2463:307::-;2531:1;2541:113;2555:6;2552:1;2549:13;2541:113;;;2640:1;2635:3;2631:11;2625:18;2621:1;2616:3;2612:11;2605:39;2577:2;2574:1;2570:10;2565:15;;2541:113;;;2672:6;2669:1;2666:13;2663:101;;;2752:1;2743:6;2738:3;2734:16;2727:27;2663:101;2512:258;2463:307;;;:::o;2776:102::-;2817:6;2868:2;2864:7;2859:2;2852:5;2848:14;2844:28;2834:38;;2776:102;;;:::o;2884:364::-;2972:3;3000:39;3033:5;3000:39;:::i;:::-;3055:71;3119:6;3114:3;3055:71;:::i;:::-;3048:78;;3135:52;3180:6;3175:3;3168:4;3161:5;3157:16;3135:52;:::i;:::-;3212:29;3234:6;3212:29;:::i;:::-;3207:3;3203:39;3196:46;;2976:272;2884:364;;;;:::o;3254:313::-;3367:4;3405:2;3394:9;3390:18;3382:26;;3454:9;3448:4;3444:20;3440:1;3429:9;3425:17;3418:47;3482:78;3555:4;3546:6;3482:78;:::i;:::-;3474:86;;3254:313;;;;:::o;3573:122::-;3646:24;3664:5;3646:24;:::i;:::-;3639:5;3636:35;3626:63;;3685:1;3682;3675:12;3626:63;3573:122;:::o;3701:139::-;3747:5;3785:6;3772:20;3763:29;;3801:33;3828:5;3801:33;:::i;:::-;3701:139;;;;:::o;3846:474::-;3914:6;3922;3971:2;3959:9;3950:7;3946:23;3942:32;3939:119;;;3977:79;;:::i;:::-;3939:119;4097:1;4122:53;4167:7;4158:6;4147:9;4143:22;4122:53;:::i;:::-;4112:63;;4068:117;4224:2;4250:53;4295:7;4286:6;4275:9;4271:22;4250:53;:::i;:::-;4240:63;;4195:118;3846:474;;;;;:::o;4326:60::-;4354:3;4375:5;4368:12;;4326:60;;;:::o;4392:142::-;4442:9;4475:53;4493:34;4502:24;4520:5;4502:24;:::i;:::-;4493:34;:::i;:::-;4475:53;:::i;:::-;4462:66;;4392:142;;;:::o;4540:126::-;4590:9;4623:37;4654:5;4623:37;:::i;:::-;4610:50;;4540:126;;;:::o;4672:148::-;4744:9;4777:37;4808:5;4777:37;:::i;:::-;4764:50;;4672:148;;;:::o;4826:175::-;4935:59;4988:5;4935:59;:::i;:::-;4930:3;4923:72;4826:175;;:::o;5007:266::-;5122:4;5160:2;5149:9;5145:18;5137:26;;5173:93;5263:1;5252:9;5248:17;5239:6;5173:93;:::i;:::-;5007:266;;;;:::o;5279:619::-;5356:6;5364;5372;5421:2;5409:9;5400:7;5396:23;5392:32;5389:119;;;5427:79;;:::i;:::-;5389:119;5547:1;5572:53;5617:7;5608:6;5597:9;5593:22;5572:53;:::i;:::-;5562:63;;5518:117;5674:2;5700:53;5745:7;5736:6;5725:9;5721:22;5700:53;:::i;:::-;5690:63;;5645:118;5802:2;5828:53;5873:7;5864:6;5853:9;5849:22;5828:53;:::i;:::-;5818:63;;5773:118;5279:619;;;;;:::o;5904:329::-;5963:6;6012:2;6000:9;5991:7;5987:23;5983:32;5980:119;;;6018:79;;:::i;:::-;5980:119;6138:1;6163:53;6208:7;6199:6;6188:9;6184:22;6163:53;:::i;:::-;6153:63;;6109:117;5904:329;;;;:::o;6239:619::-;6316:6;6324;6332;6381:2;6369:9;6360:7;6356:23;6352:32;6349:119;;;6387:79;;:::i;:::-;6349:119;6507:1;6532:53;6577:7;6568:6;6557:9;6553:22;6532:53;:::i;:::-;6522:63;;6478:117;6634:2;6660:53;6705:7;6696:6;6685:9;6681:22;6660:53;:::i;:::-;6650:63;;6605:118;6762:2;6788:53;6833:7;6824:6;6813:9;6809:22;6788:53;:::i;:::-;6778:63;;6733:118;6239:619;;;;;:::o;6864:152::-;7004:4;7000:1;6992:6;6988:14;6981:28;6864:152;:::o;7022:365::-;7164:3;7185:66;7249:1;7244:3;7185:66;:::i;:::-;7178:73;;7260:93;7349:3;7260:93;:::i;:::-;7378:2;7373:3;7369:12;7362:19;;7022:365;;;:::o;7393:419::-;7559:4;7597:2;7586:9;7582:18;7574:26;;7646:9;7640:4;7636:20;7632:1;7621:9;7617:17;7610:47;7674:131;7800:4;7674:131;:::i;:::-;7666:139;;7393:419;;;:::o;7818:118::-;7905:24;7923:5;7905:24;:::i;:::-;7900:3;7893:37;7818:118;;:::o;7942:332::-;8063:4;8101:2;8090:9;8086:18;8078:26;;8114:71;8182:1;8171:9;8167:17;8158:6;8114:71;:::i;:::-;8195:72;8263:2;8252:9;8248:18;8239:6;8195:72;:::i;:::-;7942:332;;;;;:::o;8280:116::-;8350:21;8365:5;8350:21;:::i;:::-;8343:5;8340:32;8330:60;;8386:1;8383;8376:12;8330:60;8280:116;:::o;8402:137::-;8456:5;8487:6;8481:13;8472:22;;8503:30;8527:5;8503:30;:::i;:::-;8402:137;;;;:::o;8545:345::-;8612:6;8661:2;8649:9;8640:7;8636:23;8632:32;8629:119;;;8667:79;;:::i;:::-;8629:119;8787:1;8812:61;8865:7;8856:6;8845:9;8841:22;8812:61;:::i;:::-;8802:71;;8758:125;8545:345;;;;:::o;8896:152::-;9036:4;9032:1;9024:6;9020:14;9013:28;8896:152;:::o;9054:365::-;9196:3;9217:66;9281:1;9276:3;9217:66;:::i;:::-;9210:73;;9292:93;9381:3;9292:93;:::i;:::-;9410:2;9405:3;9401:12;9394:19;;9054:365;;;:::o;9425:419::-;9591:4;9629:2;9618:9;9614:18;9606:26;;9678:9;9672:4;9668:20;9664:1;9653:9;9649:17;9642:47;9706:131;9832:4;9706:131;:::i;:::-;9698:139;;9425:419;;;:::o;9850:180::-;9898:77;9895:1;9888:88;9995:4;9992:1;9985:15;10019:4;10016:1;10009:15;10036:320;10080:6;10117:1;10111:4;10107:12;10097:22;;10164:1;10158:4;10154:12;10185:18;10175:81;;10241:4;10233:6;10229:17;10219:27;;10175:81;10303:2;10295:6;10292:14;10272:18;10269:38;10266:84;;10322:18;;:::i;:::-;10266:84;10087:269;10036:320;;;:::o;10362:180::-;10410:77;10407:1;10400:88;10507:4;10504:1;10497:15;10531:4;10528:1;10521:15;10548:305;10588:3;10607:20;10625:1;10607:20;:::i;:::-;10602:25;;10641:20;10659:1;10641:20;:::i;:::-;10636:25;;10795:1;10727:66;10723:74;10720:1;10717:81;10714:107;;;10801:18;;:::i;:::-;10714:107;10845:1;10842;10838:9;10831:16;;10548:305;;;;:::o;10859:152::-;10999:4;10995:1;10987:6;10983:14;10976:28;10859:152;:::o;11017:365::-;11159:3;11180:66;11244:1;11239:3;11180:66;:::i;:::-;11173:73;;11255:93;11344:3;11255:93;:::i;:::-;11373:2;11368:3;11364:12;11357:19;;11017:365;;;:::o;11388:419::-;11554:4;11592:2;11581:9;11577:18;11569:26;;11641:9;11635:4;11631:20;11627:1;11616:9;11612:17;11605:47;11669:131;11795:4;11669:131;:::i;:::-;11661:139;;11388:419;;;:::o;11813:152::-;11953:4;11949:1;11941:6;11937:14;11930:28;11813:152;:::o;11971:365::-;12113:3;12134:66;12198:1;12193:3;12134:66;:::i;:::-;12127:73;;12209:93;12298:3;12209:93;:::i;:::-;12327:2;12322:3;12318:12;12311:19;;11971:365;;;:::o;12342:419::-;12508:4;12546:2;12535:9;12531:18;12523:26;;12595:9;12589:4;12585:20;12581:1;12570:9;12566:17;12559:47;12623:131;12749:4;12623:131;:::i;:::-;12615:139;;12342:419;;;:::o;12767:152::-;12907:4;12903:1;12895:6;12891:14;12884:28;12767:152;:::o;12925:365::-;13067:3;13088:66;13152:1;13147:3;13088:66;:::i;:::-;13081:73;;13163:93;13252:3;13163:93;:::i;:::-;13281:2;13276:3;13272:12;13265:19;;12925:365;;;:::o;13296:419::-;13462:4;13500:2;13489:9;13485:18;13477:26;;13549:9;13543:4;13539:20;13535:1;13524:9;13520:17;13513:47;13577:131;13703:4;13577:131;:::i;:::-;13569:139;;13296:419;;;:::o;13721:152::-;13861:4;13857:1;13849:6;13845:14;13838:28;13721:152;:::o;13879:365::-;14021:3;14042:66;14106:1;14101:3;14042:66;:::i;:::-;14035:73;;14117:93;14206:3;14117:93;:::i;:::-;14235:2;14230:3;14226:12;14219:19;;13879:365;;;:::o;14250:419::-;14416:4;14454:2;14443:9;14439:18;14431:26;;14503:9;14497:4;14493:20;14489:1;14478:9;14474:17;14467:47;14531:131;14657:4;14531:131;:::i;:::-;14523:139;;14250:419;;;:::o;14675:143::-;14732:5;14763:6;14757:13;14748:22;;14779:33;14806:5;14779:33;:::i;:::-;14675:143;;;;:::o;14824:351::-;14894:6;14943:2;14931:9;14922:7;14918:23;14914:32;14911:119;;;14949:79;;:::i;:::-;14911:119;15069:1;15094:64;15150:7;15141:6;15130:9;15126:22;15094:64;:::i;:::-;15084:74;;15040:128;14824:351;;;;:::o;15181:143::-;15238:5;15269:6;15263:13;15254:22;;15285:33;15312:5;15285:33;:::i;:::-;15181:143;;;;:::o;15330:351::-;15400:6;15449:2;15437:9;15428:7;15424:23;15420:32;15417:119;;;15455:79;;:::i;:::-;15417:119;15575:1;15600:64;15656:7;15647:6;15636:9;15632:22;15600:64;:::i;:::-;15590:74;;15546:128;15330:351;;;;:::o;15687:332::-;15808:4;15846:2;15835:9;15831:18;15823:26;;15859:71;15927:1;15916:9;15912:17;15903:6;15859:71;:::i;:::-;15940:72;16008:2;15997:9;15993:18;15984:6;15940:72;:::i;:::-;15687:332;;;;;:::o;16025:153::-;16165:5;16161:1;16153:6;16149:14;16142:29;16025:153;:::o;16184:365::-;16326:3;16347:66;16411:1;16406:3;16347:66;:::i;:::-;16340:73;;16422:93;16511:3;16422:93;:::i;:::-;16540:2;16535:3;16531:12;16524:19;;16184:365;;;:::o;16555:419::-;16721:4;16759:2;16748:9;16744:18;16736:26;;16808:9;16802:4;16798:20;16794:1;16783:9;16779:17;16772:47;16836:131;16962:4;16836:131;:::i;:::-;16828:139;;16555:419;;;:::o;16980:222::-;17073:4;17111:2;17100:9;17096:18;17088:26;;17124:71;17192:1;17181:9;17177:17;17168:6;17124:71;:::i;:::-;16980:222;;;;:::o;17208:507::-;17287:6;17295;17344:2;17332:9;17323:7;17319:23;17315:32;17312:119;;;17350:79;;:::i;:::-;17312:119;17470:1;17495:64;17551:7;17542:6;17531:9;17527:22;17495:64;:::i;:::-;17485:74;;17441:128;17608:2;17634:64;17690:7;17681:6;17670:9;17666:22;17634:64;:::i;:::-;17624:74;;17579:129;17208:507;;;;;:::o;17721:86::-;17767:7;17796:5;17785:16;;17721:86;;;:::o;17813:160::-;17872:9;17905:62;17923:43;17932:33;17959:5;17932:33;:::i;:::-;17923:43;:::i;:::-;17905:62;:::i;:::-;17892:75;;17813:160;;;:::o;17979:149::-;18075:46;18115:5;18075:46;:::i;:::-;18070:3;18063:59;17979:149;;:::o;18134:448::-;18286:4;18324:2;18313:9;18309:18;18301:26;;18337:71;18405:1;18394:9;18390:17;18381:6;18337:71;:::i;:::-;18418:81;18495:2;18484:9;18480:18;18471:6;18418:81;:::i;:::-;18509:66;18571:2;18560:9;18556:18;18547:6;18509:66;:::i;:::-;18134:448;;;;;;:::o;18588:85::-;18633:7;18662:5;18651:16;;18588:85;;;:::o;18679:158::-;18737:9;18770:61;18788:42;18797:32;18823:5;18797:32;:::i;:::-;18788:42;:::i;:::-;18770:61;:::i;:::-;18757:74;;18679:158;;;:::o;18843:147::-;18938:45;18977:5;18938:45;:::i;:::-;18933:3;18926:58;18843:147;;:::o;18996:446::-;19147:4;19185:2;19174:9;19170:18;19162:26;;19198:71;19266:1;19255:9;19251:17;19242:6;19198:71;:::i;:::-;19279:80;19355:2;19344:9;19340:18;19331:6;19279:80;:::i;:::-;19369:66;19431:2;19420:9;19416:18;19407:6;19369:66;:::i;:::-;18996:446;;;;;;:::o;19448:808::-;19539:6;19547;19555;19563;19612:3;19600:9;19591:7;19587:23;19583:33;19580:120;;;19619:79;;:::i;:::-;19580:120;19739:1;19764:61;19817:7;19808:6;19797:9;19793:22;19764:61;:::i;:::-;19754:71;;19710:125;19874:2;19900:61;19953:7;19944:6;19933:9;19929:22;19900:61;:::i;:::-;19890:71;;19845:126;20010:2;20036:64;20092:7;20083:6;20072:9;20068:22;20036:64;:::i;:::-;20026:74;;19981:129;20149:2;20175:64;20231:7;20222:6;20211:9;20207:22;20175:64;:::i;:::-;20165:74;;20120:129;19448:808;;;;;;;:::o;20262:348::-;20302:7;20325:20;20343:1;20325:20;:::i;:::-;20320:25;;20359:20;20377:1;20359:20;:::i;:::-;20354:25;;20547:1;20479:66;20475:74;20472:1;20469:81;20464:1;20457:9;20450:17;20446:105;20443:131;;;20554:18;;:::i;:::-;20443:131;20602:1;20599;20595:9;20584:20;;20262:348;;;;:::o;20616:177::-;20756:29;20752:1;20744:6;20740:14;20733:53;20616:177;:::o;20799:366::-;20941:3;20962:67;21026:2;21021:3;20962:67;:::i;:::-;20955:74;;21038:93;21127:3;21038:93;:::i;:::-;21156:2;21151:3;21147:12;21140:19;;20799:366;;;:::o;21171:419::-;21337:4;21375:2;21364:9;21360:18;21352:26;;21424:9;21418:4;21414:20;21410:1;21399:9;21395:17;21388:47;21452:131;21578:4;21452:131;:::i;:::-;21444:139;;21171:419;;;:::o;21596:153::-;21736:5;21732:1;21724:6;21720:14;21713:29;21596:153;:::o;21755:365::-;21897:3;21918:66;21982:1;21977:3;21918:66;:::i;:::-;21911:73;;21993:93;22082:3;21993:93;:::i;:::-;22111:2;22106:3;22102:12;22095:19;;21755:365;;;:::o;22126:419::-;22292:4;22330:2;22319:9;22315:18;22307:26;;22379:9;22373:4;22369:20;22365:1;22354:9;22350:17;22343:47;22407:131;22533:4;22407:131;:::i;:::-;22399:139;;22126:419;;;:::o;22551:332::-;22672:4;22710:2;22699:9;22695:18;22687:26;;22723:71;22791:1;22780:9;22776:17;22767:6;22723:71;:::i;:::-;22804:72;22872:2;22861:9;22857:18;22848:6;22804:72;:::i;:::-;22551:332;;;;;:::o;22889:191::-;22929:4;22949:20;22967:1;22949:20;:::i;:::-;22944:25;;22983:20;23001:1;22983:20;:::i;:::-;22978:25;;23022:1;23019;23016:8;23013:34;;;23027:18;;:::i;:::-;23013:34;23072:1;23069;23065:9;23057:17;;22889:191;;;;:::o

Swarm Source

ipfs://581abc9957424178eac13677ae8f5d6f1e44c6b6cbaf1583fef600bdfafd28fb
Loading