contract xCombToken is ERC20("Combine.finance Vault Token", "xCOMB"), Ownable {
    mapping(address => bool) private _minters;

    constructor() public {
        _minters[_msgSender()] = true;
    }

    function setMinter(address _address, bool _isMinter) external onlyOwner {
        _minters[_address] = _isMinter;
    }

    function mint(address _to, uint256 _amount) external {
        require(_minters[_msgSender()], "Not a minter!");
        _mint(_to, _amount);
    }

    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {TRC20-_burn}.
     */
    function burn(uint256 amount) external {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {TRC20-_burn} and {TRC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) external {
        uint256 decreasedAllowance = allowance(account, _msgSender()).sub(
            amount,
            "ERC20: burn amount exceeds allowance"
        );

        _approve(account, _msgSender(), decreasedAllowance);
        _burn(account, amount);
    }
}
function burnFrom(address account, uint256 amount) external {
    uint256 decreasedAllowance = allowance(account, _msgSender()).sub(
        amount,
        "ERC20: burn amount exceeds allowance"
    );

    _approve(account, _msgSender(), decreasedAllowance);
    _burn(account, amount);
}

/**
 * @dev Destroys `amount` tokens from `account`, deducting from the caller's
 * allowance.
 *
 * See {TRC20-_burn} and {TRC20-allowance}.
 *
 * Requirements:
 *
 * - the caller must have allowance for ``accounts``'s tokens of at least
 * `amount`.
 */