contract TokenWithdrawableBridge is Ownable {
    using SafeERC20 for IERC20;

    mapping(address => bool) internal tokenBlacklist;

    event TokenWithdrawn(address token, uint256 amount, address to);

    /**
     * @notice Blacklists a token to be withdrawn from the contract.
     */
    function blacklistToken(address _token) public onlyOwner {
        tokenBlacklist[_token] = true;
    }

    /**
     * @notice Withdraws any tokens in the contract.
     */
    function withdrawToken(
        IERC20 token,
        uint256 amount,
        address to
    ) external onlyOwner {
        require(
            !tokenBlacklist[address(token)],
            "TokenWithdrawable: blacklisted token"
        );
        token.safeTransfer(to, amount);
        emit TokenWithdrawn(address(token), amount, to);
    }
}
function withdrawToken(
    IERC20 token,
    uint256 amount,
    address to
) external onlyOwner {
    require(
        !tokenBlacklist[address(token)],
        "TokenWithdrawable: blacklisted token"
    );
    token.safeTransfer(to, amount);
    emit TokenWithdrawn(address(token), amount, to);
}

/**
 * @notice Withdraws any tokens in the contract.
 */