
    E#i                       S SK rS SKJr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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KJr  S S	KJr  S S
KJr  S SKJr  S SKJ r   S SKJ!r!   " S S\RD                  RF                  5      r#g)    N)
ArrayCacheArrayCacheBySymbolByIdArrayCacheBySymbolBySideArrayCacheByTimestamp)AnyBalancesBoolIntMarketOrder	OrderBookPositionStrStringsTickerTrade)Client)List)ExchangeError)AuthenticationError)ArgumentsRequired)
BadRequest)	BadSymbol)NetworkError)InvalidNonce)ChecksumErrorc                   f  ^  \ rS rSrS\4U 4S jjrS r0 4S\S\4S jjr	0 4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0 4S\S\4S jjrS\4S jrSS
S
0 4S\S\S\S\S\\   4
S jjrS0 4S\S\S\4S jjrS\4S jrS
0 4S\S\S\4S jjr0 4S\S\4S jjrS\4S jrS rS rS rS\4S jrS\4S jrS\4S jr S
S
S
0 4S\!S\S\S\\   4S jjr"S
0 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# jr(S
S
S
0 4S$\)S\S\S\\*   4S% jjr+S& r,0 4S\-4S' jjr.S\4S( jr/S\4S) jr0S\S*\14S+ jr2S\4S, jr3S\4S- jr4S. r5S\4S/ jr6S\4S0 jr7S\S\84S1 jr9S\4S2 jr:0 4S\4S3 jjr;S>S4 jr<S?S5 jr=S
0 4S6 jr>0 4S7\?S8\S9\4S: jjr@0 0 4S; jrA0 4S< jrBS=rCU =rD$ )@htx   returnc                   > U R                  [        [        U ]  5       0 SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SSSSSSS.ESSSSSS.SSS.SSS.S.S S!S.SSS.S".S#.S$S%SS.S&S'S.S(S)S.S.S&S'S.S*S+S.S.S#.S,.00S-S-SS.SS/S0.S1S0S2S30S4.SS5[        [
        [        [        [        [        [        S6.00S7.5      $ )8NwsTcreateOrderWsFeditOrderWsfetchOpenOrdersWsfetchOrderWscancelOrderWscancelOrdersWscancelAllOrdersWsfetchTradesWsfetchBalanceWswatchOrderBookwatchOrderswatchTickerswatchTickerwatchTradeswatchTradesForSymbolswatchMyTrades)watchBalance
watchOHLCVunwatchTickerunwatchOHLCVunwatchTradesunwatchOrderBookapizwss://{hostname}/wszwss://{hostname}/ws/v2zwss://{hostname}/feed)publicprivatefeedz!wss://api.hbdm.com/linear-swap-wsz+wss://api.hbdm.com/linear-swap-notification)r:   r;   zwss://api.hbdm.com/wszwss://api.hbdm.com/notification)linearinversezwss://api.hbdm.com/swap-wsz$wss://api.hbdm.com/swap-notification)r>   r=   )spotfutureswapzwss://api-aws.huobi.pro/wszwss://api-aws.huobi.pro/ws/v2z wss://api.hbdm.vn/linear-swap-wsz*wss://api.hbdm.vn/linear-swap-notificationzwss://api.hbdm.vn/wszwss://api.hbdm.vn/notificationzwss://api.hbdm.vn/swap-wsz#wss://api.hbdm.vn/swap-notification)r9   zapi-aws        )
maxRetrieschecksumdepthgunzipnamemarket.{marketId}.detail)tradesLimit
OHLCVLimitr9   r,   r"   r/   exact)zbad-request200220212001201120404007)hasurlsoptions
exceptions)deep_extendsuperr   describer   r   r   )self	__class__s    F/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/pro/htx.pyrZ   htx.describe   s<   c4 9 ;d u $U	
    !% $U   !% !$ t  t t  (!"  #$ !%"!% $!%$(/4  +@+C(?% /R/\+"
 /F/P,"	' /K/U,"
 /R/\+"	%! < +G+J(?% /Q/[+"
 /E/O,"	' /Q/[+"
 /J/T,"	%!$;8:<|  $""# $ # d 6 " '1 3 * ) ) * *
Ot>
 t t	    c                     U R                  U R                  U R                  SS5      S5      nXR                  S'   [        U5      $ )N	requestIdr      )sumsafe_integerrV   str)r[   ra   s     r]   
request_idhtx.request_id   s;    HHT..t||[!LaP	$-[!9~r_   symbolc                   #    U R                  5       I Sh  vN   U R                  U5      nUS   nU R                  U R                  S0 5      nU R	                  USS5      nUS:X  a!  US   S:w  a  [        U R                  S	-   5      eU R                  US
US   05      nU R                  US   US   5      nU R                  XqUSU5      I Sh  vN $  N N7f)a  
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

https://www.htx.com/en-us/opend/newApiPages/?id=7ec53561-7773-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=28c33ab2-77ae-11ed-9966-0242ac110003

:param str symbol: unified symbol of the market to fetch the ticker for
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
Nrh   r/   rI   rJ   market.{marketId}.tickertyper?   x watchTicker() with name market.{marketId}.ticker is only allowed for spot markets, use market.{marketId}.detail insteadmarketIdidr=   )
load_marketsmarket	safe_dictrV   safe_stringr   rn   implode_paramsget_url_by_market_typesubscribe_public)r[   rh   paramsrp   rV   topicmessageHashurls           r]   watch_tickerhtx.watch_ticker   s      !!!V$!..}bA  &2LM..6&>V3KTWW  (b  b  c  c))%*fTl1KL))&.&:JK**3T6RRR 	" Ss"   CCB7CCCCc                 x  #    U R                  5       I Sh  vN   U R                  U5      nSnU R                  U R                  S0 5      nU R	                  USS5      nUS:X  a!  US   S:w  a  [        U R                  S	-   5      eU R                  US
US   05      nU R                  X7XB5      I Sh  vN $  N N7f)a#  
unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list

https://www.htx.com/en-us/opend/newApiPages/?id=7ec53561-7773-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=28c33ab2-77ae-11ed-9966-0242ac110003

:param str symbol: unified symbol of the market to fetch the ticker for
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
Ntickerr/   rI   rJ   rj   rk   r?   rl   rm   rn   )	ro   rp   rq   rV   rr   r   rn   rs   unsubscribe_publicr[   rh   rv   rp   rw   rV   channelsubMessageHashs           r]   un_watch_tickerhtx.un_watch_ticker   s      !!!V$..}bA""7F4NO00VF^v5MTWW  (b  b  c  c,,Wz6$<6PQ,,VUSSS 	" Ts"   B:B6BB:1B82B:8B:clientc                 v   U R                  US0 5      nU R                  US5      nUR                  S5      nU R                  US5      nU R                  U5      nU R	                  X75      nU R                  US5      n	XS'   U R                  U	5      US'   US   n
XR                  U
'   UR                  X5        U$ )	Ntickch.rb   ts	timestampdatetimerh   )
safe_valuerr   splitsafe_marketparse_tickeriso8601tickersresolve)r[   r   messager   r   partsrm   rp   r}   r   rh   s              r]   handle_tickerhtx.handle_ticker   s    B w3gt,##E1-!!(+""40OOGT2	'{!\\)4z!%Vv"r_   Nsincelimitc                 X  #    U R                  5       I Sh  vN   U R                  U5      nUS   nSUS   -   S-   nU R                  US   US   5      nU R                  XqUSU5      I Sh  vN nU R                  (       a  UR                  X5      nU R                  XUSS	5      $  N N<7f)
a  
get the list of most recent trades for a particular symbol

https://www.htx.com/en-us/opend/newApiPages/?id=7ec53b69-7773-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=28c33c21-77ae-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=28c33cfe-77ae-11ed-9966-0242ac110003

: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>`
Nrh   market.rn   z.trade.detailrk   r=   r   T)ro   rp   rt   ru   
newUpdatesgetLimitfilter_by_since_limit)	r[   rh   r   r   rv   rp   rx   ry   tradess	            r]   watch_tradeshtx.watch_trades   s      !!!V$!&,.@))&.&:JK,,S+tVTT??OOF2E))&TRR 	"
 Us"   B*B&AB*+B(,;B*(B*c                 *  #    U R                  5       I Sh  vN   U R                  U5      nSnU R                  U R                  S0 5      nU R	                  USS5      nU R                  USUS   05      nU R                  X7XB5      I Sh  vN $  Nx N7f)ax  
unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list

https://www.htx.com/en-us/opend/newApiPages/?id=7ec53b69-7773-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=28c33c21-77ae-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=28c33cfe-77ae-11ed-9966-0242ac110003

:param str symbol: unified symbol of the market to fetch the ticker for
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
Nr   r0   rI   zmarket.{marketId}.trade.detailrm   rn   )ro   rp   rq   rV   rr   rs   r~   r   s           r]   un_watch_tradeshtx.un_watch_trades  s      !!!V$..}bA""7F4TU,,Wz6$<6PQ,,VUSSS 	" Ts"   BBA3B
BBBc                 6   U R                  US0 5      nU R                  US0 5      nU R                  US5      nUR                  S5      nU R                  US5      nU R                  U5      nUS   n	U R                  U R                  U	5      n
U
c6  U R                  U R                  SS5      n[        U5      n
XR                  U	'   [        S	[        U5      5       H(  nU R                  XL   U5      nU
R                  U5        M*     UR                  X5        U$ )
Nr   datar   r   rb   rh   rK   rB   r   )r   rr   r   r   r   rd   rV   r   rangelenparse_tradeappendr   )r[   r   r   r   r   r   r   rm   rp   rh   tradesCacher   itrades                 r]   handle_tradeshtx.handle_trades  s   * w3tVR0gt,##E1-!!(+!oodkk6:%%dllM4HE$U+K"-KKq#d)$A$$TWf5Eu% % 	{'r_   1m	timeframec                   #    U R                  5       I Sh  vN   U R                  U5      nUS   nU R                  U R                  X"5      nSUS   -   S-   U-   nU R	                  US   US   5      n	U R                  XUSU5      I Sh  vN n
U R                  (       a  U
R                  X5      nU R                  XUSS	5      $  N N<7f)
a  
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market

https://www.htx.com/en-us/opend/newApiPages/?id=7ec53241-7773-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=28c3346a-77ae-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=28c33563-77ae-11ed-9966-0242ac110003

: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
Nrh   r   rn   .kline.rk   r=   r   T)	ro   rp   rr   
timeframesrt   ru   r   r   r   )r[   rh   r   r   r   rv   rp   intervalrx   ry   ohlcvs              r]   watch_ohlcvhtx.watch_ohlcvA  s      !!!V$!##DOOYJ&,.:XE))&.&:JK++CdFSS??NN61E))%q$GG 	" Ts"   C	CA3C	
C;C	C	c                   #    U R                  5       I Sh  vN   U R                  U5      nU R                  U R                  X"5      nSUS   -   S-   U-   nSnUS   U//US'   U R	                  XFXs5      I Sh  vN $  Nf N7f)a  
unWatches historical candlestick data containing the open, high, low, and close price, and the volume of a market

https://www.htx.com/en-us/opend/newApiPages/?id=7ec53241-7773-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=28c3346a-77ae-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=28c33563-77ae-11ed-9966-0242ac110003

:param str symbol: unified symbol of the market
:param str timeframe: the length of time each candle represents
:param dict [params]: extra parameters specific to the exchange API endpoint
:param dict [params.timezone]: if provided, kline intervals are interpreted in that timezone instead of UTC, example '+08:00'
:returns int[][]: A list of candles ordered, open, high, low, close, volume
Nr   rn   r   r   rh   symbolsAndTimeframes)ro   rp   rr   r   r~   )r[   rh   r   rv   rp   r   r   rw   s           r]   un_watch_ohlcvhtx.un_watch_ohlcv[  s      !!!V$##DOOYJ"VD\1I=H+1(+;Y*G)H%&,,VUSSS 	" Ts"   BA=A!B8A?9B?Bc                 t   U R                  US5      nUR                  S5      nU R                  US5      nU R                  U5      nUS   nU R                  US5      nU R                  U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S5      nU R                  X5      nU
R                  U5        UR                  X5        g )	Nr   r   rb   rh   rC   rL   rB   r   )rr   r   r   find_timeframer   ohlcvsrd   rV   r   parse_ohlcvr   r   )r[   r   r   r   r   rm   rp   rh   r   r   storedr   r   parseds                 r]   handle_ohlcvhtx.handle_ohlcvq  s   " gt,##E1-!!(+!##E1-''1	"oodkk62FFV!4i@>%%dllL$GE*51F-3KK	*w/!!$/fv"r_   c                   #    U R                  5       I Sh  vN   U R                  U5      nUS   n/ SQnU R                  U R                  S0 5      nUc  U R	                  USS5      nU R                  X%5      (       d  [        U R                  S-   5      eSnUS   (       a  S	US
   -   S-   U R                  U5      -   nO S	US
   -   S-   U R                  U5      -   S-   nU R                  US   US   SS5      nU R                  n	US   (       d  U R                  U5      nSUS'   Sn	U R                  XXyU5      I Sh  vN n
U
R                  5       $  GN= N7f)a  

https://huobiapi.github.io/docs/dm/v1/en/#subscribe-market-depth-data
https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#subscribe-incremental-market-depth-data
https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-subscribe-incremental-market-depth-data

watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
: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
Nrh   )      rD   i  r,   rG   rD   z? watchOrderBook market accepts limits of 5, 20, 150 or 400 onlyr?   r   rn   .mbp..depth.size_
.high_freqrk   r=   FTincremental	data_type)ro   rp   rq   rV   rd   in_arrayr   rn   number_to_stringrt   handle_order_book_subscriptionextendru   r   )r[   rh   r   rv   rp   allowedLimitsrV   rx   ry   method	orderbooks              r]   watch_order_bookhtx.watch_order_book  se     !!!V$!)
 ../?D=%%gw<E}}U22*k kll&>#fTl2W<t?T?TUZ?[[K#fTl2^CdF[F[\aFbbeqqK))&.&:JESWX44f~[[(F"/F;F//[RXYY	  3 	"0 Zs"   EED'E>E?EEc                   #    U R                  5       I Sh  vN   U R                  U5      nSnU R                  U R                  S0 5      nU R	                  USS5      nSnUS   (       a  SUS   -   S	-   U R                  U5      -   nO SUS   -   S
-   U R                  U5      -   S-   nUS   (       d  SUS'   U R                  X7XB5      I Sh  vN $  N N7f)a  
unsubscribe from the orderbook channel

https://huobiapi.github.io/docs/dm/v1/en/#subscribe-market-depth-data
https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#subscribe-incremental-market-depth-data
https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-subscribe-incremental-market-depth-data

:param str symbol: unified symbol of the market to fetch the order book for
:param dict [params]: extra parameters specific to the exchange API endpoint
:param int [params.limit]: orderbook limit, default is None
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
Nr   r,   rG   rD   r?   r   rn   r   r   r   r   r   )ro   rp   rq   rV   rd   r   r~   )r[   rh   rv   rp   rw   rV   rG   r   s           r]   un_watch_order_bookhtx.un_watch_order_book  s      !!!V$../?D!!'7C8&>&5?$BWBWX]B^^N&5FI^I^_dIeehttNv"/F;,,VUSSS 	" Ts"   CCB5CCCCc                 .   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   nU R                  US5      n	UR                  n
U R                  U
S0 5      nU R                  X5      nU R                  US5      nU R                  US5      nU R                  U	S	5      nXS
'   U R                  US5      nUUS'   U R                  US5      nU R                  UU5      nUR                  UU5        Ub  X:  a  U R                  SSS5      nU R                  USS5      nUU:  ai  XQR                  ;   aY  U R                  US5      nU R                  SUU-
  5      nUUS'   X1R                  U'   U R                  UU R                  XU5        g g [        U R                  S-   U-   S-   [        U5      -   S-   5      eUR!                  U5        [#        S[%        U
5      5       H  nU R'                  XU   5        M     / Ul        XR                  U'   UR                  X5        g ! [(         a6  nUR                  U	 U R                  U	 UR+                  UU5         S nAg S nAff = f)Nrh   rx   rn   lastTimestampr   r   r   
prevSeqNumseqNumnoncer   r   r,   rE   rC   numAttemptsrb   rB   zC failed to synchronize WebSocket feed with the snapshot for symbol z in z	 attempts)rr   rd   
orderbooksr   cacheparse_order_book
order_bookr   handle_optionsubscriptionsrc   delaywatch_order_book_snapshotr   rn   re   resetr   r   handle_order_book_message	Exceptionreject)r[   r   r   subscriptionrh   rx   rn   r   r   r   messagesfirstMessagesnapshotr   sequencer   snapshotTimestampsnapshotLimitsnapshotOrderBookmaxAttemptsr   	delayTimer   es                           r]   handle_order_book_snapshothtx.handle_order_book_snapshot  s   , !!,9&&|]Cgt,)),H)	*/I??7F3D H??8Q;L,,T:H??<8D((|<H%%dH5E %W $ 1 1'4 @,=L) --lGDM $- HNN,b1 e&6"001A<QRS"//mQO,"&:&::&*hh{A&>$(HHT=CT3T$U	6A]3<H,,[9

9d.L.Lf_kl ; 'tww1v'vy'  CI  (I  LO  P[  L\  (\  _j  (j  k  k)q#h-0A226A;G 1"$	*3'y6 	*$$[1'MM![))	*s    
E3I ?BI 
J,JJc           	      V  #    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S5      n	U R                  U5      n
U R	                  U
S   U
S	   S
S5      nU R                  5       nUUS.nUUUUUU	UU R                  S.n U R                  XXU5      I S h  vN nUR                  5       $  N! [         a)  nUR                  U	 UR                  UU5         S nAg S nAff = f7f)Nrx   rh   r   r   rv   r   r   rk   r=   FT)reqrn   )rn   rx   rh   r   rv   r   r   r   )rr   rd   r   rp   rt   rf   r   watchr   r   r   r   )r[   r   r   r   rx   rh   r   r   rv   attemptsrp   ry   ra   requestsnapshotSubscriptionr   r   s                    r]   r   htx.watch_order_book_snapshot  s?    &&|]C!!,9!!,8%%gt4	x8$$\=!DV$))&.&:JESWXOO%	
 &#&55	&
	*"jjMabbI??$$ c 	*$$[1MM![))	*sB   CD)C3 C1C3 0D)1C3 3
D&=D!D)!D&&D)c                 n    U R                  US5      nU R                  US5      nUR                  X45        g )Nr   rb   )
safe_floatstore)r[   booksidedeltapriceamounts        r]   handle_deltahtx.handle_delta>  s.    q)*u%r_   c                 d    [        S[        U5      5       H  nU R                  XU   5        M     g )Nr   )r   r   r  )r[   r  deltasr   s       r]   handle_deltashtx.handle_deltasC  s)    q#f+&Ahq	2 'r_   c                    U R                  US5      nUR                  S5      nU R                  US5      nU R                  U5      nUS   nU R                  U   nU R                  US0 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S:X  a'  U R                  XU5      nUR                  U5        XS'   UbL  XS   :  aD  U R                  SSS5      nU(       a*  [        U R                  S-   U R                  U5      -   5      eUS   =(       a    XS   :H  nUS   =(       a    US-
  US   :H  nU(       d  U(       aw  U R                  U	S/ 5      nU R                  U	S/ 5      nU R                  US   U5        U R                  US   U5        U(       a  U
OUUS'   XS'   U R                  U5      US'   g g )Nr   r   rb   rh   r   r   r   eventversionr   r   r   r,   rF   T r?   contractasksbidsr   r   )r   r   rr   r   r   rd   r   r   r   r   rn   orderbook_checksum_messager	  r   )r[   r   r   r   r   rm   rp   rh   r   r   r   r   r  r  r   r   rF   spotConditonnonSpotConditionr  r  s                        r]   r   htx.handle_order_book_messageG  s   F __Wd+##E1-!!(+!OOF+	w3""42&&t\:
  w/##D)4%%gt4	J,,T9EHOOH%!(g"
w5G(G))*:JMH#DGGcMD4S4STZ4[$[\\f~L:79K+K!*-U7Q;)GBT3T+??44D??44Dy0$7y0$7+7WIg%.k"$(LL$;Ij! ,r_   c                 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                  S5      nU R                  US5      nU R                  U5      n	XR                  ;  aT  U R                  US5      n
U
R                  S5      nU R                  US5      nU R                  0 U5      U R                  U	'   U R                  U	   nUc"  US   c  UR                  R                  U5        g U R                  X5        UR                  X5        g )	Nr   r   r  r   rb   rC   _r   )rr   rq   r   safe_symbolr   rd   r   r   r   r   r   )r[   r   r   rx   r   r  r   r   rm   rh   size	sizePartsr   r   s                 r]   handle_order_bookhtx.handle_order_book  s   \ &&w5~~gv.  w/gt,##E1-!!(+//)##E1-D

3I%%i3E&*oob%&@DOOF#OOF+	M	' 2 :OO""7+**6;NN92r_   c                     U R                  US5      nU R                  U5      nU R                  US5      nU R                  0 U5      U R                  U'   US   (       a  U R                  U R                  XU5        g g )Nrh   r   r?   )rr   rp   rd   r   r   spawnr   )r[   r   r   r   rh   rp   r   s          r]   r   "htx.handle_order_book_subscription  so    !!,9V$!!,8"&//"e"<&>JJt55vU r_   c                   #    U R                  5         U R                  5       I Sh  vN   SnSnSnSnSn	Sn
SnUb/  U R                  U5      nUS   nUS   nUS   (       a  SOSnUS   nOuU R                  U R                  SS	5      nU R                  USU5      nU R                  U R                  S
SS5      nU R                  US
U5      nU R                  USS
/5      nUS	:X  aV  SnUcC  U R                  U R                  SSS5      nU R                  USU5      nU R                  US5      nSU-   S-   U-   nUn	O>U R                  X[Xt5      nU R                  US5      n	U R                  US5      nUS-   S-   nU R                  XX[U5      I Sh  vN n
U R                  (       a  U
R                  X5      nU R                  XX#S5      $  GN N<7f)a  
watches information on multiple trades made by the user

https://www.htx.com/en-us/opend/newApiPages/?id=7ec53dd5-7773-11ed-9966-0242ac110003

:param str symbol: unified market symbol of the market trades were made in
:param int [since]: the earliest time in ms to fetch trades for
:param int [limit]: the maximum number of trade structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
N*rh   rk   r=   r>   lowercaseIddefaultTyper?   subTypedefaultSubTyper2   mode0ztrade.clearing##r   rb   :r   T)check_required_credentialsro   rp   rr   rV   safe_string_2omit"get_order_channel_and_message_hashsubscribe_privater   r   filter_by_symbol_since_limit)r[   rh   r   r   rv   rk   rm   rp   rx   r   r   r$  r&  channelAndMessageHashorderMessageHashs                  r]   watch_my_tradeshtx.watch_my_trades  s     	'')!!![[(FH%F&>D"("2h	Gm,H##DLL-HD##FFD9D((yBRT\]G&&vy'BGYYv	':;F6>D|))$,,QTU''=66208;cADHK!G$($K$KD[a$j!&&'<a@G#//0EqI +S07:K--gDSYZZ??OOF2E00tTTM 	"F [s"   $GG
E)GG:GGc                    S nS nU R                  U R                  SS5      nU R                  USU5      nU R                  US5      nUb  US   R                  5       OS nUb  US   OS n	Un
U
nUS:X  a>  U R                  USS5      nUS:X  a  U
S-   OU
nUnUb  US	U-   -  nUnXe/$ US	-   S
-   n Xe/$ US:X  a*  U	b  U
S	-   U	R                  5       -   nUnXe/$ U
S	-   S
-   n Xe/$ Ub  U
S	-   U-   nUnXe/$ U
S	-   S
-   nXe/$ )N	orderTypeordersr"  baseIdr=   margincross_crossr   r!  r@   )rr   rV   r,  lower)r[   rk   r$  rp   rv   rx   r   r5  
marketCoder7  prefix
marginModemarginPrefixs                r]   r-  &htx.get_order_channel_and_message_hash'  s   $$T\\;I	$$V[)D	6;/7=7IVM*002PT
&,&8!th))&(GDJ1;w1F6H,VL&K%sZ//%" %% ',s2 %% X! 3,7% %% !3,, %% % 3,3% %% !3,,%%r_   c                   #    U R                  5       I Sh  vN   SnSnSnSnUb/  U R                  U5      nUS   nUS   nUS   nUS   (       a  SOSnOuU R                  U R                  SS	5      nU R                  USU5      nU R	                  U R                  S
SS5      nU R                  US
U5      nU R                  USS
/5      nSn	Sn
US	:X  a  SU-   n	U	n
O6U R                  XVXt5      nU R                  US5      n
U R                  US5      n	U R                  XXVU5      I Sh  vN nU R                  (       a  UR                  X5      nU R                  XUSS5      $  GNM N=7f)a  
watches information on multiple orders made by the user

https://www.htx.com/en-us/opend/newApiPages/?id=7ec53c8f-7773-11ed-9966-0242ac110003

: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>`
Nr!  rh   rk   r"  r=   r>   r#  r?   r$  r%  zorders#r   rb   r   T)ro   rp   rr   rV   r+  r,  r-  r.  r   r   r   )r[   rh   r   r   rv   rk   r$  rp   suffixrx   r   r0  r6  s                r]   watch_ordershtx.watch_ordersK  s     !!![[(FH%F&>DM*F"("2h	G##DLL-HD##FFD9D((yBRT\]G&&vy'BGYYv	':;F6>(61K!G$($K$KD[a$j!&&'<a@G**+@!DK--gDSYZZ??OOF2E))&TRR; 	"4 [s"   E(E#DE((E&);E(&E(c                 :   U R                  USS5      nU R                  US5      nU R                  US5      nUc  U R                  US5      nU R                  U5      nS nUb  U R                  US5      nUS:X  a  U R	                  XF5      n	U R                  U	S5      n
U	/nU R                  U R                  US	S
S5      5      nU R                  US5      nU R                  US5      nU
UUUS   U R                  U5      U R                  U5      U R                  US5      U R                  US5      US.	nUnOU R                  XF5      nOU R                  X&5      nU R                  US/ 5      n[        U5      nUS:  aO  UUUS.nU R                  US5      U R                  US5      U R                  US5      S.nU R                  UUU5        U R                  c-  U R                  U R                  SS5      n[        U5      U l        U R                  nUR                  U5        UR!                  U R                  U5        UR#                  SUS   -   S5      nU R%                  US5      nUR#                  SU-   S5      nUR!                  U R                  U5        g )Nr   rw   r   contract_coderh   	eventTyper   orderorderStatusstatusclosedexecAmt	remainAmt
orderPrice	orderSize)	rn   r   rJ  rh   filled	remainingr  r  infor   )r   r   rh   rn   rk   side)rH  rk   rS  ordersLimitrB   r   r"   r7  )r+  r   rr   r   parse_order_tradeparse_order_statusparse_numbersafe_numberparse_ws_orderr   handle_my_trader6  rd   rV   r   r   r   replacesafe_string_lower)r[   r   r   rx   r   rm   rp   parsedOrderrG  parsedTradeorderIdr   rJ  rP  rQ  rH  	rawTradestradesLengthtradesObjectextendTradeParamsr   cachedOrdersgenericMessageHashlowerCaseBaseIds                           r]   handle_orderhtx.handle_orderv  s   r (($@w/##G_=''h7H!!(+(({;IG# #44TB**;@%001C1CD-Yack1lm))$	: ,,T;?	!$$$X."//7!%!2!29!=!--dLA"..t[A 
 $"11$? --g>K"=Iy>La'%&& "--k4@ ,,[&A ,,[&A+! $$V\;LM;;%%dllM4HE07DK{{K(t{{K0 )00vm7L1LbQ00B/77o8MrRt{{$67r_   c                 <   U R                  USS5      nU R                  US5      nU R                  USS5      nU R                  XR5      nU R	                  XR5      nU R                  USS5      nU R                  U R                  USS	5      5      nU R                  US
S5      n	U R                  USS5      n
U R                  US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U R                  U5      S.nU R                  US5      nU R                  US5      n/ nUb  UR                  S5      nU R                  US5      nUc  U R                  US5      nU R                  US5      nUc  U R                  US5      nU R                  US5      nU R                  0 SU_SU	_SU
_SU_S U R                  U5      _S!U_S	U_SU_SU_S"S _S#S _S$U_SU_S%U_S&U_S'S _S(U_UUUS).EU5      $ )*NlastActTimer   orderCreateTimerF  rh   rO  volumerI  rJ  r`  order_idclientOrderIdclient_order_idrN  r  rL  rk   fee	fee_assetcostcurrencytrade_avg_pricer   -rb   order_price_typer   	direction
orderValuerR  rn   r   r   lastTradeTimestamptimeInForcepostOnlyrS  r  rP  rQ  rt  )rq  averager   )safe_integer_2rd   r+  r   r  rW  rr   safe_currency_coder   r   r]  
safe_orderr   )r[   rH  rp   r{  createdrm   rh   r  rJ  rn   ro  r  rP  typeSidefeeCostrq  feeCurrencyIdavgPricera  typeSidePartsrk   rS  rt  s                          r]   rZ  htx.parse_ws_order3  s   d "00tL##E+<=%%e_hG!!(3!!(3##E;A((););E=RZ)[\y*=**5/CTU""5,@!!%3##E62""5%0 ,,UK@M 33MBC ##E+<=OOE73	$NN3/M%%mQ7<##E+=>D%%mQ7<##E;7D|4  
E 
" 
 ] 
 	 

 W- 
 !"4 
 f 
 f 
 D 
 4 
  
 D 
 U 
 f 
 f 
  ! 
" D# 
$ ) 
* + 	r_   c                    U R                  S U5      nUS   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                  S5      nUS	   n
US
   n	U R	                  US5      nS nUb  U(       a  SOSnU R                  UUU R                  U5      UUUU	UU
UUS S S.U5      $ )Nrh   tradeId
tradePricetradeVolumer`  	tradeTimerk   rw  r   rb   	aggressortakermakerrR  r   r   rh   rn   rH  rk   takerOrMakerrS  r  r  rt  rq  )r   rr   rd   r   r   
safe_trader   )r[   r   rp   rh   r  r  r  rH  r   rk   rS  	typePartsr  r  s                 r]   rV  htx.parse_order_trade  s%   * !!$/!""5)4  5!!%7  	2%%e[9	v.

3IQ<DQ<DOOE;7	 &/7WL"Y/( 
  	r_   symbolsc                   #    U R                  5       I Sh  vN   SnSnU R                  U5      (       d%  U R                  U5      nSSR                  U5      -   nSnSnUb  US   nUS   (       a  SOSnO2U R	                  SXT5      u  ptUS	:X  a  S
nU R                  USSU5      u  pU R                  U5      nSn	U R                  SUS5      u  pUS:H  n
U R                  XzS5      nU	S-   U-   nU	S:X  a  SOSnU R                  XXxU5      I Sh  vN nU R                  (       a  U$ U R                  U R                  U   U	   XUS5      $  GN4 N>7f)a  

       https://www.huobi.com/en-in/opend/newApiPages/?id=8cb7de1c-77b5-11ed-9966-0242ac110003
       https://www.huobi.com/en-in/opend/newApiPages/?id=8cb7df0f-77b5-11ed-9966-0242ac110003
       https://www.huobi.com/en-in/opend/newApiPages/?id=28c34a7d-77ae-11ed-9966-0242ac110003
       https://www.huobi.com/en-in/opend/newApiPages/?id=5d5156b5-77b6-11ed-9966-0242ac110003

       watch all open positions. Note: huobi has one channel for each marginMode and type
       :param str[]|None symbols: list of unified market symbols
@param since
@param limit
       :param dict params: extra parameters specific to the exchange API endpoint
       :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
       NrU  ::,rk   r=   r>   watchPositionsr?   r@   r$  r9  T
:positionszpositions_cross.*zpositions.*F)ro   is_emptyget_market_from_symbolsjoinhandle_market_type_and_paramshandle_option_and_paramsmarket_symbolshandle_margin_mode_and_paramsrt   r.  r   filter_by_symbols_since_limit	positions)r[   r  r   r   rv   rp   rx   rk   r$  r>  isLinearry   r   newPositionss                 r]   watch_positionshtx.watch_positions  sz     !!!}}W%%11':F'!22K&>D"("2h	G==>NPV_LDv~";;FDTV_ahiOG%%g.
!??@PRXZab
x'))$$? </+=*4*?%m!33G$Y_``??11$..2Ej2QSZchjopp5 	". as"   EE
C7EE<EEc                    UR                   nU R                  USS5      nUS:X  a  SOSnU R                  c  0 U l        U R                  U R                  U5      nUc  0 U R                  U'   U R                  Xe5      nUc  [	        5       U R                  U   U'   U R                  U   U   nU R                  US/ 5      n	/ n
U R                  US5      n[        S[        U	5      5       HR  nX   nU R                  U5      nXS	'   U R                  U5      US
'   U
R                  U5        UR                  U5        MT     U R                  XS-   5      n[        S[        U5      5       Hl  nX   nUR                  S5      nUS   nUR                  S5      nU R                  U
SUS5      nU R                  U5      (       a  MZ  UR                  UU5        Mn     UR                  XS-   5        g )Nrw   rU  positions_crossr9  isolatedr   r   r   r   r   z:positions::r  rb   r  rh   Fr  )ry   rr   r  r   r   rd   r   r   parse_positionr   r   find_message_hashesr   filter_by_arrayr  r   )r[   r   r   ry   rw   r>  clientPositionsclientMarginModePositionsr   rawPositionsr  r   r   rawPositionpositionmessageHashesrx   r   symbolsStringr  r  s                        r]   handle_positionshtx.handle_positions=  s   H jj  '26!&*;!;W*
>>!DN//$..#>""$DNN3$(OOO$P!$,.F.HDNN3
+s#J/w;%%gt4	q#l+,A&/K**;7H$-[!#'<<	#:HZ )LL" - 00n9TUq#m,-A'*K%%d+E!!HM#))#.G,,\8WeTI==++y+6 . 	|,%>?r_   c                   #    SnU R                  SSU5      u  p!SnU R                  SSUS5      u  p1U R                  USSS5      nU R                  USS/5      nU R	                  5       I Sh  vN   SnSnSnUS:X  a:  U R                  U R                  SSS	5      nU R                  USU5      nS
U-   nUnGOU R                  US5      n	U R                  US5      n
U	b  U R                  U	5      OSnU
b  U R                  U
5      OSnU R                  USS5      nU R                  U/ SQ5      nSnUnUS:X  a]  U(       a  SnUnUS-   S-   nOUS:X  a  US-   OUnUnUS:X  a  U	b  USUS   -   -  nUnO\US-   S-   nOSUb  US-   US   -   nUnOBUS-   S-   nO9US:X  a  Ub  USUS   -   -  nUnO"US-   S-   nOUb  USUS   -   -  nUnOUS-   S-   nUUUS.nU R                  XeX#X5      I Sh  vN $  GN N7f)aS  
watch balance and get the amount of funds available for trading or funds locked in orders

https://www.htx.com/en-us/opend/newApiPages/?id=7ec52e28-7773-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=10000084-77b7-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=8cb7dcca-77b5-11ed-9966-0242ac110003
https://www.htx.com/en-us/opend/newApiPages/?id=28c34995-77ae-11ed-9966-0242ac110003

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
Nr3   r=   isUnifiedAccountunifiedFr?   r&  2zaccounts.update#rh   ru  r8  r9  )ru  rh   r8  accountsaccounts_unifyr   usdtr:  r  rn   r!  r@   )rk   r$  r8  )r  handle_sub_type_and_paramssafe_value_2r,  ro   r+  rV   rr   rp   ru  r.  )r[   rv   rk   r$  r  rx   r   r>  r&  rh   ru  rp   currencyCoder=  subscriptionParamss                  r]   watch_balancehtx.watch_balance  s     99.$PVW99.$PVX`a,,V5GTYZ6$6	#BC!!!
6>%%dllNFCPD##FFD9D1D8K!G%%fh7F''
;H-3-?T[[(dF7?7K4==2RVL))&(GDJYYv'GHFF K("#-F"(K$slV3G 4>3HVh.vF"(K!Z/!-'3+==K&1G '-slS&8G (3&,sl\$5G&GG*1K '-slS&8G!+3d);#;;K)G %slS0G %3#55K)G %slS0G $
 ++G$QWlllK 	"J ms%   A+G5-G0.E=G5+G3,G53G5c                 
   U R                  US5      nU R                  US/ 5      nU R                  USU R                  US5      5      nXPR                  S'   U R	                  U5      U R                  S'   X@R                  S'   Ub  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'   XR                  U'   U R                  U R                  5      U l        UR                  U R                  U5        g [        U5      n	U	S:X  a  g U R                  US0 5      n
U R                  US5      nUR                  S5      nU R                  US5      nU R                  UR                  XS-   5      nUcE  U R                  U
SS5      nUSUR                  5       -   -  nU R                  UR                  U5      nU R                  US5      nU R                  US5      nUS:X  a  U R                  U
S5      nU R                  U5      nU R                  U
S5      nU R                  5       nU R                  U
S5      US
'   UUS'   UU R                  U'   U R                  U R                  5      U l        UR                  U R                  S5        GOUS:X  Ga  U R                  US5      nUS:X  Ga  US:X  a  SOSnU R                  U
U/ 5      n[        U5      nUS:  a  [        S[        U5      5       H  nUU   nU R                  USS 5      nU R!                  U5      nU R                  US5      nU R#                  U5      nU R                  US!US"   5      nUc  Mj  U R                  5       nU R                  US#S$5      US
'   U R                  US5      US'   0 nUUU'   US   nU R                  U5      U R                  U'   M     GO[[        S[        U5      5       H  nUU   nU R                  5       nU R                  US#S$5      US
'   U R                  US5      US'   U R                  USS5      nU R                  U5      nXR                  U'   U R                  U R                  5      U l        M     O[        S[        U5      5       H  nUU   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'   XR                  U'   U R                  U R                  5      U l        M     UR                  U R                  U5        g )%Nr   r   
changeTimer   r   r   rR  ru  	availablefreebalancetotalr   rw   r   z.*margin_assetrh   rk   r$  r  margin_frozenwithdraw_availableusedr=   r8  r9  r@   futures_contract_detailcontract_detailrF  margin_accountsettlecodemargin_balancemargin_available)rr   r   rd   r  r   r  accountsafe_balancer   r   r   r  r   r+  r;  r   r   safe_currency) r[   r   r   r   r   r   
currencyIdr  r  
dataLengthfirstrw   
splitTopicrx   r   rk   r$  marginAssetmarginFrozenunifiedAccountr8  	fieldNamebalancesbalancesLengthr   r  rm   rp   ru  accountsByCoderh   isolatedBalances                                    r]   handle_balancehtx.handle_balance  s1   f ""7D1w3%%dL$:K:KGUY:Z[	$-[!#'<<	#:Z #V))$
;J**:6DllnG"..t[AGFO#//i@GG!(LL,,T\\:DLNN4<<1 TJQOOD!R0E$$Wg6ES)J**:q9K,,V-A-A;^bPbcL# "//~xP
sZ%5%5%777#v/C/C[Q##L&9D&&|Y?G(( #..unE..{;#//G!%)-)9)9%AU)Vv&)5v&%3T"#00>t||-=>H$)),AW$>Bh>N 9UfI#uiDH%(]N%)!&q#h-!8A&.qkG'+'9'9'?Td'eH%)%5%5h%?F)-)9)9'>)RJ'+'9'9*'EH#'#3#3FHhvFV#WD  $/*.,,.262D2DWN^`r2s262B2B7O2\797>t 4)/)97;7H7H7XV 4# "9( #1c$i0*.q'"&,,.*.*:*:?L\^p*q*.*:*:?O*\%)%7%7Ya%b
#66zB-4T*'+'8'8'F 1 q#d),A"1gG!%!1!1'8!DJ22:>D"llnG&*&6&6w@R&SGFO&*&6&6w&PGFO)0LL&#'#4#4T\\#BDL - NN4<<5r_   c                 ,   U R                  US5      nU R                  UR                  S5      nU R                  XC5      nUb:  U R	                  US5      nUb	  U" XU5        X1R                  ;   a  UR                  U	 SU;   a  U R                  X5        g g )Nrn   r   unsubbed)rr   index_byr   rq   r   handle_un_subscription)r[   r   r   rn   subscriptionsByIdr   r   s          r]   handle_subscription_statushtx.handle_subscription_status  s    " gt, MM&*>*>E~~&7<#__\8<F!v5 )))((, ''= !r_   r   c                     U R                  US/ 5      nU R                  US/ 5      n[        S[        U5      5       H  nX5   nXE   nU R                  XU5        M     U R	                  U5        g )Nr  subMessageHashesr   )	safe_listr   r   clean_unsubscriptionclean_cache)r[   r   r   r  r  r   	unsubHashsubHashs           r]   r  htx.handle_un_subscription  sn    |_bI>>,8JBOq#m,-A%(I&)G%%fyA . 	&r_   c                     U$ N r[   r   r   s      r]   handle_system_statushtx.handle_system_status  s	     r_   c                    U R                  USS5      nUR                  S5      nU R                  US5      nUS:X  a  U R                  US5      nU R                  U R                  U R                  U R                  U R                  U R
                  U R                  S.nU R                  Xv5      nUb	  U" X5        g UR                  S5      n	U R                  U	SS5      n
U
S	:X  a  U R                  X5        g U
R                  S
5      S:  a  U R                  X5        g U
S:X  a  U R                  X5        g U R                  US5      nUS:X  a  U R                  USS5      nUR                  S5      S:  a  U R                  X5        UR                  S5      S:  a  U R                  X5        UR                  S5      S:  a  U R                  X5        g g g )Nr   rU  r   r   rp      )rG   mbpdetailbbor}   r   kliner(  ztrade.clearingzaccounts.updater6  opnotifyrw   r  r  )r   r   rr   r  r   r   r   r[  findr  rh  r  )r[   r   r   r   r   rk   
methodNamemethodsr   privatePartsprivateTyper  rw   s                r]   handle_subjecthtx.handle_subject  s   ^ __WdB/q)8))%3J//--,,)),,++**G __W9F!v'xx}&&|Q;**  1-.!30("f.gt,>$$Wgr:Ezz(#q(!!&2zz)$)##F4zz+&!+%%f6 , r_   c                 d  #     U R                  US5      nUb  UR                  SU05      I S h  vN   g U R                  US5      nUS:X  aC  U R                  US5      nU R                  US5      nUR                  SSU0S.5      I S h  vN   g U R                  US5      nUS:X  a/  U R                  US5      nUR                  SUS.5      I S h  vN   g g  N NO 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pingpongactionr   r   )r  r   r  )r  r   z pong failed )	rd   sendrr   r   r   r   rn   jsonr   )
r[   r   r   r  r  r   pingTsr  r   errors
             r]   r  htx.pongh  s+    	 $$Wf5Dkk64.111%%gx8Fw7**46kkVdF^"LMMM!!'40BV|**7D9kkv">???  2 N
 @ 	  ?!:TYYq\!IJELL	 sz   D0+C CC D0AC 
CC D0AC CC D0C C C 
D-(;D(#D0(D--D0c                 <    U R                  U R                  X5        g r  )r  r  r  s      r]   handle_pinghtx.handle_ping  s    

499f.r_   c                 D    UR                   S   nUR                  U5        g )Nauth)futuresr   )r[   r   r   promises       r]   handle_authenticatehtx.handle_authenticate  s    * ..( r_   c                 
   U R                  US5      nUS:X  a  U R                  US5      nU R                  UR                  S5      nU R                  XT5      nUb^  U R                  US5      n U R	                  U R
                  S   S   XpR                  U5      5        [        U R                  U5      5      egU R                  US	S5      n
U
b[  U
S
:w  aU  U
S:w  aO  U R                  S-   U R                  U5      -   n U R	                  U R
                  S   S   X5        [        U5      eg! [         aZ  nU R                  US5      n	UR                  X5        UR                  X5        XAR                  ;   a  UR                  U	  S nAgS nAff = f! [         ae  n[        U[        5      (       a5  UR                  US5        SnXR                  ;   a  UR                  U	  S nAgUR                  U5         S nAgS nAff = f)NrJ  r  rn   zerr-coder"   rM   rx   Fr  200r'  r  r  T)rr   r  r   r   throw_exactly_matched_exceptionrW   r  r   r   r   r+  rn   
isinstancer   )r[   r   r   rJ  rn   r  r   	errorCoder   rx   r  feedbackr   s                r]   handle_error_messagehtx.handle_error_message  s   @ !!'84W!!'40B $f.B.BD I??+<AL' ,,WjA	5889Nw9WYbdmdmnudvw'		'(:;; !!'6:>$%-dckww}tyy'99H%44T__T5J75SUYd#H-- - ! 5"&"2"2<"OKMM!1MM!(111"0045  %a!455MM!V,#F!5!55"008 MM!$$%s9   .AD, >-F ,
F6AFF
HAG='G==Hc                 z   U R                  X5      (       Ga$  SU;   a  U R                  X5        g SU;   aB  U R                  US5      nUS:X  a  U R                  X5        g US:X  a  U R                  X5        g SU;   a-  US   S:X  a  U R	                  X5        g U R                  X5        g SU;   ar  U R                  US5      nUS:X  a  U R                  X5        g US:X  a  U R	                  X5        g US:X  a  U R                  X5        g US:X  a  U R                  X5        g SU;   a  U R                  X5        g g g )	Nrn   r  r  subr   r  r  r  )r#  r  rr   r  r  r	  )r[   r   r   r  r  s        r]   handle_messagehtx.handle_message  sJ   $$V55Z w//@7"))'8<V#$$V5U?33FDw4=F*,,V= ''8w%%gt4<$$V5<,,V=;33FD>''8   1 !] 6r_   c                    U R                   c-  U R                  U R                  SS5      n[        U5      U l         U R                   nU R	                  US5      nUGb{  U R                  US5      nUbU  U R                  U5      nU R	                  US5      n	U	b.  UR                  U5        UR                  U R                   U5        g g U R                  US/ 5      n
U R                  US5      nU R                  U5      n[        S[        U
5      5       H:  nX   nU R                  X5      nU R                  X5      nUR                  U5        M<     US-   S	-   nUR                  U R                   U5        UR                  S
US   -   S5      nU R                  US5      nUR                  S
U-   S5      nUS-   S	-   nUR                  U R                   U5        g g )NrK   rB   r   r   rh   r   r   r)  r   r   r"  rU  r7  )myTradesrd   rV   r   rr   r   parse_ws_trader   r   rp   r   r   r   r   r\  r]  )r[   r   r   extendParamsr   cachedTradesrx   r   r   rh   ra  rm   rp   r   r   r_  
tradesHashgenericOrderHashrg  genericTradesHashs                       r]   r[  htx.handle_my_trade0  s   h == %%dllM4HE259DM}}&&w5"??7F3D,,T2))&(;% ''/NN4==+> & !OOGXrB	??7H=X.q#i.1A%LE"&"2"25"AK"&++k"HK ''4 2 )3.8
t}}j9 $/#6#6sVM=R7RTV#W "&"8"8"J#3#;#;C/<QSU#V $4s$:W$D!t}}.?@C #r_   c                    U R                  U R                  US5      5      nU R                  US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5      nU R                  US	5      n
U R                  US
5      nS nUb  U(       a  SOSnS n/ nU
b#  U
R                  S5      nU R                  US5      nS nU R                  U R                  US5      5      nUb  U R                  US5      US.nU R                  UU	U R                  U	5      UUUUUUUUS US.U5      $ )Nrh   rS  	orderSider  r  r  r`  r  r5  r  r  r  rw  rb   feeCurrencytransactFeers  r  )
r  rr   r+  rd   rp   r   r   r  r  r   )r[   r   rp   rh   rS  r  r  r  rH  r   r5  r  r  rk   orderTypePartsrq  r4  s                    r]   r+  htx.parse_ws_trade  s   2 !!$"2"25("CD!!%=""5)4  5!!%7  	2%%e[9	V$$$UK8	OOE;7	 &/7WL &__S1N##NA6D--d.>.>um.TU"((>'C "Y/( 
  	r_   c                    U R                  U R                  SS5      nSU R                  0nS nS nUS:X  at  U(       a  U R                  S   S   U   S   S   nO>U(       a  U R                  S   S   U   S   S   nOU R                  S   S   U   S   S   nU R	                  Xv5      nU$ U R                  S   S   U   U   n	U(       a  U	S   OU	S	   n
U(       a  U
S   OU
S   nU$ )
Nr9   hostnamer?   r"   r;   r<   r:   r=   r>   )rr   rV   r9  rU   rs   )r[   rk   r  	isPrivateisFeedr9   r9  hostnameURLry   baseUrl
subTypeUrls              r]   rt   htx.get_url_by_market_type  s   t||UE:$dmm46>"ii.t4S9&A)L"&))E"24"8"=f"Ef"MK"&))E"24"8"=f"Eh"OK%%k<C
 
 ii&t,S1$7G.6*GI<NJ+4*Y'*X:NC
r_   c                    #    U R                  5       nUUS.nUUUUS.nUb  XHS'   U R                  XU R                  Xu5      X85      I S h  vN $  N7f)N)r&  rn   )rn   rx   rh   rv   r   )rf   r   r   )	r[   ry   rh   rx   r   rv   ra   r   r   s	            r]   ru   htx.subscribe_public  sf     OO%	

 &	
 %+"ZZ$++g2NP[jjjjs   A	AAArp   r   rw   c                 H  #    U R                  5       nUUS.nSU-   nUS:H  nU R                  US   US   SU5      n	SUU/U/US   /US	.n
U R                  US
5      nUb  XS
'   U R                  US
5      nU R	                  XU R                  Xd5      Xz5      I S h  vN $  N7f)N)unsubrn   zunsubscribe::r   rk   r=   FTrh   )unsubscribern   r  r  r  rw   r   )rf   rt   r  r,  r   r   )r[   rp   r   rw   rv   ra   r   rx   r;  ry   r   r   s               r]   r~   htx.unsubscribe_public  s     OO%	#
 &6;&))&.&:JESYZ!/ 0)]x()
  $~~f6LM+3G/0YYv'=>FZZ$++g2NP[jjjjs   BB"B B"c                   #    U R                  5       nUUUS.nU R                  X5      n	S n
US:X  a  SUS.n
OSUUS.n
US:H  nU R                  X;S5      nUS:X  a  U R                  S   S   OU R                  S   S	   nUUUS
.nU R	                  U5      I S h  vN   U R                  XU R                  X5      X5      I S h  vN $  N. N7f)Nrn   rx   rv   r?   r&  )r  r   )r  rw   cidr=   T	hostnamesr  )rk   ry   r9  )rf   r   rt   rU   authenticater   )r[   r   rx   rk   subtyperv   r  ra   r   extendedSubsriptionr   r  ry   r9  
authParamss                  r]   r.  htx.subscribe_private		  s     OO%	&

 #kk,K6>G   G
 h&))$$?6:fn499[)&1499U`KablKm 


 
+++ZZ$++g2NPWmmm 	,ms$   BCC)CC
C
Cc                   #    U R                  US5      nU R                  US5      nU R                  US5      nUb  Ub  Uc  [        U R                  S-   5      eU R                  5         SnUR	                  SU-   S5      nU R                  U5      nUR                  U5      nU R                  UR                  U5      n	U	Gc+  U R                  U R                  5       S5      n
S nUS	:X  a  U R                  S
SU
S.nOU R                  S
SU
S.nU R                  U5      nU R                  US5      nSR                  SX6U/5      nU R                  U R!                  U5      U R!                  U R"                  5      [$        R&                  S5      nS nUS	:X  a  SU R                  S
SU
US.nUSSS.nOSSU R                  S
SU
US.nU R)                  5       nUUUS.nU R+                  X%XU5        UI S h  vN $  N7f)Nry   r9  rk   z8 authenticate requires a url, hostname and type argumentr  zwss://rU  Tr?   
HmacSHA256z2.1)	accessKeysignatureMethodsignatureVersionr   r  )AccessKeyIdSignatureMethodSignatureVersion	TimestampT
GETbase64r9   )authTyperR  rS  rT  r   	signaturer   )rv   r  r   )r  rk   rU  rV  rW  rX  	SignaturerG  )rr   r   rn   r*  r\  r   reusableFuturer   r   ymdhmsmillisecondsapiKeykeysort	urlencoder  hmacencodesecrethashlibsha256rf   r   )r[   rv   ry   r9  rk   rx   relativePathr   r@   authenticatedr   signatureParamsr  payloadr]  r   	newParamsra   r   s                      r]   rJ  htx.authenticate(	  s    vu-##FJ7/;(*dl#DGG.h$hii''){{8h#6;S!&&{3(<(<kJ D$5$5$7=I"Ov~!%'3(-!*	# $(;;'3(+!*	# #ll?;O>>/48Dii EFG		$++g"6DKK8PRYR`R`bjkIGv~ %!%'3(-!*!*#	 (#  !!#';;'3(+!*!* )I* "L
 JJs|L||s   G1G:3G84G:)r  r*  r6  r  r  )TFF)E__name__
__module____qualname____firstlineno__r   rZ   rf   re   r   rz   r   r   r   r
   r   r   r   r   r   listr   r   r   r   r   r   r   r   r  r	  r   r  r   r   r2  r-  r   rC  rh  rZ  rV  r   r   r  r  r   r  r  r  dictr  r  r	  r  r  r  r	   r#  r'  r[  r+  rt   ru   r   r~   r.  rJ  __static_attributes____classcell__)r\   s   @r]   r   r      s   u# un
 68 S SF S, 9; TC Ts T*-F -^ <@d[] S SS S Sbfglbm S0 9; TC Ts T(%F %N ?CQUdhqs H H H3 H^a Hx|  ~B  yC H4 BFb T3 T3 TUX T,!#6 !#F @DB &!S &! &!S\ &!P =? T T3 T6C* C*J D&
3`< `<D?3 ?3BVV V 37TX\eg 3UC 3Us 3URU 3Ulpqvlw 3Uj HLTV "&H 04$UYbd )S )SC )Ss )Simnsit )SV{86 {8zgR4l 8<$]ajl )qW )qC )qWZ )qquv~q )qVC@J *, Wm Wmr^6V ^6@> >>'V '4 '6 v7V v7p 2/& /!& !0@6 @t @DP2V P2d EG ZAf ZAx@D( GKSU k  `b kv ks kSV k. SUik n> )+ A Ar_   r   )$ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   r   r   rh  ccxt.base.typesr   r   r	   r
   r   r   r   r   r   r   r   r   !ccxt.async_support.base.ws.clientr   typingr   ccxt.base.errorsr   r   r   r   r   r   r   r   async_supportr   r  r_   r]   <module>r     s]     A  A  u u u u 4  * 0 . ' & ) ) *S%$


 
  S%r_   