
    E#i                    H   S SK Jr  S SKJr  S SK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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KJ(r(  S SKJ)r)  S SK*J+r+  S SK,J-r-   " S S\\5      r.g)    )Exchange)ImplicitAPIN)AnyBalances
CurrenciesCurrencyDepositAddressIntMarginModificationMarketNumOrder	OrderBook	OrderSide	OrderTypeStrStringsTickerTickers
OrderBooksTradeTradingFeesTransaction)List)ExchangeError)AuthenticationError)PermissionDenied)ArgumentsRequired)
BadRequest)InsufficientFunds)InvalidOrder)OrderNotFound)RateLimitExceeded)OnMaintenance)InvalidNonce)	TICK_SIZE)Precisec                   X  ^  \ rS rSrS\4U 4S jjr0 4S\4S jjrSYS\S\	S\
4S	 jjr0 4S\S
\S\
4S jjr0 4S\S
\S\
4S jjr0 4S\4S jjr0 4S jr0 4S jrS rS0 4S\4S jjrS0 4S\4S jjrSYS\4S jjr0 4S\4S jjr0 4S\\	   4S jjrSSS0 4S\S\S\S\S\\   4
S jjrSYS\	S\4S jjr S\!4S jr"0 4S\!4S jjr#S0 4S\S\S\$4S  jjr%SS0 4S!\S\S\&4S" jjr'SYS#\S\	S\(4S$ jjr)S0 4S!\S\*4S% jjr+0 4S\S\(4S& jjr,SYS'\S\	S\-4S( jjr.SS0 4S\S\S\S\\-   4S) jjr/SSS0 4S\0S\S\4S* jjr10 4S\S+\2S,\4S- jjr30 4S\S,\4S. jjr40 4S\S,\4S/ jjr5S0 4S\S0\6S+\2S
\S1\74
S2 jjr8S0 4S3\S\04S4 jjr9S0 4S3\S\04S5 jjr:SSS0 4S3\S\0S\S\4S6 jjr;SSS0 4S\0S\S\S\\<   4S7 jjr=S8 r>S9 r?SYS:\S\	S\<4S; jjr@SSS0 4S\0S\S\4S< jjrASS0 4S3\S\S0\6S+\2S
\7S1\74S= jjrB0 4S>\S\C4S? jjrDS@ rES0 4S>\S
\SA\SB\0S\F4
SC jjrGSD\04SE jrHSYSF\S\S\F4SG jjrISSS0 4S>\0S\S\S\\F   4SH jjrJSSS0 4S>\0S\S\S\\F   4SI jjrKS0 4S3\S>\04SJ jjrLS0 4S3\S>\04SK jjrMSSS0 4S>\0S\S\S\\F   4SL jjrNSMSN0 SS4SO jrOSP rPSQ\QSR\SS\ST\SU\SV\4SW jrRSXrSU =rT$ )Zexmo   returnc                 r  > U R                  [        [        U ]  5       SSS/SS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_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_E0 S+S_S,S_S-S_S.S_S/S_S0S_S1S_S2S_S3S%_S4S_S5S_S6S_S7S_S8S_S9S_S:S_S;S_E0 S<S_S=S_S>S_S?S_S@S_SAS_SBS_SCS_SDS%_SES_SFS_SGS_SHS_SIS_SJS_SKS_SLS_ESMSNSOSPSQSRSSSTSUSVSWSXSY.SZS[S[S\S].S\S^S_/S`Sa.SbScSd/0Sb/ SeQ0Sf/ SgQ0Sh.SbSSU R	                  Si5      U R	                  Si5      Sj.SSSk.Sl.SmSnSo.SpSq0SrS0Ss.SSSS SSSS SSSSSt.SSSSSSSSu.S SSS S SSv.SSSSSw.SS SSSSx.S S SySz0S{.	S S S|.S S S|.S}.S~S0[
        0 S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[        0E[        [        [        S.S.S.5      $ )Nr)   EXMOLTd   zv1.1CORSspotTmarginswapFfutureoption	addMargincancelOrdercancelOrderscreateDepositAddresscreateMarketBuyOrdercreateMarketBuyOrderWithCostcreateMarketOrderWithCostcreateOrdercreateStopLimitOrdercreateStopMarketOrdercreateStopOrder	editOrderfetchAccountsfetchBalancefetchCanceledOrdersfetchCurrenciesfetchDepositfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchDepositsfetchDepositsWithdrawalsfetchDepositWithdrawFeeemulatedfetchDepositWithdrawFeesfetchFundingHistoryfetchFundingRatefetchFundingRateHistoryfetchFundingRatesfetchIndexOHLCVfetchMarginModefetchMarketsfetchMarkOHLCVfetchMyTrades
fetchOHLCVfetchOpenInterestHistoryfetchOpenOrders
fetchOrderfetchOrderBookfetchOrderBooksfetchOrderTradesfetchPositionfetchPositionHistoryfetchPositionModefetchPositionsfetchPositionsHistoryfetchPositionsRiskfetchPremiumIndexOHLCVfetchTickerfetchTickersfetchTradesfetchTradingFeefetchTradingFeesfetchTransactionFeesfetchTransactionsfetchTransferfetchTransfersfetchWithdrawalfetchWithdrawalsreduceMargin	setMargintransferwithdraw1515304560120180240DWM)1m5m15m30m45m1h2h3h4h1d1w1Mzchttps://user-images.githubusercontent.com/1294454/27766491-1b0ea956-5eda-11e7-9225-40d67b481b8d.jpgzhttps://api.exmo.comzhttps://exmo.me)publicprivatewebzhttps://exmo.me/?ref=131685z%https://exmo.me/en/api_doc?ref=131685zhttps://exmo.com/en/docs/fees)logoapiwwwreferraldocfeesgetzctrl/feesAndLimitszen/docs/fees)	currencyzcurrency/list/extended
order_bookpair_settingstickertradescandles_historyrequired_amountzpayments/providers/crypto/listpost)(	user_infoorder_createorder_cancelstop_market_order_createstop_market_order_canceluser_open_ordersuser_tradesuser_cancelled_ordersorder_tradesdeposit_addresswithdraw_cryptwithdraw_get_txidexcode_createexcode_load
code_checkwallet_historywallet_operationszmargin/user/order/createzmargin/user/order/updatezmargin/user/order/cancelzmargin/user/position/closezmargin/user/position/margin_addz"margin/user/position/margin_removezmargin/currency/listzmargin/pair/listzmargin/settingszmargin/funding/listzmargin/user/infozmargin/user/order/listzmargin/user/order/historyzmargin/user/order/tradeszmargin/user/order/max_quantityzmargin/user/position/listz'margin/user/position/margin_remove_infoz$margin/user/position/margin_add_infozmargin/user/wallet/listzmargin/user/wallet/historyzmargin/user/trade/listzmargin/tradeszmargin/liquidation/feed)r   r   r   z0.004)feeSide	tierBased
percentagemakertaker)r   r   )tradingtransactionERC20TRC20)ETHTRXmethodfetchPrivateTradingFeesfillResponseFromRequest)networksrj   r2   )IOCFOKPOGTD)
marginModetriggerPricetriggerPriceTypetriggerDirectionstopLossPricetakeProfitPriceattachedStopLossTakeProfittimeInForcehedgedselfTradePreventiontrailingleveragemarketBuyByCostmarketBuyRequiresPriceiceberg)r   limitdaysBack	untilDayssymbolRequired)r   triggerr   r   )r   r   r   r   r   r     )	sandboxr=   createOrdersrW   r[   rZ   fetchOrdersfetchClosedOrdersrX   )linearinverse)r1   r3   r4   GMTz	GMT Token14033314043440005400094001540016400174003240033400345005250054503045017350277503195032150381)zrange period is too longzinvalid syntaxzAPI rate limit exceeded)exactbroad)idname	countries	rateLimitversionhas
timeframesurlsr   r   optionsfeaturescommonCurrenciesprecisionMode
exceptions)deep_extendsuperr)   describeparse_numberr&   r!   r   r   r%   r   r$   r   r#   r    r"   )self	__class__s    Q/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/async_support/exmo.pyr  exmo.describe   s   dD : <EEE $E 	E
 %E %E TE tE E 'E 'E /E ,TE tE 'E  (!E" "4#E$ T%E&  'E( )E* &t+E, "4-E. /E0 &t1E2 (3E4 1%5E6  7E8 +D9E: *:;E< +D=E> &u?E@ #EAEB *5CED $UEEF "5GEH "5IEJ KEL !%MEN  OEP dQER +ESET "4UEV jWEX !$YEZ "4[E\ #D]E^  _E` 'aEb $UcEd !%eEf (gEh %eiEj )%kEl tmEn oEp tqEr "5sEt #DuEv 'wEx $ZyEz  {E| !%}E~ "4E@ #DAEB CED UEEF EGEH DIEN  ~45,
 )9; 8  ,&  
  )+)@F  %!%"&!..w7!..w7 "'"'  #"
 7% .t  %&*(,,0,1).+06:#'#'"&#'	( #(/4$)$(+/27#()$, %)&*!$$(%)*.& ',#($)*/	# ',!%#($)*/( $()-#_2h ##
 ##q<| {! 'lj 0 \	
 ] ] 0 - - . . . ] ] \  \!" \#$ \%* 1;&0/@+G^?
 ^ ^	    symbolc                   #    U R                  5       I S h  vN   U R                  U5      nUS   US.nS nUS:X  a)  U R                  U R                  Xd5      5      I S h  vN nO.US:X  a(  U R	                  U R                  Xd5      5      I S h  vN nU R                  Xu5      nU R                  U R                  S0 5      n	U R                  U	SS5      n
U
(       a  X8S'   X(S	'   U$  N N NZ7f)
Nr   )position_idquantityaddreducer2   r   Ttypeamount)	load_marketsmarket&privatePostMarginUserPositionMarginAddextend)privatePostMarginUserPositionMarginRemoveparse_margin_modification
safe_valuer   	safe_bool)r  r	  r  r  paramsr  requestresponser2   r   r   s              r  modify_margin_helperexmo.modify_margin_helper>  s     !!!V$!$<
 5=!HHU\IeffHX!KKDKKX_LhiiH //A//$,,"="&..:SUY"Z"!6N%8) 	" gis5   C+C%AC+C' .C+C)AC+'C+)C+Ndatar  c                 \    UU R                  S U5      S SS S U R                  US5      SS S S.
$ )Nisolatedquoteok)
infor	  r  r   r  totalcodestatus	timestampdatetime)safe_symbolr  )r  r  r  s      r  r  exmo.parse_margin_modificationU  sD    
 &&tV4$OOFG4
 	
r  r  c                 D   #    U R                  XSU5      I Sh  vN $  N7f)a  
remove margin from a position

https://documenter.getpostman.com/view/10287440/SzYXWKPi#eebf9f25-0289-4946-9482-89872c738449

:param str symbol: unified market symbol
:param float amount: the amount of margin to remove
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `margin structure <https://docs.ccxt.com/#/?id=reduce-margin-structure>`
r  Nr  r  r	  r  r  s       r  reduce_marginexmo.reduce_marginf  s"      ..vxPPPP     c                 D   #    U R                  XSU5      I Sh  vN $  N7f)af  
add margin

https://documenter.getpostman.com/view/10287440/SzYXWKPi#143ef808-79ca-4e49-9e79-a60ea4d8c0e3

:param str symbol: unified market symbol
:param float amount: amount of margin to add
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `margin structure <https://docs.ccxt.com/#/?id=add-margin-structure>`
r  Nr,  r-  s       r  
add_marginexmo.add_margins  s"      ..vufMMMMr0  c                 ,  #    U R                  U R                  S0 5      nU R                  USS5      nU R                  USU5      nU R                  US5      nUS:X  a  U R	                  U5      I Sh  vN $ U R                  U5      I Sh  vN $  N N7f)a  
fetch the trading fees for multiple markets

https://documenter.getpostman.com/view/10287440/SzYXWKPi#90927062-256c-4b03-900f-2b99131f9a54
https://documenter.getpostman.com/view/10287440/SzYXWKPi#7de7e75c-5833-45a8-b937-c2276d235aaa

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
rj   r   r   N)r  r   safe_stringomitfetch_private_trading_feesfetch_public_trading_fees)r  r  r   defaultMethodr   s        r  fetch_trading_feesexmo.fetch_trading_fees  s      //$,,0BBG(((<UV!!&(MB68,..88@@@77??? A?s$   A0B2B3BBBBc                 "  #    U R                  5       I S h  vN   U R                  U5      I S h  vN nU R                  US/ 5      n0 n[        S[	        U5      5       H  nX5   nU R                  US5      nU R                  US S5      nU R                  US5      n	U R                  US5      n
U R                  [        R                  " U	S5      5      nU R                  [        R                  " U
S5      5      nUUUUSSS	.XH'   M     U$  N N7f)
Npairsr   r   _trade_maker_feetrade_taker_fee100Tr#  r	  r   r   r   r   )
r  privatePostMarginPairListr  rangelenr5  r)  r  r'   
string_div)r  r  r  r=  resultipairmarketIdr	  makerStringtakerStringr   r   s                r  r7  exmo.fetch_private_trading_fees  s    !!!77??< '26q#e*%A8D''f5H%%hc:F**41BCK**41BCK%%g&8&8e&LME%%g&8&8e&LME "!FN &  c 	"?s    DDDDCDDc                 (  #    U R                  5       I S h  vN   U R                  U5      I S h  vN n0 n[        S[        U R                  5      5       H  nU R                  U   nU R                  U5      nU R                  X&S   0 5      nU R                  US5      nU R                  US5      n	U R                  [        R                  " US5      5      n
U R                  [        R                  " U	S5      5      nUUU
USSS.X5'   M     U$  N N7f)Nr   r   commission_maker_percentcommission_taker_percentrA  TrB  )r  publicGetPairSettingsrD  rE  symbolsr  r  r5  r  r'   rF  )r  r  r  rG  rH  r	  r  feerK  rL  r   r   s               r  r8  exmo.fetch_public_trading_fees  s    !!!33F;;  q#dll+,A\\!_F[[(F//(4L"=C**30JKK**30JKK%%g&8&8e&LME%%g&8&8e&LME "!FN -  E 	";s    DDDDCDDc                    Ub  US:X  a  g US:X  a  gUR                  S5      S:  nUR                  S5      nUS   R                  SS5      n[        U5      nUS:  a"  U(       a  [	        U R
                  S-   U-   5      eU$ )N- r   % zN parseFixedFloatValue() detected an unsupported non-zero percentage-based fee )findsplitreplacefloatr   r   )r  inputisPercentagepartsvaluerG  s         r  parse_fixed_float_valueexmo.parse_fixed_float_value  s    Mu|B;

31,C a  b)uQJL*z z  ~C  !C  D  Dr  codesc                   #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN n0 n[        UR                  5       5      n[	        S[        U5      5       H  nXV   nUb  U R                  Xq5      (       d  M"  SSS.XG'   U R                  U5      nU R                  US5      n	U R                  X9/ 5      n
[	        S[        U
5      5       HC  nX   nU R                  US5      nU R                  US5      nU R                  U5      nXU   U'   ME     XU   S'   M     X@R                  S'   U$  GN# GN7f)	a  
@deprecated
       please use fetchDepositWithdrawFees instead

       https://documenter.getpostman.com/view/10287440/SzYXWKPi#4190035d-24b1-453d-833b-37e0a52f88e2

       :param str[]|None codes: list of unified currency codes
       :param dict [params]: extra parameters specific to the exchange API endpoint
       :returns dict: a list of `transaction fees structures <https://docs.ccxt.com/#/?id=fees-structure>`
       Nr   )depositrt   r   r  commission_descr#  transactionFees)r  $publicGetPaymentsProvidersCryptoListlistkeysrD  rE  in_arrayr   r5  r  rb  r   )r  rd  r  
cryptoListrG  cryptoListKeysrH  r%  r   
currencyId	providersjprovider	typeInnercommissionDescrS  s                   r  fetch_transaction_feesexmo.fetch_transaction_fees  sC     !!!DDVLL
F joo/0q#n-.A!$D t)C)C FL }}T*H))(D9J
CI1c)n-$< ,,Xv>	!%!1!1(<M!N22>B*-tY' . $-4L # /& +1&'u 	"Ls    D?D9D?D<D
D?<D?c                    #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nU R                  X15      nX@R                  S'   U$  N> N'7f)aj  
fetch deposit and withdraw fees

https://documenter.getpostman.com/view/10287440/SzYXWKPi#4190035d-24b1-453d-833b-37e0a52f88e2

:param str[]|None codes: list of unified currency codes
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a list of `transaction fees structures <https://docs.ccxt.com/#/?id=fees-structure>`
Nrh  )r  ri  parse_deposit_withdraw_feesr   )r  rd  r  r  rG  s        r  fetch_deposit_withdraw_fees exmo.fetch_deposit_withdraw_fees@  sX      !!!BB6JJ( 11(B*0&'1 	"Js   AAAA&AAr   c                 0   U R                  U5      n[        S[        U5      5       H  nX   nU R                  US5      nU R                  US5      nU R	                  XpR                  US5      5      nU R                  US5      n	/ n
S nU	b!  U	R                  S5      n
[        U
5      nUS:  nU R                  US   U5      nUc  S S S	.S S S	.S
.US   U'   U R                  U R                  U
S5      5      US	.US   U   U'   M     U R                  U5      $ )Nr   r  r   r%  rg  rX     r   )rS  r   rt   rf  )	deposit_withdraw_feerD  rE  r5  network_id_to_coder[  r  rb  $assign_default_deposit_withdraw_fees)r  rS  r   rG  rH  rr  r  	networkIdnetworkCodert  splitCommissionDescr   splitCommissionDescLengthnetworks                 r  parse_deposit_withdraw_feeexmo.parse_deposit_withdraw_feed  sM   " **3/q#c(#AvH##Hf5D((6:I11)=M=MhX^=_`K!--h8IJN"$J)&4&:&:3&?#,/0C,D)6!;
oofZ&8+FG  $&*!
  $&* 	3z";/ 33D4D4DEXZ[4\](5F:{+D11 $8 88@@r  c                   #    / nUR                  U R                  U5      5        UR                  U R                  U5      5        [        R                  " U6 I Sh  vN nUS   nUS   n0 n[        S[        U5      5       GH  nXG   nU R                  US5      n	U R                  U	5      n
Sn0 nU R                  XY5      nUc  SnGOZ[        S[        U5      5       GH@  nX   nU R                  US5      nUR                  U	S-   S5      nUR                  S	S5      nS
nUR                  US5      nU R                  U5      nUU;  a  UUSSSSSSS.SSS.S./ S.UU'   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U   nUS:X  a  UUS'   UUS   S   S'   UUS   S   S'   O!US:X  a  UUS'   UUS   S   S'   UUS   S   S'   U R                  US5      nUR                  U5        UUS'   UUU'   GMC     U R                  U	U
U R                  US5      USSSSU R                  S5      SSS.SSS.S.UUS.US.5      Xj'   GM     U$  GN7f)as  
fetches all available currencies on an exchange

https://documenter.getpostman.com/view/10287440/SzYXWKPi#7cdf0ca8-9ff6-4cf3-aa33-bcec83155c49
https://documenter.getpostman.com/view/10287440/SzYXWKPi#4190035d-24b1-453d-833b-37e0a52f88e2

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an associative dictionary of currencies
Nr      r   cryptofiatrY  rW  ()minmaxr}  )r   r  activerf  rt   rS  limitsr#  r  r  r  enabledrf  r  rt   r#  description1e-8)r   rp  )r   r%  r   r  r  rf  rt   rS  	precisionr  r#  r   )appendpublicGetCurrencyListExtendedri  asynciogatherrD  rE  r5  safe_currency_code	safe_listr\  r  r  safe_currency_structurer  )r  r  promises	responsescurrencyListrm  rG  rH  r   ro  r%  r  r   rp  rq  rr  r   r  replaceCharr  rs  minValuemaxValueactiveProvidernetworkEntryr#  s                             r  fetch_currenciesexmo.fetch_currencies  s     ::6BC 	AA&IJ2 "..(33	 |q\
q#l+,A#H))(F;J**:6DDHz>I q#i.1A(|H++Hf=D $Z#-=r BI ) 1 1#r :I"%K ) 1 1+r BI"&"9"9)"DK'83"+'2&*'+(,#' ,0+/-"
 ,0+/,"	' %'#1-& !% 0 06 BI#//%@H#//%@H%)^^Hi%HN#+K#8L I-2@Y/CKX.y9%@CKX.y9%@"j03AZ0DLX.z:5ADLX.z:5A>>,?DKK)+/L(,8H[)[ 2\  77 ((=A !..v6  $#!
  $# 	 !)!* %19 FLq -d m 4s   AI7I4HI7c                   #    / nUR                  U R                  U5      5        0 nU R                  S5      nU(       a   UR                  U R                  U5      5        [        R
                  " U6 I Sh  vN nUS   nU(       a)  US   nU R                  US5      nU R                  US5      n[        UR                  5       5      n	/ n
[        S[        U	5      5       GH  nX   nXl   nU R                  X<5      nUR                  SS5      nUR                  S5      u  nnU R                  U5      nU R                  U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                  0 SU_SU_SU_SU_SS_SU_SU_SS_SS_SS_SUSL_SS_SS_SS_SS_SS_SS_SU R#                  [$        R&                  " US5      5      U R#                  [$        R&                  " US5      5      SSSSSU R#                  S 5      U R#                  U R)                  U R!                  US!5      5      5      S".SU R+                  US#5      S$.U R+                  US%5      U R#                  [$        R,                  " UU5      5      S$.U R+                  US&5      U R+                  US'5      S$.U R+                  US(5      U R+                  US)5      S$.S*.SUS+.E5        GM"     U
$  GN7f),a  
retrieves data on all markets for exmo

https://documenter.getpostman.com/view/10287440/SzYXWKPi#7de7e75c-5833-45a8-b937-c2276d235aaa

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: an array of objects representing market data
FNr   r  r=  r   r>  /rP  rO  max_quantitymax_order_quantityr   r	  baser!  settlebaseIdquoteIdsettleIdr  r1   Tr2   r3   r4   r5   r  contractr   rA  r  price_precision)r  pricer   r  min_quantity	min_price	max_price
min_amount
max_amount)r   r  r  cost)r   r   r   contractSizeexpiryexpiryDatetimestrike
optionTyper  r  createdr#  )r  rQ  check_required_credentialsrC  r  r  r  index_byrj  rk  rD  rE  	safe_dictr\  r[  r  r5  r  r'   rF  parse_precisionsafe_number
string_max)r  r  r  marginPairsDictfetchMarginr  spotResponsemarginPairsr=  rk  rG  rH  r   r  marginMarketr	  r  r  r  r!  rL  rK  maxQuantitymarginMaxQuantitys                           r  fetch_marketsexmo.fetch_markets  s     226:;  !#55e<OOD::6BC< "..(33	 |#A,KNN;8E"mmE6:OL%%'(q#d)$AB!%F>>/>LZZS)F$ll3/OFG**62D++G4E**63MNK**63MNK**6>BK $ 0 0?S TMM 2b2&2 2 	2
 $2 &2 72 D2 2 2 ,d22 2 %2 %2 $2  E!2" $#2$  **7+=+=k5+QR**7+=+=k5+QR $"&""//7!..t/C/CDDTDTU[]nDo/pq  $#//
C!
  $//G#001C1CKQb1cd
  $//D#//D
  $//E#//E$  c2 2 %~ O 4s   A3L5L6JLr   	timeframesincer   c                 6  #    U R                  5       I Sh  vN   U R                  U5      nU R                  USS5      nUSLnUS   U R                  U R                  X"5      S.n	Sn
U R                  U5      nU R                  U R                  5       S-  5      nUc7  U(       a  [        X|5      OUnUc  SnO[        XJ5      nXU-  -
  S-
  U	S	'   XS
'   O`U R                  US-  5      U	S	'   U(       a  [        X|5      U	S
'   O3Uc  U
nO[        XJ5      nU R                  X4U-  5      n[        X5      U	S
'   U R                  US5      nU R                  U R                  X5      5      I Sh  vN nU R                  US/ 5      nU R                  XX#U5      $  GN~ N-7f)a  
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market

https://documenter.getpostman.com/view/10287440/SzYXWKPi#65eeb949-74e5-4631-9184-c38387fe53e8

: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
:param int [params.until]: timestamp in ms of the latest candle to fetch
:returns int[][]: A list of candles ordered, open, high, low, close, volume
NuntilgMbP?r   )r	  
resolutioni  r   r  fromtocandles)r  r  safe_integer_productr5  r   parse_timeframeparse_to_intmillisecondsr  sumr6  publicGetCandlesHistoryr  r  parse_ohlcvs)r  r	  r  r  r   r  r  r  untilIsDefinedr  maxLimitdurationnowr  r  r  s                   r  fetch_ohlcvexmo.fetch_ohlcv  s     !!!V$))&'5At+Tl**4??IQ
 ''	2 1 1 3d :;=$2UB}E, H$459GFODM"//=GFO #E=$E0EXXeX%56 #B67+55dkk'6RSS ..9b9  )EJJU 	"> Ts"   FFEF)F*+FFc           	          U R                  US5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      /$ )Ntohlcv)safe_integerr  )r  ohlcvr  s      r  parse_ohlcvexmo.parse_ohlcv  sn     eS)UC(UC(UC(UC(UC(
 	
r  c                    SU0nU R                  US5      nUb  [        UR                  5       5      n[        S[	        U5      5       Ho  nXE   nX6   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                  US5      U	S'   XU'   Mq     OU R                  US0 5      n
U R                  US	0 5      n[        U
R                  5       5      n[        S[	        U5      5       H^  nXE   nU R                  U5      nU R                  5       n	Xj;   a  U R                  X5      U	S'   Xk;   a  U R                  X5      U	S'   XU'   M`     U R                  U5      $ )
Nr#  walletsr   usedfreebalancer$  balancesreserved)	r  rj  rk  rD  rE  r  accountr5  safe_balance)r  r  rG  r  currencyIdsrH  ro  itemr   r  r  r  r%  s                r  parse_balanceexmo.parse_balance  sy   )//(I6w||~.K1c+./(^
*22:>,,."&"2"24"@"&"2"24"@#'#3#3D)#D #*x  0 ??8Z<D??8Z<Dtyy{+K1c+./(^
..z:,,.%&*&6&6t&HGFO%&*&6&6t&HGFO&t 0   ((r  c                 F  #    U R                  5       I Sh  vN   SnU R                  SU5      u  p!US:X  a  [        U R                  S-   5      eSnUS:X  a  U R	                  U5      I Sh  vN nOU R                  U5      I Sh  vN nU R                  U5      $  N N1 N7f)a  
query for balance and get the amount of funds available for trading or funds locked in orders

https://documenter.getpostman.com/view/10287440/SzYXWKPi#59c5160f-27a1-4d9a-8cfb-7979c7ffaac6
https://documenter.getpostman.com/view/10287440/SzYXWKPi#c8388df7-1f9f-4d41-81c4-5a387d171dc6

:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.marginMode]: *isolated* fetches the isolated margin balance
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
NrC   crossz does not support cross marginr   )r  handle_margin_mode_and_paramsr   r   privatePostMarginUserWalletListprivatePostUserInfor  )r  r  r   r  s       r  fetch_balanceexmo.fetch_balance	  s      !!!
!??PVW
 TWW'GGHH#!AA&IIH "55f==H !!(++C 	" J >s4   B!BAB!+B,B!BB!B!B!c                 &  #    U R                  5       I Sh  vN   U R                  U5      nSUS   0nUb  X%S'   U R                  U R                  XS5      5      I Sh  vN nU R	                  XdS   5      nU R                  XtS   SSS5      $  Nv N17f)a#  
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

https://documenter.getpostman.com/view/10287440/SzYXWKPi#c60c51a8-e683-4f45-a000-820723d37871

: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
NrI  r   r   r	  bidask)r  r  publicGetOrderBookr  r  parse_order_book)r  r	  r   r  r  r  r  rG  s           r  fetch_order_bookexmo.fetch_order_book7  s      !!!V$F4L
 $G00W1MNN,7$$VH-=tUERR 	" Os"   BBABB0BBrR  c                   #    U R                  5       I Sh  vN   SnUcg  SR                  U R                  5      n[        U5      S:  a<  [        U R                  5      n[	        U R
                  S-   [        U5      -   S-   5      eO"U R                  U5      nSR                  U5      nSU0nUb  X&S'   U R                  U R                  Xc5      5      I Sh  vN n0 n[        UR                  5       5      n	[        S[        U	5      5       H1  n
X   nU R                  U5      nU R                  X{   USS	S
5      X'   M3     U$  GN- Nn7f)a_  
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data for multiple markets

https://documenter.getpostman.com/view/10287440/SzYXWKPi#c60c51a8-e683-4f45-a000-820723d37871

:param str[]|None symbols: list of unified market symbols, all symbols fetched if None, default is None
:param int [limit]: max number of entries per orderbook to return, default is None
: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 symbol
N,i   z fetchOrderBooks() has zy symbols exceeding max URL length, you are required to specify a list of symbols in the first argument to fetchOrderBooksrI  r   r   r  r  )r  joinidsrE  r   r   str
market_idsr  r  rj  rk  rD  r)  r  )r  rR  r   r  r  numIdsr  r  rG  	marketIdsrH  rJ  r	  s                r  fetch_order_booksexmo.fetch_order_booksM  sJ     !!!?((488$C3x$TXX#DGG.G$G#f+$U  YT  %T  U  U  //'*C((3-CC
 $G00W1MNN)	q#i.)A |H%%h/F!2283EvtUZ\abFN * / 	"  Os#   EEC EEA,EEr   c                    U R                  US5      nU R                  S U5      nU R                  US5      nU R                  0 SUS   _SU_SU R	                  U5      _SU R                  US5      _SU R                  US5      _SU R                  US	5      _S
S _SU R                  US5      _SS _SS _SS _SU_SU_SS _SS _SS _SU R                  US5      _U R                  US5      U R                  US5      US.EU5      $ )Nupdated
last_trader	  r'  r(  highlowr  	buy_price	bidVolumer  
sell_price	askVolumevwapopencloselastpreviousClosechanger   averageavgvolvol_curr)
baseVolumequoteVolumer#  )safe_timestampsafe_marketr5  safe_tickeriso8601)r  r   r  r'  r   s        r  parse_tickerexmo.parse_tickerq  s    ''	:	!!$/5 !
fX&!
!
 Y/!
 D$$VV4	!

 4##FE2!
 4##FK8!
 !
 4##FL9!
 !
 D!
 D!
 T!
 D!
 T!
 d!
  $!!
" t''6#!
$ **659++FJ?)!
* + 	r  c                   #    U R                  5       I Sh  vN   U R                  U5      nU R                  U5      I Sh  vN n0 n[        UR	                  5       5      n[        S[        U5      5       HC  nXV   nU R                  USS5      nUS   n	U R                  X75      n
U R                  X5      XI'   ME     U R                  USU5      $  N N7f)a	  
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market

https://documenter.getpostman.com/view/10287440/SzYXWKPi#4c8e6459-3503-4361-b012-c34bb9f7e385

:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
Nr   r>  r	  )r  market_symbolspublicGetTickerrj  rk  rD  rE  r*  r  r-  filter_by_array_tickers)r  rR  r  r  rG  r  rH  rJ  r  r	  r   s              r  fetch_tickersexmo.fetch_tickers  s      !!!%%g.--f55  )	q#i.)A |H%%hc:FH%F__X8F!..v>FN * ++FHgFF5 	"5s"   CC)C CBCCc                    #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nU R                  U5      nU R                  X4S      U5      $  NE N.7f)a  
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

https://documenter.getpostman.com/view/10287440/SzYXWKPi#4c8e6459-3503-4361-b012-c34bb9f7e385

: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   )r  r1  r  r-  )r  r	  r  r  r  s        r  fetch_tickerexmo.fetch_ticker  s\      !!!--f55V$  ,!7@@ 	"5s   A AA A-A A tradec                    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S5      n	S n
U R                  US	5      nU R                  XS
5      nUS   nU R	                  US5      nS nUb  U(       a  SOSnU R                  USU5      nS nU R                  US5      nUbV  U R                  US5      nU R                  U5      nU R                  US5      nUb  [        R                  " USS5      nUUUS.nU R                  UUUU R                  U5      UUU
U	UUUUUS.U5      $ )Ndatetrade_idorder_idr  r  r  r  
trade_typerI  r>  r	  is_makerr   r   	exec_typecommission_amountcommission_currencycommission_percent1000   )r  r   rate)r   r#  r'  r(  r	  orderr  sidetakerOrMakerr  r  r  rS  )
r)  r5  safe_string_2r*  r  r  r'   rF  
safe_trader,  )r  r8  r  r'  r   orderIdpriceStringamountString
costStringrG  r  rJ  r	  isMakertakerOrMakerDefaultrH  rS  feeCostStringfeeCurrencyIdfeeCurrencyCodefeeRateStrings                        r  parse_tradeexmo.parse_trade  s   T ''v6	eZ0""5*5&&ug6''z:%%eX6
!!%>##E62!!(C8!//%4"-4''''{<OP((0CD$ ,,U4IJM"55mDO ,,U4HIM( ' 2 2=&" M%+%C
 "Y/( " 
  	r  c                   #    U R                  5       I Sh  vN   U R                  U5      nSUS   0nU R                  U R                  Xd5      5      I Sh  vN nU R	                  XuS   / 5      nU R                  XX#5      $  Nk N-7f)a  
get the list of most recent trades for a particular symbol

https://documenter.getpostman.com/view/10287440/SzYXWKPi#5a5a9c0d-cf17-47f6-9d62-6d4404ebd5ac

: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 Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
NrI  r   )r  r  publicGetTradesr  r  parse_trades)	r  r	  r  r   r  r  r  r  r  s	            r  fetch_tradesexmo.fetch_trades%  s      !!!V$F4L
 --dkk'.JKK. ~~htb9  u<<; 	"
 Ls!   BB?BB,BBc                 r  #    Uc  [        U R                  S-   5      eSnU R                  SU5      u  pTUS:X  a  [        U R                  S-   5      eU R	                  5       I Sh  vN   U R                  U5      nUS   nUS:g  nUc  Sn0 n	U(       a  XyS	'   OXyS
'   Ub  X9S'   U R                  USS5      n
XS'   SnU(       a)  U R                  U R                  X5      5      I Sh  vN nO:U R                  U R                  X5      5      I Sh  vN nU R                  US5      n/ n[        UR                  5       5      n[        S[        U5      5       HD  nX   nU R                  USS5      nUU   nU R!                  UUX#5      nU R#                  UU5      nMF     U R%                  XU5      $  GNK N N7f)a<  
       fetch all trades made by the user

       https://documenter.getpostman.com/view/10287440/SzYXWKPi#b8d8d9af-4f46-46a1-939b-ad261d79f452  # spot
       https://documenter.getpostman.com/view/10287440/SzYXWKPi#f4b1aaf8-399f-403b-ab5e-4926d967a106  # margin

       :param str symbol: a symbol is required but it can be a single string, or a non-empty array
       :param int [since]: the earliest time in ms to fetch trades for
       :param int [limit]: *required for margin orders* the maximum number of trades structures to retrieve
       :param dict [params]: extra parameters specific to the exchange API endpoint

EXCHANGE SPECIFIC PARAMETERS
       :param int [params.offset]: last deal offset, default = 0
       :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
       Nz+ fetchMyTrades() requires a symbol argumentrW   r  z" only isolated margin is supportedr   r   r/   rI  	pair_namer   offsetr   r   r>  )r   r   r  r   r  r  r  privatePostUserTradesr  privatePostMarginTradesr  rj  rk  rD  rE  r*  rY  array_concatfilter_by_since_limit)r  r	  r  r   r  r   r  rI  isSpotr  r^  r  responseFromExchangerG  marketIdsInnerrH  rJ  resultMarketitemsr   s                       r  fetch_my_tradesexmo.fetch_my_tradesP  s      >#DGG.[$[\\
!??QWX
 TWW'KKLL!!!V$d|z)=E"FO#'K $G""68Q7"!77G8TUUH2 *.)E)EdkkRYFb)c#c & ';XFHhmmo.q#n-.A%(H++HdC@LX&E&&ulEIF&&vv6F / ))&??M 	"" V2 $ds8   A#F7%F0&B F7&F3'(F7F5B!F73F75F7rG  r  c                    #    U R                  5       I Sh  vN   U R                  USU05      nU R                  USX#SU5      I Sh  vN $  N5 N7f)a  
create a market order by providing the symbol, side and cost

https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd

:param str symbol: unified symbol of the market to create an order in
:param str side: 'buy' or 'sell'
:param float cost: how much you want to trade in units of the quote currency
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
Nr  r  r  r  create_order)r  r	  rG  r  r  s        r  create_market_order_with_cost"exmo.create_market_order_with_cost  sQ      !!!Vfd^4&&vxT6RRR 	"Rs!   AA0AAAAc                    #    U R                  5       I Sh  vN   U R                  USU05      nU R                  USSUSU5      I Sh  vN $  N6 N7f)a  
create a market buy order by providing the symbol and cost

https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd

:param str symbol: unified symbol of the market to create an order in
:param float cost: how much you want to trade in units of the quote currency
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
Nr  r  buyrk  r  r	  r  r  s       r  !create_market_buy_order_with_cost&exmo.create_market_buy_order_with_cost  sS      !!!Vfd^4&&vxdFSSS 	"S!   AA1AA	AAc                    #    U R                  5       I Sh  vN   U R                  USU05      nU R                  USSUSU5      I Sh  vN $  N6 N7f)a  
create a market sell order by providing the symbol and cost

https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd

:param str symbol: unified symbol of the market to create an order in
:param float cost: how much you want to trade in units of the quote currency
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
Nr  r  sellrk  rq  s       r  "create_market_sell_order_with_cost'exmo.create_market_sell_order_with_cost  sS      !!!Vfd^4&&vxtVTTT 	"Trt  r  r  c                   #    U R                  5       I Sh  vN   U R                  U5      nUS:H  =(       a    USL nSn	U R                  SU5      u  pU	S:X  a  [        U R                  S-   5      eU	S:g  n
U R                  U/ SQ5      nU R                  US5      nS	US
   0nUc  U R                  US   U5      US'   OU R                  US   U5      US'   U R                  USS5      nUb2  U R                  USS5      nUc  [        U R                  S-   5      eXS'   U R                  US5      nU
(       d  Uc  [        U R                  S-   5      eU R                  U/ SQ5      nUb  U R                  US   U5      US'   SnU
(       Ga'  Ub`  US:X  a  [        U R                  S-   5      eX=S'   U R                  X5      US'   U R                  U R!                  X5      5      I Sh  vN nGOBU R                  US5      nSnU R#                  US:H  US:H  U5      u  nnU R                  US5      nU(       a  SOU R                  US   U5      US'   US:X  a  X=S'   OUS:X  a  Ub  SOSnSU-   U-   US'   U(       a  SUS'   OUb  UUS'   U R%                  U R!                  X5      5      I Sh  vN nO~Ub7  U R                  X5      US'   US:X  a	  S U-   US'   O0US:X  a	  S!U-   US'   O!X-S'   OUS:X  d  US:X  a  US"-   U-   US'   OX-S'   U R'                  U R!                  X5      5      I Sh  vN nU R)                  UU5      $  GN, GN^ N N7f)#a  
create a trade order

https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd
https://documenter.getpostman.com/view/10287440/SzYXWKPi#de6f4321-eeac-468c-87f7-c4ad7062e265  # stop market
https://documenter.getpostman.com/view/10287440/SzYXWKPi#3561b86c-9ff1-436e-8e68-ac926b7eb523  # margin

:param str symbol: unified symbol of the market to create an order in
:param str type: 'market' or 'limit'
:param str side: 'buy' or 'sell'
:param float amount: how much of currency you want to trade in units of base currency
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
:param dict [params]: extra parameters specific to the exchange API endpoint
:param float [params.triggerPrice]: the price at which a trigger order is triggered at
:param str [params.timeInForce]: *spot only* 'fok', 'ioc' or 'post_only'
:param boolean [params.postOnly]: *spot only* True for post only orders
:param float [params.cost]: *spot only* *market orders only* the cost of the order in the quote currency for market orders
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
Nr  r=   r   only supports isolated marginr   r   	stopPrice
stop_pricer  rI  r   r	  r  	client_idclientOrderIdzC createOrder() client order id must be an integer / numeric literalr   zI createOrder requires an extra param params["leverage"] for margin orders)r|  r}  r   r   r~  r  r  r  r   zI createOrder() cannot create stop limit orders for spot, only stop marketr  trigger_pricer?  	post_onlyr   r   _totalrW  market_r}  stop_limit_stop_r>  )r  r  r  r   r   safe_string_nr5  amount_to_precisioncost_to_precisionsafe_value_2safe_integer_2r  r   r6  price_to_precision privatePostStopMarketOrderCreater  handle_post_onlyprivatePostOrderCreate privatePostMarginUserOrderCreateparse_order)r  r	  r  rG  r  r  r  r  isMarketr   rc  r   r  r  r  r   r  execType
isPostOnlyr   marketSuffixs                        r  rl  exmo.create_order  s    ( !!!V$H$95D=
!??vV
 TWW'GGHH
*))&2]^/F4L
 <"&":":6(;KV"TGJ"&"8"89I4"PGJ))&+O$ //_UM$ +p!pqq'4$##FJ78+#DGG.y$yzz6  $D  E#66vh7GOGG'7?$TWW/z%z{{&*FO/3/F/Fv/\GO,!%!F!Ft{{SZGc!dd++FK@!
%)%:%:48;KXYdMdfl%m"
F"..v}E(01d6M6MfU]N^`e6f 7?&*FOX%040@8rL&/$&6&EGFO+6GK( ,+6GK(!%!<!<T[[=Y!ZZ'(,(?(?(U%7?&3d&:GFOX%&-nGFO&*FO7?dh&6&*Sj4&7GFO&*FO!BB4;;wC_``H&11_ 	"^ e  [ asH   MMGM'M(CM,M-A>M+M
,MMM
Mr   c                 R  #    U R                  5       I Sh  vN   0 nU R                  USS5      nU R                  USS/5      nSnU R                  SU5      u  pcUS:X  a  [	        U R
                  S-   5      eSnUS:X  a-  XS'   U R                  U R                  XC5      5      I Sh  vN nO`U(       a-  XS	'   U R                  U R                  XC5      5      I Sh  vN nO,XS'   U R                  U R                  XC5      5      I Sh  vN nU R                  U5      $  GN Ny NG N7f)
a  
cancels an open order

https://documenter.getpostman.com/view/10287440/SzYXWKPi#1f710d4b-75bc-4b65-ad68-006f863a3f26
https://documenter.getpostman.com/view/10287440/SzYXWKPi#a4d0aae8-28f7-41ac-94fd-c4030130453d  # stop market
https://documenter.getpostman.com/view/10287440/SzYXWKPi#705dfec5-2b35-4667-862b-faf54eca6209  # margin

:param str id: order id
:param str symbol: not used by exmo cancelOrder()
:param dict [params]: extra parameters specific to the exchange API endpoint
:param boolean [params.trigger]: True to cancel a trigger order
:param str [params.marginMode]: set to 'cross' or 'isolated' to cancel a margin order
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
Nr   stopr7   r  rz  r   r<  parent_order_id)r  r  r6  r  r   r    privatePostMarginUserOrderCancelr   privatePostStopMarketOrderCancelprivatePostOrderCancelr  )r  r   r	  r  r  r   r   r  s           r  cancel_orderexmo.cancel_orderA  s*     !!!##FIv>6Iv#67
!??vV
 TWW'GGHH*$"$J!BB4;;wC_``H
 -/)*!%!F!Ft{{SZGc!dd
 ')
#!%!<!<T[[=Y!ZZ ))? 	" a e [sF   D'DBD''D!(3D'D#,D'D%	D'!D'#D'%D'c                    #    U R                  5       I Sh  vN   S[        U5      0nU R                  U R                  XC5      5      I Sh  vN nU R	                  U5      n[        U5      US'   U$  NZ N'7f)a  
*spot only* fetches information on an order made by the user

https://documenter.getpostman.com/view/10287440/SzYXWKPi#cf27781e-28e5-4b39-a52d-3110f5d22459  # spot

:param str id: order id
:param str symbol: not used by exmo fetchOrder
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
Nr<  r   )r  r  privatePostOrderTradesr  r  )r  r   r	  r  r  r  rF  s          r  fetch_orderexmo.fetch_orderq  sv      !!!B
 44T[[5QRR,   *"gd9 	" Ss!   A5A14A5A3&A53A5c                   #    SnU R                  SU5      u  peUS:X  a  [        U R                  S-   5      eSnUb  U R                  U5      nS[	        U5      0nSn	US:X  a)  U R                  U R                  X5      5      I Sh  vN n	O(U R                  U R                  X5      5      I Sh  vN n	U R                  U	S5      n
U R                  XX45      $  NQ N*7f)a  
fetch all the trades made from a single order

https://documenter.getpostman.com/view/10287440/SzYXWKPi#cf27781e-28e5-4b39-a52d-3110f5d22459  # spot
https://documenter.getpostman.com/view/10287440/SzYXWKPi#00810661-9119-46c5-aec5-55abe9cb42c7  # margin

:param str id: order id
:param str symbol: unified market symbol
:param int [since]: the earliest time in ms to fetch trades for
:param int [limit]: the maximum number of trades to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.marginMode]: set to "isolated" to fetch trades for a margin order
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
Nr^   r  rz  r<  r   r   )
r  r   r   r  r   privatePostMarginUserOrderTradesr  r  r  rY  )r  r   r	  r  r   r  r   r  r  r  r   s              r  fetch_order_tradesexmo.fetch_order_trades  s      
!??@RTZ[
 TWW'GGHH[[(FB
 #!BB4;;wC_``H$ "88W9UVVH4 (3  >>[ a$ Ws$   BCC(C.C/)CCc                   #    U R                  5       I Sh  vN   SnUb  U R                  U5      nUS   nSnU R                  SU5      u  pdUS:H  =(       d    US:H  nSn/ n	U(       aT  U R                  U5      I Sh  vN nU R	                  USS05      nU R                  US5      n
U R                  XX#U5      n	U	$ U R                  U5      I Sh  vN n[        UR                  5       5      n[        S	[        U5      5       HR  nX   nU R                  U5      nU R	                  USS05      nU R                  X   XX45      nU R                  X5      n	MT     U	$  GNE N N7f)
a  
fetch all unfilled currently open orders

https://documenter.getpostman.com/view/10287440/SzYXWKPi#0e135370-daa4-4689-8acd-b6876dee9ba1  # spot open orders
https://documenter.getpostman.com/view/10287440/SzYXWKPi#a7cfd4f0-476e-4675-b33f-22a46902f245  # margin

:param str symbol: unified market symbol
:param int [since]: the earliest time in ms to fetch open orders for
:param int [limit]: the maximum number of  open orders structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.marginMode]: set to "isolated" for margin orders
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
Nr	  rZ   r  r   r&  r  ordersr   )r  r  r  privatePostMarginUserOrderListr  r  parse_ordersprivatePostUserOpenOrdersrj  rk  rD  rE  r*  ra  )r  r	  r  r   r  r  r   isMarginr  r  responseOrdersr  rH  rJ  marketInnerparsedOrderss                   r  fetch_open_ordersexmo.fetch_open_orders  s     !!![[(FH%F
!??@QSYZ
7*I
j0H!@@HHH8 [[&* F "__Xx@N&&~uVTF: 7 ";;FCCH$ X]]_-I1c)n-$<"..x8Vf.   $001C[Y^g**6@ . Q 	" ID Ds6   E"EA%E"<E=AE"E BE"E" E"c                 d    Uc  g SS0nUR                  S5      S:  a  SnU R                  X!U5      $ )Ncancel_startedcanceledcancelr   )rZ  r5  r  r&  statusess      r  parse_statusexmo.parse_status<  sA    >j
 ;;x A%F&99r  c                 H    SSSSSSSSSSSSSSS.nU R                  X!U5      $ )Nrp  rv  )	limit_buy
limit_sell
market_buymarket_sellstop_buy	stop_sellstop_limit_buystop_limit_selltrailing_stop_buytrailing_stop_sellstop_market_sellstop_market_buyrp  rv  r5  )r  	orderTyperG  s      r  
parse_sideexmo.parse_sideF  sH     !#%!&"( &$
  ;;r  rF  c           
         U R                  USS5      nU R                  USSS5      nU R                  USU5      nU R                  USS5      nU R                  U5      nS nSU;   a  US   nO/S	U;   a)  S
U;   a#  US:X  a  US	   S-   US
   -   nOUS
   S-   US	   -   nU R	                  X5      nUS   n	U R                  US5      n
U
c  US:X  a  SOSnU R                  X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  S nS nUS:w  a  US:w  a  UnU R                  0 SU_SU_SU R                  U5      _SU_SU R                  USS5      _SU R                  U R                  US5      5      _SU	_SU_S S _S!S _S"U_SU_S#U_S$U_SU
_S%S _S&S _S US US'.EU5      $ )(Nr<  r  
event_timer  gư>r  
order_typerI  in_currencyout_currencyrp  r>  r	  r  	in_amount
out_amountr  r  r   r~  r}  0rv  r   r  r(  r'  lastTradeTimestampr  r&  order_statusr   postOnlyrG  r   r  filled	remaining)r#  r   rS  r#  )rI  safe_integer_product_2r)  r  r*  r5  r  r  
safe_orderr,  r  r  )r  rF  r  r   	eventTimer'  r  rG  rJ  r	  r  amountFieldr  r  transactionsr  r   r  s                     r  r  exmo.parse_orderY  s   ` z3DE//|YPXY	''y)D	&&uflC	y)U?V}Hu$>U+Bu} /#5n8MM 036}9MM!!(3!!!%4>*.%-+lK%%e9F  0x0uh;))%=''|<3LY&%8D  
" 
] 
 Y/ 
 	 

 !$";";E9h"W 
 d''(8(8(OP 
 f 
 D 
 4 
  
 D 
 U 
 L 
 D 
 f 
  d! 
" # 
$ "+ 
, - 	r  c                   #    U R                  5       I Sh  vN   SnU R                  SU5      u  pTUS:X  a  [        U R                  S-   5      eUc  SnUS:g  nUb  U R	                  U5      nUS   nSU0nUb  UOS	US
'   X8S'   Sn	Ub  U R	                  U5      n	Sn
U(       aO  U R                  U R                  X5      5      I Sh  vN n
U R                  USS05      nU R                  XX#U5      $ U R                  U R                  X5      5      I Sh  vN nU R                  US5      nU R                  XX#U5      n/ n[        S	[        U5      5       H#  nX   nUS   S:X  d  M  UR                  U5        M%     U$  GNi N Nn7f)a  
fetches information on multiple canceled orders made by the user

https://documenter.getpostman.com/view/10287440/SzYXWKPi#1d2524dd-ae6d-403a-a067-77b50d13fbe5  # margin
https://documenter.getpostman.com/view/10287440/SzYXWKPi#a51be1d0-af5f-44e4-99d7-f7b04c6067d0  # spot canceled orders

:param str symbol: unified market symbol of the market orders were made in
:param int [since]: timestamp in ms of the earliest order, default is None
:param int [limit]: max number of orders to return, default is None
:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.marginMode]: set to "isolated" for margin orders
:returns dict: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
Nr   r  rz  r/   r   r	  r   r   r^  r&  r  rg  )r  r  r   r   r  privatePostUserCancelledOrdersr  r  !privatePostMarginUserOrderHistoryr  rD  rE  r  )r  r	  r  r   r  r   rc  r  r  r  r  responseSwaprg  r  rG  rH  rF  s                    r  fetch_canceled_ordersexmo.fetch_canceled_orders  s     !!!
!??vV
 TWW'GGHH=E
*++f-K *FU
 ',&7Ea [[(F!@@WA]^^H [[** F $$XuVLL!%!G!GT[Hd!eeL2 OOL':E&&ueFKFF1c&k*	?j0MM%( + MS 	"* _( fs<   FE?B/FFAFFAF(FFFc                   #    U R                  5       I Sh  vN   U R                  U5      nSn	U R                  SU5      u  pU	S:w  a  [        U R                  S-   5      eU R                  U/ SQ5      n
U R                  USS/5      nSU0nUb  X[S	'   Ub  U R                  US
   U5      US'   U
b  U R                  US
   U
5      US'   U R                  U R                  X5      5      I Sh  vN nU R                  U5      $  N N7f)a  
       *margin only* edit a trade order

       https://documenter.getpostman.com/view/10287440/SzYXWKPi#f27ee040-c75f-4b59-b608-d05bd45b7899  # margin

       :param str id: order id
       :param str symbol: unified CCXT market symbol
       :param str type: not used by exmo editOrder
       :param str side: not used by exmo editOrder
       :param float [amount]: how much of the currency you want to trade in units of the base currency
       :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
       :param dict [params]: extra parameters specific to the exchange API endpoint
       :param float [params.triggerPrice]: stop price for stop-market and stop-limit orders
       :param str params['marginMode']: must be set to isolated

EXCHANGE SPECIFIC PARAMETERS
       :param int [params.distance]: distance for trailing stop orders
       :param int [params.expire]: expiration timestamp in UTC timezone for the order. order will not be expired if expire is 0
       :param str [params.comment]: optional comment for order. up to 50 latin symbols, whitespaces, underscores
       :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
       NrA   r   z8 editOrder() can only be used for isolated margin ordersr{  r   r|  r<  r  r	  r  r}  )r  r  r  r   r   safe_number_nr6  r   privatePostMarginUserOrderUpdater  r  )r  r   r	  r  rG  r  r  r  r  r   r   r  r  s                r  
edit_orderexmo.edit_order7  s    , !!!V$
!??VT
#TWW'aabb))&2]^6NK#@A
 "(J#66vh7GOGG#$($;$;F8<Ll$[GL!>>t{{7?[\\))% 	"" ]s"   DDCD,D-DDr%  c                 6  #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nU R                  X15      nSnSnU(       a,  UR                  S5      nUS   n[	        U5      nUS:  a  US   nU R                  U5        UUSUUS.$  N~ Ng7f)aq  
fetch the deposit address for a currency associated with self account

https://documenter.getpostman.com/view/10287440/SzYXWKPi#c8f9ced9-7ab6-4383-a6a4-bc54469ba60e

:param str code: unified currency code
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
Nr  r   r  )r#  r   r  addresstag)r  privatePostDepositAddressr5  r[  rE  check_address)	r  r%  r  r  depositAddressr  r  addressAndTagnumPartss	            r  fetch_deposit_addressexmo.fetch_deposit_addressa  s      !!!77?? ))(9*005M#A&G=)H!|#A&7#
 	
% 	"?s    BBBBA&BBc                     U R                  US5      n[        UR                  5       5      n[        U5      nUS:X  a  U R                  US      $ g )NrI  r  r   )r  rj  rk  rE  markets)r  r   tradesBySymbolrR  
numSymbolss        r  get_market_from_tradesexmo.get_market_from_trades  sK    vv6~**,-\
?<<
++r  r  r  c                   #    U R                  XE5      u  pEU R                  5       I Sh  vN   U R                  U5      nUUS   US.nUb  XGS'   U R                  U R                  S0 5      nU R                  US5      n	U R                  XU	5      n	U	b  XS'   U R                  US5      nU R                  U R                  Xu5      5      I Sh  vN n
U R                  X5      $  N N7f)a  
make a withdrawal

https://documenter.getpostman.com/view/10287440/SzYXWKPi#3ab9c34d-ad58-4f87-9c57-2e2ea88a8325

:param str code: unified currency code
:param float amount: the amount to withdraw
:param str address: the address to withdraw to
:param str tag:
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
Nr   )r  r   r  invoicer   r  	transport)handle_withdraw_tag_and_paramsr  r   r  r   safe_string_upperr5  r6  privatePostWithdrawCryptr  parse_transaction)r  r%  r  r  r  r  r   r  r   r  r  s              r  rt   exmo.withdraw  s      99#F!!!==& 

 ?!$I??4<<R@((;""8g>#*K YYvy1F66t{{77STT%%h99! 	" Us"   'C&C"B"C&C$C&$C&r&  c                 6    SSSSSS.nU R                  X!U5      $ )Nr"  pending)transferredpaidr  
processing	verifyingr  r  s      r  parse_transaction_statusexmo.parse_transaction_status  s-     #"
 &99r  r   c                 B   U R                  USS5      nU R                  US5      nUb  [        R                  " U5      nU R                  US5      nUc-  U R	                  US0 5      nU R                  US5      nUS:w  a  UnU R                  US5      nU R                  USS	5      n	U R                  X5      n
S nS nU R                  US
5      nUS:X  a  UnOQUS:X  aK  UnUbF  UR                  S5      n[        U5      nUS:X  a$  U R                  US5      nUR                  SS5      nS S S S.nU R                  S   S   (       d  US:X  a  SOSnU R                  US5      nUcB  U R	                  U R                  S0 5      nU R	                  UU
0 5      nU R                  UU5      nU R                  US5      nUS:X  a  SnUb6  US:X  a  [        R                  " UU5      nU R                  U5      US'   U
US	'   0 SU_SU R                  USS5      _SU_SU_S	U
_SU R                  US5      _SU R                  U5      _S U R                  U R                  US 5      5      _S!U_S"U R!                  U5      _S#U_S$S _S%U_S&S _S'S _S(S _S)U R#                  US)5      _US US*.E$ )+Ndtr  r  txidextrarW  r  currr   r  rf  
withdrawal:r|  r  rY  )r   r  rE  r   r   rt   
commissionrh  rr  cashbackr  r  r#  r   r<  task_idr  r&  r'  r(  r  addressFrom	addressTor  tagFromtagTor  )commentinternalrS  )safe_timestamp_2r5  r'   
string_absr  rI  r  r[  rE  r\  r   r   
string_subr  r  safe_string_lowerr,  r)  )r  r   r   r'  rM  r
  r  	extraTxidr  ro  r%  r  r  r  r`  r  rS  keyfeeCostrh  codeFeesrr  s                         r  r  exmo.parse_transaction  sR   h ))+tYG	''X>#"--l;LV4<OOK"=E((7IB V4''VZH
&&z<"";	:9G\!G"c*u:q="..ua8G%ooc26G
 yy'5!%!5*IC&&{LAG"&//$,,@QSU"V???D"E**8S9''Z@H:%"<'#*#5#5lG#LL"//8F"&J
K
$$$[*iH
 D
 D	

 
 t''Z@
 d''5
 d33D4J4J;X`4ab
 
 Y/
 w
 4
 
 4
 t
  T!
" t**;	B#
$ )
 	
r  c                 "  #    U R                  5       I Sh  vN   0 nUb  U R                  US-  5      US'   SnUb  U R                  U5      nU R                  U R	                  XT5      5      I Sh  vN nU R                  US   XbU5      $  Nt N7f)aL  
fetch history of deposits and withdrawals

https://documenter.getpostman.com/view/10287440/SzYXWKPi#31e69a33-4849-4e6a-b4b4-6d574238f6a7

:param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
:param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
:param int [limit]: max number of deposit/withdrawals to return, default is None
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a list of `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
Nr   r:  history)r  r  r   privatePostWalletHistoryr  parse_transactions)r  r%  r  r   r  r  r   r  s           r  fetch_deposits_withdrawalsexmo.fetch_deposits_withdrawals3	  s      !!!"//=GFO}}T*H66t{{77STT> &&x	':HUSSM 	" Us"   BBAB0B1BBc                 .  #    U R                  5       I Sh  vN   SnSS0nUb  X6S'   Ub  U R                  U5      nUS   US'   U R                  U R                  Xd5      5      I Sh  vN nU R	                  US/ 5      nU R                  XX#5      $  Nz N+7f)a  
fetch all withdrawals made from an account

https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706

:param str code: unified currency code
:param int [since]: the earliest time in ms to fetch withdrawals for
:param int [limit]: the maximum number of withdrawals structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
Nr  rt   r   r   r   rg  r  r   privatePostWalletOperationsr  r  r$  	r  r%  r  r   r  r   r  r  rg  s	            r  fetch_withdrawalsexmo.fetch_withdrawalsg	  s      !!!J
 $G}}T*H"*4.GJ99$++g:VWW6 x"5&&uEEM 	" X"   BBAB'B(*BBc                 F  #    U R                  5       I Sh  vN   SnUSS.nUb  U R                  U5      nUS   US'   U R                  U R                  XS5      5      I Sh  vN nU R	                  US/ 5      nU R                  US0 5      nU R                  X5      $  N N=7f)a  
fetch data on a currency withdrawal via the withdrawal id

https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706

:param str id: withdrawal id
:param str code: unified currency code of the currency withdrawn, default is None
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
Nrt   r<  r  r   r   rg  r   r  r   r)  r  r  r  r  	r  r   r%  r  r   r  r  rg  firsts	            r  fetch_withdrawalexmo.fetch_withdrawal	  s      !!!
 }}T*H"*4.GJ99$++g:VWW6 '26ua,%%e66M 	" X"   B!BA
B!!B"<B!B!c                 F  #    U R                  5       I Sh  vN   SnUSS.nUb  U R                  U5      nUS   US'   U R                  U R                  XS5      5      I Sh  vN nU R	                  US/ 5      nU R                  US0 5      nU R                  X5      $  N N=7f)a|  
fetch information on a deposit

https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706

:param str id: deposit id
:param str code: unified currency code, default is None
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
Nrf  r/  r   r   rg  r   r0  r1  s	            r  fetch_depositexmo.fetch_deposit	  s      !!!
 }}T*H"*4.GJ99$++g:VWW6 '26ua,%%e66M 	" Xr5  c                 .  #    U R                  5       I Sh  vN   SnSS0nUb  X6S'   Ub  U R                  U5      nUS   US'   U R                  U R                  Xd5      5      I Sh  vN nU R	                  US/ 5      nU R                  XX#5      $  Nz N+7f)a  
fetch all deposits made to an account

https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706

:param str code: unified currency code
:param int [since]: the earliest time in ms to fetch deposits for
:param int [limit]: the maximum number of deposits structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
Nr  rf  r   r   r   rg  r(  r*  s	            r  fetch_depositsexmo.fetch_deposits
  s      !!!I
 $G}}T*H"*4.GJ99$++g:VWW6 x"5&&uEEM 	" Xr-  r   GETc                    U R                   S   U   S-   nUS:w  a  XpR                  S-   -  nXq-  nUS:X  d  US:X  a  U(       a  USU R                  U5      -   -  nOUS:X  a  U R                  5         U R	                  5       nU R                  U R                  SU0U5      5      nSU R                  U R                  U R                  U5      U R                  U R                  5      [        R                  5      S	.nXsXeS
.$ )Nr   r  r   r   ?r   noncez!application/x-www-form-urlencoded)zContent-TypeKeySign)urlr   bodyheaders)r   r   	urlencoder  r?  r  apiKeyhmacencodesecrethashlibsha512)	r  pathr   r   r  rD  rC  rB  r?  s	            r  sign	exmo.sign5
  s    iis#c)%<<<#%%C8OsT^^F333I++-JJLE>>$++w.>"GHD C{{		$++d"3T[[5Mw~~^G
 dOOr  c                 "    U R                  5       $ N)r  )r  s    r  r?  
exmo.nonceH
  s      ""r  httpCodereasonrB  r   rD  rC  c
                 d   Uc  g SU;   a  SU;  a  U R                  US0 5      n
U R                  U
S5      nU R                  U
S5      nU R                  S-   U-   nU R                  U R                  S   X5        U R                  U R                  S   X5        [        U5      eSU;   d  SU;   Ga  U R                  USS	5      n[        U[        5      (       a  US
:X  d  US:X  a  SnOS	nU(       d  S nU R                  USS5      nUR                  S5      n[        U5      nUS:  a/  US   R                  S5      n[        U5      nUS:  a  US   OUS   nU R                  S-   U-   nU R                  U R                  S   X5        U R                  U R                  S   X5        [        U5      eg )NerrorrG  msgr%  rY  r   r   errmsgFtrueru   Tr  r  r   )r  r5  r   throw_exactly_matched_exceptionr   throw_broadly_matched_exceptionr   r  
isinstancer  rI  r[  rE  )r  rR  rS  rB  r   rD  rC  r  requestHeadersrequestBody	errorCodemessageErrorr%  feedbacksuccessmessage
errorPartsr  errorSubPartsnumSubPartss                       r  handle_errorsexmo.handle_errorsK
  s   x(h*> '2>I++Iu=L##Iv6Dww}t+H001I4Z001I<b)) h(&:
 nnXx?G'3''v%7c>"G#G,,XwI$]]3/
z?a<$.qM$7$7$<M"%m"4K0;a=+mTUFVD77S=4/44T__W5Mt^44T__W5Mwa#H--r   rP  )U__name__
__module____qualname____firstlineno__r   r  r  r  dictr   r   r  r]  r.  r2  r   r:  r7  r8  rb  r   ru  ry  r   r  r   r  r   r  r
   rj  r  r  r   r  r  r   r  r   r  r   r-  r   r3  r6  r   rU  rZ  r   rh  r   rm  rr  rw  r   r   rl  r  r  r  r   r  r  r  r  r  r  r	   r  r  r   rt   r  r  r%  r+  r3  r7  r:  rM  r?  intrf  __static_attributes____classcell__)r  s   @r  r)   r)      sc   _# _B	 LN  .
d 
F 
N` 
" FH Q# Qu QL^ Q CE Ns NE NI[ N /1 @[ @& 79 2h 68 #J =A E' EN BFb "w "H.A .A` -/ D: DL *, BV BH ?CQUdhqs 8K 8K 8K3 8K^a 8Kx|  ~B  yC 8Kt
 
4 
() ): *, ,, ,,\ @DB SS S SS\ S, :>DY[ "w "c "`j "H&4 & &6 &P 6:" $G7 $G $GL 68 A AF AU Uv U Un <@d[] )= )=S )= )=bfglbm )=V 37TX\eg \@C \@s \@RU \@| eg S# SY SV[ S  XZ Tc T T Y[ Us U% U mqy{ c2 c2I c2Y c2X] c2fi c2J 9=R .*S .*# .*` 8<B 'C ' 'R ?CQUdhqs H?3 H? H?3 H?^a H?T 59tZ^gi Vc V VTW Vnrsxny Vp:<&C Cv C CJ 9=4^bkm W# WS WX[ Wr fjx|  FH (*3 (* (*9 (*I (*_b (*ru (*T =? "
 "
> "
H QU]_ :3 : : :# :do :@:s :z
T z
X z
Q\ z
x <@daenp 2TS 2T 2T[^ 2Tuy  {F  vG 2Th 37TX\eg 2FC 2Fs 2FRU 2Flpq|l} 2Fh ;?r 17 17C 17f 8<B 17c 17 17f 04$UYbd 2F 2FC 2Fs 2Fimnyiz 2Fh &eBSW P&#(c (3 (S (# (X\ (dg ( (r  r)   )/ ccxt.async_support.base.exchanger   ccxt.abstract.exmor   r  rJ  ccxt.base.typesr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   typingr   ccxt.base.errorsr   r   r   r   r   r    r!   r"   r#   r$   r%   ccxt.base.decimal_to_precisionr&   ccxt.base.preciser'   r)   rh  r  r  <module>rx     sq    6 *   j  j  j  j  j  j  * 0 - . ' . ) * . * ) 4 %X)8[ X)r  