ETH Price: $2,469.27 (-20.22%)
 

Overview

Max Total Supply

150,769.900290448167299218 2ND

Holders

96

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Second_Chance

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 4 of 4: SecondChance_Token.sol
// SPDX-License-Identifier: DEFIAT 2020
// thanks a million Gwei to MIT and Zeppelin. You guys rock!!!

// MAINNET VERSION. 

/*
*Website: www.defiat.net
*Telegram: https://t.me/defiat_crypto
*Twitter: https://twitter.com/DeFiatCrypto
*/

pragma solidity ^0.6.6;

import "./ERC20.sol";

contract Second_Chance is ERC20 { 

    using SafeMath for uint;
    using Address for address;

//== Variables ==
    mapping(address => bool) allowed;


    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    
    
    uint256 private contractInitialized;
    
    
    //External addresses
    IUniswapV2Router02 public uniswapRouterV2;
    IUniswapV2Factory public uniswapFactory;
    
    address public uniswapPair; //to determine.
    address public farm;
    address public DFT = address(0xB6eE603933E024d8d53dDE3faa0bf98fE2a3d6f1); //MainNet

    
    //Swapping metrics
    mapping(address => bool) public rugList;
    uint256 private ETHfee;    
    uint256 private DFTRequirement; 
    
    //TX metrics
    mapping (address => bool) public noFeeList;
    uint256 private feeOnTxMIN; // base 1000
    uint256 private feeOnTxMAX; // base 1000
    uint256 private burnOnSwap; // base 1000
    
    uint8 private txCount;
    uint256 private cumulVol;
    uint256 private txBatchStartTime;
    uint256 private avgVolume;
    uint256 private txCycle = 20;
    uint256 public currentFee;

    event TokenUpdate(address sender, string eventType, uint256 newVariable);
    event TokenUpdate(address sender, string eventType, address newAddress, uint256 newVariable, bool newBool);
        
//== Modifiers ==
    
    modifier onlyAllowed {
        require(allowed[msg.sender], "only Allowed");
        _;
    }
    
    modifier whitelisted(address _token) {
            require(rugList[_token] == true, "This token is not swappable");
        _;
    }

    
// ============================================================================================================================================================

    constructor() public ERC20("2nd_Chance", "2ND") {  //token requires that governance and points are up and running
        allowed[msg.sender] = true;
    }
    
    function initialSetup(address _farm) public payable onlyAllowed {
        require(msg.value >= 50*1e18, "50 ETH to LGE");
        contractInitialized = block.timestamp;
        
        //holding DFT increases your swap reward
        maxDFTBoost = 200;              //x3 max boost for 200 tokens held +200%

        setTXFeeBoundaries(8, 36);      //0.8% - 3.6%
        setBurnOnSwap(1);               // 0.1% uniBurn when swapping
        ETHfee = 5*1e16;                //0.05 ETH at start
        currentFee = feeOnTxMIN;
        
        setFarm(_farm); 
        
        CreateUniswapPair(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
        //0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D = UniswapV2Router02
        //0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f = UniswapV2Factory
        
        LGE();
        
        TokenUpdate(msg.sender, "Initialization", block.number);
    }
    
    //Pool UniSwap pair creation method (called by  initialSetup() )
    function CreateUniswapPair(address router, address factory) internal returns (address) {
        require(contractInitialized > 0, "Requires intialization 1st");
        
        uniswapRouterV2 = IUniswapV2Router02(router != address(0) ? router : 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapFactory = IUniswapV2Factory(factory != address(0) ? factory : 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f); 
        require(uniswapPair == address(0), "Token: pool already created");
        
        uniswapPair = uniswapFactory.createPair(address(uniswapRouterV2.WETH()),address(this));
        TokenUpdate(msg.sender, "Uniswap Pair Created", uniswapPair, block.timestamp, true);
        
        return uniswapPair;

    }
    
    function LGE() internal {
        ERC20._mint(msg.sender, 1e18 * 10000); //pre-mine 10,000 tokens for LGE rewards.
        
        ERC20._mint(address(this), 1e18 * 10000); //pre-mine 10,000 tokens to send to UniSwap -> 1st UNI liquidity
        uint256 _amount = address(this).balance;

        IUniswapV2Pair pair = IUniswapV2Pair(uniswapPair);
        
        //Wrap ETH
        address WETH = uniswapRouterV2.WETH();
        IWETH(WETH).deposit{value : _amount}();
        
        //send to UniSwap
        require(address(this).balance == 0 , "Transfer Failed");
        IWETH(WETH).transfer(address(pair),_amount);
        
        //Second balances transfer
        ERC20._transfer(address(this), address(pair), balanceOf(address(this)));
        pair.mint(address(this));       //mint LP tokens. locked here... no rug pull possible
        
        IUniswapV2Pair(uniswapPair).sync();
    }   

// ============================================================================================================================================================
    uint8 public swapNumber;
    uint256 public swapCycleStart;
    uint256 public swapCycleDuration;

    
    function swapfor2NDChance(address _ERC20swapped, uint256 _amount) public payable {
        require(rugList[_ERC20swapped], "Token not swappable");
        require(msg.value >= ETHfee, "pls add ETH in the payload");
        require(_amount > 0, "Cannot swap zero tokens");
        
        
        //limiting swaps to 2% of the total supply of a tokens
        if(_amount > IERC20(_ERC20swapped).totalSupply().div(50) )
        {_amount = IERC20(_ERC20swapped).totalSupply().div(50);} // "can swap maximum 2% of your total supply"
        

        //bump price
        sendETHtoUNI(); //wraps ETH and sends to UNI
        
        takeShitCoins(_ERC20swapped, _amount); // basic transferFrom

        //mint 2ND tokens
        uint256 _toMint = toMint(msg.sender, _ERC20swapped, _amount);
        mintChances(msg.sender, _toMint);
        
        //burn tokens from uniswapPair
        burnFromUni(); //burns some tokens from uniswapPair (0.1%)
        
        IFarm(farm).massUpdatePools(); //updates user's rewards on farm.
        
        TokenUpdate(msg.sender, "Token Swap", _ERC20swapped, _amount, true);
        
        
        /*Dynamic ETHfee management, every 'txCycle' swaps
        *Note is multiple Swap occur on the same block and the txCycle is reached 
        *users may experience errors du eto incorrect payload
        *next swap (next block) will be correct
        */
        swapNumber++;
        if(swapNumber >= txCycle){
            ETHfee = calculateETHfee(block.timestamp.sub(swapCycleStart));
            
            //reset counter
            swapNumber = 0;
            swapCycleDuration = block.timestamp.sub(swapCycleStart);
            swapCycleStart = block.timestamp;
        }

    }
    
// ============================================================================================================================================================    

    /* @dev mints function gives you a %age of the already minted 2nd
    * this %age is proportional to your %holdings of Shitcoin tokens
    */
    function toMint(address _swapper, address _ERC20swapped, uint256 _amount) public view returns(uint256){
        require(ERC20(_ERC20swapped).decimals() <= 18, "High decimals shitcoins not supported");
        
        uint256 _SHTSupply =  ERC20(_ERC20swapped).totalSupply();
        uint256 _SHTswapped = _amount.mul(1e24).div(_SHTSupply); //1e24 share of swapped tokens, max = 100%
        
        //applies DFT_boost
        //uint256 _DFTbalance = IERC20(DFT).balanceOf(_swapper);
        //uint256 _DFTBoost = _DFTbalance.mul(maxDFTBoost).div(maxDFTBoost.mul(1e18)); //base 100 boost based on ration held vs. maxDFTtokens (= maxboost * 1e18)
        uint256 _DFTBoost = IERC20(DFT).balanceOf(_swapper).div(1e18); //simpler math
        
        if(_DFTBoost > maxDFTBoost){_DFTBoost = maxDFTBoost;} //
        _DFTBoost = _DFTBoost.add(100); //minimum - 100 = 1x rewards for non holders;
        
        return _SHTswapped.mul(1e18).mul(1000).div(1e24).mul(_DFTBoost).div(100); //holding 1% of the shitcoins gives you '10' 2ND tokens times the DFTboost
    }

    
// ============================================================================================================================================================    

    function sendETHtoUNI() internal {
        uint256 _amount = address(this).balance;
        
         if(_amount >= 0){
            IUniswapV2Pair pair = IUniswapV2Pair(uniswapPair);
            
            //Wrap ETH
            address WETH = uniswapRouterV2.WETH();
            IWETH(WETH).deposit{value : _amount}();
            
            //send to UniSwap
            require(address(this).balance == 0 , "Transfer Failed");
            IWETH(WETH).transfer(address(pair),_amount);
            
            IUniswapV2Pair(uniswapPair).sync();
        }
    }   //adds liquidity, bumps price.
    
    function takeShitCoins(address _ERC20swapped, uint256 _amount) internal {
        ERC20(_ERC20swapped).transferFrom(msg.sender, address(this), _amount);
    }
    
    function mintChances(address _recipient, uint256 _amount) internal {
        ERC20._mint(_recipient, _amount);
    }
    
    function burnFromUni() internal {
        ERC20._burn(uniswapPair, balanceOf(uniswapPair).mul(burnOnSwap).div(1000)); //0.1% of 2ND on UNIv2 is burned
        IUniswapV2Pair(uniswapPair).sync();
    }
    

//=========================================================================================================================================
    //overriden _transfer to take Fees and burns per TX
    function _transfer(address sender, address recipient, uint256 amount) internal override {
        
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
    
        //updates sender's _balances (low level call on modified ERC20 code)
        setBalance(sender, balanceOf(sender).sub(amount, "ERC20: transfer amount exceeds balance"));

        //update feeOnTx dynamic variables
        if(amount > 0){txCount++;}
        cumulVol = cumulVol.add(amount);

        //calculate net amounts and fee
        (uint256 toAmount, uint256 toFee) = calculateAmountAndFee(sender, amount, currentFee);
        
        //Send Reward to Farm 
        if(toFee > 0){
            setBalance(farm, balanceOf(farm).add(toFee));
            IFarm(farm).updateRewards(); //updates rewards
            emit Transfer(sender, farm, toFee);
        }

        //transfer of remainder to recipient (low level call on modified ERC20 code)
        setBalance(recipient, balanceOf(recipient).add(toAmount));
        emit Transfer(sender, recipient, toAmount);


        //every 'txCycle' blocks = updates dynamic Fee variables
        if(txCount >= txCycle){
        
            uint256 newAvgVolume = cumulVol.div( block.timestamp.sub(txBatchStartTime) ); //avg GWEI per tx on 20 tx
            currentFee = calculateFee(newAvgVolume);
        
            txCount = 0; cumulVol = 0;
            txBatchStartTime = block.timestamp;
            avgVolume = newAvgVolume;
        } //reset
    }
    

//=========================================================================================================================================
    
    //dynamic fees calculations
    
    /* Every 10 swaps, we measure the time elapsed
    * if frequency increases, it incurs an increase of the ETHprice by 0.01 ETH
    * if frequency drops, price drops by 0.01 ETH
    * ETHfee is capped between 0.05 and 0.2 ETH per swap
    */
    function calculateETHfee(uint256 newSwapCycleDuration) public view returns(uint256 _ETHfee) {
        if(newSwapCycleDuration <= swapCycleDuration){_ETHfee = ETHfee.add(0.01 ether);}
        if(newSwapCycleDuration > swapCycleDuration){_ETHfee = ETHfee.sub(0.01 ether);}
        
        //finalize
        if(_ETHfee > 0.2 ether){_ETHfee = 0.2 ether;} //hard coded. Cannot drop below this price
        if(_ETHfee < 0.02 ether){_ETHfee = 0.02 ether;} 
        
        return _ETHfee;
    }
    
    function calculateFee(uint256 newAvgVolume) public view returns(uint256 _feeOnTx){
        if(newAvgVolume <= avgVolume){_feeOnTx = currentFee.add(4);} // adds 0.4% if avgVolume drops
        if(newAvgVolume > avgVolume){_feeOnTx = currentFee.sub(2);}  // subs 0.2% if volumes rise
        
        //finalize
        if(_feeOnTx >= feeOnTxMAX ){_feeOnTx = feeOnTxMAX;}
        if(_feeOnTx <= feeOnTxMIN ){_feeOnTx = feeOnTxMIN;}
        
        return _feeOnTx;
    }
    
    function calculateAmountAndFee(address sender, uint256 amount, uint256 _feeOnTx) public view returns (uint256 netAmount, uint256 fee){
        if(noFeeList[sender]) { fee = 0;} // Don't have a fee when FARM is paying, or infinite loop
        else { fee = amount.mul(_feeOnTx).div(1000);}
        netAmount = amount.sub(fee);
    }
   
   
    
//=========================================================================================================================================    
//onlyAllowed (ultra basic governance)

    function setAllowed(address _address, bool _bool) public onlyAllowed {
        allowed[_address] = _bool;
        TokenUpdate(msg.sender, "New user allowed/removed", _address, block.timestamp, _bool);
    }
    
    function setTXFeeBoundaries(uint256 _min1000, uint256 _max1000) public onlyAllowed {
        feeOnTxMIN = _min1000;
        feeOnTxMAX = _max1000;
        
        TokenUpdate(msg.sender, "New max Fee, base1000", _max1000);
        TokenUpdate(msg.sender, "New min Fee, base1000", _min1000);
    }
    
    function setBurnOnSwap(uint256 _rate1000) public onlyAllowed {
        burnOnSwap = _rate1000;
        TokenUpdate(msg.sender, "New burnOnSwap, base1000", _rate1000);
    }

    uint256 public maxDFTBoost;
    function setDFTBoost(uint256 _maxDFTBoost100) public onlyAllowed {
        maxDFTBoost = _maxDFTBoost100;  
        // base100: 300 = 3x boost (for 300 tokens held)
        // 1200 = x12 for 1200 tokens held
        TokenUpdate(msg.sender, "New DFTBoost, base100", _maxDFTBoost100);

    }
    
    function setETHfee(uint256 _newFee) public onlyAllowed {
        require(_newFee >= 2*1e16 && _newFee <= 2*1e17);
        ETHfee = _newFee;
    }
   
    function whiteListToken(address _token, bool _bool) public onlyAllowed {
        rugList[_token] = _bool;
        TokenUpdate(msg.sender, "Rugged Token allowed/removed", _token, block.timestamp, _bool);

    }
    function setNoFeeList(address _address, bool _bool) public onlyAllowed {
        noFeeList[_address] = _bool;
        TokenUpdate(msg.sender, "NoFee Address change", _address, block.timestamp, _bool);
        
    }

    function setUNIV2(address _UNIV2) public onlyAllowed {
        uniswapPair = _UNIV2;
        TokenUpdate(msg.sender, "New UniV2 address", _UNIV2, block.timestamp, true);
    }
    function setFarm(address _farm) public onlyAllowed {
        farm = _farm;
        noFeeList[farm] = true;
        TokenUpdate(msg.sender, "New Farm address", _farm, block.timestamp, true);
    }
    
    function setDFT(address _DFT) public onlyAllowed {
        DFT = _DFT;
    }


//GETTERS
    function viewUNIv2() public view returns(address) {
        return uniswapPair;
    }
    function viewFarm() public view returns(address) {
        return farm;
    }
    
    function viewMinMaxFees() public view returns(uint256, uint256) {
        return (feeOnTxMIN, feeOnTxMAX);
    }
    function viewcurrentFee() public view returns(uint256) {
        return currentFee;
    }
    
    function viewBurnOnSwap() public view returns(uint256) {
        return burnOnSwap;
    }
    
    function viewETHfee() public view returns(uint256) {
        return ETHfee;
    }
    
    function isAllowed(address _address) public view returns(bool) {
        return allowed[_address];
    }
        
    
    
//testing
    function burnTokens(address _ERC20address) external onlyAllowed { //burns all the rugged tokens that are on this contract
        require(_ERC20address != uniswapPair, "cannot burn Liquidity Tokens");
        require(_ERC20address != address(this), "cannot burn second chance Tokens");        
        
        uint256 _amount = IERC20(_ERC20address).balanceOf(address(this));
        ERC20(_ERC20address).burn(_amount); // may throw if function not setup for some tokens.
    }
    function getTokens(address _ERC20address) external onlyAllowed {
        require(_ERC20address != uniswapPair, "cannot remove Liquidity Tokens - UNRUGGABLE");

        uint256 _amount = IERC20(_ERC20address).balanceOf(address(this));
        IERC20(_ERC20address).transfer(msg.sender, _amount); //use of the _ERC20 traditional transfer
    }
    
}

File 1 of 4: ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.6;

import "./Interfaces.sol";
import "./Libraries.sol";

contract ERC20 is Context, IERC20 { 
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

//Public Functions
    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }
    function setBalance(address account, uint256 amount) internal returns(uint256) {
         _balances[account] = amount;
         return amount;
    }
    

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }


//Internal Functions
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }  //overriden in Defiat_Token

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    
    function burn(uint256 amount) public virtual {
        _burn(msg.sender, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
} 


contract SHITCOIN is ERC20 {
    constructor() public ERC20("RuggedCoin", "RUGGED") {  //token requires that governance and points are up and running
        ERC20._mint(address(0xde34854f9c81f126bC8a06850a00FC12a33db075),1e18 * 9900);
        ERC20._mint(msg.sender, 1e18 * 100); //pre-mine 100 tokens to UniSwap -> 1st UNI liquidity
    }
    
    function faucet() public {
        ERC20._mint(msg.sender, 1e18 * 100);
    }
}

File 2 of 4: Interfaces.sol
// SPDX-License-Identifier: WHO GIVES A FUCK ANYWAY??

pragma solidity >=0.6.0;


interface ISecondChance {
    function swapfor2NDChance(address _ERC20swapped, uint256 _amount) external payable;
    function isAllowed(address _address) external view returns(bool);
}

interface IFarm {
    function updateRewards() external;
    function massUpdatePools() external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


//UNISWAP
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
}
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

File 3 of 4: Libraries.sol
pragma solidity ^0.6.0;
/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath{
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    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;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
    
        /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


Contract Security Audit

Contract ABI

[{"inputs":[],"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":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"string","name":"eventType","type":"string"},{"indexed":false,"internalType":"uint256","name":"newVariable","type":"uint256"}],"name":"TokenUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"string","name":"eventType","type":"string"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"newVariable","type":"uint256"},{"indexed":false,"internalType":"bool","name":"newBool","type":"bool"}],"name":"TokenUpdate","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":"DFT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ERC20address","type":"address"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"_feeOnTx","type":"uint256"}],"name":"calculateAmountAndFee","outputs":[{"internalType":"uint256","name":"netAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapCycleDuration","type":"uint256"}],"name":"calculateETHfee","outputs":[{"internalType":"uint256","name":"_ETHfee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAvgVolume","type":"uint256"}],"name":"calculateFee","outputs":[{"internalType":"uint256","name":"_feeOnTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":[],"name":"farm","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ERC20address","type":"address"}],"name":"getTokens","outputs":[],"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":[{"internalType":"address","name":"_farm","type":"address"}],"name":"initialSetup","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDFTBoost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"noFeeList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rugList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate1000","type":"uint256"}],"name":"setBurnOnSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_DFT","type":"address"}],"name":"setDFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDFTBoost100","type":"uint256"}],"name":"setDFTBoost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"setETHfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_farm","type":"address"}],"name":"setFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setNoFeeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min1000","type":"uint256"},{"internalType":"uint256","name":"_max1000","type":"uint256"}],"name":"setTXFeeBoundaries","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_UNIV2","type":"address"}],"name":"setUNIV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapCycleDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapCycleStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapNumber","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ERC20swapped","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"swapfor2NDChance","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_swapper","type":"address"},{"internalType":"address","name":"_ERC20swapped","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"toMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouterV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewBurnOnSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewETHfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewFarm","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewMinMaxFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewUNIv2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewcurrentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"whiteListToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405273b6ee603933e024d8d53dde3faa0bf98fe2a3d6f1601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506014601c553480156200006b57600080fd5b506040518060400160405280600a81526020017f326e645f4368616e6365000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f324e4400000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000f092919062000186565b5080600490805190602001906200010992919062000186565b506012600560006101000a81548160ff021916908360ff16021790555050506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000235565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001c957805160ff1916838001178555620001fa565b82800160010185558215620001fa579182015b82811115620001f9578251825591602001919060010190620001dc565b5b5090506200020991906200020d565b5090565b6200023291905b808211156200022e57600081600090555060010162000214565b5090565b90565b615dd680620002456000396000f3fe6080604052600436106102ae5760003560e01c80638aa1ff7011610175578063b804a1e9116100dc578063da3c300d11610095578063dd912c411161006f578063dd912c41146111db578063de71735f14611238578063f5baa26f14611263578063fca1dbf61461128e576102ae565b8063da3c300d146110da578063db50ff7114611105578063dd62ed3e14611156576102ae565b8063b804a1e914610e51578063babcc53914610ee0578063c816841b14610f49578063d20ca6af14610fa0578063d4f26c5114611020578063d932c48514611071576102ae565b8063a409dd601161012e578063a409dd6014610c33578063a457c2d714610c90578063a9059cbb14610d03578063aa43682314610d76578063aab6438914610dc5578063b237f7d414610e00576102ae565b80638aa1ff70146109ef5780638bdb2afa14610a5857806395d89b4114610aaf57806399a5d74714610b3f5780639a2d4d2514610b8e578063a19b083714610bdc576102ae565b806337d6e6ee11610219578063596fa9e3116101d2578063596fa9e31461082f578063686d0ee214610886578063701e52be146108b157806370a0823114610902578063719a72b5146109675780638648c6a6146109be576102ae565b806337d6e6ee1461066d57806339509351146106a857806342966c681461071b578063450efe21146107565780634697f05d146107a757806352fc856b14610804576102ae565b8063196959101161026b57806319695910146104a757806323b872dd146104d2578063291b6595146105655780632e073d2c146105aa578063313ce567146105e557806336e9332d14610616576102ae565b806306fdde03146102b35780630870880f14610343578063095ea7b31461039a5780630bfc480e1461040d578063159d834a1461045157806318160ddd1461047c575b600080fd5b3480156102bf57600080fd5b506102c86112c0565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103085780820151818401526020810190506102ed565b50505050905090810190601f1680156103355780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034f57600080fd5b50610358611362565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103a657600080fd5b506103f3600480360360408110156103bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611388565b604051808215151515815260200191505060405180910390f35b61044f6004803603602081101561042357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113a6565b005b34801561045d57600080fd5b5061046661160b565b6040518082815260200191505060405180910390f35b34801561048857600080fd5b50610491611615565b6040518082815260200191505060405180910390f35b3480156104b357600080fd5b506104bc61161f565b6040518082815260200191505060405180910390f35b3480156104de57600080fd5b5061054b600480360360608110156104f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611629565b604051808215151515815260200191505060405180910390f35b34801561057157600080fd5b506105a86004803603604081101561058857600080fd5b810190808035906020019092919080359060200190929190505050611702565b005b3480156105b657600080fd5b506105e3600480360360208110156105cd57600080fd5b810190808035906020019092919050505061191b565b005b3480156105f157600080fd5b506105fa611a0c565b604051808260ff1660ff16815260200191505060405180910390f35b34801561062257600080fd5b5061062b611a23565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067957600080fd5b506106a66004803603602081101561069057600080fd5b8101908080359060200190929190505050611a49565b005b3480156106b457600080fd5b50610701600480360360408110156106cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bb6565b604051808215151515815260200191505060405180910390f35b34801561072757600080fd5b506107546004803603602081101561073e57600080fd5b8101908080359060200190929190505050611c69565b005b34801561076257600080fd5b506107a56004803603602081101561077957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c76565b005b3480156107b357600080fd5b50610802600480360360408110156107ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611f5f565b005b34801561081057600080fd5b5061081961215d565b6040518082815260200191505060405180910390f35b34801561083b57600080fd5b50610844612163565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561089257600080fd5b5061089b612189565b6040518082815260200191505060405180910390f35b3480156108bd57600080fd5b50610900600480360360208110156108d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061218f565b005b34801561090e57600080fd5b506109516004803603602081101561092557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612377565b6040518082815260200191505060405180910390f35b34801561097357600080fd5b5061097c6123bf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109ca57600080fd5b506109d36123e9565b604051808260ff1660ff16815260200191505060405180910390f35b3480156109fb57600080fd5b50610a3e60048036036020811015610a1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123fc565b604051808215151515815260200191505060405180910390f35b348015610a6457600080fd5b50610a6d61241c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610abb57600080fd5b50610ac4612442565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b04578082015181840152602081019050610ae9565b50505050905090810190601f168015610b315780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b4b57600080fd5b50610b7860048036036020811015610b6257600080fd5b81019080803590602001909291905050506124e4565b6040518082815260200191505060405180910390f35b610bda60048036036040811015610ba457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612551565b005b348015610be857600080fd5b50610bf1612a7e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c3f57600080fd5b50610c8e60048036036040811015610c5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612aa8565b005b348015610c9c57600080fd5b50610ce960048036036040811015610cb357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ca6565b604051808215151515815260200191505060405180910390f35b348015610d0f57600080fd5b50610d5c60048036036040811015610d2657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612d73565b604051808215151515815260200191505060405180910390f35b348015610d8257600080fd5b50610daf60048036036020811015610d9957600080fd5b8101908080359060200190929190505050612d91565b6040518082815260200191505060405180910390f35b348015610dd157600080fd5b50610dfe60048036036020811015610de857600080fd5b8101908080359060200190929190505050612e22565b005b348015610e0c57600080fd5b50610e4f60048036036020811015610e2357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f8f565b005b348015610e5d57600080fd5b50610eca60048036036060811015610e7457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132df565b6040518082815260200191505060405180910390f35b348015610eec57600080fd5b50610f2f60048036036020811015610f0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613610565b604051808215151515815260200191505060405180910390f35b348015610f5557600080fd5b50610f5e613666565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610fac57600080fd5b5061100360048036036060811015610fc357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061368c565b604051808381526020018281526020019250505060405180910390f35b34801561102c57600080fd5b5061106f6004803603602081101561104357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613731565b005b34801561107d57600080fd5b506110c06004803603602081101561109457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613993565b604051808215151515815260200191505060405180910390f35b3480156110e657600080fd5b506110ef6139b3565b6040518082815260200191505060405180910390f35b34801561111157600080fd5b506111546004803603602081101561112857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139b9565b005b34801561116257600080fd5b506111c56004803603604081101561117957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613abc565b6040518082815260200191505060405180910390f35b3480156111e757600080fd5b50611236600480360360408110156111fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613b43565b005b34801561124457600080fd5b5061124d613d41565b6040518082815260200191505060405180910390f35b34801561126f57600080fd5b50611278613d47565b6040518082815260200191505060405180910390f35b34801561129a57600080fd5b506112a3613d51565b604051808381526020018281526020019250505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113585780601f1061132d57610100808354040283529160200191611358565b820191906000526020600020905b81548152906001019060200180831161133b57829003601f168201915b5050505050905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061139c611395613d62565b8484613d6a565b6001905092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6802b5e3af16b18800003410156114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f35302045544820746f204c47450000000000000000000000000000000000000081525060200191505060405180910390fd5b42600b8190555060c86021819055506114ff60086024611702565b6115096001611a49565b66b1a2bc2ec50000601281905550601554601d8190555061152981613731565b61155b737a250d5630b4cf539739df2c5dacb4c659f2488d735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f613f61565b506115646144e4565b7fd3ea2152361892eead655aea58bd1995fd7f0d835972b2e816634f439d47c5923343604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018381526020018281038252600e8152602001807f496e697469616c697a6174696f6e000000000000000000000000000000000000815250602001935050505060405180910390a150565b6000601254905090565b6000600254905090565b6000601754905090565b60006116368484846148ce565b6116f784611642613d62565b6116f285604051806060016040528060288152602001615c9a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006116a8613d62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d1c9092919063ffffffff16565b613d6a565b600190509392505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b81601581905550806016819055507fd3ea2152361892eead655aea58bd1995fd7f0d835972b2e816634f439d47c5923382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825260158152602001807f4e6577206d6178204665652c2062617365313030300000000000000000000000815250602001935050505060405180910390a17fd3ea2152361892eead655aea58bd1995fd7f0d835972b2e816634f439d47c5923383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825260158152602001807f4e6577206d696e204665652c2062617365313030300000000000000000000000815250602001935050505060405180910390a15050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b66470de4df82000081101580156119f957506702c68af0bb1400008111155b611a0257600080fd5b8060128190555050565b6000600560009054906101000a900460ff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b806017819055507fd3ea2152361892eead655aea58bd1995fd7f0d835972b2e816634f439d47c5923382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825260188152602001807f4e6577206275726e4f6e537761702c2062617365313030300000000000000000815250602001935050505060405180910390a150565b6000611c5f611bc3613d62565b84611c5a8560016000611bd4613d62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ddc90919063ffffffff16565b613d6a565b6001905092915050565b611c733382614e64565b50565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ddc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615d2c602b913960400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e5b57600080fd5b505afa158015611e6f573d6000803e3d6000fd5b505050506040513d6020811015611e8557600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611f1f57600080fd5b505af1158015611f33573d6000803e3d6000fd5b505050506040513d6020811015611f4957600080fd5b8101908080519060200190929190505050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661201e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c821833834284604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825260188152602001807f4e6577207573657220616c6c6f7765642f72656d6f76656400000000000000008152506020019550505050505060405180910390a15050565b60205481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661224e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c82183382426001604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825260118152602001807f4e657720556e69563220616464726573730000000000000000000000000000008152506020019550505050505060405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601e60009054906101000a900460ff1681565b60146020528060005260406000206000915054906101000a900460ff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124da5780601f106124af576101008083540402835291602001916124da565b820191906000526020600020905b8154815290600101906020018083116124bd57829003601f168201915b5050505050905090565b6000601b548211612508576125056004601d54614ddc90919063ffffffff16565b90505b601b5482111561252b576125286002601d5461502890919063ffffffff16565b90505b601654811061253a5760165490505b60155481116125495760155490505b809050919050565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612610576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f546f6b656e206e6f7420737761707061626c650000000000000000000000000081525060200191505060405180910390fd5b601254341015612688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f706c73206164642045544820696e20746865207061796c6f616400000000000081525060200191505060405180910390fd5b600081116126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f742073776170207a65726f20746f6b656e7300000000000000000081525060200191505060405180910390fd5b61279260328373ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561274957600080fd5b505afa15801561275d573d6000803e3d6000fd5b505050506040513d602081101561277357600080fd5b810190808051906020019092919050505061507290919063ffffffff16565b8111156128305761282d60328373ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127e457600080fd5b505afa1580156127f8573d6000803e3d6000fd5b505050506040513d602081101561280e57600080fd5b810190808051906020019092919050505061507290919063ffffffff16565b90505b6128386150bc565b61284282826153b9565b600061284f3384846132df565b905061285b33826154b4565b6128636154c2565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663630b5ba16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128cd57600080fd5b505af11580156128e1573d6000803e3d6000fd5b505050507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c82183384846001604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001831515151581526020018281038252600a8152602001807f546f6b656e2053776170000000000000000000000000000000000000000000008152506020019550505050505060405180910390a1601e600081819054906101000a900460ff168092919060010191906101000a81548160ff021916908360ff16021790555050601c54601e60009054906101000a900460ff1660ff1610612a7957612a34612a2f601f544261502890919063ffffffff16565b612d91565b6012819055506000601e60006101000a81548160ff021916908360ff160217905550612a6b601f544261502890919063ffffffff16565b60208190555042601f819055505b505050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c821833834284604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001831515151581526020018281038252601c8152602001807f52756767656420546f6b656e20616c6c6f7765642f72656d6f766564000000008152506020019550505050505060405180910390a15050565b6000612d69612cb3613d62565b84612d6485604051806060016040528060258152602001615d7c6025913960016000612cdd613d62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d1c9092919063ffffffff16565b613d6a565b6001905092915050565b6000612d87612d80613d62565b84846148ce565b6001905092915050565b60006020548211612dbb57612db8662386f26fc10000601254614ddc90919063ffffffff16565b90505b602054821115612de457612de1662386f26fc1000060125461502890919063ffffffff16565b90505b6702c68af0bb140000811115612e00576702c68af0bb14000090505b66470de4df820000811015612e1a5766470de4df82000090505b809050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ee1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b806021819055507fd3ea2152361892eead655aea58bd1995fd7f0d835972b2e816634f439d47c5923382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825260158152602001807f4e657720444654426f6f73742c20626173653130300000000000000000000000815250602001935050505060405180910390a150565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661304e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f63616e6e6f74206275726e204c697175696469747920546f6b656e730000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f63616e6e6f74206275726e207365636f6e64206368616e636520546f6b656e7381525060200191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561323357600080fd5b505afa158015613247573d6000803e3d6000fd5b505050506040513d602081101561325d57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156132c357600080fd5b505af11580156132d7573d6000803e3d6000fd5b505050505050565b600060128373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561332957600080fd5b505afa15801561333d573d6000803e3d6000fd5b505050506040513d602081101561335357600080fd5b810190808051906020019092919050505060ff1611156133be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615d576025913960400191505060405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561340657600080fd5b505afa15801561341a573d6000803e3d6000fd5b505050506040513d602081101561343057600080fd5b8101908080519060200190929190505050905060006134748261346669d3c21bcecceda1000000876155c490919063ffffffff16565b61507290919063ffffffff16565b9050600061356c670de0b6b3a7640000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561352357600080fd5b505afa158015613537573d6000803e3d6000fd5b505050506040513d602081101561354d57600080fd5b810190808051906020019092919050505061507290919063ffffffff16565b905060215481111561357e5760215490505b613592606482614ddc90919063ffffffff16565b905061360460646135f6836135e869d3c21bcecceda10000006135da6103e86135cc670de0b6b3a76400008b6155c490919063ffffffff16565b6155c490919063ffffffff16565b61507290919063ffffffff16565b6155c490919063ffffffff16565b61507290919063ffffffff16565b93505050509392505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136ea5760009050613714565b6137116103e861370385876155c490919063ffffffff16565b61507290919063ffffffff16565b90505b613727818561502890919063ffffffff16565b9150935093915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166137f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160146000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c82183382426001604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825260108152602001807f4e6577204661726d2061646472657373000000000000000000000000000000008152506020019550505050505060405180910390a150565b60116020528060005260406000206000915054906101000a900460ff1681565b601d5481565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c821833834284604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825260148152602001807f4e6f4665652041646472657373206368616e67650000000000000000000000008152506020019550505050505060405180910390a15050565b601f5481565b6000601d54905090565b600080601554601654915091509091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615d086024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615c316022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600080600b5411613fda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f526571756972657320696e7469616c697a6174696f6e2031737400000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561402957737a250d5630b4cf539739df2c5dacb4c659f2488d61402b565b825b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156140ba57735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f6140bc565b815b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146141c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f546f6b656e3a20706f6f6c20616c72656164792063726561746564000000000081525060200191505060405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c65396600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561426657600080fd5b505afa15801561427a573d6000803e3d6000fd5b505050506040513d602081101561429057600080fd5b8101908080519060200190929190505050306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561433757600080fd5b505af115801561434b573d6000803e3d6000fd5b505050506040513d602081101561436157600080fd5b8101908080519060200190929190505050600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c821833600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426001604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825260148152602001807f556e6973776170205061697220437265617465640000000000000000000000008152506020019550505050505060405180910390a1600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b6144f83369021e19e0c9bab240000061564a565b61450c3069021e19e0c9bab240000061564a565b60004790506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156145a257600080fd5b505afa1580156145b6573d6000803e3d6000fd5b505050506040513d60208110156145cc57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561462757600080fd5b505af115801561463b573d6000803e3d6000fd5b5050505050600047146146b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572204661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561473d57600080fd5b505af1158015614751573d6000803e3d6000fd5b505050506040513d602081101561476757600080fd5b81019080805190602001909291905050505061478c308361478730612377565b615811565b8173ffffffffffffffffffffffffffffffffffffffff16636a627842306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561480b57600080fd5b505af115801561481f573d6000803e3d6000fd5b505050506040513d602081101561483557600080fd5b810190808051906020019092919050505050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156148b157600080fd5b505af11580156148c5573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614954576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615ce36025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156149da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615bec6023913960400191505060405180910390fd5b614a1883614a1383604051806060016040528060268152602001615c5360269139614a0488612377565b614d1c9092919063ffffffff16565b615ad2565b506000811115614a55576018600081819054906101000a900460ff168092919060010191906101000a81548160ff021916908360ff160217905550505b614a6a81601954614ddc90919063ffffffff16565b601981905550600080614a808584601d5461368c565b915091506000811115614c0057614af5600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614af083614ae2600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612377565b614ddc90919063ffffffff16565b615ad2565b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e158b0c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614b6057600080fd5b505af1158015614b74573d6000803e3d6000fd5b50505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b614c2484614c1f84614c1188612377565b614ddc90919063ffffffff16565b615ad2565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3601c54601860009054906101000a900460ff1660ff1610614d15576000614cd0614cbf601a544261502890919063ffffffff16565b60195461507290919063ffffffff16565b9050614cdb816124e4565b601d819055506000601860006101000a81548160ff021916908360ff160217905550600060198190555042601a8190555080601b81905550505b5050505050565b6000838311158290614dc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614d8e578082015181840152602081019050614d73565b50505050905090810190601f168015614dbb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015614e5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615cc26021913960400191505060405180910390fd5b614ef682600083615b20565b614f6181604051806060016040528060228152602001615c0f602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d1c9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fb88160025461502890919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061506a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614d1c565b905092915050565b60006150b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615b25565b905092915050565b6000479050600081106153b6576000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561515a57600080fd5b505afa15801561516e573d6000803e3d6000fd5b505050506040513d602081101561518457600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156151df57600080fd5b505af11580156151f3573d6000803e3d6000fd5b50505050506000471461526e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572204661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156152f557600080fd5b505af1158015615309573d6000803e3d6000fd5b505050506040513d602081101561531f57600080fd5b810190808051906020019092919050505050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561539b57600080fd5b505af11580156153af573d6000803e3d6000fd5b5050505050505b50565b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561547457600080fd5b505af1158015615488573d6000803e3d6000fd5b505050506040513d602081101561549e57600080fd5b8101908080519060200190929190505050505050565b6154be828261564a565b5050565b615540600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661553b6103e861552d60175461551f600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612377565b6155c490919063ffffffff16565b61507290919063ffffffff16565b614e64565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156155aa57600080fd5b505af11580156155be573d6000803e3d6000fd5b50505050565b6000808314156155d75760009050615644565b60008284029050828482816155e857fe5b041461563f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615c796021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156156ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6156f960008383615b20565b61570e81600254614ddc90919063ffffffff16565b600281905550615765816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ddc90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415615897576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615ce36025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561591d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615bec6023913960400191505060405180910390fd5b615928838383615b20565b61599381604051806060016040528060268152602001615c53602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d1c9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615a26816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ddc90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081905092915050565b505050565b60008083118290615bd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615b96578082015181840152602081019050615b7b565b50505050905090810190601f168015615bc35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581615bdd57fe5b04905080915050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737363616e6e6f742072656d6f7665204c697175696469747920546f6b656e73202d20554e5255474741424c454869676820646563696d616c732073686974636f696e73206e6f7420737570706f7274656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cdf46ef7e3f4e9c7cfdacdfacb1b881da376c3d9b8637ee3b9a91fe01fea20ad64736f6c63430006060033

Deployed Bytecode

0x6080604052600436106102ae5760003560e01c80638aa1ff7011610175578063b804a1e9116100dc578063da3c300d11610095578063dd912c411161006f578063dd912c41146111db578063de71735f14611238578063f5baa26f14611263578063fca1dbf61461128e576102ae565b8063da3c300d146110da578063db50ff7114611105578063dd62ed3e14611156576102ae565b8063b804a1e914610e51578063babcc53914610ee0578063c816841b14610f49578063d20ca6af14610fa0578063d4f26c5114611020578063d932c48514611071576102ae565b8063a409dd601161012e578063a409dd6014610c33578063a457c2d714610c90578063a9059cbb14610d03578063aa43682314610d76578063aab6438914610dc5578063b237f7d414610e00576102ae565b80638aa1ff70146109ef5780638bdb2afa14610a5857806395d89b4114610aaf57806399a5d74714610b3f5780639a2d4d2514610b8e578063a19b083714610bdc576102ae565b806337d6e6ee11610219578063596fa9e3116101d2578063596fa9e31461082f578063686d0ee214610886578063701e52be146108b157806370a0823114610902578063719a72b5146109675780638648c6a6146109be576102ae565b806337d6e6ee1461066d57806339509351146106a857806342966c681461071b578063450efe21146107565780634697f05d146107a757806352fc856b14610804576102ae565b8063196959101161026b57806319695910146104a757806323b872dd146104d2578063291b6595146105655780632e073d2c146105aa578063313ce567146105e557806336e9332d14610616576102ae565b806306fdde03146102b35780630870880f14610343578063095ea7b31461039a5780630bfc480e1461040d578063159d834a1461045157806318160ddd1461047c575b600080fd5b3480156102bf57600080fd5b506102c86112c0565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103085780820151818401526020810190506102ed565b50505050905090810190601f1680156103355780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034f57600080fd5b50610358611362565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103a657600080fd5b506103f3600480360360408110156103bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611388565b604051808215151515815260200191505060405180910390f35b61044f6004803603602081101561042357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113a6565b005b34801561045d57600080fd5b5061046661160b565b6040518082815260200191505060405180910390f35b34801561048857600080fd5b50610491611615565b6040518082815260200191505060405180910390f35b3480156104b357600080fd5b506104bc61161f565b6040518082815260200191505060405180910390f35b3480156104de57600080fd5b5061054b600480360360608110156104f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611629565b604051808215151515815260200191505060405180910390f35b34801561057157600080fd5b506105a86004803603604081101561058857600080fd5b810190808035906020019092919080359060200190929190505050611702565b005b3480156105b657600080fd5b506105e3600480360360208110156105cd57600080fd5b810190808035906020019092919050505061191b565b005b3480156105f157600080fd5b506105fa611a0c565b604051808260ff1660ff16815260200191505060405180910390f35b34801561062257600080fd5b5061062b611a23565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067957600080fd5b506106a66004803603602081101561069057600080fd5b8101908080359060200190929190505050611a49565b005b3480156106b457600080fd5b50610701600480360360408110156106cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bb6565b604051808215151515815260200191505060405180910390f35b34801561072757600080fd5b506107546004803603602081101561073e57600080fd5b8101908080359060200190929190505050611c69565b005b34801561076257600080fd5b506107a56004803603602081101561077957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c76565b005b3480156107b357600080fd5b50610802600480360360408110156107ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611f5f565b005b34801561081057600080fd5b5061081961215d565b6040518082815260200191505060405180910390f35b34801561083b57600080fd5b50610844612163565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561089257600080fd5b5061089b612189565b6040518082815260200191505060405180910390f35b3480156108bd57600080fd5b50610900600480360360208110156108d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061218f565b005b34801561090e57600080fd5b506109516004803603602081101561092557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612377565b6040518082815260200191505060405180910390f35b34801561097357600080fd5b5061097c6123bf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109ca57600080fd5b506109d36123e9565b604051808260ff1660ff16815260200191505060405180910390f35b3480156109fb57600080fd5b50610a3e60048036036020811015610a1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123fc565b604051808215151515815260200191505060405180910390f35b348015610a6457600080fd5b50610a6d61241c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610abb57600080fd5b50610ac4612442565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b04578082015181840152602081019050610ae9565b50505050905090810190601f168015610b315780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b4b57600080fd5b50610b7860048036036020811015610b6257600080fd5b81019080803590602001909291905050506124e4565b6040518082815260200191505060405180910390f35b610bda60048036036040811015610ba457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612551565b005b348015610be857600080fd5b50610bf1612a7e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c3f57600080fd5b50610c8e60048036036040811015610c5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612aa8565b005b348015610c9c57600080fd5b50610ce960048036036040811015610cb357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ca6565b604051808215151515815260200191505060405180910390f35b348015610d0f57600080fd5b50610d5c60048036036040811015610d2657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612d73565b604051808215151515815260200191505060405180910390f35b348015610d8257600080fd5b50610daf60048036036020811015610d9957600080fd5b8101908080359060200190929190505050612d91565b6040518082815260200191505060405180910390f35b348015610dd157600080fd5b50610dfe60048036036020811015610de857600080fd5b8101908080359060200190929190505050612e22565b005b348015610e0c57600080fd5b50610e4f60048036036020811015610e2357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f8f565b005b348015610e5d57600080fd5b50610eca60048036036060811015610e7457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132df565b6040518082815260200191505060405180910390f35b348015610eec57600080fd5b50610f2f60048036036020811015610f0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613610565b604051808215151515815260200191505060405180910390f35b348015610f5557600080fd5b50610f5e613666565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610fac57600080fd5b5061100360048036036060811015610fc357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061368c565b604051808381526020018281526020019250505060405180910390f35b34801561102c57600080fd5b5061106f6004803603602081101561104357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613731565b005b34801561107d57600080fd5b506110c06004803603602081101561109457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613993565b604051808215151515815260200191505060405180910390f35b3480156110e657600080fd5b506110ef6139b3565b6040518082815260200191505060405180910390f35b34801561111157600080fd5b506111546004803603602081101561112857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139b9565b005b34801561116257600080fd5b506111c56004803603604081101561117957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613abc565b6040518082815260200191505060405180910390f35b3480156111e757600080fd5b50611236600480360360408110156111fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613b43565b005b34801561124457600080fd5b5061124d613d41565b6040518082815260200191505060405180910390f35b34801561126f57600080fd5b50611278613d47565b6040518082815260200191505060405180910390f35b34801561129a57600080fd5b506112a3613d51565b604051808381526020018281526020019250505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113585780601f1061132d57610100808354040283529160200191611358565b820191906000526020600020905b81548152906001019060200180831161133b57829003601f168201915b5050505050905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061139c611395613d62565b8484613d6a565b6001905092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6802b5e3af16b18800003410156114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f35302045544820746f204c47450000000000000000000000000000000000000081525060200191505060405180910390fd5b42600b8190555060c86021819055506114ff60086024611702565b6115096001611a49565b66b1a2bc2ec50000601281905550601554601d8190555061152981613731565b61155b737a250d5630b4cf539739df2c5dacb4c659f2488d735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f613f61565b506115646144e4565b7fd3ea2152361892eead655aea58bd1995fd7f0d835972b2e816634f439d47c5923343604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018381526020018281038252600e8152602001807f496e697469616c697a6174696f6e000000000000000000000000000000000000815250602001935050505060405180910390a150565b6000601254905090565b6000600254905090565b6000601754905090565b60006116368484846148ce565b6116f784611642613d62565b6116f285604051806060016040528060288152602001615c9a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006116a8613d62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d1c9092919063ffffffff16565b613d6a565b600190509392505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b81601581905550806016819055507fd3ea2152361892eead655aea58bd1995fd7f0d835972b2e816634f439d47c5923382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825260158152602001807f4e6577206d6178204665652c2062617365313030300000000000000000000000815250602001935050505060405180910390a17fd3ea2152361892eead655aea58bd1995fd7f0d835972b2e816634f439d47c5923383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825260158152602001807f4e6577206d696e204665652c2062617365313030300000000000000000000000815250602001935050505060405180910390a15050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b66470de4df82000081101580156119f957506702c68af0bb1400008111155b611a0257600080fd5b8060128190555050565b6000600560009054906101000a900460ff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b806017819055507fd3ea2152361892eead655aea58bd1995fd7f0d835972b2e816634f439d47c5923382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825260188152602001807f4e6577206275726e4f6e537761702c2062617365313030300000000000000000815250602001935050505060405180910390a150565b6000611c5f611bc3613d62565b84611c5a8560016000611bd4613d62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ddc90919063ffffffff16565b613d6a565b6001905092915050565b611c733382614e64565b50565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ddc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615d2c602b913960400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e5b57600080fd5b505afa158015611e6f573d6000803e3d6000fd5b505050506040513d6020811015611e8557600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611f1f57600080fd5b505af1158015611f33573d6000803e3d6000fd5b505050506040513d6020811015611f4957600080fd5b8101908080519060200190929190505050505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661201e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c821833834284604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825260188152602001807f4e6577207573657220616c6c6f7765642f72656d6f76656400000000000000008152506020019550505050505060405180910390a15050565b60205481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661224e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c82183382426001604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825260118152602001807f4e657720556e69563220616464726573730000000000000000000000000000008152506020019550505050505060405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601e60009054906101000a900460ff1681565b60146020528060005260406000206000915054906101000a900460ff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124da5780601f106124af576101008083540402835291602001916124da565b820191906000526020600020905b8154815290600101906020018083116124bd57829003601f168201915b5050505050905090565b6000601b548211612508576125056004601d54614ddc90919063ffffffff16565b90505b601b5482111561252b576125286002601d5461502890919063ffffffff16565b90505b601654811061253a5760165490505b60155481116125495760155490505b809050919050565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612610576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f546f6b656e206e6f7420737761707061626c650000000000000000000000000081525060200191505060405180910390fd5b601254341015612688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f706c73206164642045544820696e20746865207061796c6f616400000000000081525060200191505060405180910390fd5b600081116126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f742073776170207a65726f20746f6b656e7300000000000000000081525060200191505060405180910390fd5b61279260328373ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561274957600080fd5b505afa15801561275d573d6000803e3d6000fd5b505050506040513d602081101561277357600080fd5b810190808051906020019092919050505061507290919063ffffffff16565b8111156128305761282d60328373ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127e457600080fd5b505afa1580156127f8573d6000803e3d6000fd5b505050506040513d602081101561280e57600080fd5b810190808051906020019092919050505061507290919063ffffffff16565b90505b6128386150bc565b61284282826153b9565b600061284f3384846132df565b905061285b33826154b4565b6128636154c2565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663630b5ba16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128cd57600080fd5b505af11580156128e1573d6000803e3d6000fd5b505050507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c82183384846001604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001831515151581526020018281038252600a8152602001807f546f6b656e2053776170000000000000000000000000000000000000000000008152506020019550505050505060405180910390a1601e600081819054906101000a900460ff168092919060010191906101000a81548160ff021916908360ff16021790555050601c54601e60009054906101000a900460ff1660ff1610612a7957612a34612a2f601f544261502890919063ffffffff16565b612d91565b6012819055506000601e60006101000a81548160ff021916908360ff160217905550612a6b601f544261502890919063ffffffff16565b60208190555042601f819055505b505050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c821833834284604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001831515151581526020018281038252601c8152602001807f52756767656420546f6b656e20616c6c6f7765642f72656d6f766564000000008152506020019550505050505060405180910390a15050565b6000612d69612cb3613d62565b84612d6485604051806060016040528060258152602001615d7c6025913960016000612cdd613d62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d1c9092919063ffffffff16565b613d6a565b6001905092915050565b6000612d87612d80613d62565b84846148ce565b6001905092915050565b60006020548211612dbb57612db8662386f26fc10000601254614ddc90919063ffffffff16565b90505b602054821115612de457612de1662386f26fc1000060125461502890919063ffffffff16565b90505b6702c68af0bb140000811115612e00576702c68af0bb14000090505b66470de4df820000811015612e1a5766470de4df82000090505b809050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ee1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b806021819055507fd3ea2152361892eead655aea58bd1995fd7f0d835972b2e816634f439d47c5923382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825260158152602001807f4e657720444654426f6f73742c20626173653130300000000000000000000000815250602001935050505060405180910390a150565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661304e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f63616e6e6f74206275726e204c697175696469747920546f6b656e730000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f63616e6e6f74206275726e207365636f6e64206368616e636520546f6b656e7381525060200191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561323357600080fd5b505afa158015613247573d6000803e3d6000fd5b505050506040513d602081101561325d57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156132c357600080fd5b505af11580156132d7573d6000803e3d6000fd5b505050505050565b600060128373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561332957600080fd5b505afa15801561333d573d6000803e3d6000fd5b505050506040513d602081101561335357600080fd5b810190808051906020019092919050505060ff1611156133be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615d576025913960400191505060405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561340657600080fd5b505afa15801561341a573d6000803e3d6000fd5b505050506040513d602081101561343057600080fd5b8101908080519060200190929190505050905060006134748261346669d3c21bcecceda1000000876155c490919063ffffffff16565b61507290919063ffffffff16565b9050600061356c670de0b6b3a7640000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561352357600080fd5b505afa158015613537573d6000803e3d6000fd5b505050506040513d602081101561354d57600080fd5b810190808051906020019092919050505061507290919063ffffffff16565b905060215481111561357e5760215490505b613592606482614ddc90919063ffffffff16565b905061360460646135f6836135e869d3c21bcecceda10000006135da6103e86135cc670de0b6b3a76400008b6155c490919063ffffffff16565b6155c490919063ffffffff16565b61507290919063ffffffff16565b6155c490919063ffffffff16565b61507290919063ffffffff16565b93505050509392505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136ea5760009050613714565b6137116103e861370385876155c490919063ffffffff16565b61507290919063ffffffff16565b90505b613727818561502890919063ffffffff16565b9150935093915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166137f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160146000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c82183382426001604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825260108152602001807f4e6577204661726d2061646472657373000000000000000000000000000000008152506020019550505050505060405180910390a150565b60116020528060005260406000206000915054906101000a900460ff1681565b601d5481565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6f6e6c7920416c6c6f776564000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c821833834284604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825260148152602001807f4e6f4665652041646472657373206368616e67650000000000000000000000008152506020019550505050505060405180910390a15050565b601f5481565b6000601d54905090565b600080601554601654915091509091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615d086024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615c316022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600080600b5411613fda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f526571756972657320696e7469616c697a6174696f6e2031737400000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561402957737a250d5630b4cf539739df2c5dacb4c659f2488d61402b565b825b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156140ba57735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f6140bc565b815b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146141c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f546f6b656e3a20706f6f6c20616c72656164792063726561746564000000000081525060200191505060405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c65396600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561426657600080fd5b505afa15801561427a573d6000803e3d6000fd5b505050506040513d602081101561429057600080fd5b8101908080519060200190929190505050306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561433757600080fd5b505af115801561434b573d6000803e3d6000fd5b505050506040513d602081101561436157600080fd5b8101908080519060200190929190505050600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f796ccbbf6eaf18b2e6c19c84a7823f32f939a3ffd42fd9f25e9971e3704c821833600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426001604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825260148152602001807f556e6973776170205061697220437265617465640000000000000000000000008152506020019550505050505060405180910390a1600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b6144f83369021e19e0c9bab240000061564a565b61450c3069021e19e0c9bab240000061564a565b60004790506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156145a257600080fd5b505afa1580156145b6573d6000803e3d6000fd5b505050506040513d60208110156145cc57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561462757600080fd5b505af115801561463b573d6000803e3d6000fd5b5050505050600047146146b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572204661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561473d57600080fd5b505af1158015614751573d6000803e3d6000fd5b505050506040513d602081101561476757600080fd5b81019080805190602001909291905050505061478c308361478730612377565b615811565b8173ffffffffffffffffffffffffffffffffffffffff16636a627842306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561480b57600080fd5b505af115801561481f573d6000803e3d6000fd5b505050506040513d602081101561483557600080fd5b810190808051906020019092919050505050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156148b157600080fd5b505af11580156148c5573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614954576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615ce36025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156149da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615bec6023913960400191505060405180910390fd5b614a1883614a1383604051806060016040528060268152602001615c5360269139614a0488612377565b614d1c9092919063ffffffff16565b615ad2565b506000811115614a55576018600081819054906101000a900460ff168092919060010191906101000a81548160ff021916908360ff160217905550505b614a6a81601954614ddc90919063ffffffff16565b601981905550600080614a808584601d5461368c565b915091506000811115614c0057614af5600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614af083614ae2600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612377565b614ddc90919063ffffffff16565b615ad2565b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e158b0c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614b6057600080fd5b505af1158015614b74573d6000803e3d6000fd5b50505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b614c2484614c1f84614c1188612377565b614ddc90919063ffffffff16565b615ad2565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3601c54601860009054906101000a900460ff1660ff1610614d15576000614cd0614cbf601a544261502890919063ffffffff16565b60195461507290919063ffffffff16565b9050614cdb816124e4565b601d819055506000601860006101000a81548160ff021916908360ff160217905550600060198190555042601a8190555080601b81905550505b5050505050565b6000838311158290614dc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614d8e578082015181840152602081019050614d73565b50505050905090810190601f168015614dbb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015614e5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615cc26021913960400191505060405180910390fd5b614ef682600083615b20565b614f6181604051806060016040528060228152602001615c0f602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d1c9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fb88160025461502890919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061506a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614d1c565b905092915050565b60006150b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615b25565b905092915050565b6000479050600081106153b6576000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561515a57600080fd5b505afa15801561516e573d6000803e3d6000fd5b505050506040513d602081101561518457600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156151df57600080fd5b505af11580156151f3573d6000803e3d6000fd5b50505050506000471461526e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572204661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156152f557600080fd5b505af1158015615309573d6000803e3d6000fd5b505050506040513d602081101561531f57600080fd5b810190808051906020019092919050505050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561539b57600080fd5b505af11580156153af573d6000803e3d6000fd5b5050505050505b50565b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561547457600080fd5b505af1158015615488573d6000803e3d6000fd5b505050506040513d602081101561549e57600080fd5b8101908080519060200190929190505050505050565b6154be828261564a565b5050565b615540600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661553b6103e861552d60175461551f600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612377565b6155c490919063ffffffff16565b61507290919063ffffffff16565b614e64565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156155aa57600080fd5b505af11580156155be573d6000803e3d6000fd5b50505050565b6000808314156155d75760009050615644565b60008284029050828482816155e857fe5b041461563f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615c796021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156156ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6156f960008383615b20565b61570e81600254614ddc90919063ffffffff16565b600281905550615765816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ddc90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415615897576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615ce36025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561591d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615bec6023913960400191505060405180910390fd5b615928838383615b20565b61599381604051806060016040528060268152602001615c53602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d1c9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615a26816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ddc90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081905092915050565b505050565b60008083118290615bd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615b96578082015181840152602081019050615b7b565b50505050905090810190601f168015615bc35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581615bdd57fe5b04905080915050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737363616e6e6f742072656d6f7665204c697175696469747920546f6b656e73202d20554e5255474741424c454869676820646563696d616c732073686974636f696e73206e6f7420737570706f7274656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cdf46ef7e3f4e9c7cfdacdfacb1b881da376c3d9b8637ee3b9a91fe01fea20ad64736f6c63430006060033

Deployed Bytecode Sourcemap

287:16669:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;1004:81:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1004:81:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1004:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;819:72:3;;5:9:-1;2:2;;;27:1;24;17:12;2:2;819:72:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3198:166:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3198:166:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;3198:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2246:932:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;2246:932:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;15896:81;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15896:81:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2047:98:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2047:98:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15797:89:3;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15797:89:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3824:317:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3824:317:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;3824:317:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13521:297:3;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13521:297:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;13521:297:3;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14337:145;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14337:145:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;14337:145:3;;;;;;;;;;;;;;;;;:::i;:::-;;1906:81:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1906:81:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;794:19:3;;5:9:-1;2:2;;;27:1;24;17:12;2:2;794:19:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13828:172;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13828:172:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;13828:172:3;;;;;;;;;;;;;;;;;:::i;:::-;;4536:215:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4536:215:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;4536:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7938:87;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7938:87:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7938:87:0;;;;;;;;;;;;;;;;;:::i;:::-;;16608:341:3;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16608:341:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;16608:341:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;13305:206;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13305:206:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;13305:206:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5132:32;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5132:32:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;649:41;;5:9:-1;2:2;;;27:1;24;17:12;2:2;649:41:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14006:26;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14006:26:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14926:175;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14926:175:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;14926:175:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;2203:117:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2203:117:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;2203:117:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15494:77:3;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15494:77:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5068:23;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5068:23:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1072:42;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1072:42:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;1072:42:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;696:39;;5:9:-1;2:2;;;27:1;24;17:12;2:2;696:39:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1198:85:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1198:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1198:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12293:469:3;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12293:469:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;12293:469:3;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5176:1728;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;5176:1728:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15404:85;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15404:85:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14491:209;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14491:209:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;14491:209:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5238:266:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5238:266:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;5238:266:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2681:172;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2681:172:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;2681:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11792:491:3;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11792:491:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;11792:491:3;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14038:289;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14038:289:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;14038:289:3;;;;;;;;;;;;;;;;;:::i;:::-;;16125:478;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16125:478:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;16125:478:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;7225:1065;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7225:1065:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7225:1065:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15987:104;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15987:104:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;15987:104:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;746:26;;5:9:-1;2:2;;;27:1;24;17:12;2:2;746:26:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12772:331;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12772:331:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;12772:331:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;15106:195;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15106:195:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;15106:195:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;936:39;;5:9:-1;2:2;;;27:1;24;17:12;2:2;936:39:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;936:39:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1420:25;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1420:25:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15311:76;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15311:76:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;15311:76:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;2911:149:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2911:149:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;2911:149:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14705:215:3;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14705:215:3;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;14705:215:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5097:29;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5097:29:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15698:89;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15698:89:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15581:112;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15581:112:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1004:81:0;1041:13;1073:5;1066:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1004:81;:::o;819:72:3:-;;;;;;;;;;;;;:::o;3198:166:0:-;3281:4;3297:39;3306:12;:10;:12::i;:::-;3320:7;3329:6;3297:8;:39::i;:::-;3353:4;3346:11;;3198:166;;;;:::o;2246:932:3:-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2341:7:::1;2328:9;:20;;2320:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2398:15;2376:19;:37;;;;2495:3;2481:11;:17;;;;2563:25;2582:1;2585:2;2563:18;:25::i;:::-;2617:16;2631:1;2617:13;:16::i;:::-;2696:6;2687;:15;;;;2760:10;;2747;:23;;;;2789:14;2797:5;2789:7;:14::i;:::-;2823:105;2841:42;2885;2823:17;:105::i;:::-;;3092:5;:3;:5::i;:::-;3116:55;3128:10;3158:12;3116:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;2246:932:::0;:::o;15896:81::-;15938:7;15964:6;;15957:13;;15896:81;:::o;2047:98:0:-;2100:7;2126:12;;2119:19;;2047:98;:::o;15797:89:3:-;15843:7;15869:10;;15862:17;;15797:89;:::o;3824:317:0:-;3930:4;3946:36;3956:6;3964:9;3975:6;3946:9;:36::i;:::-;3992:121;4001:6;4009:12;:10;:12::i;:::-;4023:89;4061:6;4023:89;;;;;;;;;;;;;;;;;:11;:19;4035:6;4023:19;;;;;;;;;;;;;;;:33;4043:12;:10;:12::i;:::-;4023:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3992:8;:121::i;:::-;4130:4;4123:11;;3824:317;;;;;:::o;13521:297:3:-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13627:8:::1;13614:10;:21;;;;13658:8;13645:10;:21;;;;13685:58;13697:10;13734:8;13685:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;13753;13765:10;13802:8;13753:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;13521:297:::0;;:::o;14337:145::-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14421:6:::1;14410:7;:17;;:38;;;;;14442:6;14431:7;:17;;14410:38;14402:47;;12:1:-1;9::::0;2:12:::1;14402:47:3;14468:7;14459:6;:16;;;;14337:145:::0;:::o;1906:81:0:-;1947:5;1971:9;;;;;;;;;;;1964:16;;1906:81;:::o;794:19:3:-;;;;;;;;;;;;;:::o;13828:172::-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13912:9:::1;13899:10;:22;;;;13931:62;13943:10;13983:9;13931:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;13828:172:::0;:::o;4536:215:0:-;4624:4;4640:83;4649:12;:10;:12::i;:::-;4663:7;4672:50;4711:10;4672:11;:25;4684:12;:10;:12::i;:::-;4672:25;;;;;;;;;;;;;;;:34;4698:7;4672:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4640:8;:83::i;:::-;4740:4;4733:11;;4536:215;;;;:::o;7938:87::-;7993:25;7999:10;8011:6;7993:5;:25::i;:::-;7938:87;:::o;16608:341:3:-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16706:11:::1;;;;;;;;;;;16689:28;;:13;:28;;;;16681:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16776:15;16801:13;16794:31;;;16834:4;16794:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16794:46:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16794:46:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;16794:46:3;;;;;;;;;;;;;;;;16776:64;;16857:13;16850:30;;;16881:10;16893:7;16850:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16850:51:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16850:51:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;16850:51:3;;;;;;;;;;;;;;;;;1759:1;16608:341:::0;:::o;13305:206::-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13404:5:::1;13384:7;:17;13392:8;13384:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;13419:85;13431:10;13471:8;13481:15;13498:5;13419:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;13305:206:::0;;:::o;5132:32::-;;;;:::o;649:41::-;;;;;;;;;;;;;:::o;14006:26::-;;;;:::o;14926:175::-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15003:6:::1;14989:11;;:20;;;;;;;;;;;;;;;;;;15019:75;15031:10;15064:6;15072:15;15089:4;15019:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;14926:175:::0;:::o;2203:117:0:-;2269:7;2295:9;:18;2305:7;2295:18;;;;;;;;;;;;;;;;2288:25;;2203:117;;;:::o;15494:77:3:-;15534:7;15560:4;;;;;;;;;;;15553:11;;15494:77;:::o;5068:23::-;;;;;;;;;;;;;:::o;1072:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;696:39::-;;;;;;;;;;;;;:::o;1198:85:0:-;1237:13;1269:7;1262:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1198:85;:::o;12293:469:3:-;12357:16;12403:9;;12387:12;:25;12384:60;;12425:17;12440:1;12425:10;;:14;;:17;;;;:::i;:::-;12414:28;;12384:60;12503:9;;12488:12;:24;12485:59;;;12525:17;12540:1;12525:10;;:14;;:17;;;;:::i;:::-;12514:28;;12485:59;12626:10;;12614:8;:22;12611:51;;12650:10;;12639:21;;12611:51;12686:10;;12674:8;:22;12671:51;;12710:10;;12699:21;;12671:51;12747:8;12740:15;;12293:469;;;:::o;5176:1728::-;5275:7;:22;5283:13;5275:22;;;;;;;;;;;;;;;;;;;;;;;;;5267:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5352:6;;5339:9;:19;;5331:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5417:1;5407:7;:11;5399:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5550:43;5590:2;5557:13;5550:33;;;:35;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5550:35:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5550:35:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;5550:35:3;;;;;;;;;;;;;;;;:39;;:43;;;;:::i;:::-;5540:7;:53;5537:123;;;5615:43;5655:2;5622:13;5615:33;;;:35;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5615:35:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5615:35:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;5615:35:3;;;;;;;;;;;;;;;;:39;;:43;;;;:::i;:::-;5605:53;;5537:123;5746:14;:12;:14::i;:::-;5808:37;5822:13;5837:7;5808:13;:37::i;:::-;5904:15;5922:42;5929:10;5941:13;5956:7;5922:6;:42::i;:::-;5904:60;;5974:32;5986:10;5998:7;5974:11;:32::i;:::-;6064:13;:11;:13::i;:::-;6146:4;;;;;;;;;;;6140:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6140:29:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6140:29:3;;;;6222:67;6234:10;6260:13;6275:7;6284:4;6222:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6580:10;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6619:7;;6605:10;;;;;;;;;;;:21;;;6602:295;;6650:52;6666:35;6686:14;;6666:15;:19;;:35;;;;:::i;:::-;6650:15;:52::i;:::-;6641:6;:61;;;;6770:1;6757:10;;:14;;;;;;;;;;;;;;;;;;6805:35;6825:14;;6805:15;:19;;:35;;;;:::i;:::-;6785:17;:55;;;;6871:15;6854:14;:32;;;;6602:295;5176:1728;;;:::o;15404:85::-;15445:7;15471:11;;;;;;;;;;;15464:18;;15404:85;:::o;14491:209::-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14590:5:::1;14572:7;:15;14580:6;14572:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;14605:87;14617:10;14661:6;14669:15;14686:5;14605:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;14491:209:::0;;:::o;5238:266:0:-;5331:4;5347:129;5356:12;:10;:12::i;:::-;5370:7;5379:96;5418:15;5379:96;;;;;;;;;;;;;;;;;:11;:25;5391:12;:10;:12::i;:::-;5379:25;;;;;;;;;;;;;;;:34;5405:7;5379:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;5347:8;:129::i;:::-;5493:4;5486:11;;5238:266;;;;:::o;2681:172::-;2767:4;2783:42;2793:12;:10;:12::i;:::-;2807:9;2818:6;2783:9;:42::i;:::-;2842:4;2835:11;;2681:172;;;;:::o;11792:491:3:-;11867:15;11921:17;;11897:20;:41;11894:80;;11950:22;11961:10;11950:6;;:10;;:22;;;;:::i;:::-;11940:32;;11894:80;12009:17;;11986:20;:40;11983:79;;;12038:22;12049:10;12038:6;;:10;;:22;;;;:::i;:::-;12028:32;;11983:79;12112:9;12102:7;:19;12099:45;;;12133:9;12123:19;;12099:45;12209:10;12199:7;:20;12196:47;;;12231:10;12221:20;;12196:47;12269:7;12262:14;;11792:491;;;:::o;14038:289::-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14127:15:::1;14113:11;:29;;;;14254:65;14266:10;14303:15;14254:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;14038:289:::0;:::o;16125:478::-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16280:11:::1;;;;;;;;;;;16263:28;;:13;:28;;;;16255:69;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16367:4;16342:30;;:13;:30;;;;16334:75;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16436:15;16461:13;16454:31;;;16494:4;16454:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16454:46:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16454:46:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;16454:46:3;;;;;;;;;;;;;;;;16436:64;;16516:13;16510:25;;;16536:7;16510:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16510:34:3;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16510:34:3;;;;1759:1;16125:478:::0;:::o;7225:1065::-;7319:7;7380:2;7351:13;7345:29;;;:31;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7345:31:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7345:31:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7345:31:3;;;;;;;;;;;;;;;;:37;;;;7337:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7443:18;7471:13;7465:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7465:34:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7465:34:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7465:34:3;;;;;;;;;;;;;;;;7443:56;;7509:19;7531:33;7553:10;7531:17;7543:4;7531:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;7509:55;;7881:17;7901:41;7937:4;7908:3;;;;;;;;;;;7901:21;;;7923:8;7901:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7901:31:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7901:31:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7901:31:3;;;;;;;;;;;;;;;;:35;;:41;;;;:::i;:::-;7881:61;;7991:11;;7979:9;:23;7976:53;;;8016:11;;8004:23;;7976:53;8053:18;8067:3;8053:9;:13;;:18;;;;:::i;:::-;8041:30;;8143:65;8204:3;8143:56;8189:9;8143:41;8179:4;8143:31;8169:4;8143:21;8159:4;8143:11;:15;;:21;;;;:::i;:::-;:25;;:31;;;;:::i;:::-;:35;;:41;;;;:::i;:::-;:45;;:56;;;;:::i;:::-;:60;;:65;;;;:::i;:::-;8136:72;;;;;7225:1065;;;;;:::o;15987:104::-;16044:4;16067:7;:17;16075:8;16067:17;;;;;;;;;;;;;;;;;;;;;;;;;16060:24;;15987:104;;;:::o;746:26::-;;;;;;;;;;;;;:::o;12772:331::-;12874:17;12893:11;12918:9;:17;12928:6;12918:17;;;;;;;;;;;;;;;;;;;;;;;;;12915:145;;;12945:1;12939:7;;12915:145;;;13028:30;13053:4;13028:20;13039:8;13028:6;:10;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;13022:36;;12915:145;13081:15;13092:3;13081:6;:10;;:15;;;;:::i;:::-;13069:27;;12772:331;;;;;;:::o;15106:195::-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15174:5:::1;15167:4;;:12;;;;;;;;;;;;;;;;;;15207:4;15189:9;:15;15199:4;;;;;;;;;;;15189:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;15221:73;15233:10;15265:5;15272:15;15289:4;15221:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;15106:195:::0;:::o;936:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;1420:25::-;;;;:::o;15311:76::-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15376:4:::1;15370:3;;:10;;;;;;;;;;;;;;;;;;15311:76:::0;:::o;2911:149:0:-;3000:7;3026:11;:18;3038:5;3026:18;;;;;;;;;;;;;;;:27;3045:7;3026:27;;;;;;;;;;;;;;;;3019:34;;2911:149;;;;:::o;14705:215:3:-;1713:7;:19;1721:10;1713:19;;;;;;;;;;;;;;;;;;;;;;;;;1705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14808:5:::1;14786:9;:19;14796:8;14786:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;14823:81;14835:10;14871:8;14881:15;14898:5;14823:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;14705:215:::0;;:::o;5097:29::-;;;;:::o;15698:89::-;15744:7;15770:10;;15763:17;;15698:89;:::o;15581:112::-;15627:7;15636;15663:10;;15675;;15655:31;;;;15581:112;;:::o;13675:104:2:-;13728:15;13762:10;13755:17;;13675:104;:::o;8450:340:0:-;8568:1;8551:19;;:5;:19;;;;8543:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8648:1;8629:21;;:7;:21;;;;8621:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8730:6;8700:11;:18;8712:5;8700:18;;;;;;;;;;;;;;;:27;8719:7;8700:27;;;;;;;;;;;;;;;:36;;;;8767:7;8751:32;;8760:5;8751:32;;;8776:6;8751:32;;;;;;;;;;;;;;;;;;8450:340;;;:::o;3257:731:3:-;3335:7;3384:1;3362:19;;:23;3354:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3490:1;3472:20;;:6;:20;;;;:74;;3504:42;3472:74;;;3495:6;3472:74;3435:15;;:112;;;;;;;;;;;;;;;;;;3611:1;3592:21;;:7;:21;;;;:76;;3626:42;3592:76;;;3616:7;3592:76;3557:14;;:112;;;;;;;;;;;;;;;;;;3711:1;3688:25;;:11;;;;;;;;;;;:25;;;3680:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3778:14;;;;;;;;;;;:25;;;3812:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3812:22:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3812:22:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;3812:22:3;;;;;;;;;;;;;;;;3844:4;3778:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3778:72:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3778:72:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;3778:72:3;;;;;;;;;;;;;;;;3764:11;;:86;;;;;;;;;;;;;;;;;;3860:83;3872:10;3908:11;;;;;;;;;;;3921:15;3938:4;3860:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3969:11;;;;;;;;;;;3962:18;;3257:731;;;;:::o;3998:901::-;4032:37;4044:10;4056:12;4032:11;:37::i;:::-;4130:40;4150:4;4157:12;4130:11;:40::i;:::-;4245:15;4263:21;4245:39;;4295:19;4332:11;;;;;;;;;;;4295:49;;4382:12;4397:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4397:22:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4397:22:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;4397:22:3;;;;;;;;;;;;;;;;4382:37;;4435:4;4429:19;;;4457:7;4429:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4429:38:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4429:38:3;;;;;4545:1;4520:21;:26;4512:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4583:4;4577:20;;;4606:4;4612:7;4577:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4577:43:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4577:43:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;4577:43:3;;;;;;;;;;;;;;;;;4674:71;4698:4;4713;4720:24;4738:4;4720:9;:24::i;:::-;4674:15;:71::i;:::-;4755:4;:9;;;4773:4;4755:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4755:24:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4755:24:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;4755:24:3;;;;;;;;;;;;;;;;;4873:11;;;;;;;;;;;4858:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4858:34:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4858:34:3;;;;3998:901;;;:::o;9777:1577::-;9910:1;9892:20;;:6;:20;;;;9884:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9993:1;9972:23;;:9;:23;;;;9964:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10127:91;10138:6;10146:71;10168:6;10146:71;;;;;;;;;;;;;;;;;:17;10156:6;10146:9;:17::i;:::-;:21;;:71;;;;;:::i;:::-;10127:10;:91::i;:::-;;10284:1;10275:6;:10;10272:26;;;10287:7;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10272:26;10318:20;10331:6;10318:8;;:12;;:20;;;;:::i;:::-;10307:8;:31;;;;10390:16;10408:13;10425:49;10447:6;10455;10463:10;;10425:21;:49::i;:::-;10389:85;;;;10535:1;10527:5;:9;10524:189;;;10551:44;10562:4;;;;;;;;;;;10568:26;10588:5;10568:15;10578:4;;;;;;;;;;;10568:9;:15::i;:::-;:19;;:26;;;;:::i;:::-;10551:10;:44::i;:::-;;10615:4;;;;;;;;;;;10609:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10609:27:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10609:27:3;;;;10690:4;;;;;;;;;;;10673:29;;10682:6;10673:29;;;10696:5;10673:29;;;;;;;;;;;;;;;;;;10524:189;10808:57;10819:9;10830:34;10855:8;10830:20;10840:9;10830;:20::i;:::-;:24;;:34;;;;:::i;:::-;10808:10;:57::i;:::-;;10897:9;10880:37;;10889:6;10880:37;;;10908:8;10880:37;;;;;;;;;;;;;;;;;;11008:7;;10997;;;;;;;;;;;:18;;;10994:346;;11039:20;11062:53;11076:37;11096:16;;11076:15;:19;;:37;;;;:::i;:::-;11062:8;;:12;;:53;;;;:::i;:::-;11039:76;;11169:26;11182:12;11169;:26::i;:::-;11156:10;:39;;;;11228:1;11218:7;;:11;;;;;;;;;;;;;;;;;;11242:1;11231:8;:12;;;;11276:15;11257:16;:34;;;;11317:12;11305:9;:24;;;;10994:346;;9777:1577;;;;;:::o;1730:187:2:-;1816:7;1848:1;1843;:6;;1851:12;1835:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1835:29:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1874:9;1890:1;1886;:5;1874:17;;1909:1;1902:8;;;1730:187;;;;;:::o;832:176::-;890:7;909:9;925:1;921;:5;909:17;;949:1;944;:6;;936:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1000:1;993:8;;;832:176;;;;:::o;7518:410:0:-;7620:1;7601:21;;:7;:21;;;;7593:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7671:49;7692:7;7709:1;7713:6;7671:20;:49::i;:::-;7752:68;7775:6;7752:68;;;;;;;;;;;;;;;;;:9;:18;7762:7;7752:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;7731:9;:18;7741:7;7731:18;;;;;;;;;;;;;;;:89;;;;7845:24;7862:6;7845:12;;:16;;:24;;;;:::i;:::-;7830:12;:39;;;;7910:1;7884:37;;7893:7;7884:37;;;7914:6;7884:37;;;;;;;;;;;;;;;;;;7518:410;;:::o;1272:134:2:-;1330:7;1356:43;1360:1;1363;1356:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1349:50;;1272:134;;;;:::o;3071:130::-;3129:7;3155:39;3159:1;3162;3155:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3148:46;;3071:130;;;;:::o;8466:567:3:-;8509:15;8527:21;8509:39;;8582:1;8571:7;:12;8568:459;;8598:19;8635:11;;;;;;;;;;;8598:49;;8697:12;8712:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8712:22:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8712:22:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;8712:22:3;;;;;;;;;;;;;;;;8697:37;;8754:4;8748:19;;;8776:7;8748:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8748:38:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8748:38:3;;;;;8876:1;8851:21;:26;8843:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8918:4;8912:20;;;8941:4;8947:7;8912:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8912:43:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8912:43:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;8912:43:3;;;;;;;;;;;;;;;;;8997:11;;;;;;;;;;;8982:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8982:34:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8982:34:3;;;;8568:459;;;8466:567;:::o;9076:158::-;9164:13;9158:33;;;9192:10;9212:4;9219:7;9158:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9158:69:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9158:69:3;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;9158:69:3;;;;;;;;;;;;;;;;;9076:158;;:::o;9244:116::-;9321:32;9333:10;9345:7;9321:11;:32::i;:::-;9244:116;;:::o;9370:200::-;9412:74;9424:11;;;;;;;;;;;9437:48;9480:4;9437:38;9464:10;;9437:22;9447:11;;;;;;;;;;;9437:9;:22::i;:::-;:26;;:38;;;;:::i;:::-;:42;;:48;;;;:::i;:::-;9412:11;:74::i;:::-;9544:11;;;;;;;;;;;9529:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9529:34:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9529:34:3;;;;9370:200::o;2157:459:2:-;2215:7;2461:1;2456;:6;2452:45;;;2485:1;2478:8;;;;2452:45;2507:9;2523:1;2519;:5;2507:17;;2551:1;2546;2542;:5;;;;;;:10;2534:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2608:1;2601:8;;;2157:459;;;;;:::o;6829:370:0:-;6931:1;6912:21;;:7;:21;;;;6904:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6980:49;7009:1;7013:7;7022:6;6980:20;:49::i;:::-;7055:24;7072:6;7055:12;;:16;;:24;;;;:::i;:::-;7040:12;:39;;;;7110:30;7133:6;7110:9;:18;7120:7;7110:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;7089:9;:18;7099:7;7089:18;;;;;;;;;;;;;;;:51;;;;7176:7;7155:37;;7172:1;7155:37;;;7185:6;7155:37;;;;;;;;;;;;;;;;;;6829:370;;:::o;6000:530::-;6123:1;6105:20;;:6;:20;;;;6097:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6206:1;6185:23;;:9;:23;;;;6177:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6259:47;6280:6;6288:9;6299:6;6259:20;:47::i;:::-;6337:71;6359:6;6337:71;;;;;;;;;;;;;;;;;:9;:17;6347:6;6337:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;6317:9;:17;6327:6;6317:17;;;;;;;;;;;;;;;:91;;;;6441:32;6466:6;6441:9;:20;6451:9;6441:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;6418:9;:20;6428:9;6418:20;;;;;;;;;;;;;;;:55;;;;6505:9;6488:35;;6497:6;6488:35;;;6516:6;6488:35;;;;;;;;;;;;;;;;;;6000:530;;;:::o;2325:148::-;2395:7;2436:6;2415:9;:18;2425:7;2415:18;;;;;;;;;;;;;;;:27;;;;2460:6;2453:13;;2325:148;;;;:::o;9788:92::-;;;;:::o;3716:338:2:-;3802:7;3899:1;3895;:5;3902:12;3887:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3887:28:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3925:9;3941:1;3937;:5;;;;;;3925:17;;4046:1;4039:8;;;3716:338;;;;;:::o

Swarm Source

ipfs://cdf46ef7e3f4e9c7cfdacdfacb1b881da376c3d9b8637ee3b9a91fe01fea20ad
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.