class BFFException(Exception):
    def __init__(self, *a):
        super(BFFException, self).__init__(*a)


class InvalidTokenException(BFFException):
    pass


class NotAuthenticatedException(BFFException):
    pass


class InconsistentStateException(BFFException):
    pass


class WalletAlreadyOwnedByAnotherUserException(InconsistentStateException):
    pass


class WalletAlreadyCreatedWithDifferentKeysException(InconsistentStateException):
    pass


class CryptoProofException(BFFException):
    pass


class CryptoProofExpiredException(CryptoProofException):
    pass


class InvalidCryptoProofException(CryptoProofException):
    pass


class ExternalServiceException(BFFException):
    def __init__(self, msg: str=''):
        super(ExternalServiceException, self).__init__(msg)


class CardsServiceCouldNotCreatePayerException(ExternalServiceException):
    def __init__(self, msg: str=''):
        super(CardsServiceCouldNotCreatePayerException, self).__init__(msg)


class BithustlerServiceCouldNotCreateSellerException(ExternalServiceException):
    def __init__(self, msg: str=''):
        super(BithustlerServiceCouldNotCreateSellerException, self).__init__(msg)


class BtcException(ExternalServiceException):
    pass


class NotEnoughBtcAmountException(BtcException):
    pass


class DustTransactionException(BtcException):
    pass


class InvalidMessageSignatureException(BtcException):
    pass


class InconsistentTransactionException(BtcException):
    pass


class UnavailableBtcSubsystemException(BtcException):
    pass


class NoSuchWithdrawalFeesInfoException(BtcException):
    pass


class TradingException(BFFException):
    pass


class NoSuchWalletException(BtcException):
    pass


class NoSuchSellerException(TradingException):
    pass


class TradingLimitsExceededException(TradingException):
    pass


class InvalidPaymentMethodException(TradingException):
    pass


class NoSuch3dSecureException(TradingException):
    pass


class UnsupportedPaymentMethodException(TradingException):
    pass


class TradeExpiredException(TradingException):
    pass


class BidAlreadyPaidException(TradingException):
    pass


class UnrecoverableBidException(TradingException):
    pass


class UnrecoverableAskException(TradingException):
    pass


class AskAlreadyPaidException(TradingException):
    pass


class DustAskException(TradingException):
    pass


class FiatAmountTooLowException(TradingException):
    pass


class CardsLimitsExceededException(TradingException):
    pass


class NoSuchSellMethodException(TradingException):
    pass


class MultipleSellMethodsException(TradingException):
    pass


class InvalidIbanException(BFFException):
    pass


class DuplicateEmailAddressException(BFFException):
    pass


class InvalidTokenPayloadException(BFFException):
    pass


class AcceptancesException(BFFException):
    pass


class ClientSupportAcceptanceNotAcceptedException(AcceptancesException):
    pass


class AppImprovementAcceptanceNotAcceptedException(AcceptancesException):
    pass


class CouldNotFindExplicitFeesExceptionForUserLevel(BFFException):
    pass


class TooManyExplicitFeesExceptionForUserLevel(BFFException):
    pass


class BidExpiredException(TradingException):
    pass


class BidIsInErrorException(TradingException):
    pass


class SDKUpgradeRequestException(BFFException):
    pass


class BidNotYetPaidException(TradingException):
    pass


class DuplicateWalletException(BFFException):
    pass
