
    E#i                         S SK rS SKJrJrJr  S SKrS SKJrJ	r	J
r
JrJrJrJrJr  S SKJr  S SKJr  S SKJr  S SKJr   " S S	\R.                  R0                  5      rg)
    N)
ArrayCacheArrayCacheBySymbolByIdArrayCacheByTimestamp)AnyBalancesBoolIntOrder	OrderBookStrTrade)Client)List)AuthenticationError)NetworkErrorc                   R  ^  \ rS rSrS\4U 4S jjr0 4S jr0 4S jr0 4S jrSSS0 4S	\	S
\	S\
S\
S\\   4
S jjrS\4S jrSS0 4S	\	S\
S\
S\\   4S jjrSS0 4S\\	   S\
S\
S\\   4S jjrS\4S jrS0 4S	\	S\
S\4S jjrS0 4S	\	S\
4S jjrS0 4S	\	S\
4S jjrS\4S jrS\4S jrS rS rS\4S jr0 4S\4S jjrS\4S jrSSS0 4S	\ S\
S\
S\\!   4S jjr"S\4S jr#S*S  jr$S\S\%4S! jr&S\4S" jr'S\4S# jr(S\4S$ jr)S\4S% jr*S& r+S\4S' jr,0 4S( jr-S)r.U =r/$ )+ascendex   returnc                    > U R                  [        [        U ]  5       SSSSSSSSS.SSSS.0SSS	S.0S
.SSSSSSS.S.S.5      $ )NTF)wswatchBalance
watchOHLCVwatchOrderBookwatchOrderswatchTickerwatchTradeswatchTradesForSymbolsr   z(wss://ascendex.com:443/api/pro/v2/streamz7wss://ascendex.com:443/{accountGroup}/api/pro/v2/stream)publicprivatez9wss://api-test.ascendex-sandbox.com:443/api/pro/v2/streamzHwss://api-test.ascendex-sandbox.com:443/{accountGroup}/api/pro/v2/stream)apitest  spotswapmargin)cashfuturesr&   )tradesLimitordersLimit
OHLCVLimitcategoriesAccount)hasurlsoptions)deep_extendsuperr   describe)self	__class__s    K/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/pro/ascendex.pyr2   ascendex.describe   s    h > @ $""&#$#)-	 "L#\ "]#m  $#""%&&		3#C
 # #	    c                    #    U R                   S   S   S   nU R                  5       n[        U5      SS.nU R                  XR5      nU R	                  X1Xa5      I S h  vN $  N7fNr!   r   r   sub)idop)r.   noncestrextendwatch)r3   messageHashparamsurlr;   requestmessages          r5   watch_publicascendex.watch_public8   s`     iit$X.ZZ\b'
 ++g.ZZ'GGGG   AA#A!A#c                    #    U R                   S   S   S   nU R                  5       n[        U5      SS.nU R                  XR5      nU R	                  X1Xa5      I S h  vN $  N7fr9   )r.   r=   r>   r?   watch_multiple)r3   messageHashesrB   rC   r;   rD   rE   s          r5   watch_public_multipleascendex.watch_public_multipleB   sb     iit$X.ZZ\b'
 ++g.((WTTTTrH   c                   #    U R                  5       I S h  vN   U R                  U R                  S5      nU R                  S   S   S   nU R	                  USU05      nU R                  5       n[        U5      SUS.nU R                  Xs5      nU R                  XS5      I S h  vN   U R                  XRX5      I S h  vN $  N N  N7f)Nzaccount-groupr!   r   r    accountGroupr:   )r;   r<   ch)
load_accountssafe_stringr/   r.   implode_paramsr=   r>   r?   authenticater@   )	r3   channelrA   rB   rO   rC   r;   rD   rE   s	            r5   watch_privateascendex.watch_privateL   s       """''oFiit$Y/!!#'EFZZ\b'

 ++g.,,,ZZ'CCC 	# 	-Cs4   C	CBC	$C%C	>C?C	C	C	1mNsymbol	timeframesincelimitc                 ~  #    U R                  5       I Sh  vN   U R                  U5      nUS   nUb  US:  a  SnU R                  U R                  X"5      nSU-   S-   US   -   nSU0nU R	                  X5      I Sh  vN n	U R
                  (       a  U	R                  X5      nU R                  XUS	S
5      $  N N<7f)aQ  
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market

https://ascendex.github.io/ascendex-pro-api/#channel-bar-data

:param str symbol: unified symbol of the market to fetch OHLCV data for
:param str timeframe: the length of time each candle represents
:param int [since]: timestamp in ms of the earliest candle to fetch
:param int [limit]: the maximum amount of candles to fetch
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns int[][]: A list of candles ordered, open, high, low, close, volume
NrY   i  d   zbar::r;   rP   r   T)load_marketsmarketrR   
timeframesrF   
newUpdatesgetLimitfilter_by_since_limit)
r3   rY   rZ   r[   r\   rB   ra   intervalrU   ohlcvs
             r5   watch_ohlcvascendex.watch_ohlcv[   s      !!!V$!Mut|E##DOOYJ(3.='
 ''88??NN61E))%q$GG 	" 9s"   B=B9A'B=>B;?;B=;B=clientc                    U R                  US5      nU R                  U5      nU R                  US5      nU R                  US0 5      nU R                  US5      nUS-   U-   S-   U-   nU R                  U5      n	U R	                  U5      n
U R                  X*5      nU R                  U R                  U0 5      U R                  U'   U R                  U R                  U   U	5      nUc9  U R                  U R                  SS5      n[        U5      nXR                  U   U	'   UR                  U5        UR                  X5        U$ )Nsmdatair_   r+   r#   )rR   safe_symbol
safe_valuefind_timeframera   parse_ohlcvohlcvssafe_integerr/   r   appendresolve)r3   rj   rE   marketIdrY   rU   rn   rf   rA   rZ   ra   parsedstoredr\   s                 r5   handle_ohlcvascendex.handle_ohlcvw   s/     ##GS1!!(+""7C0w3##D#.mh.4x?''1	V$!!'2"oodkk62FFV!4i@>%%dllL$GE*51F-3KK	*fv+r7   c                 F   #    U R                  U/X#U5      I Sh  vN $  N7f)a  
get the list of most recent trades for a particular symbol

https://ascendex.github.io/ascendex-pro-api/#channel-market-trades

:param str symbol: unified symbol of the market to fetch trades for
:param int [since]: timestamp in ms of the earliest trade to fetch
:param int [limit]: the maximum amount of trades to fetch
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
N)watch_trades_for_symbols)r3   rY   r[   r\   rB   s        r5   watch_tradesascendex.watch_trades   s$      22F8U6RRRRs   !!symbolsc                 f  #    U R                  5       I Sh  vN   U R                  USSSS5      n/ n/ nUbZ  [        S[        U5      5       HA  nU R	                  X   5      nUR                  US   5        UR                  SUS   -   5        MC     SSR                  U5      -   n	U R                  USU	05      nU R                  Xd5      I Sh  vN n
U R                  (       a5  U R                  U
S5      nU R                  US	5      nU
R                  X5      nU R                  XUS
S5      $  GN Na7f)aN  
get the list of most recent trades for a list of symbols

https://ascendex.github.io/ascendex-pro-api/#channel-market-trades

:param str[] symbols: unified symbol of the market to fetch trades for
:param int [since]: timestamp in ms of the earliest trade to fetch
:param int [limit]: the maximum amount of trades to fetch
:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.name]: the name of the method to call, 'trade' or 'aggTrade', default is 'trade'
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
NFTr   r;   ztrades:,rP   rY   	timestamp)r`   market_symbolsrangelenra   rv   joinr?   rL   rc   rq   rR   rd   re   )r3   r   r[   r\   rB   	marketIdsrK   ro   ra   rU   tradesfirsttradeSymbols                r5   r~   !ascendex.watch_trades_for_symbols   s,     !!!%%gtUD$G	1c'l+WZ0  .$$Y%=> , chhy11V'&
  11-HH??OOFA.E**5(;KOOK7E))&TRR% 	" Is#   D1D,B6D1D/AD1/D1c                    U R                  US5      nU R                  U5      nU R                  US5      nUS-   U-   nU R                  U5      nU R                  US5      nUc  / nU R	                  X5      n	U R                  U R
                  U5      n
U
c(  U R                  U R                  SS5      n[        U5      n
[        S[        U	5      5       H  nU
R                  X   5        M     XR
                  U'   UR                  X5        g )NrY   rm   r_   rn   r)   r#   r   )rR   rp   ra   rq   parse_tradesr   ru   r/   r   r   r   rv   rw   )r3   rj   rE   rx   rY   rU   rA   ra   rawDatar   tradesArrayr\   ro   s                r5   handle_tradesascendex.handle_trades   s      ##GX6!!(+""7C0mh.V$//'62?G""73oodkk6:%%dllM4HE$U+Kq#f+&Avy) ')F{0r7   c                    #    U R                  5       I Sh  vN   U R                  U5      nSUS   -   nU R                  USU05      nU R                  XS5      I Sh  vN nUR	                  5       $  NZ N7f)a  
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

https://ascendex.github.io/ascendex-pro-api/#channel-level-2-order-book-updates

:param str symbol: unified symbol of the market to fetch the order book for
:param int [limit]: the maximum amount of order book entries to return
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
Nzdepth:r;   rP   r`   ra   r?   rF   r\   )r3   rY   r\   rB   ra   rU   	orderbooks          r5   watch_order_bookascendex.watch_order_book   s{      !!!V$&,.V'&
  ++G<<	   	" =s"   A5A1AA5A3A53A5c                   #    U R                  5       I S h  vN   U R                  U5      nSnUS-   US   -   nU R                  UUSUS   0SS.5      nU R                  Xc5      I S h  vN nUR	                  5       $  Nf N7f)Ndepth-snapshotr_   r;   rY   req)actionargsr<   r   )r3   rY   r\   rB   ra   r   rU   r   s           r5   watch_order_book_snapshot"ascendex.watch_order_book_snapshot   s     !!!V$!3,-V&, &
  ++G<<	   	" =s"   BA=AB(A?)B?Bc                    #    U R                  XU5      I S h  vN nXR                  ;  a  U R                  5       U R                  U'   U R                  U   nUR                  U5        U$  NR7fN)fetch_rest_order_book_safe
orderbooks
order_bookreset)r3   rY   r\   rB   restOrderBookr   s         r5    fetch_order_book_snapshot_custom)ascendex.fetch_order_book_snapshot_custom  s_     "==fVTT//)&*oo&7DOOF#OOF+	& Us   A-A+AA-c                    U R                  US5      nU R                  U5      nU R                  US5      nUS-   U-   nU R                  U   nU R                  US5      nU R	                  X5      n	U R                  US5      U	S'   UR                  U	5        UR                  n
[        S[        U
5      5       H  nX   nU R                  XU5        M     XpR                  U'   UR                  Xv5        g )NrY   rm   r_   rn   seqnumr=   r   )rR   rp   r   rq   parse_order_bookru   r   cacher   r   handle_order_book_messagerw   )r3   rj   rE   rx   rY   rU   rA   r   rn   snapshotmessagesro   messageItems                r5   handle_order_book_snapshot#ascendex.handle_order_book_snapshot  s    & ##GX6!!(+""7C0mf,OOF+	w/((6 --dH=!??q#h-(A"+K**6	J ) #,y.r7   c                    U R                  US5      nU R                  US5      nU R                  U5      nUS-   U-   nXPR                  ;  a  U R                  0 5      U R                  U'   U R                  U   nUS   c  UR                  R                  U5        g U R                  XU5        UR                  Xv5        g )Nrm   rY   r_   r=   )rR   rp   r   r   r   rv   r   rw   )r3   rj   rE   rU   rx   rY   rA   r   s           r5   handle_order_bookascendex.handle_order_book:  s     ""7C0##GX6!!(+mh.//)&*oob&9DOOF#OOF+	W%OO""7+**6IFNN92r7   c                 n    U R                  US5      nU R                  US5      nUR                  X45        g )Nr      )
safe_floatstore)r3   booksidedeltapriceamounts        r5   handle_deltaascendex.handle_deltaT  s0     q)*u%r7   c                 d    [        S[        U5      5       H  nU R                  XU   5        M     g )Nr   )r   r   r   )r3   r   deltasro   s       r5   handle_deltasascendex.handle_deltas\  s)    q#f+&Ahq	2 'r7   c                 \   U R                  US0 5      nU R                  US5      nXSS   :  a~  U R                  US/ 5      nU R                  US/ 5      nU R                  US   U5        U R                  US   U5        XSS'   U R                  US5      nXS'   U R                  U5      US'   U$ )	Nrn   r   r=   asksbidstsr   datetime)rq   ru   r   iso8601)	r3   rj   rE   r   rn   seqNumr   r   r   s	            r5   r   "ascendex.handle_order_book_message`  s    ( w3""42g&&??44D??44Dy0$7y0$7!'g))$5I%.k"$(LL$;Ij!r7   c                 \  #    U R                  5       I Sh  vN   U R                  SSU5      u  p#SnSnUS:X  d  US:X  aJ  U R                  U R                  S0 5      nU R	                  XbS5      nUR                  5       nSU-   nSU-   nOS	nS
nU R                  XEU5      I Sh  vN $  N N7f)aF  
watch balance and get the amount of funds available for trading or funds locked in orders

https://ascendex.github.io/ascendex-pro-api/#channel-order-and-balance

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
Nr   r$   r&   accountCategoriesr'   order:balance:futures-account-updatezbalance:swap)r`   handle_market_type_and_paramsrq   r/   rR   upperrV   )r3   rB   typequeryrU   rA   r   accountCategorys           r5   watch_balanceascendex.watch_balance  s      !!!88vVFN 0 $>QSU V"../@OO-335O0G$t+K.G(K''eDDD 	" Es"   B,B(BB,#B*$B,*B,c                    U R                  US5      nS nS nUS:X  d  US:X  Ga  U R                  US5      nU R                  US5      nU R                  U5      nU R                  5       n	U R                  US5      U	S'   U R                  US5      U	S	'   U R                  5       n
U R                  US
5      U
S'   U R                  US5      U
S	'   US   (       a   SnU R                  U R                  U0 5      nO"US   nU R                  U R                  U0 5      nXUS   '   XUS   '   GOU R                  USS5      nU R                  U R                  S5      nU R                  XS5      nU R                  U R                  U0 5      nU R                  US5      nS nUc  U R                  US5      nOU/n[        S[        U5      5       Hh  nX   nU R                  U R                  US5      5      nU R                  5       nU R                  US5      US'   U R                  USS5      US	'   UUU'   Mj     SU-   nUR                  U R                  U5      U5        g )Nrm   orderfutures-orderrn   rl   babfreebtbtotalqabqtbcontractr%   r   basequoteacatr,   r$   colr   aabtbbr   )rR   rq   safe_marketaccountbalancesafe_string_lower_2r/   r   r   safe_currency_codesafe_string_2rw   safe_balance)r3   rj   rE   rU   resultr   rn   rx   ra   baseAccountquoteAccountaccountTypecategoriesAccountsbalancesro   r   coder   rA   s                      r5   handle_balanceascendex.handle_balance  sS   d ""7C0wG$>??7F3D''c2H%%h/F,,.K"&"2"24"?K#'#3#3D%#@K <<>L#'#3#3D%#@L $($4$4T5$AL!j!tR@f~tR@%06&>"&26'?#227D$GK!%?R!S##$6VLD__T\\4<F??7F3DH|??7E: 61c(m,"+..t/?/?/MN,,."&"2"27D"A#'#5#5gtS#I &t - &,t((0+>r7   c                 
  #    U R                  5       I Sh  vN   SnUb  U R                  U5      nUS   nU R                  SXT5      u  pgSnSn	US:w  a  US:w  a  Sn	SnOFU R                  U R                  S0 5      n
U R                  XS	5      nUR                  5       nS
U-   nUn	Ub  US-   U-   nU R                  XU5      I Sh  vN nU R                  (       a  UR                  X5      nU R                  XX#S5      $  N N;7f)a  

https://ascendex.github.io/ascendex-pro-api/#channel-order-and-balance

watches information on multiple orders made by the user
:param str symbol: unified market symbol of the market orders were made in
:param int [since]: the earliest time in ms to fetch orders for
:param int [limit]: the maximum number of order structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
NrY   r   r$   r&   r   zorder:FUTURESr   r'   r   r_   T)r`   ra   r   rq   r/   rR   r   rV   rc   rd   filter_by_symbol_since_limit)r3   rY   r[   r\   rB   ra   r   r   rA   rU   r   r   orderss                r5   watch_ordersascendex.watch_orders  s     !!![[(FH%F88W6>dh.%G)K $>QSU V"../@OO-335O'/9K!G%+f4K))'FF??OOF2E00tTT- 	"& Gs"   DC?B.DD:DDc                    U R                  US5      nSU-   nU R                  USU5      nU R                  U5      nU R                  c-  U R	                  U R
                  SS5      n[        U5      U l        U R                  nUR                  U5        US-   US   -   n	UR                  X5        UR                  X5        g )Nr   r   rn   r*   r#   r_   rY   )	rR   rq   parse_ws_orderr   ru   r/   r   rv   rw   )
r3   rj   rE   r   rA   rn   r   r\   r   symbolMessageHashs
             r5   handle_orderascendex.handle_order  s    T &&w5,w8##D);;%%dllM4HE07DKe'#-h?v1v+r7   c           	      f   U R                  U R                  US5      5      nU R                  US5      nU R                  US5      nU R                  XBS5      nU R                  US5      nU R                  US5      nU R                  US5      n	U R                  US5      n
U R                  US5      nU R                  US	5      nU R	                  US
5      nU R	                  US5      nU R                  US5      nS nUb(  U R                  US5      nU R                  U5      nUUS.nU R                  U R                  U R                  US5      5      5      nU R                  0 SU_SU_SS _SU_SU R                  U5      _SU_SU_SU_SS _SS _SU_SU_SU_SU_SU	_SS _S U
_US UUS S!.EU5      $ )"Nstrl   t/pqapcfqorderIdotsdcffa)costcurrencyspinfor;   clientOrderIdr   r   lastTradeTimestamprY   r   timeInForcepostOnlysider   	stopPricetriggerPricer   r  average)filled	remainingstatusfeer   )parse_order_statusrR   ru   rp   safe_string_lowersafe_numberr   parse_number	omit_zero
safe_orderr   )r3   r   ra   r   rx   r   rY   r  r   r   r  r  r;   r   r  feeCostr!  feeCurrencyIdfeeCurrencyCoder  s                       r5   r  ascendex.parse_ws_orderP  s`   v (()9)9%)FG##E3/%%eS1	!!(C8!..uc:  ,!!%-""5$/!!%/eY/%%eT2%%eT2""5$/ ,,UD9M"55mDO+C %%dnnT5E5EeT5R&ST	  
E 
" 
 T 
 	 

 Y/ 
 !"4 
 f 
 D 
 4 
  
 D 
 U 
  
 I 
 f 
  D! 
" w# 
$ - 
. / 	r7   c                    U R                  US5      n Ubt  U R                  S-   U R                  U5      -   nU R                  U R                  S   X45        U R                  US5      nUb  U R                  U R                  S   XT5        g! [         a`  n[        U[        5      (       a0  SnUR                  Xg5        XqR                  ;   a  UR                  U	 OUR                  U5         S nAgS nAff = f)	Nr    exactrE   broadFauthenticatedT)ru   r;   jsonthrow_exactly_matched_exception
exceptionsrq   throw_broadly_matched_exception	Exception
isinstancer   rejectsubscriptions)r3   rj   rE   	errorCodefeedbackmessageStringerA   s           r5   handle_error_messageascendex.handle_error_message  s     %%gv6		$77S=499W+==44T__W5Myc $ C ,889QS`k 	!011-a-"6"66,,[9a 	s   A7B 
C6AC11C6c                 *    SnUR                  X#5        g )Nr0  )rw   )r3   rj   rE   rA   s       r5   handle_authenticateascendex.handle_authenticate  s     &w,r7   c           
         U R                  X5      (       a  g U R                  US5      nU R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  S.	nU R                  XC5      nUb  U" X5        US:X  d  US:X  a*  U R                  X5        US:X  a  U R                  X5        g g g )Nrm   )	pingauthr:   depthr   r   barr   r   r   r   )r=  rR   handle_pingr@  handle_subscription_statusr   r   r   r{   r   rq   r  )r3   rj   rE   subjectmethodsmethods         r5   handle_messageascendex.handle_message  s    $$V55b ""7C0$$,,22++"==(($$**&*&9&9

 26#wG$> f.'!##F4 " %?r7   c                     U R                  USS5      nUR                  S5      S:  a&  UR                  S5      S:  d  U R                  X5        U$ )NrP    rE  r   )rR   findhandle_order_book_subscription)r3   rj   rE   rU   s       r5   rH  #ascendex.handle_subscription_status  sN     ""7D"5<< 2%w||<L/MPR/R//@r7   c                    U R                  US5      nUR                  S5      nUS   nU R                  U5      nUS   nXpR                  ;   a  U R                  U	 U R	                  0 5      U R                  U'   U R
                  S   S:X  d
  US   (       a  U R                  U R                  U5        g U R                  U R                  U5        g )NrP   r_   r   rY   defaultTyper%   r   )	rR   splitr   r   r   r/   spawnr   r   )r3   rj   rE   rU   partsrx   ra   rY   s           r5   rR  'ascendex.handle_order_book_subscription  s    ""7D1c"8!!(+!__$'"&//""5<<&&0F:4FJJt<<fEJJt55v>r7   c                   #     UR                  SU R                  US5      S.5      I S h  vN   g  N! [         aE  n[        U R                  S-   U R                  U5      -   5      nUR                  U5         S nAg S nAff = f7f)Nponghp)r<   r\  z handlePing failed with error )sendru   r5  r   r;   r1  r   )r3   rj   rE   r<  errors        r5   r[  ascendex.pong  sn     	 ++V43D3DWd3STUUU 	  +K!KdiiXYl!Z[ELL	 s6   B'3 13 B3 
B;A=8B=BBc                 <    U R                  U R                  X5        g r   )rW  r[  )r3   rj   rE   s      r5   rG  ascendex.handle_ping  s    

499f.r7   c                   #    U R                  5         SnU R                  U5      nU R                  UR                  U5      nUGc  [	        U R                  5       5      nUR                  S5      n[        U5      nU R                  XxS-
  5      n	U R                  XxS-
  5      n
US-   U
-   S-   U	-   nU R                  U R                  5      nU R                  U R                  U5      U[        R                  S5      nS[	        U R                  5       5      UU R                   US.nU R#                  XU R%                  X5      U5      I S h  vN nXTR                  U'   U$  N7f)	Nr0  r  r      +base64rD  )r<   r;   r  keysig)check_required_credentialsrj   rq   r8  r>   millisecondsrV  r   rR   base64_to_binarysecrethmacencodehashlibsha256r=   apiKeyr@   r?   )r3   rC   rB   rA   rj   futurer   urlPartspartsLengthpathversionrD  rk  	signaturerD   s                  r5   rT   ascendex.authenticate  s<    '')%S!!5!5{C>D--/0Iyy~Hh-K##HAo>D&&xqAGs?W,s2T9D**4;;7F		$++d"3VW^^XVI$**,'{{ G  ::cG8TVabbF06  - cs   E	E"E E")r   r   )0__name__
__module____qualname____firstlineno__r   r2   rF   rL   rV   r>   r	   r   listrh   r   r{   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r  r  r   r=  r@  rL  rH  rR  r[  rG  rT   __static_attributes____classcell__)r4   s   @r5   r   r      s}   $# $L 68 H AC U @B D ?CQUdhqs H H H3 H^a Hx|  ~B  yC H8!6 !F <@d[] S SS S Sbfglbm S OSaenp Sd3i S S[^ Suyz  vA SB 1F  1D @DB !S ! !S\ !( IMUW !c !# ! PT\^ S  "/ "/H3 34&3 B *, E E0Z?V Z?x 04$UYbd "U "UC "Us "Uimnsit "UH5,6 5,nhT6 t 8-& -h5V h5T	 	?V ? /& / .0  r7   r   )ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   r   rn  ccxt.base.typesr   r   r   r	   r
   r   r   r   !ccxt.async_support.base.ws.clientr   typingr   ccxt.base.errorsr   r   async_supportr    r7   r5   <module>r     sB     f f  R R R 4  0 )tt!!** tr7   