ETH Price: $2,385.06 (+1.41%)

Token

Flama Staking Shares (FSS)
 

Overview

Max Total Supply

691,139.255284822433651055 FSS

Holders

55

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000105117 FSS

Value
$0.00
0x69423c20CB04da697996534507f8541Fdb3e9Aa9
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:
StakingFlama

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-21
*/

pragma solidity ^0.6.2;

library Address {

    function isContract(address account) internal view returns (bool) {

        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    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");
    }

    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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.6.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

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);
}

library SafeMath {
   
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
  
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        
        if (a == 0) {
            return 0;
        }

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

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

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

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

    function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


library SignedSafeMath {
    int256 constant private _INT256_MIN = -2**255;

    function mul(int256 a, int256 b) internal pure returns (int256) {
        if (a == 0) {
            return 0;
        }

        require(!(a == -1 && b == _INT256_MIN), "SignedSafeMath: multiplication overflow");

        int256 c = a * b;
        require(c / a == b, "SignedSafeMath: multiplication overflow");

        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != 0, "SignedSafeMath: division by zero");
        require(!(b == -1 && a == _INT256_MIN), "SignedSafeMath: division overflow");

        int256 c = a / b;

        return c;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a), "SignedSafeMath: subtraction overflow");

        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a), "SignedSafeMath: addition overflow");

        return c; 
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
  }
}


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;
    address private _owner;

    constructor () public {
        _name = "Flama Staking Shares";
        _symbol = "FSS";
        _decimals = 18;
        _owner = msg.sender;
    }

    modifier onlyOwner() {
    require(msg.sender == _owner);
    _;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    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;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    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;
    }

    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);
    }

    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);
    }

    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 _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);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

contract StakingFlama is ERC20 {
    
    using SafeMath for uint256;
    using SignedSafeMath for int256;

    address public owner;
    IERC20 public flama;
    IERC20 public flapp;
    
    uint256 constant internal multiplier = 2**64;
    uint256 public calculatorFLAP;

    uint256 public lastFMAbalance;
    uint256 public lastFLAPbalance;
    uint256 public stakeFee;
    uint256 public unstakeFee;
    uint256 public maxFee = 100000 ether;
    uint256 public minToStake;
    uint256 public minToUnstake;
    
	mapping(address => int256) public correctionFlapp;
	mapping(address => uint256) public withdrawnFLAP;
    

    event Staked(address indexed user, uint256 amount, uint256 total);
    event Unstaked(address indexed user, uint256 amount, uint256 total);
    event FlappWithdrawn(address indexed user, uint256 amount);
    event BalanceSnapshot(uint256 FMA, uint256 FLAP);
    
    constructor (address FMA, address FLAP) public {
        
        flama = IERC20(FMA);
        flapp = IERC20(FLAP);
        owner = msg.sender;
        minToStake = 10000;
        minToUnstake = 10000;
    }
    
    function setLimits(uint256 _minToStake, uint256 _minToUnstake) public onlyOwner {
        minToStake = _minToStake;
        minToUnstake = _minToUnstake;
    }
    
    function setFees(uint256 newStakeFee, uint256 newUnstakeFee) public onlyOwner {
        require(newStakeFee <= maxFee);
        require(newUnstakeFee <= maxFee);
        stakeFee = newStakeFee;
        unstakeFee = newUnstakeFee;
    }
    
    function reduceMaxFee(uint256 newMaxFee) public onlyOwner {
        require(newMaxFee < maxFee);
        maxFee = newMaxFee;
    }

    function stake(uint256 amount) public {
        stakeFor(msg.sender, amount);
    }
    
    function checkSupplyNotZero() internal view returns (uint256) {
         
        if (totalSupply() > 0) {
            return totalSupply();
        } else if (totalSupply() == 0) {
            return 1;
        }
    }
    
    function stakeFor(address user, uint256 amount) internal {
        
        require(flama.balanceOf(user) >= amount, "Amount exceeds your FMA balance");
        require(flapp.balanceOf(user) >= stakeFee, "Your FLAP balance can not cover the fee");
        require(amount >= minToStake, "Less than minToStake");
        
       

        uint256 shares = amount.mul(checkSupplyNotZero()).div(getBalanceFLAMA()).mul(97).div(100);

        
        require(flama.transferFrom(user, address(this), amount), "Stake required");
        require(flapp.transferFrom(user, address(this), stakeFee), "FLAP fee required");
		
		updateRewardPerShare();
        
        _mint(user, shares);
        lastFMAbalance = getBalanceFLAMA();
		lastFLAPbalance = getBalanceFLAPP();

        emit Staked(user, amount, totalSupply());
        emit BalanceSnapshot(lastFMAbalance, lastFLAPbalance);
    }

    
    function updateRewardPerShare() internal {
        
        if( getBalanceFLAPP() > lastFLAPbalance) {
        uint256 FLAPdiff = getBalanceFLAPP().sub(lastFLAPbalance);
		uint256 updateAmountFLAP = FLAPdiff.mul(multiplier).div(totalSupply());

		calculatorFLAP = calculatorFLAP.add(updateAmountFLAP);
		}

    }
    
    function unstake(uint256 amount) public {
        unstakeFor(msg.sender, amount);
    }
   
    function unstakeFor(address user, uint256 amount) internal {
        require(balanceOf(user) >= amount, "Amount exceeds your share balance");
        require(minToUnstake <= amount, "Less than minToUnstake");

        uint256 unstakeAmount = amount.mul(getBalanceFLAMA()).div(totalSupply());

        require(flama.transfer(user, unstakeAmount));
        withdrawDividendsFLAP();
        _burn(user, amount);


        lastFMAbalance = getBalanceFLAMA();
		lastFLAPbalance = getBalanceFLAPP();

        emit Unstaked(msg.sender, amount, totalSupply());
        emit BalanceSnapshot(lastFMAbalance, lastFLAPbalance);

    }
    
    function getBalanceFLAMA() public view returns (uint256) {

		return flama.balanceOf(address(this));
	}
	
	function getBalanceFLAPP() public view returns (uint256) {

		return flapp.balanceOf(address(this));
	}
	
	function withdrawDividendsFLAP() public {
	    
	    updateRewardPerShare();
	    uint256 flap = withdrawableFLAPOf(msg.sender);
	    withdrawnFLAP[msg.sender] = withdrawnFLAP[msg.sender].add(flap);
	    require(flapp.transfer(msg.sender, flap));
	    lastFLAPbalance = getBalanceFLAPP();
	    emit FlappWithdrawn(msg.sender, flap);
	}

	function withdrawableFLAPOf(address user) internal view returns(uint256) {
		return accumulativeFLAPOf(user).sub(withdrawnFLAP[user]);
	}
	
	function accumulativeFLAPOf(address _owner) internal view returns(uint256) {
		return (calculatorFLAP.mul(balanceOf(_owner)).toInt256Safe()
			.add(correctionFlapp[_owner]).toUint256Safe()).div(multiplier);
	}
	
	function _transfer(address from, address to, uint256 value) internal override {
		
		updateRewardPerShare();
		uint256 burnt = value.mul(3).div(100);
		uint256 newAmount = value.sub(burnt);
		_burn(from, burnt);
		super._transfer(from, to, newAmount);
		correctionFlapp[from] = correctionFlapp[from]
			.add( (calculatorFLAP.mul(newAmount)).toInt256Safe() );
		correctionFlapp[to] = correctionFlapp[to]
			.sub( (calculatorFLAP.mul(value)).toInt256Safe() );
	}
	
	function _mint(address account, uint256 value) internal override {
		super._mint(account, value);

		correctionFlapp[account] = correctionFlapp[account]
			.sub( (calculatorFLAP.mul(value)).toInt256Safe() );
	}
	
	function _burn(address account, uint256 value) internal override {
		super._burn(account, value);

		correctionFlapp[account] = correctionFlapp[account]
			.add( (calculatorFLAP.mul(value)).toInt256Safe() );
	}
}

contract FLAPP 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;
    address public _owner;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 public _maxSupply;
    
    modifier onlyOwner() {
        require(msg.sender == _owner, "Only the owner is allowed to access this function.");
        _;
    }

    constructor () public {
        _name = "FLAPP";
        _symbol = "FLAP";
        _decimals = 18;
        _owner = msg.sender;
        _maxSupply = 500000000000000000000000000;
    }
    
    
    function newOwner(address _newOwner) public onlyOwner {
        _owner = _newOwner;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    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];
    }

    


    /**
     * @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;
    }

    /**
     * @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);
    }
    */
    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);
    }


    /** @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");
        require(_totalSupply + amount <= _maxSupply);
        _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);
    }


    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
    
    function mint(address[] memory holders, uint256[] memory amounts) public onlyOwner {
        
        
        uint8 i = 0;
        for (i; i < holders.length; i++) {
            _mint(holders[i], amounts[i]);
        }
    }
}



/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract Flama is Context, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;
    
    event MultiMint(uint256 _totalSupply);

    uint256 private _totalSupply;
    address public stakingAccount;
    address public _owner;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    
    modifier onlyOwner() {
        require(msg.sender == _owner, "Only the owner is allowed to access this function.");
        _;
    }

    /**
     * @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 () public {
        _name = "FLAMA";
        _symbol = "FMA";
        _decimals = 18;
        _owner = msg.sender;
    }
    
    function setStakingAccount(address newStakingAccount) public onlyOwner {
        stakingAccount = newStakingAccount;
    }
    
    function newOwner(address _newOwner) public onlyOwner {
        _owner = _newOwner;
    }

    /**
     * @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];
    }

    


    /**
     * @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;
    }

    /**
     * @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);
    }
    */
    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);
        
        uint256 onePercent = amount.div(100);
        uint256 burnAmount = onePercent.mul(2);
        uint256 stakeAmount = onePercent.mul(1);
        uint256 newTransferAmount = amount.sub(burnAmount + stakeAmount);
        _totalSupply = _totalSupply.sub(burnAmount);
        
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(newTransferAmount);
        _balances[stakingAccount] = _balances[stakingAccount].add(stakeAmount);
        emit Transfer(sender, address(0), burnAmount);
        emit Transfer(sender, stakingAccount, stakeAmount);
        emit Transfer(sender, recipient, newTransferAmount);
    }


    /** @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 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 { }
    
    function multimintToken(address[] memory holders, uint256[] memory amounts) public onlyOwner {
        
        
        uint8 i = 0;
        for (i; i < holders.length; i++) {
            _mint(holders[i], amounts[i]);
        }
        emit MultiMint(_totalSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"FMA","type":"address"},{"internalType":"address","name":"FLAP","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"FMA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"FLAP","type":"uint256"}],"name":"BalanceSnapshot","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FlappWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"Staked","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":[],"name":"calculatorFLAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"correctionFlapp","outputs":[{"internalType":"int256","name":"","type":"int256"}],"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":"flama","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flapp","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalanceFLAMA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalanceFLAPP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastFLAPbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastFMAbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minToStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minToUnstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxFee","type":"uint256"}],"name":"reduceMaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newStakeFee","type":"uint256"},{"internalType":"uint256","name":"newUnstakeFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minToStake","type":"uint256"},{"internalType":"uint256","name":"_minToUnstake","type":"uint256"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawDividendsFLAP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"withdrawnFLAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405269152d02c7e14af6800000600e553480156200001f57600080fd5b50604051620035c6380380620035c6833981810160405260408110156200004557600080fd5b8101908080519060200190929190805190602001909291905050506040518060400160405280601481526020017f466c616d61205374616b696e672053686172657300000000000000000000000081525060039080519060200190620000ad92919062000236565b506040518060400160405280600381526020017f465353000000000000000000000000000000000000000000000000000000000081525060049080519060200190620000fb92919062000236565b506012600560006101000a81548160ff021916908360ff16021790555033600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612710600f819055506127106010819055505050620002e5565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027957805160ff1916838001178555620002aa565b82800160010185558215620002aa579182015b82811115620002a95782518255916020019190600101906200028c565b5b509050620002b99190620002bd565b5090565b620002e291905b80821115620002de576000816000905550600101620002c4565b5090565b90565b6132d180620002f56000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637bd6f4281161010f578063a694fc3a116100a2578063d0648e3f11610071578063d0648e3f146108eb578063dd62ed3e14610909578063f282776714610981578063fa3066171461099f576101f0565b8063a694fc3a14610801578063a9059cbb1461082f578063aa1cb28a14610895578063c4590d3f146108b3576101f0565b806393b8df33116100de57806393b8df33146106a2578063946595fe146106c057806395d89b4114610718578063a457c2d71461079b576101f0565b80637bd6f428146105d25780638d8f87611461061c5780638da5cb5b1461063a5780638ea97d2614610684576101f0565b80632e17de781161018757806339a5f3741161015657806339a5f374146104e657806343deb2921461053e5780636164e1c51461055c57806370a082311461057a576101f0565b80632e17de7814610400578063313ce5671461042e57806332de7d77146104525780633950935114610480576101f0565b80630b78f9c0116101c35780630b78f9c01461030657806318160ddd1461033e578063222c97771461035c57806323b872dd1461037a576101f0565b806301f59d16146101f5578063029424511461021357806306fdde031461021d578063095ea7b3146102a0575b600080fd5b6101fd6109e9565b6040518082815260200191505060405180910390f35b61021b6109ef565b005b610225610be5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561026557808201518184015260208101905061024a565b50505050905090810190601f1680156102925780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ec600480360360408110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b61033c6004803603604081101561031c57600080fd5b810190808035906020019092919080359060200190929190505050610ca5565b005b610346610d2f565b6040518082815260200191505060405180910390f35b610364610d39565b6040518082815260200191505060405180910390f35b6103e66004803603606081101561039057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d3f565b604051808215151515815260200191505060405180910390f35b61042c6004803603602081101561041657600080fd5b8101908080359060200190929190505050610e18565b005b610436610e25565b604051808260ff1660ff16815260200191505060405180910390f35b61047e6004803603602081101561046857600080fd5b8101908080359060200190929190505050610e3c565b005b6104cc6004803603604081101561049657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eae565b604051808215151515815260200191505060405180910390f35b610528600480360360208110156104fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f61565b6040518082815260200191505060405180910390f35b610546610f79565b6040518082815260200191505060405180910390f35b610564610f7f565b6040518082815260200191505060405180910390f35b6105bc6004803603602081101561059057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f85565b6040518082815260200191505060405180910390f35b6105da610fcd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610624610ff3565b6040518082815260200191505060405180910390f35b610642610ff9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61068c61101f565b6040518082815260200191505060405180910390f35b6106aa611025565b6040518082815260200191505060405180910390f35b610702600480360360208110156106d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061102b565b6040518082815260200191505060405180910390f35b610720611043565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610760578082015181840152602081019050610745565b50505050905090810190601f16801561078d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107e7600480360360408110156107b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110e5565b604051808215151515815260200191505060405180910390f35b61082d6004803603602081101561081757600080fd5b81019080803590602001909291905050506111b2565b005b61087b6004803603604081101561084557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111bf565b604051808215151515815260200191505060405180910390f35b61089d6111dd565b6040518082815260200191505060405180910390f35b6108e9600480360360408110156108c957600080fd5b8101908080359060200190929190803590602001909291905050506112be565b005b6108f361132a565b6040518082815260200191505060405180910390f35b61096b6004803603604081101561091f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611330565b6040518082815260200191505060405180910390f35b6109896113b7565b6040518082815260200191505060405180910390f35b6109a7611498565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600e5481565b6109f76114be565b6000610a0233611548565b9050610a5681601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b505050506040513d6020811015610b6c57600080fd5b8101908080519060200190929190505050610b8657600080fd5b610b8e6111dd565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167f7a875c097807c921ed85487a552550c6841af4f37d84d02e0c0aecd04e577d3f826040518082815260200191505060405180910390a250565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b5050505050905090565b6000610c9b610c94611633565b848461163b565b6001905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cff57600080fd5b600e54821115610d0e57600080fd5b600e54811115610d1d57600080fd5b81600c8190555080600d819055505050565b6000600254905090565b600c5481565b6000610d4c848484611832565b610e0d84610d58611633565b610e08856040518060600160405280602881526020016131c160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dbe611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b61163b565b600190509392505050565b610e223382611aba565b50565b6000600560009054906101000a900460ff16905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e9657600080fd5b600e548110610ea457600080fd5b80600e8190555050565b6000610f57610ebb611633565b84610f528560016000610ecc611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b61163b565b6001905092915050565b60116020528060005260406000206000915090505481565b600f5481565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600b5481565b60126020528060005260406000206000915090505481565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110db5780601f106110b0576101008083540402835291602001916110db565b820191906000526020600020905b8154815290600101906020018083116110be57829003601f168201915b5050505050905090565b60006111a86110f2611633565b846111a385604051806060016040528060258152602001613277602591396001600061111c611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b61163b565b6001905092915050565b6111bc3382611d8a565b50565b60006111d36111cc611633565b8484611832565b6001905092915050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561127e57600080fd5b505afa158015611292573d6000803e3d6000fd5b505050506040513d60208110156112a857600080fd5b8101908080519060200190929190505050905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461131857600080fd5b81600f81905550806010819055505050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561145857600080fd5b505afa15801561146c573d6000803e3d6000fd5b505050506040513d602081101561148257600080fd5b8101908080519060200190929190505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b546114c96111dd565b11156115465760006114ed600b546114df6111dd565b6124cb90919063ffffffff16565b905060006115266114fc610d2f565b611518680100000000000000008561251590919063ffffffff16565b61259b90919063ffffffff16565b905061153d816009546115ab90919063ffffffff16565b60098190555050505b565b60006115a4601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611596846125e5565b6124cb90919063ffffffff16565b9050919050565b600080828401905083811015611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061322f6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611747576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131106022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b61183a6114be565b6000611863606461185560038561251590919063ffffffff16565b61259b90919063ffffffff16565b9050600061187a82846124cb90919063ffffffff16565b90506118868583612687565b611891858583612746565b6118ff6118b16118ac8360095461251590919063ffffffff16565b612a07565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2490919063ffffffff16565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119b061196261195d8560095461251590919063ffffffff16565b612a07565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab290919063ffffffff16565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6000838311158290611aa7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a6c578082015181840152602081019050611a51565b50505050905090810190601f168015611a995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b80611ac483610f85565b1015611b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130ef6021913960400191505060405180910390fd5b806010541115611b93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4c657373207468616e206d696e546f556e7374616b650000000000000000000081525060200191505060405180910390fd5b6000611bc8611ba0610d2f565b611bba611bab6113b7565b8561251590919063ffffffff16565b61259b90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611c7357600080fd5b505af1158015611c87573d6000803e3d6000fd5b505050506040513d6020811015611c9d57600080fd5b8101908080519060200190929190505050611cb757600080fd5b611cbf6109ef565b611cc98383612687565b611cd16113b7565b600a81905550611cdf6111dd565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e83611d26610d2f565b604051808381526020018281526020019250505060405180910390a27fda386a6466eb6f0dea8fd5fcbccdc8ded4f0ca4c2916b98d582deb6c9b317461600a54600b54604051808381526020018281526020019250505060405180910390a1505050565b80600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e2a57600080fd5b505afa158015611e3e573d6000803e3d6000fd5b505050506040513d6020811015611e5457600080fd5b81019080805190602001909291905050501015611ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206578636565647320796f757220464d412062616c616e63650081525060200191505060405180910390fd5b600c54600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f7b57600080fd5b505afa158015611f8f573d6000803e3d6000fd5b505050506040513d6020811015611fa557600080fd5b8101908080519060200190929190505050101561200d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131796027913960400191505060405180910390fd5b600f54811015612085576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c657373207468616e206d696e546f5374616b6500000000000000000000000081525060200191505060405180910390fd5b60006120e060646120d260616120c461209c6113b7565b6120b66120a7612b40565b8961251590919063ffffffff16565b61259b90919063ffffffff16565b61251590919063ffffffff16565b61259b90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156121bf57600080fd5b505af11580156121d3573d6000803e3d6000fd5b505050506040513d60208110156121e957600080fd5b810190808051906020019092919050505061226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f5374616b6520726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8430600c546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561234b57600080fd5b505af115801561235f573d6000803e3d6000fd5b505050506040513d602081101561237557600080fd5b81019080805190602001909291905050506123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f464c41502066656520726571756972656400000000000000000000000000000081525060200191505060405180910390fd5b6124006114be565b61240a8382612b7d565b6124126113b7565b600a819055506124206111dd565b600b819055508273ffffffffffffffffffffffffffffffffffffffff167f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee9083612467610d2f565b604051808381526020018281526020019250505060405180910390a27fda386a6466eb6f0dea8fd5fcbccdc8ded4f0ca4c2916b98d582deb6c9b317461600a54600b54604051808381526020018281526020019250505060405180910390a1505050565b600061250d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119fa565b905092915050565b6000808314156125285760009050612595565b600082840290508284828161253957fe5b0414612590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131a06021913960400191505060405180910390fd5b809150505b92915050565b60006125dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c3c565b905092915050565b60006126806801000000000000000061267261266d601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265f61265a61264989610f85565b60095461251590919063ffffffff16565b612a07565b612a2490919063ffffffff16565b612d02565b61259b90919063ffffffff16565b9050919050565b6126918282612d19565b6126ff6126b16126ac8360095461251590919063ffffffff16565b612a07565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2490919063ffffffff16565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061320a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612852576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806130aa6023913960400191505060405180910390fd5b61285d838383612edd565b6128c881604051806060016040528060268152602001613132602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061295b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000808290506000811215612a1b57600080fd5b80915050919050565b600080828401905060008312158015612a3d5750838112155b80612a535750600083128015612a5257508381125b5b612aa8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131586021913960400191505060405180910390fd5b8091505092915050565b600080828403905060008312158015612acb5750838113155b80612ae15750600083128015612ae057508381135b5b612b36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132536024913960400191505060405180910390fd5b8091505092915050565b600080612b4b610d2f565b1115612b6057612b59610d2f565b9050612b7a565b6000612b6a610d2f565b1415612b795760019050612b7a565b5b90565b612b878282612ee2565b612bf5612ba7612ba28360095461251590919063ffffffff16565b612a07565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab290919063ffffffff16565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008083118290612ce8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612cad578082015181840152602081019050612c92565b50505050905090810190601f168015612cda5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612cf457fe5b049050809150509392505050565b600080821215612d1157600080fd5b819050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131e96021913960400191505060405180910390fd5b612dab82600083612edd565b612e16816040518060600160405280602281526020016130cd602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e6d816002546124cb90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612f9160008383612edd565b612fa6816002546115ab90919063ffffffff16565b600281905550612ffd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e6365416d6f756e74206578636565647320796f75722073686172652062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77596f757220464c41502062616c616e63652063616e206e6f7420636f7665722074686520666565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f7745524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bc848d9008ecb2db913896285767f6427ef3b3d7385e3ce1ecb3c7e5501f01ce64736f6c634300060600330000000000000000000000000f8794f66c7170c4f9163a8498371a747114f6c4000000000000000000000000cfb72ed3647cc8e7fa52e4f121ecdabefc305e7f

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637bd6f4281161010f578063a694fc3a116100a2578063d0648e3f11610071578063d0648e3f146108eb578063dd62ed3e14610909578063f282776714610981578063fa3066171461099f576101f0565b8063a694fc3a14610801578063a9059cbb1461082f578063aa1cb28a14610895578063c4590d3f146108b3576101f0565b806393b8df33116100de57806393b8df33146106a2578063946595fe146106c057806395d89b4114610718578063a457c2d71461079b576101f0565b80637bd6f428146105d25780638d8f87611461061c5780638da5cb5b1461063a5780638ea97d2614610684576101f0565b80632e17de781161018757806339a5f3741161015657806339a5f374146104e657806343deb2921461053e5780636164e1c51461055c57806370a082311461057a576101f0565b80632e17de7814610400578063313ce5671461042e57806332de7d77146104525780633950935114610480576101f0565b80630b78f9c0116101c35780630b78f9c01461030657806318160ddd1461033e578063222c97771461035c57806323b872dd1461037a576101f0565b806301f59d16146101f5578063029424511461021357806306fdde031461021d578063095ea7b3146102a0575b600080fd5b6101fd6109e9565b6040518082815260200191505060405180910390f35b61021b6109ef565b005b610225610be5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561026557808201518184015260208101905061024a565b50505050905090810190601f1680156102925780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ec600480360360408110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b61033c6004803603604081101561031c57600080fd5b810190808035906020019092919080359060200190929190505050610ca5565b005b610346610d2f565b6040518082815260200191505060405180910390f35b610364610d39565b6040518082815260200191505060405180910390f35b6103e66004803603606081101561039057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d3f565b604051808215151515815260200191505060405180910390f35b61042c6004803603602081101561041657600080fd5b8101908080359060200190929190505050610e18565b005b610436610e25565b604051808260ff1660ff16815260200191505060405180910390f35b61047e6004803603602081101561046857600080fd5b8101908080359060200190929190505050610e3c565b005b6104cc6004803603604081101561049657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eae565b604051808215151515815260200191505060405180910390f35b610528600480360360208110156104fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f61565b6040518082815260200191505060405180910390f35b610546610f79565b6040518082815260200191505060405180910390f35b610564610f7f565b6040518082815260200191505060405180910390f35b6105bc6004803603602081101561059057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f85565b6040518082815260200191505060405180910390f35b6105da610fcd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610624610ff3565b6040518082815260200191505060405180910390f35b610642610ff9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61068c61101f565b6040518082815260200191505060405180910390f35b6106aa611025565b6040518082815260200191505060405180910390f35b610702600480360360208110156106d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061102b565b6040518082815260200191505060405180910390f35b610720611043565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610760578082015181840152602081019050610745565b50505050905090810190601f16801561078d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107e7600480360360408110156107b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110e5565b604051808215151515815260200191505060405180910390f35b61082d6004803603602081101561081757600080fd5b81019080803590602001909291905050506111b2565b005b61087b6004803603604081101561084557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111bf565b604051808215151515815260200191505060405180910390f35b61089d6111dd565b6040518082815260200191505060405180910390f35b6108e9600480360360408110156108c957600080fd5b8101908080359060200190929190803590602001909291905050506112be565b005b6108f361132a565b6040518082815260200191505060405180910390f35b61096b6004803603604081101561091f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611330565b6040518082815260200191505060405180910390f35b6109896113b7565b6040518082815260200191505060405180910390f35b6109a7611498565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600e5481565b6109f76114be565b6000610a0233611548565b9050610a5681601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b505050506040513d6020811015610b6c57600080fd5b8101908080519060200190929190505050610b8657600080fd5b610b8e6111dd565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167f7a875c097807c921ed85487a552550c6841af4f37d84d02e0c0aecd04e577d3f826040518082815260200191505060405180910390a250565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b5050505050905090565b6000610c9b610c94611633565b848461163b565b6001905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cff57600080fd5b600e54821115610d0e57600080fd5b600e54811115610d1d57600080fd5b81600c8190555080600d819055505050565b6000600254905090565b600c5481565b6000610d4c848484611832565b610e0d84610d58611633565b610e08856040518060600160405280602881526020016131c160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dbe611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b61163b565b600190509392505050565b610e223382611aba565b50565b6000600560009054906101000a900460ff16905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e9657600080fd5b600e548110610ea457600080fd5b80600e8190555050565b6000610f57610ebb611633565b84610f528560016000610ecc611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b61163b565b6001905092915050565b60116020528060005260406000206000915090505481565b600f5481565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600b5481565b60126020528060005260406000206000915090505481565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110db5780601f106110b0576101008083540402835291602001916110db565b820191906000526020600020905b8154815290600101906020018083116110be57829003601f168201915b5050505050905090565b60006111a86110f2611633565b846111a385604051806060016040528060258152602001613277602591396001600061111c611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b61163b565b6001905092915050565b6111bc3382611d8a565b50565b60006111d36111cc611633565b8484611832565b6001905092915050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561127e57600080fd5b505afa158015611292573d6000803e3d6000fd5b505050506040513d60208110156112a857600080fd5b8101908080519060200190929190505050905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461131857600080fd5b81600f81905550806010819055505050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561145857600080fd5b505afa15801561146c573d6000803e3d6000fd5b505050506040513d602081101561148257600080fd5b8101908080519060200190929190505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b546114c96111dd565b11156115465760006114ed600b546114df6111dd565b6124cb90919063ffffffff16565b905060006115266114fc610d2f565b611518680100000000000000008561251590919063ffffffff16565b61259b90919063ffffffff16565b905061153d816009546115ab90919063ffffffff16565b60098190555050505b565b60006115a4601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611596846125e5565b6124cb90919063ffffffff16565b9050919050565b600080828401905083811015611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061322f6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611747576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131106022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b61183a6114be565b6000611863606461185560038561251590919063ffffffff16565b61259b90919063ffffffff16565b9050600061187a82846124cb90919063ffffffff16565b90506118868583612687565b611891858583612746565b6118ff6118b16118ac8360095461251590919063ffffffff16565b612a07565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2490919063ffffffff16565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119b061196261195d8560095461251590919063ffffffff16565b612a07565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab290919063ffffffff16565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6000838311158290611aa7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a6c578082015181840152602081019050611a51565b50505050905090810190601f168015611a995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b80611ac483610f85565b1015611b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130ef6021913960400191505060405180910390fd5b806010541115611b93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4c657373207468616e206d696e546f556e7374616b650000000000000000000081525060200191505060405180910390fd5b6000611bc8611ba0610d2f565b611bba611bab6113b7565b8561251590919063ffffffff16565b61259b90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611c7357600080fd5b505af1158015611c87573d6000803e3d6000fd5b505050506040513d6020811015611c9d57600080fd5b8101908080519060200190929190505050611cb757600080fd5b611cbf6109ef565b611cc98383612687565b611cd16113b7565b600a81905550611cdf6111dd565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e83611d26610d2f565b604051808381526020018281526020019250505060405180910390a27fda386a6466eb6f0dea8fd5fcbccdc8ded4f0ca4c2916b98d582deb6c9b317461600a54600b54604051808381526020018281526020019250505060405180910390a1505050565b80600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e2a57600080fd5b505afa158015611e3e573d6000803e3d6000fd5b505050506040513d6020811015611e5457600080fd5b81019080805190602001909291905050501015611ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206578636565647320796f757220464d412062616c616e63650081525060200191505060405180910390fd5b600c54600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f7b57600080fd5b505afa158015611f8f573d6000803e3d6000fd5b505050506040513d6020811015611fa557600080fd5b8101908080519060200190929190505050101561200d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131796027913960400191505060405180910390fd5b600f54811015612085576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c657373207468616e206d696e546f5374616b6500000000000000000000000081525060200191505060405180910390fd5b60006120e060646120d260616120c461209c6113b7565b6120b66120a7612b40565b8961251590919063ffffffff16565b61259b90919063ffffffff16565b61251590919063ffffffff16565b61259b90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156121bf57600080fd5b505af11580156121d3573d6000803e3d6000fd5b505050506040513d60208110156121e957600080fd5b810190808051906020019092919050505061226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f5374616b6520726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8430600c546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561234b57600080fd5b505af115801561235f573d6000803e3d6000fd5b505050506040513d602081101561237557600080fd5b81019080805190602001909291905050506123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f464c41502066656520726571756972656400000000000000000000000000000081525060200191505060405180910390fd5b6124006114be565b61240a8382612b7d565b6124126113b7565b600a819055506124206111dd565b600b819055508273ffffffffffffffffffffffffffffffffffffffff167f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee9083612467610d2f565b604051808381526020018281526020019250505060405180910390a27fda386a6466eb6f0dea8fd5fcbccdc8ded4f0ca4c2916b98d582deb6c9b317461600a54600b54604051808381526020018281526020019250505060405180910390a1505050565b600061250d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119fa565b905092915050565b6000808314156125285760009050612595565b600082840290508284828161253957fe5b0414612590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131a06021913960400191505060405180910390fd5b809150505b92915050565b60006125dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c3c565b905092915050565b60006126806801000000000000000061267261266d601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265f61265a61264989610f85565b60095461251590919063ffffffff16565b612a07565b612a2490919063ffffffff16565b612d02565b61259b90919063ffffffff16565b9050919050565b6126918282612d19565b6126ff6126b16126ac8360095461251590919063ffffffff16565b612a07565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2490919063ffffffff16565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061320a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612852576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806130aa6023913960400191505060405180910390fd5b61285d838383612edd565b6128c881604051806060016040528060268152602001613132602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061295b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000808290506000811215612a1b57600080fd5b80915050919050565b600080828401905060008312158015612a3d5750838112155b80612a535750600083128015612a5257508381125b5b612aa8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131586021913960400191505060405180910390fd5b8091505092915050565b600080828403905060008312158015612acb5750838113155b80612ae15750600083128015612ae057508381135b5b612b36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132536024913960400191505060405180910390fd5b8091505092915050565b600080612b4b610d2f565b1115612b6057612b59610d2f565b9050612b7a565b6000612b6a610d2f565b1415612b795760019050612b7a565b5b90565b612b878282612ee2565b612bf5612ba7612ba28360095461251590919063ffffffff16565b612a07565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab290919063ffffffff16565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008083118290612ce8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612cad578082015181840152602081019050612c92565b50505050905090810190601f168015612cda5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612cf457fe5b049050809150509392505050565b600080821215612d1157600080fd5b819050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131e96021913960400191505060405180910390fd5b612dab82600083612edd565b612e16816040518060600160405280602281526020016130cd602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e6d816002546124cb90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612f9160008383612edd565b612fa6816002546115ab90919063ffffffff16565b600281905550612ffd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e6365416d6f756e74206578636565647320796f75722073686172652062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77596f757220464c41502062616c616e63652063616e206e6f7420636f7665722074686520666565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f7745524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bc848d9008ecb2db913896285767f6427ef3b3d7385e3ce1ecb3c7e5501f01ce64736f6c63430006060033

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

0000000000000000000000000f8794f66c7170c4f9163a8498371a747114f6c4000000000000000000000000cfb72ed3647cc8e7fa52e4f121ecdabefc305e7f

-----Decoded View---------------
Arg [0] : FMA (address): 0x0f8794f66C7170c4f9163a8498371A747114f6C4
Arg [1] : FLAP (address): 0xCfb72ED3647cC8E7FA52E4F121eCdAbEfC305e7f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000f8794f66c7170c4f9163a8498371a747114f6c4
Arg [1] : 000000000000000000000000cfb72ed3647cc8e7fa52e4f121ecdabefc305e7f


Deployed Bytecode Sourcemap

10583:5906:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10583:5906:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;11009:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14862:343;;;:::i;:::-;;6908:83;;;:::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;6908:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7762:169;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7762:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11910:240;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;11910:240:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7185:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10947:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7939:321;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7939:321:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13887:89;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;13887:89:0;;;;;;;;;;;;;;;;;:::i;:::-;;7094:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12162:133;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;12162:133:0;;;;;;;;;;;;;;;;;:::i;:::-;;8268:218;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;8268:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11121:49;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;11121:49:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11052:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10836:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7293:119;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7293:119:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10753:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11084:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10700:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10977:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10910:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11174:48;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;11174:48:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6999:87;;;:::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;6999:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8494:269;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;8494:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12303:85;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;12303:85:0;;;;;;;;;;;;;;;;;:::i;:::-;;7420:175;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7420:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14750:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11736:162;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;11736:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10874:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7603:151;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7603:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14638:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10727:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11009:36;;;;:::o;14862:343::-;14917:22;:20;:22::i;:::-;14947:12;14962:30;14981:10;14962:18;:30::i;:::-;14947:45;;15028:35;15058:4;15028:13;:25;15042:10;15028:25;;;;;;;;;;;;;;;;:29;;:35;;;;:::i;:::-;15000:13;:25;15014:10;15000:25;;;;;;;;;;;;;;;:63;;;;15079:5;;;;;;;;;;;:14;;;15094:10;15106:4;15079:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15079:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15079:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;15079:32:0;;;;;;;;;;;;;;;;15071:41;;12:1:-1;9;2:12;15071:41:0;15138:17;:15;:17::i;:::-;15120:15;:35;;;;15183:10;15168:32;;;15195:4;15168:32;;;;;;;;;;;;;;;;;;14862:343;:::o;6908:83::-;6945:13;6978:5;6971:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6908:83;:::o;7762:169::-;7845:4;7862:39;7871:12;:10;:12::i;:::-;7885:7;7894:6;7862:8;:39::i;:::-;7919:4;7912:11;;7762:169;;;;:::o;11910:240::-;6877:6;;;;;;;;;;;6863:20;;:10;:20;;;6855:29;;12:1:-1;9;2:12;6855:29:0;12022:6:::1;;12007:11;:21;;11999:30;;12:1:-1;9::::0;2:12:::1;11999:30:0;12065:6;;12048:13;:23;;12040:32;;12:1:-1;9::::0;2:12:::1;12040:32:0;12094:11;12083:8;:22;;;;12129:13;12116:10;:26;;;;11910:240:::0;;:::o;7185:100::-;7238:7;7265:12;;7258:19;;7185:100;:::o;10947:23::-;;;;:::o;7939:321::-;8045:4;8062:36;8072:6;8080:9;8091:6;8062:9;:36::i;:::-;8109:121;8118:6;8126:12;:10;:12::i;:::-;8140:89;8178:6;8140:89;;;;;;;;;;;;;;;;;:11;:19;8152:6;8140:19;;;;;;;;;;;;;;;:33;8160:12;:10;:12::i;:::-;8140:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;8109:8;:121::i;:::-;8248:4;8241:11;;7939:321;;;;;:::o;13887:89::-;13938:30;13949:10;13961:6;13938:10;:30::i;:::-;13887:89;:::o;7094:83::-;7135:5;7160:9;;;;;;;;;;;7153:16;;7094:83;:::o;12162:133::-;6877:6;;;;;;;;;;;6863:20;;:10;:20;;;6855:29;;12:1:-1;9;2:12;6855:29:0;12251:6:::1;;12239:9;:18;12231:27;;12:1:-1;9::::0;2:12:::1;12231:27:0;12278:9;12269:6;:18;;;;12162:133:::0;:::o;8268:218::-;8356:4;8373:83;8382:12;:10;:12::i;:::-;8396:7;8405:50;8444:10;8405:11;:25;8417:12;:10;:12::i;:::-;8405:25;;;;;;;;;;;;;;;:34;8431:7;8405:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8373:8;:83::i;:::-;8474:4;8467:11;;8268:218;;;;:::o;11121:49::-;;;;;;;;;;;;;;;;;:::o;11052:25::-;;;;:::o;10836:29::-;;;;:::o;7293:119::-;7359:7;7386:9;:18;7396:7;7386:18;;;;;;;;;;;;;;;;7379:25;;7293:119;;;:::o;10753:19::-;;;;;;;;;;;;;:::o;11084:27::-;;;;:::o;10700:20::-;;;;;;;;;;;;;:::o;10977:25::-;;;;:::o;10910:30::-;;;;:::o;11174:48::-;;;;;;;;;;;;;;;;;:::o;6999:87::-;7038:13;7071:7;7064:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6999:87;:::o;8494:269::-;8587:4;8604:129;8613:12;:10;:12::i;:::-;8627:7;8636:96;8675:15;8636:96;;;;;;;;;;;;;;;;;:11;:25;8648:12;:10;:12::i;:::-;8636:25;;;;;;;;;;;;;;;:34;8662:7;8636:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8604:8;:129::i;:::-;8751:4;8744:11;;8494:269;;;;:::o;12303:85::-;12352:28;12361:10;12373:6;12352:8;:28::i;:::-;12303:85;:::o;7420:175::-;7506:4;7523:42;7533:12;:10;:12::i;:::-;7547:9;7558:6;7523:9;:42::i;:::-;7583:4;7576:11;;7420:175;;;;:::o;14750:106::-;14798:7;14821:5;;;;;;;;;;;:15;;;14845:4;14821:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14821:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14821:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;14821:30:0;;;;;;;;;;;;;;;;14814:37;;14750:106;:::o;11736:162::-;6877:6;;;;;;;;;;;6863:20;;:10;:20;;;6855:29;;12:1:-1;9;2:12;6855:29:0;11840:11:::1;11827:10;:24;;;;11877:13;11862:12;:28;;;;11736:162:::0;;:::o;10874:29::-;;;;:::o;7603:151::-;7692:7;7719:11;:18;7731:5;7719:18;;;;;;;;;;;;;;;:27;7738:7;7719:27;;;;;;;;;;;;;;;;7712:34;;7603:151;;;;:::o;14638:106::-;14686:7;14709:5;;;;;;;;;;;:15;;;14733:4;14709:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14709:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14709:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;14709:30:0;;;;;;;;;;;;;;;;14702:37;;14638:106;:::o;10727:19::-;;;;;;;;;;;;;:::o;13554:321::-;13640:15;;13620:17;:15;:17::i;:::-;:35;13616:250;;;13668:16;13687:38;13709:15;;13687:17;:15;:17::i;:::-;:21;;:38;;;;:::i;:::-;13668:57;;13730:24;13757:43;13786:13;:11;:13::i;:::-;13757:24;10824:5;13757:8;:12;;:24;;;;:::i;:::-;:28;;:43;;;;:::i;:::-;13730:70;;13824:36;13843:16;13824:14;;:18;;:36;;;;:::i;:::-;13807:14;:53;;;;13616:250;;;13554:321::o;15210:139::-;15274:7;15295:49;15324:13;:19;15338:4;15324:19;;;;;;;;;;;;;;;;15295:24;15314:4;15295:18;:24::i;:::-;:28;;:49;;;;:::i;:::-;15288:56;;15210:139;;;:::o;3373:181::-;3431:7;3451:9;3467:1;3463;:5;3451:17;;3492:1;3487;:6;;3479:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3545:1;3538:8;;;3373:181;;;;:::o;2408:106::-;2461:15;2496:10;2489:17;;2408:106;:::o;10130:346::-;10249:1;10232:19;;:5;:19;;;;10224:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10330:1;10311:21;;:7;:21;;;;10303:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10414:6;10384:11;:18;10396:5;10384:18;;;;;;;;;;;;;;;:27;10403:7;10384:27;;;;;;;;;;;;;;;:36;;;;10452:7;10436:32;;10445:5;10436:32;;;10461:6;10436:32;;;;;;;;;;;;;;;;;;10130:346;;;:::o;15573:471::-;15660:22;:20;:22::i;:::-;15687:13;15703:21;15720:3;15703:12;15713:1;15703:5;:9;;:12;;;;:::i;:::-;:16;;:21;;;;:::i;:::-;15687:37;;15729:17;15749:16;15759:5;15749;:9;;:16;;;;:::i;:::-;15729:36;;15770:18;15776:4;15782:5;15770;:18::i;:::-;15793:36;15809:4;15815:2;15819:9;15793:15;:36::i;:::-;15858:80;15890:46;15891:29;15910:9;15891:14;;:18;;:29;;;;:::i;:::-;15890:44;:46::i;:::-;15858:15;:21;15874:4;15858:21;;;;;;;;;;;;;;;;:30;;:80;;;;:::i;:::-;15834:15;:21;15850:4;15834:21;;;;;;;;;;;;;;;:104;;;;15965:74;15995:42;15996:25;16015:5;15996:14;;:18;;:25;;;;:::i;:::-;15995:40;:42::i;:::-;15965:15;:19;15981:2;15965:19;;;;;;;;;;;;;;;;:28;;:74;;;;:::i;:::-;15943:15;:19;15959:2;15943:19;;;;;;;;;;;;;;;:96;;;;15573:471;;;;;:::o;3708:192::-;3794:7;3827:1;3822;:6;;3830:12;3814: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;3814:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3854:9;3870:1;3866;:5;3854:17;;3891:1;3884:8;;;3708:192;;;;;:::o;13987:639::-;14084:6;14065:15;14075:4;14065:9;:15::i;:::-;:25;;14057:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14163:6;14147:12;;:22;;14139:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14209:21;14233:48;14267:13;:11;:13::i;:::-;14233:29;14244:17;:15;:17::i;:::-;14233:6;:10;;:29;;;;:::i;:::-;:33;;:48;;;;:::i;:::-;14209:72;;14302:5;;;;;;;;;;;:14;;;14317:4;14323:13;14302:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14302:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14302:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;14302:35:0;;;;;;;;;;;;;;;;14294:44;;12:1:-1;9;2:12;14294:44:0;14349:23;:21;:23::i;:::-;14383:19;14389:4;14395:6;14383:5;:19::i;:::-;14434:17;:15;:17::i;:::-;14417:14;:34;;;;14474:17;:15;:17::i;:::-;14456:15;:35;;;;14518:10;14509:43;;;14530:6;14538:13;:11;:13::i;:::-;14509:43;;;;;;;;;;;;;;;;;;;;;;;;14568:48;14584:14;;14600:15;;14568:48;;;;;;;;;;;;;;;;;;;;;;;;13987:639;;;:::o;12638:902::-;12749:6;12724:5;;;;;;;;;;;:15;;;12740:4;12724:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12724:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12724:21:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;12724:21:0;;;;;;;;;;;;;;;;:31;;12716:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12835:8;;12810:5;;;;;;;;;;;:15;;;12826:4;12810:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12810:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12810:21:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;12810:21:0;;;;;;;;;;;;;;;;:33;;12802:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12916:10;;12906:6;:20;;12898:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12983:14;13000:72;13068:3;13000:63;13060:2;13000:55;13037:17;:15;:17::i;:::-;13000:32;13011:20;:18;:20::i;:::-;13000:6;:10;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;:59;;:63;;;;:::i;:::-;:67;;:72;;;;:::i;:::-;12983:89;;13103:5;;;;;;;;;;;:18;;;13122:4;13136;13143:6;13103:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13103:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13103:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;13103:47:0;;;;;;;;;;;;;;;;13095:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13188:5;;;;;;;;;;;:18;;;13207:4;13221;13228:8;;13188:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13188:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13188:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;13188:49:0;;;;;;;;;;;;;;;;13180:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13268:22;:20;:22::i;:::-;13311:19;13317:4;13323:6;13311:5;:19::i;:::-;13358:17;:15;:17::i;:::-;13341:14;:34;;;;13398:17;:15;:17::i;:::-;13380:15;:35;;;;13440:4;13433:35;;;13446:6;13454:13;:11;:13::i;:::-;13433:35;;;;;;;;;;;;;;;;;;;;;;;;13484:48;13500:14;;13516:15;;13484:48;;;;;;;;;;;;;;;;;;;;;;;;12638:902;;;:::o;3562:136::-;3620:7;3647:43;3651:1;3654;3647:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3640:50;;3562:136;;;;:::o;3908:260::-;3966:7;4005:1;4000;:6;3996:47;;;4030:1;4023:8;;;;3996:47;4055:9;4071:1;4067;:5;4055:17;;4100:1;4095;4091;:5;;;;;;:10;4083:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4159:1;4152:8;;;3908:260;;;;;:::o;4178:132::-;4236:7;4263:39;4267:1;4270;4263:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;4256:46;;4178:132;;;;:::o;15355:212::-;15421:7;15442:120;10824:5;15443:102;:86;15505:15;:23;15521:6;15505:23;;;;;;;;;;;;;;;;15443:52;:37;15462:17;15472:6;15462:9;:17::i;:::-;15443:14;;:18;;:37;;;;:::i;:::-;:50;:52::i;:::-;:61;;:86;;;;:::i;:::-;:100;:102::i;:::-;15442:108;;:120;;;;:::i;:::-;15435:127;;15355:212;;;:::o;16271:215::-;16341:27;16353:7;16362:5;16341:11;:27::i;:::-;16402:79;16437:42;16438:25;16457:5;16438:14;;:18;;:25;;;;:::i;:::-;16437:40;:42::i;:::-;16402:15;:24;16418:7;16402:24;;;;;;;;;;;;;;;;:33;;:79;;;;:::i;:::-;16375:15;:24;16391:7;16375:24;;;;;;;;;;;;;;;:106;;;;16271:215;;:::o;8771:539::-;8895:1;8877:20;;:6;:20;;;;8869:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8979:1;8958:23;;:9;:23;;;;8950:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9034:47;9055:6;9063:9;9074:6;9034:20;:47::i;:::-;9114:71;9136:6;9114:71;;;;;;;;;;;;;;;;;:9;:17;9124:6;9114:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9094:9;:17;9104:6;9094:17;;;;;;;;;;;;;;;:91;;;;9219:32;9244:6;9219:9;:20;9229:9;9219:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9196:9;:20;9206:9;9196:20;;;;;;;;;;;;;;;:55;;;;9284:9;9267:35;;9276:6;9267:35;;;9295:6;9267:35;;;;;;;;;;;;;;;;;;8771:539;;;:::o;4827:134::-;4883:6;4898:8;4916:1;4898:20;;4938:1;4933;:6;;4925:15;;12:1:-1;9;2:12;4925:15:0;4954:1;4947:8;;;4827:134;;;:::o;5914:216::-;5970:6;5989:8;6004:1;6000;:5;5989:16;;6030:1;6025;:6;;:16;;;;;6040:1;6035;:6;;6025:16;6024:38;;;;6051:1;6047;:5;:14;;;;;6060:1;6056;:5;6047:14;6024:38;6016:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6120:1;6113:8;;;5914:216;;;;:::o;5688:218::-;5744:6;5763:8;5778:1;5774;:5;5763:16;;5804:1;5799;:6;;:16;;;;;5814:1;5809;:6;;5799:16;5798:38;;;;5825:1;5821;:5;:14;;;;;5834:1;5830;:5;5821:14;5798:38;5790:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5897:1;5890:8;;;5688:218;;;;:::o;12400:226::-;12453:7;12504:1;12488:13;:11;:13::i;:::-;:17;12484:135;;;12529:13;:11;:13::i;:::-;12522:20;;;;12484:135;12581:1;12564:13;:11;:13::i;:::-;:18;12560:59;;;12606:1;12599:8;;;;12560:59;12400:226;;:::o;16050:215::-;16120:27;16132:7;16141:5;16120:11;:27::i;:::-;16181:79;16216:42;16217:25;16236:5;16217:14;;:18;;:25;;;;:::i;:::-;16216:40;:42::i;:::-;16181:15;:24;16197:7;16181:24;;;;;;;;;;;;;;;;:33;;:79;;;;:::i;:::-;16154:15;:24;16170:7;16154:24;;;;;;;;;;;;;;;:106;;;;16050:215;;:::o;4318:189::-;4404:7;4436:1;4432;:5;4439:12;4424: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;4424:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4463:9;4479:1;4475;:5;;;;;;4463:17;;4498:1;4491:8;;;4318:189;;;;;:::o;6138:125::-;6194:7;6227:1;6222;:6;;6214:15;;12:1:-1;9;2:12;6214:15:0;6255:1;6240:17;;6138:125;;;:::o;9704:418::-;9807:1;9788:21;;:7;:21;;;;9780:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9860:49;9881:7;9898:1;9902:6;9860:20;:49::i;:::-;9943:68;9966:6;9943:68;;;;;;;;;;;;;;;;;:9;:18;9953:7;9943:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;9922:9;:18;9932:7;9922:18;;;;;;;;;;;;;;;:89;;;;10037:24;10054:6;10037:12;;:16;;:24;;;;:::i;:::-;10022:12;:39;;;;10103:1;10077:37;;10086:7;10077:37;;;10107:6;10077:37;;;;;;;;;;;;;;;;;;9704:418;;:::o;10484:92::-;;;;:::o;9318:378::-;9421:1;9402:21;;:7;:21;;;;9394:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9472:49;9501:1;9505:7;9514:6;9472:20;:49::i;:::-;9549:24;9566:6;9549:12;;:16;;:24;;;;:::i;:::-;9534:12;:39;;;;9605:30;9628:6;9605:9;:18;9615:7;9605:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;9584:9;:18;9594:7;9584:18;;;;;;;;;;;;;;;:51;;;;9672:7;9651:37;;9668:1;9651:37;;;9681:6;9651:37;;;;;;;;;;;;;;;;;;9318:378;;:::o

Swarm Source

ipfs://bc848d9008ecb2db913896285767f6427ef3b3d7385e3ce1ecb3c7e5501f01ce
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.