@kepler.gl/utils 3.0.0-alpha.0 → 3.0.0-alpha.1

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.
Files changed (55) hide show
  1. package/dist/aggregate-utils.js +2 -2
  2. package/dist/color-utils.d.ts +4 -0
  3. package/dist/color-utils.js +28 -3
  4. package/dist/data-container-interface.js +1 -1
  5. package/dist/data-container-utils.js +2 -2
  6. package/dist/data-row.js +2 -2
  7. package/dist/data-scale-utils.js +4 -4
  8. package/dist/data-utils.d.ts +10 -12
  9. package/dist/data-utils.js +120 -44
  10. package/dist/dataset-utils.d.ts +12 -1
  11. package/dist/dataset-utils.js +74 -9
  12. package/dist/dom-to-image.d.ts +14 -14
  13. package/dist/dom-to-image.js +23 -69
  14. package/dist/dom-utils.d.ts +3 -0
  15. package/dist/dom-utils.js +29 -3
  16. package/dist/effect-utils.d.ts +13 -0
  17. package/dist/effect-utils.js +129 -0
  18. package/dist/export-map-html.js +2 -2
  19. package/dist/export-utils.js +13 -4
  20. package/dist/filter-utils.d.ts +11 -9
  21. package/dist/filter-utils.js +66 -36
  22. package/dist/format.d.ts +1 -0
  23. package/dist/format.js +33 -0
  24. package/dist/gl-utils.js +2 -2
  25. package/dist/h3-utils.d.ts +2 -1
  26. package/dist/h3-utils.js +5 -4
  27. package/dist/index.d.ts +14 -9
  28. package/dist/index.js +230 -555
  29. package/dist/indexed-data-container.js +2 -2
  30. package/dist/locale-utils.js +2 -2
  31. package/dist/map-info-utils.js +2 -2
  32. package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +2 -1
  33. package/dist/map-style-utils/mapbox-gl-style-editor.js +9 -3
  34. package/dist/map-style-utils/mapbox-utils.js +2 -2
  35. package/dist/map-utils.d.ts +8 -2
  36. package/dist/map-utils.js +24 -7
  37. package/dist/mapbox-utils.js +2 -2
  38. package/dist/noop.d.ts +1 -0
  39. package/dist/noop.js +29 -0
  40. package/dist/notifications-utils.d.ts +14 -26
  41. package/dist/notifications-utils.js +9 -11
  42. package/dist/observe-dimensions.js +10 -6
  43. package/dist/plot.d.ts +6 -0
  44. package/dist/plot.js +46 -0
  45. package/dist/projection-utils.d.ts +9 -0
  46. package/dist/projection-utils.js +36 -2
  47. package/dist/row-data-container.js +2 -2
  48. package/dist/searcher-utils.js +2 -2
  49. package/dist/split-map-utils.d.ts +4 -1
  50. package/dist/split-map-utils.js +10 -4
  51. package/dist/time.d.ts +16 -0
  52. package/dist/time.js +105 -0
  53. package/dist/utils.d.ts +36 -10
  54. package/dist/utils.js +38 -6
  55. package/package.json +11 -11
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2022 Uber Technologies, Inc.
1
+ // Copyright (c) 2023 Uber Technologies, Inc.
2
2
  //
3
3
  // Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  // of this software and associated documentation files (the "Software"), to deal
@@ -28,9 +28,12 @@ Object.defineProperty(exports, "__esModule", {
28
28
  exports.findDefaultColorField = findDefaultColorField;
29
29
  exports.validateInputData = validateInputData;
30
30
  exports.getSampleForTypeAnalyze = getSampleForTypeAnalyze;
31
+ exports.isHexWkb = isHexWkb;
31
32
  exports.getFieldsFromData = getFieldsFromData;
32
33
  exports.renameDuplicateFields = renameDuplicateFields;
33
34
  exports.analyzerTypeToFieldType = analyzerTypeToFieldType;
35
+ exports.getFieldFormatLabels = getFieldFormatLabels;
36
+ exports.getFormatLabels = getFormatLabels;
34
37
  exports.ACCEPTED_ANALYZER_TYPES = exports.datasetColorMaker = void 0;
35
38
 
36
39
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
@@ -47,8 +50,12 @@ var _typeAnalyzer = require("type-analyzer");
47
50
 
48
51
  var _assert = _interopRequireDefault(require("assert"));
49
52
 
53
+ var _utils = require("./utils");
54
+
50
55
  var _dataUtils = require("./data-utils");
51
56
 
57
+ var _format = require("./format");
58
+
52
59
  var _d3Array = require("d3-array");
53
60
 
54
61
  var _colorUtils = require("./color-utils");
@@ -238,7 +245,7 @@ var IGNORE_DATA_TYPES = Object.keys(_typeAnalyzer.DATA_TYPES).filter(function (t
238
245
  */
239
246
 
240
247
  function validateInputData(data) {
241
- if (!(0, _dataUtils.isPlainObject)(data)) {
248
+ if (!(0, _utils.isPlainObject)(data)) {
242
249
  (0, _assert["default"])('addDataToMap Error: dataset.data cannot be null');
243
250
  return null;
244
251
  } else if (!Array.isArray(data.fields)) {
@@ -253,7 +260,7 @@ function validateInputData(data) {
253
260
  rows = data.rows; // check if all fields has name, format and type
254
261
 
255
262
  var allValid = fields.every(function (f, i) {
256
- if (!(0, _dataUtils.isPlainObject)(f)) {
263
+ if (!(0, _utils.isPlainObject)(f)) {
257
264
  (0, _assert["default"])("fields needs to be an array of object, but find ".concat((0, _typeof2["default"])(f)));
258
265
  fields[i] = {};
259
266
  }
@@ -379,6 +386,30 @@ function getSampleForTypeAnalyze(_ref2) {
379
386
  });
380
387
  return sample;
381
388
  }
389
+ /**
390
+ * Check if string is a valid Well-known binary (WKB) in HEX format
391
+ * https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry
392
+ *
393
+ * @param str input string
394
+ * @returns true if string is a valid WKB in HEX format
395
+ */
396
+
397
+
398
+ function isHexWkb(str) {
399
+ if (!str) return false; // check if the length of the string is even and is at least 10 characters long
400
+
401
+ if (str.length < 10 || str.length % 2 !== 0) {
402
+ return false;
403
+ } // check if first two characters are 00 or 01
404
+
405
+
406
+ if (!str.startsWith('00') && !str.startsWith('01')) {
407
+ return false;
408
+ } // check if the rest of the string is a valid hex
409
+
410
+
411
+ return /^[0-9a-fA-F]+$/.test(str.slice(2));
412
+ }
382
413
  /**
383
414
  * Analyze field types from data in `string` format, e.g. uploaded csv.
384
415
  * Assign `type`, `fieldIdx` and `format` (timestamp only) to each field
@@ -442,10 +473,14 @@ function getFieldsFromData(data, fieldOrder) {
442
473
  var fieldMeta = metadata.find(function (m) {
443
474
  return m.key === field;
444
475
  });
476
+ var type = fieldMeta.type;
477
+ var format = fieldMeta.format; // check if string is hex wkb
445
478
 
446
- var _ref3 = fieldMeta || {},
447
- type = _ref3.type,
448
- format = _ref3.format;
479
+ if (type === _typeAnalyzer.DATA_TYPES.STRING) {
480
+ type = data.some(function (d) {
481
+ return isHexWkb(d[name]);
482
+ }) ? _typeAnalyzer.DATA_TYPES.GEOMETRY : type;
483
+ }
449
484
 
450
485
  return {
451
486
  name: name,
@@ -543,10 +578,13 @@ function analyzerTypeToFieldType(aType) {
543
578
  case GEOMETRY:
544
579
  case GEOMETRY_FROM_STRING:
545
580
  case PAIR_GEOMETRY_FROM_STRING:
581
+ return _constants.ALL_FIELD_TYPES.geojson;
582
+
546
583
  case ARRAY:
584
+ return _constants.ALL_FIELD_TYPES.array;
585
+
547
586
  case OBJECT:
548
- // TODO: create a new data type for objects and arrays
549
- return _constants.ALL_FIELD_TYPES.geojson;
587
+ return _constants.ALL_FIELD_TYPES.object;
550
588
 
551
589
  case NUMBER:
552
590
  case STRING:
@@ -559,4 +597,31 @@ function analyzerTypeToFieldType(aType) {
559
597
  return _constants.ALL_FIELD_TYPES.string;
560
598
  }
561
599
  }
562
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhc2V0LXV0aWxzLnRzIl0sIm5hbWVzIjpbImdlbmVyYXRlQ29sb3IiLCJkYXRhc2V0Q29sb3JzIiwibWFwIiwiaGV4VG9SZ2IiLCJpbmRleCIsImxlbmd0aCIsImRhdGFzZXRDb2xvck1ha2VyIiwiRVhDTFVERURfREVGQVVMVF9GSUVMRFMiLCJNRVRSSUNfREVGQVVMVF9GSUVMRFMiLCJmaW5kRGVmYXVsdENvbG9yRmllbGQiLCJmaWVsZHMiLCJmaWVsZFBhaXJzIiwiZmllbGRzV2l0aG91dEV4Y2x1ZGVkIiwiZmlsdGVyIiwiZmllbGQiLCJ0eXBlIiwiQUxMX0ZJRUxEX1RZUEVTIiwicmVhbCIsImludGVnZXIiLCJmaW5kIiwicGFpciIsImxhdCIsInZhbHVlIiwibmFtZSIsImxuZyIsIm5vcm1hbGl6ZWRGaWVsZE5hbWUiLCJ0b0xvd2VyQ2FzZSIsImhhc0V4Y2x1ZGVkIiwiZiIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImhhc0luY2x1c2lvbiIsInNvcnRlZEZpZWxkcyIsInNvcnQiLCJsZWZ0IiwicmlnaHQiLCJub3JtYWxpemVkTGVmdCIsIm5vcm1hbGl6ZWRSaWdodCIsImxlZnRIYXNJbmNsdXNpb24iLCJmaW5kSW5kZXgiLCJyaWdodEhhc0luY2x1c2lvbiIsIkFDQ0VQVEVEX0FOQUxZWkVSX1RZUEVTIiwiQW5hbHl6ZXJEQVRBX1RZUEVTIiwiREFURSIsIlRJTUUiLCJEQVRFVElNRSIsIk5VTUJFUiIsIklOVCIsIkZMT0FUIiwiQk9PTEVBTiIsIlNUUklORyIsIkdFT01FVFJZIiwiR0VPTUVUUllfRlJPTV9TVFJJTkciLCJQQUlSX0dFT01FVFJZX0ZST01fU1RSSU5HIiwiWklQQ09ERSIsIkFSUkFZIiwiT0JKRUNUIiwiSUdOT1JFX0RBVEFfVFlQRVMiLCJPYmplY3QiLCJrZXlzIiwiaW5jbHVkZXMiLCJ2YWxpZGF0ZUlucHV0RGF0YSIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJyb3dzIiwiYWxsVmFsaWQiLCJldmVyeSIsImkiLCJKU09OIiwic3RyaW5naWZ5IiwiYW5hbHl6ZXJUeXBlIiwidGltZXN0YW1wIiwic2FtcGxlIiwiZmluZE5vbkVtcHR5Um93c0F0RmllbGQiLCJyIiwidHMiLCJhbmFseXplZFR5cGUiLCJBbmFseXplciIsImNvbXB1dGVDb2xNZXRhIiwiY2F0ZWdvcnkiLCJmb3JtYXQiLCJzYW1wbGVEYXRhIiwiZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUiLCJmaWVsZE9yZGVyIiwibWV0YSIsImdldEZpZWxkc0Zyb21EYXRhIiwidXBkYXRlZEZpZWxkcyIsImZpZWxkSWR4IiwidG90YWwiLCJwdXNoIiwic2FtcGxlQ291bnQiLCJNYXRoIiwibWluIiwiZCIsImZvckVhY2giLCJqIiwidHJpbSIsIm1ldGFkYXRhIiwicmVnZXgiLCJkYXRhVHlwZSIsImlnbm9yZWREYXRhVHlwZXMiLCJyZW5hbWVEdXBsaWNhdGVGaWVsZHMiLCJmaWVsZEJ5SW5kZXgiLCJyZXN1bHQiLCJmaWVsZE1ldGEiLCJtIiwia2V5IiwiaWQiLCJkaXNwbGF5TmFtZSIsImFuYWx5emVyVHlwZVRvRmllbGRUeXBlIiwidmFsdWVBY2Nlc3NvciIsImRjIiwidmFsdWVBdCIsInJlZHVjZSIsImFjY3UiLCJhbGxOYW1lcyIsImZpZWxkTmFtZSIsImNvdW50ZXIiLCJhVHlwZSIsImRhdGUiLCJnZW9qc29uIiwic3RyaW5nIiwiZ2xvYmFsQ29uc29sZSIsIndhcm4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7Ozs7O3dEQWlCVUEsYTs7QUFmVjtBQUNBO0FBQ0EsSUFBTUMsYUFBYSxHQUFHLENBQ3BCLFNBRG9CLEVBRXBCLFNBRm9CLEVBR3BCLFNBSG9CLEVBSXBCLFNBSm9CLEVBS3BCLFNBTG9CLEVBTXBCLFNBTm9CLEVBT3BCLFNBUG9CLEVBUXBCQyxHQVJvQixDQVFoQkMsb0JBUmdCLENBQXRCO0FBVUE7QUFDQTtBQUNBOztBQUNBLFNBQVVI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QU92RywyQkFBZ0IwRyxNQUF2QjtBQXpCSjtBQTJCRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7Y29uc29sZSBhcyBnbG9iYWxDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCB7QUxMX0ZJRUxEX1RZUEVTfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0FuYWx5emVyLCBEQVRBX1RZUEVTIGFzIEFuYWx5emVyREFUQV9UWVBFU30gZnJvbSAndHlwZS1hbmFseXplcic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7UHJvY2Vzc29yUmVzdWx0LCBSR0JDb2xvciwgUm93RGF0YSwgRmllbGQsIEZpZWxkUGFpcn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkLCBpc1BsYWluT2JqZWN0fSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtyYW5nZX0gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IHtoZXhUb1JnYn0gZnJvbSAnLi9jb2xvci11dGlscyc7XG5cbi8vIGFwcGx5IGEgY29sb3IgZm9yIGVhY2ggZGF0YXNldFxuLy8gdG8gdXNlIGFzIGxhYmVsIGNvbG9yc1xuY29uc3QgZGF0YXNldENvbG9ycyA9IFtcbiAgJyM4RjJGQkYnLFxuICAnIzAwNUNGRicsXG4gICcjQzA2Qzg0JyxcbiAgJyNGOEIxOTUnLFxuICAnIzU0N0E4MicsXG4gICcjM0VBQ0E4JyxcbiAgJyNBMkQ0QUInXG5dLm1hcChoZXhUb1JnYik7XG5cbi8qKlxuICogUmFuZG9tIGNvbG9yIGdlbmVyYXRvclxuICovXG5mdW5jdGlvbiogZ2VuZXJhdGVDb2xvcigpOiBHZW5lcmF0b3I8UkdCQ29sb3I+IHtcbiAgbGV0IGluZGV4ID0gMDtcbiAgd2hpbGUgKGluZGV4IDwgZGF0YXNldENvbG9ycy5sZW5ndGggKyAxKSB7XG4gICAgaWYgKGluZGV4ID09PSBkYXRhc2V0Q29sb3JzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICB5aWVsZCBkYXRhc2V0Q29sb3JzW2luZGV4KytdO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBkYXRhc2V0Q29sb3JNYWtlciA9IGdlbmVyYXRlQ29sb3IoKTtcblxuLyoqXG4gKiBGaWVsZCBuYW1lIHByZWZpeGVzIGFuZCBzdWZmaXhlcyB3aGljaCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWRcbiAqIGFzIG1ldHJpY3MuIEZpZWxkcyB3aWxsIHN0aWxsIGJlIGluY2x1ZGVkIGlmIGEgJ21ldHJpYyB3b3JkJ1xuICogaXMgZm91bmQgb24gdGhlIGZpZWxkIG5hbWUsIGhvd2V2ZXIuXG4gKi9cbmNvbnN0IEVYQ0xVREVEX0RFRkFVTFRfRklFTERTID0gW1xuICAvLyBTZXJpYWwgbnVtYmVycyBhbmQgaWRlbnRpZmljYXRpb24gbnVtYmVyc1xuICAnX2lkJyxcbiAgJ2lkJyxcbiAgJ2luZGV4JyxcbiAgJ3V1aWQnLFxuICAnZ3VpZCcsXG4gICd1aWQnLFxuICAnZ2lkJyxcbiAgJ3NlcmlhbCcsXG4gIC8vIEdlb2dyYXBoaWMgSURzIGFyZSB1bmxpa2VseSB0byBiZSBpbnRlcmVzdGluZyB0byBjb2xvclxuICAnemlwJyxcbiAgJ2NvZGUnLFxuICAncG9zdCcsXG4gICdyZWdpb24nLFxuICAnZmlwcycsXG4gICdjYmdzJyxcbiAgJ2gzJyxcbiAgJ3MyJyxcbiAgLy8gR2VvZ3JhcGhpYyBjb29yZHMgKGJ1dCBub3Qgei9lbGV2YXRpb24vYWx0aXR1ZGVcbiAgLy8gc2luY2UgdGhhdCBtaWdodCBiZSBhIG1ldHJpYylcbiAgJ2xhdCcsXG4gICdsb24nLFxuICAnbG5nJyxcbiAgJ2xhdGl0dWRlJyxcbiAgJ2xvbmdpdHVkZScsXG4gICdfeCcsXG4gICdfeSdcbl07XG5cbi8qKlxuICogUHJlZml4ZXMgYW5kIHN1ZmZpeGVzIHRoYXQgaW5kaWNhdGUgYSBmaWVsZCBpcyBhIG1ldHJpYy5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlc2UgYXJlIGluIG9yZGVyIG9mIHByZWZlcmVuY2UsIGZpcnN0IGJlaW5nXG4gKiBtb3N0IHByZWZlcnJlZC5cbiAqL1xuY29uc3QgTUVUUklDX0RFRkFVTFRfRklFTERTID0gW1xuICAnbWV0cmljJyxcbiAgJ3ZhbHVlJyxcbiAgJ3N1bScsXG4gICdjb3VudCcsXG4gICd1bmlxdWUnLFxuICAnbWVhbicsXG4gICdtb2RlJyxcbiAgJ21lZGlhbicsXG4gICdtYXgnLFxuICAnbWluJyxcbiAgJ2RldmlhdGlvbicsXG4gICd2YXJpYW5jZScsXG4gICdwOTknLFxuICAncDk1JyxcbiAgJ3A3NScsXG4gICdwNTAnLFxuICAncDI1JyxcbiAgJ3AwNScsXG4gIC8vIEFiYnJldmlhdGlvbnMgYXJlIGxlc3MgcHJlZmVycmVkXG4gICdjbnQnLFxuICAndmFsJ1xuXTtcblxuLyoqXG4gKiBDaG9vc2UgYSBmaWVsZCB0byB1c2UgYXMgdGhlIGRlZmF1bHQgY29sb3IgZmllbGQgb2YgYSBsYXllci5cbiAqXG4gKiBUaGUgaGV1cmlzdGljIGlzOlxuICpcbiAqIEZpcnN0LCBleGNsdWRlIGZpZWxkcyB0aGF0IGFyZSBvbiB0aGUgZXhjbHVzaW9uIGxpc3QgYW5kIGRvbid0XG4gKiBoYXZlIG5hbWVzIHRoYXQgc3VnZ2VzdCB0aGV5IGNvbnRhaW4gbWV0cmljcy4gQWxzbyBleGNsdWRlXG4gKiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBibGFuay5cbiAqXG4gKiBOZXh0LCBsb29rIGZvciBhIGZpZWxkIHRoYXQgaXMgb2YgcmVhbCB0eXBlIGFuZCBjb250YWlucyBvbmVcbiAqIG9mIHRoZSBwcmVmZXJyZWQgbmFtZXMgKGluIG9yZGVyIG9mIHRoZSBwcmVmZXJyZWQgbmFtZXMpLlxuICpcbiAqIE5leHQsIGxvb2sgZm9yIGEgZmllbGQgdGhhdCBpcyBvZiBpbnRlZ2VyIHR5cGUgYW5kIGNvbnRhaW5zXG4gKiBvbmUgb2YgdGhlIHByZWZlcnJlZCBuYW1lcyAoaW4gb3JkZXIgb2YgdGhlIHByZWZlcnJlZCBuYW1lcykuXG4gKlxuICogTmV4dCwgbG9vayBmb3IgdGhlIGZpcnN0IGZpZWxkIHRoYXQgaXMgb2YgcmVhbCB0eXBlIChpbiBvcmRlclxuICogb2YgZmllbGQgaW5kZXgpLlxuICpcbiAqIE5leHQsIGxvb2sgZm9yIHRoZSBmaXJzdCBmaWVsZCB0aGF0IGlzIG9mIGludGVnZXIgdHlwZSAoaW5cbiAqIG9yZGVyIG9mIGZpZWxkIGluZGV4KS5cbiAqXG4gKiBJdCdzIHBvc3NpYmxlIG5vIGZpZWxkIHdpbGwgYmUgY2hvc2VuIChpLmUuIGJlY2F1c2UgYWxsIGZpZWxkc1xuICogYXJlIHN0cmluZ3MuKVxuICpcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGVmYXVsdENvbG9yRmllbGQoe1xuICBmaWVsZHMsXG4gIGZpZWxkUGFpcnMgPSBbXVxufToge1xuICBmaWVsZHM6IEZpZWxkW107XG4gIGZpZWxkUGFpcnM6IEZpZWxkUGFpcltdO1xufSk6IG51bGwgfCBGaWVsZCB7XG4gIGNvbnN0IGZpZWxkc1dpdGhvdXRFeGNsdWRlZCA9IGZpZWxkcy5maWx0ZXIoZmllbGQgPT4ge1xuICAgIGlmIChmaWVsZC50eXBlICE9PSBBTExfRklFTERfVFlQRVMucmVhbCAmJiBmaWVsZC50eXBlICE9PSBBTExfRklFTERfVFlQRVMuaW50ZWdlcikge1xuICAgICAgLy8gT25seSBzZWxlY3QgbnVtZXJpYyBmaWVsZHMuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZpZWxkUGFpcnMuZmluZChcbiAgICAgICAgcGFpciA9PiBwYWlyLnBhaXIubGF0LnZhbHVlID09PSBmaWVsZC5uYW1lIHx8IHBhaXIucGFpci5sbmcudmFsdWUgPT09IGZpZWxkLm5hbWVcbiAgICAgIClcbiAgICApIHtcbiAgICAgIC8vIERvIG5vdCBwZXJtaXQgbGF0LCBsb24gZmllbGRzXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZEZpZWxkTmFtZSA9IGZpZWxkLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9ybWFsaXplZEZpZWxkTmFtZSA9PT0gJycpIHtcbiAgICAgIC8vIFNwZWNpYWwgY2FzZSBleGNsdWRlZCBuYW1lIHdoZW4gdGhlIG5hbWUgaXMgYmxhbmsuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGhhc0V4Y2x1ZGVkID0gRVhDTFVERURfREVGQVVMVF9GSUVMRFMuZmluZChcbiAgICAgIGYgPT4gbm9ybWFsaXplZEZpZWxkTmFtZS5zdGFydHNXaXRoKGYpIHx8IG5vcm1hbGl6ZWRGaWVsZE5hbWUuZW5kc1dpdGgoZilcbiAgICApO1xuICAgIGNvbnN0IGhhc0luY2x1c2lvbiA9IE1FVFJJQ19ERUZBVUxUX0ZJRUxEUy5maW5kKFxuICAgICAgZiA9PiBub3JtYWxpemVkRmllbGROYW1lLnN0YXJ0c1dpdGgoZikgfHwgbm9ybWFsaXplZEZpZWxkTmFtZS5lbmRzV2l0aChmKVxuICAgICk7XG4gICAgcmV0dXJuICFoYXNFeGNsdWRlZCB8fCBoYXNJbmNsdXNpb247XG4gIH0pO1xuXG4gIGNvbnN0IHNvcnRlZEZpZWxkcyA9IGZpZWxkc1dpdGhvdXRFeGNsdWRlZC5zb3J0KChsZWZ0LCByaWdodCkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRMZWZ0ID0gbGVmdC5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFJpZ2h0ID0gcmlnaHQubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGxlZnRIYXNJbmNsdXNpb24gPSBNRVRSSUNfREVGQVVMVF9GSUVMRFMuZmluZEluZGV4KFxuICAgICAgZiA9PiBub3JtYWxpemVkTGVmdC5zdGFydHNXaXRoKGYpIHx8IG5vcm1hbGl6ZWRMZWZ0LmVuZHNXaXRoKGYpXG4gICAgKTtcbiAgICBjb25zdCByaWdodEhhc0luY2x1c2lvbiA9IE1FVFJJQ19ERUZBVUxUX0ZJRUxEUy5maW5kSW5kZXgoXG4gICAgICBmID0+IG5vcm1hbGl6ZWRSaWdodC5zdGFydHNXaXRoKGYpIHx8IG5vcm1hbGl6ZWRSaWdodC5lbmRzV2l0aChmKVxuICAgICk7XG4gICAgaWYgKGxlZnRIYXNJbmNsdXNpb24gIT09IHJpZ2h0SGFzSW5jbHVzaW9uKSB7XG4gICAgICBpZiAobGVmdEhhc0luY2x1c2lvbiA9PT0gLTEpIHtcbiAgICAgICAgLy8gRWxlbWVudHMgdGhhdCBkbyBub3QgaGF2ZSB0aGUgaW5jbHVzaW9uIGxpc3Qgc2hvdWxkIGdvIGFmdGVyIHRob3NlIHRoYXQgZG8uXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChyaWdodEhhc0luY2x1c2lvbiA9PT0gLTEpIHtcbiAgICAgICAgLy8gRWxlbWVudHMgdGhhdCBkbyBoYXZlIHRoZSBpbmNsdXNpb24gbGlzdCBzaG91bGQgZ28gYmVmb3JlIHRob3NlIHRoYXQgZG9uJ3QuXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIC8vIENvbXBhcmUgYmFzZWQgb24gb3JkZXIgaW4gdGhlIGluY2x1c2lvbiBsaXN0XG4gICAgICByZXR1cm4gbGVmdEhhc0luY2x1c2lvbiAtIHJpZ2h0SGFzSW5jbHVzaW9uO1xuICAgIH1cblxuICAgIC8vIENvbXBhcmUgYmFzZWQgb24gdHlwZVxuICAgIGlmIChsZWZ0LnR5cGUgIT09IHJpZ2h0LnR5cGUpIHtcbiAgICAgIGlmIChsZWZ0LnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy5yZWFsKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIC8vIGxlZnQgaXMgYW4gaW50ZWdlciBhbmQgcmlnaHQgaXMgbm90XG4gICAgICAvLyBhbmQgcmVhbHMgY29tZSBiZWZvcmUgaW50ZWdlcnNcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIC8vIEZpbmFsbHksIG9yZGVyIGJhc2VkIG9uIHRoZSBvcmRlciBpbiB0aGUgZGF0YXNldHMgY29sdW1uc1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICB9KTtcblxuICBpZiAoc29ydGVkRmllbGRzLmxlbmd0aCkge1xuICAgIC8vIFRoZXJlIHdhcyBhIGJlc3QgbWF0Y2hcbiAgICByZXR1cm4gc29ydGVkRmllbGRzWzBdO1xuICB9XG4gIC8vIE5vIG1hdGNoZXNcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBBQ0NFUFRFRF9BTkFMWVpFUl9UWVBFUyA9IFtcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLkRBVEUsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5USU1FLFxuICBBbmFseXplckRBVEFfVFlQRVMuREFURVRJTUUsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5OVU1CRVIsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5JTlQsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5GTE9BVCxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLkJPT0xFQU4sXG4gIEFuYWx5emVyREFUQV9UWVBFUy5TVFJJTkcsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5HRU9NRVRSWSxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLkdFT01FVFJZX0ZST01fU1RSSU5HLFxuICBBbmFseXplckRBVEFfVFlQRVMuUEFJUl9HRU9NRVRSWV9GUk9NX1NUUklORyxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLlpJUENPREUsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5BUlJBWSxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLk9CSkVDVFxuXTtcblxuY29uc3QgSUdOT1JFX0RBVEFfVFlQRVMgPSBPYmplY3Qua2V5cyhBbmFseXplckRBVEFfVFlQRVMpLmZpbHRlcihcbiAgdHlwZSA9PiAhQUNDRVBURURfQU5BTFlaRVJfVFlQRVMuaW5jbHVkZXModHlwZSlcbik7XG5cbi8qKlxuICogVmFsaWRhdGUgaW5wdXQgZGF0YSwgYWRkaW5nIG1pc3NpbmcgZmllbGQgdHlwZXMsIHJlbmFtZSBkdXBsaWNhdGUgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbnB1dERhdGEoZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9jZXNzb3JSZXN1bHQge1xuICBpZiAoIWlzUGxhaW5PYmplY3QoZGF0YSkpIHtcbiAgICBhc3NlcnQoJ2FkZERhdGFUb01hcCBFcnJvcjogZGF0YXNldC5kYXRhIGNhbm5vdCBiZSBudWxsJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YS5maWVsZHMpKSB7XG4gICAgYXNzZXJ0KCdhZGREYXRhVG9NYXAgRXJyb3I6IGV4cGVjdCBkYXRhc2V0LmRhdGEuZmllbGRzIHRvIGJlIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YS5yb3dzKSkge1xuICAgIGFzc2VydCgnYWRkRGF0YVRvTWFwIEVycm9yOiBleHBlY3QgZGF0YXNldC5kYXRhLnJvd3MgdG8gYmUgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHtmaWVsZHMsIHJvd3N9ID0gZGF0YTtcblxuICAvLyBjaGVjayBpZiBhbGwgZmllbGRzIGhhcyBuYW1lLCBmb3JtYXQgYW5kIHR5cGVcbiAgY29uc3QgYWxsVmFsaWQgPSBmaWVsZHMuZXZlcnkoKGYsIGkpID0+IHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZikpIHtcbiAgICAgIGFzc2VydChgZmllbGRzIG5lZWRzIHRvIGJlIGFuIGFycmF5IG9mIG9iamVjdCwgYnV0IGZpbmQgJHt0eXBlb2YgZn1gKTtcbiAgICAgIGZpZWxkc1tpXSA9IHt9O1xuICAgIH1cblxuICAgIGlmICghZi5uYW1lKSB7XG4gICAgICBhc3NlcnQoYGZpZWxkLm5hbWUgaXMgcmVxdWlyZWQgYnV0IG1pc3NpbmcgaW4gJHtKU09OLnN0cmluZ2lmeShmKX1gKTtcbiAgICAgIC8vIGFzc2lnbiBhIG5hbWVcbiAgICAgIGZpZWxkc1tpXS5uYW1lID0gYGNvbHVtbl8ke2l9YDtcbiAgICB9XG5cbiAgICBpZiAoIUFMTF9GSUVMRF9UWVBFU1tmLnR5cGVdKSB7XG4gICAgICBhc3NlcnQoYHVua25vd24gZmllbGQgdHlwZSAke2YudHlwZX1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWZpZWxkcy5ldmVyeShmaWVsZCA9PiBmaWVsZC5hbmFseXplclR5cGUpKSB7XG4gICAgICBhc3NlcnQoJ2ZpZWxkIG1pc3NpbmcgYW5hbHl6ZXJUeXBlJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgdGltZSBmb3JtYXQgaXMgY29ycmVjdCBiYXNlZCBvbiBmaXJzdCAxMCBub3QgZW1wdHkgZWxlbWVudFxuICAgIGlmIChmLnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXApIHtcbiAgICAgIGNvbnN0IHNhbXBsZSA9IGZpbmROb25FbXB0eVJvd3NBdEZpZWxkKHJvd3MsIGksIDEwKS5tYXAociA9PiAoe3RzOiByW2ldfSkpO1xuICAgICAgY29uc3QgYW5hbHl6ZWRUeXBlID0gQW5hbHl6ZXIuY29tcHV0ZUNvbE1ldGEoc2FtcGxlKVswXTtcbiAgICAgIHJldHVybiBhbmFseXplZFR5cGUgJiYgYW5hbHl6ZWRUeXBlLmNhdGVnb3J5ID09PSAnVElNRScgJiYgYW5hbHl6ZWRUeXBlLmZvcm1hdCA9PT0gZi5mb3JtYXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIGlmIChhbGxWYWxpZCkge1xuICAgIHJldHVybiB7cm93cywgZmllbGRzfTtcbiAgfVxuXG4gIC8vIGlmIGFueSBmaWVsZCBoYXMgbWlzc2luZyB0eXBlLCByZWNhbGN1bGF0ZSBpdCBmb3IgZXZlcnlvbmVcbiAgLy8gYmVjYXVzZSB3ZSBzaW1wbHkgbG9zdCBmYWl0aCBpbiBodW1hbml0eVxuICBjb25zdCBzYW1wbGVEYXRhID0gZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUoe1xuICAgIGZpZWxkczogZmllbGRzLm1hcChmID0+IGYubmFtZSksXG4gICAgcm93c1xuICB9KTtcbiAgY29uc3QgZmllbGRPcmRlciA9IGZpZWxkcy5tYXAoZiA9PiBmLm5hbWUpO1xuICBjb25zdCBtZXRhID0gZ2V0RmllbGRzRnJvbURhdGEoc2FtcGxlRGF0YSwgZmllbGRPcmRlcik7XG4gIGNvbnN0IHVwZGF0ZWRGaWVsZHMgPSBmaWVsZHMubWFwKChmLCBpKSA9PiAoe1xuICAgIC4uLmYsXG4gICAgdHlwZTogbWV0YVtpXS50eXBlLFxuICAgIGZvcm1hdDogbWV0YVtpXS5mb3JtYXQsXG4gICAgYW5hbHl6ZXJUeXBlOiBtZXRhW2ldLmFuYWx5emVyVHlwZVxuICB9KSk7XG5cbiAgcmV0dXJuIHtmaWVsZHM6IHVwZGF0ZWRGaWVsZHMsIHJvd3N9O1xufVxuXG5mdW5jdGlvbiBmaW5kTm9uRW1wdHlSb3dzQXRGaWVsZChyb3dzOiB1bmtub3duW11bXSwgZmllbGRJZHg6IG51bWJlciwgdG90YWw6IG51bWJlcik6IGFueVtdIHtcbiAgY29uc3Qgc2FtcGxlOiBhbnlbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChzYW1wbGUubGVuZ3RoIDwgdG90YWwgJiYgaSA8IHJvd3MubGVuZ3RoKSB7XG4gICAgaWYgKG5vdE51bGxvclVuZGVmaW5lZChyb3dzW2ldPy5bZmllbGRJZHhdKSkge1xuICAgICAgc2FtcGxlLnB1c2gocm93c1tpXSk7XG4gICAgfVxuICAgIGkrKztcbiAgfVxuICByZXR1cm4gc2FtcGxlO1xufVxuLyoqXG4gKiBHZXR0aW5nIHNhbXBsZSBkYXRhIGZvciBhbmFseXppbmcgZmllbGQgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNhbXBsZUZvclR5cGVBbmFseXplKHtcbiAgZmllbGRzLFxuICByb3dzLFxuICBzYW1wbGVDb3VudCA9IDUwXG59OiB7XG4gIGZpZWxkczogc3RyaW5nW107XG4gIHJvd3M6IHVua25vd25bXVtdO1xuICBzYW1wbGVDb3VudD86IG51bWJlcjtcbn0pOiBSb3dEYXRhIHtcbiAgY29uc3QgdG90YWwgPSBNYXRoLm1pbihzYW1wbGVDb3VudCwgcm93cy5sZW5ndGgpO1xuICAvLyBjb25zdCBmaWVsZE9yZGVyID0gZmllbGRzLm1hcChmID0+IGYubmFtZSk7XG4gIGNvbnN0IHNhbXBsZSA9IHJhbmdlKDAsIHRvdGFsLCAxKS5tYXAoZCA9PiAoe30pKTtcblxuICAvLyBjb2xsZWN0IHNhbXBsZSBkYXRhIGZvciBlYWNoIGZpZWxkXG4gIGZpZWxkcy5mb3JFYWNoKChmaWVsZCwgZmllbGRJZHgpID0+IHtcbiAgICAvLyBkYXRhIGNvdW50ZXJcbiAgICBsZXQgaSA9IDA7XG4gICAgLy8gc2FtcGxlIGNvdW50ZXJcbiAgICBsZXQgaiA9IDA7XG5cbiAgICB3aGlsZSAoaiA8IHRvdGFsKSB7XG4gICAgICBpZiAoaSA+PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAvLyBpZiBkZXBsZXRlZCBkYXRhIHBvb2xcbiAgICAgICAgc2FtcGxlW2pdW2ZpZWxkXSA9IG51bGw7XG4gICAgICAgIGorKztcbiAgICAgIH0gZWxzZSBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHJvd3NbaV1bZmllbGRJZHhdKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd3NbaV1bZmllbGRJZHhdO1xuICAgICAgICBzYW1wbGVbal1bZmllbGRdID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRyaW0oKSA6IHZhbHVlO1xuICAgICAgICBqKys7XG4gICAgICAgIGkrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzYW1wbGU7XG59XG5cbi8qKlxuICogQW5hbHl6ZSBmaWVsZCB0eXBlcyBmcm9tIGRhdGEgaW4gYHN0cmluZ2AgZm9ybWF0LCBlLmcuIHVwbG9hZGVkIGNzdi5cbiAqIEFzc2lnbiBgdHlwZWAsIGBmaWVsZElkeGAgYW5kIGBmb3JtYXRgICh0aW1lc3RhbXAgb25seSkgdG8gZWFjaCBmaWVsZFxuICpcbiAqIEBwYXJhbSBkYXRhIGFycmF5IG9mIHJvdyBvYmplY3RcbiAqIEBwYXJhbSBmaWVsZE9yZGVyIGFycmF5IG9mIGZpZWxkIG5hbWVzIGFzIHN0cmluZ1xuICogQHJldHVybnMgZm9ybWF0dGVkIGZpZWxkc1xuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQge2dldEZpZWxkc0Zyb21EYXRhfSBmcm9tICdrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG4gKiBjb25zdCBkYXRhID0gW3tcbiAqICAgdGltZTogJzIwMTYtMDktMTcgMDA6MDk6NTUnLFxuICogICB2YWx1ZTogJzQnLFxuICogICBzdXJnZTogJzEuMicsXG4gKiAgIGlzVHJpcDogJ3RydWUnLFxuICogICB6ZXJvT25lczogJzAnXG4gKiB9LCB7XG4gKiAgIHRpbWU6ICcyMDE2LTA5LTE3IDAwOjMwOjA4JyxcbiAqICAgdmFsdWU6ICczJyxcbiAqICAgc3VyZ2U6IG51bGwsXG4gKiAgIGlzVHJpcDogJ2ZhbHNlJyxcbiAqICAgemVyb09uZXM6ICcxJ1xuICogfSwge1xuICogICB0aW1lOiBudWxsLFxuICogICB2YWx1ZTogJzInLFxuICogICBzdXJnZTogJzEuMycsXG4gKiAgIGlzVHJpcDogbnVsbCxcbiAqICAgemVyb09uZXM6ICcxJ1xuICogfV07XG4gKlxuICogY29uc3QgZmllbGRPcmRlciA9IFsndGltZScsICd2YWx1ZScsICdzdXJnZScsICdpc1RyaXAnLCAnemVyb09uZXMnXTtcbiAqIGNvbnN0IGZpZWxkcyA9IGdldEZpZWxkc0Zyb21EYXRhKGRhdGEsIGZpZWxkT3JkZXIpO1xuICogLy8gZmllbGRzID0gW1xuICogLy8ge25hbWU6ICd0aW1lJywgZm9ybWF0OiAnWVlZWS1NLUQgSDptOnMnLCBmaWVsZElkeDogMSwgdHlwZTogJ3RpbWVzdGFtcCd9LFxuICogLy8ge25hbWU6ICd2YWx1ZScsIGZvcm1hdDogJycsIGZpZWxkSWR4OiA0LCB0eXBlOiAnaW50ZWdlcid9LFxuICogLy8ge25hbWU6ICdzdXJnZScsIGZvcm1hdDogJycsIGZpZWxkSWR4OiA1LCB0eXBlOiAncmVhbCd9LFxuICogLy8ge25hbWU6ICdpc1RyaXAnLCBmb3JtYXQ6ICcnLCBmaWVsZElkeDogNiwgdHlwZTogJ2Jvb2xlYW4nfSxcbiAqIC8vIHtuYW1lOiAnemVyb09uZXMnLCBmb3JtYXQ6ICcnLCBmaWVsZElkeDogNywgdHlwZTogJ2ludGVnZXInfV07XG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRzRnJvbURhdGEoZGF0YTogUm93RGF0YSwgZmllbGRPcmRlcjogc3RyaW5nW10pOiBGaWVsZFtdIHtcbiAgLy8gYWRkIGEgY2hlY2sgZm9yIGVwb2NoIHRpbWVzdGFtcFxuICBjb25zdCBtZXRhZGF0YSA9IEFuYWx5emVyLmNvbXB1dGVDb2xNZXRhKFxuICAgIGRhdGEsXG4gICAgW1xuICAgICAge3JlZ2V4OiAvLipnZW9qc29ufGFsbF9wb2ludHMvZywgZGF0YVR5cGU6ICdHRU9NRVRSWSd9LFxuICAgICAge3JlZ2V4OiAvLipjZW5zdXMvZywgZGF0YVR5cGU6ICdTVFJJTkcnfVxuICAgIF0sXG4gICAge2lnbm9yZWREYXRhVHlwZXM6IElHTk9SRV9EQVRBX1RZUEVTfVxuICApO1xuXG4gIGNvbnN0IHtmaWVsZEJ5SW5kZXh9ID0gcmVuYW1lRHVwbGljYXRlRmllbGRzKGZpZWxkT3JkZXIpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGZpZWxkT3JkZXIubWFwKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBuYW1lID0gZmllbGRCeUluZGV4W2luZGV4XTtcblxuICAgIGNvbnN0IGZpZWxkTWV0YSA9IG1ldGFkYXRhLmZpbmQobSA9PiBtLmtleSA9PT0gZmllbGQpO1xuICAgIGNvbnN0IHt0eXBlLCBmb3JtYXR9ID0gZmllbGRNZXRhIHx8IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBpZDogbmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lOiBuYW1lLFxuICAgICAgZm9ybWF0LFxuICAgICAgZmllbGRJZHg6IGluZGV4LFxuICAgICAgdHlwZTogYW5hbHl6ZXJUeXBlVG9GaWVsZFR5cGUodHlwZSksXG4gICAgICBhbmFseXplclR5cGU6IHR5cGUsXG4gICAgICB2YWx1ZUFjY2Vzc29yOiBkYyA9PiBkID0+IHtcbiAgICAgICAgcmV0dXJuIGRjLnZhbHVlQXQoZC5pbmRleCwgaW5kZXgpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogcGFzcyBpbiBhbiBhcnJheSBvZiBmaWVsZCBuYW1lcywgcmVuYW1lIGR1cGxpY2F0ZWQgb25lXG4gKiBhbmQgcmV0dXJuIGEgbWFwIGZyb20gb2xkIGZpZWxkIGluZGV4IHRvIG5ldyBuYW1lXG4gKlxuICogQHBhcmFtIGZpZWxkT3JkZXJcbiAqIEByZXR1cm5zIG5ldyBmaWVsZCBuYW1lIGJ5IGluZGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEdXBsaWNhdGVGaWVsZHMoXG4gIGZpZWxkT3JkZXI6IHN0cmluZ1tdXG4pOiB7YWxsTmFtZXM6IHN0cmluZ1tdOyBmaWVsZEJ5SW5kZXg6IHN0cmluZ1tdfSB7XG4gIHJldHVybiBmaWVsZE9yZGVyLnJlZHVjZTx7YWxsTmFtZXM6IHN0cmluZ1tdOyBmaWVsZEJ5SW5kZXg6IHN0cmluZ1tdfT4oXG4gICAgKGFjY3UsIGZpZWxkLCBpKSA9PiB7XG4gICAgICBjb25zdCB7YWxsTmFtZXN9ID0gYWNjdTtcbiAgICAgIGxldCBmaWVsZE5hbWUgPSBmaWVsZDtcblxuICAgICAgLy8gYWRkIGEgY291bnRlciB0byBkdXBsaWNhdGVkIG5hbWVzXG4gICAgICBpZiAoYWxsTmFtZXMuaW5jbHVkZXMoZmllbGQpKSB7XG4gICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgd2hpbGUgKGFsbE5hbWVzLmluY2x1ZGVzKGAke2ZpZWxkfS0ke2NvdW50ZXJ9YCkpIHtcbiAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIH1cbiAgICAgICAgZmllbGROYW1lID0gYCR7ZmllbGR9LSR7Y291bnRlcn1gO1xuICAgICAgfVxuXG4gICAgICBhY2N1LmZpZWxkQnlJbmRleFtpXSA9IGZpZWxkTmFtZTtcbiAgICAgIGFjY3UuYWxsTmFtZXMucHVzaChmaWVsZE5hbWUpO1xuXG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LFxuICAgIHthbGxOYW1lczogW10sIGZpZWxkQnlJbmRleDogW119XG4gICk7XG59XG5cbi8qKlxuICogQ29udmVydCB0eXBlLWFuYWx5emVyIG91dHB1dCB0byBrZXBsZXIuZ2wgZmllbGQgdHlwZXNcbiAqXG4gKiBAcGFyYW0gYVR5cGVcbiAqIEByZXR1cm5zIGNvcnJlc3BvbmRpbmcgdHlwZSBpbiBgQUxMX0ZJRUxEX1RZUEVTYFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl6ZXJUeXBlVG9GaWVsZFR5cGUoYVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBEQVRFLFxuICAgIFRJTUUsXG4gICAgREFURVRJTUUsXG4gICAgTlVNQkVSLFxuICAgIElOVCxcbiAgICBGTE9BVCxcbiAgICBCT09MRUFOLFxuICAgIFNUUklORyxcbiAgICBHRU9NRVRSWSxcbiAgICBHRU9NRVRSWV9GUk9NX1NUUklORyxcbiAgICBQQUlSX0dFT01FVFJZX0ZST01fU1RSSU5HLFxuICAgIFpJUENPREUsXG4gICAgQVJSQVksXG4gICAgT0JKRUNUXG4gIH0gPSBBbmFseXplckRBVEFfVFlQRVM7XG5cbiAgLy8gVE9ETzogdW4gcmVjb2duaXplZCB0eXBlc1xuICAvLyBDVVJSRU5DWSBQRVJDRU5UIE5PTkVcbiAgc3dpdGNoIChhVHlwZSkge1xuICAgIGNhc2UgREFURTpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuZGF0ZTtcbiAgICBjYXNlIFRJTUU6XG4gICAgY2FzZSBEQVRFVElNRTpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMudGltZXN0YW1wO1xuICAgIGNhc2UgRkxPQVQ6XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLnJlYWw7XG4gICAgY2FzZSBJTlQ6XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI7XG4gICAgY2FzZSBCT09MRUFOOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5ib29sZWFuO1xuICAgIGNhc2UgR0VPTUVUUlk6XG4gICAgY2FzZSBHRU9NRVRSWV9GUk9NX1NUUklORzpcbiAgICBjYXNlIFBBSVJfR0VPTUVUUllfRlJPTV9TVFJJTkc6XG4gICAgY2FzZSBBUlJBWTpcbiAgICBjYXNlIE9CSkVDVDpcbiAgICAgIC8vIFRPRE86IGNyZWF0ZSBhIG5ldyBkYXRhIHR5cGUgZm9yIG9iamVjdHMgYW5kIGFycmF5c1xuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5nZW9qc29uO1xuICAgIGNhc2UgTlVNQkVSOlxuICAgIGNhc2UgU1RSSU5HOlxuICAgIGNhc2UgWklQQ09ERTpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuc3RyaW5nO1xuICAgIGRlZmF1bHQ6XG4gICAgICBnbG9iYWxDb25zb2xlLndhcm4oYFVuc3VwcG9ydGVkIGFuYWx5emVyIHR5cGU6ICR7YVR5cGV9YCk7XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLnN0cmluZztcbiAgfVxufVxuIl19
600
+
601
+ var TIME_DISPLAY = '2020-05-11 14:00';
602
+
603
+ var addTimeLabel = function addTimeLabel(formats) {
604
+ return formats.map(function (f) {
605
+ return _objectSpread(_objectSpread({}, f), {}, {
606
+ label: f.type === _constants.TOOLTIP_FORMAT_TYPES.DATE_TIME || f.type === _constants.TOOLTIP_FORMAT_TYPES.DATE ? (0, _dataUtils.getFormatter)((0, _format.getFormatValue)(f))(TIME_DISPLAY) : f.label
607
+ });
608
+ });
609
+ };
610
+
611
+ function getFieldFormatLabels(fieldType) {
612
+ var tooltipTypes = fieldType && _constants.FIELD_OPTS[fieldType].format.tooltip || [];
613
+ var formatLabels = Object.values(_constants.TOOLTIP_FORMATS).filter(function (t) {
614
+ return tooltipTypes.includes(t.type);
615
+ });
616
+ return addTimeLabel(formatLabels);
617
+ }
618
+
619
+ function getFormatLabels(fields, fieldName) {
620
+ var _fields$find;
621
+
622
+ var fieldType = (_fields$find = fields.find(function (f) {
623
+ return f.name === fieldName;
624
+ })) === null || _fields$find === void 0 ? void 0 : _fields$find.type;
625
+ return getFieldFormatLabels(fieldType);
626
+ }
627
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhc2V0LXV0aWxzLnRzIl0sIm5hbWVzIjpbImdlbmVyYXRlQ29sb3IiLCJkYXRhc2V0Q29sb3JzIiwibWFwIiwiaGV4VG9SZ2IiLCJpbmRleCIsImxlbmd0aCIsImRhdGFzZXRDb2xvck1ha2VyIiwiRVhDTFVERURfREVGQVVMVF9GSUVMRFMiLCJNRVRSSUNfREVGQVVMVF9GSUVMRFMiLCJmaW5kRGVmYXVsdENvbG9yRmllbGQiLCJmaWVsZHMiLCJmaWVsZFBhaXJzIiwiZmllbGRzV2l0aG91dEV4Y2x1ZGVkIiwiZmlsdGVyIiwiZmllbGQiLCJ0eXBlIiwiQUxMX0ZJRUxEX1RZUEVTIiwicmVhbCIsImludGVnZXIiLCJmaW5kIiwicGFpciIsImxhdCIsInZhbHVlIiwibmFtZSIsImxuZyIsIm5vcm1hbGl6ZWRGaWVsZE5hbWUiLCJ0b0xvd2VyQ2FzZSIsImhhc0V4Y2x1ZGVkIiwiZiIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImhhc0luY2x1c2lvbiIsInNvcnRlZEZpZWxkcyIsInNvcnQiLCJsZWZ0IiwicmlnaHQiLCJub3JtYWxpemVkTGVmdCIsIm5vcm1hbGl6ZWRSaWdodCIsImxlZnRIYXNJbmNsdXNpb24iLCJmaW5kSW5kZXgiLCJyaWdodEhhc0luY2x1c2lvbiIsIkFDQ0VQVEVEX0FOQUxZWkVSX1RZUEVTIiwiQW5hbHl6ZXJEQVRBX1RZUEVTIiwiREFURSIsIlRJTUUiLCJEQVRFVElNRSIsIk5VTUJFUiIsIklOVCIsIkZMT0FUIiwiQk9PTEVBTiIsIlNUUklORyIsIkdFT01FVFJZIiwiR0VPTUVUUllfRlJPTV9TVFJJTkciLCJQQUlSX0dFT01FVFJZX0ZST01fU1RSSU5HIiwiWklQQ09ERSIsIkFSUkFZIiwiT0JKRUNUIiwiSUdOT1JFX0RBVEFfVFlQRVMiLCJPYmplY3QiLCJrZXlzIiwiaW5jbHVkZXMiLCJ2YWxpZGF0ZUlucHV0RGF0YSIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJyb3dzIiwiYWxsVmFsaWQiLCJldmVyeSIsImkiLCJKU09OIiwic3RyaW5naWZ5IiwiYW5hbHl6ZXJUeXBlIiwidGltZXN0YW1wIiwic2FtcGxlIiwiZmluZE5vbkVtcHR5Um93c0F0RmllbGQiLCJyIiwidHMiLCJhbmFseXplZFR5cGUiLCJBbmFseXplciIsImNvbXB1dGVDb2xNZXRhIiwiY2F0ZWdvcnkiLCJmb3JtYXQiLCJzYW1wbGVEYXRhIiwiZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUiLCJmaWVsZE9yZGVyIiwibWV0YSIsImdldEZpZWxkc0Zyb21EYXRhIiwidXBkYXRlZEZpZWxkcyIsImZpZWxkSWR4IiwidG90YWwiLCJwdXNoIiwic2FtcGxlQ291bnQiLCJNYXRoIiwibWluIiwiZCIsImZvckVhY2giLCJqIiwidHJpbSIsImlzSGV4V2tiIiwic3RyIiwidGVzdCIsInNsaWNlIiwibWV0YWRhdGEiLCJyZWdleCIsImRhdGFUeXBlIiwiaWdub3JlZERhdGFUeXBlcyIsInJlbmFtZUR1cGxpY2F0ZUZpZWxkcyIsImZpZWxkQnlJbmRleCIsInJlc3VsdCIsImZpZWxkTWV0YSIsIm0iLCJrZXkiLCJzb21lIiwiaWQiLCJkaXNwbGF5TmFtZSIsImFuYWx5emVyVHlwZVRvRmllbGRUeXBlIiwidmFsdWVBY2Nlc3NvciIsImRjIiwidmFsdWVBdCIsInJlZHVjZSIsImFjY3UiLCJhbGxOYW1lcyIsImZpZWxkTmFtZSIsImNvdW50ZXIiLCJhVHlwZSIsImRhdGUiLCJnZW9qc29uIiwiYXJyYXkiLCJvYmplY3QiLCJzdHJpbmciLCJnbG9iYWxDb25zb2xlIiwid2FybiIsIlRJTUVfRElTUExBWSIsImFkZFRpbWVMYWJlbCIsImZvcm1hdHMiLCJsYWJlbCIsIlRPT0xUSVBfRk9STUFUX1RZUEVTIiwiREFURV9USU1FIiwiZ2V0RmllbGRGb3JtYXRMYWJlbHMiLCJmaWVsZFR5cGUiLCJ0b29sdGlwVHlwZXMiLCJGSUVMRF9PUFRTIiwidG9vbHRpcCIsImZvcm1hdExhYmVscyIsInZhbHVlcyIsIlRPT0xUSVBfRk9STUFUUyIsInQiLCJnZXRGb3Jt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SUFBUCxDQUFZLFVBQUFTLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUNMLElBQUYsS0FBV21HLFNBQWY7QUFBQSxHQUFiLENBQUgsaURBQUcsYUFBd0MzRyxJQUExRDtBQUNBLFNBQU8ySCxvQkFBb0IsQ0FBQ0MsU0FBRCxDQUEzQjtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtjb25zb2xlIGFzIGdsb2JhbENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBGSUVMRF9PUFRTLFxuICBUT09MVElQX0ZPUk1BVFMsXG4gIFRPT0xUSVBfRk9STUFUX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7QW5hbHl6ZXIsIERBVEFfVFlQRVMgYXMgQW5hbHl6ZXJEQVRBX1RZUEVTfSBmcm9tICd0eXBlLWFuYWx5emVyJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtcbiAgUHJvY2Vzc29yUmVzdWx0LFxuICBSR0JDb2xvcixcbiAgUm93RGF0YSxcbiAgRmllbGQsXG4gIEZpZWxkUGFpcixcbiAgVGltZUxhYmVsRm9ybWF0LFxuICBUb29sdGlwRmllbGRzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtUb29sdGlwRm9ybWF0fSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZCwgZ2V0Rm9ybWF0dGVyfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtnZXRGb3JtYXRWYWx1ZX0gZnJvbSAnLi9mb3JtYXQnO1xuaW1wb3J0IHtyYW5nZX0gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IHtoZXhUb1JnYn0gZnJvbSAnLi9jb2xvci11dGlscyc7XG5cbi8vIGFwcGx5IGEgY29sb3IgZm9yIGVhY2ggZGF0YXNldFxuLy8gdG8gdXNlIGFzIGxhYmVsIGNvbG9yc1xuY29uc3QgZGF0YXNldENvbG9ycyA9IFtcbiAgJyM4RjJGQkYnLFxuICAnIzAwNUNGRicsXG4gICcjQzA2Qzg0JyxcbiAgJyNGOEIxOTUnLFxuICAnIzU0N0E4MicsXG4gICcjM0VBQ0E4JyxcbiAgJyNBMkQ0QUInXG5dLm1hcChoZXhUb1JnYik7XG5cbi8qKlxuICogUmFuZG9tIGNvbG9yIGdlbmVyYXRvclxuICovXG5mdW5jdGlvbiogZ2VuZXJhdGVDb2xvcigpOiBHZW5lcmF0b3I8UkdCQ29sb3I+IHtcbiAgbGV0IGluZGV4ID0gMDtcbiAgd2hpbGUgKGluZGV4IDwgZGF0YXNldENvbG9ycy5sZW5ndGggKyAxKSB7XG4gICAgaWYgKGluZGV4ID09PSBkYXRhc2V0Q29sb3JzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICB5aWVsZCBkYXRhc2V0Q29sb3JzW2luZGV4KytdO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBkYXRhc2V0Q29sb3JNYWtlciA9IGdlbmVyYXRlQ29sb3IoKTtcblxuLyoqXG4gKiBGaWVsZCBuYW1lIHByZWZpeGVzIGFuZCBzdWZmaXhlcyB3aGljaCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWRcbiAqIGFzIG1ldHJpY3MuIEZpZWxkcyB3aWxsIHN0aWxsIGJlIGluY2x1ZGVkIGlmIGEgJ21ldHJpYyB3b3JkJ1xuICogaXMgZm91bmQgb24gdGhlIGZpZWxkIG5hbWUsIGhvd2V2ZXIuXG4gKi9cbmNvbnN0IEVYQ0xVREVEX0RFRkFVTFRfRklFTERTID0gW1xuICAvLyBTZXJpYWwgbnVtYmVycyBhbmQgaWRlbnRpZmljYXRpb24gbnVtYmVyc1xuICAnX2lkJyxcbiAgJ2lkJyxcbiAgJ2luZGV4JyxcbiAgJ3V1aWQnLFxuICAnZ3VpZCcsXG4gICd1aWQnLFxuICAnZ2lkJyxcbiAgJ3NlcmlhbCcsXG4gIC8vIEdlb2dyYXBoaWMgSURzIGFyZSB1bmxpa2VseSB0byBiZSBpbnRlcmVzdGluZyB0byBjb2xvclxuICAnemlwJyxcbiAgJ2NvZGUnLFxuICAncG9zdCcsXG4gICdyZWdpb24nLFxuICAnZmlwcycsXG4gICdjYmdzJyxcbiAgJ2gzJyxcbiAgJ3MyJyxcbiAgLy8gR2VvZ3JhcGhpYyBjb29yZHMgKGJ1dCBub3Qgei9lbGV2YXRpb24vYWx0aXR1ZGVcbiAgLy8gc2luY2UgdGhhdCBtaWdodCBiZSBhIG1ldHJpYylcbiAgJ2xhdCcsXG4gICdsb24nLFxuICAnbG5nJyxcbiAgJ2xhdGl0dWRlJyxcbiAgJ2xvbmdpdHVkZScsXG4gICdfeCcsXG4gICdfeSdcbl07XG5cbi8qKlxuICogUHJlZml4ZXMgYW5kIHN1ZmZpeGVzIHRoYXQgaW5kaWNhdGUgYSBmaWVsZCBpcyBhIG1ldHJpYy5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlc2UgYXJlIGluIG9yZGVyIG9mIHByZWZlcmVuY2UsIGZpcnN0IGJlaW5nXG4gKiBtb3N0IHByZWZlcnJlZC5cbiAqL1xuY29uc3QgTUVUUklDX0RFRkFVTFRfRklFTERTID0gW1xuICAnbWV0cmljJyxcbiAgJ3ZhbHVlJyxcbiAgJ3N1bScsXG4gICdjb3VudCcsXG4gICd1bmlxdWUnLFxuICAnbWVhbicsXG4gICdtb2RlJyxcbiAgJ21lZGlhbicsXG4gICdtYXgnLFxuICAnbWluJyxcbiAgJ2RldmlhdGlvbicsXG4gICd2YXJpYW5jZScsXG4gICdwOTknLFxuICAncDk1JyxcbiAgJ3A3NScsXG4gICdwNTAnLFxuICAncDI1JyxcbiAgJ3AwNScsXG4gIC8vIEFiYnJldmlhdGlvbnMgYXJlIGxlc3MgcHJlZmVycmVkXG4gICdjbnQnLFxuICAndmFsJ1xuXTtcblxuLyoqXG4gKiBDaG9vc2UgYSBmaWVsZCB0byB1c2UgYXMgdGhlIGRlZmF1bHQgY29sb3IgZmllbGQgb2YgYSBsYXllci5cbiAqXG4gKiBUaGUgaGV1cmlzdGljIGlzOlxuICpcbiAqIEZpcnN0LCBleGNsdWRlIGZpZWxkcyB0aGF0IGFyZSBvbiB0aGUgZXhjbHVzaW9uIGxpc3QgYW5kIGRvbid0XG4gKiBoYXZlIG5hbWVzIHRoYXQgc3VnZ2VzdCB0aGV5IGNvbnRhaW4gbWV0cmljcy4gQWxzbyBleGNsdWRlXG4gKiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBibGFuay5cbiAqXG4gKiBOZXh0LCBsb29rIGZvciBhIGZpZWxkIHRoYXQgaXMgb2YgcmVhbCB0eXBlIGFuZCBjb250YWlucyBvbmVcbiAqIG9mIHRoZSBwcmVmZXJyZWQgbmFtZXMgKGluIG9yZGVyIG9mIHRoZSBwcmVmZXJyZWQgbmFtZXMpLlxuICpcbiAqIE5leHQsIGxvb2sgZm9yIGEgZmllbGQgdGhhdCBpcyBvZiBpbnRlZ2VyIHR5cGUgYW5kIGNvbnRhaW5zXG4gKiBvbmUgb2YgdGhlIHByZWZlcnJlZCBuYW1lcyAoaW4gb3JkZXIgb2YgdGhlIHByZWZlcnJlZCBuYW1lcykuXG4gKlxuICogTmV4dCwgbG9vayBmb3IgdGhlIGZpcnN0IGZpZWxkIHRoYXQgaXMgb2YgcmVhbCB0eXBlIChpbiBvcmRlclxuICogb2YgZmllbGQgaW5kZXgpLlxuICpcbiAqIE5leHQsIGxvb2sgZm9yIHRoZSBmaXJzdCBmaWVsZCB0aGF0IGlzIG9mIGludGVnZXIgdHlwZSAoaW5cbiAqIG9yZGVyIG9mIGZpZWxkIGluZGV4KS5cbiAqXG4gKiBJdCdzIHBvc3NpYmxlIG5vIGZpZWxkIHdpbGwgYmUgY2hvc2VuIChpLmUuIGJlY2F1c2UgYWxsIGZpZWxkc1xuICogYXJlIHN0cmluZ3MuKVxuICpcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGVmYXVsdENvbG9yRmllbGQoe1xuICBmaWVsZHMsXG4gIGZpZWxkUGFpcnMgPSBbXVxufToge1xuICBmaWVsZHM6IEZpZWxkW107XG4gIGZpZWxkUGFpcnM6IEZpZWxkUGFpcltdO1xufSk6IG51bGwgfCBGaWVsZCB7XG4gIGNvbnN0IGZpZWxkc1dpdGhvdXRFeGNsdWRlZCA9IGZpZWxkcy5maWx0ZXIoZmllbGQgPT4ge1xuICAgIGlmIChmaWVsZC50eXBlICE9PSBBTExfRklFTERfVFlQRVMucmVhbCAmJiBmaWVsZC50eXBlICE9PSBBTExfRklFTERfVFlQRVMuaW50ZWdlcikge1xuICAgICAgLy8gT25seSBzZWxlY3QgbnVtZXJpYyBmaWVsZHMuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZpZWxkUGFpcnMuZmluZChcbiAgICAgICAgcGFpciA9PiBwYWlyLnBhaXIubGF0LnZhbHVlID09PSBmaWVsZC5uYW1lIHx8IHBhaXIucGFpci5sbmcudmFsdWUgPT09IGZpZWxkLm5hbWVcbiAgICAgIClcbiAgICApIHtcbiAgICAgIC8vIERvIG5vdCBwZXJtaXQgbGF0LCBsb24gZmllbGRzXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZEZpZWxkTmFtZSA9IGZpZWxkLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9ybWFsaXplZEZpZWxkTmFtZSA9PT0gJycpIHtcbiAgICAgIC8vIFNwZWNpYWwgY2FzZSBleGNsdWRlZCBuYW1lIHdoZW4gdGhlIG5hbWUgaXMgYmxhbmsuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGhhc0V4Y2x1ZGVkID0gRVhDTFVERURfREVGQVVMVF9GSUVMRFMuZmluZChcbiAgICAgIGYgPT4gbm9ybWFsaXplZEZpZWxkTmFtZS5zdGFydHNXaXRoKGYpIHx8IG5vcm1hbGl6ZWRGaWVsZE5hbWUuZW5kc1dpdGgoZilcbiAgICApO1xuICAgIGNvbnN0IGhhc0luY2x1c2lvbiA9IE1FVFJJQ19ERUZBVUxUX0ZJRUxEUy5maW5kKFxuICAgICAgZiA9PiBub3JtYWxpemVkRmllbGROYW1lLnN0YXJ0c1dpdGgoZikgfHwgbm9ybWFsaXplZEZpZWxkTmFtZS5lbmRzV2l0aChmKVxuICAgICk7XG4gICAgcmV0dXJuICFoYXNFeGNsdWRlZCB8fCBoYXNJbmNsdXNpb247XG4gIH0pO1xuXG4gIGNvbnN0IHNvcnRlZEZpZWxkcyA9IGZpZWxkc1dpdGhvdXRFeGNsdWRlZC5zb3J0KChsZWZ0LCByaWdodCkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRMZWZ0ID0gbGVmdC5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFJpZ2h0ID0gcmlnaHQubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGxlZnRIYXNJbmNsdXNpb24gPSBNRVRSSUNfREVGQVVMVF9GSUVMRFMuZmluZEluZGV4KFxuICAgICAgZiA9PiBub3JtYWxpemVkTGVmdC5zdGFydHNXaXRoKGYpIHx8IG5vcm1hbGl6ZWRMZWZ0LmVuZHNXaXRoKGYpXG4gICAgKTtcbiAgICBjb25zdCByaWdodEhhc0luY2x1c2lvbiA9IE1FVFJJQ19ERUZBVUxUX0ZJRUxEUy5maW5kSW5kZXgoXG4gICAgICBmID0+IG5vcm1hbGl6ZWRSaWdodC5zdGFydHNXaXRoKGYpIHx8IG5vcm1hbGl6ZWRSaWdodC5lbmRzV2l0aChmKVxuICAgICk7XG4gICAgaWYgKGxlZnRIYXNJbmNsdXNpb24gIT09IHJpZ2h0SGFzSW5jbHVzaW9uKSB7XG4gICAgICBpZiAobGVmdEhhc0luY2x1c2lvbiA9PT0gLTEpIHtcbiAgICAgICAgLy8gRWxlbWVudHMgdGhhdCBkbyBub3QgaGF2ZSB0aGUgaW5jbHVzaW9uIGxpc3Qgc2hvdWxkIGdvIGFmdGVyIHRob3NlIHRoYXQgZG8uXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChyaWdodEhhc0luY2x1c2lvbiA9PT0gLTEpIHtcbiAgICAgICAgLy8gRWxlbWVudHMgdGhhdCBkbyBoYXZlIHRoZSBpbmNsdXNpb24gbGlzdCBzaG91bGQgZ28gYmVmb3JlIHRob3NlIHRoYXQgZG9uJ3QuXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIC8vIENvbXBhcmUgYmFzZWQgb24gb3JkZXIgaW4gdGhlIGluY2x1c2lvbiBsaXN0XG4gICAgICByZXR1cm4gbGVmdEhhc0luY2x1c2lvbiAtIHJpZ2h0SGFzSW5jbHVzaW9uO1xuICAgIH1cblxuICAgIC8vIENvbXBhcmUgYmFzZWQgb24gdHlwZVxuICAgIGlmIChsZWZ0LnR5cGUgIT09IHJpZ2h0LnR5cGUpIHtcbiAgICAgIGlmIChsZWZ0LnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy5yZWFsKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIC8vIGxlZnQgaXMgYW4gaW50ZWdlciBhbmQgcmlnaHQgaXMgbm90XG4gICAgICAvLyBhbmQgcmVhbHMgY29tZSBiZWZvcmUgaW50ZWdlcnNcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIC8vIEZpbmFsbHksIG9yZGVyIGJhc2VkIG9uIHRoZSBvcmRlciBpbiB0aGUgZGF0YXNldHMgY29sdW1uc1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICB9KTtcblxuICBpZiAoc29ydGVkRmllbGRzLmxlbmd0aCkge1xuICAgIC8vIFRoZXJlIHdhcyBhIGJlc3QgbWF0Y2hcbiAgICByZXR1cm4gc29ydGVkRmllbGRzWzBdO1xuICB9XG4gIC8vIE5vIG1hdGNoZXNcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBBQ0NFUFRFRF9BTkFMWVpFUl9UWVBFUyA9IFtcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLkRBVEUsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5USU1FLFxuICBBbmFseXplckRBVEFfVFlQRVMuREFURVRJTUUsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5OVU1CRVIsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5JTlQsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5GTE9BVCxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLkJPT0xFQU4sXG4gIEFuYWx5emVyREFUQV9UWVBFUy5TVFJJTkcsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5HRU9NRVRSWSxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLkdFT01FVFJZX0ZST01fU1RSSU5HLFxuICBBbmFseXplckRBVEFfVFlQRVMuUEFJUl9HRU9NRVRSWV9GUk9NX1NUUklORyxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLlpJUENPREUsXG4gIEFuYWx5emVyREFUQV9UWVBFUy5BUlJBWSxcbiAgQW5hbHl6ZXJEQVRBX1RZUEVTLk9CSkVDVFxuXTtcblxuY29uc3QgSUdOT1JFX0RBVEFfVFlQRVMgPSBPYmplY3Qua2V5cyhBbmFseXplckRBVEFfVFlQRVMpLmZpbHRlcihcbiAgdHlwZSA9PiAhQUNDRVBURURfQU5BTFlaRVJfVFlQRVMuaW5jbHVkZXModHlwZSlcbik7XG5cbi8qKlxuICogVmFsaWRhdGUgaW5wdXQgZGF0YSwgYWRkaW5nIG1pc3NpbmcgZmllbGQgdHlwZXMsIHJlbmFtZSBkdXBsaWNhdGUgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbnB1dERhdGEoZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9jZXNzb3JSZXN1bHQge1xuICBpZiAoIWlzUGxhaW5PYmplY3QoZGF0YSkpIHtcbiAgICBhc3NlcnQoJ2FkZERhdGFUb01hcCBFcnJvcjogZGF0YXNldC5kYXRhIGNhbm5vdCBiZSBudWxsJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YS5maWVsZHMpKSB7XG4gICAgYXNzZXJ0KCdhZGREYXRhVG9NYXAgRXJyb3I6IGV4cGVjdCBkYXRhc2V0LmRhdGEuZmllbGRzIHRvIGJlIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YS5yb3dzKSkge1xuICAgIGFzc2VydCgnYWRkRGF0YVRvTWFwIEVycm9yOiBleHBlY3QgZGF0YXNldC5kYXRhLnJvd3MgdG8gYmUgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHtmaWVsZHMsIHJvd3N9ID0gZGF0YTtcblxuICAvLyBjaGVjayBpZiBhbGwgZmllbGRzIGhhcyBuYW1lLCBmb3JtYXQgYW5kIHR5cGVcbiAgY29uc3QgYWxsVmFsaWQgPSBmaWVsZHMuZXZlcnkoKGYsIGkpID0+IHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZikpIHtcbiAgICAgIGFzc2VydChgZmllbGRzIG5lZWRzIHRvIGJlIGFuIGFycmF5IG9mIG9iamVjdCwgYnV0IGZpbmQgJHt0eXBlb2YgZn1gKTtcbiAgICAgIGZpZWxkc1tpXSA9IHt9O1xuICAgIH1cblxuICAgIGlmICghZi5uYW1lKSB7XG4gICAgICBhc3NlcnQoYGZpZWxkLm5hbWUgaXMgcmVxdWlyZWQgYnV0IG1pc3NpbmcgaW4gJHtKU09OLnN0cmluZ2lmeShmKX1gKTtcbiAgICAgIC8vIGFzc2lnbiBhIG5hbWVcbiAgICAgIGZpZWxkc1tpXS5uYW1lID0gYGNvbHVtbl8ke2l9YDtcbiAgICB9XG5cbiAgICBpZiAoIUFMTF9GSUVMRF9UWVBFU1tmLnR5cGVdKSB7XG4gICAgICBhc3NlcnQoYHVua25vd24gZmllbGQgdHlwZSAke2YudHlwZX1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWZpZWxkcy5ldmVyeShmaWVsZCA9PiBmaWVsZC5hbmFseXplclR5cGUpKSB7XG4gICAgICBhc3NlcnQoJ2ZpZWxkIG1pc3NpbmcgYW5hbHl6ZXJUeXBlJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgdGltZSBmb3JtYXQgaXMgY29ycmVjdCBiYXNlZCBvbiBmaXJzdCAxMCBub3QgZW1wdHkgZWxlbWVudFxuICAgIGlmIChmLnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXApIHtcbiAgICAgIGNvbnN0IHNhbXBsZSA9IGZpbmROb25FbXB0eVJvd3NBdEZpZWxkKHJvd3MsIGksIDEwKS5tYXAociA9PiAoe3RzOiByW2ldfSkpO1xuICAgICAgY29uc3QgYW5hbHl6ZWRUeXBlID0gQW5hbHl6ZXIuY29tcHV0ZUNvbE1ldGEoc2FtcGxlKVswXTtcbiAgICAgIHJldHVybiBhbmFseXplZFR5cGUgJiYgYW5hbHl6ZWRUeXBlLmNhdGVnb3J5ID09PSAnVElNRScgJiYgYW5hbHl6ZWRUeXBlLmZvcm1hdCA9PT0gZi5mb3JtYXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIGlmIChhbGxWYWxpZCkge1xuICAgIHJldHVybiB7cm93cywgZmllbGRzfTtcbiAgfVxuXG4gIC8vIGlmIGFueSBmaWVsZCBoYXMgbWlzc2luZyB0eXBlLCByZWNhbGN1bGF0ZSBpdCBmb3IgZXZlcnlvbmVcbiAgLy8gYmVjYXVzZSB3ZSBzaW1wbHkgbG9zdCBmYWl0aCBpbiBodW1hbml0eVxuICBjb25zdCBzYW1wbGVEYXRhID0gZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUoe1xuICAgIGZpZWxkczogZmllbGRzLm1hcChmID0+IGYubmFtZSksXG4gICAgcm93c1xuICB9KTtcbiAgY29uc3QgZmllbGRPcmRlciA9IGZpZWxkcy5tYXAoZiA9PiBmLm5hbWUpO1xuICBjb25zdCBtZXRhID0gZ2V0RmllbGRzRnJvbURhdGEoc2FtcGxlRGF0YSwgZmllbGRPcmRlcik7XG4gIGNvbnN0IHVwZGF0ZWRGaWVsZHMgPSBmaWVsZHMubWFwKChmLCBpKSA9PiAoe1xuICAgIC4uLmYsXG4gICAgdHlwZTogbWV0YVtpXS50eXBlLFxuICAgIGZvcm1hdDogbWV0YVtpXS5mb3JtYXQsXG4gICAgYW5hbHl6ZXJUeXBlOiBtZXRhW2ldLmFuYWx5emVyVHlwZVxuICB9KSk7XG5cbiAgcmV0dXJuIHtmaWVsZHM6IHVwZGF0ZWRGaWVsZHMsIHJvd3N9O1xufVxuXG5mdW5jdGlvbiBmaW5kTm9uRW1wdHlSb3dzQXRGaWVsZChyb3dzOiB1bmtub3duW11bXSwgZmllbGRJZHg6IG51bWJlciwgdG90YWw6IG51bWJlcik6IGFueVtdIHtcbiAgY29uc3Qgc2FtcGxlOiBhbnlbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChzYW1wbGUubGVuZ3RoIDwgdG90YWwgJiYgaSA8IHJvd3MubGVuZ3RoKSB7XG4gICAgaWYgKG5vdE51bGxvclVuZGVmaW5lZChyb3dzW2ldPy5bZmllbGRJZHhdKSkge1xuICAgICAgc2FtcGxlLnB1c2gocm93c1tpXSk7XG4gICAgfVxuICAgIGkrKztcbiAgfVxuICByZXR1cm4gc2FtcGxlO1xufVxuLyoqXG4gKiBHZXR0aW5nIHNhbXBsZSBkYXRhIGZvciBhbmFseXppbmcgZmllbGQgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNhbXBsZUZvclR5cGVBbmFseXplKHtcbiAgZmllbGRzLFxuICByb3dzLFxuICBzYW1wbGVDb3VudCA9IDUwXG59OiB7XG4gIGZpZWxkczogc3RyaW5nW107XG4gIHJvd3M6IHVua25vd25bXVtdO1xuICBzYW1wbGVDb3VudD86IG51bWJlcjtcbn0pOiBSb3dEYXRhIHtcbiAgY29uc3QgdG90YWwgPSBNYXRoLm1pbihzYW1wbGVDb3VudCwgcm93cy5sZW5ndGgpO1xuICAvLyBjb25zdCBmaWVsZE9yZGVyID0gZmllbGRzLm1hcChmID0+IGYubmFtZSk7XG4gIGNvbnN0IHNhbXBsZSA9IHJhbmdlKDAsIHRvdGFsLCAxKS5tYXAoZCA9PiAoe30pKTtcblxuICAvLyBjb2xsZWN0IHNhbXBsZSBkYXRhIGZvciBlYWNoIGZpZWxkXG4gIGZpZWxkcy5mb3JFYWNoKChmaWVsZCwgZmllbGRJZHgpID0+IHtcbiAgICAvLyBkYXRhIGNvdW50ZXJcbiAgICBsZXQgaSA9IDA7XG4gICAgLy8gc2FtcGxlIGNvdW50ZXJcbiAgICBsZXQgaiA9IDA7XG5cbiAgICB3aGlsZSAoaiA8IHRvdGFsKSB7XG4gICAgICBpZiAoaSA+PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAvLyBpZiBkZXBsZXRlZCBkYXRhIHBvb2xcbiAgICAgICAgc2FtcGxlW2pdW2ZpZWxkXSA9IG51bGw7XG4gICAgICAgIGorKztcbiAgICAgIH0gZWxzZSBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHJvd3NbaV1bZmllbGRJZHhdKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd3NbaV1bZmllbGRJZHhdO1xuICAgICAgICBzYW1wbGVbal1bZmllbGRdID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRyaW0oKSA6IHZhbHVlO1xuICAgICAgICBqKys7XG4gICAgICAgIGkrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzYW1wbGU7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGEgdmFsaWQgV2VsbC1rbm93biBiaW5hcnkgKFdLQikgaW4gSEVYIGZvcm1hdFxuICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2VsbC1rbm93bl90ZXh0X3JlcHJlc2VudGF0aW9uX29mX2dlb21ldHJ5XG4gKlxuICogQHBhcmFtIHN0ciBpbnB1dCBzdHJpbmdcbiAqIEByZXR1cm5zIHRydWUgaWYgc3RyaW5nIGlzIGEgdmFsaWQgV0tCIGluIEhFWCBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSGV4V2tiKHN0cjogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAoIXN0cikgcmV0dXJuIGZhbHNlO1xuICAvLyBjaGVjayBpZiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaXMgZXZlbiBhbmQgaXMgYXQgbGVhc3QgMTAgY2hhcmFjdGVycyBsb25nXG4gIGlmIChzdHIubGVuZ3RoIDwgMTAgfHwgc3RyLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gY2hlY2sgaWYgZmlyc3QgdHdvIGNoYXJhY3RlcnMgYXJlIDAwIG9yIDAxXG4gIGlmICghc3RyLnN0YXJ0c1dpdGgoJzAwJykgJiYgIXN0ci5zdGFydHNXaXRoKCcwMScpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGNoZWNrIGlmIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBoZXhcbiAgcmV0dXJuIC9eWzAtOWEtZkEtRl0rJC8udGVzdChzdHIuc2xpY2UoMikpO1xufVxuXG4vKipcbiAqIEFuYWx5emUgZmllbGQgdHlwZXMgZnJvbSBkYXRhIGluIGBzdHJpbmdgIGZvcm1hdCwgZS5nLiB1cGxvYWRlZCBjc3YuXG4gKiBBc3NpZ24gYHR5cGVgLCBgZmllbGRJZHhgIGFuZCBgZm9ybWF0YCAodGltZXN0YW1wIG9ubHkpIHRvIGVhY2ggZmllbGRcbiAqXG4gKiBAcGFyYW0gZGF0YSBhcnJheSBvZiByb3cgb2JqZWN0XG4gKiBAcGFyYW0gZmllbGRPcmRlciBhcnJheSBvZiBmaWVsZCBuYW1lcyBhcyBzdHJpbmdcbiAqIEByZXR1cm5zIGZvcm1hdHRlZCBmaWVsZHNcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IHtnZXRGaWVsZHNGcm9tRGF0YX0gZnJvbSAna2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuICogY29uc3QgZGF0YSA9IFt7XG4gKiAgIHRpbWU6ICcyMDE2LTA5LTE3IDAwOjA5OjU1JyxcbiAqICAgdmFsdWU6ICc0JyxcbiAqICAgc3VyZ2U6ICcxLjInLFxuICogICBpc1RyaXA6ICd0cnVlJyxcbiAqICAgemVyb09uZXM6ICcwJ1xuICogfSwge1xuICogICB0aW1lOiAnMjAxNi0wOS0xNyAwMDozMDowOCcsXG4gKiAgIHZhbHVlOiAnMycsXG4gKiAgIHN1cmdlOiBudWxsLFxuICogICBpc1RyaXA6ICdmYWxzZScsXG4gKiAgIHplcm9PbmVzOiAnMSdcbiAqIH0sIHtcbiAqICAgdGltZTogbnVsbCxcbiAqICAgdmFsdWU6ICcyJyxcbiAqICAgc3VyZ2U6ICcxLjMnLFxuICogICBpc1RyaXA6IG51bGwsXG4gKiAgIHplcm9PbmVzOiAnMSdcbiAqIH1dO1xuICpcbiAqIGNvbnN0IGZpZWxkT3JkZXIgPSBbJ3RpbWUnLCAndmFsdWUnLCAnc3VyZ2UnLCAnaXNUcmlwJywgJ3plcm9PbmVzJ107XG4gKiBjb25zdCBmaWVsZHMgPSBnZXRGaWVsZHNGcm9tRGF0YShkYXRhLCBmaWVsZE9yZGVyKTtcbiAqIC8vIGZpZWxkcyA9IFtcbiAqIC8vIHtuYW1lOiAndGltZScsIGZvcm1hdDogJ1lZWVktTS1EIEg6bTpzJywgZmllbGRJZHg6IDEsIHR5cGU6ICd0aW1lc3RhbXAnfSxcbiAqIC8vIHtuYW1lOiAndmFsdWUnLCBmb3JtYXQ6ICcnLCBmaWVsZElkeDogNCwgdHlwZTogJ2ludGVnZXInfSxcbiAqIC8vIHtuYW1lOiAnc3VyZ2UnLCBmb3JtYXQ6ICcnLCBmaWVsZElkeDogNSwgdHlwZTogJ3JlYWwnfSxcbiAqIC8vIHtuYW1lOiAnaXNUcmlwJywgZm9ybWF0OiAnJywgZmllbGRJZHg6IDYsIHR5cGU6ICdib29sZWFuJ30sXG4gKiAvLyB7bmFtZTogJ3plcm9PbmVzJywgZm9ybWF0OiAnJywgZmllbGRJZHg6IDcsIHR5cGU6ICdpbnRlZ2VyJ31dO1xuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkc0Zyb21EYXRhKGRhdGE6IFJvd0RhdGEsIGZpZWxkT3JkZXI6IHN0cmluZ1tdKTogRmllbGRbXSB7XG4gIC8vIGFkZCBhIGNoZWNrIGZvciBlcG9jaCB0aW1lc3RhbXBcbiAgY29uc3QgbWV0YWRhdGEgPSBBbmFseXplci5jb21wdXRlQ29sTWV0YShcbiAgICBkYXRhLFxuICAgIFtcbiAgICAgIHtyZWdleDogLy4qZ2VvanNvbnxhbGxfcG9pbnRzL2csIGRhdGFUeXBlOiAnR0VPTUVUUlknfSxcbiAgICAgIHtyZWdleDogLy4qY2Vuc3VzL2csIGRhdGFUeXBlOiAnU1RSSU5HJ31cbiAgICBdLFxuICAgIHtpZ25vcmVkRGF0YVR5cGVzOiBJR05PUkVfREFUQV9UWVBFU31cbiAgKTtcblxuICBjb25zdCB7ZmllbGRCeUluZGV4fSA9IHJlbmFtZUR1cGxpY2F0ZUZpZWxkcyhmaWVsZE9yZGVyKTtcblxuICBjb25zdCByZXN1bHQgPSBmaWVsZE9yZGVyLm1hcCgoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IGZpZWxkQnlJbmRleFtpbmRleF07XG5cbiAgICBjb25zdCBmaWVsZE1ldGEgPSBtZXRhZGF0YS5maW5kKG0gPT4gbS5rZXkgPT09IGZpZWxkKTtcbiAgICBsZXQgdHlwZSA9IGZpZWxkTWV0YS50eXBlO1xuICAgIGNvbnN0IGZvcm1hdCA9IGZpZWxkTWV0YS5mb3JtYXQ7XG5cbiAgICAvLyBjaGVjayBpZiBzdHJpbmcgaXMgaGV4IHdrYlxuICAgIGlmICh0eXBlID09PSBBbmFseXplckRBVEFfVFlQRVMuU1RSSU5HKSB7XG4gICAgICB0eXBlID0gZGF0YS5zb21lKGQgPT4gaXNIZXhXa2IoZFtuYW1lXSkpID8gQW5hbHl6ZXJEQVRBX1RZUEVTLkdFT01FVFJZIDogdHlwZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIGlkOiBuYW1lLFxuICAgICAgZGlzcGxheU5hbWU6IG5hbWUsXG4gICAgICBmb3JtYXQsXG4gICAgICBmaWVsZElkeDogaW5kZXgsXG4gICAgICB0eXBlOiBhbmFseXplclR5cGVUb0ZpZWxkVHlwZSh0eXBlKSxcbiAgICAgIGFuYWx5emVyVHlwZTogdHlwZSxcbiAgICAgIHZhbHVlQWNjZXNzb3I6IGRjID0+IGQgPT4ge1xuICAgICAgICByZXR1cm4gZGMudmFsdWVBdChkLmluZGV4LCBpbmRleCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBwYXNzIGluIGFuIGFycmF5IG9mIGZpZWxkIG5hbWVzLCByZW5hbWUgZHVwbGljYXRlZCBvbmVcbiAqIGFuZCByZXR1cm4gYSBtYXAgZnJvbSBvbGQgZmllbGQgaW5kZXggdG8gbmV3IG5hbWVcbiAqXG4gKiBAcGFyYW0gZmllbGRPcmRlclxuICogQHJldHVybnMgbmV3IGZpZWxkIG5hbWUgYnkgaW5kZXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUR1cGxpY2F0ZUZpZWxkcyhcbiAgZmllbGRPcmRlcjogc3RyaW5nW11cbik6IHthbGxOYW1lczogc3RyaW5nW107IGZpZWxkQnlJbmRleDogc3RyaW5nW119IHtcbiAgcmV0dXJuIGZpZWxkT3JkZXIucmVkdWNlPHthbGxOYW1lczogc3RyaW5nW107IGZpZWxkQnlJbmRleDogc3RyaW5nW119PihcbiAgICAoYWNjdSwgZmllbGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IHthbGxOYW1lc30gPSBhY2N1O1xuICAgICAgbGV0IGZpZWxkTmFtZSA9IGZpZWxkO1xuXG4gICAgICAvLyBhZGQgYSBjb3VudGVyIHRvIGR1cGxpY2F0ZWQgbmFtZXNcbiAgICAgIGlmIChhbGxOYW1lcy5pbmNsdWRlcyhmaWVsZCkpIHtcbiAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICB3aGlsZSAoYWxsTmFtZXMuaW5jbHVkZXMoYCR7ZmllbGR9LSR7Y291bnRlcn1gKSkge1xuICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgfVxuICAgICAgICBmaWVsZE5hbWUgPSBgJHtmaWVsZH0tJHtjb3VudGVyfWA7XG4gICAgICB9XG5cbiAgICAgIGFjY3UuZmllbGRCeUluZGV4W2ldID0gZmllbGROYW1lO1xuICAgICAgYWNjdS5hbGxOYW1lcy5wdXNoKGZpZWxkTmFtZSk7XG5cbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sXG4gICAge2FsbE5hbWVzOiBbXSwgZmllbGRCeUluZGV4OiBbXX1cbiAgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHR5cGUtYW5hbHl6ZXIgb3V0cHV0IHRvIGtlcGxlci5nbCBmaWVsZCB0eXBlc1xuICpcbiAqIEBwYXJhbSBhVHlwZVxuICogQHJldHVybnMgY29ycmVzcG9uZGluZyB0eXBlIGluIGBBTExfRklFTERfVFlQRVNgXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXplclR5cGVUb0ZpZWxkVHlwZShhVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIERBVEUsXG4gICAgVElNRSxcbiAgICBEQVRFVElNRSxcbiAgICBOVU1CRVIsXG4gICAgSU5ULFxuICAgIEZMT0FULFxuICAgIEJPT0xFQU4sXG4gICAgU1RSSU5HLFxuICAgIEdFT01FVFJZLFxuICAgIEdFT01FVFJZX0ZST01fU1RSSU5HLFxuICAgIFBBSVJfR0VPTUVUUllfRlJPTV9TVFJJTkcsXG4gICAgWklQQ09ERSxcbiAgICBBUlJBWSxcbiAgICBPQkpFQ1RcbiAgfSA9IEFuYWx5emVyREFUQV9UWVBFUztcblxuICAvLyBUT0RPOiB1biByZWNvZ25pemVkIHR5cGVzXG4gIC8vIENVUlJFTkNZIFBFUkNFTlQgTk9ORVxuICBzd2l0Y2ggKGFUeXBlKSB7XG4gICAgY2FzZSBEQVRFOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5kYXRlO1xuICAgIGNhc2UgVElNRTpcbiAgICBjYXNlIERBVEVUSU1FOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA7XG4gICAgY2FzZSBGTE9BVDpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMucmVhbDtcbiAgICBjYXNlIElOVDpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuaW50ZWdlcjtcbiAgICBjYXNlIEJPT0xFQU46XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW47XG4gICAgY2FzZSBHRU9NRVRSWTpcbiAgICBjYXNlIEdFT01FVFJZX0ZST01fU1RSSU5HOlxuICAgIGNhc2UgUEFJUl9HRU9NRVRSWV9GUk9NX1NUUklORzpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuZ2VvanNvbjtcbiAgICBjYXNlIEFSUkFZOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5hcnJheTtcbiAgICBjYXNlIE9CSkVDVDpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMub2JqZWN0O1xuICAgIGNhc2UgTlVNQkVSOlxuICAgIGNhc2UgU1RSSU5HOlxuICAgIGNhc2UgWklQQ09ERTpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuc3RyaW5nO1xuICAgIGRlZmF1bHQ6XG4gICAgICBnbG9iYWxDb25zb2xlLndhcm4oYFVuc3VwcG9ydGVkIGFuYWx5emVyIHR5cGU6ICR7YVR5cGV9YCk7XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLnN0cmluZztcbiAgfVxufVxuXG5jb25zdCBUSU1FX0RJU1BMQVkgPSAnMjAyMC0wNS0xMSAxNDowMCc7XG5cbmNvbnN0IGFkZFRpbWVMYWJlbCA9IChmb3JtYXRzOiBUaW1lTGFiZWxGb3JtYXRbXSkgPT5cbiAgZm9ybWF0cy5tYXAoZiA9PiAoe1xuICAgIC4uLmYsXG4gICAgbGFiZWw6XG4gICAgICBmLnR5cGUgPT09IFRPT0xUSVBfRk9STUFUX1RZUEVTLkRBVEVfVElNRSB8fCBmLnR5cGUgPT09IFRPT0xUSVBfRk9STUFUX1RZUEVTLkRBVEVcbiAgICAgICAgPyBnZXRGb3JtYXR0ZXIoZ2V0Rm9ybWF0VmFsdWUoZikpKFRJTUVfRElTUExBWSlcbiAgICAgICAgOiBmLmxhYmVsXG4gIH0pKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkRm9ybWF0TGFiZWxzKGZpZWxkVHlwZT86IHN0cmluZyk6IFRvb2x0aXBGb3JtYXRbXSB7XG4gIGNvbnN0IHRvb2x0aXBUeXBlcyA9IChmaWVsZFR5cGUgJiYgRklFTERfT1BUU1tmaWVsZFR5cGVdLmZvcm1hdC50b29sdGlwKSB8fCBbXTtcbiAgY29uc3QgZm9ybWF0TGFiZWxzOiBUaW1lTGFiZWxGb3JtYXRbXSA9IE9iamVjdC52YWx1ZXMoVE9PTFRJUF9GT1JNQVRTKS5maWx0ZXIodCA9PlxuICAgIHRvb2x0aXBUeXBlcy5pbmNsdWRlcyh0LnR5cGUpXG4gICk7XG4gIHJldHVybiBhZGRUaW1lTGFiZWwoZm9ybWF0TGFiZWxzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1hdExhYmVscyhmaWVsZHM6IFRvb2x0aXBGaWVsZHNbXSwgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgZmllbGRUeXBlID0gZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk/LnR5cGU7XG4gIHJldHVybiBnZXRGaWVsZEZvcm1hdExhYmVscyhmaWVsZFR5cGUpO1xufVxuIl19
@@ -31,20 +31,20 @@ declare const domtoimage: {
31
31
  };
32
32
  };
33
33
  /**
34
- * @param {Node} node - The DOM Node object to render
35
- * @param {Object} options - Rendering options
36
- * @param {Function} [options.filter] - Should return true if passed node should be included in the output
37
- * (excluding node means excluding it's children as well). Not called on the root node.
38
- * @param {String} [options.bgcolor] - color for the background, any valid CSS color value.
39
- * @param {Number} [options.width] - width to be applied to node before rendering.
40
- * @param {Number} [options.height] - height to be applied to node before rendering.
41
- * @param {Object} [options.style] - an object whose properties to be copied to node's style before rendering.
42
- * @param {Number} [options.quality] - a Number between 0 and 1 indicating image quality (applicable to JPEG only),
43
- defaults to 1.0.
44
- * @param {String} [options.imagePlaceholder] - dataURL to use as a placeholder for failed images, default behaviour is to fail fast on images we can't fetch
45
- * @param {Boolean} [options.cacheBust] - set to true to cache bust by appending the time to the request url
46
- * @return {Promise} - A promise that is fulfilled with a SVG image data URL
47
- * */
34
+ * @param {Node} node - The DOM Node object to render
35
+ * @param {Object} options - Rendering options
36
+ * @param {Function} [options.filter] - Should return true if passed node should be included in the output
37
+ * (excluding node means excluding it's children as well). Not called on the root node.
38
+ * @param {String} [options.bgcolor] - color for the background, any valid CSS color value.
39
+ * @param {Number} [options.width] - width to be applied to node before rendering.
40
+ * @param {Number} [options.height] - height to be applied to node before rendering.
41
+ * @param {Object} [options.style] - an object whose properties to be copied to node's style before rendering.
42
+ * @param {Number} [options.quality] - a Number between 0 and 1 indicating image quality (applicable to JPEG only), defaults to 1.0.
43
+ * @param {boolean} [options.escapeXhtmlForWebpack] - whether to apply fix for uglify error in dom-to-image (should be true for webpack builds), defaults to true.
44
+ * @param {String} [options.imagePlaceholder] - dataURL to use as a placeholder for failed images, default behaviour is to fail fast on images we can't fetch
45
+ * @param {Boolean} [options.cacheBust] - set to true to cache bust by appending the time to the request url
46
+ * @return {Promise} - A promise that is fulfilled with a SVG image data URL
47
+ * */
48
48
  declare function toSvg(node: any, options: any): Promise<string>;
49
49
  /**
50
50
  * @param {Node} node - The DOM Node object to render