ccxt 4.2.1 → 4.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1376,6 +1376,22 @@ class Exchange extends _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchang
1376
1376
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Exchange);
1377
1377
 
1378
1378
 
1379
+ /***/ }),
1380
+
1381
+ /***/ 5224:
1382
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1383
+
1384
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1385
+ /* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
1386
+ /* harmony export */ });
1387
+ /* harmony import */ var _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
1388
+ // -------------------------------------------------------------------------------
1389
+
1390
+ class Exchange extends _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e {
1391
+ }
1392
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Exchange);
1393
+
1394
+
1379
1395
  /***/ }),
1380
1396
 
1381
1397
  /***/ 3565:
@@ -18711,6 +18727,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
18711
18727
  '-4046': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.AuthenticationError,
18712
18728
  '-4047': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
18713
18729
  '-4054': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
18730
+ '-4164': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
18714
18731
  '-5001': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
18715
18732
  '-5002': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
18716
18733
  '-5003': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
@@ -27155,6 +27172,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
27155
27172
  'trade/query': 3,
27156
27173
  'trade/openOrders': 3,
27157
27174
  'trade/historyOrders': 3,
27175
+ 'user/commissionRate': 3,
27158
27176
  'account/balance': 3,
27159
27177
  },
27160
27178
  'post': {
@@ -27162,6 +27180,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
27162
27180
  'trade/cancel': 3,
27163
27181
  'trade/batchOrders': 3,
27164
27182
  'trade/cancelOrders': 3,
27183
+ 'trade/cancelOpenOrders': 3,
27165
27184
  },
27166
27185
  },
27167
27186
  },
@@ -28352,22 +28371,30 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28352
28371
  // }
28353
28372
  //
28354
28373
  const marketId = this.safeString(ticker, 'symbol');
28355
- // const change = this.safeString (ticker, 'priceChange'); // this is not ccxt's change because it does high-low instead of last-open
28356
28374
  const lastQty = this.safeString(ticker, 'lastQty');
28357
28375
  // in spot markets, lastQty is not present
28358
28376
  // it's (bad, but) the only way we can check the tickers origin
28359
28377
  const type = (lastQty === undefined) ? 'spot' : 'swap';
28360
- const symbol = this.safeSymbol(marketId, market, undefined, type);
28378
+ market = this.safeMarket(marketId, market, undefined, type);
28379
+ const symbol = market['symbol'];
28361
28380
  const open = this.safeString(ticker, 'openPrice');
28362
28381
  const high = this.safeString(ticker, 'highPrice');
28363
28382
  const low = this.safeString(ticker, 'lowPrice');
28364
28383
  const close = this.safeString(ticker, 'lastPrice');
28365
28384
  const quoteVolume = this.safeString(ticker, 'quoteVolume');
28366
28385
  const baseVolume = this.safeString(ticker, 'volume');
28386
+ let percentage = undefined;
28387
+ let change = undefined;
28388
+ if (market['swap']) {
28389
+ // right now only swap uses the 24h change, spot will be added soon
28390
+ percentage = this.safeString(ticker, 'priceChangePercent');
28391
+ change = this.safeString(ticker, 'priceChange');
28392
+ }
28367
28393
  // let percentage = this.safeString (ticker, 'priceChangePercent');
28368
28394
  // if (percentage !== undefined) {
28369
28395
  // percentage = percentage.replace ('%', '');
28370
28396
  // } similarly to change, it's not ccxt's percentage because it does priceChange/open, and priceChange is high-low
28397
+ // const change = this.safeString (ticker, 'priceChange'); // this is not ccxt's change because it does high-low instead of last-open
28371
28398
  const ts = this.safeInteger(ticker, 'closeTime');
28372
28399
  const datetime = this.iso8601(ts);
28373
28400
  const bid = this.safeString(ticker, 'bidPrice');
@@ -28389,8 +28416,8 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28389
28416
  'close': close,
28390
28417
  'last': undefined,
28391
28418
  'previousClose': undefined,
28392
- 'change': undefined,
28393
- 'percentage': undefined,
28419
+ 'change': change,
28420
+ 'percentage': percentage,
28394
28421
  'average': undefined,
28395
28422
  'baseVolume': baseVolume,
28396
28423
  'quoteVolume': quoteVolume,
@@ -29241,6 +29268,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29241
29268
  * @method
29242
29269
  * @name bingx#cancelAllOrders
29243
29270
  * @description cancel all open orders
29271
+ * @see https://bingx-api.github.io/docs/#/en-us/spot/trade-api.html#Cancel%20orders%20by%20symbol
29244
29272
  * @see https://bingx-api.github.io/docs/#/swapV2/trade-api.html#Cancel%20All%20Orders
29245
29273
  * @param {string} [symbol] unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
29246
29274
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -29251,42 +29279,70 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29251
29279
  }
29252
29280
  await this.loadMarkets();
29253
29281
  const market = this.market(symbol);
29254
- if (market['type'] !== 'swap') {
29255
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' cancelAllOrders is only supported for swap markets.');
29256
- }
29257
29282
  const request = {
29258
29283
  'symbol': market['id'],
29259
29284
  };
29260
- const response = await this.swapV2PrivateDeleteTradeAllOpenOrders(this.extend(request, params));
29261
- //
29262
- // {
29263
- // "code": 0,
29264
- // "msg": "",
29265
- // "data": {
29266
- // "success": [
29267
- // {
29268
- // "symbol": "LINK-USDT",
29269
- // "orderId": 1597783835095859200,
29270
- // "side": "BUY",
29271
- // "positionSide": "LONG",
29272
- // "type": "TRIGGER_LIMIT",
29273
- // "origQty": "5.0",
29274
- // "price": "9.0000",
29275
- // "executedQty": "0.0",
29276
- // "avgPrice": "0.0000",
29277
- // "cumQuote": "0",
29278
- // "stopPrice": "9.5000",
29279
- // "profit": "",
29280
- // "commission": "",
29281
- // "status": "NEW",
29282
- // "time": 1669776326000,
29283
- // "updateTime": 1669776326000
29284
- // }
29285
- // ],
29286
- // "failed": null
29287
- // }
29288
- // }
29289
- //
29285
+ let response = undefined;
29286
+ if (market['spot']) {
29287
+ response = await this.spotV1PrivatePostTradeCancelOpenOrders(this.extend(request, params));
29288
+ //
29289
+ // {
29290
+ // "code": 0,
29291
+ // "msg": "",
29292
+ // "debugMsg": "",
29293
+ // "data": {
29294
+ // "orders": [{
29295
+ // "symbol": "ADA-USDT",
29296
+ // "orderId": 1740659971369992192,
29297
+ // "transactTime": 1703840651730,
29298
+ // "price": 5,
29299
+ // "stopPrice": 0,
29300
+ // "origQty": 10,
29301
+ // "executedQty": 0,
29302
+ // "cummulativeQuoteQty": 0,
29303
+ // "status": "CANCELED",
29304
+ // "type": "LIMIT",
29305
+ // "side": "SELL"
29306
+ // }]
29307
+ // }
29308
+ // }
29309
+ //
29310
+ }
29311
+ else if (market['swap']) {
29312
+ response = await this.swapV2PrivateDeleteTradeAllOpenOrders(this.extend(request, params));
29313
+ //
29314
+ // {
29315
+ // "code": 0,
29316
+ // "msg": "",
29317
+ // "data": {
29318
+ // "success": [
29319
+ // {
29320
+ // "symbol": "LINK-USDT",
29321
+ // "orderId": 1597783835095859200,
29322
+ // "side": "BUY",
29323
+ // "positionSide": "LONG",
29324
+ // "type": "TRIGGER_LIMIT",
29325
+ // "origQty": "5.0",
29326
+ // "price": "9.0000",
29327
+ // "executedQty": "0.0",
29328
+ // "avgPrice": "0.0000",
29329
+ // "cumQuote": "0",
29330
+ // "stopPrice": "9.5000",
29331
+ // "profit": "",
29332
+ // "commission": "",
29333
+ // "status": "NEW",
29334
+ // "time": 1669776326000,
29335
+ // "updateTime": 1669776326000
29336
+ // }
29337
+ // ],
29338
+ // "failed": null
29339
+ // }
29340
+ // }
29341
+ //
29342
+ }
29343
+ else {
29344
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' cancelAllOrders is only supported for spot and swap markets.');
29345
+ }
29290
29346
  return response;
29291
29347
  }
29292
29348
  async cancelOrders(ids, symbol = undefined, params = {}) {
@@ -67114,6 +67170,12 @@ class bitstamp extends _abstract_bitstamp_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
67114
67170
  * @method
67115
67171
  * @name bitstamp#createOrder
67116
67172
  * @description create a trade order
67173
+ * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenInstantBuyOrder
67174
+ * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenMarketBuyOrder
67175
+ * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenLimitBuyOrder
67176
+ * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenInstantSellOrder
67177
+ * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenMarketSellOrder
67178
+ * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenLimitSellOrder
67117
67179
  * @param {string} symbol unified symbol of the market to create an order in
67118
67180
  * @param {string} type 'market' or 'limit'
67119
67181
  * @param {string} side 'buy' or 'sell'
@@ -67124,27 +67186,42 @@ class bitstamp extends _abstract_bitstamp_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
67124
67186
  */
67125
67187
  await this.loadMarkets();
67126
67188
  const market = this.market(symbol);
67127
- let method = 'privatePost' + this.capitalize(side);
67128
67189
  const request = {
67129
67190
  'pair': market['id'],
67130
67191
  'amount': this.amountToPrecision(symbol, amount),
67131
67192
  };
67193
+ const clientOrderId = this.safeString2(params, 'client_order_id', 'clientOrderId');
67194
+ if (clientOrderId !== undefined) {
67195
+ request['client_order_id'] = clientOrderId;
67196
+ params = this.omit(params, ['clientOrderId']);
67197
+ }
67198
+ let response = undefined;
67199
+ const capitalizedSide = this.capitalize(side);
67132
67200
  if (type === 'market') {
67133
- method += 'Market';
67201
+ if (capitalizedSide === 'Buy') {
67202
+ response = await this.privatePostBuyMarketPair(this.extend(request, params));
67203
+ }
67204
+ else {
67205
+ response = await this.privatePostSellMarketPair(this.extend(request, params));
67206
+ }
67134
67207
  }
67135
67208
  else if (type === 'instant') {
67136
- method += 'Instant';
67209
+ if (capitalizedSide === 'Buy') {
67210
+ response = await this.privatePostBuyInstantPair(this.extend(request, params));
67211
+ }
67212
+ else {
67213
+ response = await this.privatePostSellInstantPair(this.extend(request, params));
67214
+ }
67137
67215
  }
67138
67216
  else {
67139
67217
  request['price'] = this.priceToPrecision(symbol, price);
67218
+ if (capitalizedSide === 'Buy') {
67219
+ response = await this.privatePostBuyPair(this.extend(request, params));
67220
+ }
67221
+ else {
67222
+ response = await this.privatePostSellPair(this.extend(request, params));
67223
+ }
67140
67224
  }
67141
- method += 'Pair';
67142
- const clientOrderId = this.safeString2(params, 'client_order_id', 'clientOrderId');
67143
- if (clientOrderId !== undefined) {
67144
- request['client_order_id'] = clientOrderId;
67145
- params = this.omit(params, ['client_order_id', 'clientOrderId']);
67146
- }
67147
- const response = await this[method](this.extend(request, params));
67148
67225
  const order = this.parseOrder(response, market);
67149
67226
  order['type'] = type;
67150
67227
  return order;
@@ -67177,13 +67254,16 @@ class bitstamp extends _abstract_bitstamp_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
67177
67254
  await this.loadMarkets();
67178
67255
  let market = undefined;
67179
67256
  const request = {};
67180
- let method = 'privatePostCancelAllOrders';
67257
+ let response = undefined;
67181
67258
  if (symbol !== undefined) {
67182
67259
  market = this.market(symbol);
67183
67260
  request['pair'] = market['id'];
67184
- method = 'privatePostCancelAllOrdersPair';
67261
+ response = await this.privatePostCancelAllOrdersPair(this.extend(request, params));
67185
67262
  }
67186
- return await this[method](this.extend(request, params));
67263
+ else {
67264
+ response = await this.privatePostCancelAllOrders(this.extend(request, params));
67265
+ }
67266
+ return response;
67187
67267
  }
67188
67268
  parseOrderStatus(status) {
67189
67269
  const statuses = {
@@ -173145,7 +173225,13 @@ class lykke extends _abstract_lykke_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
173145
173225
  };
173146
173226
  // publicGetTickers or publicGetPrices
173147
173227
  const method = this.safeString(this.options, 'fetchTickerMethod', 'publicGetTickers');
173148
- const response = await this[method](this.extend(request, params));
173228
+ let response = undefined;
173229
+ if (method === 'publicGetPrices') {
173230
+ response = await this.publicGetPrices(this.extend(request, params));
173231
+ }
173232
+ else {
173233
+ response = await this.publicGetTickers(this.extend(request, params));
173234
+ }
173149
173235
  const ticker = this.safeValue(response, 'payload', []);
173150
173236
  //
173151
173237
  // publicGetTickers
@@ -173499,8 +173585,13 @@ class lykke extends _abstract_lykke_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
173499
173585
  if (type === 'limit') {
173500
173586
  query['price'] = parseFloat(this.priceToPrecision(market['symbol'], price));
173501
173587
  }
173502
- const method = 'privatePostOrders' + this.capitalize(type);
173503
- const result = await this[method](this.extend(query, params));
173588
+ let result = undefined;
173589
+ if (this.capitalize(type) === 'Market') {
173590
+ result = await this.privatePostOrdersMarket(this.extend(query, params));
173591
+ }
173592
+ else {
173593
+ result = await this.privatePostOrdersLimit(this.extend(query, params));
173594
+ }
173504
173595
  //
173505
173596
  // market
173506
173597
  //
@@ -205894,9 +205985,15 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
205894
205985
  if (symbol !== undefined) {
205895
205986
  request['symbol'] = this.marketId(symbol);
205896
205987
  }
205897
- const stop = this.safeValue(params, 'stop');
205898
- const method = stop ? 'privateDeleteStopOrders' : 'privateDeleteOrders';
205899
- const response = await this[method](this.extend(request, params));
205988
+ const stop = this.safeValue2(params, 'stop', 'trigger');
205989
+ params = this.omit(params, ['stop', 'trigger']);
205990
+ let response = undefined;
205991
+ if (stop) {
205992
+ response = await this.privateDeleteStopOrders(this.extend(request, params));
205993
+ }
205994
+ else {
205995
+ response = await this.privateDeleteOrders(this.extend(request, params));
205996
+ }
205900
205997
  //
205901
205998
  // {
205902
205999
  // "code": "200000",
@@ -205958,9 +206055,9 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
205958
206055
  * @returns An [array of order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
205959
206056
  */
205960
206057
  await this.loadMarkets();
205961
- const stop = this.safeValue(params, 'stop');
206058
+ const stop = this.safeValue2(params, 'stop', 'trigger');
205962
206059
  const until = this.safeInteger2(params, 'until', 'till');
205963
- params = this.omit(params, ['stop', 'until', 'till']);
206060
+ params = this.omit(params, ['triger', 'stop', 'until', 'till']);
205964
206061
  if (status === 'closed') {
205965
206062
  status = 'done';
205966
206063
  }
@@ -205982,8 +206079,13 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
205982
206079
  if (until !== undefined) {
205983
206080
  request['endAt'] = until;
205984
206081
  }
205985
- const method = stop ? 'privateGetStopOrders' : 'privateGetOrders';
205986
- const response = await this[method](this.extend(request, params));
206082
+ let response = undefined;
206083
+ if (stop) {
206084
+ response = await this.privateGetStopOrders(this.extend(request, params));
206085
+ }
206086
+ else {
206087
+ response = await this.privateGetOrders(this.extend(request, params));
206088
+ }
205987
206089
  //
205988
206090
  // {
205989
206091
  // "code": "200000",
@@ -206093,20 +206195,20 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
206093
206195
  */
206094
206196
  await this.loadMarkets();
206095
206197
  const request = {};
206096
- let method = 'privateGetOrdersOrderId';
206198
+ let response = undefined;
206097
206199
  if (id === undefined) {
206098
206200
  const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');
206099
206201
  if (clientOrderId === undefined) {
206100
206202
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder(this.id + ' fetchOrder() requires parameter id or params.clientOid');
206101
206203
  }
206102
206204
  request['clientOid'] = clientOrderId;
206103
- method = 'privateGetOrdersByClientOid';
206104
206205
  params = this.omit(params, ['clientOid', 'clientOrderId']);
206206
+ response = await this.privateGetClientOrderIdClientOid(this.extend(request, params));
206105
206207
  }
206106
206208
  else {
206107
206209
  request['order-id'] = id;
206210
+ response = await this.privateGetOrdersOrderId(this.extend(request, params));
206108
206211
  }
206109
- const response = await this[method](this.extend(request, params));
206110
206212
  //
206111
206213
  // {
206112
206214
  // "code": "200000",
@@ -206426,7 +206528,7 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
206426
206528
  const version = this.safeString(params, 'version', defaultVersion);
206427
206529
  const tail = '/api/' + version + '/' + this.implodeParams(path, params);
206428
206530
  url += tail;
206429
- const query = this.omit(params, path);
206531
+ const query = this.omit(params, this.extractParams(path));
206430
206532
  const queryLength = Object.keys(query).length;
206431
206533
  if (api === 'public') {
206432
206534
  if (queryLength) {
@@ -209342,25 +209444,27 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209342
209444
  const listenKeyRefreshRate = this.safeInteger(this.options, 'listenKeyRefreshRate', 1200000);
209343
209445
  const delay = this.sum(listenKeyRefreshRate, 10000);
209344
209446
  if (time - lastAuthenticatedTime > delay) {
209345
- let method = 'publicPostUserDataStream';
209447
+ let response = undefined;
209346
209448
  if (type === 'future') {
209347
- method = 'fapiPrivatePostListenKey';
209449
+ response = await this.fapiPrivatePostListenKey(query);
209348
209450
  }
209349
209451
  else if (type === 'delivery') {
209350
- method = 'dapiPrivatePostListenKey';
209452
+ response = await this.dapiPrivatePostListenKey(query);
209351
209453
  }
209352
209454
  else if (type === 'margin' && isCrossMargin) {
209353
- method = 'sapiPostUserDataStream';
209455
+ response = await this.sapiPostUserDataStream(query);
209354
209456
  }
209355
209457
  else if (isIsolatedMargin) {
209356
- method = 'sapiPostUserDataStreamIsolated';
209357
209458
  if (symbol === undefined) {
209358
209459
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.ArgumentsRequired(this.id + ' authenticate() requires a symbol argument for isolated margin mode');
209359
209460
  }
209360
209461
  const marketId = this.marketId(symbol);
209361
209462
  query = this.extend(query, { 'symbol': marketId });
209463
+ response = await this.sapiPostUserDataStreamIsolated(query);
209464
+ }
209465
+ else {
209466
+ response = await this.publicPostUserDataStream(query);
209362
209467
  }
209363
- const response = await this[method](query);
209364
209468
  this.options[type] = this.extend(options, {
209365
209469
  'listenKey': this.safeString(response, 'listenKey'),
209366
209470
  'lastAuthenticatedTime': time,
@@ -209386,26 +209490,27 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209386
209490
  // A network error happened: we can't renew a listen key that does not exist.
209387
209491
  return;
209388
209492
  }
209389
- let method = 'publicPutUserDataStream';
209390
209493
  const request = {};
209391
209494
  const symbol = this.safeString(params, 'symbol');
209392
209495
  const sendParams = this.omit(params, ['type', 'symbol']);
209393
- if (type === 'future') {
209394
- method = 'fapiPrivatePutListenKey';
209395
- }
209396
- else if (type === 'delivery') {
209397
- method = 'dapiPrivatePutListenKey';
209398
- }
209399
- else {
209400
- request['listenKey'] = listenKey;
209401
- if (type === 'margin') {
209402
- request['symbol'] = symbol;
209403
- method = 'sapiPutUserDataStream';
209404
- }
209405
- }
209406
209496
  const time = this.milliseconds();
209407
209497
  try {
209408
- await this[method](this.extend(request, sendParams));
209498
+ if (type === 'future') {
209499
+ await this.fapiPrivatePutListenKey(this.extend(request, sendParams));
209500
+ }
209501
+ else if (type === 'delivery') {
209502
+ await this.dapiPrivatePutListenKey(this.extend(request, sendParams));
209503
+ }
209504
+ else {
209505
+ request['listenKey'] = listenKey;
209506
+ if (type === 'margin') {
209507
+ request['symbol'] = symbol;
209508
+ await this.sapiPutUserDataStream(this.extend(request, sendParams));
209509
+ }
209510
+ else {
209511
+ await this.publicPutUserDataStream(this.extend(request, sendParams));
209512
+ }
209513
+ }
209409
209514
  }
209410
209515
  catch (error) {
209411
209516
  const url = this.urls['api']['ws'][type] + '/' + this.options[type]['listenKey'];
@@ -223862,10 +223967,15 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
223862
223967
  }
223863
223968
  const trades = this.myTrades;
223864
223969
  const symbols = {};
223865
- const method = spot ? 'parseWsTrade' : 'parseTrade';
223866
223970
  for (let i = 0; i < data.length; i++) {
223867
223971
  const rawTrade = data[i];
223868
- const parsed = this[method](rawTrade);
223972
+ let parsed = undefined;
223973
+ if (spot) {
223974
+ parsed = this.parseWsTrade(rawTrade);
223975
+ }
223976
+ else {
223977
+ parsed = this.parseTrade(rawTrade);
223978
+ }
223869
223979
  const symbol = parsed['symbol'];
223870
223980
  symbols[symbol] = true;
223871
223981
  trades.append(parsed);
@@ -283119,6 +283229,752 @@ class yobit extends _abstract_yobit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
283119
283229
  }
283120
283230
 
283121
283231
 
283232
+ /***/ }),
283233
+
283234
+ /***/ 5934:
283235
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
283236
+
283237
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
283238
+ /* harmony export */ Z: () => (/* binding */ zaif)
283239
+ /* harmony export */ });
283240
+ /* harmony import */ var _abstract_zaif_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5224);
283241
+ /* harmony import */ var _base_errors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6689);
283242
+ /* harmony import */ var _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2194);
283243
+ /* harmony import */ var _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9292);
283244
+ /* harmony import */ var _static_dependencies_noble_hashes_sha512_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7110);
283245
+ // ---------------------------------------------------------------------------
283246
+
283247
+
283248
+
283249
+
283250
+
283251
+ // ---------------------------------------------------------------------------
283252
+ /**
283253
+ * @class zaif
283254
+ * @augments Exchange
283255
+ */
283256
+ class zaif extends _abstract_zaif_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
283257
+ describe() {
283258
+ return this.deepExtend(super.describe(), {
283259
+ 'id': 'zaif',
283260
+ 'name': 'Zaif',
283261
+ 'countries': ['JP'],
283262
+ // 10 requests per second = 1000ms / 10 = 100ms between requests (public market endpoints)
283263
+ 'rateLimit': 100,
283264
+ 'version': '1',
283265
+ 'has': {
283266
+ 'CORS': undefined,
283267
+ 'spot': true,
283268
+ 'margin': undefined,
283269
+ 'swap': false,
283270
+ 'future': false,
283271
+ 'option': false,
283272
+ 'cancelOrder': true,
283273
+ 'createMarketOrder': false,
283274
+ 'createOrder': true,
283275
+ 'fetchBalance': true,
283276
+ 'fetchClosedOrders': true,
283277
+ 'fetchFundingHistory': false,
283278
+ 'fetchFundingRate': false,
283279
+ 'fetchFundingRateHistory': false,
283280
+ 'fetchFundingRates': false,
283281
+ 'fetchIndexOHLCV': false,
283282
+ 'fetchMarkets': true,
283283
+ 'fetchMarkOHLCV': false,
283284
+ 'fetchOpenInterestHistory': false,
283285
+ 'fetchOpenOrders': true,
283286
+ 'fetchOrderBook': true,
283287
+ 'fetchPremiumIndexOHLCV': false,
283288
+ 'fetchTicker': true,
283289
+ 'fetchTrades': true,
283290
+ 'fetchTradingFee': false,
283291
+ 'fetchTradingFees': false,
283292
+ 'withdraw': true,
283293
+ },
283294
+ 'urls': {
283295
+ 'logo': 'https://user-images.githubusercontent.com/1294454/27766927-39ca2ada-5eeb-11e7-972f-1b4199518ca6.jpg',
283296
+ 'api': {
283297
+ 'rest': 'https://api.zaif.jp',
283298
+ },
283299
+ 'www': 'https://zaif.jp',
283300
+ 'doc': [
283301
+ 'https://techbureau-api-document.readthedocs.io/ja/latest/index.html',
283302
+ 'https://corp.zaif.jp/api-docs',
283303
+ 'https://corp.zaif.jp/api-docs/api_links',
283304
+ 'https://www.npmjs.com/package/zaif.jp',
283305
+ 'https://github.com/you21979/node-zaif',
283306
+ ],
283307
+ 'fees': 'https://zaif.jp/fee?lang=en',
283308
+ },
283309
+ 'fees': {
283310
+ 'trading': {
283311
+ 'percentage': true,
283312
+ 'taker': this.parseNumber('0.001'),
283313
+ 'maker': this.parseNumber('0'),
283314
+ },
283315
+ },
283316
+ 'api': {
283317
+ 'public': {
283318
+ 'get': {
283319
+ 'depth/{pair}': 1,
283320
+ 'currencies/{pair}': 1,
283321
+ 'currencies/all': 1,
283322
+ 'currency_pairs/{pair}': 1,
283323
+ 'currency_pairs/all': 1,
283324
+ 'last_price/{pair}': 1,
283325
+ 'ticker/{pair}': 1,
283326
+ 'trades/{pair}': 1,
283327
+ },
283328
+ },
283329
+ 'private': {
283330
+ 'post': {
283331
+ 'active_orders': 5,
283332
+ 'cancel_order': 5,
283333
+ 'deposit_history': 5,
283334
+ 'get_id_info': 5,
283335
+ 'get_info': 10,
283336
+ 'get_info2': 5,
283337
+ 'get_personal_info': 5,
283338
+ 'trade': 5,
283339
+ 'trade_history': 50,
283340
+ 'withdraw': 5,
283341
+ 'withdraw_history': 5,
283342
+ },
283343
+ },
283344
+ 'ecapi': {
283345
+ 'post': {
283346
+ 'createInvoice': 1,
283347
+ 'getInvoice': 1,
283348
+ 'getInvoiceIdsByOrderNumber': 1,
283349
+ 'cancelInvoice': 1,
283350
+ },
283351
+ },
283352
+ 'tlapi': {
283353
+ 'post': {
283354
+ 'get_positions': 66,
283355
+ 'position_history': 66,
283356
+ 'active_positions': 5,
283357
+ 'create_position': 33,
283358
+ 'change_position': 33,
283359
+ 'cancel_position': 33, // 3 in 10 seconds
283360
+ },
283361
+ },
283362
+ 'fapi': {
283363
+ 'get': {
283364
+ 'groups/{group_id}': 1,
283365
+ 'last_price/{group_id}/{pair}': 1,
283366
+ 'ticker/{group_id}/{pair}': 1,
283367
+ 'trades/{group_id}/{pair}': 1,
283368
+ 'depth/{group_id}/{pair}': 1,
283369
+ },
283370
+ },
283371
+ },
283372
+ 'options': {},
283373
+ 'precisionMode': _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__/* .TICK_SIZE */ .sh,
283374
+ 'exceptions': {
283375
+ 'exact': {
283376
+ 'unsupported currency_pair': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest, // {"error": "unsupported currency_pair"}
283377
+ },
283378
+ 'broad': {},
283379
+ },
283380
+ });
283381
+ }
283382
+ async fetchMarkets(params = {}) {
283383
+ /**
283384
+ * @method
283385
+ * @name zaif#fetchMarkets
283386
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id12
283387
+ * @description retrieves data on all markets for zaif
283388
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283389
+ * @returns {object[]} an array of objects representing market data
283390
+ */
283391
+ const markets = await this.publicGetCurrencyPairsAll(params);
283392
+ //
283393
+ // [
283394
+ // {
283395
+ // "aux_unit_point": 0,
283396
+ // "item_japanese": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3",
283397
+ // "aux_unit_step": 5.0,
283398
+ // "description": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3\u30fb\u65e5\u672c\u5186\u306e\u53d6\u5f15\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059",
283399
+ // "item_unit_min": 0.001,
283400
+ // "event_number": 0,
283401
+ // "currency_pair": "btc_jpy",
283402
+ // "is_token": false,
283403
+ // "aux_unit_min": 5.0,
283404
+ // "aux_japanese": "\u65e5\u672c\u5186",
283405
+ // "id": 1,
283406
+ // "item_unit_step": 0.0001,
283407
+ // "name": "BTC/JPY",
283408
+ // "seq": 0,
283409
+ // "title": "BTC/JPY"
283410
+ // }
283411
+ // ]
283412
+ //
283413
+ return this.parseMarkets(markets);
283414
+ }
283415
+ parseMarket(market) {
283416
+ const id = this.safeString(market, 'currency_pair');
283417
+ const name = this.safeString(market, 'name');
283418
+ const [baseId, quoteId] = name.split('/');
283419
+ const base = this.safeCurrencyCode(baseId);
283420
+ const quote = this.safeCurrencyCode(quoteId);
283421
+ const symbol = base + '/' + quote;
283422
+ return {
283423
+ 'id': id,
283424
+ 'symbol': symbol,
283425
+ 'base': base,
283426
+ 'quote': quote,
283427
+ 'settle': undefined,
283428
+ 'baseId': baseId,
283429
+ 'quoteId': quoteId,
283430
+ 'settleId': undefined,
283431
+ 'type': 'spot',
283432
+ 'spot': true,
283433
+ 'margin': undefined,
283434
+ 'swap': false,
283435
+ 'future': false,
283436
+ 'option': false,
283437
+ 'active': undefined,
283438
+ 'contract': false,
283439
+ 'linear': undefined,
283440
+ 'inverse': undefined,
283441
+ 'contractSize': undefined,
283442
+ 'expiry': undefined,
283443
+ 'expiryDatetime': undefined,
283444
+ 'strike': undefined,
283445
+ 'optionType': undefined,
283446
+ 'precision': {
283447
+ 'amount': this.safeNumber(market, 'item_unit_step'),
283448
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'aux_unit_point'))),
283449
+ },
283450
+ 'limits': {
283451
+ 'leverage': {
283452
+ 'min': undefined,
283453
+ 'max': undefined,
283454
+ },
283455
+ 'amount': {
283456
+ 'min': this.safeNumber(market, 'item_unit_min'),
283457
+ 'max': undefined,
283458
+ },
283459
+ 'price': {
283460
+ 'min': this.safeNumber(market, 'aux_unit_min'),
283461
+ 'max': undefined,
283462
+ },
283463
+ 'cost': {
283464
+ 'min': undefined,
283465
+ 'max': undefined,
283466
+ },
283467
+ },
283468
+ 'created': undefined,
283469
+ 'info': market,
283470
+ };
283471
+ }
283472
+ parseBalance(response) {
283473
+ const balances = this.safeValue(response, 'return', {});
283474
+ const deposit = this.safeValue(balances, 'deposit');
283475
+ const result = {
283476
+ 'info': response,
283477
+ 'timestamp': undefined,
283478
+ 'datetime': undefined,
283479
+ };
283480
+ const funds = this.safeValue(balances, 'funds', {});
283481
+ const currencyIds = Object.keys(funds);
283482
+ for (let i = 0; i < currencyIds.length; i++) {
283483
+ const currencyId = currencyIds[i];
283484
+ const code = this.safeCurrencyCode(currencyId);
283485
+ const balance = this.safeString(funds, currencyId);
283486
+ const account = this.account();
283487
+ account['free'] = balance;
283488
+ account['total'] = balance;
283489
+ if (deposit !== undefined) {
283490
+ if (currencyId in deposit) {
283491
+ account['total'] = this.safeString(deposit, currencyId);
283492
+ }
283493
+ }
283494
+ result[code] = account;
283495
+ }
283496
+ return this.safeBalance(result);
283497
+ }
283498
+ async fetchBalance(params = {}) {
283499
+ /**
283500
+ * @method
283501
+ * @name zaif#fetchBalance
283502
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id10
283503
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
283504
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283505
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
283506
+ */
283507
+ await this.loadMarkets();
283508
+ const response = await this.privatePostGetInfo(params);
283509
+ return this.parseBalance(response);
283510
+ }
283511
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
283512
+ /**
283513
+ * @method
283514
+ * @name zaif#fetchOrderBook
283515
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id34
283516
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
283517
+ * @param {string} symbol unified symbol of the market to fetch the order book for
283518
+ * @param {int} [limit] the maximum amount of order book entries to return
283519
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283520
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
283521
+ */
283522
+ await this.loadMarkets();
283523
+ const market = this.market(symbol);
283524
+ const request = {
283525
+ 'pair': market['id'],
283526
+ };
283527
+ const response = await this.publicGetDepthPair(this.extend(request, params));
283528
+ return this.parseOrderBook(response, market['symbol']);
283529
+ }
283530
+ parseTicker(ticker, market = undefined) {
283531
+ //
283532
+ // {
283533
+ // "last": 9e-08,
283534
+ // "high": 1e-07,
283535
+ // "low": 9e-08,
283536
+ // "vwap": 0.0,
283537
+ // "volume": 135250.0,
283538
+ // "bid": 9e-08,
283539
+ // "ask": 1e-07
283540
+ // }
283541
+ //
283542
+ const symbol = this.safeSymbol(undefined, market);
283543
+ const vwap = this.safeString(ticker, 'vwap');
283544
+ const baseVolume = this.safeString(ticker, 'volume');
283545
+ const quoteVolume = _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringMul(baseVolume, vwap);
283546
+ const last = this.safeString(ticker, 'last');
283547
+ return this.safeTicker({
283548
+ 'symbol': symbol,
283549
+ 'timestamp': undefined,
283550
+ 'datetime': undefined,
283551
+ 'high': this.safeString(ticker, 'high'),
283552
+ 'low': this.safeString(ticker, 'low'),
283553
+ 'bid': this.safeString(ticker, 'bid'),
283554
+ 'bidVolume': undefined,
283555
+ 'ask': this.safeString(ticker, 'ask'),
283556
+ 'askVolume': undefined,
283557
+ 'vwap': vwap,
283558
+ 'open': undefined,
283559
+ 'close': last,
283560
+ 'last': last,
283561
+ 'previousClose': undefined,
283562
+ 'change': undefined,
283563
+ 'percentage': undefined,
283564
+ 'average': undefined,
283565
+ 'baseVolume': baseVolume,
283566
+ 'quoteVolume': quoteVolume,
283567
+ 'info': ticker,
283568
+ }, market);
283569
+ }
283570
+ async fetchTicker(symbol, params = {}) {
283571
+ /**
283572
+ * @method
283573
+ * @name zaif#fetchTicker
283574
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id22
283575
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
283576
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
283577
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283578
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
283579
+ */
283580
+ await this.loadMarkets();
283581
+ const market = this.market(symbol);
283582
+ const request = {
283583
+ 'pair': market['id'],
283584
+ };
283585
+ const ticker = await this.publicGetTickerPair(this.extend(request, params));
283586
+ //
283587
+ // {
283588
+ // "last": 9e-08,
283589
+ // "high": 1e-07,
283590
+ // "low": 9e-08,
283591
+ // "vwap": 0.0,
283592
+ // "volume": 135250.0,
283593
+ // "bid": 9e-08,
283594
+ // "ask": 1e-07
283595
+ // }
283596
+ //
283597
+ return this.parseTicker(ticker, market);
283598
+ }
283599
+ parseTrade(trade, market = undefined) {
283600
+ //
283601
+ // fetchTrades (public)
283602
+ //
283603
+ // {
283604
+ // "date": 1648559414,
283605
+ // "price": 5880375.0,
283606
+ // "amount": 0.017,
283607
+ // "tid": 176126557,
283608
+ // "currency_pair": "btc_jpy",
283609
+ // "trade_type": "ask"
283610
+ // }
283611
+ //
283612
+ let side = this.safeString(trade, 'trade_type');
283613
+ side = (side === 'bid') ? 'buy' : 'sell';
283614
+ const timestamp = this.safeTimestamp(trade, 'date');
283615
+ const id = this.safeString2(trade, 'id', 'tid');
283616
+ const priceString = this.safeString(trade, 'price');
283617
+ const amountString = this.safeString(trade, 'amount');
283618
+ const marketId = this.safeString(trade, 'currency_pair');
283619
+ const symbol = this.safeSymbol(marketId, market, '_');
283620
+ return this.safeTrade({
283621
+ 'id': id,
283622
+ 'info': trade,
283623
+ 'timestamp': timestamp,
283624
+ 'datetime': this.iso8601(timestamp),
283625
+ 'symbol': symbol,
283626
+ 'type': undefined,
283627
+ 'side': side,
283628
+ 'order': undefined,
283629
+ 'takerOrMaker': undefined,
283630
+ 'price': priceString,
283631
+ 'amount': amountString,
283632
+ 'cost': undefined,
283633
+ 'fee': undefined,
283634
+ }, market);
283635
+ }
283636
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
283637
+ /**
283638
+ * @method
283639
+ * @name zaif#fetchTrades
283640
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id28
283641
+ * @description get the list of most recent trades for a particular symbol
283642
+ * @param {string} symbol unified symbol of the market to fetch trades for
283643
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
283644
+ * @param {int} [limit] the maximum amount of trades to fetch
283645
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283646
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
283647
+ */
283648
+ await this.loadMarkets();
283649
+ const market = this.market(symbol);
283650
+ const request = {
283651
+ 'pair': market['id'],
283652
+ };
283653
+ let response = await this.publicGetTradesPair(this.extend(request, params));
283654
+ //
283655
+ // [
283656
+ // {
283657
+ // "date": 1648559414,
283658
+ // "price": 5880375.0,
283659
+ // "amount": 0.017,
283660
+ // "tid": 176126557,
283661
+ // "currency_pair": "btc_jpy",
283662
+ // "trade_type": "ask"
283663
+ // }, ...
283664
+ // ]
283665
+ //
283666
+ const numTrades = response.length;
283667
+ if (numTrades === 1) {
283668
+ const firstTrade = response[0];
283669
+ if (!Object.keys(firstTrade).length) {
283670
+ response = [];
283671
+ }
283672
+ }
283673
+ return this.parseTrades(response, market, since, limit);
283674
+ }
283675
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
283676
+ /**
283677
+ * @method
283678
+ * @name zaif#createOrder
283679
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id23
283680
+ * @description create a trade order
283681
+ * @param {string} symbol unified symbol of the market to create an order in
283682
+ * @param {string} type must be 'limit'
283683
+ * @param {string} side 'buy' or 'sell'
283684
+ * @param {float} amount how much of currency you want to trade in units of base currency
283685
+ * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
283686
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283687
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
283688
+ */
283689
+ await this.loadMarkets();
283690
+ if (type !== 'limit') {
283691
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(this.id + ' createOrder() allows limit orders only');
283692
+ }
283693
+ const market = this.market(symbol);
283694
+ const request = {
283695
+ 'currency_pair': market['id'],
283696
+ 'action': (side === 'buy') ? 'bid' : 'ask',
283697
+ 'amount': amount,
283698
+ 'price': price,
283699
+ };
283700
+ const response = await this.privatePostTrade(this.extend(request, params));
283701
+ return this.safeOrder({
283702
+ 'info': response,
283703
+ 'id': response['return']['order_id'].toString(),
283704
+ }, market);
283705
+ }
283706
+ async cancelOrder(id, symbol = undefined, params = {}) {
283707
+ /**
283708
+ * @method
283709
+ * @name zaif#cancelOrder
283710
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id37
283711
+ * @description cancels an open order
283712
+ * @param {string} id order id
283713
+ * @param {string} symbol not used by zaif cancelOrder ()
283714
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283715
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
283716
+ */
283717
+ const request = {
283718
+ 'order_id': id,
283719
+ };
283720
+ return await this.privatePostCancelOrder(this.extend(request, params));
283721
+ }
283722
+ parseOrder(order, market = undefined) {
283723
+ //
283724
+ // {
283725
+ // "currency_pair": "btc_jpy",
283726
+ // "action": "ask",
283727
+ // "amount": 0.03,
283728
+ // "price": 56000,
283729
+ // "timestamp": 1402021125,
283730
+ // "comment" : "demo"
283731
+ // }
283732
+ //
283733
+ let side = this.safeString(order, 'action');
283734
+ side = (side === 'bid') ? 'buy' : 'sell';
283735
+ const timestamp = this.safeTimestamp(order, 'timestamp');
283736
+ const marketId = this.safeString(order, 'currency_pair');
283737
+ const symbol = this.safeSymbol(marketId, market, '_');
283738
+ const price = this.safeString(order, 'price');
283739
+ const amount = this.safeString(order, 'amount');
283740
+ const id = this.safeString(order, 'id');
283741
+ return this.safeOrder({
283742
+ 'id': id,
283743
+ 'clientOrderId': undefined,
283744
+ 'timestamp': timestamp,
283745
+ 'datetime': this.iso8601(timestamp),
283746
+ 'lastTradeTimestamp': undefined,
283747
+ 'status': 'open',
283748
+ 'symbol': symbol,
283749
+ 'type': 'limit',
283750
+ 'timeInForce': undefined,
283751
+ 'postOnly': undefined,
283752
+ 'side': side,
283753
+ 'price': price,
283754
+ 'stopPrice': undefined,
283755
+ 'triggerPrice': undefined,
283756
+ 'cost': undefined,
283757
+ 'amount': amount,
283758
+ 'filled': undefined,
283759
+ 'remaining': undefined,
283760
+ 'trades': undefined,
283761
+ 'fee': undefined,
283762
+ 'info': order,
283763
+ 'average': undefined,
283764
+ }, market);
283765
+ }
283766
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
283767
+ /**
283768
+ * @method
283769
+ * @name zaif#fetchOpenOrders
283770
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id28
283771
+ * @description fetch all unfilled currently open orders
283772
+ * @param {string} symbol unified market symbol
283773
+ * @param {int} [since] the earliest time in ms to fetch open orders for
283774
+ * @param {int} [limit] the maximum number of open orders structures to retrieve
283775
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283776
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
283777
+ */
283778
+ await this.loadMarkets();
283779
+ let market = undefined;
283780
+ const request = {
283781
+ // 'is_token': false,
283782
+ // 'is_token_both': false,
283783
+ };
283784
+ if (symbol !== undefined) {
283785
+ market = this.market(symbol);
283786
+ request['currency_pair'] = market['id'];
283787
+ }
283788
+ const response = await this.privatePostActiveOrders(this.extend(request, params));
283789
+ return this.parseOrders(response['return'], market, since, limit);
283790
+ }
283791
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
283792
+ /**
283793
+ * @method
283794
+ * @name zaif#fetchClosedOrders
283795
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id24
283796
+ * @description fetches information on multiple closed orders made by the user
283797
+ * @param {string} symbol unified market symbol of the market orders were made in
283798
+ * @param {int} [since] the earliest time in ms to fetch orders for
283799
+ * @param {int} [limit] the maximum number of order structures to retrieve
283800
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283801
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
283802
+ */
283803
+ await this.loadMarkets();
283804
+ let market = undefined;
283805
+ const request = {
283806
+ // 'from': 0,
283807
+ // 'count': 1000,
283808
+ // 'from_id': 0,
283809
+ // 'end_id': 1000,
283810
+ // 'order': 'DESC',
283811
+ // 'since': 1503821051,
283812
+ // 'end': 1503821051,
283813
+ // 'is_token': false,
283814
+ };
283815
+ if (symbol !== undefined) {
283816
+ market = this.market(symbol);
283817
+ request['currency_pair'] = market['id'];
283818
+ }
283819
+ const response = await this.privatePostTradeHistory(this.extend(request, params));
283820
+ return this.parseOrders(response['return'], market, since, limit);
283821
+ }
283822
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
283823
+ /**
283824
+ * @method
283825
+ * @name zaif#withdraw
283826
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id41
283827
+ * @description make a withdrawal
283828
+ * @param {string} code unified currency code
283829
+ * @param {float} amount the amount to withdraw
283830
+ * @param {string} address the address to withdraw to
283831
+ * @param {string} tag
283832
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
283833
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
283834
+ */
283835
+ [tag, params] = this.handleWithdrawTagAndParams(tag, params);
283836
+ this.checkAddress(address);
283837
+ await this.loadMarkets();
283838
+ const currency = this.currency(code);
283839
+ if (code === 'JPY') {
283840
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(this.id + ' withdraw() does not allow ' + code + ' withdrawals');
283841
+ }
283842
+ const request = {
283843
+ 'currency': currency['id'],
283844
+ 'amount': amount,
283845
+ 'address': address,
283846
+ // 'message': 'Hi!', // XEM and others
283847
+ // 'opt_fee': 0.003, // BTC and MONA only
283848
+ };
283849
+ if (tag !== undefined) {
283850
+ request['message'] = tag;
283851
+ }
283852
+ const result = await this.privatePostWithdraw(this.extend(request, params));
283853
+ //
283854
+ // {
283855
+ // "success": 1,
283856
+ // "return": {
283857
+ // "id": 23634,
283858
+ // "fee": 0.001,
283859
+ // "txid":,
283860
+ // "funds": {
283861
+ // "jpy": 15320,
283862
+ // "btc": 1.392,
283863
+ // "xem": 100.2,
283864
+ // "mona": 2600
283865
+ // }
283866
+ // }
283867
+ // }
283868
+ //
283869
+ const returnData = this.safeValue(result, 'return');
283870
+ return this.parseTransaction(returnData, currency);
283871
+ }
283872
+ parseTransaction(transaction, currency = undefined) {
283873
+ //
283874
+ // {
283875
+ // "id": 23634,
283876
+ // "fee": 0.001,
283877
+ // "txid":,
283878
+ // "funds": {
283879
+ // "jpy": 15320,
283880
+ // "btc": 1.392,
283881
+ // "xem": 100.2,
283882
+ // "mona": 2600
283883
+ // }
283884
+ // }
283885
+ //
283886
+ currency = this.safeCurrency(undefined, currency);
283887
+ let fee = undefined;
283888
+ const feeCost = this.safeValue(transaction, 'fee');
283889
+ if (feeCost !== undefined) {
283890
+ fee = {
283891
+ 'cost': feeCost,
283892
+ 'currency': currency['code'],
283893
+ };
283894
+ }
283895
+ return {
283896
+ 'id': this.safeString(transaction, 'id'),
283897
+ 'txid': this.safeString(transaction, 'txid'),
283898
+ 'timestamp': undefined,
283899
+ 'datetime': undefined,
283900
+ 'network': undefined,
283901
+ 'addressFrom': undefined,
283902
+ 'address': undefined,
283903
+ 'addressTo': undefined,
283904
+ 'amount': undefined,
283905
+ 'type': undefined,
283906
+ 'currency': currency['code'],
283907
+ 'status': undefined,
283908
+ 'updated': undefined,
283909
+ 'tagFrom': undefined,
283910
+ 'tag': undefined,
283911
+ 'tagTo': undefined,
283912
+ 'comment': undefined,
283913
+ 'internal': undefined,
283914
+ 'fee': fee,
283915
+ 'info': transaction,
283916
+ };
283917
+ }
283918
+ customNonce() {
283919
+ const num = (this.milliseconds() / 1000).toString();
283920
+ const nonce = parseFloat(num);
283921
+ return nonce.toFixed(8);
283922
+ }
283923
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
283924
+ let url = this.urls['api']['rest'] + '/';
283925
+ if (api === 'public') {
283926
+ url += 'api/' + this.version + '/' + this.implodeParams(path, params);
283927
+ }
283928
+ else if (api === 'fapi') {
283929
+ url += 'fapi/' + this.version + '/' + this.implodeParams(path, params);
283930
+ }
283931
+ else {
283932
+ this.checkRequiredCredentials();
283933
+ if (api === 'ecapi') {
283934
+ url += 'ecapi';
283935
+ }
283936
+ else if (api === 'tlapi') {
283937
+ url += 'tlapi';
283938
+ }
283939
+ else {
283940
+ url += 'tapi';
283941
+ }
283942
+ const nonce = this.customNonce();
283943
+ body = this.urlencode(this.extend({
283944
+ 'method': path,
283945
+ 'nonce': nonce,
283946
+ }, params));
283947
+ headers = {
283948
+ 'Content-Type': 'application/x-www-form-urlencoded',
283949
+ 'Key': this.apiKey,
283950
+ 'Sign': this.hmac(this.encode(body), this.encode(this.secret), _static_dependencies_noble_hashes_sha512_js__WEBPACK_IMPORTED_MODULE_4__/* .sha512 */ .o),
283951
+ };
283952
+ }
283953
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
283954
+ }
283955
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
283956
+ if (response === undefined) {
283957
+ return undefined;
283958
+ }
283959
+ //
283960
+ // {"error": "unsupported currency_pair"}
283961
+ //
283962
+ const feedback = this.id + ' ' + body;
283963
+ const error = this.safeString(response, 'error');
283964
+ if (error !== undefined) {
283965
+ this.throwExactlyMatchedException(this.exceptions['exact'], error, feedback);
283966
+ this.throwBroadlyMatchedException(this.exceptions['broad'], error, feedback);
283967
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(feedback); // unknown message
283968
+ }
283969
+ const success = this.safeValue(response, 'success', true);
283970
+ if (!success) {
283971
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(feedback);
283972
+ }
283973
+ return undefined;
283974
+ }
283975
+ }
283976
+
283977
+
283122
283978
  /***/ }),
283123
283979
 
283124
283980
  /***/ 5140:
@@ -290162,751 +291018,6 @@ YAHOO.lang = {
290162
291018
  }
290163
291019
  };
290164
291020
 
290165
- /***/ }),
290166
-
290167
- /***/ 7558:
290168
- /***/ (() => {
290169
-
290170
-
290171
- // ---------------------------------------------------------------------------
290172
- var __importDefault = (undefined && undefined.__importDefault) || function (mod) {
290173
- return (mod && mod.__esModule) ? mod : { "default": mod };
290174
- };
290175
- Object.defineProperty(exports, "__esModule", { value: true });
290176
- const zaif_js_1 = __importDefault(require("./abstract/zaif.js"));
290177
- const errors_js_1 = require("./base/errors.js");
290178
- const Precise_js_1 = require("./base/Precise.js");
290179
- const number_js_1 = require("./base/functions/number.js");
290180
- const sha512_js_1 = require("./static_dependencies/noble-hashes/sha512.js");
290181
- // ---------------------------------------------------------------------------
290182
- /**
290183
- * @class zaif
290184
- * @extends Exchange
290185
- */
290186
- class zaif extends zaif_js_1.default {
290187
- describe() {
290188
- return this.deepExtend(super.describe(), {
290189
- 'id': 'zaif',
290190
- 'name': 'Zaif',
290191
- 'countries': ['JP'],
290192
- // 10 requests per second = 1000ms / 10 = 100ms between requests (public market endpoints)
290193
- 'rateLimit': 100,
290194
- 'version': '1',
290195
- 'has': {
290196
- 'CORS': undefined,
290197
- 'spot': true,
290198
- 'margin': undefined,
290199
- 'swap': false,
290200
- 'future': false,
290201
- 'option': false,
290202
- 'cancelOrder': true,
290203
- 'createMarketOrder': false,
290204
- 'createOrder': true,
290205
- 'fetchBalance': true,
290206
- 'fetchClosedOrders': true,
290207
- 'fetchFundingHistory': false,
290208
- 'fetchFundingRate': false,
290209
- 'fetchFundingRateHistory': false,
290210
- 'fetchFundingRates': false,
290211
- 'fetchIndexOHLCV': false,
290212
- 'fetchMarkets': true,
290213
- 'fetchMarkOHLCV': false,
290214
- 'fetchOpenInterestHistory': false,
290215
- 'fetchOpenOrders': true,
290216
- 'fetchOrderBook': true,
290217
- 'fetchPremiumIndexOHLCV': false,
290218
- 'fetchTicker': true,
290219
- 'fetchTrades': true,
290220
- 'fetchTradingFee': false,
290221
- 'fetchTradingFees': false,
290222
- 'withdraw': true,
290223
- },
290224
- 'urls': {
290225
- 'logo': 'https://user-images.githubusercontent.com/1294454/27766927-39ca2ada-5eeb-11e7-972f-1b4199518ca6.jpg',
290226
- 'api': {
290227
- 'rest': 'https://api.zaif.jp',
290228
- },
290229
- 'www': 'https://zaif.jp',
290230
- 'doc': [
290231
- 'https://techbureau-api-document.readthedocs.io/ja/latest/index.html',
290232
- 'https://corp.zaif.jp/api-docs',
290233
- 'https://corp.zaif.jp/api-docs/api_links',
290234
- 'https://www.npmjs.com/package/zaif.jp',
290235
- 'https://github.com/you21979/node-zaif',
290236
- ],
290237
- 'fees': 'https://zaif.jp/fee?lang=en',
290238
- },
290239
- 'fees': {
290240
- 'trading': {
290241
- 'percentage': true,
290242
- 'taker': this.parseNumber('0.001'),
290243
- 'maker': this.parseNumber('0'),
290244
- },
290245
- },
290246
- 'api': {
290247
- 'public': {
290248
- 'get': {
290249
- 'depth/{pair}': 1,
290250
- 'currencies/{pair}': 1,
290251
- 'currencies/all': 1,
290252
- 'currency_pairs/{pair}': 1,
290253
- 'currency_pairs/all': 1,
290254
- 'last_price/{pair}': 1,
290255
- 'ticker/{pair}': 1,
290256
- 'trades/{pair}': 1,
290257
- },
290258
- },
290259
- 'private': {
290260
- 'post': {
290261
- 'active_orders': 5,
290262
- 'cancel_order': 5,
290263
- 'deposit_history': 5,
290264
- 'get_id_info': 5,
290265
- 'get_info': 10,
290266
- 'get_info2': 5,
290267
- 'get_personal_info': 5,
290268
- 'trade': 5,
290269
- 'trade_history': 50,
290270
- 'withdraw': 5,
290271
- 'withdraw_history': 5,
290272
- },
290273
- },
290274
- 'ecapi': {
290275
- 'post': {
290276
- 'createInvoice': 1,
290277
- 'getInvoice': 1,
290278
- 'getInvoiceIdsByOrderNumber': 1,
290279
- 'cancelInvoice': 1,
290280
- },
290281
- },
290282
- 'tlapi': {
290283
- 'post': {
290284
- 'get_positions': 66,
290285
- 'position_history': 66,
290286
- 'active_positions': 5,
290287
- 'create_position': 33,
290288
- 'change_position': 33,
290289
- 'cancel_position': 33, // 3 in 10 seconds
290290
- },
290291
- },
290292
- 'fapi': {
290293
- 'get': {
290294
- 'groups/{group_id}': 1,
290295
- 'last_price/{group_id}/{pair}': 1,
290296
- 'ticker/{group_id}/{pair}': 1,
290297
- 'trades/{group_id}/{pair}': 1,
290298
- 'depth/{group_id}/{pair}': 1,
290299
- },
290300
- },
290301
- },
290302
- 'options': {},
290303
- 'precisionMode': number_js_1.TICK_SIZE,
290304
- 'exceptions': {
290305
- 'exact': {
290306
- 'unsupported currency_pair': errors_js_1.BadRequest, // {"error": "unsupported currency_pair"}
290307
- },
290308
- 'broad': {},
290309
- },
290310
- });
290311
- }
290312
- async fetchMarkets(params = {}) {
290313
- /**
290314
- * @method
290315
- * @name zaif#fetchMarkets
290316
- * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id12
290317
- * @description retrieves data on all markets for zaif
290318
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290319
- * @returns {object[]} an array of objects representing market data
290320
- */
290321
- const markets = await this.publicGetCurrencyPairsAll(params);
290322
- //
290323
- // [
290324
- // {
290325
- // "aux_unit_point": 0,
290326
- // "item_japanese": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3",
290327
- // "aux_unit_step": 5.0,
290328
- // "description": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3\u30fb\u65e5\u672c\u5186\u306e\u53d6\u5f15\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059",
290329
- // "item_unit_min": 0.001,
290330
- // "event_number": 0,
290331
- // "currency_pair": "btc_jpy",
290332
- // "is_token": false,
290333
- // "aux_unit_min": 5.0,
290334
- // "aux_japanese": "\u65e5\u672c\u5186",
290335
- // "id": 1,
290336
- // "item_unit_step": 0.0001,
290337
- // "name": "BTC/JPY",
290338
- // "seq": 0,
290339
- // "title": "BTC/JPY"
290340
- // }
290341
- // ]
290342
- //
290343
- return this.parseMarkets(markets);
290344
- }
290345
- parseMarket(market) {
290346
- const id = this.safeString(market, 'currency_pair');
290347
- const name = this.safeString(market, 'name');
290348
- const [baseId, quoteId] = name.split('/');
290349
- const base = this.safeCurrencyCode(baseId);
290350
- const quote = this.safeCurrencyCode(quoteId);
290351
- const symbol = base + '/' + quote;
290352
- return {
290353
- 'id': id,
290354
- 'symbol': symbol,
290355
- 'base': base,
290356
- 'quote': quote,
290357
- 'settle': undefined,
290358
- 'baseId': baseId,
290359
- 'quoteId': quoteId,
290360
- 'settleId': undefined,
290361
- 'type': 'spot',
290362
- 'spot': true,
290363
- 'margin': undefined,
290364
- 'swap': false,
290365
- 'future': false,
290366
- 'option': false,
290367
- 'active': undefined,
290368
- 'contract': false,
290369
- 'linear': undefined,
290370
- 'inverse': undefined,
290371
- 'contractSize': undefined,
290372
- 'expiry': undefined,
290373
- 'expiryDatetime': undefined,
290374
- 'strike': undefined,
290375
- 'optionType': undefined,
290376
- 'precision': {
290377
- 'amount': this.safeNumber(market, 'item_unit_step'),
290378
- 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'aux_unit_point'))),
290379
- },
290380
- 'limits': {
290381
- 'leverage': {
290382
- 'min': undefined,
290383
- 'max': undefined,
290384
- },
290385
- 'amount': {
290386
- 'min': this.safeNumber(market, 'item_unit_min'),
290387
- 'max': undefined,
290388
- },
290389
- 'price': {
290390
- 'min': this.safeNumber(market, 'aux_unit_min'),
290391
- 'max': undefined,
290392
- },
290393
- 'cost': {
290394
- 'min': undefined,
290395
- 'max': undefined,
290396
- },
290397
- },
290398
- 'created': undefined,
290399
- 'info': market,
290400
- };
290401
- }
290402
- parseBalance(response) {
290403
- const balances = this.safeValue(response, 'return', {});
290404
- const deposit = this.safeValue(balances, 'deposit');
290405
- const result = {
290406
- 'info': response,
290407
- 'timestamp': undefined,
290408
- 'datetime': undefined,
290409
- };
290410
- const funds = this.safeValue(balances, 'funds', {});
290411
- const currencyIds = Object.keys(funds);
290412
- for (let i = 0; i < currencyIds.length; i++) {
290413
- const currencyId = currencyIds[i];
290414
- const code = this.safeCurrencyCode(currencyId);
290415
- const balance = this.safeString(funds, currencyId);
290416
- const account = this.account();
290417
- account['free'] = balance;
290418
- account['total'] = balance;
290419
- if (deposit !== undefined) {
290420
- if (currencyId in deposit) {
290421
- account['total'] = this.safeString(deposit, currencyId);
290422
- }
290423
- }
290424
- result[code] = account;
290425
- }
290426
- return this.safeBalance(result);
290427
- }
290428
- async fetchBalance(params = {}) {
290429
- /**
290430
- * @method
290431
- * @name zaif#fetchBalance
290432
- * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id10
290433
- * @description query for balance and get the amount of funds available for trading or funds locked in orders
290434
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290435
- * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
290436
- */
290437
- await this.loadMarkets();
290438
- const response = await this.privatePostGetInfo(params);
290439
- return this.parseBalance(response);
290440
- }
290441
- async fetchOrderBook(symbol, limit = undefined, params = {}) {
290442
- /**
290443
- * @method
290444
- * @name zaif#fetchOrderBook
290445
- * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id34
290446
- * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
290447
- * @param {string} symbol unified symbol of the market to fetch the order book for
290448
- * @param {int} [limit] the maximum amount of order book entries to return
290449
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290450
- * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
290451
- */
290452
- await this.loadMarkets();
290453
- const market = this.market(symbol);
290454
- const request = {
290455
- 'pair': market['id'],
290456
- };
290457
- const response = await this.publicGetDepthPair(this.extend(request, params));
290458
- return this.parseOrderBook(response, market['symbol']);
290459
- }
290460
- parseTicker(ticker, market = undefined) {
290461
- //
290462
- // {
290463
- // "last": 9e-08,
290464
- // "high": 1e-07,
290465
- // "low": 9e-08,
290466
- // "vwap": 0.0,
290467
- // "volume": 135250.0,
290468
- // "bid": 9e-08,
290469
- // "ask": 1e-07
290470
- // }
290471
- //
290472
- const symbol = this.safeSymbol(undefined, market);
290473
- const timestamp = this.milliseconds();
290474
- const vwap = this.safeString(ticker, 'vwap');
290475
- const baseVolume = this.safeString(ticker, 'volume');
290476
- const quoteVolume = Precise_js_1.Precise.stringMul(baseVolume, vwap);
290477
- const last = this.safeString(ticker, 'last');
290478
- return this.safeTicker({
290479
- 'symbol': symbol,
290480
- 'timestamp': timestamp,
290481
- 'datetime': this.iso8601(timestamp),
290482
- 'high': this.safeString(ticker, 'high'),
290483
- 'low': this.safeString(ticker, 'low'),
290484
- 'bid': this.safeString(ticker, 'bid'),
290485
- 'bidVolume': undefined,
290486
- 'ask': this.safeString(ticker, 'ask'),
290487
- 'askVolume': undefined,
290488
- 'vwap': vwap,
290489
- 'open': undefined,
290490
- 'close': last,
290491
- 'last': last,
290492
- 'previousClose': undefined,
290493
- 'change': undefined,
290494
- 'percentage': undefined,
290495
- 'average': undefined,
290496
- 'baseVolume': baseVolume,
290497
- 'quoteVolume': quoteVolume,
290498
- 'info': ticker,
290499
- }, market);
290500
- }
290501
- async fetchTicker(symbol, params = {}) {
290502
- /**
290503
- * @method
290504
- * @name zaif#fetchTicker
290505
- * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id22
290506
- * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
290507
- * @param {string} symbol unified symbol of the market to fetch the ticker for
290508
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290509
- * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
290510
- */
290511
- await this.loadMarkets();
290512
- const market = this.market(symbol);
290513
- const request = {
290514
- 'pair': market['id'],
290515
- };
290516
- const ticker = await this.publicGetTickerPair(this.extend(request, params));
290517
- //
290518
- // {
290519
- // "last": 9e-08,
290520
- // "high": 1e-07,
290521
- // "low": 9e-08,
290522
- // "vwap": 0.0,
290523
- // "volume": 135250.0,
290524
- // "bid": 9e-08,
290525
- // "ask": 1e-07
290526
- // }
290527
- //
290528
- return this.parseTicker(ticker, market);
290529
- }
290530
- parseTrade(trade, market = undefined) {
290531
- //
290532
- // fetchTrades (public)
290533
- //
290534
- // {
290535
- // "date": 1648559414,
290536
- // "price": 5880375.0,
290537
- // "amount": 0.017,
290538
- // "tid": 176126557,
290539
- // "currency_pair": "btc_jpy",
290540
- // "trade_type": "ask"
290541
- // }
290542
- //
290543
- let side = this.safeString(trade, 'trade_type');
290544
- side = (side === 'bid') ? 'buy' : 'sell';
290545
- const timestamp = this.safeTimestamp(trade, 'date');
290546
- const id = this.safeString2(trade, 'id', 'tid');
290547
- const priceString = this.safeString(trade, 'price');
290548
- const amountString = this.safeString(trade, 'amount');
290549
- const marketId = this.safeString(trade, 'currency_pair');
290550
- const symbol = this.safeSymbol(marketId, market, '_');
290551
- return this.safeTrade({
290552
- 'id': id,
290553
- 'info': trade,
290554
- 'timestamp': timestamp,
290555
- 'datetime': this.iso8601(timestamp),
290556
- 'symbol': symbol,
290557
- 'type': undefined,
290558
- 'side': side,
290559
- 'order': undefined,
290560
- 'takerOrMaker': undefined,
290561
- 'price': priceString,
290562
- 'amount': amountString,
290563
- 'cost': undefined,
290564
- 'fee': undefined,
290565
- }, market);
290566
- }
290567
- async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
290568
- /**
290569
- * @method
290570
- * @name zaif#fetchTrades
290571
- * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id28
290572
- * @description get the list of most recent trades for a particular symbol
290573
- * @param {string} symbol unified symbol of the market to fetch trades for
290574
- * @param {int} [since] timestamp in ms of the earliest trade to fetch
290575
- * @param {int} [limit] the maximum amount of trades to fetch
290576
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290577
- * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
290578
- */
290579
- await this.loadMarkets();
290580
- const market = this.market(symbol);
290581
- const request = {
290582
- 'pair': market['id'],
290583
- };
290584
- let response = await this.publicGetTradesPair(this.extend(request, params));
290585
- //
290586
- // [
290587
- // {
290588
- // "date": 1648559414,
290589
- // "price": 5880375.0,
290590
- // "amount": 0.017,
290591
- // "tid": 176126557,
290592
- // "currency_pair": "btc_jpy",
290593
- // "trade_type": "ask"
290594
- // }, ...
290595
- // ]
290596
- //
290597
- const numTrades = response.length;
290598
- if (numTrades === 1) {
290599
- const firstTrade = response[0];
290600
- if (!Object.keys(firstTrade).length) {
290601
- response = [];
290602
- }
290603
- }
290604
- return this.parseTrades(response, market, since, limit);
290605
- }
290606
- async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
290607
- /**
290608
- * @method
290609
- * @name zaif#createOrder
290610
- * @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id23
290611
- * @description create a trade order
290612
- * @param {string} symbol unified symbol of the market to create an order in
290613
- * @param {string} type must be 'limit'
290614
- * @param {string} side 'buy' or 'sell'
290615
- * @param {float} amount how much of currency you want to trade in units of base currency
290616
- * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
290617
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290618
- * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
290619
- */
290620
- await this.loadMarkets();
290621
- if (type !== 'limit') {
290622
- throw new errors_js_1.ExchangeError(this.id + ' createOrder() allows limit orders only');
290623
- }
290624
- const market = this.market(symbol);
290625
- const request = {
290626
- 'currency_pair': market['id'],
290627
- 'action': (side === 'buy') ? 'bid' : 'ask',
290628
- 'amount': amount,
290629
- 'price': price,
290630
- };
290631
- const response = await this.privatePostTrade(this.extend(request, params));
290632
- return this.safeOrder({
290633
- 'info': response,
290634
- 'id': response['return']['order_id'].toString(),
290635
- }, market);
290636
- }
290637
- async cancelOrder(id, symbol = undefined, params = {}) {
290638
- /**
290639
- * @method
290640
- * @name zaif#cancelOrder
290641
- * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id37
290642
- * @description cancels an open order
290643
- * @param {string} id order id
290644
- * @param {string} symbol not used by zaif cancelOrder ()
290645
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290646
- * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
290647
- */
290648
- const request = {
290649
- 'order_id': id,
290650
- };
290651
- return await this.privatePostCancelOrder(this.extend(request, params));
290652
- }
290653
- parseOrder(order, market = undefined) {
290654
- //
290655
- // {
290656
- // "currency_pair": "btc_jpy",
290657
- // "action": "ask",
290658
- // "amount": 0.03,
290659
- // "price": 56000,
290660
- // "timestamp": 1402021125,
290661
- // "comment" : "demo"
290662
- // }
290663
- //
290664
- let side = this.safeString(order, 'action');
290665
- side = (side === 'bid') ? 'buy' : 'sell';
290666
- const timestamp = this.safeTimestamp(order, 'timestamp');
290667
- const marketId = this.safeString(order, 'currency_pair');
290668
- const symbol = this.safeSymbol(marketId, market, '_');
290669
- const price = this.safeString(order, 'price');
290670
- const amount = this.safeString(order, 'amount');
290671
- const id = this.safeString(order, 'id');
290672
- return this.safeOrder({
290673
- 'id': id,
290674
- 'clientOrderId': undefined,
290675
- 'timestamp': timestamp,
290676
- 'datetime': this.iso8601(timestamp),
290677
- 'lastTradeTimestamp': undefined,
290678
- 'status': 'open',
290679
- 'symbol': symbol,
290680
- 'type': 'limit',
290681
- 'timeInForce': undefined,
290682
- 'postOnly': undefined,
290683
- 'side': side,
290684
- 'price': price,
290685
- 'stopPrice': undefined,
290686
- 'triggerPrice': undefined,
290687
- 'cost': undefined,
290688
- 'amount': amount,
290689
- 'filled': undefined,
290690
- 'remaining': undefined,
290691
- 'trades': undefined,
290692
- 'fee': undefined,
290693
- 'info': order,
290694
- 'average': undefined,
290695
- }, market);
290696
- }
290697
- async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
290698
- /**
290699
- * @method
290700
- * @name zaif#fetchOpenOrders
290701
- * @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id28
290702
- * @description fetch all unfilled currently open orders
290703
- * @param {string} symbol unified market symbol
290704
- * @param {int} [since] the earliest time in ms to fetch open orders for
290705
- * @param {int} [limit] the maximum number of open orders structures to retrieve
290706
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290707
- * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
290708
- */
290709
- await this.loadMarkets();
290710
- let market = undefined;
290711
- const request = {
290712
- // 'is_token': false,
290713
- // 'is_token_both': false,
290714
- };
290715
- if (symbol !== undefined) {
290716
- market = this.market(symbol);
290717
- request['currency_pair'] = market['id'];
290718
- }
290719
- const response = await this.privatePostActiveOrders(this.extend(request, params));
290720
- return this.parseOrders(response['return'], market, since, limit);
290721
- }
290722
- async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
290723
- /**
290724
- * @method
290725
- * @name zaif#fetchClosedOrders
290726
- * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id24
290727
- * @description fetches information on multiple closed orders made by the user
290728
- * @param {string} symbol unified market symbol of the market orders were made in
290729
- * @param {int} [since] the earliest time in ms to fetch orders for
290730
- * @param {int} [limit] the maximum number of order structures to retrieve
290731
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290732
- * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
290733
- */
290734
- await this.loadMarkets();
290735
- let market = undefined;
290736
- const request = {
290737
- // 'from': 0,
290738
- // 'count': 1000,
290739
- // 'from_id': 0,
290740
- // 'end_id': 1000,
290741
- // 'order': 'DESC',
290742
- // 'since': 1503821051,
290743
- // 'end': 1503821051,
290744
- // 'is_token': false,
290745
- };
290746
- if (symbol !== undefined) {
290747
- market = this.market(symbol);
290748
- request['currency_pair'] = market['id'];
290749
- }
290750
- const response = await this.privatePostTradeHistory(this.extend(request, params));
290751
- return this.parseOrders(response['return'], market, since, limit);
290752
- }
290753
- async withdraw(code, amount, address, tag = undefined, params = {}) {
290754
- /**
290755
- * @method
290756
- * @name zaif#withdraw
290757
- * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id41
290758
- * @description make a withdrawal
290759
- * @param {string} code unified currency code
290760
- * @param {float} amount the amount to withdraw
290761
- * @param {string} address the address to withdraw to
290762
- * @param {string} tag
290763
- * @param {object} [params] extra parameters specific to the exchange API endpoint
290764
- * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
290765
- */
290766
- [tag, params] = this.handleWithdrawTagAndParams(tag, params);
290767
- this.checkAddress(address);
290768
- await this.loadMarkets();
290769
- const currency = this.currency(code);
290770
- if (code === 'JPY') {
290771
- throw new errors_js_1.ExchangeError(this.id + ' withdraw() does not allow ' + code + ' withdrawals');
290772
- }
290773
- const request = {
290774
- 'currency': currency['id'],
290775
- 'amount': amount,
290776
- 'address': address,
290777
- // 'message': 'Hi!', // XEM and others
290778
- // 'opt_fee': 0.003, // BTC and MONA only
290779
- };
290780
- if (tag !== undefined) {
290781
- request['message'] = tag;
290782
- }
290783
- const result = await this.privatePostWithdraw(this.extend(request, params));
290784
- //
290785
- // {
290786
- // "success": 1,
290787
- // "return": {
290788
- // "id": 23634,
290789
- // "fee": 0.001,
290790
- // "txid":,
290791
- // "funds": {
290792
- // "jpy": 15320,
290793
- // "btc": 1.392,
290794
- // "xem": 100.2,
290795
- // "mona": 2600
290796
- // }
290797
- // }
290798
- // }
290799
- //
290800
- const returnData = this.safeValue(result, 'return');
290801
- return this.parseTransaction(returnData, currency);
290802
- }
290803
- parseTransaction(transaction, currency = undefined) {
290804
- //
290805
- // {
290806
- // "id": 23634,
290807
- // "fee": 0.001,
290808
- // "txid":,
290809
- // "funds": {
290810
- // "jpy": 15320,
290811
- // "btc": 1.392,
290812
- // "xem": 100.2,
290813
- // "mona": 2600
290814
- // }
290815
- // }
290816
- //
290817
- currency = this.safeCurrency(undefined, currency);
290818
- let fee = undefined;
290819
- const feeCost = this.safeValue(transaction, 'fee');
290820
- if (feeCost !== undefined) {
290821
- fee = {
290822
- 'cost': feeCost,
290823
- 'currency': currency['code'],
290824
- };
290825
- }
290826
- return {
290827
- 'id': this.safeString(transaction, 'id'),
290828
- 'txid': this.safeString(transaction, 'txid'),
290829
- 'timestamp': undefined,
290830
- 'datetime': undefined,
290831
- 'network': undefined,
290832
- 'addressFrom': undefined,
290833
- 'address': undefined,
290834
- 'addressTo': undefined,
290835
- 'amount': undefined,
290836
- 'type': undefined,
290837
- 'currency': currency['code'],
290838
- 'status': undefined,
290839
- 'updated': undefined,
290840
- 'tagFrom': undefined,
290841
- 'tag': undefined,
290842
- 'tagTo': undefined,
290843
- 'comment': undefined,
290844
- 'internal': undefined,
290845
- 'fee': fee,
290846
- 'info': transaction,
290847
- };
290848
- }
290849
- customNonce() {
290850
- const num = (this.milliseconds() / 1000).toString();
290851
- const nonce = parseFloat(num);
290852
- return nonce.toFixed(8);
290853
- }
290854
- sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
290855
- let url = this.urls['api']['rest'] + '/';
290856
- if (api === 'public') {
290857
- url += 'api/' + this.version + '/' + this.implodeParams(path, params);
290858
- }
290859
- else if (api === 'fapi') {
290860
- url += 'fapi/' + this.version + '/' + this.implodeParams(path, params);
290861
- }
290862
- else {
290863
- this.checkRequiredCredentials();
290864
- if (api === 'ecapi') {
290865
- url += 'ecapi';
290866
- }
290867
- else if (api === 'tlapi') {
290868
- url += 'tlapi';
290869
- }
290870
- else {
290871
- url += 'tapi';
290872
- }
290873
- const nonce = this.customNonce();
290874
- body = this.urlencode(this.extend({
290875
- 'method': path,
290876
- 'nonce': nonce,
290877
- }, params));
290878
- headers = {
290879
- 'Content-Type': 'application/x-www-form-urlencoded',
290880
- 'Key': this.apiKey,
290881
- 'Sign': this.hmac(this.encode(body), this.encode(this.secret), sha512_js_1.sha512),
290882
- };
290883
- }
290884
- return { 'url': url, 'method': method, 'body': body, 'headers': headers };
290885
- }
290886
- handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
290887
- if (response === undefined) {
290888
- return undefined;
290889
- }
290890
- //
290891
- // {"error": "unsupported currency_pair"}
290892
- //
290893
- const feedback = this.id + ' ' + body;
290894
- const error = this.safeString(response, 'error');
290895
- if (error !== undefined) {
290896
- this.throwExactlyMatchedException(this.exceptions['exact'], error, feedback);
290897
- this.throwBroadlyMatchedException(this.exceptions['broad'], error, feedback);
290898
- throw new errors_js_1.ExchangeError(feedback); // unknown message
290899
- }
290900
- const success = this.safeValue(response, 'success', true);
290901
- if (!success) {
290902
- throw new errors_js_1.ExchangeError(feedback);
290903
- }
290904
- return undefined;
290905
- }
290906
- }
290907
- exports.default = zaif;
290908
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemFpZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInphaWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLCtFQUErRTs7Ozs7QUFFL0UsaUVBQTBDO0FBQzFDLGdEQUE2RDtBQUM3RCxrREFBNEM7QUFDNUMsMERBQXVEO0FBQ3ZELDRFQUFzRTtBQUd0RSwrRUFBK0U7QUFFL0U7OztHQUdHO0FBQ0gsTUFBcUIsSUFBSyxTQUFRLGlCQUFRO0lBQ3RDLFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRyxFQUFFO1lBQ3ZDLElBQUksRUFBRSxNQUFNO1lBQ1osTUFBTSxFQUFFLE1BQU07WUFDZCxXQUFXLEVBQUUsQ0FBRSxJQUFJLENBQUU7WUFDckIsMEZBQTBGO1lBQzFGLFdBQVcsRUFBRSxHQUFHO1lBQ2hCLFNBQVMsRUFBRSxHQUFHO1lBQ2QsS0FBSyxFQUFFO2dCQUNILE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsSUFBSTtnQkFDWixRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLG1CQUFtQixFQUFFLEtBQUs7Z0JBQzFCLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsbUJBQW1CLEVBQUUsSUFBSTtnQkFDekIscUJBQXFCLEVBQUUsS0FBSztnQkFDNUIsa0JBQWtCLEVBQUUsS0FBSztnQkFDekIseUJBQXlCLEVBQUUsS0FBSztnQkFDaEMsbUJBQW1CLEVBQUUsS0FBSztnQkFDMUIsaUJBQWlCLEVBQUUsS0FBSztnQkFDeEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLDBCQUEwQixFQUFFLEtBQUs7Z0JBQ2pDLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLGdCQUFn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QVMsRUFBRTtZQUNyQixJQUFJLENBQUMsNEJBQTRCLENBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLDRCQUE0QixDQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sSUFBSSx5QkFBYSxDQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO1NBQ3pEO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixNQUFNLElBQUkseUJBQWEsQ0FBRSxRQUFRLENBQUMsQ0FBQztTQUN0QztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Q0FDSjtBQWp1QkQsdUJBaXVCQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbXBvcnQgRXhjaGFuZ2UgZnJvbSAnLi9hYnN0cmFjdC96YWlmLmpzJztcbmltcG9ydCB7IEV4Y2hhbmdlRXJyb3IsIEJhZFJlcXVlc3QgfSBmcm9tICcuL2Jhc2UvZXJyb3JzLmpzJztcbmltcG9ydCB7IFByZWNpc2UgfSBmcm9tICcuL2Jhc2UvUHJlY2lzZS5qcyc7XG5pbXBvcnQgeyBUSUNLX1NJWkUgfSBmcm9tICcuL2Jhc2UvZnVuY3Rpb25zL251bWJlci5qcyc7XG5pbXBvcnQgeyBzaGE1MTIgfSBmcm9tICcuL3N0YXRpY19kZXBlbmRlbmNpZXMvbm9ibGUtaGFzaGVzL3NoYTUxMi5qcyc7XG5pbXBvcnQgeyBCYWxhbmNlcywgQ3VycmVuY3ksIEludCwgTWFya2V0LCBPcmRlciwgT3JkZXJCb29rLCBPcmRlclNpZGUsIE9yZGVyVHlwZSwgU3RyLCBUaWNrZXIsIFRyYWRlLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4vYmFzZS90eXBlcy5qcyc7XG5cbi8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBAY2xhc3MgemFpZlxuICogQGV4dGVuZHMgRXhjaGFuZ2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgemFpZiBleHRlbmRzIEV4Y2hhbmdlIHtcbiAgICBkZXNjcmliZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZXBFeHRlbmQgKHN1cGVyLmRlc2NyaWJlICgpLCB7XG4gICAgICAgICAgICAnaWQnOiAnemFpZicsXG4gICAgICAgICAgICAnbmFtZSc6ICdaYWlmJyxcbiAgICAgICAgICAgICdjb3VudHJpZXMnOiBbICdKUCcgXSxcbiAgICAgICAgICAgIC8vIDEwIHJlcXVlc3RzIHBlciBzZWNvbmQgPSAxMDAwbXMgLyAxMCA9IDEwMG1zIGJldHdlZW4gcmVxdWVzdHMgKHB1YmxpYyBtYXJrZXQgZW5kcG9pbnRzKVxuICAgICAgICAgICAgJ3JhdGVMaW1pdCc6IDEwMCxcbiAgICAgICAgICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgJ2hhcyc6IHtcbiAgICAgICAgICAgICAgICAnQ09SUyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAnc3BvdCc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ21hcmdpbic6IHVuZGVmaW5lZCwgLy8gaGFzIGJ1dCB1bmltcGxlbWVudGVkXG4gICAgICAgICAgICAgICAgJ3N3YXAnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZnV0dXJlJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ29wdGlvbic6IGZhbHNlLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZU1hcmtldE9yZGVyJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZU9yZGVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hCYWxhbmNlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hDbG9zZWRPcmRlcnMnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmZXRjaEZ1bmRpbmdIaXN0b3J5JzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2ZldGNoRnVuZGluZ1JhdGUnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hGdW5kaW5nUmF0ZUhpc3RvcnknOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hGdW5kaW5nUmF0ZXMnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hJbmRleE9ITENWJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2ZldGNoTWFya2V0cyc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZldGNoTWFya09ITENWJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2ZldGNoT3BlbkludGVyZXN0SGlzdG9yeSc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICdmZXRjaE9wZW5PcmRlcnMnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmZXRjaE9yZGVyQm9vayc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZldGNoUHJlbWl1bUluZGV4T0hMQ1YnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hUaWNrZXInOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmZXRjaFRyYWRlcyc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZldGNoVHJhZGluZ0ZlZSc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICdmZXRjaFRyYWRpbmdGZWVzJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JzogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAndXJscyc6IHtcbiAgICAgICAgICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2OTI3LTM5Y2EyYWRhLTVlZWItMTFlNy05NzJmLTFiNDE5OTUxOGNhNi5qcGcnLFxuICAgICAgICAgICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAgICAgICAgICdyZXN0JzogJ2h0dHBzOi8vYXBpLnphaWYuanAnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ3d3dyc6ICdodHRwczovL3phaWYuanAnLFxuICAgICAgICAgICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL3RlY2hidXJlYXUtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9pbmRleC5odG1sJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vY29ycC56YWlmLmpwL2FwaS1kb2NzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vY29ycC56YWlmLmpwL2FwaS1kb2NzL2FwaV9saW5rcycsXG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS96YWlmLmpwJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS95b3UyMTk3OS9ub2RlLXphaWYnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgJ2ZlZXMnOiAnaHR0cHM6Ly96YWlmLmpwL2ZlZT9sYW5nPWVuJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZmVlcyc6IHtcbiAgICAgICAgICAgICAgICAndHJhZGluZyc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAndGFrZXInOiB0aGlzLnBhcnNlTnVtYmVyICgnMC4wMDEnKSxcbiAgICAgICAgICAgICAgICAgICAgJ21ha2VyJzogdGhpcy5wYXJzZU51bWJlciAoJzAnKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2dldCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdkZXB0aC97cGFpcn0nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnJlbmNpZXMve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjdXJyZW5jaWVzL2FsbCc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAnY3VycmVuY3lfcGFpcnMve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjdXJyZW5jeV9wYWlycy9hbGwnOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2xhc3RfcHJpY2Uve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aWNrZXIve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0cmFkZXMve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgICAgICAgICAncG9zdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhY3RpdmVfb3JkZXJzJzogNSwgLy8gMTAgaW4gNSBzZWNvbmRzID0gMiBwZXIgc2Vjb25kID0+IGNvc3QgPSAxMCAvIDIgPSA1XG4gICAgICAgICAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJzogNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdkZXBvc2l0X2hpc3RvcnknOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9pZF9pbmZvJzogNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfaW5mbyc6IDEwLCAvLyAxMCBpbiAxMCBzZWNvbmRzID0gMSBwZXIgc2Vjb25kID0+IGNvc3QgPSAxMCAvIDEgPSAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9pbmZvMic6IDUsIC8vIDIwIGluIDEwIHNlY29uZHMgPSAyIHBlciBzZWNvbmQgPT4gY29zdCA9IDEwIC8gMiA9IDVcbiAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfcGVyc29uYWxfaW5mbyc6IDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAndHJhZGUnOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWRlX2hpc3RvcnknOiA1MCwgLy8gMTIgaW4gNjAgc2Vjb25kcyA9IDAuMiBwZXIgc2Vjb25kID0+IGNvc3QgPSAxMCAvIDAuMiA9IDUwXG4gICAgICAgICAgICAgICAgICAgICAgICAnd2l0aGRyYXcnOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2hpc3RvcnknOiA1LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2VjYXBpJzoge1xuICAgICAgICAgICAgICAgICAgICAncG9zdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGVJbnZvaWNlJzogMSwgLy8gdW52ZXJpZmllZFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldEludm9pY2UnOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldEludm9pY2VJZHNCeU9yZGVyTnVtYmVyJzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjYW5jZWxJbnZvaWNlJzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICd0bGFwaSc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3Bvc3QnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3Bvc2l0aW9ucyc6IDY2LCAvLyAxMCBpbiA2MCBzZWNvbmRzID0gMC4xNjYgcGVyIHNlY29uZCA9PiBjb3N0ID0gMTAgLyAwLjE2NiA9IDY2XG4gICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb25faGlzdG9yeSc6IDY2LCAvLyAxMCBpbiA2MCBzZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAnYWN0aXZlX3Bvc2l0aW9ucyc6IDUsIC8vIDIwIGluIDEwIHNlY29uZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGVfcG9zaXRpb24nOiAzMywgLy8gMyBpbiAxMCBzZWNvbmRzID0gMC4zIHBlciBzZWNvbmQgPT4gY29zdCA9IDEwIC8gMC4zID0gMzNcbiAgICAgICAgICAgICAgICAgICAgICAgICdjaGFuZ2VfcG9zaXRpb24nOiAzMywgLy8gMyBpbiAxMCBzZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAnY2FuY2VsX3Bvc2l0aW9uJzogMzMsIC8vIDMgaW4gMTAgc2Vjb25kc1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2ZhcGknOiB7XG4gICAgICAgICAgICAgICAgICAgICdnZXQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXBzL3tncm91cF9pZH0nOiAxLCAvLyB0ZXN0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAnbGFzdF9wcmljZS97Z3JvdXBfaWR9L3twYWlyfSc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAndGlja2VyL3tncm91cF9pZH0ve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0cmFkZXMve2dyb3VwX2lkfS97cGFpcn0nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcHRoL3tncm91cF9pZH0ve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdvcHRpb25zJzoge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdwcmVjaXNpb25Nb2RlJzogVElDS19TSVpFLFxuICAgICAgICAgICAgJ2V4Y2VwdGlvbnMnOiB7XG4gICAgICAgICAgICAgICAgJ2V4YWN0Jzoge1xuICAgICAgICAgICAgICAgICAgICAndW5zdXBwb3J0ZWQgY3VycmVuY3lfcGFpcic6IEJhZFJlcXVlc3QsIC8vIHtcImVycm9yXCI6IFwidW5zdXBwb3J0ZWQgY3VycmVuY3lfcGFpclwifVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2Jyb2FkJzoge1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjZmV0Y2hNYXJrZXRzXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly96YWlmLWFwaS1kb2N1bWVudC5yZWFkdGhlZG9jcy5pby9qYS9sYXRlc3QvUHVibGljQVBJLmh0bWwjaWQxMlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gcmV0cmlldmVzIGRhdGEgb24gYWxsIG1hcmtldHMgZm9yIHphaWZcbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIGV4dHJhIHBhcmFtZXRlcnMgc3BlY2lmaWMgdG8gdGhlIGV4Y2hhbmdlIEFQSSBlbmRwb2ludFxuICAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0W119IGFuIGFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIG1hcmtldCBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRDdXJyZW5jeVBhaXJzQWxsIChwYXJhbXMpO1xuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgW1xuICAgICAgICAvLyAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJhdXhfdW5pdF9wb2ludFwiOiAwLFxuICAgICAgICAvLyAgICAgICAgICAgICBcIml0ZW1famFwYW5lc2VcIjogXCJcXHUzMGQzXFx1MzBjM1xcdTMwYzhcXHUzMGIzXFx1MzBhNFxcdTMwZjNcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJhdXhfdW5pdF9zdGVwXCI6IDUuMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlxcdTMwZDNcXHUzMGMzXFx1MzBjOFxcdTMwYjNcXHUzMGE0XFx1MzBmM1xcdTMwZmJcXHU2NWU1XFx1NjcyY1xcdTUxODZcXHUzMDZlXFx1NTNkNlxcdTVmMTVcXHUzMDkyXFx1ODg0Y1xcdTMwNDZcXHUzMDUzXFx1MzA2OFxcdTMwNGNcXHUzMDY3XFx1MzA0ZFxcdTMwN2VcXHUzMDU5XCIsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiaXRlbV91bml0X21pblwiOiAwLjAwMSxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJldmVudF9udW1iZXJcIjogMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJjdXJyZW5jeV9wYWlyXCI6IFwiYnRjX2pweVwiLFxuICAgICAgICAvLyAgICAgICAgICAgICBcImlzX3Rva2VuXCI6IGZhbHNlLFxuICAgICAgICAvLyAgICAgICAgICAgICBcImF1eF91bml0X21pblwiOiA1LjAsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiYXV4X2phcGFuZXNlXCI6IFwiXFx1NjVlNVxcdTY3MmNcXHU1MTg2XCIsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJpdGVtX3VuaXRfc3RlcFwiOiAwLjAwMDEsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwibmFtZVwiOiBcIkJUQy9KUFlcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJzZXFcIjogMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIkJUQy9KUFlcIlxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIF1cbiAgICAgICAgLy9cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VNYXJrZXRzIChtYXJrZXRzKTtcbiAgICB9XG5cbiAgICBwYXJzZU1hcmtldCAobWFya2V0KTogTWFya2V0IHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnNhZmVTdHJpbmcgKG1hcmtldCwgJ2N1cnJlbmN5X3BhaXInKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuc2FmZVN0cmluZyAobWFya2V0LCAnbmFtZScpO1xuICAgICAgICBjb25zdCBbIGJhc2VJZCwgcXVvdGVJZCBdID0gbmFtZS5zcGxpdCAoJy8nKTtcbiAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMuc2FmZUN1cnJlbmN5Q29kZSAoYmFzZUlkKTtcbiAgICAgICAgY29uc3QgcXVvdGUgPSB0aGlzLnNhZmVDdXJyZW5jeUNvZGUgKHF1b3RlSWQpO1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICdzZXR0bGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgJ3F1b3RlSWQnOiBxdW90ZUlkLFxuICAgICAgICAgICAgJ3NldHRsZUlkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3R5cGUnOiAnc3BvdCcsXG4gICAgICAgICAgICAnc3BvdCc6IHRydWUsXG4gICAgICAgICAgICAnbWFyZ2luJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3N3YXAnOiBmYWxzZSxcbiAgICAgICAgICAgICdmdXR1cmUnOiBmYWxzZSxcbiAgICAgICAgICAgICdvcHRpb24nOiBmYWxzZSxcbiAgICAgICAgICAgICdhY3RpdmUnOiB1bmRlZmluZWQsIC8vIGNhbiB0cmFkZSBvciBub3RcbiAgICAgICAgICAgICdjb250cmFjdCc6IGZhbHNlLFxuICAgICAgICAgICAgJ2xpbmVhcic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbnZlcnNlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2NvbnRyYWN0U2l6ZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdleHBpcnknOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZXhwaXJ5RGF0ZXRpbWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc3RyaWtlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wdGlvblR5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncHJlY2lzaW9uJzoge1xuICAgICAgICAgICAgICAgICdhbW91bnQnOiB0aGlzLnNhZmVOdW1iZXIgKG1hcmtldCwgJ2l0ZW1fdW5pdF9zdGVwJyksXG4gICAgICAgICAgICAgICAgJ3ByaWNlJzogdGhpcy5wYXJzZU51bWJlciAodGhpcy5wYXJzZVByZWNpc2lvbiAodGhpcy5zYWZlU3RyaW5nIChtYXJrZXQsICdhdXhfdW5pdF9wb2ludCcpKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2xpbWl0cyc6IHtcbiAgICAgICAgICAgICAgICAnbGV2ZXJhZ2UnOiB7XG4gICAgICAgICAgICAgICAgICAgICdtaW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICdtYXgnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYW1vdW50Jzoge1xuICAgICAgICAgICAgICAgICAgICAnbWluJzogdGhpcy5zYWZlTnVtYmVyIChtYXJrZXQsICdpdGVtX3VuaXRfbWluJyksXG4gICAgICAgICAgICAgICAgICAgICdtYXgnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAncHJpY2UnOiB7XG4gICAgICAgICAgICAgICAgICAgICdtaW4nOiB0aGlzLnNhZmVOdW1iZXIgKG1hcmtldCwgJ2F1eF91bml0X21pbicpLFxuICAgICAgICAgICAgICAgICAgICAnbWF4JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2Nvc3QnOiB7XG4gICAgICAgICAgICAgICAgICAgICdtaW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICdtYXgnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnY3JlYXRlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHBhcnNlQmFsYW5jZSAocmVzcG9uc2UpOiBCYWxhbmNlcyB7XG4gICAgICAgIGNvbnN0IGJhbGFuY2VzID0gdGhpcy5zYWZlVmFsdWUgKHJlc3BvbnNlLCAncmV0dXJuJywge30pO1xuICAgICAgICBjb25zdCBkZXBvc2l0ID0gdGhpcy5zYWZlVmFsdWUgKGJhbGFuY2VzLCAnZGVwb3NpdCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZnVuZHMgPSB0aGlzLnNhZmVWYWx1ZSAoYmFsYW5jZXMsICdmdW5kcycsIHt9KTtcbiAgICAgICAgY29uc3QgY3VycmVuY3lJZHMgPSBPYmplY3Qua2V5cyAoZnVuZHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbmN5SWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW5jeUlkID0gY3VycmVuY3lJZHNbaV07XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gdGhpcy5zYWZlQ3VycmVuY3lDb2RlIChjdXJyZW5jeUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLnNhZmVTdHJpbmcgKGZ1bmRzLCBjdXJyZW5jeUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGFjY291bnQgPSB0aGlzLmFjY291bnQgKCk7XG4gICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBiYWxhbmNlO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IGJhbGFuY2U7XG4gICAgICAgICAgICBpZiAoZGVwb3NpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbmN5SWQgaW4gZGVwb3NpdCkge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zYWZlU3RyaW5nIChkZXBvc2l0LCBjdXJyZW5jeUlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY29kZV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVCYWxhbmNlIChyZXN1bHQpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAocGFyYW1zID0ge30pOiBQcm9taXNlPEJhbGFuY2VzPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjZmV0Y2hCYWxhbmNlXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly96YWlmLWFwaS1kb2N1bWVudC5yZWFkdGhlZG9jcy5pby9qYS9sYXRlc3QvVHJhZGluZ0FQSS5odG1sI2lkMTBcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIHF1ZXJ5IGZvciBiYWxhbmNlIGFuZCBnZXQgdGhlIGFtb3VudCBvZiBmdW5kcyBhdmFpbGFibGUgZm9yIHRyYWRpbmcgb3IgZnVuZHMgbG9ja2VkIGluIG9yZGVyc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IGEgW2JhbGFuY2Ugc3RydWN0dXJlXXtAbGluayBodHRwczovL2RvY3MuY2N4dC5jb20vIy8/aWQ9YmFsYW5jZS1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRJbmZvIChwYXJhbXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUJhbGFuY2UgKHJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAoc3ltYm9sOiBzdHJpbmcsIGxpbWl0OiBJbnQgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KTogUHJvbWlzZTxPcmRlckJvb2s+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaE9yZGVyQm9va1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1B1YmxpY0FQSS5odG1sI2lkMzRcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGZldGNoZXMgaW5mb3JtYXRpb24gb24gb3BlbiBvcmRlcnMgd2l0aCBiaWQgKGJ1eSkgYW5kIGFzayAoc2VsbCkgcHJpY2VzLCB2b2x1bWVzIGFuZCBvdGhlciBkYXRhXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzeW1ib2wgdW5pZmllZCBzeW1ib2wgb2YgdGhlIG1hcmtldCB0byBmZXRjaCB0aGUgb3JkZXIgYm9vayBmb3JcbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtsaW1pdF0gdGhlIG1heGltdW0gYW1vdW50IG9mIG9yZGVyIGJvb2sgZW50cmllcyB0byByZXR1cm5cbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIGV4dHJhIHBhcmFtZXRlcnMgc3BlY2lmaWMgdG8gdGhlIGV4Y2hhbmdlIEFQSSBlbmRwb2ludFxuICAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBBIGRpY3Rpb25hcnkgb2YgW29yZGVyIGJvb2sgc3RydWN0dXJlc117QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPW9yZGVyLWJvb2stc3RydWN0dXJlfSBpbmRleGVkIGJ5IG1hcmtldCBzeW1ib2xzXG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdwYWlyJzogbWFya2V0WydpZCddLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGhQYWlyICh0aGlzLmV4dGVuZCAocmVxdWVzdCwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXJCb29rIChyZXNwb25zZSwgbWFya2V0WydzeW1ib2wnXSk7XG4gICAgfVxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQpOiBUaWNrZXIge1xuICAgICAgICAvL1xuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBcImxhc3RcIjogOWUtMDgsXG4gICAgICAgIC8vICAgICBcImhpZ2hcIjogMWUtMDcsXG4gICAgICAgIC8vICAgICBcImxvd1wiOiA5ZS0wOCxcbiAgICAgICAgLy8gICAgIFwidndhcFwiOiAwLjAsXG4gICAgICAgIC8vICAgICBcInZvbHVtZVwiOiAxMzUyNTAuMCxcbiAgICAgICAgLy8gICAgIFwiYmlkXCI6IDllLTA4LFxuICAgICAgICAvLyAgICAgXCJhc2tcIjogMWUtMDdcbiAgICAgICAgLy8gfVxuICAgICAgICAvL1xuICAgICAgICBjb25zdCBzeW1ib2wgPSB0aGlzLnNhZmVTeW1ib2wgKHVuZGVmaW5lZCwgbWFya2V0KTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGNvbnN0IHZ3YXAgPSB0aGlzLnNhZmVTdHJpbmcgKHRpY2tlciwgJ3Z3YXAnKTtcbiAgICAgICAgY29uc3QgYmFzZVZvbHVtZSA9IHRoaXMuc2FmZVN0cmluZyAodGlja2VyLCAndm9sdW1lJyk7XG4gICAgICAgIGNvbnN0IHF1b3RlVm9sdW1lID0gUHJlY2lzZS5zdHJpbmdNdWwgKGJhc2VWb2x1bWUsIHZ3YXApO1xuICAgICAgICBjb25zdCBsYXN0ID0gdGhpcy5zYWZlU3RyaW5nICh0aWNrZXIsICdsYXN0Jyk7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB0aGlzLnNhZmVTdHJpbmcgKHRpY2tlciwgJ2hpZ2gnKSxcbiAgICAgICAgICAgICdsb3cnOiB0aGlzLnNhZmVTdHJpbmcgKHRpY2tlciwgJ2xvdycpLFxuICAgICAgICAgICAgJ2JpZCc6IHRoaXMuc2FmZVN0cmluZyAodGlja2VyLCAnYmlkJyksXG4gICAgICAgICAgICAnYmlkVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Fzayc6IHRoaXMuc2FmZVN0cmluZyAodGlja2VyLCAnYXNrJyksXG4gICAgICAgICAgICAnYXNrVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Z3YXAnOiB2d2FwLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiBsYXN0LFxuICAgICAgICAgICAgJ2xhc3QnOiBsYXN0LFxuICAgICAgICAgICAgJ3ByZXZpb3VzQ2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogYmFzZVZvbHVtZSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHF1b3RlVm9sdW1lLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH0sIG1hcmtldCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKHN5bWJvbDogc3RyaW5nLCBwYXJhbXMgPSB7fSk6IFByb21pc2U8VGlja2VyPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjZmV0Y2hUaWNrZXJcbiAgICAgICAgICogQHNlZSBodHRwczovL3phaWYtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9QdWJsaWNBUEkuaHRtbCNpZDIyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBmZXRjaGVzIGEgcHJpY2UgdGlja2VyLCBhIHN0YXRpc3RpY2FsIGNhbGN1bGF0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGNhbGN1bGF0ZWQgb3ZlciB0aGUgcGFzdCAyNCBob3VycyBmb3IgYSBzcGVjaWZpYyBtYXJrZXRcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbCB1bmlmaWVkIHN5bWJvbCBvZiB0aGUgbWFya2V0IHRvIGZldGNoIHRoZSB0aWNrZXIgZm9yXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH0gYSBbdGlja2VyIHN0cnVjdHVyZV17QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPXRpY2tlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdwYWlyJzogbWFya2V0WydpZCddLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlclBhaXIgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgICAgXCJsYXN0XCI6IDllLTA4LFxuICAgICAgICAvLyAgICAgXCJoaWdoXCI6IDFlLTA3LFxuICAgICAgICAvLyAgICAgXCJsb3dcIjogOWUtMDgsXG4gICAgICAgIC8vICAgICBcInZ3YXBcIjogMC4wLFxuICAgICAgICAvLyAgICAgXCJ2b2x1bWVcIjogMTM1MjUwLjAsXG4gICAgICAgIC8vICAgICBcImJpZFwiOiA5ZS0wOCxcbiAgICAgICAgLy8gICAgIFwiYXNrXCI6IDFlLTA3XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICB9XG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQpOiBUcmFkZSB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIGZldGNoVHJhZGVzIChwdWJsaWMpXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICAge1xuICAgICAgICAvLyAgICAgICAgICBcImRhdGVcIjogMTY0ODU1OTQxNCxcbiAgICAgICAgLy8gICAgICAgICAgXCJwcmljZVwiOiA1ODgwMzc1LjAsXG4gICAgICAgIC8vICAgICAgICAgIFwiYW1vdW50XCI6IDAuMDE3LFxuICAgICAgICAvLyAgICAgICAgICBcInRpZFwiOiAxNzYxMjY1NTcsXG4gICAgICAgIC8vICAgICAgICAgIFwiY3VycmVuY3lfcGFpclwiOiBcImJ0Y19qcHlcIixcbiAgICAgICAgLy8gICAgICAgICAgXCJ0cmFkZV90eXBlXCI6IFwiYXNrXCJcbiAgICAgICAgLy8gICAgICB9XG4gICAgICAgIC8vXG4gICAgICAgIGxldCBzaWRlID0gdGhpcy5zYWZlU3RyaW5nICh0cmFkZSwgJ3RyYWRlX3R5cGUnKTtcbiAgICAgICAgc2lkZSA9IChzaWRlID09PSAnYmlkJykgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5zYWZlVGltZXN0YW1wICh0cmFkZSwgJ2RhdGUnKTtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnNhZmVTdHJpbmcyICh0cmFkZSwgJ2lkJywgJ3RpZCcpO1xuICAgICAgICBjb25zdCBwcmljZVN0cmluZyA9IHRoaXMuc2FmZVN0cmluZyAodHJhZGUsICdwcmljZScpO1xuICAgICAgICBjb25zdCBhbW91bnRTdHJpbmcgPSB0aGlzLnNhZmVTdHJpbmcgKHRyYWRlLCAnYW1vdW50Jyk7XG4gICAgICAgIGNvbnN0IG1hcmtldElkID0gdGhpcy5zYWZlU3RyaW5nICh0cmFkZSwgJ2N1cnJlbmN5X3BhaXInKTtcbiAgICAgICAgY29uc3Qgc3ltYm9sID0gdGhpcy5zYWZlU3ltYm9sIChtYXJrZXRJZCwgbWFya2V0LCAnXycpO1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlVHJhZGUgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgJ2luZm8nOiB0cmFkZSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ3R5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUsXG4gICAgICAgICAgICAnb3JkZXInOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGFrZXJPck1ha2VyJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2VTdHJpbmcsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50U3RyaW5nLFxuICAgICAgICAgICAgJ2Nvc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmVlJzogdW5kZWZpbmVkLFxuICAgICAgICB9LCBtYXJrZXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChzeW1ib2w6IHN0cmluZywgc2luY2U6IEludCA9IHVuZGVmaW5lZCwgbGltaXQ6IEludCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pOiBQcm9taXNlPFRyYWRlW10+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaFRyYWRlc1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1B1YmxpY0FQSS5odG1sI2lkMjhcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGdldCB0aGUgbGlzdCBvZiBtb3N0IHJlY2VudCB0cmFkZXMgZm9yIGEgcGFydGljdWxhciBzeW1ib2xcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbCB1bmlmaWVkIHN5bWJvbCBvZiB0aGUgbWFya2V0IHRvIGZldGNoIHRyYWRlcyBmb3JcbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtzaW5jZV0gdGltZXN0YW1wIGluIG1zIG9mIHRoZSBlYXJsaWVzdCB0cmFkZSB0byBmZXRjaFxuICAgICAgICAgKiBAcGFyYW0ge2ludH0gW2xpbWl0XSB0aGUgbWF4aW11bSBhbW91bnQgb2YgdHJhZGVzIHRvIGZldGNoXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge1RyYWRlW119IGEgbGlzdCBvZiBbdHJhZGUgc3RydWN0dXJlc117QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPXB1YmxpYy10cmFkZXN9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdwYWlyJzogbWFya2V0WydpZCddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYWRlc1BhaXIgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBbXG4gICAgICAgIC8vICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwiZGF0ZVwiOiAxNjQ4NTU5NDE0LFxuICAgICAgICAvLyAgICAgICAgICAgICAgXCJwcmljZVwiOiA1ODgwMzc1LjAsXG4gICAgICAgIC8vICAgICAgICAgICAgICBcImFtb3VudFwiOiAwLjAxNyxcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwidGlkXCI6IDE3NjEyNjU1NyxcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwiY3VycmVuY3lfcGFpclwiOiBcImJ0Y19qcHlcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwidHJhZGVfdHlwZVwiOiBcImFza1wiXG4gICAgICAgIC8vICAgICAgICAgIH0sIC4uLlxuICAgICAgICAvLyAgICAgIF1cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgbnVtVHJhZGVzID0gcmVzcG9uc2UubGVuZ3RoO1xuICAgICAgICBpZiAobnVtVHJhZGVzID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFRyYWRlID0gcmVzcG9uc2VbMF07XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzIChmaXJzdFRyYWRlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzIChyZXNwb25zZSwgbWFya2V0LCBzaW5jZSwgbGltaXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChzeW1ib2w6IHN0cmluZywgdHlwZTogT3JkZXJUeXBlLCBzaWRlOiBPcmRlclNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjY3JlYXRlT3JkZXJcbiAgICAgICAgICogQHNlZSBodHRwczovL3phaWYtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9NYXJnaW5UcmFkaW5nQVBJLmh0bWwjaWQyM1xuICAgICAgICAgKiBAZGVzY3JpcHRpb24gY3JlYXRlIGEgdHJhZGUgb3JkZXJcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbCB1bmlmaWVkIHN5bWJvbCBvZiB0aGUgbWFya2V0IHRvIGNyZWF0ZSBhbiBvcmRlciBpblxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBtdXN0IGJlICdsaW1pdCdcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZGUgJ2J1eScgb3IgJ3NlbGwnXG4gICAgICAgICAqIEBwYXJhbSB7ZmxvYXR9IGFtb3VudCBob3cgbXVjaCBvZiBjdXJyZW5jeSB5b3Ugd2FudCB0byB0cmFkZSBpbiB1bml0cyBvZiBiYXNlIGN1cnJlbmN5XG4gICAgICAgICAqIEBwYXJhbSB7ZmxvYXR9IFtwcmljZV0gdGhlIHByaWNlIGF0IHdoaWNoIHRoZSBvcmRlciBpcyB0byBiZSBmdWxsZmlsbGVkLCBpbiB1bml0cyBvZiB0aGUgcXVvdGUgY3VycmVuY3ksIGlnbm9yZWQgaW4gbWFya2V0IG9yZGVyc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IGFuIFtvcmRlciBzdHJ1Y3R1cmVde0BsaW5rIGh0dHBzOi8vZG9jcy5jY3h0LmNvbS8jLz9pZD1vcmRlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSAhPT0gJ2xpbWl0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGNyZWF0ZU9yZGVyKCkgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWFya2V0ID0gdGhpcy5tYXJrZXQgKHN5bWJvbCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICAnY3VycmVuY3lfcGFpcic6IG1hcmtldFsnaWQnXSxcbiAgICAgICAgICAgICdhY3Rpb24nOiAoc2lkZSA9PT0gJ2J1eScpID8gJ2JpZCcgOiAnYXNrJyxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VHJhZGUgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FmZU9yZGVyICh7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3JldHVybiddWydvcmRlcl9pZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9LCBtYXJrZXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZDogc3RyaW5nLCBzeW1ib2w6IFN0ciA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNjYW5jZWxPcmRlclxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1RyYWRpbmdBUEkuaHRtbCNpZDM3XG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBjYW5jZWxzIGFuIG9wZW4gb3JkZXJcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIG9yZGVyIGlkXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzeW1ib2wgbm90IHVzZWQgYnkgemFpZiBjYW5jZWxPcmRlciAoKVxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IEFuIFtvcmRlciBzdHJ1Y3R1cmVde0BsaW5rIGh0dHBzOi8vZG9jcy5jY3h0LmNvbS8jLz9pZD1vcmRlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICB9XG5cbiAgICBwYXJzZU9yZGVyIChvcmRlciwgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQpOiBPcmRlciB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB7XG4gICAgICAgIC8vICAgICAgICAgXCJjdXJyZW5jeV9wYWlyXCI6IFwiYnRjX2pweVwiLFxuICAgICAgICAvLyAgICAgICAgIFwiYWN0aW9uXCI6IFwiYXNrXCIsXG4gICAgICAgIC8vICAgICAgICAgXCJhbW91bnRcIjogMC4wMyxcbiAgICAgICAgLy8gICAgICAgICBcInByaWNlXCI6IDU2MDAwLFxuICAgICAgICAvLyAgICAgICAgIFwidGltZXN0YW1wXCI6IDE0MDIwMjExMjUsXG4gICAgICAgIC8vICAgICAgICAgXCJjb21tZW50XCIgOiBcImRlbW9cIlxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvL1xuICAgICAgICBsZXQgc2lkZSA9IHRoaXMuc2FmZVN0cmluZyAob3JkZXIsICdhY3Rpb24nKTtcbiAgICAgICAgc2lkZSA9IChzaWRlID09PSAnYmlkJykgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5zYWZlVGltZXN0YW1wIChvcmRlciwgJ3RpbWVzdGFtcCcpO1xuICAgICAgICBjb25zdCBtYXJrZXRJZCA9IHRoaXMuc2FmZVN0cmluZyAob3JkZXIsICdjdXJyZW5jeV9wYWlyJyk7XG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IHRoaXMuc2FmZVN5bWJvbCAobWFya2V0SWQsIG1hcmtldCwgJ18nKTtcbiAgICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLnNhZmVTdHJpbmcgKG9yZGVyLCAncHJpY2UnKTtcbiAgICAgICAgY29uc3QgYW1vdW50ID0gdGhpcy5zYWZlU3RyaW5nIChvcmRlciwgJ2Ftb3VudCcpO1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuc2FmZVN0cmluZyAob3JkZXIsICdpZCcpO1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlT3JkZXIgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgJ2NsaWVudE9yZGVySWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2xhc3RUcmFkZVRpbWVzdGFtcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzdGF0dXMnOiAnb3BlbicsXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ3R5cGUnOiAnbGltaXQnLFxuICAgICAgICAgICAgJ3RpbWVJbkZvcmNlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Bvc3RPbmx5JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnc3RvcFByaWNlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3RyaWdnZXJQcmljZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjb3N0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdmaWxsZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncmVtYWluaW5nJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3RyYWRlcyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnaW5mbyc6IG9yZGVyLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgIH0sIG1hcmtldCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZmV0Y2hPcGVuT3JkZXJzIChzeW1ib2w6IFN0ciA9IHVuZGVmaW5lZCwgc2luY2U6IEludCA9IHVuZGVmaW5lZCwgbGltaXQ6IEludCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pOiBQcm9taXNlPE9yZGVyW10+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaE9wZW5PcmRlcnNcbiAgICAgICAgICogQHNlZSBodHRwczovL3phaWYtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9NYXJnaW5UcmFkaW5nQVBJLmh0bWwjaWQyOFxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gZmV0Y2ggYWxsIHVuZmlsbGVkIGN1cnJlbnRseSBvcGVuIG9yZGVyc1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sIHVuaWZpZWQgbWFya2V0IHN5bWJvbFxuICAgICAgICAgKiBAcGFyYW0ge2ludH0gW3NpbmNlXSB0aGUgZWFybGllc3QgdGltZSBpbiBtcyB0byBmZXRjaCBvcGVuIG9yZGVycyBmb3JcbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtsaW1pdF0gdGhlIG1heGltdW0gbnVtYmVyIG9mICBvcGVuIG9yZGVycyBzdHJ1Y3R1cmVzIHRvIHJldHJpZXZlXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge09yZGVyW119IGEgbGlzdCBvZiBbb3JkZXIgc3RydWN0dXJlc117QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPW9yZGVyLXN0cnVjdHVyZX1cbiAgICAgICAgICovXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtYXJrZXQ6IE1hcmtldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgIC8vICdpc190b2tlbic6IGZhbHNlLFxuICAgICAgICAgICAgLy8gJ2lzX3Rva2VuX2JvdGgnOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHN5bWJvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgICAgIHJlcXVlc3RbJ2N1cnJlbmN5X3BhaXInXSA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RBY3RpdmVPcmRlcnMgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcmRlcnMgKHJlc3BvbnNlWydyZXR1cm4nXSwgbWFya2V0LCBzaW5jZSwgbGltaXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoQ2xvc2VkT3JkZXJzIChzeW1ib2w6IFN0ciA9IHVuZGVmaW5lZCwgc2luY2U6IEludCA9IHVuZGVmaW5lZCwgbGltaXQ6IEludCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pOiBQcm9taXNlPE9yZGVyW10+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaENsb3NlZE9yZGVyc1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1RyYWRpbmdBUEkuaHRtbCNpZDI0XG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBmZXRjaGVzIGluZm9ybWF0aW9uIG9uIG11bHRpcGxlIGNsb3NlZCBvcmRlcnMgbWFkZSBieSB0aGUgdXNlclxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sIHVuaWZpZWQgbWFya2V0IHN5bWJvbCBvZiB0aGUgbWFya2V0IG9yZGVycyB3ZXJlIG1hZGUgaW5cbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtzaW5jZV0gdGhlIGVhcmxpZXN0IHRpbWUgaW4gbXMgdG8gZmV0Y2ggb3JkZXJzIGZvclxuICAgICAgICAgKiBAcGFyYW0ge2ludH0gW2xpbWl0XSB0aGUgbWF4aW11bSBudW1iZXIgb2YgIG9yZGUgc3RydWN0dXJlcyB0byByZXRyaWV2ZVxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtPcmRlcltdfSBhIGxpc3Qgb2YgW29yZGVyIHN0cnVjdHVyZXNde0BsaW5rIGh0dHBzOi8vZG9jcy5jY3h0LmNvbS8jLz9pZD1vcmRlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICAvLyAnZnJvbSc6IDAsXG4gICAgICAgICAgICAvLyAnY291bnQnOiAxMDAwLFxuICAgICAgICAgICAgLy8gJ2Zyb21faWQnOiAwLFxuICAgICAgICAgICAgLy8gJ2VuZF9pZCc6IDEwMDAsXG4gICAgICAgICAgICAvLyAnb3JkZXInOiAnREVTQycsXG4gICAgICAgICAgICAvLyAnc2luY2UnOiAxNTAzODIxMDUxLFxuICAgICAgICAgICAgLy8gJ2VuZCc6IDE1MDM4MjEwNTEsXG4gICAgICAgICAgICAvLyAnaXNfdG9rZW4nOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHN5bWJvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgICAgIHJlcXVlc3RbJ2N1cnJlbmN5X3BhaXInXSA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZUhpc3RvcnkgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcmRlcnMgKHJlc3BvbnNlWydyZXR1cm4nXSwgbWFya2V0LCBzaW5jZSwgbGltaXQpO1xuICAgIH1cblxuICAgIGFzeW5jIHdpdGhkcmF3IChjb2RlOiBzdHJpbmcsIGFtb3VudCwgYWRkcmVzcywgdGFnID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQG1ldGhvZFxuICAgICAgICAgKiBAbmFtZSB6YWlmI3dpdGhkcmF3XG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly96YWlmLWFwaS1kb2N1bWVudC5yZWFkdGhlZG9jcy5pby9qYS9sYXRlc3QvVHJhZGluZ0FQSS5odG1sI2lkNDFcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIG1ha2UgYSB3aXRoZHJhd2FsXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIHVuaWZpZWQgY3VycmVuY3kgY29kZVxuICAgICAgICAgKiBAcGFyYW0ge2Zsb2F0fSBhbW91bnQgdGhlIGFtb3VudCB0byB3aXRoZHJhd1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyB0aGUgYWRkcmVzcyB0byB3aXRoZHJhdyB0b1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH0gYSBbdHJhbnNhY3Rpb24gc3RydWN0dXJlXXtAbGluayBodHRwczovL2RvY3MuY2N4dC5jb20vIy8/aWQ9dHJhbnNhY3Rpb24tc3RydWN0dXJlfVxuICAgICAgICAgKi9cbiAgICAgICAgWyB0YWcsIHBhcmFtcyBdID0gdGhpcy5oYW5kbGVXaXRoZHJhd1RhZ0FuZFBhcmFtcyAodGFnLCBwYXJhbXMpO1xuICAgICAgICB0aGlzLmNoZWNrQWRkcmVzcyAoYWRkcmVzcyk7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jeSAoY29kZSk7XG4gICAgICAgIGlmIChjb2RlID09PSAnSlBZJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIHdpdGhkcmF3KCkgZG9lcyBub3QgYWxsb3cgJyArIGNvZGUgKyAnIHdpdGhkcmF3YWxzJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IGN1cnJlbmN5WydpZCddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdhZGRyZXNzJzogYWRkcmVzcyxcbiAgICAgICAgICAgIC8vICdtZXNzYWdlJzogJ0hpIScsIC8vIFhFTSBhbmQgb3RoZXJzXG4gICAgICAgICAgICAvLyAnb3B0X2ZlZSc6IDAuMDAzLCAvLyBCVEMgYW5kIE1PTkEgb25seVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3RbJ21lc3NhZ2UnXSA9IHRhZztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0V2l0aGRyYXcgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIHtcbiAgICAgICAgLy8gICAgICAgICBcInN1Y2Nlc3NcIjogMSxcbiAgICAgICAgLy8gICAgICAgICBcInJldHVyblwiOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIFwiaWRcIjogMjM2MzQsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiZmVlXCI6IDAuMDAxLFxuICAgICAgICAvLyAgICAgICAgICAgICBcInR4aWRcIjosXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiZnVuZHNcIjoge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgXCJqcHlcIjogMTUzMjAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBcImJ0Y1wiOiAxLjM5MixcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwieGVtXCI6IDEwMC4yLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgXCJtb25hXCI6IDI2MDBcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgcmV0dXJuRGF0YSA9IHRoaXMuc2FmZVZhbHVlIChyZXN1bHQsICdyZXR1cm4nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUcmFuc2FjdGlvbiAocmV0dXJuRGF0YSwgY3VycmVuY3kpO1xuICAgIH1cblxuICAgIHBhcnNlVHJhbnNhY3Rpb24gKHRyYW5zYWN0aW9uLCBjdXJyZW5jeTogQ3VycmVuY3kgPSB1bmRlZmluZWQpOiBUcmFuc2FjdGlvbiB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB7XG4gICAgICAgIC8vICAgICAgICAgXCJpZFwiOiAyMzYzNCxcbiAgICAgICAgLy8gICAgICAgICBcImZlZVwiOiAwLjAwMSxcbiAgICAgICAgLy8gICAgICAgICBcInR4aWRcIjosXG4gICAgICAgIC8vICAgICAgICAgXCJmdW5kc1wiOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIFwianB5XCI6IDE1MzIwLFxuICAgICAgICAvLyAgICAgICAgICAgICBcImJ0Y1wiOiAxLjM5MixcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJ4ZW1cIjogMTAwLjIsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwibW9uYVwiOiAyNjAwXG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvL1xuICAgICAgICBjdXJyZW5jeSA9IHRoaXMuc2FmZUN1cnJlbmN5ICh1bmRlZmluZWQsIGN1cnJlbmN5KTtcbiAgICAgICAgbGV0IGZlZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmVlQ29zdCA9IHRoaXMuc2FmZVZhbHVlICh0cmFuc2FjdGlvbiwgJ2ZlZScpO1xuICAgICAgICBpZiAoZmVlQ29zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmZWUgPSB7XG4gICAgICAgICAgICAgICAgJ2Nvc3QnOiBmZWVDb3N0LFxuICAgICAgICAgICAgICAgICdjdXJyZW5jeSc6IGN1cnJlbmN5Wydjb2RlJ10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLnNhZmVTdHJpbmcgKHRyYW5zYWN0aW9uLCAnaWQnKSxcbiAgICAgICAgICAgICd0eGlkJzogdGhpcy5zYWZlU3RyaW5nICh0cmFuc2FjdGlvbiwgJ3R4aWQnKSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbmV0d29yayc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhZGRyZXNzRnJvbSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhZGRyZXNzJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2FkZHJlc3NUbyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhbW91bnQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IGN1cnJlbmN5Wydjb2RlJ10sXG4gICAgICAgICAgICAnc3RhdHVzJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3VwZGF0ZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGFnRnJvbSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICd0YWcnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGFnVG8nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY29tbWVudCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbnRlcm5hbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmZWUnOiBmZWUsXG4gICAgICAgICAgICAnaW5mbyc6IHRyYW5zYWN0aW9uLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGN1c3RvbU5vbmNlICgpIHtcbiAgICAgICAgY29uc3QgbnVtID0gKHRoaXMubWlsbGlzZWNvbmRzICgpIC8gMTAwMCkudG9TdHJpbmcgKCk7XG4gICAgICAgIGNvbnN0IG5vbmNlID0gcGFyc2VGbG9hdCAobnVtKTtcbiAgICAgICAgcmV0dXJuIG5vbmNlLnRvRml4ZWQgKDgpO1xuICAgIH1cblxuICAgIHNpZ24gKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bJ3Jlc3QnXSArICcvJztcbiAgICAgICAgaWYgKGFwaSA9PT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAnYXBpLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpID09PSAnZmFwaScpIHtcbiAgICAgICAgICAgIHVybCArPSAnZmFwaS8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQ3JlZGVudGlhbHMgKCk7XG4gICAgICAgICAgICBpZiAoYXBpID09PSAnZWNhcGknKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICdlY2FwaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFwaSA9PT0gJ3RsYXBpJykge1xuICAgICAgICAgICAgICAgIHVybCArPSAndGxhcGknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJ3RhcGknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9uY2UgPSB0aGlzLmN1c3RvbU5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgc2hhNTEyKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgJ3VybCc6IHVybCwgJ21ldGhvZCc6IG1ldGhvZCwgJ2JvZHknOiBib2R5LCAnaGVhZGVycyc6IGhlYWRlcnMgfTtcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvcnMgKGh0dHBDb2RlLCByZWFzb24sIHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5LCByZXNwb25zZSwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3RCb2R5KSB7XG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB7XCJlcnJvclwiOiBcInVuc3VwcG9ydGVkIGN1cnJlbmN5X3BhaXJcIn1cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgZmVlZGJhY2sgPSB0aGlzLmlkICsgJyAnICsgYm9keTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLnNhZmVTdHJpbmcgKHJlc3BvbnNlLCAnZXJyb3InKTtcbiAgICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGhyb3dFeGFjdGx5TWF0Y2hlZEV4Y2VwdGlvbiAodGhpcy5leGNlcHRpb25zWydleGFjdCddLCBlcnJvciwgZmVlZGJhY2spO1xuICAgICAgICAgICAgdGhpcy50aHJvd0Jyb2FkbHlNYXRjaGVkRXhjZXB0aW9uICh0aGlzLmV4Y2VwdGlvbnNbJ2Jyb2FkJ10sIGVycm9yLCBmZWVkYmFjayk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAoZmVlZGJhY2spOyAvLyB1bmtub3duIG1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5zYWZlVmFsdWUgKHJlc3BvbnNlLCAnc3VjY2VzcycsIHRydWUpO1xuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yIChmZWVkYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iXX0=
290909
-
290910
291021
  /***/ })
290911
291022
 
290912
291023
  /******/ });
@@ -291015,212 +291126,212 @@ __webpack_require__.r(__webpack_exports__);
291015
291126
  /* harmony export */ Precise: () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_155__.O),
291016
291127
  /* harmony export */ RateLimitExceeded: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.RateLimitExceeded),
291017
291128
  /* harmony export */ RequestTimeout: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.RequestTimeout),
291018
- /* harmony export */ ace: () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_2__.Z),
291019
- /* harmony export */ alpaca: () => (/* reexport safe */ _src_alpaca_js__WEBPACK_IMPORTED_MODULE_3__.Z),
291020
- /* harmony export */ ascendex: () => (/* reexport safe */ _src_ascendex_js__WEBPACK_IMPORTED_MODULE_4__.Z),
291021
- /* harmony export */ bequant: () => (/* reexport safe */ _src_bequant_js__WEBPACK_IMPORTED_MODULE_5__.Z),
291022
- /* harmony export */ bigone: () => (/* reexport safe */ _src_bigone_js__WEBPACK_IMPORTED_MODULE_6__.Z),
291023
- /* harmony export */ binance: () => (/* reexport safe */ _src_binance_js__WEBPACK_IMPORTED_MODULE_7__.Z),
291024
- /* harmony export */ binancecoinm: () => (/* reexport safe */ _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_8__.Z),
291025
- /* harmony export */ binanceus: () => (/* reexport safe */ _src_binanceus_js__WEBPACK_IMPORTED_MODULE_9__.Z),
291026
- /* harmony export */ binanceusdm: () => (/* reexport safe */ _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_10__.Z),
291027
- /* harmony export */ bingx: () => (/* reexport safe */ _src_bingx_js__WEBPACK_IMPORTED_MODULE_11__.Z),
291028
- /* harmony export */ bit2c: () => (/* reexport safe */ _src_bit2c_js__WEBPACK_IMPORTED_MODULE_12__.Z),
291029
- /* harmony export */ bitbank: () => (/* reexport safe */ _src_bitbank_js__WEBPACK_IMPORTED_MODULE_13__.Z),
291030
- /* harmony export */ bitbay: () => (/* reexport safe */ _src_bitbay_js__WEBPACK_IMPORTED_MODULE_14__.Z),
291031
- /* harmony export */ bitbns: () => (/* reexport safe */ _src_bitbns_js__WEBPACK_IMPORTED_MODULE_15__.Z),
291032
- /* harmony export */ bitcoincom: () => (/* reexport safe */ _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_16__.Z),
291033
- /* harmony export */ bitfinex: () => (/* reexport safe */ _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_17__.Z),
291034
- /* harmony export */ bitfinex2: () => (/* reexport safe */ _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_18__.Z),
291035
- /* harmony export */ bitflyer: () => (/* reexport safe */ _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_19__.Z),
291036
- /* harmony export */ bitforex: () => (/* reexport safe */ _src_bitforex_js__WEBPACK_IMPORTED_MODULE_20__.Z),
291037
- /* harmony export */ bitget: () => (/* reexport safe */ _src_bitget_js__WEBPACK_IMPORTED_MODULE_21__.Z),
291038
- /* harmony export */ bithumb: () => (/* reexport safe */ _src_bithumb_js__WEBPACK_IMPORTED_MODULE_22__.Z),
291039
- /* harmony export */ bitmart: () => (/* reexport safe */ _src_bitmart_js__WEBPACK_IMPORTED_MODULE_23__.Z),
291040
- /* harmony export */ bitmex: () => (/* reexport safe */ _src_bitmex_js__WEBPACK_IMPORTED_MODULE_24__.Z),
291041
- /* harmony export */ bitopro: () => (/* reexport safe */ _src_bitopro_js__WEBPACK_IMPORTED_MODULE_25__.Z),
291042
- /* harmony export */ bitpanda: () => (/* reexport safe */ _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_26__.Z),
291043
- /* harmony export */ bitrue: () => (/* reexport safe */ _src_bitrue_js__WEBPACK_IMPORTED_MODULE_27__.Z),
291044
- /* harmony export */ bitso: () => (/* reexport safe */ _src_bitso_js__WEBPACK_IMPORTED_MODULE_28__.Z),
291045
- /* harmony export */ bitstamp: () => (/* reexport safe */ _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_29__.Z),
291046
- /* harmony export */ bitteam: () => (/* reexport safe */ _src_bitteam_js__WEBPACK_IMPORTED_MODULE_30__.Z),
291047
- /* harmony export */ bitvavo: () => (/* reexport safe */ _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_31__.Z),
291048
- /* harmony export */ bl3p: () => (/* reexport safe */ _src_bl3p_js__WEBPACK_IMPORTED_MODULE_32__.Z),
291049
- /* harmony export */ blockchaincom: () => (/* reexport safe */ _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_33__.Z),
291050
- /* harmony export */ btcalpha: () => (/* reexport safe */ _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_34__.Z),
291051
- /* harmony export */ btcbox: () => (/* reexport safe */ _src_btcbox_js__WEBPACK_IMPORTED_MODULE_35__.Z),
291052
- /* harmony export */ btcmarkets: () => (/* reexport safe */ _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_36__.Z),
291053
- /* harmony export */ btcturk: () => (/* reexport safe */ _src_btcturk_js__WEBPACK_IMPORTED_MODULE_37__.Z),
291054
- /* harmony export */ bybit: () => (/* reexport safe */ _src_bybit_js__WEBPACK_IMPORTED_MODULE_38__.Z),
291055
- /* harmony export */ cex: () => (/* reexport safe */ _src_cex_js__WEBPACK_IMPORTED_MODULE_39__.Z),
291056
- /* harmony export */ coinbase: () => (/* reexport safe */ _src_coinbase_js__WEBPACK_IMPORTED_MODULE_40__.Z),
291057
- /* harmony export */ coinbasepro: () => (/* reexport safe */ _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_41__.Z),
291058
- /* harmony export */ coincheck: () => (/* reexport safe */ _src_coincheck_js__WEBPACK_IMPORTED_MODULE_42__.Z),
291059
- /* harmony export */ coinex: () => (/* reexport safe */ _src_coinex_js__WEBPACK_IMPORTED_MODULE_43__.Z),
291060
- /* harmony export */ coinlist: () => (/* reexport safe */ _src_coinlist_js__WEBPACK_IMPORTED_MODULE_44__.Z),
291061
- /* harmony export */ coinmate: () => (/* reexport safe */ _src_coinmate_js__WEBPACK_IMPORTED_MODULE_45__.Z),
291062
- /* harmony export */ coinone: () => (/* reexport safe */ _src_coinone_js__WEBPACK_IMPORTED_MODULE_46__.Z),
291063
- /* harmony export */ coinsph: () => (/* reexport safe */ _src_coinsph_js__WEBPACK_IMPORTED_MODULE_47__.Z),
291064
- /* harmony export */ coinspot: () => (/* reexport safe */ _src_coinspot_js__WEBPACK_IMPORTED_MODULE_48__.Z),
291065
- /* harmony export */ cryptocom: () => (/* reexport safe */ _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_49__.Z),
291066
- /* harmony export */ currencycom: () => (/* reexport safe */ _src_currencycom_js__WEBPACK_IMPORTED_MODULE_50__.Z),
291129
+ /* harmony export */ ace: () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_1__.Z),
291130
+ /* harmony export */ alpaca: () => (/* reexport safe */ _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__.Z),
291131
+ /* harmony export */ ascendex: () => (/* reexport safe */ _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__.Z),
291132
+ /* harmony export */ bequant: () => (/* reexport safe */ _src_bequant_js__WEBPACK_IMPORTED_MODULE_4__.Z),
291133
+ /* harmony export */ bigone: () => (/* reexport safe */ _src_bigone_js__WEBPACK_IMPORTED_MODULE_5__.Z),
291134
+ /* harmony export */ binance: () => (/* reexport safe */ _src_binance_js__WEBPACK_IMPORTED_MODULE_6__.Z),
291135
+ /* harmony export */ binancecoinm: () => (/* reexport safe */ _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_7__.Z),
291136
+ /* harmony export */ binanceus: () => (/* reexport safe */ _src_binanceus_js__WEBPACK_IMPORTED_MODULE_8__.Z),
291137
+ /* harmony export */ binanceusdm: () => (/* reexport safe */ _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_9__.Z),
291138
+ /* harmony export */ bingx: () => (/* reexport safe */ _src_bingx_js__WEBPACK_IMPORTED_MODULE_10__.Z),
291139
+ /* harmony export */ bit2c: () => (/* reexport safe */ _src_bit2c_js__WEBPACK_IMPORTED_MODULE_11__.Z),
291140
+ /* harmony export */ bitbank: () => (/* reexport safe */ _src_bitbank_js__WEBPACK_IMPORTED_MODULE_12__.Z),
291141
+ /* harmony export */ bitbay: () => (/* reexport safe */ _src_bitbay_js__WEBPACK_IMPORTED_MODULE_13__.Z),
291142
+ /* harmony export */ bitbns: () => (/* reexport safe */ _src_bitbns_js__WEBPACK_IMPORTED_MODULE_14__.Z),
291143
+ /* harmony export */ bitcoincom: () => (/* reexport safe */ _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_15__.Z),
291144
+ /* harmony export */ bitfinex: () => (/* reexport safe */ _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_16__.Z),
291145
+ /* harmony export */ bitfinex2: () => (/* reexport safe */ _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_17__.Z),
291146
+ /* harmony export */ bitflyer: () => (/* reexport safe */ _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_18__.Z),
291147
+ /* harmony export */ bitforex: () => (/* reexport safe */ _src_bitforex_js__WEBPACK_IMPORTED_MODULE_19__.Z),
291148
+ /* harmony export */ bitget: () => (/* reexport safe */ _src_bitget_js__WEBPACK_IMPORTED_MODULE_20__.Z),
291149
+ /* harmony export */ bithumb: () => (/* reexport safe */ _src_bithumb_js__WEBPACK_IMPORTED_MODULE_21__.Z),
291150
+ /* harmony export */ bitmart: () => (/* reexport safe */ _src_bitmart_js__WEBPACK_IMPORTED_MODULE_22__.Z),
291151
+ /* harmony export */ bitmex: () => (/* reexport safe */ _src_bitmex_js__WEBPACK_IMPORTED_MODULE_23__.Z),
291152
+ /* harmony export */ bitopro: () => (/* reexport safe */ _src_bitopro_js__WEBPACK_IMPORTED_MODULE_24__.Z),
291153
+ /* harmony export */ bitpanda: () => (/* reexport safe */ _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_25__.Z),
291154
+ /* harmony export */ bitrue: () => (/* reexport safe */ _src_bitrue_js__WEBPACK_IMPORTED_MODULE_26__.Z),
291155
+ /* harmony export */ bitso: () => (/* reexport safe */ _src_bitso_js__WEBPACK_IMPORTED_MODULE_27__.Z),
291156
+ /* harmony export */ bitstamp: () => (/* reexport safe */ _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_28__.Z),
291157
+ /* harmony export */ bitteam: () => (/* reexport safe */ _src_bitteam_js__WEBPACK_IMPORTED_MODULE_29__.Z),
291158
+ /* harmony export */ bitvavo: () => (/* reexport safe */ _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_30__.Z),
291159
+ /* harmony export */ bl3p: () => (/* reexport safe */ _src_bl3p_js__WEBPACK_IMPORTED_MODULE_31__.Z),
291160
+ /* harmony export */ blockchaincom: () => (/* reexport safe */ _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_32__.Z),
291161
+ /* harmony export */ btcalpha: () => (/* reexport safe */ _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_33__.Z),
291162
+ /* harmony export */ btcbox: () => (/* reexport safe */ _src_btcbox_js__WEBPACK_IMPORTED_MODULE_34__.Z),
291163
+ /* harmony export */ btcmarkets: () => (/* reexport safe */ _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_35__.Z),
291164
+ /* harmony export */ btcturk: () => (/* reexport safe */ _src_btcturk_js__WEBPACK_IMPORTED_MODULE_36__.Z),
291165
+ /* harmony export */ bybit: () => (/* reexport safe */ _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__.Z),
291166
+ /* harmony export */ cex: () => (/* reexport safe */ _src_cex_js__WEBPACK_IMPORTED_MODULE_38__.Z),
291167
+ /* harmony export */ coinbase: () => (/* reexport safe */ _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__.Z),
291168
+ /* harmony export */ coinbasepro: () => (/* reexport safe */ _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__.Z),
291169
+ /* harmony export */ coincheck: () => (/* reexport safe */ _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__.Z),
291170
+ /* harmony export */ coinex: () => (/* reexport safe */ _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__.Z),
291171
+ /* harmony export */ coinlist: () => (/* reexport safe */ _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__.Z),
291172
+ /* harmony export */ coinmate: () => (/* reexport safe */ _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__.Z),
291173
+ /* harmony export */ coinone: () => (/* reexport safe */ _src_coinone_js__WEBPACK_IMPORTED_MODULE_45__.Z),
291174
+ /* harmony export */ coinsph: () => (/* reexport safe */ _src_coinsph_js__WEBPACK_IMPORTED_MODULE_46__.Z),
291175
+ /* harmony export */ coinspot: () => (/* reexport safe */ _src_coinspot_js__WEBPACK_IMPORTED_MODULE_47__.Z),
291176
+ /* harmony export */ cryptocom: () => (/* reexport safe */ _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_48__.Z),
291177
+ /* harmony export */ currencycom: () => (/* reexport safe */ _src_currencycom_js__WEBPACK_IMPORTED_MODULE_49__.Z),
291067
291178
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
291068
- /* harmony export */ delta: () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_51__.Z),
291069
- /* harmony export */ deribit: () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_52__.Z),
291070
- /* harmony export */ digifinex: () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_53__.Z),
291179
+ /* harmony export */ delta: () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_50__.Z),
291180
+ /* harmony export */ deribit: () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__.Z),
291181
+ /* harmony export */ digifinex: () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__.Z),
291071
291182
  /* harmony export */ errors: () => (/* reexport module object */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__),
291072
291183
  /* harmony export */ exchanges: () => (/* binding */ exchanges),
291073
- /* harmony export */ exmo: () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_54__.Z),
291074
- /* harmony export */ fmfwio: () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_55__.Z),
291184
+ /* harmony export */ exmo: () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__.Z),
291185
+ /* harmony export */ fmfwio: () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__.Z),
291075
291186
  /* harmony export */ functions: () => (/* reexport module object */ _src_base_functions_js__WEBPACK_IMPORTED_MODULE_156__),
291076
- /* harmony export */ gate: () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_56__.Z),
291077
- /* harmony export */ gateio: () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_57__.Z),
291078
- /* harmony export */ gemini: () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_58__.Z),
291079
- /* harmony export */ hitbtc: () => (/* reexport safe */ _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_59__.Z),
291080
- /* harmony export */ hitbtc3: () => (/* reexport safe */ _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_60__.Z),
291081
- /* harmony export */ hollaex: () => (/* reexport safe */ _src_hollaex_js__WEBPACK_IMPORTED_MODULE_61__.Z),
291082
- /* harmony export */ htx: () => (/* reexport safe */ _src_htx_js__WEBPACK_IMPORTED_MODULE_62__.Z),
291083
- /* harmony export */ huobi: () => (/* reexport safe */ _src_huobi_js__WEBPACK_IMPORTED_MODULE_63__.Z),
291084
- /* harmony export */ huobijp: () => (/* reexport safe */ _src_huobijp_js__WEBPACK_IMPORTED_MODULE_64__.Z),
291085
- /* harmony export */ idex: () => (/* reexport safe */ _src_idex_js__WEBPACK_IMPORTED_MODULE_65__.Z),
291086
- /* harmony export */ independentreserve: () => (/* reexport safe */ _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_66__.Z),
291087
- /* harmony export */ indodax: () => (/* reexport safe */ _src_indodax_js__WEBPACK_IMPORTED_MODULE_67__.Z),
291088
- /* harmony export */ kraken: () => (/* reexport safe */ _src_kraken_js__WEBPACK_IMPORTED_MODULE_68__.Z),
291089
- /* harmony export */ krakenfutures: () => (/* reexport safe */ _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_69__.Z),
291090
- /* harmony export */ kucoin: () => (/* reexport safe */ _src_kucoin_js__WEBPACK_IMPORTED_MODULE_70__.Z),
291091
- /* harmony export */ kucoinfutures: () => (/* reexport safe */ _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_71__.Z),
291092
- /* harmony export */ kuna: () => (/* reexport safe */ _src_kuna_js__WEBPACK_IMPORTED_MODULE_72__.Z),
291093
- /* harmony export */ latoken: () => (/* reexport safe */ _src_latoken_js__WEBPACK_IMPORTED_MODULE_73__.Z),
291094
- /* harmony export */ lbank: () => (/* reexport safe */ _src_lbank_js__WEBPACK_IMPORTED_MODULE_74__.Z),
291095
- /* harmony export */ luno: () => (/* reexport safe */ _src_luno_js__WEBPACK_IMPORTED_MODULE_75__.Z),
291096
- /* harmony export */ lykke: () => (/* reexport safe */ _src_lykke_js__WEBPACK_IMPORTED_MODULE_76__.Z),
291097
- /* harmony export */ mercado: () => (/* reexport safe */ _src_mercado_js__WEBPACK_IMPORTED_MODULE_77__.Z),
291098
- /* harmony export */ mexc: () => (/* reexport safe */ _src_mexc_js__WEBPACK_IMPORTED_MODULE_78__.Z),
291099
- /* harmony export */ ndax: () => (/* reexport safe */ _src_ndax_js__WEBPACK_IMPORTED_MODULE_79__.Z),
291100
- /* harmony export */ novadax: () => (/* reexport safe */ _src_novadax_js__WEBPACK_IMPORTED_MODULE_80__.Z),
291101
- /* harmony export */ oceanex: () => (/* reexport safe */ _src_oceanex_js__WEBPACK_IMPORTED_MODULE_81__.Z),
291102
- /* harmony export */ okcoin: () => (/* reexport safe */ _src_okcoin_js__WEBPACK_IMPORTED_MODULE_82__.Z),
291103
- /* harmony export */ okx: () => (/* reexport safe */ _src_okx_js__WEBPACK_IMPORTED_MODULE_83__.Z),
291104
- /* harmony export */ p2b: () => (/* reexport safe */ _src_p2b_js__WEBPACK_IMPORTED_MODULE_84__.Z),
291105
- /* harmony export */ paymium: () => (/* reexport safe */ _src_paymium_js__WEBPACK_IMPORTED_MODULE_85__.Z),
291106
- /* harmony export */ phemex: () => (/* reexport safe */ _src_phemex_js__WEBPACK_IMPORTED_MODULE_86__.Z),
291107
- /* harmony export */ poloniex: () => (/* reexport safe */ _src_poloniex_js__WEBPACK_IMPORTED_MODULE_87__.Z),
291108
- /* harmony export */ poloniexfutures: () => (/* reexport safe */ _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_88__.Z),
291187
+ /* harmony export */ gate: () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_55__.Z),
291188
+ /* harmony export */ gateio: () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__.Z),
291189
+ /* harmony export */ gemini: () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__.Z),
291190
+ /* harmony export */ hitbtc: () => (/* reexport safe */ _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_58__.Z),
291191
+ /* harmony export */ hitbtc3: () => (/* reexport safe */ _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_59__.Z),
291192
+ /* harmony export */ hollaex: () => (/* reexport safe */ _src_hollaex_js__WEBPACK_IMPORTED_MODULE_60__.Z),
291193
+ /* harmony export */ htx: () => (/* reexport safe */ _src_htx_js__WEBPACK_IMPORTED_MODULE_61__.Z),
291194
+ /* harmony export */ huobi: () => (/* reexport safe */ _src_huobi_js__WEBPACK_IMPORTED_MODULE_62__.Z),
291195
+ /* harmony export */ huobijp: () => (/* reexport safe */ _src_huobijp_js__WEBPACK_IMPORTED_MODULE_63__.Z),
291196
+ /* harmony export */ idex: () => (/* reexport safe */ _src_idex_js__WEBPACK_IMPORTED_MODULE_64__.Z),
291197
+ /* harmony export */ independentreserve: () => (/* reexport safe */ _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_65__.Z),
291198
+ /* harmony export */ indodax: () => (/* reexport safe */ _src_indodax_js__WEBPACK_IMPORTED_MODULE_66__.Z),
291199
+ /* harmony export */ kraken: () => (/* reexport safe */ _src_kraken_js__WEBPACK_IMPORTED_MODULE_67__.Z),
291200
+ /* harmony export */ krakenfutures: () => (/* reexport safe */ _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_68__.Z),
291201
+ /* harmony export */ kucoin: () => (/* reexport safe */ _src_kucoin_js__WEBPACK_IMPORTED_MODULE_69__.Z),
291202
+ /* harmony export */ kucoinfutures: () => (/* reexport safe */ _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_70__.Z),
291203
+ /* harmony export */ kuna: () => (/* reexport safe */ _src_kuna_js__WEBPACK_IMPORTED_MODULE_71__.Z),
291204
+ /* harmony export */ latoken: () => (/* reexport safe */ _src_latoken_js__WEBPACK_IMPORTED_MODULE_72__.Z),
291205
+ /* harmony export */ lbank: () => (/* reexport safe */ _src_lbank_js__WEBPACK_IMPORTED_MODULE_73__.Z),
291206
+ /* harmony export */ luno: () => (/* reexport safe */ _src_luno_js__WEBPACK_IMPORTED_MODULE_74__.Z),
291207
+ /* harmony export */ lykke: () => (/* reexport safe */ _src_lykke_js__WEBPACK_IMPORTED_MODULE_75__.Z),
291208
+ /* harmony export */ mercado: () => (/* reexport safe */ _src_mercado_js__WEBPACK_IMPORTED_MODULE_76__.Z),
291209
+ /* harmony export */ mexc: () => (/* reexport safe */ _src_mexc_js__WEBPACK_IMPORTED_MODULE_77__.Z),
291210
+ /* harmony export */ ndax: () => (/* reexport safe */ _src_ndax_js__WEBPACK_IMPORTED_MODULE_78__.Z),
291211
+ /* harmony export */ novadax: () => (/* reexport safe */ _src_novadax_js__WEBPACK_IMPORTED_MODULE_79__.Z),
291212
+ /* harmony export */ oceanex: () => (/* reexport safe */ _src_oceanex_js__WEBPACK_IMPORTED_MODULE_80__.Z),
291213
+ /* harmony export */ okcoin: () => (/* reexport safe */ _src_okcoin_js__WEBPACK_IMPORTED_MODULE_81__.Z),
291214
+ /* harmony export */ okx: () => (/* reexport safe */ _src_okx_js__WEBPACK_IMPORTED_MODULE_82__.Z),
291215
+ /* harmony export */ p2b: () => (/* reexport safe */ _src_p2b_js__WEBPACK_IMPORTED_MODULE_83__.Z),
291216
+ /* harmony export */ paymium: () => (/* reexport safe */ _src_paymium_js__WEBPACK_IMPORTED_MODULE_84__.Z),
291217
+ /* harmony export */ phemex: () => (/* reexport safe */ _src_phemex_js__WEBPACK_IMPORTED_MODULE_85__.Z),
291218
+ /* harmony export */ poloniex: () => (/* reexport safe */ _src_poloniex_js__WEBPACK_IMPORTED_MODULE_86__.Z),
291219
+ /* harmony export */ poloniexfutures: () => (/* reexport safe */ _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_87__.Z),
291109
291220
  /* harmony export */ pro: () => (/* binding */ pro),
291110
- /* harmony export */ probit: () => (/* reexport safe */ _src_probit_js__WEBPACK_IMPORTED_MODULE_89__.Z),
291111
- /* harmony export */ timex: () => (/* reexport safe */ _src_timex_js__WEBPACK_IMPORTED_MODULE_90__.Z),
291112
- /* harmony export */ tokocrypto: () => (/* reexport safe */ _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_91__.Z),
291113
- /* harmony export */ upbit: () => (/* reexport safe */ _src_upbit_js__WEBPACK_IMPORTED_MODULE_92__.Z),
291221
+ /* harmony export */ probit: () => (/* reexport safe */ _src_probit_js__WEBPACK_IMPORTED_MODULE_88__.Z),
291222
+ /* harmony export */ timex: () => (/* reexport safe */ _src_timex_js__WEBPACK_IMPORTED_MODULE_89__.Z),
291223
+ /* harmony export */ tokocrypto: () => (/* reexport safe */ _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_90__.Z),
291224
+ /* harmony export */ upbit: () => (/* reexport safe */ _src_upbit_js__WEBPACK_IMPORTED_MODULE_91__.Z),
291114
291225
  /* harmony export */ version: () => (/* binding */ version),
291115
- /* harmony export */ wavesexchange: () => (/* reexport safe */ _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_93__.Z),
291116
- /* harmony export */ wazirx: () => (/* reexport safe */ _src_wazirx_js__WEBPACK_IMPORTED_MODULE_94__.Z),
291117
- /* harmony export */ whitebit: () => (/* reexport safe */ _src_whitebit_js__WEBPACK_IMPORTED_MODULE_95__.Z),
291118
- /* harmony export */ woo: () => (/* reexport safe */ _src_woo_js__WEBPACK_IMPORTED_MODULE_96__.Z),
291119
- /* harmony export */ yobit: () => (/* reexport safe */ _src_yobit_js__WEBPACK_IMPORTED_MODULE_97__.Z),
291120
- /* harmony export */ zaif: () => (/* reexport safe */ _src_zaif_js__WEBPACK_IMPORTED_MODULE_1__.Z),
291226
+ /* harmony export */ wavesexchange: () => (/* reexport safe */ _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_92__.Z),
291227
+ /* harmony export */ wazirx: () => (/* reexport safe */ _src_wazirx_js__WEBPACK_IMPORTED_MODULE_93__.Z),
291228
+ /* harmony export */ whitebit: () => (/* reexport safe */ _src_whitebit_js__WEBPACK_IMPORTED_MODULE_94__.Z),
291229
+ /* harmony export */ woo: () => (/* reexport safe */ _src_woo_js__WEBPACK_IMPORTED_MODULE_95__.Z),
291230
+ /* harmony export */ yobit: () => (/* reexport safe */ _src_yobit_js__WEBPACK_IMPORTED_MODULE_96__.Z),
291231
+ /* harmony export */ zaif: () => (/* reexport safe */ _src_zaif_js__WEBPACK_IMPORTED_MODULE_97__.Z),
291121
291232
  /* harmony export */ zonda: () => (/* reexport safe */ _src_zonda_js__WEBPACK_IMPORTED_MODULE_98__.Z)
291122
291233
  /* harmony export */ });
291123
291234
  /* harmony import */ var _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
291124
291235
  /* harmony import */ var _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(2194);
291125
291236
  /* harmony import */ var _src_base_functions_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(7100);
291126
291237
  /* harmony import */ var _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(6689);
291127
- /* harmony import */ var _src_ace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9869);
291128
- /* harmony import */ var _src_alpaca_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5660);
291129
- /* harmony import */ var _src_ascendex_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9612);
291130
- /* harmony import */ var _src_bequant_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2049);
291131
- /* harmony import */ var _src_bigone_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7679);
291132
- /* harmony import */ var _src_binance_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9987);
291133
- /* harmony import */ var _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(9212);
291134
- /* harmony import */ var _src_binanceus_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(2723);
291135
- /* harmony import */ var _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(3254);
291136
- /* harmony import */ var _src_bingx_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(7960);
291137
- /* harmony import */ var _src_bit2c_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(7691);
291138
- /* harmony import */ var _src_bitbank_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(7820);
291139
- /* harmony import */ var _src_bitbay_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(668);
291140
- /* harmony import */ var _src_bitbns_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(7790);
291141
- /* harmony import */ var _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(1819);
291142
- /* harmony import */ var _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(6537);
291143
- /* harmony import */ var _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(730);
291144
- /* harmony import */ var _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(8429);
291145
- /* harmony import */ var _src_bitforex_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(2035);
291146
- /* harmony import */ var _src_bitget_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(9051);
291147
- /* harmony import */ var _src_bithumb_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(5305);
291148
- /* harmony import */ var _src_bitmart_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(3718);
291149
- /* harmony import */ var _src_bitmex_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(7077);
291150
- /* harmony import */ var _src_bitopro_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(172);
291151
- /* harmony import */ var _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(2737);
291152
- /* harmony import */ var _src_bitrue_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(854);
291153
- /* harmony import */ var _src_bitso_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(4388);
291154
- /* harmony import */ var _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(4667);
291155
- /* harmony import */ var _src_bitteam_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(8994);
291156
- /* harmony import */ var _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(9943);
291157
- /* harmony import */ var _src_bl3p_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(9476);
291158
- /* harmony import */ var _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(182);
291159
- /* harmony import */ var _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(6246);
291160
- /* harmony import */ var _src_btcbox_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(7796);
291161
- /* harmony import */ var _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(1776);
291162
- /* harmony import */ var _src_btcturk_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(6304);
291163
- /* harmony import */ var _src_bybit_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(3527);
291164
- /* harmony import */ var _src_cex_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(6445);
291165
- /* harmony import */ var _src_coinbase_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(437);
291166
- /* harmony import */ var _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(8856);
291167
- /* harmony import */ var _src_coincheck_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(2117);
291168
- /* harmony import */ var _src_coinex_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(332);
291169
- /* harmony import */ var _src_coinlist_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(3623);
291170
- /* harmony import */ var _src_coinmate_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(9816);
291171
- /* harmony import */ var _src_coinone_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(7811);
291172
- /* harmony import */ var _src_coinsph_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(5782);
291173
- /* harmony import */ var _src_coinspot_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(7794);
291174
- /* harmony import */ var _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(9129);
291175
- /* harmony import */ var _src_currencycom_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(3214);
291176
- /* harmony import */ var _src_delta_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(1753);
291177
- /* harmony import */ var _src_deribit_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(24);
291178
- /* harmony import */ var _src_digifinex_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(8846);
291179
- /* harmony import */ var _src_exmo_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(1729);
291180
- /* harmony import */ var _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(5788);
291181
- /* harmony import */ var _src_gate_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(7290);
291182
- /* harmony import */ var _src_gateio_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(7036);
291183
- /* harmony import */ var _src_gemini_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(6743);
291184
- /* harmony import */ var _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(4714);
291185
- /* harmony import */ var _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(4815);
291186
- /* harmony import */ var _src_hollaex_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(8422);
291187
- /* harmony import */ var _src_htx_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(5939);
291188
- /* harmony import */ var _src_huobi_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(8146);
291189
- /* harmony import */ var _src_huobijp_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(7034);
291190
- /* harmony import */ var _src_idex_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(8232);
291191
- /* harmony import */ var _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(9570);
291192
- /* harmony import */ var _src_indodax_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(1605);
291193
- /* harmony import */ var _src_kraken_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(9922);
291194
- /* harmony import */ var _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(4470);
291195
- /* harmony import */ var _src_kucoin_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(3583);
291196
- /* harmony import */ var _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(1924);
291197
- /* harmony import */ var _src_kuna_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(7732);
291198
- /* harmony import */ var _src_latoken_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(2545);
291199
- /* harmony import */ var _src_lbank_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(3944);
291200
- /* harmony import */ var _src_luno_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(1758);
291201
- /* harmony import */ var _src_lykke_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(3803);
291202
- /* harmony import */ var _src_mercado_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(9013);
291203
- /* harmony import */ var _src_mexc_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(6641);
291204
- /* harmony import */ var _src_ndax_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(4531);
291205
- /* harmony import */ var _src_novadax_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(2449);
291206
- /* harmony import */ var _src_oceanex_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(6749);
291207
- /* harmony import */ var _src_okcoin_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(3007);
291208
- /* harmony import */ var _src_okx_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(4042);
291209
- /* harmony import */ var _src_p2b_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(2466);
291210
- /* harmony import */ var _src_paymium_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(7082);
291211
- /* harmony import */ var _src_phemex_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(79);
291212
- /* harmony import */ var _src_poloniex_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(8891);
291213
- /* harmony import */ var _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(6877);
291214
- /* harmony import */ var _src_probit_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(3657);
291215
- /* harmony import */ var _src_timex_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(1067);
291216
- /* harmony import */ var _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(5261);
291217
- /* harmony import */ var _src_upbit_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(7584);
291218
- /* harmony import */ var _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(3853);
291219
- /* harmony import */ var _src_wazirx_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(6536);
291220
- /* harmony import */ var _src_whitebit_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(5467);
291221
- /* harmony import */ var _src_woo_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(517);
291222
- /* harmony import */ var _src_yobit_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(3850);
291223
- /* harmony import */ var _src_zaif_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7558);
291238
+ /* harmony import */ var _src_ace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9869);
291239
+ /* harmony import */ var _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5660);
291240
+ /* harmony import */ var _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9612);
291241
+ /* harmony import */ var _src_bequant_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2049);
291242
+ /* harmony import */ var _src_bigone_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7679);
291243
+ /* harmony import */ var _src_binance_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(9987);
291244
+ /* harmony import */ var _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9212);
291245
+ /* harmony import */ var _src_binanceus_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(2723);
291246
+ /* harmony import */ var _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(3254);
291247
+ /* harmony import */ var _src_bingx_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(7960);
291248
+ /* harmony import */ var _src_bit2c_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(7691);
291249
+ /* harmony import */ var _src_bitbank_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(7820);
291250
+ /* harmony import */ var _src_bitbay_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(668);
291251
+ /* harmony import */ var _src_bitbns_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(7790);
291252
+ /* harmony import */ var _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(1819);
291253
+ /* harmony import */ var _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(6537);
291254
+ /* harmony import */ var _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(730);
291255
+ /* harmony import */ var _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(8429);
291256
+ /* harmony import */ var _src_bitforex_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(2035);
291257
+ /* harmony import */ var _src_bitget_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(9051);
291258
+ /* harmony import */ var _src_bithumb_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(5305);
291259
+ /* harmony import */ var _src_bitmart_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(3718);
291260
+ /* harmony import */ var _src_bitmex_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(7077);
291261
+ /* harmony import */ var _src_bitopro_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(172);
291262
+ /* harmony import */ var _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(2737);
291263
+ /* harmony import */ var _src_bitrue_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(854);
291264
+ /* harmony import */ var _src_bitso_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(4388);
291265
+ /* harmony import */ var _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(4667);
291266
+ /* harmony import */ var _src_bitteam_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(8994);
291267
+ /* harmony import */ var _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(9943);
291268
+ /* harmony import */ var _src_bl3p_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(9476);
291269
+ /* harmony import */ var _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(182);
291270
+ /* harmony import */ var _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(6246);
291271
+ /* harmony import */ var _src_btcbox_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(7796);
291272
+ /* harmony import */ var _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(1776);
291273
+ /* harmony import */ var _src_btcturk_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(6304);
291274
+ /* harmony import */ var _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(3527);
291275
+ /* harmony import */ var _src_cex_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(6445);
291276
+ /* harmony import */ var _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(437);
291277
+ /* harmony import */ var _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(8856);
291278
+ /* harmony import */ var _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(2117);
291279
+ /* harmony import */ var _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(332);
291280
+ /* harmony import */ var _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(3623);
291281
+ /* harmony import */ var _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(9816);
291282
+ /* harmony import */ var _src_coinone_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(7811);
291283
+ /* harmony import */ var _src_coinsph_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(5782);
291284
+ /* harmony import */ var _src_coinspot_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(7794);
291285
+ /* harmony import */ var _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(9129);
291286
+ /* harmony import */ var _src_currencycom_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(3214);
291287
+ /* harmony import */ var _src_delta_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(1753);
291288
+ /* harmony import */ var _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(24);
291289
+ /* harmony import */ var _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(8846);
291290
+ /* harmony import */ var _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(1729);
291291
+ /* harmony import */ var _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(5788);
291292
+ /* harmony import */ var _src_gate_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(7290);
291293
+ /* harmony import */ var _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(7036);
291294
+ /* harmony import */ var _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(6743);
291295
+ /* harmony import */ var _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(4714);
291296
+ /* harmony import */ var _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(4815);
291297
+ /* harmony import */ var _src_hollaex_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(8422);
291298
+ /* harmony import */ var _src_htx_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(5939);
291299
+ /* harmony import */ var _src_huobi_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(8146);
291300
+ /* harmony import */ var _src_huobijp_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(7034);
291301
+ /* harmony import */ var _src_idex_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(8232);
291302
+ /* harmony import */ var _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(9570);
291303
+ /* harmony import */ var _src_indodax_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(1605);
291304
+ /* harmony import */ var _src_kraken_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(9922);
291305
+ /* harmony import */ var _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(4470);
291306
+ /* harmony import */ var _src_kucoin_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(3583);
291307
+ /* harmony import */ var _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(1924);
291308
+ /* harmony import */ var _src_kuna_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(7732);
291309
+ /* harmony import */ var _src_latoken_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(2545);
291310
+ /* harmony import */ var _src_lbank_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(3944);
291311
+ /* harmony import */ var _src_luno_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(1758);
291312
+ /* harmony import */ var _src_lykke_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(3803);
291313
+ /* harmony import */ var _src_mercado_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(9013);
291314
+ /* harmony import */ var _src_mexc_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(6641);
291315
+ /* harmony import */ var _src_ndax_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(4531);
291316
+ /* harmony import */ var _src_novadax_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(2449);
291317
+ /* harmony import */ var _src_oceanex_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(6749);
291318
+ /* harmony import */ var _src_okcoin_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(3007);
291319
+ /* harmony import */ var _src_okx_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(4042);
291320
+ /* harmony import */ var _src_p2b_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(2466);
291321
+ /* harmony import */ var _src_paymium_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(7082);
291322
+ /* harmony import */ var _src_phemex_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(79);
291323
+ /* harmony import */ var _src_poloniex_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(8891);
291324
+ /* harmony import */ var _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(6877);
291325
+ /* harmony import */ var _src_probit_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(3657);
291326
+ /* harmony import */ var _src_timex_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(1067);
291327
+ /* harmony import */ var _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(5261);
291328
+ /* harmony import */ var _src_upbit_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(7584);
291329
+ /* harmony import */ var _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(3853);
291330
+ /* harmony import */ var _src_wazirx_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(6536);
291331
+ /* harmony import */ var _src_whitebit_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(5467);
291332
+ /* harmony import */ var _src_woo_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(517);
291333
+ /* harmony import */ var _src_yobit_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(3850);
291334
+ /* harmony import */ var _src_zaif_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(5934);
291224
291335
  /* harmony import */ var _src_zonda_js__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(5140);
291225
291336
  /* harmony import */ var _src_pro_alpaca_js__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(2467);
291226
291337
  /* harmony import */ var _src_pro_ascendex_js__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(2383);
@@ -291312,7 +291423,7 @@ SOFTWARE.
291312
291423
 
291313
291424
  //-----------------------------------------------------------------------------
291314
291425
  // this is updated by vss.js when building
291315
- const version = '4.2.1';
291426
+ const version = '4.2.2';
291316
291427
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
291317
291428
  //-----------------------------------------------------------------------------
291318
291429
 
@@ -291471,103 +291582,103 @@ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion
291471
291582
 
291472
291583
 
291473
291584
  const exchanges = {
291474
- 'ace': _src_ace_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z,
291475
- 'alpaca': _src_alpaca_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z,
291476
- 'ascendex': _src_ascendex_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z,
291477
- 'bequant': _src_bequant_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z,
291478
- 'bigone': _src_bigone_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z,
291479
- 'binance': _src_binance_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z,
291480
- 'binancecoinm': _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z,
291481
- 'binanceus': _src_binanceus_js__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z,
291482
- 'binanceusdm': _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z,
291483
- 'bingx': _src_bingx_js__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z,
291484
- 'bit2c': _src_bit2c_js__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z,
291485
- 'bitbank': _src_bitbank_js__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .Z,
291486
- 'bitbay': _src_bitbay_js__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z,
291487
- 'bitbns': _src_bitbns_js__WEBPACK_IMPORTED_MODULE_15__/* ["default"] */ .Z,
291488
- 'bitcoincom': _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_16__/* ["default"] */ .Z,
291489
- 'bitfinex': _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_17__/* ["default"] */ .Z,
291490
- 'bitfinex2': _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_18__/* ["default"] */ .Z,
291491
- 'bitflyer': _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_19__/* ["default"] */ .Z,
291492
- 'bitforex': _src_bitforex_js__WEBPACK_IMPORTED_MODULE_20__/* ["default"] */ .Z,
291493
- 'bitget': _src_bitget_js__WEBPACK_IMPORTED_MODULE_21__/* ["default"] */ .Z,
291494
- 'bithumb': _src_bithumb_js__WEBPACK_IMPORTED_MODULE_22__/* ["default"] */ .Z,
291495
- 'bitmart': _src_bitmart_js__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .Z,
291496
- 'bitmex': _src_bitmex_js__WEBPACK_IMPORTED_MODULE_24__/* ["default"] */ .Z,
291497
- 'bitopro': _src_bitopro_js__WEBPACK_IMPORTED_MODULE_25__/* ["default"] */ .Z,
291498
- 'bitpanda': _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_26__/* ["default"] */ .Z,
291499
- 'bitrue': _src_bitrue_js__WEBPACK_IMPORTED_MODULE_27__/* ["default"] */ .Z,
291500
- 'bitso': _src_bitso_js__WEBPACK_IMPORTED_MODULE_28__/* ["default"] */ .Z,
291501
- 'bitstamp': _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_29__/* ["default"] */ .Z,
291502
- 'bitteam': _src_bitteam_js__WEBPACK_IMPORTED_MODULE_30__/* ["default"] */ .Z,
291503
- 'bitvavo': _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_31__/* ["default"] */ .Z,
291504
- 'bl3p': _src_bl3p_js__WEBPACK_IMPORTED_MODULE_32__/* ["default"] */ .Z,
291505
- 'blockchaincom': _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_33__/* ["default"] */ .Z,
291506
- 'btcalpha': _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_34__/* ["default"] */ .Z,
291507
- 'btcbox': _src_btcbox_js__WEBPACK_IMPORTED_MODULE_35__/* ["default"] */ .Z,
291508
- 'btcmarkets': _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_36__/* ["default"] */ .Z,
291509
- 'btcturk': _src_btcturk_js__WEBPACK_IMPORTED_MODULE_37__/* ["default"] */ .Z,
291510
- 'bybit': _src_bybit_js__WEBPACK_IMPORTED_MODULE_38__/* ["default"] */ .Z,
291511
- 'cex': _src_cex_js__WEBPACK_IMPORTED_MODULE_39__/* ["default"] */ .Z,
291512
- 'coinbase': _src_coinbase_js__WEBPACK_IMPORTED_MODULE_40__/* ["default"] */ .Z,
291513
- 'coinbasepro': _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_41__/* ["default"] */ .Z,
291514
- 'coincheck': _src_coincheck_js__WEBPACK_IMPORTED_MODULE_42__/* ["default"] */ .Z,
291515
- 'coinex': _src_coinex_js__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .Z,
291516
- 'coinlist': _src_coinlist_js__WEBPACK_IMPORTED_MODULE_44__/* ["default"] */ .Z,
291517
- 'coinmate': _src_coinmate_js__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .Z,
291518
- 'coinone': _src_coinone_js__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .Z,
291519
- 'coinsph': _src_coinsph_js__WEBPACK_IMPORTED_MODULE_47__/* ["default"] */ .Z,
291520
- 'coinspot': _src_coinspot_js__WEBPACK_IMPORTED_MODULE_48__/* ["default"] */ .Z,
291521
- 'cryptocom': _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_49__/* ["default"] */ .Z,
291522
- 'currencycom': _src_currencycom_js__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .Z,
291523
- 'delta': _src_delta_js__WEBPACK_IMPORTED_MODULE_51__/* ["default"] */ .Z,
291524
- 'deribit': _src_deribit_js__WEBPACK_IMPORTED_MODULE_52__/* ["default"] */ .Z,
291525
- 'digifinex': _src_digifinex_js__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .Z,
291526
- 'exmo': _src_exmo_js__WEBPACK_IMPORTED_MODULE_54__/* ["default"] */ .Z,
291527
- 'fmfwio': _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_55__/* ["default"] */ .Z,
291528
- 'gate': _src_gate_js__WEBPACK_IMPORTED_MODULE_56__/* ["default"] */ .Z,
291529
- 'gateio': _src_gateio_js__WEBPACK_IMPORTED_MODULE_57__/* ["default"] */ .Z,
291530
- 'gemini': _src_gemini_js__WEBPACK_IMPORTED_MODULE_58__/* ["default"] */ .Z,
291531
- 'hitbtc': _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_59__/* ["default"] */ .Z,
291532
- 'hitbtc3': _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_60__/* ["default"] */ .Z,
291533
- 'hollaex': _src_hollaex_js__WEBPACK_IMPORTED_MODULE_61__/* ["default"] */ .Z,
291534
- 'htx': _src_htx_js__WEBPACK_IMPORTED_MODULE_62__/* ["default"] */ .Z,
291535
- 'huobi': _src_huobi_js__WEBPACK_IMPORTED_MODULE_63__/* ["default"] */ .Z,
291536
- 'huobijp': _src_huobijp_js__WEBPACK_IMPORTED_MODULE_64__/* ["default"] */ .Z,
291537
- 'idex': _src_idex_js__WEBPACK_IMPORTED_MODULE_65__/* ["default"] */ .Z,
291538
- 'independentreserve': _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_66__/* ["default"] */ .Z,
291539
- 'indodax': _src_indodax_js__WEBPACK_IMPORTED_MODULE_67__/* ["default"] */ .Z,
291540
- 'kraken': _src_kraken_js__WEBPACK_IMPORTED_MODULE_68__/* ["default"] */ .Z,
291541
- 'krakenfutures': _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_69__/* ["default"] */ .Z,
291542
- 'kucoin': _src_kucoin_js__WEBPACK_IMPORTED_MODULE_70__/* ["default"] */ .Z,
291543
- 'kucoinfutures': _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_71__/* ["default"] */ .Z,
291544
- 'kuna': _src_kuna_js__WEBPACK_IMPORTED_MODULE_72__/* ["default"] */ .Z,
291545
- 'latoken': _src_latoken_js__WEBPACK_IMPORTED_MODULE_73__/* ["default"] */ .Z,
291546
- 'lbank': _src_lbank_js__WEBPACK_IMPORTED_MODULE_74__/* ["default"] */ .Z,
291547
- 'luno': _src_luno_js__WEBPACK_IMPORTED_MODULE_75__/* ["default"] */ .Z,
291548
- 'lykke': _src_lykke_js__WEBPACK_IMPORTED_MODULE_76__/* ["default"] */ .Z,
291549
- 'mercado': _src_mercado_js__WEBPACK_IMPORTED_MODULE_77__/* ["default"] */ .Z,
291550
- 'mexc': _src_mexc_js__WEBPACK_IMPORTED_MODULE_78__/* ["default"] */ .Z,
291551
- 'ndax': _src_ndax_js__WEBPACK_IMPORTED_MODULE_79__/* ["default"] */ .Z,
291552
- 'novadax': _src_novadax_js__WEBPACK_IMPORTED_MODULE_80__/* ["default"] */ .Z,
291553
- 'oceanex': _src_oceanex_js__WEBPACK_IMPORTED_MODULE_81__/* ["default"] */ .Z,
291554
- 'okcoin': _src_okcoin_js__WEBPACK_IMPORTED_MODULE_82__/* ["default"] */ .Z,
291555
- 'okx': _src_okx_js__WEBPACK_IMPORTED_MODULE_83__/* ["default"] */ .Z,
291556
- 'p2b': _src_p2b_js__WEBPACK_IMPORTED_MODULE_84__/* ["default"] */ .Z,
291557
- 'paymium': _src_paymium_js__WEBPACK_IMPORTED_MODULE_85__/* ["default"] */ .Z,
291558
- 'phemex': _src_phemex_js__WEBPACK_IMPORTED_MODULE_86__/* ["default"] */ .Z,
291559
- 'poloniex': _src_poloniex_js__WEBPACK_IMPORTED_MODULE_87__/* ["default"] */ .Z,
291560
- 'poloniexfutures': _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_88__/* ["default"] */ .Z,
291561
- 'probit': _src_probit_js__WEBPACK_IMPORTED_MODULE_89__/* ["default"] */ .Z,
291562
- 'timex': _src_timex_js__WEBPACK_IMPORTED_MODULE_90__/* ["default"] */ .Z,
291563
- 'tokocrypto': _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_91__/* ["default"] */ .Z,
291564
- 'upbit': _src_upbit_js__WEBPACK_IMPORTED_MODULE_92__/* ["default"] */ .Z,
291565
- 'wavesexchange': _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_93__/* ["default"] */ .Z,
291566
- 'wazirx': _src_wazirx_js__WEBPACK_IMPORTED_MODULE_94__/* ["default"] */ .Z,
291567
- 'whitebit': _src_whitebit_js__WEBPACK_IMPORTED_MODULE_95__/* ["default"] */ .Z,
291568
- 'woo': _src_woo_js__WEBPACK_IMPORTED_MODULE_96__/* ["default"] */ .Z,
291569
- 'yobit': _src_yobit_js__WEBPACK_IMPORTED_MODULE_97__/* ["default"] */ .Z,
291570
- 'zaif': _src_zaif_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,
291585
+ 'ace': _src_ace_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,
291586
+ 'alpaca': _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z,
291587
+ 'ascendex': _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z,
291588
+ 'bequant': _src_bequant_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z,
291589
+ 'bigone': _src_bigone_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z,
291590
+ 'binance': _src_binance_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z,
291591
+ 'binancecoinm': _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z,
291592
+ 'binanceus': _src_binanceus_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z,
291593
+ 'binanceusdm': _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z,
291594
+ 'bingx': _src_bingx_js__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z,
291595
+ 'bit2c': _src_bit2c_js__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z,
291596
+ 'bitbank': _src_bitbank_js__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z,
291597
+ 'bitbay': _src_bitbay_js__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .Z,
291598
+ 'bitbns': _src_bitbns_js__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z,
291599
+ 'bitcoincom': _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_15__/* ["default"] */ .Z,
291600
+ 'bitfinex': _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_16__/* ["default"] */ .Z,
291601
+ 'bitfinex2': _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_17__/* ["default"] */ .Z,
291602
+ 'bitflyer': _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_18__/* ["default"] */ .Z,
291603
+ 'bitforex': _src_bitforex_js__WEBPACK_IMPORTED_MODULE_19__/* ["default"] */ .Z,
291604
+ 'bitget': _src_bitget_js__WEBPACK_IMPORTED_MODULE_20__/* ["default"] */ .Z,
291605
+ 'bithumb': _src_bithumb_js__WEBPACK_IMPORTED_MODULE_21__/* ["default"] */ .Z,
291606
+ 'bitmart': _src_bitmart_js__WEBPACK_IMPORTED_MODULE_22__/* ["default"] */ .Z,
291607
+ 'bitmex': _src_bitmex_js__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .Z,
291608
+ 'bitopro': _src_bitopro_js__WEBPACK_IMPORTED_MODULE_24__/* ["default"] */ .Z,
291609
+ 'bitpanda': _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_25__/* ["default"] */ .Z,
291610
+ 'bitrue': _src_bitrue_js__WEBPACK_IMPORTED_MODULE_26__/* ["default"] */ .Z,
291611
+ 'bitso': _src_bitso_js__WEBPACK_IMPORTED_MODULE_27__/* ["default"] */ .Z,
291612
+ 'bitstamp': _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_28__/* ["default"] */ .Z,
291613
+ 'bitteam': _src_bitteam_js__WEBPACK_IMPORTED_MODULE_29__/* ["default"] */ .Z,
291614
+ 'bitvavo': _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_30__/* ["default"] */ .Z,
291615
+ 'bl3p': _src_bl3p_js__WEBPACK_IMPORTED_MODULE_31__/* ["default"] */ .Z,
291616
+ 'blockchaincom': _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_32__/* ["default"] */ .Z,
291617
+ 'btcalpha': _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_33__/* ["default"] */ .Z,
291618
+ 'btcbox': _src_btcbox_js__WEBPACK_IMPORTED_MODULE_34__/* ["default"] */ .Z,
291619
+ 'btcmarkets': _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_35__/* ["default"] */ .Z,
291620
+ 'btcturk': _src_btcturk_js__WEBPACK_IMPORTED_MODULE_36__/* ["default"] */ .Z,
291621
+ 'bybit': _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__/* ["default"] */ .Z,
291622
+ 'cex': _src_cex_js__WEBPACK_IMPORTED_MODULE_38__/* ["default"] */ .Z,
291623
+ 'coinbase': _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__/* ["default"] */ .Z,
291624
+ 'coinbasepro': _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__/* ["default"] */ .Z,
291625
+ 'coincheck': _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__/* ["default"] */ .Z,
291626
+ 'coinex': _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__/* ["default"] */ .Z,
291627
+ 'coinlist': _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .Z,
291628
+ 'coinmate': _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__/* ["default"] */ .Z,
291629
+ 'coinone': _src_coinone_js__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .Z,
291630
+ 'coinsph': _src_coinsph_js__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .Z,
291631
+ 'coinspot': _src_coinspot_js__WEBPACK_IMPORTED_MODULE_47__/* ["default"] */ .Z,
291632
+ 'cryptocom': _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_48__/* ["default"] */ .Z,
291633
+ 'currencycom': _src_currencycom_js__WEBPACK_IMPORTED_MODULE_49__/* ["default"] */ .Z,
291634
+ 'delta': _src_delta_js__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .Z,
291635
+ 'deribit': _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__/* ["default"] */ .Z,
291636
+ 'digifinex': _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__/* ["default"] */ .Z,
291637
+ 'exmo': _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .Z,
291638
+ 'fmfwio': _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__/* ["default"] */ .Z,
291639
+ 'gate': _src_gate_js__WEBPACK_IMPORTED_MODULE_55__/* ["default"] */ .Z,
291640
+ 'gateio': _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__/* ["default"] */ .Z,
291641
+ 'gemini': _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__/* ["default"] */ .Z,
291642
+ 'hitbtc': _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_58__/* ["default"] */ .Z,
291643
+ 'hitbtc3': _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_59__/* ["default"] */ .Z,
291644
+ 'hollaex': _src_hollaex_js__WEBPACK_IMPORTED_MODULE_60__/* ["default"] */ .Z,
291645
+ 'htx': _src_htx_js__WEBPACK_IMPORTED_MODULE_61__/* ["default"] */ .Z,
291646
+ 'huobi': _src_huobi_js__WEBPACK_IMPORTED_MODULE_62__/* ["default"] */ .Z,
291647
+ 'huobijp': _src_huobijp_js__WEBPACK_IMPORTED_MODULE_63__/* ["default"] */ .Z,
291648
+ 'idex': _src_idex_js__WEBPACK_IMPORTED_MODULE_64__/* ["default"] */ .Z,
291649
+ 'independentreserve': _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_65__/* ["default"] */ .Z,
291650
+ 'indodax': _src_indodax_js__WEBPACK_IMPORTED_MODULE_66__/* ["default"] */ .Z,
291651
+ 'kraken': _src_kraken_js__WEBPACK_IMPORTED_MODULE_67__/* ["default"] */ .Z,
291652
+ 'krakenfutures': _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_68__/* ["default"] */ .Z,
291653
+ 'kucoin': _src_kucoin_js__WEBPACK_IMPORTED_MODULE_69__/* ["default"] */ .Z,
291654
+ 'kucoinfutures': _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_70__/* ["default"] */ .Z,
291655
+ 'kuna': _src_kuna_js__WEBPACK_IMPORTED_MODULE_71__/* ["default"] */ .Z,
291656
+ 'latoken': _src_latoken_js__WEBPACK_IMPORTED_MODULE_72__/* ["default"] */ .Z,
291657
+ 'lbank': _src_lbank_js__WEBPACK_IMPORTED_MODULE_73__/* ["default"] */ .Z,
291658
+ 'luno': _src_luno_js__WEBPACK_IMPORTED_MODULE_74__/* ["default"] */ .Z,
291659
+ 'lykke': _src_lykke_js__WEBPACK_IMPORTED_MODULE_75__/* ["default"] */ .Z,
291660
+ 'mercado': _src_mercado_js__WEBPACK_IMPORTED_MODULE_76__/* ["default"] */ .Z,
291661
+ 'mexc': _src_mexc_js__WEBPACK_IMPORTED_MODULE_77__/* ["default"] */ .Z,
291662
+ 'ndax': _src_ndax_js__WEBPACK_IMPORTED_MODULE_78__/* ["default"] */ .Z,
291663
+ 'novadax': _src_novadax_js__WEBPACK_IMPORTED_MODULE_79__/* ["default"] */ .Z,
291664
+ 'oceanex': _src_oceanex_js__WEBPACK_IMPORTED_MODULE_80__/* ["default"] */ .Z,
291665
+ 'okcoin': _src_okcoin_js__WEBPACK_IMPORTED_MODULE_81__/* ["default"] */ .Z,
291666
+ 'okx': _src_okx_js__WEBPACK_IMPORTED_MODULE_82__/* ["default"] */ .Z,
291667
+ 'p2b': _src_p2b_js__WEBPACK_IMPORTED_MODULE_83__/* ["default"] */ .Z,
291668
+ 'paymium': _src_paymium_js__WEBPACK_IMPORTED_MODULE_84__/* ["default"] */ .Z,
291669
+ 'phemex': _src_phemex_js__WEBPACK_IMPORTED_MODULE_85__/* ["default"] */ .Z,
291670
+ 'poloniex': _src_poloniex_js__WEBPACK_IMPORTED_MODULE_86__/* ["default"] */ .Z,
291671
+ 'poloniexfutures': _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_87__/* ["default"] */ .Z,
291672
+ 'probit': _src_probit_js__WEBPACK_IMPORTED_MODULE_88__/* ["default"] */ .Z,
291673
+ 'timex': _src_timex_js__WEBPACK_IMPORTED_MODULE_89__/* ["default"] */ .Z,
291674
+ 'tokocrypto': _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_90__/* ["default"] */ .Z,
291675
+ 'upbit': _src_upbit_js__WEBPACK_IMPORTED_MODULE_91__/* ["default"] */ .Z,
291676
+ 'wavesexchange': _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_92__/* ["default"] */ .Z,
291677
+ 'wazirx': _src_wazirx_js__WEBPACK_IMPORTED_MODULE_93__/* ["default"] */ .Z,
291678
+ 'whitebit': _src_whitebit_js__WEBPACK_IMPORTED_MODULE_94__/* ["default"] */ .Z,
291679
+ 'woo': _src_woo_js__WEBPACK_IMPORTED_MODULE_95__/* ["default"] */ .Z,
291680
+ 'yobit': _src_yobit_js__WEBPACK_IMPORTED_MODULE_96__/* ["default"] */ .Z,
291681
+ 'zaif': _src_zaif_js__WEBPACK_IMPORTED_MODULE_97__/* ["default"] */ .Z,
291571
291682
  'zonda': _src_zonda_js__WEBPACK_IMPORTED_MODULE_98__/* ["default"] */ .Z,
291572
291683
  };
291573
291684
  const pro = {