contract LEMDLimit is ERC20, ERC20Detailed {
    using SafeERC20 for IERC20;
    using Address for address;
    using SafeMath for uint;

    address public governance;
    address public pendingGov;
    uint256 public starttime;

    mapping (address => bool) public minters;

    event NewPendingGov(address oldPendingGov, address newPendingGov);

    event NewGov(address oldGov, address newGov);

    // Modifiers
    modifier onlyGov() {
        require(msg.sender == governance, "You are not the governance");
        _;
    }

    constructor ( uint256 starttime_ ) public ERC20Detailed("lemond.money", "LEMD", 18) {
        starttime = starttime_;
        governance = tx.origin;
    }

    function initialize(uint256 starttime_) public onlyGov {
        starttime = starttime_;
    }

    /** 
     * Minte Token for Account
     * @param _account minter
     * @param _amount amount
     */
    function mint(address _account, uint256 _amount) external {
        require(minters[msg.sender], "You are not the minter");
        _mint(_account, _amount);
    }
    
    /** 
     * Add minter
     * @param _minter minter
     */
    function addMinter(address _minter) external onlyGov {
        minters[_minter] = true;
    }
    
    /** 
     * Remove minter
     * @param _minter minter
     */
    function removeMinter(address _minter) external onlyGov {
        minters[_minter] = false;
    }

    /** 
     * Set new governance
     * @param _pendingGov the new governance
     */
    function setPendingGov(address _pendingGov)
        external
        onlyGov
    {
        address oldPendingGov = pendingGov;
        pendingGov = _pendingGov;
        emit NewPendingGov(oldPendingGov, _pendingGov);
    }

    /** 
     * lets msg.sender accept governance
     */
    function acceptGov()
        external {
        require(msg.sender == pendingGov, "You are not the pending governance");
        address oldGov = governance;
        governance = pendingGov;
        pendingGov = address(0);
        emit NewGov(oldGov, governance);
    }

    /**
     * @dev See {ERC20-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal {
        if (from != address(0)) {
            require(block.timestamp >= starttime, 'Not start,The start time for the transfer is 22 Apr 2021 11:00:00 GMT');
        }
        super._beforeTokenTransfer(from, to, amount);
    }
}
function _beforeTokenTransfer(address from, address to, uint256 amount) internal {
        if (from != address(0)) {
            require(block.timestamp >= starttime, 'Not start,The start time for the transfer is 22 Apr 2021 11:00:00 GMT');
        }
        super._beforeTokenTransfer(from, to, amount);
    }
/**
 * @dev See {ERC20-_beforeTokenTransfer}.
 *
 * Requirements:
 *
 */