kepler.gl 3.2.0 → 3.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.
Files changed (96) hide show
  1. package/dist/src/ai-assistant/src/config/models.d.ts +8 -0
  2. package/dist/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +3 -2
  3. package/dist/src/localization/src/translations/en.d.ts +1 -0
  4. package/dist/src/utils/src/arrow-data-container.d.ts +3 -2
  5. package/dist/src/utils/src/data-container-utils.d.ts +2 -0
  6. package/package.json +2 -2
  7. package/src/actions/package.json +8 -8
  8. package/src/ai-assistant/dist/components/ai-assistant-config.js +40 -24
  9. package/src/ai-assistant/dist/config/models.d.ts +8 -0
  10. package/src/ai-assistant/dist/config/models.js +16 -8
  11. package/src/ai-assistant/dist/localization.js +7 -7
  12. package/src/ai-assistant/dist/reducers/index.js +3 -2
  13. package/src/ai-assistant/package.json +16 -16
  14. package/src/ai-assistant/src/components/ai-assistant-config.tsx +39 -28
  15. package/src/ai-assistant/src/config/models.ts +37 -25
  16. package/src/ai-assistant/src/localization.ts +6 -6
  17. package/src/ai-assistant/src/reducers/index.ts +2 -1
  18. package/src/cloud-providers/package.json +2 -2
  19. package/src/common-utils/package.json +3 -3
  20. package/src/components/dist/common/color-legend.js +8 -8
  21. package/src/components/dist/common/data-table/index.js +13 -9
  22. package/src/components/dist/map/map-legend-panel.js +10 -4
  23. package/src/components/dist/map/map-legend.js +2 -2
  24. package/src/components/dist/plot-container.js +4 -2
  25. package/src/components/dist/side-panel/interaction-panel/interaction-panel.js +2 -2
  26. package/src/components/dist/side-panel/layer-panel/color-breaks-panel.js +11 -2
  27. package/src/components/dist/side-panel/layer-panel/color-scale-selector.js +65 -12
  28. package/src/components/dist/side-panel/layer-panel/custom-palette.js +18 -7
  29. package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +3 -2
  30. package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +18 -4
  31. package/src/components/package.json +15 -15
  32. package/src/components/src/common/color-legend.tsx +15 -2
  33. package/src/components/src/common/data-table/index.tsx +1 -1
  34. package/src/components/src/map/map-legend-panel.tsx +21 -2
  35. package/src/components/src/map/map-legend.tsx +1 -1
  36. package/src/components/src/plot-container.tsx +2 -1
  37. package/src/components/src/side-panel/interaction-panel/interaction-panel.tsx +1 -0
  38. package/src/components/src/side-panel/layer-panel/color-breaks-panel.tsx +14 -3
  39. package/src/components/src/side-panel/layer-panel/color-scale-selector.tsx +62 -8
  40. package/src/components/src/side-panel/layer-panel/custom-palette.tsx +11 -5
  41. package/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.tsx +19 -2
  42. package/src/constants/dist/default-settings.js +1 -1
  43. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1b/11/43d4199b6142de0b88c672f2b036c5aa4ca836cf35977bbafcdb1962b91e94f8336655a57f0742571ceb13fc69ef4ba0e3cb91dc9a8d61ef041c6eb15e7a +1 -0
  44. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b3/bd/e4f91c7af9e320b979e29ad3b9e3a4dfcd61e4a09d6e4579104c40dcace7651b443fdd6d7ff5d947ed6c9df2c0bbbcc76a2ea86d6398e4945257eeb80dd5 +1 -0
  45. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/ac/e2/e903ec95ada0b0075fdcfb6133e2e75c9b3b0504a29ca665704aaed90b2b +2 -0
  46. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/b4/c5/a43653dff3b380f7b0793080a57c980a9a136764933e79454de0fe43a5ca +2 -0
  47. package/src/constants/package.json +2 -2
  48. package/src/constants/umd/keplergl.min.js +1 -1
  49. package/src/deckgl-arrow-layers/package.json +2 -2
  50. package/src/deckgl-layers/package.json +4 -4
  51. package/src/duckdb/dist/table/duckdb-table-utils.js +3 -2
  52. package/src/duckdb/package.json +6 -6
  53. package/src/duckdb/src/table/duckdb-table-utils.ts +5 -1
  54. package/src/effects/package.json +5 -5
  55. package/src/layers/dist/geojson-layer/geojson-utils.js +23 -5
  56. package/src/layers/dist/icon-layer/icon-layer.js +12 -2
  57. package/src/layers/dist/vector-tile/common-tile/tile-dataset.d.ts +4 -0
  58. package/src/layers/dist/vector-tile/common-tile/tile-dataset.js +10 -1
  59. package/src/layers/dist/vector-tile/vector-tile-layer.d.ts +11 -0
  60. package/src/layers/dist/vector-tile/vector-tile-layer.js +113 -7
  61. package/src/layers/package.json +9 -9
  62. package/src/layers/src/geojson-layer/geojson-utils.ts +22 -0
  63. package/src/layers/src/icon-layer/icon-layer.ts +49 -38
  64. package/src/layers/src/vector-tile/common-tile/tile-dataset.ts +7 -0
  65. package/src/layers/src/vector-tile/vector-tile-layer.ts +110 -6
  66. package/src/localization/dist/translations/en.d.ts +1 -0
  67. package/src/localization/dist/translations/en.js +2 -1
  68. package/src/localization/package.json +1 -1
  69. package/src/localization/src/translations/en.ts +1 -0
  70. package/src/processors/dist/data-processor.js +15 -5
  71. package/src/processors/package.json +7 -7
  72. package/src/processors/src/data-processor.ts +19 -4
  73. package/src/reducers/package.json +16 -16
  74. package/src/schemas/package.json +7 -7
  75. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/52/82/28cacf6fd462b779c22675964b655bf3a9f3ce9ec3c9b141a401a5bf90cb7d904ac65ab8e484570130b12771af0a0d5bab20e6976cfa773666763e046a6a +1 -0
  76. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/53/93/f8e389b6450ee0636bf336363d2d6865d8a1fe2445c15cc1e36c651e1ddf448358eb74e894f4bf6fc48ef881dc64cc221c48b133ecf0e02132f2c5fbfe11 +1 -0
  77. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/2e/45/ed6e0c1beb8bca4698a47b5feda8789a22d96978bc4839949bd26e827454 +2 -0
  78. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/56/db/b5a812c56b0d1dcdcd33da37e464062a19c8752cb2296603dc72d2c54d31 +2 -0
  79. package/src/styles/package.json +2 -2
  80. package/src/styles/umd/keplergl.min.js +1 -1
  81. package/src/table/dist/dataset-utils.js +18 -7
  82. package/src/table/dist/kepler-table.js +2 -1
  83. package/src/table/package.json +5 -5
  84. package/src/table/src/dataset-utils.ts +7 -2
  85. package/src/table/src/kepler-table.ts +1 -0
  86. package/src/tasks/package.json +2 -2
  87. package/src/types/actions.d.ts +1 -0
  88. package/src/types/package.json +1 -1
  89. package/src/utils/dist/arrow-data-container.d.ts +3 -2
  90. package/src/utils/dist/arrow-data-container.js +3 -3
  91. package/src/utils/dist/data-container-utils.d.ts +2 -0
  92. package/src/utils/dist/data-container-utils.js +3 -2
  93. package/src/utils/package.json +4 -4
  94. package/src/utils/src/arrow-data-container.ts +9 -7
  95. package/src/utils/src/data-container-utils.ts +3 -1
  96. package/umd/keplergl.min.js +1366 -1333
@@ -448,12 +448,14 @@ function arrowSchemaToFields(table) {
448
448
  var type = (0, _utils.arrowDataTypeToFieldType)(field.type);
449
449
  var analyzerType = (0, _utils.arrowDataTypeToAnalyzerDataType)(field.type);
450
450
  var format = '';
451
+ var fieldTypeSuggestion = fieldTypeSuggestions[field.name];
452
+ var keplerField = keplerFields[fieldIndex];
451
453
 
452
454
  // geometry fields produced by DuckDB's st_asgeojson()
453
- if (fieldTypeSuggestions[field.name] === 'JSON') {
455
+ if (fieldTypeSuggestion === 'JSON') {
454
456
  type = _constants.ALL_FIELD_TYPES.geojson;
455
457
  analyzerType = _typeAnalyzer.DATA_TYPES.GEOMETRY_FROM_STRING;
456
- } else if (fieldTypeSuggestions[field.name] === 'GEOMETRY' || (_field$metadata$get = field.metadata.get(_constants.GEOARROW_METADATA_KEY)) !== null && _field$metadata$get !== void 0 && _field$metadata$get.startsWith('geoarrow')) {
458
+ } else if (fieldTypeSuggestion === 'GEOMETRY' || (_field$metadata$get = field.metadata.get(_constants.GEOARROW_METADATA_KEY)) !== null && _field$metadata$get !== void 0 && _field$metadata$get.startsWith('geoarrow')) {
457
459
  type = _constants.ALL_FIELD_TYPES.geoarrow;
458
460
  analyzerType = _typeAnalyzer.DATA_TYPES.GEOMETRY;
459
461
  } else if (geoArrowMetadata[field.name]) {
@@ -461,7 +463,7 @@ function arrowSchemaToFields(table) {
461
463
  type = _constants.ALL_FIELD_TYPES.geoarrow;
462
464
  analyzerType = _typeAnalyzer.DATA_TYPES.GEOMETRY;
463
465
  (_field$metadata = field.metadata) === null || _field$metadata === void 0 || _field$metadata.set(_constants.GEOARROW_METADATA_KEY, geoArrowMetadata[field.name]);
464
- } else if (fieldTypeSuggestions[field.name] === 'BLOB') {
466
+ } else if (fieldTypeSuggestion === 'BLOB') {
465
467
  // When arrow wkb column saved to DuckDB as BLOB without any metadata, then queried back
466
468
  try {
467
469
  var _table$getChildAt;
@@ -478,10 +480,18 @@ function arrowSchemaToFields(table) {
478
480
  } catch (error) {
479
481
  // ignore, not WKB
480
482
  }
483
+ } else if (fieldTypeSuggestion === 'VARCHAR' && (keplerField.analyzerType === _typeAnalyzer.DATA_TYPES.GEOMETRY || keplerField.analyzerType === _typeAnalyzer.DATA_TYPES.GEOMETRY_FROM_STRING)) {
484
+ // When wkb/wkt was saved as varchar in DuckDB
485
+ type = keplerField.type;
486
+ analyzerType = keplerField.analyzerType;
487
+ format = keplerField.format;
488
+ } else if (fieldTypeSuggestion === 'VARCHAR' && keplerField.type === _constants.ALL_FIELD_TYPES.h3) {
489
+ // when kepler detected h3 column using getFieldsFromData(), set type to h3 and analyzerType to H3
490
+ type = _constants.ALL_FIELD_TYPES.h3;
491
+ analyzerType = keplerField.analyzerType;
481
492
  } else {
482
493
  // TODO should we use Kepler getFieldsFromData instead
483
494
  // of arrowDataTypeToFieldType for all fields?
484
- var keplerField = keplerFields[fieldIndex];
485
495
  if (keplerField.type === _constants.ALL_FIELD_TYPES.timestamp) {
486
496
  type = keplerField.type;
487
497
  analyzerType = keplerField.analyzerType;
@@ -546,4 +556,4 @@ var Processors = exports.Processors = {
546
556
  getFieldsFromData: _commonUtils.getFieldsFromData,
547
557
  parseCsvRowsByFieldType: parseCsvRowsByFieldType
548
558
  };
549
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9kM0RzdiIsIl90eXBlQW5hbHl6ZXIiLCJfZ2VvanNvbk5vcm1hbGl6ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY29yZSIsIl93a3QiLCJfY29uc3RhbnRzIiwiX3V0aWxzIiwiX2NvbW1vblV0aWxzIiwiX3NjaGVtYXMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJDU1ZfTlVMTFMiLCJleHBvcnRzIiwidHJ5UGFyc2VKc29uU3RyaW5nIiwic3RyIiwiSlNPTiIsInBhcnNlIiwiUEFSU0VfRklFTERfVkFMVUVfRlJPTV9TVFJJTkciLCJBTExfRklFTERfVFlQRVMiLCJ2YWxpZCIsImQiLCJpbnRlZ2VyIiwicGFyc2VJbnQiLCJ0aW1lc3RhbXAiLCJmaWVsZCIsImluY2x1ZGVzIiwiZm9ybWF0IiwiTnVtYmVyIiwicmVhbCIsInBhcnNlRmxvYXQiLCJvYmplY3QiLCJpc1BsYWluT2JqZWN0IiwiYXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJoMyIsImgzSXNWYWxpZCIsInByb2Nlc3NDc3ZEYXRhIiwicmF3RGF0YSIsImhlYWRlciIsInJvd3MiLCJoZWFkZXJSb3ciLCJwYXJzZWRSb3dzIiwiY3N2UGFyc2VSb3dzIiwiRXJyb3IiLCJzbGljZSIsImNsZWFuVXBGYWxzeUNzdlZhbHVlIiwic2FtcGxlIiwiZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUiLCJmaWVsZHMiLCJnZXRGaWVsZHNGcm9tRGF0YSIsInBhcnNlUm93c0J5RmllbGRzIiwiZ2VvanNvbkZpZWxkSWR4IiwiZmluZEluZGV4IiwiZiIsIm5hbWUiLCJwYXJzZUNzdlJvd3NCeUZpZWxkVHlwZSIsImJpbmQiLCJyZSIsIlJlZ0V4cCIsImoiLCJtYXRjaCIsImdlb0ZpZWxkSWR4IiwicGFyc2VyIiwidHlwZSIsImZpcnN0IiwiZmluZCIsIm5vdE51bGxvclVuZGVmaW5lZCIsInJvdyIsInByb3BlcnRpZXMiLCJwcm9jZXNzUm93T2JqZWN0IiwiZmlyc3RSb3ciLCJtYXAiLCJrZXkiLCJwcm9jZXNzR2VvanNvbiIsIm5vcm1hbGl6ZWRHZW9qc29uIiwibm9ybWFsaXplIiwiZmVhdHVyZXMiLCJjb25jYXQiLCJHVUlERVNfRklMRV9GT1JNQVRfRE9DIiwiYWxsRGF0YVJvd3MiLCJnZW9tZXRyeSIsIl9nZW9qc29uIiwicmVkdWNlIiwiYWNjdSIsImN1cnIiLCJwcm9jZXNzS2VwbGVyZ2xKU09OIiwic2NoZW1hIiwidW5kZWZpbmVkIiwiS2VwbGVyR2xTY2hlbWEiLCJsb2FkIiwiZGF0YXNldHMiLCJjb25maWciLCJwcm9jZXNzS2VwbGVyZ2xEYXRhc2V0IiwicmVzdWx0cyIsInBhcnNlU2F2ZWREYXRhIiwidG9BcnJheSIsInByb2Nlc3NBcnJvd1RhYmxlIiwiYXJyb3dUYWJsZSIsInByb2Nlc3NBcnJvd0JhdGNoZXMiLCJkYXRhIiwiYmF0Y2hlcyIsImdldEdlb0Fycm93TWV0YWRhdGFGcm9tU2NoZW1hIiwidGFibGUiLCJnZW9BcnJvd01ldGFkYXRhIiwiX3RhYmxlJHNjaGVtYSRtZXRhZGF0IiwiZ2VvU3RyaW5nIiwibWV0YWRhdGEiLCJwYXJzZWRHZW9TdHJpbmciLCJjb2x1bW5zIiwiY29sdW1uTmFtZSIsImNvbHVtbkRhdGEiLCJlbmNvZGluZyIsIkdFT0FSUk9XX0VYVEVOU0lPTlMiLCJXS0IiLCJlcnJvciIsImNvbnNvbGUiLCJhcnJvd1NjaGVtYVRvRmllbGRzIiwiZmllbGRUeXBlU3VnZ2VzdGlvbnMiLCJnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZUFycm93Iiwia2VwbGVyRmllbGRzIiwiZmllbGRJbmRleCIsIl9maWVsZCRtZXRhZGF0YSRnZXQiLCJhcnJvd0RhdGFUeXBlVG9GaWVsZFR5cGUiLCJhbmFseXplclR5cGUiLCJhcnJvd0RhdGFUeXBlVG9BbmFseXplckRhdGFUeXBlIiwiZ2VvanNvbiIsIkFuYWx5emVyREFUQV9UWVBFUyIsIkdFT01FVFJZX0ZST01fU1RSSU5HIiwiR0VPQVJST1dfTUVUQURBVEFfS0VZIiwic3RhcnRzV2l0aCIsImdlb2Fycm93IiwiR0VPTUVUUlkiLCJfZmllbGQkbWV0YWRhdGEiLCJfdGFibGUkZ2V0Q2hpbGRBdCIsImdldENoaWxkQXQiLCJiaW5hcnlHZW8iLCJwYXJzZVN5bmMiLCJXS0JMb2FkZXIiLCJfZmllbGQkbWV0YWRhdGEyIiwia2VwbGVyRmllbGQiLCJpZCIsImRpc3BsYXlOYW1lIiwiZmllbGRJZHgiLCJ2YWx1ZUFjY2Vzc29yIiwiZGMiLCJ2YWx1ZUF0IiwiaW5kZXgiLCJhcnJvd0JhdGNoZXMiLCJUYWJsZSIsImNvbHMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwibnVtQ29scyIsImFycm93U2NoZW1hIiwiREFUQVNFVF9IQU5ETEVSUyIsIkRBVEFTRVRfRk9STUFUUyIsImNzdiIsImtlcGxlcmdsIiwiUHJvY2Vzc29ycyIsImFuYWx5emVyVHlwZVRvRmllbGRUeXBlIl0sInNvdXJjZXMiOlsiLi4vc3JjL2RhdGEtcHJvY2Vzc29yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5pbXBvcnQge2NzdlBhcnNlUm93c30gZnJvbSAnZDMtZHN2JztcbmltcG9ydCB7REFUQV9UWVBFUyBhcyBBbmFseXplckRBVEFfVFlQRVN9IGZyb20gJ3R5cGUtYW5hbHl6ZXInO1xuaW1wb3J0IG5vcm1hbGl6ZSBmcm9tICdAbWFwYm94L2dlb2pzb24tbm9ybWFsaXplJztcbmltcG9ydCB7cGFyc2VTeW5jfSBmcm9tICdAbG9hZGVycy5nbC9jb3JlJztcbmltcG9ydCB7QXJyb3dUYWJsZX0gZnJvbSAnQGxvYWRlcnMuZ2wvc2NoZW1hJztcbmltcG9ydCB7V0tCTG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC93a3QnO1xuXG5pbXBvcnQge1xuICBBTExfRklFTERfVFlQRVMsXG4gIERBVEFTRVRfRk9STUFUUyxcbiAgR0VPQVJST1dfRVhURU5TSU9OUyxcbiAgR0VPQVJST1dfTUVUQURBVEFfS0VZLFxuICBHVUlERVNfRklMRV9GT1JNQVRfRE9DXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7UHJvY2Vzc29yUmVzdWx0LCBGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBhcnJvd0RhdGFUeXBlVG9BbmFseXplckRhdGFUeXBlLFxuICBhcnJvd0RhdGFUeXBlVG9GaWVsZFR5cGUsXG4gIGhhc093blByb3BlcnR5LFxuICBpc1BsYWluT2JqZWN0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtcbiAgYW5hbHl6ZXJUeXBlVG9GaWVsZFR5cGUsXG4gIGdldFNhbXBsZUZvclR5cGVBbmFseXplLFxuICBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZUFycm93LFxuICBnZXRGaWVsZHNGcm9tRGF0YSxcbiAgaDNJc1ZhbGlkLFxuICBub3ROdWxsb3JVbmRlZmluZWQsXG4gIHRvQXJyYXlcbn0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtLZXBsZXJHbFNjaGVtYSwgUGFyc2VkRGF0YXNldCwgU2F2ZWRNYXAsIExvYWRlZE1hcH0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7RmVhdHVyZX0gZnJvbSAnQG5lYnVsYS5nbC9lZGl0LW1vZGVzJztcblxuLy8gaWYgYW55IG9mIHRoZXNlIHZhbHVlIG9jY3VycyBpbiBjc3YsIHBhcnNlIGl0IHRvIG51bGw7XG4vLyBjb25zdCBDU1ZfTlVMTFMgPSBbJycsICdudWxsJywgJ05VTEwnLCAnTnVsbCcsICdOYU4nLCAnL04nXTtcbi8vIG1hdGNoZXMgZW1wdHkgc3RyaW5nXG5leHBvcnQgY29uc3QgQ1NWX05VTExTID0gL14obnVsbHxOVUxMfE51bGx8TmFOfFxcL058fCkkLztcblxuZnVuY3Rpb24gdHJ5UGFyc2VKc29uU3RyaW5nKHN0cikge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHN0cik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUEFSU0VfRklFTERfVkFMVUVfRlJPTV9TVFJJTkcgPSB7XG4gIFtBTExfRklFTERfVFlQRVMuYm9vbGVhbl06IHtcbiAgICB2YWxpZDogKGQ6IHVua25vd24pOiBib29sZWFuID0+IHR5cGVvZiBkID09PSAnYm9vbGVhbicsXG4gICAgcGFyc2U6IChkOiB1bmtub3duKTogYm9vbGVhbiA9PiBkID09PSAndHJ1ZScgfHwgZCA9PT0gJ1RydWUnIHx8IGQgPT09ICdUUlVFJyB8fCBkID09PSAnMSdcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyXToge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB2YWxpZDogKGQ6IHVua25vd24pOiBib29sZWFuID0+IHBhcnNlSW50KGQsIDEwKSA9PT0gZCxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcGFyc2U6IChkOiB1bmtub3duKTogbnVtYmVyID0+IHBhcnNlSW50KGQsIDEwKVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcF06IHtcbiAgICB2YWxpZDogKGQ6IHVua25vd24sIGZpZWxkOiBGaWVsZCk6IGJvb2xlYW4gPT5cbiAgICAgIFsneCcsICdYJ10uaW5jbHVkZXMoZmllbGQuZm9ybWF0KSA/IHR5cGVvZiBkID09PSAnbnVtYmVyJyA6IHR5cGVvZiBkID09PSAnc3RyaW5nJyxcbiAgICBwYXJzZTogKGQ6IGFueSwgZmllbGQ6IEZpZWxkKSA9PiAoWyd4JywgJ1gnXS5pbmNsdWRlcyhmaWVsZC5mb3JtYXQpID8gTnVtYmVyKGQpIDogZClcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXToge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB2YWxpZDogKGQ6IHVua25vd24pOiBib29sZWFuID0+IHBhcnNlRmxvYXQoZCkgPT09IGQsXG4gICAgLy8gTm90ZSB0aGlzIHdpbGwgcmVzdWx0IGluIE5hTiBmb3Igc29tZSBzdHJpbmdcbiAgICBwYXJzZTogcGFyc2VGbG9hdFxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLm9iamVjdF06IHtcbiAgICB2YWxpZDogaXNQbGFpbk9iamVjdCxcbiAgICBwYXJzZTogdHJ5UGFyc2VKc29uU3RyaW5nXG4gIH0sXG5cbiAgW0FMTF9GSUVMRF9UWVBFUy5hcnJheV06IHtcbiAgICB2YWxpZDogQXJyYXkuaXNBcnJheSxcbiAgICBwYXJzZTogdHJ5UGFyc2VKc29uU3RyaW5nXG4gIH0sXG5cbiAgW0FMTF9GSUVMRF9UWVBFUy5oM106IHtcbiAgICB2YWxpZDogZCA9PiBoM0lzVmFsaWQoZCksXG4gICAgcGFyc2U6IGQgPT4gZFxuICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgY3N2IGRhdGEsIG91dHB1dCBhIGRhdGEgb2JqZWN0IHdpdGggYHtmaWVsZHM6IFtdLCByb3dzOiBbXX1gLlxuICogVGhlIGRhdGEgb2JqZWN0IGNhbiBiZSB3cmFwcGVkIGluIGEgYGRhdGFzZXRgIGFuZCBwYXNzIHRvIFtgYWRkRGF0YVRvTWFwYF0oLi4vYWN0aW9ucy9hY3Rpb25zLm1kI2FkZGRhdGF0b21hcClcbiAqIEBwYXJhbSByYXdEYXRhIHJhdyBjc3Ygc3RyaW5nXG4gKiBAcmV0dXJucyBkYXRhIG9iamVjdCBge2ZpZWxkczogW10sIHJvd3M6IFtdfWAgY2FuIGJlIHBhc3NlZCB0byBhZGREYXRhVG9NYXBzXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHtwcm9jZXNzQ3N2RGF0YX0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbiAqXG4gKiBjb25zdCB0ZXN0RGF0YSA9IGBncHNfZGF0YS51dGNfdGltZXN0YW1wLGdwc19kYXRhLmxhdCxncHNfZGF0YS5sbmcsZ3BzX2RhdGEudHlwZXMsZXBvY2gsaGFzX3Jlc3VsdCxpZCx0aW1lLGJlZ2ludHJpcF90c191dGMsYmVnaW50cmlwX3RzX2xvY2FsLGRhdGVcbiAqIDIwMTYtMDktMTcgMDA6MDk6NTUsMjkuOTkwMDkzNywzMS4yNTkwNTQyLGRyaXZlcl9hbmFseXRpY3MsMTQ3MjY4ODAwMDAwMCxGYWxzZSwxLDIwMTYtMDktMjNUMDA6MDA6MDAuMDAwWiwyMDE2LTEwLTAxIDA5OjQxOjM5KzAwOjAwLDIwMTYtMTAtMDEgMDk6NDE6MzkrMDA6MDAsMjAxNi0wOS0yM1xuICogMjAxNi0wOS0xNyAwMDoxMDo1NiwyOS45OTI3Njk5LDMxLjI0NjExNDIsZHJpdmVyX2FuYWx5dGljcywxNDcyNjg4MDAwMDAwLEZhbHNlLDIsMjAxNi0wOS0yM1QwMDowMDowMC4wMDBaLDIwMTYtMTAtMDEgMDk6NDY6MzcrMDA6MDAsMjAxNi0xMC0wMSAxNjo0NjozNyswMDowMCwyMDE2LTA5LTIzXG4gKiAyMDE2LTA5LTE3IDAwOjExOjU2LDI5Ljk5MDcyNjEsMzEuMjMxMjc0Mixkcml2ZXJfYW5hbHl0aWNzLDE0NzI2ODgwMDAwMDAsRmFsc2UsMywyMDE2LTA5LTIzVDAwOjAwOjAwLjAwMFosLCwyMDE2LTA5LTIzXG4gKiAyMDE2LTA5LTE3IDAwOjEyOjU4LDI5Ljk4NzAwNzQsMzEuMjE3NTgyNyxkcml2ZXJfYW5hbHl0aWNzLDE0NzI2ODgwMDAwMDAsRmFsc2UsNCwyMDE2LTA5LTIzVDAwOjAwOjAwLjAwMFosLCwyMDE2LTA5LTIzYFxuICpcbiAqIGNvbnN0IGRhdGFzZXQgPSB7XG4gKiAgaW5mbzoge2lkOiAndGVzdF9kYXRhJywgbGFiZWw6ICdNeSBDc3YnfSxcbiAqICBkYXRhOiBwcm9jZXNzQ3N2RGF0YSh0ZXN0RGF0YSlcbiAqIH07XG4gKlxuICogZGlzcGF0Y2goYWRkRGF0YVRvTWFwKHtcbiAqICBkYXRhc2V0czogW2RhdGFzZXRdLFxuICogIG9wdGlvbnM6IHtjZW50ZXJNYXA6IHRydWUsIHJlYWRPbmx5OiB0cnVlfVxuICogfSkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0NzdkRhdGEocmF3RGF0YTogdW5rbm93bltdW10gfCBzdHJpbmcsIGhlYWRlcj86IHN0cmluZ1tdKTogUHJvY2Vzc29yUmVzdWx0IHtcbiAgbGV0IHJvd3M6IHVua25vd25bXVtdIHwgdW5kZWZpbmVkO1xuICBsZXQgaGVhZGVyUm93OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICBpZiAodHlwZW9mIHJhd0RhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgcGFyc2VkUm93czogc3RyaW5nW11bXSA9IGNzdlBhcnNlUm93cyhyYXdEYXRhKTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJzZWRSb3dzKSB8fCBwYXJzZWRSb3dzLmxlbmd0aCA8IDIpIHtcbiAgICAgIC8vIGxvb2tzIGxpa2UgYW4gZW1wdHkgZmlsZSwgdGhyb3cgZXJyb3IgdG8gYmUgY2F0Y2hcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJvY2VzcyBDc3YgRGF0YSBGYWlsZWQ6IENTViBpcyBlbXB0eScpO1xuICAgIH1cbiAgICBoZWFkZXJSb3cgPSBwYXJzZWRSb3dzWzBdO1xuICAgIHJvd3MgPSBwYXJzZWRSb3dzLnNsaWNlKDEpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmF3RGF0YSkgJiYgcmF3RGF0YS5sZW5ndGgpIHtcbiAgICByb3dzID0gcmF3RGF0YTtcbiAgICBoZWFkZXJSb3cgPSBoZWFkZXI7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaGVhZGVyUm93KSkge1xuICAgICAgLy8gaWYgZGF0YSBpcyBwYXNzZWQgaW4gYXMgYXJyYXkgb2Ygcm93cyBhbmQgbWlzc2luZyBoZWFkZXJcbiAgICAgIC8vIGFzc3VtZSBmaXJzdCByb3cgaXMgaGVhZGVyXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBoZWFkZXJSb3cgPSByYXdEYXRhWzBdO1xuICAgICAgcm93cyA9IHJhd0RhdGEuc2xpY2UoMSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyb3dzIHx8ICFoZWFkZXJSb3cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5wdXQgcGFzc2VkIHRvIHByb2Nlc3NDc3ZEYXRhJyk7XG4gIH1cblxuICAvLyBoZXJlIHdlIGFzc3VtZSB0aGUgY3N2IGZpbGUgdGhhdCBwZW9wbGUgdXBsb2FkZWQgd2lsbCBoYXZlIGZpcnN0IHJvd1xuICAvLyBhcyBuYW1lIG9mIHRoZSBjb2x1bW5cblxuICBjbGVhblVwRmFsc3lDc3ZWYWx1ZShyb3dzKTtcbiAgLy8gTm8gbmVlZCB0byBydW4gdHlwZSBkZXRlY3Rpb24gb24gZXZlcnkgZGF0YSBwb2ludFxuICAvLyBoZXJlIHdlIGdldCBhIGxpc3Qgb2Ygbm9uZSBudWxsIHZhbHVlcyB0byBydW4gYW5hbHl6ZSBvblxuICBjb25zdCBzYW1wbGUgPSBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSh7ZmllbGRzOiBoZWFkZXJSb3csIHJvd3N9KTtcbiAgY29uc3QgZmllbGRzID0gZ2V0RmllbGRzRnJvbURhdGEoc2FtcGxlLCBoZWFkZXJSb3cpO1xuICBjb25zdCBwYXJzZWRSb3dzID0gcGFyc2VSb3dzQnlGaWVsZHMocm93cywgZmllbGRzKTtcblxuICByZXR1cm4ge2ZpZWxkcywgcm93czogcGFyc2VkUm93c307XG59XG5cbi8qKlxuICogUGFyc2Ugcm93cyBvZiBjc3YgYnkgYW5hbHl6ZWQgZmllbGQgdHlwZXMuIFNvIHRoYXQgYCcxJ2AgLT4gYDFgLCBgJ1RydWUnYCAtPiBgdHJ1ZWBcbiAqIEBwYXJhbSByb3dzXG4gKiBAcGFyYW0gZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJvd3NCeUZpZWxkcyhyb3dzOiBhbnlbXVtdLCBmaWVsZHM6IEZpZWxkW10pIHtcbiAgLy8gRWRpdCByb3dzIGluIHBsYWNlXG4gIGNvbnN0IGdlb2pzb25GaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09ICdfZ2VvanNvbicpO1xuICBmaWVsZHMuZm9yRWFjaChwYXJzZUNzdlJvd3NCeUZpZWxkVHlwZS5iaW5kKG51bGwsIHJvd3MsIGdlb2pzb25GaWVsZElkeCkpO1xuXG4gIHJldHVybiByb3dzO1xufVxuXG4vKipcbiAqIENvbnZlcnQgZmFsc3kgdmFsdWUgaW4gY3N2IGluY2x1ZGluZyBgJycsICdudWxsJywgJ05VTEwnLCAnTnVsbCcsICdOYU4nYCB0byBgbnVsbGAsXG4gKiBzbyB0aGF0IHR5cGUtYW5hbHl6ZXIgd29uJ3QgZGV0ZWN0IGl0IGFzIHN0cmluZ1xuICpcbiAqIEBwYXJhbSByb3dzXG4gKi9cbmZ1bmN0aW9uIGNsZWFuVXBGYWxzeUNzdlZhbHVlKHJvd3M6IHVua25vd25bXVtdKTogdm9pZCB7XG4gIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChDU1ZfTlVMTFMsICdnJyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93c1tpXS5sZW5ndGg7IGorKykge1xuICAgICAgLy8gYW5hbHl6ZXIgd2lsbCBzZXQgYW55IGZpZWxkcyB0byAnc3RyaW5nJyBpZiB0aGVyZSBhcmUgZW1wdHkgdmFsdWVzXG4gICAgICAvLyB3aGljaCB3aWxsIGJlIHBhcnNlZCBhcyAnJyBieSBkMy5jc3ZcbiAgICAgIC8vIGhlcmUgd2UgcGFyc2UgZW1wdHkgZGF0YSBhcyBudWxsXG4gICAgICAvLyBUT0RPOiBjcmVhdGUgd2FybmluZyB3aGVuIGRlbHRlY3QgYENTVl9OVUxMU2AgaW4gdGhlIGRhdGFcbiAgICAgIGlmICh0eXBlb2Ygcm93c1tpXVtqXSA9PT0gJ3N0cmluZycgJiYgKHJvd3NbaV1bal0gYXMgc3RyaW5nKS5tYXRjaChyZSkpIHtcbiAgICAgICAgcm93c1tpXVtqXSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUHJvY2VzcyB1cGxvYWRlZCBjc3YgZmlsZSB0byBwYXJzZSB2YWx1ZSBieSBmaWVsZCB0eXBlXG4gKlxuICogQHBhcmFtIHJvd3NcbiAqIEBwYXJhbSBnZW9GaWVsZElkeCBmaWVsZCBpbmRleFxuICogQHBhcmFtIGZpZWxkXG4gKiBAcGFyYW0gaVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDc3ZSb3dzQnlGaWVsZFR5cGUoXG4gIHJvd3M6IHVua25vd25bXVtdLFxuICBnZW9GaWVsZElkeDogbnVtYmVyLFxuICBmaWVsZDogRmllbGQsXG4gIGk6IG51bWJlclxuKTogdm9pZCB7XG4gIGNvbnN0IHBhcnNlciA9IFBBUlNFX0ZJRUxEX1ZBTFVFX0ZST01fU1RSSU5HW2ZpZWxkLnR5cGVdO1xuICBpZiAocGFyc2VyKSB7XG4gICAgLy8gY2hlY2sgZmlyc3Qgbm90IG51bGwgdmFsdWUgb2YgaXQncyBhbHJlYWR5IHBhcnNlZFxuICAgIGNvbnN0IGZpcnN0ID0gcm93cy5maW5kKHIgPT4gbm90TnVsbG9yVW5kZWZpbmVkKHJbaV0pKTtcbiAgICBpZiAoIWZpcnN0IHx8IHBhcnNlci52YWxpZChmaXJzdFtpXSwgZmllbGQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgLy8gcGFyc2Ugc3RyaW5nIHZhbHVlIGJhc2VkIG9uIGZpZWxkIHR5cGVcbiAgICAgIGlmIChyb3dbaV0gIT09IG51bGwpIHtcbiAgICAgICAgcm93W2ldID0gcGFyc2VyLnBhcnNlKHJvd1tpXSwgZmllbGQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZ2VvRmllbGRJZHggPiAtMSAmJlxuICAgICAgICAgIGlzUGxhaW5PYmplY3Qocm93W2dlb0ZpZWxkSWR4XSkgJiZcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgaGFzT3duUHJvcGVydHkocm93W2dlb0ZpZWxkSWR4XSwgJ3Byb3BlcnRpZXMnKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgcm93W2dlb0ZpZWxkSWR4XS5wcm9wZXJ0aWVzW2ZpZWxkLm5hbWVdID0gcm93W2ldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKlxuICogUHJvY2VzcyBkYXRhIHdoZXJlIGVhY2ggcm93IGlzIGFuIG9iamVjdCwgb3V0cHV0IGNhbiBiZSBwYXNzZWQgdG8gW2BhZGREYXRhVG9NYXBgXSguLi9hY3Rpb25zL2FjdGlvbnMubWQjYWRkZGF0YXRvbWFwKVxuICogTk9URTogVGhpcyBmdW5jdGlvbiBtYXkgbXV0YXRlIGlucHV0LlxuICogQHBhcmFtIHJhd0RhdGEgYW4gYXJyYXkgb2Ygcm93IG9iamVjdCwgZWFjaCBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGtleXNcbiAqIEByZXR1cm5zIGRhdGFzZXQgY29udGFpbmluZyBgZmllbGRzYCBhbmQgYHJvd3NgXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHthZGREYXRhVG9NYXB9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG4gKiBpbXBvcnQge3Byb2Nlc3NSb3dPYmplY3R9IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG4gKlxuICogY29uc3QgZGF0YSA9IFtcbiAqICB7bGF0OiAzMS4yNywgbG5nOiAxMjcuNTYsIHZhbHVlOiAzfSxcbiAqICB7bGF0OiAzMS4yMiwgbG5nOiAxMjYuMjYsIHZhbHVlOiAxfVxuICogXTtcbiAqXG4gKiBkaXNwYXRjaChhZGREYXRhVG9NYXAoe1xuICogIGRhdGFzZXRzOiB7XG4gKiAgICBpbmZvOiB7bGFiZWw6ICdNeSBEYXRhJywgaWQ6ICdteV9kYXRhJ30sXG4gKiAgICBkYXRhOiBwcm9jZXNzUm93T2JqZWN0KGRhdGEpXG4gKiAgfVxuICogfSkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1Jvd09iamVjdChyYXdEYXRhOiB1bmtub3duW10pOiBQcm9jZXNzb3JSZXN1bHQge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3RGF0YSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmICghcmF3RGF0YS5sZW5ndGgpIHtcbiAgICAvLyBkYXRhIGlzIGVtcHR5XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpZWxkczogW10sXG4gICAgICByb3dzOiBbXVxuICAgIH07XG4gIH1cblxuICBjb25zdCBmaXJzdFJvdyA9IHJhd0RhdGFbMF0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmaXJzdFJvdyk7IC8vIFtsYXQsIGxuZywgdmFsdWVdXG4gIGNvbnN0IHJvd3MgPSByYXdEYXRhLm1hcChkID0+IGtleXMubWFwKGtleSA9PiAoZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSkpOyAvLyBbWzMxLjI3LCAxMjcuNTYsIDNdXVxuXG4gIC8vIHJvdyBvYmplY3QgY2FuIHN0aWxsIGNvbnRhaW4gdmFsdWVzIGxpa2UgYE51bGxgIG9yIGBOL0FgXG4gIGNsZWFuVXBGYWxzeUNzdlZhbHVlKHJvd3MpO1xuXG4gIHJldHVybiBwcm9jZXNzQ3N2RGF0YShyb3dzLCBrZXlzKTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIEdlb0pTT04gW2BGZWF0dXJlQ29sbGVjdGlvbmBdKGh0dHA6Ly93aWtpLmdlb2pzb24ub3JnL0dlb0pTT05fZHJhZnRfdmVyc2lvbl82I0ZlYXR1cmVDb2xsZWN0aW9uKSxcbiAqIG91dHB1dCBhIGRhdGEgb2JqZWN0IHdpdGggYHtmaWVsZHM6IFtdLCByb3dzOiBbXX1gLlxuICogVGhlIGRhdGEgb2JqZWN0IGNhbiBiZSB3cmFwcGVkIGluIGEgYGRhdGFzZXRgIGFuZCBwYXNzZWQgdG8gW2BhZGREYXRhVG9NYXBgXSguLi9hY3Rpb25zL2FjdGlvbnMubWQjYWRkZGF0YXRvbWFwKVxuICogTk9URTogVGhpcyBmdW5jdGlvbiBtYXkgbXV0YXRlIGlucHV0LlxuICpcbiAqIEBwYXJhbSByYXdEYXRhIHJhdyBnZW9qc29uIGZlYXR1cmUgY29sbGVjdGlvblxuICogQHJldHVybnMgZGF0YXNldCBjb250YWluaW5nIGBmaWVsZHNgIGFuZCBgcm93c2BcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQge2FkZERhdGFUb01hcH0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbiAqIGltcG9ydCB7cHJvY2Vzc0dlb2pzb259IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG4gKlxuICogY29uc3QgZ2VvanNvbiA9IHtcbiAqIFx0XCJ0eXBlXCIgOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXG4gKiBcdFwiZmVhdHVyZXNcIiA6IFt7XG4gKiBcdFx0XCJ0eXBlXCIgOiBcIkZlYXR1cmVcIixcbiAqIFx0XHRcInByb3BlcnRpZXNcIiA6IHtcbiAqIFx0XHRcdFwiY2FwYWNpdHlcIiA6IFwiMTBcIixcbiAqIFx0XHRcdFwidHlwZVwiIDogXCJVLVJhY2tcIlxuICogXHRcdH0sXG4gKiBcdFx0XCJnZW9tZXRyeVwiIDoge1xuICogXHRcdFx0XCJ0eXBlXCIgOiBcIlBvaW50XCIsXG4gKiBcdFx0XHRcImNvb3JkaW5hdGVzXCIgOiBbIC03MS4wNzMyODMsIDQyLjQxNzUwMCBdXG4gKiBcdFx0fVxuICogXHR9XVxuICogfTtcbiAqXG4gKiBkaXNwYXRjaChhZGREYXRhVG9NYXAoe1xuICogIGRhdGFzZXRzOiB7XG4gKiAgICBpbmZvOiB7XG4gKiAgICAgIGxhYmVsOiAnU2FtcGxlIFRheGkgVHJpcHMgaW4gTmV3IFlvcmsgQ2l0eScsXG4gKiAgICAgIGlkOiAndGVzdF90cmlwX2RhdGEnXG4gKiAgICB9LFxuICogICAgZGF0YTogcHJvY2Vzc0dlb2pzb24oZ2VvanNvbilcbiAqICB9XG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzR2VvanNvbihyYXdEYXRhOiB1bmtub3duKTogUHJvY2Vzc29yUmVzdWx0IHtcbiAgY29uc3Qgbm9ybWFsaXplZEdlb2pzb24gPSBub3JtYWxpemUocmF3RGF0YSk7XG5cbiAgaWYgKCFub3JtYWxpemVkR2VvanNvbiB8fCAhQXJyYXkuaXNBcnJheShub3JtYWxpemVkR2VvanNvbi5mZWF0dXJlcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUmVhZCBGaWxlIEZhaWxlZDogRmlsZSBpcyBub3QgYSB2YWxpZCBHZW9KU09OLiBSZWFkIG1vcmUgYWJvdXQgW3N1cHBvcnRlZCBmaWxlIGZvcm1hdF0oJHtHVUlERVNfRklMRV9GT1JNQVRfRE9DfSlgXG4gICAgKTtcbiAgfVxuXG4gIC8vIGdldHRpbmcgYWxsIGZlYXR1cmUgZmllbGRzXG4gIGNvbnN0IGFsbERhdGFSb3dzOiBBcnJheTx7X2dlb2pzb246IEZlYXR1cmV9ICYga2V5b2YgRmVhdHVyZT4gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub3JtYWxpemVkR2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGYgPSBub3JtYWxpemVkR2VvanNvbi5mZWF0dXJlc1tpXTtcbiAgICBpZiAoZi5nZW9tZXRyeSkge1xuICAgICAgYWxsRGF0YVJvd3MucHVzaCh7XG4gICAgICAgIC8vIGFkZCBmZWF0dXJlIHRvIF9nZW9qc29uIGZpZWxkXG4gICAgICAgIF9nZW9qc29uOiBmLFxuICAgICAgICAuLi4oZi5wcm9wZXJ0aWVzIHx8IHt9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8vIGdldCBhbGwgdGhlIGZpZWxkXG4gIGNvbnN0IGZpZWxkcyA9IGFsbERhdGFSb3dzLnJlZHVjZTxzdHJpbmdbXT4oKGFjY3UsIGN1cnIpID0+IHtcbiAgICBPYmplY3Qua2V5cyhjdXJyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIWFjY3UuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBhY2N1LnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWNjdTtcbiAgfSwgW10pO1xuXG4gIC8vIG1ha2Ugc3VyZSBlYWNoIGZlYXR1cmUgaGFzIGV4YWN0IHNhbWUgZmllbGRzXG4gIGFsbERhdGFSb3dzLmZvckVhY2goZCA9PiB7XG4gICAgZmllbGRzLmZvckVhY2goZiA9PiB7XG4gICAgICBpZiAoIShmIGluIGQpKSB7XG4gICAgICAgIGRbZl0gPSBudWxsO1xuICAgICAgICBpZiAoZC5fZ2VvanNvbi5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgZC5fZ2VvanNvbi5wcm9wZXJ0aWVzW2ZdID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcHJvY2Vzc1Jvd09iamVjdChhbGxEYXRhUm93cyk7XG59XG5cbi8qKlxuICogUHJvY2VzcyBzYXZlZCBrZXBsZXIuZ2wganNvbiB0byBiZSBwYXNzIHRvIFtgYWRkRGF0YVRvTWFwYF0oLi4vYWN0aW9ucy9hY3Rpb25zLm1kI2FkZGRhdGF0b21hcCkuXG4gKiBUaGUganNvbiBvYmplY3Qgc2hvdWxkIGNvbnRhaW4gYGRhdGFzZXRzYCBhbmQgYGNvbmZpZ2AuXG4gKiBAcGFyYW0gcmF3RGF0YVxuICogQHBhcmFtIHNjaGVtYVxuICogQHJldHVybnMgZGF0YXNldHMgYW5kIGNvbmZpZyBge2RhdGFzZXRzOiB7fSwgY29uZmlnOiB7fX1gXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHthZGREYXRhVG9NYXB9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG4gKiBpbXBvcnQge3Byb2Nlc3NLZXBsZXJnbEpTT059IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG4gKlxuICogZGlzcGF0Y2goYWRkRGF0YVRvTWFwKHByb2Nlc3NLZXBsZXJnbEpTT04oa2VwbGVyR2xKc29uKSkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0tlcGxlcmdsSlNPTihyYXdEYXRhOiBTYXZlZE1hcCwgc2NoZW1hID0gS2VwbGVyR2xTY2hlbWEpOiBMb2FkZWRNYXAgfCBudWxsIHtcbiAgcmV0dXJuIHJhd0RhdGEgPyBzY2hlbWEubG9hZChyYXdEYXRhLmRhdGFzZXRzLCByYXdEYXRhLmNvbmZpZykgOiBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc2luZ2xlIG9yIGFuIGFycmF5IG9mIGRhdGFzZXRzIHNhdmVkIHVzaW5nIGtlcGxlci5nbCBzY2hlbWFcbiAqIEBwYXJhbSByYXdEYXRhXG4gKiBAcGFyYW0gc2NoZW1hXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzS2VwbGVyZ2xEYXRhc2V0KFxuICByYXdEYXRhOiBvYmplY3QgfCBvYmplY3RbXSxcbiAgc2NoZW1hID0gS2VwbGVyR2xTY2hlbWFcbik6IFBhcnNlZERhdGFzZXQgfCBQYXJzZWREYXRhc2V0W10gfCBudWxsIHtcbiAgaWYgKCFyYXdEYXRhKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCByZXN1bHRzID0gc2NoZW1hLnBhcnNlU2F2ZWREYXRhKHRvQXJyYXkocmF3RGF0YSkpO1xuICBpZiAoIXJlc3VsdHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gQXJyYXkuaXNBcnJheShyYXdEYXRhKSA/IHJlc3VsdHMgOiByZXN1bHRzWzBdO1xufVxuXG4vKipcbiAqIFBhcnNlIGFycm93IHRhYmxlIGFuZCByZXR1cm4gYSBkYXRhc2V0XG4gKlxuICogQHBhcmFtIGFycm93VGFibGUgQXJyb3dUYWJsZSB0byBwYXJzZSwgc2VlIGxvYWRlcnMuZ2wvc2NoZW1hXG4gKiBAcmV0dXJucyBkYXRhc2V0IGNvbnRhaW5pbmcgYGZpZWxkc2AgYW5kIGByb3dzYCBvciBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzQXJyb3dUYWJsZShhcnJvd1RhYmxlOiBBcnJvd1RhYmxlKTogUHJvY2Vzc29yUmVzdWx0IHwgbnVsbCB7XG4gIC8vIEB0cy1pZ25vcmUgLSBVbmtub3duIGRhdGEgdHlwZSBjYXVzaW5nIGJ1aWxkIGZhaWx1cmVzXG4gIHJldHVybiBwcm9jZXNzQXJyb3dCYXRjaGVzKGFycm93VGFibGUuZGF0YS5iYXRjaGVzKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBHZW9BcnJvdyBtZXRhZGF0YSBmcm9tIGFuIEFwYWNoZSBBcnJvdyB0YWJsZSBzY2hlbWEuXG4gKiBGb3IgZ2VvcGFycXVldCBmaWxlcyBnZW9hcnJvdyBtZXRhZGF0YSBpc24ndCBwcmVzZW50IGluIGZpZWxkcywgc28gZXh0cmFjdCBleHRyYSBpbmZvIGZyb20gc2NoZW1hLlxuICogQHBhcmFtIHRhYmxlIFRoZSBBcGFjaGUgQXJyb3cgdGFibGUgdG8gZXh0cmFjdCBtZXRhZGF0YSBmcm9tLlxuICogQHJldHVybnMgQW4gb2JqZWN0IG1hcHBpbmcgY29sdW1uIG5hbWVzIHRvIHRoZWlyIEdlb0Fycm93IGVuY29kaW5nIHR5cGUuXG4gKiBAdGhyb3dzIExvZ3MgYW4gZXJyb3IgbWVzc2FnZSBpZiBwYXJzaW5nIG9mIG1ldGFkYXRhIGZhaWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvQXJyb3dNZXRhZGF0YUZyb21TY2hlbWEodGFibGU6IGFycm93LlRhYmxlKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGdlb0Fycm93TWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgdHJ5IHtcbiAgICBjb25zdCBnZW9TdHJpbmcgPSB0YWJsZS5zY2hlbWEubWV0YWRhdGE/LmdldCgnZ2VvJyk7XG4gICAgaWYgKGdlb1N0cmluZykge1xuICAgICAgY29uc3QgcGFyc2VkR2VvU3RyaW5nID0gSlNPTi5wYXJzZShnZW9TdHJpbmcpO1xuICAgICAgaWYgKHBhcnNlZEdlb1N0cmluZy5jb2x1bW5zKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHBhcnNlZEdlb1N0cmluZy5jb2x1bW5zKS5mb3JFYWNoKGNvbHVtbk5hbWUgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBwYXJzZWRHZW9TdHJpbmcuY29sdW1uc1tjb2x1bW5OYW1lXTtcbiAgICAgICAgICBpZiAoY29sdW1uRGF0YT8uZW5jb2RpbmcgPT09ICdXS0InKSB7XG4gICAgICAgICAgICBnZW9BcnJvd01ldGFkYXRhW2NvbHVtbk5hbWVdID0gR0VPQVJST1dfRVhURU5TSU9OUy5XS0I7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFRPRE8gcG90ZW50aWFsbHkgdGhlcmUgYXJlIG90aGVyIHR5cGVzIGJ1dCBubyBkYXRhc2V0cyB0byB0ZXN0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBkdXJpbmcgYXJyb3cgdGFibGUgc2NoZW1hIG1ldGFkYXRhIHBhcnNpbmcnKTtcbiAgfVxuICByZXR1cm4gZ2VvQXJyb3dNZXRhZGF0YTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBcGFjaGUgQXJyb3cgdGFibGUgc2NoZW1hIGludG8gYW4gYXJyYXkgb2YgS2VwbGVyLmdsIGZpZWxkIG9iamVjdHMuXG4gKiBAcGFyYW0gdGFibGUgVGhlIEFwYWNoZSBBcnJvdyB0YWJsZSB3aG9zZSBzY2hlbWEgbmVlZHMgdG8gYmUgY29udmVydGVkLlxuICogQHBhcmFtIGZpZWxkVHlwZVN1Z2dlc3Rpb25zIE9wdGlvbmFsIG1hcHBpbmcgb2YgZmllbGQgbmFtZXMgdG8gc3VnZ2VzdGVkIGZpZWxkIHR5cGVzLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZmllbGQgb2JqZWN0cyBzdWl0YWJsZSBmb3IgS2VwbGVyLmdsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyb3dTY2hlbWFUb0ZpZWxkcyhcbiAgdGFibGU6IGFycm93LlRhYmxlLFxuICBmaWVsZFR5cGVTdWdnZXN0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9XG4pOiBGaWVsZFtdIHtcbiAgY29uc3QgaGVhZGVyUm93ID0gdGFibGUuc2NoZW1hLmZpZWxkcy5tYXAoZiA9PiBmLm5hbWUpO1xuICBjb25zdCBzYW1wbGUgPSBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZUFycm93KHRhYmxlLCBoZWFkZXJSb3cpO1xuICBjb25zdCBrZXBsZXJGaWVsZHMgPSBnZXRGaWVsZHNGcm9tRGF0YShzYW1wbGUsIGhlYWRlclJvdyk7XG4gIGNvbnN0IGdlb0Fycm93TWV0YWRhdGEgPSBnZXRHZW9BcnJvd01ldGFkYXRhRnJvbVNjaGVtYSh0YWJsZSk7XG5cbiAgcmV0dXJuIHRhYmxlLnNjaGVtYS5maWVsZHMubWFwKChmaWVsZDogYXJyb3cuRmllbGQsIGZpZWxkSW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGxldCB0eXBlID0gYXJyb3dEYXRhVHlwZVRvRmllbGRUeXBlKGZpZWxkLnR5cGUpO1xuICAgIGxldCBhbmFseXplclR5cGUgPSBhcnJvd0RhdGFUeXBlVG9BbmFseXplckRhdGFUeXBlKGZpZWxkLnR5cGUpO1xuICAgIGxldCBmb3JtYXQgPSAnJztcblxuICAgIC8vIGdlb21ldHJ5IGZpZWxkcyBwcm9kdWNlZCBieSBEdWNrREIncyBzdF9hc2dlb2pzb24oKVxuICAgIGlmIChmaWVsZFR5cGVTdWdnZXN0aW9uc1tmaWVsZC5uYW1lXSA9PT0gJ0pTT04nKSB7XG4gICAgICB0eXBlID0gQUxMX0ZJRUxEX1RZUEVTLmdlb2pzb247XG4gICAgICBhbmFseXplclR5cGUgPSBBbmFseXplckRBVEFfVFlQRVMuR0VPTUVUUllfRlJPTV9TVFJJTkc7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGZpZWxkVHlwZVN1Z2dlc3Rpb25zW2ZpZWxkLm5hbWVdID09PSAnR0VPTUVUUlknIHx8XG4gICAgICBmaWVsZC5tZXRhZGF0YS5nZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZKT8uc3RhcnRzV2l0aCgnZ2VvYXJyb3cnKVxuICAgICkge1xuICAgICAgdHlwZSA9IEFMTF9GSUVMRF9UWVBFUy5nZW9hcnJvdztcbiAgICAgIGFuYWx5emVyVHlwZSA9IEFuYWx5emVyREFUQV9UWVBFUy5HRU9NRVRSWTtcbiAgICB9IGVsc2UgaWYgKGdlb0Fycm93TWV0YWRhdGFbZmllbGQubmFtZV0pIHtcbiAgICAgIHR5cGUgPSBBTExfRklFTERfVFlQRVMuZ2VvYXJyb3c7XG4gICAgICBhbmFseXplclR5cGUgPSBBbmFseXplckRBVEFfVFlQRVMuR0VPTUVUUlk7XG4gICAgICBmaWVsZC5tZXRhZGF0YT8uc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgZ2VvQXJyb3dNZXRhZGF0YVtmaWVsZC5uYW1lXSk7XG4gICAgfSBlbHNlIGlmIChmaWVsZFR5cGVTdWdnZXN0aW9uc1tmaWVsZC5uYW1lXSA9PT0gJ0JMT0InKSB7XG4gICAgICAvLyBXaGVuIGFycm93IHdrYiBjb2x1bW4gc2F2ZWQgdG8gRHVja0RCIGFzIEJMT0Igd2l0aG91dCBhbnkgbWV0YWRhdGEsIHRoZW4gcXVlcmllZCBiYWNrXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGFibGUuZ2V0Q2hpbGRBdChmaWVsZEluZGV4KT8uZ2V0KDApO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGNvbnN0IGJpbmFyeUdlbyA9IHBhcnNlU3luYyhkYXRhLCBXS0JMb2FkZXIpO1xuICAgICAgICAgIGlmIChiaW5hcnlHZW8pIHtcbiAgICAgICAgICAgIHR5cGUgPSBBTExfRklFTERfVFlQRVMuZ2VvYXJyb3c7XG4gICAgICAgICAgICBhbmFseXplclR5cGUgPSBBbmFseXplckRBVEFfVFlQRVMuR0VPTUVUUlk7XG4gICAgICAgICAgICBmaWVsZC5tZXRhZGF0YT8uc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5XS0IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gaWdub3JlLCBub3QgV0tCXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE8gc2hvdWxkIHdlIHVzZSBLZXBsZXIgZ2V0RmllbGRzRnJvbURhdGEgaW5zdGVhZFxuICAgICAgLy8gb2YgYXJyb3dEYXRhVHlwZVRvRmllbGRUeXBlIGZvciBhbGwgZmllbGRzP1xuICAgICAgY29uc3Qga2VwbGVyRmllbGQgPSBrZXBsZXJGaWVsZHNbZmllbGRJbmRleF07XG4gICAgICBpZiAoa2VwbGVyRmllbGQudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcCkge1xuICAgICAgICB0eXBlID0ga2VwbGVyRmllbGQudHlwZTtcbiAgICAgICAgYW5hbHl6ZXJUeXBlID0ga2VwbGVyRmllbGQuYW5hbHl6ZXJUeXBlO1xuICAgICAgICBmb3JtYXQgPSBrZXBsZXJGaWVsZC5mb3JtYXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmZpZWxkLFxuICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgIGlkOiBmaWVsZC5uYW1lLFxuICAgICAgZGlzcGxheU5hbWU6IGZpZWxkLm5hbWUsXG4gICAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICAgIGZpZWxkSWR4OiBmaWVsZEluZGV4LFxuICAgICAgdHlwZSxcbiAgICAgIGFuYWx5emVyVHlwZSxcbiAgICAgIHZhbHVlQWNjZXNzb3I6IChkYzogYW55KSA9PiBkID0+IHtcbiAgICAgICAgcmV0dXJuIGRjLnZhbHVlQXQoZC5pbmRleCwgZmllbGRJbmRleCk7XG4gICAgICB9LFxuICAgICAgbWV0YWRhdGE6IGZpZWxkLm1ldGFkYXRhXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogUGFyc2UgYXJyb3cgYmF0Y2hlcyByZXR1cm5lZCBmcm9tIHBhcnNlSW5CYXRjaGVzKClcbiAqXG4gKiBAcGFyYW0gYXJyb3dUYWJsZSB0aGUgYXJyb3cgdGFibGUgdG8gcGFyc2VcbiAqIEByZXR1cm5zIGRhdGFzZXQgY29udGFpbmluZyBgZmllbGRzYCBhbmQgYHJvd3NgIG9yIG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NBcnJvd0JhdGNoZXMoYXJyb3dCYXRjaGVzOiBhcnJvdy5SZWNvcmRCYXRjaFtdKTogUHJvY2Vzc29yUmVzdWx0IHwgbnVsbCB7XG4gIGlmIChhcnJvd0JhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgYXJyb3dUYWJsZSA9IG5ldyBhcnJvdy5UYWJsZShhcnJvd0JhdGNoZXMpO1xuICBjb25zdCBmaWVsZHMgPSBhcnJvd1NjaGVtYVRvRmllbGRzKGFycm93VGFibGUpO1xuXG4gIGNvbnN0IGNvbHMgPSBbLi4uQXJyYXkoYXJyb3dUYWJsZS5udW1Db2xzKS5rZXlzKCldLm1hcChpID0+IGFycm93VGFibGUuZ2V0Q2hpbGRBdChpKSk7XG5cbiAgLy8gcmV0dXJuIGVtcHR5IHJvd3MgYW5kIHVzZSByYXcgYXJyb3cgdGFibGUgdG8gY29uc3RydWN0IGNvbHVtbi13aXNlIGRhdGEgY29udGFpbmVyXG4gIHJldHVybiB7XG4gICAgZmllbGRzLFxuICAgIHJvd3M6IFtdLFxuICAgIGNvbHMsXG4gICAgbWV0YWRhdGE6IGFycm93VGFibGUuc2NoZW1hLm1ldGFkYXRhLFxuICAgIC8vIFNhdmUgb3JpZ2luYWwgYXJyb3cgc2NoZW1hLCBmb3IgYmV0dGVyIGluZ2VzdGlvbiBpbnRvIER1Y2tEQi5cbiAgICAvLyBUT0RPIGNvbnNpZGVyIHJldHVybmluZyBhcnJvd1RhYmxlIGluIGNvbHMsIG5vdCBhbiBhcnJheSBvZiBWZWN0b3JzIGZyb20gYXJyb3dUYWJsZS5cbiAgICBhcnJvd1NjaGVtYTogYXJyb3dUYWJsZS5zY2hlbWFcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IERBVEFTRVRfSEFORExFUlMgPSB7XG4gIFtEQVRBU0VUX0ZPUk1BVFMucm93XTogcHJvY2Vzc1Jvd09iamVjdCxcbiAgW0RBVEFTRVRfRk9STUFUUy5nZW9qc29uXTogcHJvY2Vzc0dlb2pzb24sXG4gIFtEQVRBU0VUX0ZPUk1BVFMuY3N2XTogcHJvY2Vzc0NzdkRhdGEsXG4gIFtEQVRBU0VUX0ZPUk1BVFMuYXJyb3ddOiBwcm9jZXNzQXJyb3dUYWJsZSxcbiAgW0RBVEFTRVRfRk9STUFUUy5rZXBsZXJnbF06IHByb2Nlc3NLZXBsZXJnbERhdGFzZXRcbn07XG5cbmV4cG9ydCBjb25zdCBQcm9jZXNzb3JzOiB7XG4gIHByb2Nlc3NHZW9qc29uOiB0eXBlb2YgcHJvY2Vzc0dlb2pzb247XG4gIHByb2Nlc3NDc3ZEYXRhOiB0eXBlb2YgcHJvY2Vzc0NzdkRhdGE7XG4gIHByb2Nlc3NBcnJvd1RhYmxlOiB0eXBlb2YgcHJvY2Vzc0Fycm93VGFibGU7XG4gIHByb2Nlc3NBcnJvd0JhdGNoZXM6IHR5cGVvZiBwcm9jZXNzQXJyb3dCYXRjaGVzO1xuICBwcm9jZXNzUm93T2JqZWN0OiB0eXBlb2YgcHJvY2Vzc1Jvd09iamVjdDtcbiAgcHJvY2Vzc0tlcGxlcmdsSlNPTjogdHlwZW9mIHByb2Nlc3NLZXBsZXJnbEpTT047XG4gIHByb2Nlc3NLZXBsZXJnbERhdGFzZXQ6IHR5cGVvZiBwcm9jZXNzS2VwbGVyZ2xEYXRhc2V0O1xuICBhbmFseXplclR5cGVUb0ZpZWxkVHlwZTogdHlwZW9mIGFuYWx5emVyVHlwZVRvRmllbGRUeXBlO1xuICBnZXRGaWVsZHNGcm9tRGF0YTogdHlwZW9mIGdldEZpZWxkc0Zyb21EYXRhO1xuICBwYXJzZUNzdlJvd3NCeUZpZWxkVHlwZTogdHlwZW9mIHBhcnNlQ3N2Um93c0J5RmllbGRUeXBlO1xufSA9IHtcbiAgcHJvY2Vzc0dlb2pzb24sXG4gIHByb2Nlc3NDc3ZEYXRhLFxuICBwcm9jZXNzQXJyb3dUYWJsZSxcbiAgcHJvY2Vzc0Fycm93QmF0Y2hlcyxcbiAgcHJvY2Vzc1Jvd09iamVjdCxcbiAgcHJvY2Vzc0tlcGxlcmdsSlNPTixcbiAgcHJvY2Vzc0tlcGxlcmdsRGF0YXNldCxcbiAgYW5hbHl6ZXJUeXBlVG9GaWVsZFR5cGUsXG4gIGdldEZpZWxkc0Zyb21EYXRhLFxuICBwYXJzZUNzdlJvd3NCeUZpZWxkVHlwZVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsYUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLEtBQUEsR0FBQUwsT0FBQTtBQUVBLElBQUFNLElBQUEsR0FBQU4sT0FBQTtBQUVBLElBQUFPLFVBQUEsR0FBQVAsT0FBQTtBQVFBLElBQUFRLE1BQUEsR0FBQVIsT0FBQTtBQU1BLElBQUFTLFlBQUEsR0FBQVQsT0FBQTtBQVNBLElBQUFVLFFBQUEsR0FBQVYsT0FBQTtBQUFzRixTQUFBVyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQWIsd0JBQUFhLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FB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
559
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9kM0RzdiIsIl90eXBlQW5hbHl6ZXIiLCJfZ2VvanNvbk5vcm1hbGl6ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY29yZSIsIl93a3QiLCJfY29uc3RhbnRzIiwiX3V0aWxzIiwiX2NvbW1vblV0aWxzIiwiX3NjaGVtYXMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJDU1ZfTlVMTFMiLCJleHBvcnRzIiwidHJ5UGFyc2VKc29uU3RyaW5nIiwic3RyIiwiSlNPTiIsInBhcnNlIiwiUEFSU0VfRklFTERfVkFMVUVfRlJPTV9TVFJJTkciLCJBTExfRklFTERfVFlQRVMiLCJ2YWxpZCIsImQiLCJpbnRlZ2VyIiwicGFyc2VJbnQiLCJ0aW1lc3RhbXAiLCJmaWVsZCIsImluY2x1ZGVzIiwiZm9ybWF0IiwiTnVtYmVyIiwicmVhbCIsInBhcnNlRmxvYXQiLCJvYmplY3QiLCJpc1BsYWluT2JqZWN0IiwiYXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJoMyIsImgzSXNWYWxpZCIsInByb2Nlc3NDc3ZEYXRhIiwicmF3RGF0YSIsImhlYWRlciIsInJvd3MiLCJoZWFkZXJSb3ciLCJwYXJzZWRSb3dzIiwiY3N2UGFyc2VSb3dzIiwiRXJyb3IiLCJzbGljZSIsImNsZWFuVXBGYWxzeUNzdlZhbHVlIiwic2FtcGxlIiwiZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUiLCJmaWVsZHMiLCJnZXRGaWVsZHNGcm9tRGF0YSIsInBhcnNlUm93c0J5RmllbGRzIiwiZ2VvanNvbkZpZWxkSWR4IiwiZmluZEluZGV4IiwiZiIsIm5hbWUiLCJwYXJzZUNzdlJvd3NCeUZpZWxkVHlwZSIsImJpbmQiLCJyZSIsIlJlZ0V4cCIsImoiLCJtYXRjaCIsImdlb0ZpZWxkSWR4IiwicGFyc2VyIiwidHlwZSIsImZpcnN0IiwiZmluZCIsIm5vdE51bGxvclVuZGVmaW5lZCIsInJvdyIsInByb3BlcnRpZXMiLCJwcm9jZXNzUm93T2JqZWN0IiwiZmlyc3RSb3ciLCJtYXAiLCJrZXkiLCJwcm9jZXNzR2VvanNvbiIsIm5vcm1hbGl6ZWRHZW9qc29uIiwibm9ybWFsaXplIiwiZmVhdHVyZXMiLCJjb25jYXQiLCJHVUlERVNfRklMRV9GT1JNQVRfRE9DIiwiYWxsRGF0YVJvd3MiLCJnZW9tZXRyeSIsIl9nZW9qc29uIiwicmVkdWNlIiwiYWNjdSIsImN1cnIiLCJwcm9jZXNzS2VwbGVyZ2xKU09OIiwic2NoZW1hIiwidW5kZWZpbmVkIiwiS2VwbGVyR2xTY2hlbWEiLCJsb2FkIiwiZGF0YXNldHMiLCJjb25maWciLCJwcm9jZXNzS2VwbGVyZ2xEYXRhc2V0IiwicmVzdWx0cyIsInBhcnNlU2F2ZWREYXRhIiwidG9BcnJheSIsInByb2Nlc3NBcnJvd1RhYmxlIiwiYXJyb3dUYWJsZSIsInByb2Nlc3NBcnJvd0JhdGNoZXMiLCJkYXRhIiwiYmF0Y2hlcyIsImdldEdlb0Fycm93TWV0YWRhdGFGcm9tU2NoZW1hIiwidGFibGUiLCJnZW9BcnJvd01ldGFkYXRhIiwiX3RhYmxlJHNjaGVtYSRtZXRhZGF0IiwiZ2VvU3RyaW5nIiwibWV0YWRhdGEiLCJwYXJzZWRHZW9TdHJpbmciLCJjb2x1bW5zIiwiY29sdW1uTmFtZSIsImNvbHVtbkRhdGEiLCJlbmNvZGluZyIsIkdFT0FSUk9XX0VYVEVOU0lPTlMiLCJXS0IiLCJlcnJvciIsImNvbnNvbGUiLCJhcnJvd1NjaGVtYVRvRmllbGRzIiwiZmllbGRUeXBlU3VnZ2VzdGlvbnMiLCJnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZUFycm93Iiwia2VwbGVyRmllbGRzIiwiZmllbGRJbmRleCIsIl9maWVsZCRtZXRhZGF0YSRnZXQiLCJhcnJvd0RhdGFUeXBlVG9GaWVsZFR5cGUiLCJhbmFseXplclR5cGUiLCJhcnJvd0RhdGFUeXBlVG9BbmFseXplckRhdGFUeXBlIiwiZmllbGRUeXBlU3VnZ2VzdGlvbiIsImtlcGxlckZpZWxkIiwiZ2VvanNvbiIsIkFuYWx5emVyREFUQV9UWVBFUyIsIkdFT01FVFJZX0ZST01fU1RSSU5HIiwiR0VPQVJST1dfTUVUQURBVEFfS0VZIiwic3RhcnRzV2l0aCIsImdlb2Fycm93IiwiR0VPTUVUUlkiLCJfZmllbGQkbWV0YWRhdGEiLCJfdGFibGUkZ2V0Q2hpbGRBdCIsImdldENoaWxkQXQiLCJiaW5hcnlHZW8iLCJwYXJzZVN5bmMiLCJXS0JMb2FkZXIiLCJfZmllbGQkbWV0YWRhdGEyIiwiaWQiLCJkaXNwbGF5TmFtZSIsImZpZWxkSWR4IiwidmFsdWVBY2Nlc3NvciIsImRjIiwidmFsdWVBdCIsImluZGV4IiwiYXJyb3dCYXRjaGVzIiwiVGFibGUiLCJjb2xzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIm51bUNvbHMiLCJhcnJvd1NjaGVtYSIsIkRBVEFTRVRfSEFORExFUlMiLCJEQVRBU0VUX0ZPUk1BVFMiLCJjc3YiLCJrZXBsZXJnbCIsIlByb2Nlc3NvcnMiLCJhbmFseXplclR5cGVUb0ZpZWxkVHlwZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhLXByb2Nlc3Nvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IHtjc3ZQYXJzZVJvd3N9IGZyb20gJ2QzLWRzdic7XG5pbXBvcnQge0RBVEFfVFlQRVMgYXMgQW5hbHl6ZXJEQVRBX1RZUEVTfSBmcm9tICd0eXBlLWFuYWx5emVyJztcbmltcG9ydCBub3JtYWxpemUgZnJvbSAnQG1hcGJveC9nZW9qc29uLW5vcm1hbGl6ZSc7XG5pbXBvcnQge3BhcnNlU3luY30gZnJvbSAnQGxvYWRlcnMuZ2wvY29yZSc7XG5pbXBvcnQge0Fycm93VGFibGV9IGZyb20gJ0Bsb2FkZXJzLmdsL3NjaGVtYSc7XG5pbXBvcnQge1dLQkxvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvd2t0JztcblxuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBEQVRBU0VUX0ZPUk1BVFMsXG4gIEdFT0FSUk9XX0VYVEVOU0lPTlMsXG4gIEdFT0FSUk9XX01FVEFEQVRBX0tFWSxcbiAgR1VJREVTX0ZJTEVfRk9STUFUX0RPQ1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1Byb2Nlc3NvclJlc3VsdCwgRmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtcbiAgYXJyb3dEYXRhVHlwZVRvQW5hbHl6ZXJEYXRhVHlwZSxcbiAgYXJyb3dEYXRhVHlwZVRvRmllbGRUeXBlLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaXNQbGFpbk9iamVjdFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7XG4gIGFuYWx5emVyVHlwZVRvRmllbGRUeXBlLFxuICBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSxcbiAgZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emVBcnJvdyxcbiAgZ2V0RmllbGRzRnJvbURhdGEsXG4gIGgzSXNWYWxpZCxcbiAgbm90TnVsbG9yVW5kZWZpbmVkLFxuICB0b0FycmF5XG59IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7S2VwbGVyR2xTY2hlbWEsIFBhcnNlZERhdGFzZXQsIFNhdmVkTWFwLCBMb2FkZWRNYXB9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge0ZlYXR1cmV9IGZyb20gJ0BuZWJ1bGEuZ2wvZWRpdC1tb2Rlcyc7XG5cbi8vIGlmIGFueSBvZiB0aGVzZSB2YWx1ZSBvY2N1cnMgaW4gY3N2LCBwYXJzZSBpdCB0byBudWxsO1xuLy8gY29uc3QgQ1NWX05VTExTID0gWycnLCAnbnVsbCcsICdOVUxMJywgJ051bGwnLCAnTmFOJywgJy9OJ107XG4vLyBtYXRjaGVzIGVtcHR5IHN0cmluZ1xuZXhwb3J0IGNvbnN0IENTVl9OVUxMUyA9IC9eKG51bGx8TlVMTHxOdWxsfE5hTnxcXC9OfHwpJC87XG5cbmZ1bmN0aW9uIHRyeVBhcnNlSnNvblN0cmluZyhzdHIpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFBBUlNFX0ZJRUxEX1ZBTFVFX0ZST01fU1RSSU5HID0ge1xuICBbQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW5dOiB7XG4gICAgdmFsaWQ6IChkOiB1bmtub3duKTogYm9vbGVhbiA9PiB0eXBlb2YgZCA9PT0gJ2Jvb2xlYW4nLFxuICAgIHBhcnNlOiAoZDogdW5rbm93bik6IGJvb2xlYW4gPT4gZCA9PT0gJ3RydWUnIHx8IGQgPT09ICdUcnVlJyB8fCBkID09PSAnVFJVRScgfHwgZCA9PT0gJzEnXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuaW50ZWdlcl06IHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdmFsaWQ6IChkOiB1bmtub3duKTogYm9vbGVhbiA9PiBwYXJzZUludChkLCAxMCkgPT09IGQsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHBhcnNlOiAoZDogdW5rbm93bik6IG51bWJlciA9PiBwYXJzZUludChkLCAxMClcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXBdOiB7XG4gICAgdmFsaWQ6IChkOiB1bmtub3duLCBmaWVsZDogRmllbGQpOiBib29sZWFuID0+XG4gICAgICBbJ3gnLCAnWCddLmluY2x1ZGVzKGZpZWxkLmZvcm1hdCkgPyB0eXBlb2YgZCA9PT0gJ251bWJlcicgOiB0eXBlb2YgZCA9PT0gJ3N0cmluZycsXG4gICAgcGFyc2U6IChkOiBhbnksIGZpZWxkOiBGaWVsZCkgPT4gKFsneCcsICdYJ10uaW5jbHVkZXMoZmllbGQuZm9ybWF0KSA/IE51bWJlcihkKSA6IGQpXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMucmVhbF06IHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdmFsaWQ6IChkOiB1bmtub3duKTogYm9vbGVhbiA9PiBwYXJzZUZsb2F0KGQpID09PSBkLFxuICAgIC8vIE5vdGUgdGhpcyB3aWxsIHJlc3VsdCBpbiBOYU4gZm9yIHNvbWUgc3RyaW5nXG4gICAgcGFyc2U6IHBhcnNlRmxvYXRcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5vYmplY3RdOiB7XG4gICAgdmFsaWQ6IGlzUGxhaW5PYmplY3QsXG4gICAgcGFyc2U6IHRyeVBhcnNlSnNvblN0cmluZ1xuICB9LFxuXG4gIFtBTExfRklFTERfVFlQRVMuYXJyYXldOiB7XG4gICAgdmFsaWQ6IEFycmF5LmlzQXJyYXksXG4gICAgcGFyc2U6IHRyeVBhcnNlSnNvblN0cmluZ1xuICB9LFxuXG4gIFtBTExfRklFTERfVFlQRVMuaDNdOiB7XG4gICAgdmFsaWQ6IGQgPT4gaDNJc1ZhbGlkKGQpLFxuICAgIHBhcnNlOiBkID0+IGRcbiAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzIGNzdiBkYXRhLCBvdXRwdXQgYSBkYXRhIG9iamVjdCB3aXRoIGB7ZmllbGRzOiBbXSwgcm93czogW119YC5cbiAqIFRoZSBkYXRhIG9iamVjdCBjYW4gYmUgd3JhcHBlZCBpbiBhIGBkYXRhc2V0YCBhbmQgcGFzcyB0byBbYGFkZERhdGFUb01hcGBdKC4uL2FjdGlvbnMvYWN0aW9ucy5tZCNhZGRkYXRhdG9tYXApXG4gKiBAcGFyYW0gcmF3RGF0YSByYXcgY3N2IHN0cmluZ1xuICogQHJldHVybnMgZGF0YSBvYmplY3QgYHtmaWVsZHM6IFtdLCByb3dzOiBbXX1gIGNhbiBiZSBwYXNzZWQgdG8gYWRkRGF0YVRvTWFwc1xuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7cHJvY2Vzc0NzdkRhdGF9IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG4gKlxuICogY29uc3QgdGVzdERhdGEgPSBgZ3BzX2RhdGEudXRjX3RpbWVzdGFtcCxncHNfZGF0YS5sYXQsZ3BzX2RhdGEubG5nLGdwc19kYXRhLnR5cGVzLGVwb2NoLGhhc19yZXN1bHQsaWQsdGltZSxiZWdpbnRyaXBfdHNfdXRjLGJlZ2ludHJpcF90c19sb2NhbCxkYXRlXG4gKiAyMDE2LTA5LTE3IDAwOjA5OjU1LDI5Ljk5MDA5MzcsMzEuMjU5MDU0Mixkcml2ZXJfYW5hbHl0aWNzLDE0NzI2ODgwMDAwMDAsRmFsc2UsMSwyMDE2LTA5LTIzVDAwOjAwOjAwLjAwMFosMjAxNi0xMC0wMSAwOTo0MTozOSswMDowMCwyMDE2LTEwLTAxIDA5OjQxOjM5KzAwOjAwLDIwMTYtMDktMjNcbiAqIDIwMTYtMDktMTcgMDA6MTA6NTYsMjkuOTkyNzY5OSwzMS4yNDYxMTQyLGRyaXZlcl9hbmFseXRpY3MsMTQ3MjY4ODAwMDAwMCxGYWxzZSwyLDIwMTYtMDktMjNUMDA6MDA6MDAuMDAwWiwyMDE2LTEwLTAxIDA5OjQ2OjM3KzAwOjAwLDIwMTYtMTAtMDEgMTY6NDY6MzcrMDA6MDAsMjAxNi0wOS0yM1xuICogMjAxNi0wOS0xNyAwMDoxMTo1NiwyOS45OTA3MjYxLDMxLjIzMTI3NDIsZHJpdmVyX2FuYWx5dGljcywxNDcyNjg4MDAwMDAwLEZhbHNlLDMsMjAxNi0wOS0yM1QwMDowMDowMC4wMDBaLCwsMjAxNi0wOS0yM1xuICogMjAxNi0wOS0xNyAwMDoxMjo1OCwyOS45ODcwMDc0LDMxLjIxNzU4MjcsZHJpdmVyX2FuYWx5dGljcywxNDcyNjg4MDAwMDAwLEZhbHNlLDQsMjAxNi0wOS0yM1QwMDowMDowMC4wMDBaLCwsMjAxNi0wOS0yM2BcbiAqXG4gKiBjb25zdCBkYXRhc2V0ID0ge1xuICogIGluZm86IHtpZDogJ3Rlc3RfZGF0YScsIGxhYmVsOiAnTXkgQ3N2J30sXG4gKiAgZGF0YTogcHJvY2Vzc0NzdkRhdGEodGVzdERhdGEpXG4gKiB9O1xuICpcbiAqIGRpc3BhdGNoKGFkZERhdGFUb01hcCh7XG4gKiAgZGF0YXNldHM6IFtkYXRhc2V0XSxcbiAqICBvcHRpb25zOiB7Y2VudGVyTWFwOiB0cnVlLCByZWFkT25seTogdHJ1ZX1cbiAqIH0pKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDc3ZEYXRhKHJhd0RhdGE6IHVua25vd25bXVtdIHwgc3RyaW5nLCBoZWFkZXI/OiBzdHJpbmdbXSk6IFByb2Nlc3NvclJlc3VsdCB7XG4gIGxldCByb3dzOiB1bmtub3duW11bXSB8IHVuZGVmaW5lZDtcbiAgbGV0IGhlYWRlclJvdzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgaWYgKHR5cGVvZiByYXdEYXRhID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHBhcnNlZFJvd3M6IHN0cmluZ1tdW10gPSBjc3ZQYXJzZVJvd3MocmF3RGF0YSk7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyc2VkUm93cykgfHwgcGFyc2VkUm93cy5sZW5ndGggPCAyKSB7XG4gICAgICAvLyBsb29rcyBsaWtlIGFuIGVtcHR5IGZpbGUsIHRocm93IGVycm9yIHRvIGJlIGNhdGNoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MgQ3N2IERhdGEgRmFpbGVkOiBDU1YgaXMgZW1wdHknKTtcbiAgICB9XG4gICAgaGVhZGVyUm93ID0gcGFyc2VkUm93c1swXTtcbiAgICByb3dzID0gcGFyc2VkUm93cy5zbGljZSgxKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJhd0RhdGEpICYmIHJhd0RhdGEubGVuZ3RoKSB7XG4gICAgcm93cyA9IHJhd0RhdGE7XG4gICAgaGVhZGVyUm93ID0gaGVhZGVyO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlclJvdykpIHtcbiAgICAgIC8vIGlmIGRhdGEgaXMgcGFzc2VkIGluIGFzIGFycmF5IG9mIHJvd3MgYW5kIG1pc3NpbmcgaGVhZGVyXG4gICAgICAvLyBhc3N1bWUgZmlyc3Qgcm93IGlzIGhlYWRlclxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaGVhZGVyUm93ID0gcmF3RGF0YVswXTtcbiAgICAgIHJvd3MgPSByYXdEYXRhLnNsaWNlKDEpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghcm93cyB8fCAhaGVhZGVyUm93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGlucHV0IHBhc3NlZCB0byBwcm9jZXNzQ3N2RGF0YScpO1xuICB9XG5cbiAgLy8gaGVyZSB3ZSBhc3N1bWUgdGhlIGNzdiBmaWxlIHRoYXQgcGVvcGxlIHVwbG9hZGVkIHdpbGwgaGF2ZSBmaXJzdCByb3dcbiAgLy8gYXMgbmFtZSBvZiB0aGUgY29sdW1uXG5cbiAgY2xlYW5VcEZhbHN5Q3N2VmFsdWUocm93cyk7XG4gIC8vIE5vIG5lZWQgdG8gcnVuIHR5cGUgZGV0ZWN0aW9uIG9uIGV2ZXJ5IGRhdGEgcG9pbnRcbiAgLy8gaGVyZSB3ZSBnZXQgYSBsaXN0IG9mIG5vbmUgbnVsbCB2YWx1ZXMgdG8gcnVuIGFuYWx5emUgb25cbiAgY29uc3Qgc2FtcGxlID0gZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUoe2ZpZWxkczogaGVhZGVyUm93LCByb3dzfSk7XG4gIGNvbnN0IGZpZWxkcyA9IGdldEZpZWxkc0Zyb21EYXRhKHNhbXBsZSwgaGVhZGVyUm93KTtcbiAgY29uc3QgcGFyc2VkUm93cyA9IHBhcnNlUm93c0J5RmllbGRzKHJvd3MsIGZpZWxkcyk7XG5cbiAgcmV0dXJuIHtmaWVsZHMsIHJvd3M6IHBhcnNlZFJvd3N9O1xufVxuXG4vKipcbiAqIFBhcnNlIHJvd3Mgb2YgY3N2IGJ5IGFuYWx5emVkIGZpZWxkIHR5cGVzLiBTbyB0aGF0IGAnMSdgIC0+IGAxYCwgYCdUcnVlJ2AgLT4gYHRydWVgXG4gKiBAcGFyYW0gcm93c1xuICogQHBhcmFtIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSb3dzQnlGaWVsZHMocm93czogYW55W11bXSwgZmllbGRzOiBGaWVsZFtdKSB7XG4gIC8vIEVkaXQgcm93cyBpbiBwbGFjZVxuICBjb25zdCBnZW9qc29uRmllbGRJZHggPSBmaWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSAnX2dlb2pzb24nKTtcbiAgZmllbGRzLmZvckVhY2gocGFyc2VDc3ZSb3dzQnlGaWVsZFR5cGUuYmluZChudWxsLCByb3dzLCBnZW9qc29uRmllbGRJZHgpKTtcblxuICByZXR1cm4gcm93cztcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGZhbHN5IHZhbHVlIGluIGNzdiBpbmNsdWRpbmcgYCcnLCAnbnVsbCcsICdOVUxMJywgJ051bGwnLCAnTmFOJ2AgdG8gYG51bGxgLFxuICogc28gdGhhdCB0eXBlLWFuYWx5emVyIHdvbid0IGRldGVjdCBpdCBhcyBzdHJpbmdcbiAqXG4gKiBAcGFyYW0gcm93c1xuICovXG5mdW5jdGlvbiBjbGVhblVwRmFsc3lDc3ZWYWx1ZShyb3dzOiB1bmtub3duW11bXSk6IHZvaWQge1xuICBjb25zdCByZSA9IG5ldyBSZWdFeHAoQ1NWX05VTExTLCAnZycpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvd3NbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIGFuYWx5emVyIHdpbGwgc2V0IGFueSBmaWVsZHMgdG8gJ3N0cmluZycgaWYgdGhlcmUgYXJlIGVtcHR5IHZhbHVlc1xuICAgICAgLy8gd2hpY2ggd2lsbCBiZSBwYXJzZWQgYXMgJycgYnkgZDMuY3N2XG4gICAgICAvLyBoZXJlIHdlIHBhcnNlIGVtcHR5IGRhdGEgYXMgbnVsbFxuICAgICAgLy8gVE9ETzogY3JlYXRlIHdhcm5pbmcgd2hlbiBkZWx0ZWN0IGBDU1ZfTlVMTFNgIGluIHRoZSBkYXRhXG4gICAgICBpZiAodHlwZW9mIHJvd3NbaV1bal0gPT09ICdzdHJpbmcnICYmIChyb3dzW2ldW2pdIGFzIHN0cmluZykubWF0Y2gocmUpKSB7XG4gICAgICAgIHJvd3NbaV1bal0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb2Nlc3MgdXBsb2FkZWQgY3N2IGZpbGUgdG8gcGFyc2UgdmFsdWUgYnkgZmllbGQgdHlwZVxuICpcbiAqIEBwYXJhbSByb3dzXG4gKiBAcGFyYW0gZ2VvRmllbGRJZHggZmllbGQgaW5kZXhcbiAqIEBwYXJhbSBmaWVsZFxuICogQHBhcmFtIGlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ3N2Um93c0J5RmllbGRUeXBlKFxuICByb3dzOiB1bmtub3duW11bXSxcbiAgZ2VvRmllbGRJZHg6IG51bWJlcixcbiAgZmllbGQ6IEZpZWxkLFxuICBpOiBudW1iZXJcbik6IHZvaWQge1xuICBjb25zdCBwYXJzZXIgPSBQQVJTRV9GSUVMRF9WQUxVRV9GUk9NX1NUUklOR1tmaWVsZC50eXBlXTtcbiAgaWYgKHBhcnNlcikge1xuICAgIC8vIGNoZWNrIGZpcnN0IG5vdCBudWxsIHZhbHVlIG9mIGl0J3MgYWxyZWFkeSBwYXJzZWRcbiAgICBjb25zdCBmaXJzdCA9IHJvd3MuZmluZChyID0+IG5vdE51bGxvclVuZGVmaW5lZChyW2ldKSk7XG4gICAgaWYgKCFmaXJzdCB8fCBwYXJzZXIudmFsaWQoZmlyc3RbaV0sIGZpZWxkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgIC8vIHBhcnNlIHN0cmluZyB2YWx1ZSBiYXNlZCBvbiBmaWVsZCB0eXBlXG4gICAgICBpZiAocm93W2ldICE9PSBudWxsKSB7XG4gICAgICAgIHJvd1tpXSA9IHBhcnNlci5wYXJzZShyb3dbaV0sIGZpZWxkKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdlb0ZpZWxkSWR4ID4gLTEgJiZcbiAgICAgICAgICBpc1BsYWluT2JqZWN0KHJvd1tnZW9GaWVsZElkeF0pICYmXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGhhc093blByb3BlcnR5KHJvd1tnZW9GaWVsZElkeF0sICdwcm9wZXJ0aWVzJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHJvd1tnZW9GaWVsZElkeF0ucHJvcGVydGllc1tmaWVsZC5uYW1lXSA9IHJvd1tpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4vKipcbiAqIFByb2Nlc3MgZGF0YSB3aGVyZSBlYWNoIHJvdyBpcyBhbiBvYmplY3QsIG91dHB1dCBjYW4gYmUgcGFzc2VkIHRvIFtgYWRkRGF0YVRvTWFwYF0oLi4vYWN0aW9ucy9hY3Rpb25zLm1kI2FkZGRhdGF0b21hcClcbiAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gbWF5IG11dGF0ZSBpbnB1dC5cbiAqIEBwYXJhbSByYXdEYXRhIGFuIGFycmF5IG9mIHJvdyBvYmplY3QsIGVhY2ggb2JqZWN0IHNob3VsZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBrZXlzXG4gKiBAcmV0dXJucyBkYXRhc2V0IGNvbnRhaW5pbmcgYGZpZWxkc2AgYW5kIGByb3dzYFxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7YWRkRGF0YVRvTWFwfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuICogaW1wb3J0IHtwcm9jZXNzUm93T2JqZWN0fSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuICpcbiAqIGNvbnN0IGRhdGEgPSBbXG4gKiAge2xhdDogMzEuMjcsIGxuZzogMTI3LjU2LCB2YWx1ZTogM30sXG4gKiAge2xhdDogMzEuMjIsIGxuZzogMTI2LjI2LCB2YWx1ZTogMX1cbiAqIF07XG4gKlxuICogZGlzcGF0Y2goYWRkRGF0YVRvTWFwKHtcbiAqICBkYXRhc2V0czoge1xuICogICAgaW5mbzoge2xhYmVsOiAnTXkgRGF0YScsIGlkOiAnbXlfZGF0YSd9LFxuICogICAgZGF0YTogcHJvY2Vzc1Jvd09iamVjdChkYXRhKVxuICogIH1cbiAqIH0pKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3dPYmplY3QocmF3RGF0YTogdW5rbm93bltdKTogUHJvY2Vzc29yUmVzdWx0IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhd0RhdGEpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoIXJhd0RhdGEubGVuZ3RoKSB7XG4gICAgLy8gZGF0YSBpcyBlbXB0eVxuICAgIHJldHVybiB7XG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgcm93czogW11cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZmlyc3RSb3cgPSByYXdEYXRhWzBdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmlyc3RSb3cpOyAvLyBbbGF0LCBsbmcsIHZhbHVlXVxuICBjb25zdCByb3dzID0gcmF3RGF0YS5tYXAoZCA9PiBrZXlzLm1hcChrZXkgPT4gKGQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0pKTsgLy8gW1szMS4yNywgMTI3LjU2LCAzXV1cblxuICAvLyByb3cgb2JqZWN0IGNhbiBzdGlsbCBjb250YWluIHZhbHVlcyBsaWtlIGBOdWxsYCBvciBgTi9BYFxuICBjbGVhblVwRmFsc3lDc3ZWYWx1ZShyb3dzKTtcblxuICByZXR1cm4gcHJvY2Vzc0NzdkRhdGEocm93cywga2V5cyk7XG59XG5cbi8qKlxuICogUHJvY2VzcyBHZW9KU09OIFtgRmVhdHVyZUNvbGxlY3Rpb25gXShodHRwOi8vd2lraS5nZW9qc29uLm9yZy9HZW9KU09OX2RyYWZ0X3ZlcnNpb25fNiNGZWF0dXJlQ29sbGVjdGlvbiksXG4gKiBvdXRwdXQgYSBkYXRhIG9iamVjdCB3aXRoIGB7ZmllbGRzOiBbXSwgcm93czogW119YC5cbiAqIFRoZSBkYXRhIG9iamVjdCBjYW4gYmUgd3JhcHBlZCBpbiBhIGBkYXRhc2V0YCBhbmQgcGFzc2VkIHRvIFtgYWRkRGF0YVRvTWFwYF0oLi4vYWN0aW9ucy9hY3Rpb25zLm1kI2FkZGRhdGF0b21hcClcbiAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gbWF5IG11dGF0ZSBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gcmF3RGF0YSByYXcgZ2VvanNvbiBmZWF0dXJlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIGRhdGFzZXQgY29udGFpbmluZyBgZmllbGRzYCBhbmQgYHJvd3NgXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHthZGREYXRhVG9NYXB9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG4gKiBpbXBvcnQge3Byb2Nlc3NHZW9qc29ufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuICpcbiAqIGNvbnN0IGdlb2pzb24gPSB7XG4gKiBcdFwidHlwZVwiIDogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxuICogXHRcImZlYXR1cmVzXCIgOiBbe1xuICogXHRcdFwidHlwZVwiIDogXCJGZWF0dXJlXCIsXG4gKiBcdFx0XCJwcm9wZXJ0aWVzXCIgOiB7XG4gKiBcdFx0XHRcImNhcGFjaXR5XCIgOiBcIjEwXCIsXG4gKiBcdFx0XHRcInR5cGVcIiA6IFwiVS1SYWNrXCJcbiAqIFx0XHR9LFxuICogXHRcdFwiZ2VvbWV0cnlcIiA6IHtcbiAqIFx0XHRcdFwidHlwZVwiIDogXCJQb2ludFwiLFxuICogXHRcdFx0XCJjb29yZGluYXRlc1wiIDogWyAtNzEuMDczMjgzLCA0Mi40MTc1MDAgXVxuICogXHRcdH1cbiAqIFx0fV1cbiAqIH07XG4gKlxuICogZGlzcGF0Y2goYWRkRGF0YVRvTWFwKHtcbiAqICBkYXRhc2V0czoge1xuICogICAgaW5mbzoge1xuICogICAgICBsYWJlbDogJ1NhbXBsZSBUYXhpIFRyaXBzIGluIE5ldyBZb3JrIENpdHknLFxuICogICAgICBpZDogJ3Rlc3RfdHJpcF9kYXRhJ1xuICogICAgfSxcbiAqICAgIGRhdGE6IHByb2Nlc3NHZW9qc29uKGdlb2pzb24pXG4gKiAgfVxuICogfSkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0dlb2pzb24ocmF3RGF0YTogdW5rbm93bik6IFByb2Nlc3NvclJlc3VsdCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRHZW9qc29uID0gbm9ybWFsaXplKHJhd0RhdGEpO1xuXG4gIGlmICghbm9ybWFsaXplZEdlb2pzb24gfHwgIUFycmF5LmlzQXJyYXkobm9ybWFsaXplZEdlb2pzb24uZmVhdHVyZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFJlYWQgRmlsZSBGYWlsZWQ6IEZpbGUgaXMgbm90IGEgdmFsaWQgR2VvSlNPTi4gUmVhZCBtb3JlIGFib3V0IFtzdXBwb3J0ZWQgZmlsZSBmb3JtYXRdKCR7R1VJREVTX0ZJTEVfRk9STUFUX0RPQ30pYFxuICAgICk7XG4gIH1cblxuICAvLyBnZXR0aW5nIGFsbCBmZWF0dXJlIGZpZWxkc1xuICBjb25zdCBhbGxEYXRhUm93czogQXJyYXk8e19nZW9qc29uOiBGZWF0dXJlfSAmIGtleW9mIEZlYXR1cmU+ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9ybWFsaXplZEdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBmID0gbm9ybWFsaXplZEdlb2pzb24uZmVhdHVyZXNbaV07XG4gICAgaWYgKGYuZ2VvbWV0cnkpIHtcbiAgICAgIGFsbERhdGFSb3dzLnB1c2goe1xuICAgICAgICAvLyBhZGQgZmVhdHVyZSB0byBfZ2VvanNvbiBmaWVsZFxuICAgICAgICBfZ2VvanNvbjogZixcbiAgICAgICAgLi4uKGYucHJvcGVydGllcyB8fCB7fSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvLyBnZXQgYWxsIHRoZSBmaWVsZFxuICBjb25zdCBmaWVsZHMgPSBhbGxEYXRhUm93cy5yZWR1Y2U8c3RyaW5nW10+KChhY2N1LCBjdXJyKSA9PiB7XG4gICAgT2JqZWN0LmtleXMoY3VycikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFhY2N1LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgYWNjdS5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIFtdKTtcblxuICAvLyBtYWtlIHN1cmUgZWFjaCBmZWF0dXJlIGhhcyBleGFjdCBzYW1lIGZpZWxkc1xuICBhbGxEYXRhUm93cy5mb3JFYWNoKGQgPT4ge1xuICAgIGZpZWxkcy5mb3JFYWNoKGYgPT4ge1xuICAgICAgaWYgKCEoZiBpbiBkKSkge1xuICAgICAgICBkW2ZdID0gbnVsbDtcbiAgICAgICAgaWYgKGQuX2dlb2pzb24ucHJvcGVydGllcykge1xuICAgICAgICAgIGQuX2dlb2pzb24ucHJvcGVydGllc1tmXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb2Nlc3NSb3dPYmplY3QoYWxsRGF0YVJvd3MpO1xufVxuXG4vKipcbiAqIFByb2Nlc3Mgc2F2ZWQga2VwbGVyLmdsIGpzb24gdG8gYmUgcGFzcyB0byBbYGFkZERhdGFUb01hcGBdKC4uL2FjdGlvbnMvYWN0aW9ucy5tZCNhZGRkYXRhdG9tYXApLlxuICogVGhlIGpzb24gb2JqZWN0IHNob3VsZCBjb250YWluIGBkYXRhc2V0c2AgYW5kIGBjb25maWdgLlxuICogQHBhcmFtIHJhd0RhdGFcbiAqIEBwYXJhbSBzY2hlbWFcbiAqIEByZXR1cm5zIGRhdGFzZXRzIGFuZCBjb25maWcgYHtkYXRhc2V0czoge30sIGNvbmZpZzoge319YFxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7YWRkRGF0YVRvTWFwfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuICogaW1wb3J0IHtwcm9jZXNzS2VwbGVyZ2xKU09OfSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuICpcbiAqIGRpc3BhdGNoKGFkZERhdGFUb01hcChwcm9jZXNzS2VwbGVyZ2xKU09OKGtlcGxlckdsSnNvbikpKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NLZXBsZXJnbEpTT04ocmF3RGF0YTogU2F2ZWRNYXAsIHNjaGVtYSA9IEtlcGxlckdsU2NoZW1hKTogTG9hZGVkTWFwIHwgbnVsbCB7XG4gIHJldHVybiByYXdEYXRhID8gc2NoZW1hLmxvYWQocmF3RGF0YS5kYXRhc2V0cywgcmF3RGF0YS5jb25maWcpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHNpbmdsZSBvciBhbiBhcnJheSBvZiBkYXRhc2V0cyBzYXZlZCB1c2luZyBrZXBsZXIuZ2wgc2NoZW1hXG4gKiBAcGFyYW0gcmF3RGF0YVxuICogQHBhcmFtIHNjaGVtYVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0tlcGxlcmdsRGF0YXNldChcbiAgcmF3RGF0YTogb2JqZWN0IHwgb2JqZWN0W10sXG4gIHNjaGVtYSA9IEtlcGxlckdsU2NoZW1hXG4pOiBQYXJzZWREYXRhc2V0IHwgUGFyc2VkRGF0YXNldFtdIHwgbnVsbCB7XG4gIGlmICghcmF3RGF0YSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0cyA9IHNjaGVtYS5wYXJzZVNhdmVkRGF0YSh0b0FycmF5KHJhd0RhdGEpKTtcbiAgaWYgKCFyZXN1bHRzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmF3RGF0YSkgPyByZXN1bHRzIDogcmVzdWx0c1swXTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhcnJvdyB0YWJsZSBhbmQgcmV0dXJuIGEgZGF0YXNldFxuICpcbiAqIEBwYXJhbSBhcnJvd1RhYmxlIEFycm93VGFibGUgdG8gcGFyc2UsIHNlZSBsb2FkZXJzLmdsL3NjaGVtYVxuICogQHJldHVybnMgZGF0YXNldCBjb250YWluaW5nIGBmaWVsZHNgIGFuZCBgcm93c2Agb3IgbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0Fycm93VGFibGUoYXJyb3dUYWJsZTogQXJyb3dUYWJsZSk6IFByb2Nlc3NvclJlc3VsdCB8IG51bGwge1xuICAvLyBAdHMtaWdub3JlIC0gVW5rbm93biBkYXRhIHR5cGUgY2F1c2luZyBidWlsZCBmYWlsdXJlc1xuICByZXR1cm4gcHJvY2Vzc0Fycm93QmF0Y2hlcyhhcnJvd1RhYmxlLmRhdGEuYmF0Y2hlcyk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgR2VvQXJyb3cgbWV0YWRhdGEgZnJvbSBhbiBBcGFjaGUgQXJyb3cgdGFibGUgc2NoZW1hLlxuICogRm9yIGdlb3BhcnF1ZXQgZmlsZXMgZ2VvYXJyb3cgbWV0YWRhdGEgaXNuJ3QgcHJlc2VudCBpbiBmaWVsZHMsIHNvIGV4dHJhY3QgZXh0cmEgaW5mbyBmcm9tIHNjaGVtYS5cbiAqIEBwYXJhbSB0YWJsZSBUaGUgQXBhY2hlIEFycm93IHRhYmxlIHRvIGV4dHJhY3QgbWV0YWRhdGEgZnJvbS5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBtYXBwaW5nIGNvbHVtbiBuYW1lcyB0byB0aGVpciBHZW9BcnJvdyBlbmNvZGluZyB0eXBlLlxuICogQHRocm93cyBMb2dzIGFuIGVycm9yIG1lc3NhZ2UgaWYgcGFyc2luZyBvZiBtZXRhZGF0YSBmYWlscy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdlb0Fycm93TWV0YWRhdGFGcm9tU2NoZW1hKHRhYmxlOiBhcnJvdy5UYWJsZSk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBnZW9BcnJvd01ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHRyeSB7XG4gICAgY29uc3QgZ2VvU3RyaW5nID0gdGFibGUuc2NoZW1hLm1ldGFkYXRhPy5nZXQoJ2dlbycpO1xuICAgIGlmIChnZW9TdHJpbmcpIHtcbiAgICAgIGNvbnN0IHBhcnNlZEdlb1N0cmluZyA9IEpTT04ucGFyc2UoZ2VvU3RyaW5nKTtcbiAgICAgIGlmIChwYXJzZWRHZW9TdHJpbmcuY29sdW1ucykge1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJzZWRHZW9TdHJpbmcuY29sdW1ucykuZm9yRWFjaChjb2x1bW5OYW1lID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gcGFyc2VkR2VvU3RyaW5nLmNvbHVtbnNbY29sdW1uTmFtZV07XG4gICAgICAgICAgaWYgKGNvbHVtbkRhdGE/LmVuY29kaW5nID09PSAnV0tCJykge1xuICAgICAgICAgICAgZ2VvQXJyb3dNZXRhZGF0YVtjb2x1bW5OYW1lXSA9IEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBUT0RPIHBvdGVudGlhbGx5IHRoZXJlIGFyZSBvdGhlciB0eXBlcyBidXQgbm8gZGF0YXNldHMgdG8gdGVzdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignQW4gZXJyb3IgZHVyaW5nIGFycm93IHRhYmxlIHNjaGVtYSBtZXRhZGF0YSBwYXJzaW5nJyk7XG4gIH1cbiAgcmV0dXJuIGdlb0Fycm93TWV0YWRhdGE7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gQXBhY2hlIEFycm93IHRhYmxlIHNjaGVtYSBpbnRvIGFuIGFycmF5IG9mIEtlcGxlci5nbCBmaWVsZCBvYmplY3RzLlxuICogQHBhcmFtIHRhYmxlIFRoZSBBcGFjaGUgQXJyb3cgdGFibGUgd2hvc2Ugc2NoZW1hIG5lZWRzIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEBwYXJhbSBmaWVsZFR5cGVTdWdnZXN0aW9ucyBPcHRpb25hbCBtYXBwaW5nIG9mIGZpZWxkIG5hbWVzIHRvIHN1Z2dlc3RlZCBmaWVsZCB0eXBlcy5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZpZWxkIG9iamVjdHMgc3VpdGFibGUgZm9yIEtlcGxlci5nbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFycm93U2NoZW1hVG9GaWVsZHMoXG4gIHRhYmxlOiBhcnJvdy5UYWJsZSxcbiAgZmllbGRUeXBlU3VnZ2VzdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fVxuKTogRmllbGRbXSB7XG4gIGNvbnN0IGhlYWRlclJvdyA9IHRhYmxlLnNjaGVtYS5maWVsZHMubWFwKGYgPT4gZi5uYW1lKTtcbiAgY29uc3Qgc2FtcGxlID0gZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emVBcnJvdyh0YWJsZSwgaGVhZGVyUm93KTtcbiAgY29uc3Qga2VwbGVyRmllbGRzID0gZ2V0RmllbGRzRnJvbURhdGEoc2FtcGxlLCBoZWFkZXJSb3cpO1xuICBjb25zdCBnZW9BcnJvd01ldGFkYXRhID0gZ2V0R2VvQXJyb3dNZXRhZGF0YUZyb21TY2hlbWEodGFibGUpO1xuXG4gIHJldHVybiB0YWJsZS5zY2hlbWEuZmllbGRzLm1hcCgoZmllbGQ6IGFycm93LkZpZWxkLCBmaWVsZEluZGV4OiBudW1iZXIpID0+IHtcbiAgICBsZXQgdHlwZSA9IGFycm93RGF0YVR5cGVUb0ZpZWxkVHlwZShmaWVsZC50eXBlKTtcbiAgICBsZXQgYW5hbHl6ZXJUeXBlID0gYXJyb3dEYXRhVHlwZVRvQW5hbHl6ZXJEYXRhVHlwZShmaWVsZC50eXBlKTtcbiAgICBsZXQgZm9ybWF0ID0gJyc7XG5cbiAgICBjb25zdCBmaWVsZFR5cGVTdWdnZXN0aW9uID0gZmllbGRUeXBlU3VnZ2VzdGlvbnNbZmllbGQubmFtZV07XG4gICAgY29uc3Qga2VwbGVyRmllbGQgPSBrZXBsZXJGaWVsZHNbZmllbGRJbmRleF07XG5cbiAgICAvLyBnZW9tZXRyeSBmaWVsZHMgcHJvZHVjZWQgYnkgRHVja0RCJ3Mgc3RfYXNnZW9qc29uKClcbiAgICBpZiAoZmllbGRUeXBlU3VnZ2VzdGlvbiA9PT0gJ0pTT04nKSB7XG4gICAgICB0eXBlID0gQUxMX0ZJRUxEX1RZUEVTLmdlb2pzb247XG4gICAgICBhbmFseXplclR5cGUgPSBBbmFseXplckRBVEFfVFlQRVMuR0VPTUVUUllfRlJPTV9TVFJJTkc7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGZpZWxkVHlwZVN1Z2dlc3Rpb24gPT09ICdHRU9NRVRSWScgfHxcbiAgICAgIGZpZWxkLm1ldGFkYXRhLmdldChHRU9BUlJPV19NRVRBREFUQV9LRVkpPy5zdGFydHNXaXRoKCdnZW9hcnJvdycpXG4gICAgKSB7XG4gICAgICB0eXBlID0gQUxMX0ZJRUxEX1RZUEVTLmdlb2Fycm93O1xuICAgICAgYW5hbHl6ZXJUeXBlID0gQW5hbHl6ZXJEQVRBX1RZUEVTLkdFT01FVFJZO1xuICAgIH0gZWxzZSBpZiAoZ2VvQXJyb3dNZXRhZGF0YVtmaWVsZC5uYW1lXSkge1xuICAgICAgdHlwZSA9IEFMTF9GSUVMRF9UWVBFUy5nZW9hcnJvdztcbiAgICAgIGFuYWx5emVyVHlwZSA9IEFuYWx5emVyREFUQV9UWVBFUy5HRU9NRVRSWTtcbiAgICAgIGZpZWxkLm1ldGFkYXRhPy5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBnZW9BcnJvd01ldGFkYXRhW2ZpZWxkLm5hbWVdKTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZVN1Z2dlc3Rpb24gPT09ICdCTE9CJykge1xuICAgICAgLy8gV2hlbiBhcnJvdyB3a2IgY29sdW1uIHNhdmVkIHRvIER1Y2tEQiBhcyBCTE9CIHdpdGhvdXQgYW55IG1ldGFkYXRhLCB0aGVuIHF1ZXJpZWQgYmFja1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRhYmxlLmdldENoaWxkQXQoZmllbGRJbmRleCk/LmdldCgwKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBjb25zdCBiaW5hcnlHZW8gPSBwYXJzZVN5bmMoZGF0YSwgV0tCTG9hZGVyKTtcbiAgICAgICAgICBpZiAoYmluYXJ5R2VvKSB7XG4gICAgICAgICAgICB0eXBlID0gQUxMX0ZJRUxEX1RZUEVTLmdlb2Fycm93O1xuICAgICAgICAgICAgYW5hbHl6ZXJUeXBlID0gQW5hbHl6ZXJEQVRBX1RZUEVTLkdFT01FVFJZO1xuICAgICAgICAgICAgZmllbGQubWV0YWRhdGE/LnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGlnbm9yZSwgbm90IFdLQlxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBmaWVsZFR5cGVTdWdnZXN0aW9uID09PSAnVkFSQ0hBUicgJiZcbiAgICAgIChrZXBsZXJGaWVsZC5hbmFseXplclR5cGUgPT09IEFuYWx5emVyREFUQV9UWVBFUy5HRU9NRVRSWSB8fFxuICAgICAgICBrZXBsZXJGaWVsZC5hbmFseXplclR5cGUgPT09IEFuYWx5emVyREFUQV9UWVBFUy5HRU9NRVRSWV9GUk9NX1NUUklORylcbiAgICApIHtcbiAgICAgIC8vIFdoZW4gd2tiL3drdCB3YXMgc2F2ZWQgYXMgdmFyY2hhciBpbiBEdWNrREJcbiAgICAgIHR5cGUgPSBrZXBsZXJGaWVsZC50eXBlO1xuICAgICAgYW5hbHl6ZXJUeXBlID0ga2VwbGVyRmllbGQuYW5hbHl6ZXJUeXBlO1xuICAgICAgZm9ybWF0ID0ga2VwbGVyRmllbGQuZm9ybWF0O1xuICAgIH0gZWxzZSBpZiAoZmllbGRUeXBlU3VnZ2VzdGlvbiA9PT0gJ1ZBUkNIQVInICYmIGtlcGxlckZpZWxkLnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy5oMykge1xuICAgICAgLy8gd2hlbiBrZXBsZXIgZGV0ZWN0ZWQgaDMgY29sdW1uIHVzaW5nIGdldEZpZWxkc0Zyb21EYXRhKCksIHNldCB0eXBlIHRvIGgzIGFuZCBhbmFseXplclR5cGUgdG8gSDNcbiAgICAgIHR5cGUgPSBBTExfRklFTERfVFlQRVMuaDM7XG4gICAgICBhbmFseXplclR5cGUgPSBrZXBsZXJGaWVsZC5hbmFseXplclR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE8gc2hvdWxkIHdlIHVzZSBLZXBsZXIgZ2V0RmllbGRzRnJvbURhdGEgaW5zdGVhZFxuICAgICAgLy8gb2YgYXJyb3dEYXRhVHlwZVRvRmllbGRUeXBlIGZvciBhbGwgZmllbGRzP1xuICAgICAgaWYgKGtlcGxlckZpZWxkLnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXApIHtcbiAgICAgICAgdHlwZSA9IGtlcGxlckZpZWxkLnR5cGU7XG4gICAgICAgIGFuYWx5emVyVHlwZSA9IGtlcGxlckZpZWxkLmFuYWx5emVyVHlwZTtcbiAgICAgICAgZm9ybWF0ID0ga2VwbGVyRmllbGQuZm9ybWF0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5maWVsZCxcbiAgICAgIG5hbWU6IGZpZWxkLm5hbWUsXG4gICAgICBpZDogZmllbGQubmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lOiBmaWVsZC5uYW1lLFxuICAgICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgICBmaWVsZElkeDogZmllbGRJbmRleCxcbiAgICAgIHR5cGUsXG4gICAgICBhbmFseXplclR5cGUsXG4gICAgICB2YWx1ZUFjY2Vzc29yOiAoZGM6IGFueSkgPT4gZCA9PiB7XG4gICAgICAgIHJldHVybiBkYy52YWx1ZUF0KGQuaW5kZXgsIGZpZWxkSW5kZXgpO1xuICAgICAgfSxcbiAgICAgIG1ldGFkYXRhOiBmaWVsZC5tZXRhZGF0YVxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlIGFycm93IGJhdGNoZXMgcmV0dXJuZWQgZnJvbSBwYXJzZUluQmF0Y2hlcygpXG4gKlxuICogQHBhcmFtIGFycm93VGFibGUgdGhlIGFycm93IHRhYmxlIHRvIHBhcnNlXG4gKiBAcmV0dXJucyBkYXRhc2V0IGNvbnRhaW5pbmcgYGZpZWxkc2AgYW5kIGByb3dzYCBvciBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzQXJyb3dCYXRjaGVzKGFycm93QmF0Y2hlczogYXJyb3cuUmVjb3JkQmF0Y2hbXSk6IFByb2Nlc3NvclJlc3VsdCB8IG51bGwge1xuICBpZiAoYXJyb3dCYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGFycm93VGFibGUgPSBuZXcgYXJyb3cuVGFibGUoYXJyb3dCYXRjaGVzKTtcbiAgY29uc3QgZmllbGRzID0gYXJyb3dTY2hlbWFUb0ZpZWxkcyhhcnJvd1RhYmxlKTtcblxuICBjb25zdCBjb2xzID0gWy4uLkFycmF5KGFycm93VGFibGUubnVtQ29scykua2V5cygpXS5tYXAoaSA9PiBhcnJvd1RhYmxlLmdldENoaWxkQXQoaSkpO1xuXG4gIC8vIHJldHVybiBlbXB0eSByb3dzIGFuZCB1c2UgcmF3IGFycm93IHRhYmxlIHRvIGNvbnN0cnVjdCBjb2x1bW4td2lzZSBkYXRhIGNvbnRhaW5lclxuICByZXR1cm4ge1xuICAgIGZpZWxkcyxcbiAgICByb3dzOiBbXSxcbiAgICBjb2xzLFxuICAgIG1ldGFkYXRhOiBhcnJvd1RhYmxlLnNjaGVtYS5tZXRhZGF0YSxcbiAgICAvLyBTYXZlIG9yaWdpbmFsIGFycm93IHNjaGVtYSwgZm9yIGJldHRlciBpbmdlc3Rpb24gaW50byBEdWNrREIuXG4gICAgLy8gVE9ETyBjb25zaWRlciByZXR1cm5pbmcgYXJyb3dUYWJsZSBpbiBjb2xzLCBub3QgYW4gYXJyYXkgb2YgVmVjdG9ycyBmcm9tIGFycm93VGFibGUuXG4gICAgYXJyb3dTY2hlbWE6IGFycm93VGFibGUuc2NoZW1hXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBEQVRBU0VUX0hBTkRMRVJTID0ge1xuICBbREFUQVNFVF9GT1JNQVRTLnJvd106IHByb2Nlc3NSb3dPYmplY3QsXG4gIFtEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbl06IHByb2Nlc3NHZW9qc29uLFxuICBbREFUQVNFVF9GT1JNQVRTLmNzdl06IHByb2Nlc3NDc3ZEYXRhLFxuICBbREFUQVNFVF9GT1JNQVRTLmFycm93XTogcHJvY2Vzc0Fycm93VGFibGUsXG4gIFtEQVRBU0VUX0ZPUk1BVFMua2VwbGVyZ2xdOiBwcm9jZXNzS2VwbGVyZ2xEYXRhc2V0XG59O1xuXG5leHBvcnQgY29uc3QgUHJvY2Vzc29yczoge1xuICBwcm9jZXNzR2VvanNvbjogdHlwZW9mIHByb2Nlc3NHZW9qc29uO1xuICBwcm9jZXNzQ3N2RGF0YTogdHlwZW9mIHByb2Nlc3NDc3ZEYXRhO1xuICBwcm9jZXNzQXJyb3dUYWJsZTogdHlwZW9mIHByb2Nlc3NBcnJvd1RhYmxlO1xuICBwcm9jZXNzQXJyb3dCYXRjaGVzOiB0eXBlb2YgcHJvY2Vzc0Fycm93QmF0Y2hlcztcbiAgcHJvY2Vzc1Jvd09iamVjdDogdHlwZW9mIHByb2Nlc3NSb3dPYmplY3Q7XG4gIHByb2Nlc3NLZXBsZXJnbEpTT046IHR5cGVvZiBwcm9jZXNzS2VwbGVyZ2xKU09OO1xuICBwcm9jZXNzS2VwbGVyZ2xEYXRhc2V0OiB0eXBlb2YgcHJvY2Vzc0tlcGxlcmdsRGF0YXNldDtcbiAgYW5hbHl6ZXJUeXBlVG9GaWVsZFR5cGU6IHR5cGVvZiBhbmFseXplclR5cGVUb0ZpZWxkVHlwZTtcbiAgZ2V0RmllbGRzRnJvbURhdGE6IHR5cGVvZiBnZXRGaWVsZHNGcm9tRGF0YTtcbiAgcGFyc2VDc3ZSb3dzQnlGaWVsZFR5cGU6IHR5cGVvZiBwYXJzZUNzdlJvd3NCeUZpZWxkVHlwZTtcbn0gPSB7XG4gIHByb2Nlc3NHZW9qc29uLFxuICBwcm9jZXNzQ3N2RGF0YSxcbiAgcHJvY2Vzc0Fycm93VGFibGUsXG4gIHByb2Nlc3NBcnJvd0JhdGNoZXMsXG4gIHByb2Nlc3NSb3dPYmplY3QsXG4gIHByb2Nlc3NLZXBsZXJnbEpTT04sXG4gIHByb2Nlc3NLZXBsZXJnbERhdGFzZXQsXG4gIGFuYWx5emVyVHlwZVRvRmllbGRUeXBlLFxuICBnZXRGaWVsZHNGcm9tRGF0YSxcbiAgcGFyc2VDc3ZSb3dzQnlGaWVsZFR5cGVcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBSyxLQUFBLEdBQUFMLE9BQUE7QUFFQSxJQUFBTSxJQUFBLEdBQUFOLE9BQUE7QUFFQSxJQUFBTyxVQUFBLEdBQUFQLE9BQUE7QUFRQSxJQUFBUSxNQUFBLEdBQUFSLE9BQUE7QUFNQSxJQUFBUyxZQUFBLEdBQUFULE9BQUE7QUFTQSxJQUFBVSxRQUFBLEdBQUFWLE9BQUE7QUFBc0YsU0FBQVcseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFiLHdCQUFBYSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLGNBQUFSLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQVcsUUFBQW5CLENBQUEsRUFBQUUsQ0FBQSxRQUFBQyxDQUFBLEdBQUFRLE1BQUEsQ0FBQVMsSUFBQSxDQUFBcEIsQ0FBQSxPQUFBVyxNQUFBLENBQUFVLHFCQUFBLFFBQUFDLENBQUEsR0FBQVgsTUFBQSxDQUFBVSxxQkFBQSxDQUFBckIsQ0FBQSxHQUFBRSxDQUFBLEtBQUFvQixDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBckIsQ0FBQSxXQUFBUyxNQUFBLENBQUFFLHdCQUFBLENBQUFiLENBQUEsRUFBQUUsQ0FBQSxFQUFBc0IsVUFBQSxPQUFBckIsQ0FBQSxDQUFBc0IsSUFBQSxDQUFBQyxLQUFBLENBQUF2QixDQUFBLEVBQUFtQixDQUFBLFlBQUFuQixDQUFBO0FBQUEsU0FBQXdCLGNBQUEzQixDQUFBLGFBQUFFLENBQUEsTUFBQUEsQ0FBQSxHQUFBMEIsU0FBQSxDQUFBQyxNQUFBLEVBQUEzQixDQUFBLFVBQUFDLENBQUEsV0FBQXlCLFNBQUEsQ0FBQTFCLENBQUEsSUFBQTBCLFNBQUEsQ0FBQTFCLENBQUEsUUFBQUEsQ0FBQSxPQUFBaUIsT0FBQSxDQUFBUixNQUFBLENBQUFSLENBQUEsT0FBQTJCLE9BQUEsV0FBQTVCLENBQUEsUUFBQTZCLGdCQUFBLGFBQUEvQixDQUFBLEVBQUFFLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFTLE1BQUEsQ0FBQXFCLHlCQUFBLEdBQUFyQixNQUFBLENBQUFzQixnQkFBQSxDQUFBakMsQ0FBQSxFQUFBVyxNQUFBLENBQUFxQix5QkFBQSxDQUFBN0IsQ0FBQSxLQUFBZ0IsT0FBQSxDQUFBUixNQUFBLENBQUFSLENBQUEsR0FBQTJCLE9BQUEsV0FBQTVCLENBQUEsSUFBQVMsTUFBQSxDQUFBQyxjQUFBLENBQUFaLENBQUEsRUFBQUUsQ0FBQSxFQUFBUyxNQUFBLENBQUFFLHdCQUFBLENBQUFWLENBQUEsRUFBQUQsQ0FBQSxpQkFBQUYsQ0FBQSxJQWxDdEY7QUFDQTtBQW9DQTtBQUNBO0FBQ0E7QUFDTyxJQUFNa0MsU0FBUyxHQUFBQyxPQUFBLENBQUFELFNBQUEsR0FBRyw4QkFBOEI7QUFFdkQsU0FBU0Usa0JBQWtCQSxDQUFDQyxHQUFHLEVBQUU7RUFDL0IsSUFBSTtJQUNGLE9BQU9DLElBQUksQ0FBQ0MsS0FBSyxDQUFDRixHQUFHLENBQUM7RUFDeEIsQ0FBQyxDQUFDLE9BQU9yQyxDQUFDLEVBQUU7SUFDVixPQUFPLElBQUk7RUFDYjtBQUNGO0FBRU8sSUFBTXdDLDZCQUE2QixHQUFBTCxPQUFBLENBQUFLLDZCQUFBLE9BQUFULGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUN2Q1UsMEJBQWUsV0FBUSxFQUFHO0VBQ3pCQyxLQUFLLEVBQUUsU0FBUEEsS0FBS0EsQ0FBR0MsQ0FBVTtJQUFBLE9BQWMsT0FBT0EsQ0FBQyxLQUFLLFNBQVM7RUFBQTtFQUN0REosS0FBSyxFQUFFLFNBQVBBLEtBQUtBLENBQUdJLENBQVU7SUFBQSxPQUFjQSxDQUFDLEtBQUssTUFBTSxJQUFJQSxDQUFDLEtBQUssTUFBTSxJQUFJQSxDQUFDLEtBQUssTUFBTSxJQUFJQSxDQUFDLEtBQUssR0FBRztFQUFBO0FBQzNGLENBQUMsR0FDQUYsMEJBQWUsQ0FBQ0csT0FBTyxFQUFHO0VBQ3pCO0VBQ0FGLEtBQUssRUFBRSxTQUFQQSxLQUFLQSxDQUFHQyxDQUFVO0lBQUEsT0FBY0UsUUFBUSxDQUFDRixDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUtBLENBQUM7RUFBQTtFQUNyRDtFQUNBSixLQUFLLEVBQUUsU0FBUEEsS0FBS0EsQ0FBR0ksQ0FBVTtJQUFBLE9BQWFFLFFBQVEsQ0FBQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUFBO0FBQ2hELENBQUMsR0FDQUYsMEJBQWUsQ0FBQ0ssU0FBUyxFQUFHO0VBQzNCSixLQUFLLEVBQUUsU0FBUEEsS0FBS0EsQ0FBR0MsQ0FBVSxFQUFFSSxLQUFZO0lBQUEsT0FDOUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUNDLFFBQVEsQ0FBQ0QsS0FBSyxDQUFDRSxNQUFNLENBQUMsR0FBRyxPQUFPTixDQUFDLEtBQUssUUFBUSxHQUFHLE9BQU9BLENBQUMsS0FBSyxRQUFRO0VBQUE7RUFDbkZKLEtBQUssRUFBRSxTQUFQQSxLQUFLQSxDQUFHSSxDQUFNLEVBQUVJLEtBQVk7SUFBQSxPQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDQyxRQUFRLENBQUNELEtBQUssQ0FBQ0UsTUFBTSxDQUFDLEdBQUdDLE1BQU0sQ0FBQ1AsQ0FBQyxDQUFDLEdBQUdBLENBQUM7RUFBQTtBQUNyRixDQUFDLEdBQ0FGLDBCQUFlLENBQUNVLElBQUksRUFBRztFQUN0QjtFQUNBVCxLQUFLLEVBQUUsU0FBUEEsS0FBS0EsQ0FBR0MsQ0FBVTtJQUFBLE9BQWNTLFVBQVUsQ0FBQ1QsQ0FBQyxDQUFDLEtBQUtBLENBQUM7RUFBQTtFQUNuRDtFQUNBSixLQUFLLEVBQUVhO0FBQ1QsQ0FBQyxHQUNBWCwwQkFBZSxDQUFDWSxNQUFNLEVBQUc7RUFDeEJYLEtBQUssRUFBRVksb0JBQWE7RUFDcEJmLEtBQUssRUFBRUg7QUFDVCxDQUFDLEdBRUFLLDBCQUFlLENBQUNjLEtBQUssRUFBRztFQUN2QmIsS0FBSyxFQUFFYyxLQUFLLENBQUNDLE9BQU87RUFDcEJsQixLQUFLLEVBQUVIO0FBQ1QsQ0FBQyxHQUVBSywwQkFBZSxDQUFDaUIsRUFBRSxFQUFHO0VBQ3BCaEIsS0FBSyxFQUFFLFNBQVBBLEtBQUtBLENBQUVDLENBQUM7SUFBQSxPQUFJLElBQUFnQixzQkFBUyxFQUFDaEIsQ0FBQyxDQUFDO0VBQUE7RUFDeEJKLEtBQUssRUFBRSxTQUFQQSxLQUFLQSxDQUFFSSxDQUFDO0lBQUEsT0FBSUEsQ0FBQztFQUFBO0FBQ2YsQ0FBQyxDQUNGOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2lCLGNBQWNBLENBQUNDLE9BQTZCLEVBQUVDLE1BQWlCLEVBQW1CO0VBQ2hHLElBQUlDLElBQTZCO0VBQ2pDLElBQUlDLFNBQStCO0VBRW5DLElBQUksT0FBT0gsT0FBTyxLQUFLLFFBQVEsRUFBRTtJQUMvQixJQUFNSSxXQUFzQixHQUFHLElBQUFDLG1CQUFZLEVBQUNMLE9BQU8sQ0FBQztJQUVwRCxJQUFJLENBQUNMLEtBQUssQ0FBQ0MsT0FBTyxDQUFDUSxXQUFVLENBQUMsSUFBSUEsV0FBVSxDQUFDcEMsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN2RDtNQUNBLE1BQU0sSUFBSXNDLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQztJQUMxRDtJQUNBSCxTQUFTLEdBQUdDLFdBQVUsQ0FBQyxDQUFDLENBQUM7SUFDekJGLElBQUksR0FBR0UsV0FBVSxDQUFDRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQzVCLENBQUMsTUFBTSxJQUFJWixLQUFLLENBQUNDLE9BQU8sQ0FBQ0ksT0FBTyxDQUFDLElBQUlBLE9BQU8sQ0FBQ2hDLE1BQU0sRUFBRTtJQUNuRGtDLElBQUksR0FBR0YsT0FBTztJQUNkRyxTQUFTLEdBQUdGLE1BQU07SUFFbEIsSUFBSSxDQUFDTixLQUFLLENBQUNDLE9BQU8sQ0FBQ08sU0FBUyxDQUFDLEVBQUU7TUFDN0I7TUFDQTtNQUNBO01BQ0FBLFNBQVMsR0FBR0gsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUN0QkUsSUFBSSxHQUFHRixPQUFPLENBQUNPLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekI7RUFDRjtFQUVBLElBQUksQ0FBQ0wsSUFBSSxJQUFJLENBQUNDLFNBQVMsRUFBRTtJQUN2QixNQUFNLElBQUlHLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQztFQUMzRDs7RUFFQTtFQUNBOztFQUVBRSxvQkFBb0IsQ0FBQ04sSUFBSSxDQUFDO0VBQzFCO0VBQ0E7RUFDQSxJQUFNTyxNQUFNLEdBQUcsSUFBQUMsb0NBQXVCLEVBQUM7SUFBQ0MsTUFBTSxFQUFFUixTQUFTO0lBQUVELElBQUksRUFBSkE7RUFBSSxDQUFDLENBQUM7RUFDakUsSUFBTVMsTUFBTSxHQUFHLElBQUFDLDhCQUFpQixFQUFDSCxNQUFNLEVBQUVOLFNBQVMsQ0FBQztFQUNuRCxJQUFNQyxVQUFVLEdBQUdTLGlCQUFpQixDQUFDWCxJQUFJLEVBQUVTLE1BQU0sQ0FBQztFQUVsRCxPQUFPO0lBQUNBLE1BQU0sRUFBTkEsTUFBTTtJQUFFVCxJQUFJLEVBQUVFO0VBQVUsQ0FBQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU1MsaUJBQWlCQSxDQUFDWCxJQUFhLEVBQUVTLE1BQWUsRUFBRTtFQUNoRTtFQUNBLElBQU1HLGVBQWUsR0FBR0gsTUFBTSxDQUFDSSxTQUFTLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ0MsSUFBSSxLQUFLLFVBQVU7RUFBQSxFQUFDO0VBQ3BFTixNQUFNLENBQUMxQyxPQUFPLENBQUNpRCx1QkFBdUIsQ0FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRWpCLElBQUksRUFBRVksZUFBZSxDQUFDLENBQUM7RUFFekUsT0FBT1osSUFBSTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNNLG9CQUFvQkEsQ0FBQ04sSUFBaUIsRUFBUTtFQUNyRCxJQUFNa0IsRUFBRSxHQUFHLElBQUlDLE1BQU0sQ0FBQ2hELFNBQVMsRUFBRSxHQUFHLENBQUM7RUFDckMsS0FBSyxJQUFJakIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHOEMsSUFBSSxDQUFDbEMsTUFBTSxFQUFFWixDQUFDLEVBQUUsRUFBRTtJQUNwQyxLQUFLLElBQUlrRSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdwQixJQUFJLENBQUM5QyxDQUFDLENBQUMsQ0FBQ1ksTUFBTSxFQUFFc0QsQ0FBQyxFQUFFLEVBQUU7TUFDdkM7TUFDQTtNQUNBO01BQ0E7TUFDQSxJQUFJLE9BQU9wQixJQUFJLENBQUM5QyxDQUFDLENBQUMsQ0FBQ2tFLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBS3BCLElBQUksQ0FBQzlDLENBQUMsQ0FBQyxDQUFDa0UsQ0FBQyxDQUFDLENBQVlDLEtBQUssQ0FBQ0gsRUFBRSxDQUFDLEVBQUU7UUFDdEVsQixJQUFJLENBQUM5QyxDQUFDLENBQUMsQ0FBQ2tFLENBQUMsQ0FBQyxHQUFHLElBQUk7TUFDbkI7SUFDRjtFQUNGO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNKLHVCQUF1QkEsQ0FDckNoQixJQUFpQixFQUNqQnNCLFdBQW1CLEVBQ25CdEMsS0FBWSxFQUNaOUIsQ0FBUyxFQUNIO0VBQ04sSUFBTXFFLE1BQU0sR0FBRzlDLDZCQUE2QixDQUFDTyxLQUFLLENBQUN3QyxJQUFJLENBQUM7RUFDeEQsSUFBSUQsTUFBTSxFQUFFO0lBQ1Y7SUFDQSxJQUFNRSxLQUFLLEdBQUd6QixJQUFJLENBQUMwQixJQUFJLENBQUMsVUFBQXZGLENBQUM7TUFBQSxPQUFJLElBQUF3RiwrQkFBa0IsRUFBQ3hGLENBQUMsQ0FBQ2UsQ0FBQyxDQUFDLENBQUM7SUFBQSxFQUFDO0lBQ3RELElBQUksQ0FBQ3VFLEtBQUssSUFBSUYsTUFBTSxDQUFDNUMsS0FBSyxDQUFDOEMsS0FBSyxDQUFDdkUsQ0FBQyxDQUFDLEVBQUU4QixLQUFLLENBQUMsRUFBRTtNQUMzQztJQUNGO0lBQ0FnQixJQUFJLENBQUNqQyxPQUFPLENBQUMsVUFBQTZELEdBQUcsRUFBSTtNQUNsQjtNQUNBLElBQUlBLEdBQUcsQ0FBQzFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNuQjBFLEdBQUcsQ0FBQzFFLENBQUMsQ0FBQyxHQUFHcUUsTUFBTSxDQUFDL0MsS0FBSyxDQUFDb0QsR0FBRyxDQUFDMUUsQ0FBQyxDQUFDLEVBQUU4QixLQUFLLENBQUM7UUFDcEMsSUFDRXNDLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFDaEIsSUFBQS9CLG9CQUFhLEVBQUNxQyxHQUFHLENBQUNOLFdBQVcsQ0FBQyxDQUFDO1FBQy9CO1FBQ0EsSUFBQXRFLHFCQUFjLEVBQUM0RSxHQUFHLENBQUNOLFdBQVcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUM5QztVQUNBO1VBQ0FNLEdBQUcsQ0FBQ04sV0FBVyxDQUFDLENBQUNPLFVBQVUsQ0FBQzdDLEtBQUssQ0FBQytCLElBQUksQ0FBQyxHQUFHYSxHQUFHLENBQUMxRSxDQUFDLENBQUM7UUFDbEQ7TUFDRjtJQUNGLENBQUMsQ0FBQztFQUNKO0FBQ0Y7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTNEUsZ0JBQWdCQSxDQUFDaEMsT0FBa0IsRUFBbUI7RUFDcEUsSUFBSSxDQUFDTCxLQUFLLENBQUNDLE9BQU8sQ0FBQ0ksT0FBTyxDQUFDLEVBQUU7SUFDM0IsT0FBTyxJQUFJO0VBQ2IsQ0FBQyxNQUFNLElBQUksQ0FBQ0EsT0FBTyxDQUFDaEMsTUFBTSxFQUFFO0lBQzFCO0lBQ0EsT0FBTztNQUNMMkMsTUFBTSxFQUFFLEVBQUU7TUFDVlQsSUFBSSxFQUFFO0lBQ1IsQ0FBQztFQUNIO0VBRUEsSUFBTStCLFFBQVEsR0FBR2pDLE9BQU8sQ0FBQyxDQUFDLENBQTRCO0VBQ3RELElBQU16QyxJQUFJLEdBQUdULE1BQU0sQ0FBQ1MsSUFBSSxDQUFDMEUsUUFBUSxDQUFDLENBQUMsQ0FBQztFQUNwQyxJQUFNL0IsSUFBSSxHQUFHRixPQUFPLENBQUNrQyxHQUFHLENBQUMsVUFBQXBELENBQUM7SUFBQSxPQUFJdkIsSUFBSSxDQUFDMkUsR0FBRyxDQUFDLFVBQUFDLEdBQUc7TUFBQSxPQUFLckQsQ0FBQyxDQUE2QnFELEdBQUcsQ0FBQztJQUFBLEVBQUM7RUFBQSxFQUFDLENBQUMsQ0FBQzs7RUFFckY7RUFDQTNCLG9CQUFvQixDQUFDTixJQUFJLENBQUM7RUFFMUIsT0FBT0gsY0FBYyxDQUFDRyxJQUFJLEVBQUUzQyxJQUFJLENBQUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVM2RSxjQUFjQSxDQUFDcEMsT0FBZ0IsRUFBbUI7RUFDaEUsSUFBTXFDLGlCQUFpQixHQUFHLElBQUFDLDRCQUFTLEVBQUN0QyxPQUFPLENBQUM7RUFFNUMsSUFBSSxDQUFDcUMsaUJBQWlCLElBQUksQ0FBQzFDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDeUMsaUJBQWlCLENBQUNFLFFBQVEsQ0FBQyxFQUFFO0lBQ3BFLE1BQU0sSUFBSWpDLEtBQUssMkZBQUFrQyxNQUFBLENBQzZFQyxpQ0FBc0IsTUFDbEgsQ0FBQztFQUNIOztFQUVBO0VBQ0EsSUFBTUMsV0FBdUQsR0FBRyxFQUFFO0VBQ2xFLEtBQUssSUFBSXRGLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2lGLGlCQUFpQixDQUFDRSxRQUFRLENBQUN2RSxNQUFNLEVBQUVaLENBQUMsRUFBRSxFQUFFO0lBQzFELElBQU00RCxDQUFDLEdBQUdxQixpQkFBaUIsQ0FBQ0UsUUFBUSxDQUFDbkYsQ0FBQyxDQUFDO0lBQ3ZDLElBQUk0RCxDQUFDLENBQUMyQixRQUFRLEVBQUU7TUFDZEQsV0FBVyxDQUFDOUUsSUFBSSxDQUFBRSxhQUFBO1FBQ2Q7UUFDQThFLFFBQVEsRUFBRTVCO01BQUMsR0FDUEEsQ0FBQyxDQUFDZSxVQUFVLElBQUksQ0FBQyxDQUFDLENBQ3ZCLENBQUM7SUFDSjtFQUNGO0VBQ0E7RUFDQSxJQUFNcEIsTUFBTSxHQUFHK0IsV0FBVyxDQUFDRyxNQUFNLENBQVcsVUFBQ0MsSUFBSSxFQUFFQyxJQUFJLEVBQUs7SUFDMURqRyxNQUFNLENBQUNTLElBQUksQ0FBQ3dGLElBQUksQ0FBQyxDQUFDOUUsT0FBTyxDQUFDLFVBQUFrRSxHQUFHLEVBQUk7TUFDL0IsSUFBSSxDQUFDVyxJQUFJLENBQUMzRCxRQUFRLENBQUNnRCxHQUFHLENBQUMsRUFBRTtRQUN2QlcsSUFBSSxDQUFDbEYsSUFBSSxDQUFDdUUsR0FBRyxDQUFDO01BQ2hCO0lBQ0YsQ0FBQyxDQUFDO0lBQ0YsT0FBT1csSUFBSTtFQUNiLENBQUMsRUFBRSxFQUFFLENBQUM7O0VBRU47RUFDQUosV0FBVyxDQUFDekUsT0FBTyxDQUFDLFVBQUFhLENBQUMsRUFBSTtJQUN2QjZCLE1BQU0sQ0FBQzFDLE9BQU8sQ0FBQyxVQUFBK0MsQ0FBQyxFQUFJO01BQ2xCLElBQUksRUFBRUEsQ0FBQyxJQUFJbEMsQ0FBQyxDQUFDLEVBQUU7UUFDYkEsQ0FBQyxDQUFDa0MsQ0FBQyxDQUFDLEdBQUcsSUFBSTtRQUNYLElBQUlsQyxDQUFDLENBQUM4RCxRQUFRLENBQUNiLFVBQVUsRUFBRTtVQUN6QmpELENBQUMsQ0FBQzhELFFBQVEsQ0FBQ2IsVUFBVSxDQUFDZixDQUFDLENBQUMsR0FBRyxJQUFJO1FBQ2pDO01BQ0Y7SUFDRixDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRixPQUFPZ0IsZ0JBQWdCLENBQUNVLFdBQVcsQ0FBQztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNNLG1CQUFtQkEsQ0FBQ2hELE9BQWlCLEVBQTZDO0VBQUEsSUFBM0NpRCxNQUFNLEdBQUFsRixTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBbUYsU0FBQSxHQUFBbkYsU0FBQSxNQUFHb0YsdUJBQWM7RUFDNUUsT0FBT25ELE9BQU8sR0FBR2lELE1BQU0sQ0FBQ0csSUFBSSxDQUFDcEQsT0FBTyxDQUFDcUQsUUFBUSxFQUFFckQsT0FBTyxDQUFDc0QsTUFBTSxDQUFDLEdBQUcsSUFBSTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0Msc0JBQXNCQSxDQUNwQ3ZELE9BQTBCLEVBRWM7RUFBQSxJQUR4Q2lELE1BQU0sR0FBQWxGLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFtRixTQUFBLEdBQUFuRixTQUFBLE1BQUdvRix1QkFBYztFQUV2QixJQUFJLENBQUNuRCxPQUFPLEVBQUU7SUFDWixPQUFPLElBQUk7RUFDYjtFQUVBLElBQU13RCxPQUFPLEdBQUdQLE1BQU0sQ0FBQ1EsY0FBYyxDQUFDLElBQUFDLG9CQUFPLEVBQUMxRCxPQUFPLENBQUMsQ0FBQztFQUN2RCxJQUFJLENBQUN3RCxPQUFPLEVBQUU7SUFDWixPQUFPLElBQUk7RUFDYjtFQUNBLE9BQU83RCxLQUFLLENBQUNDLE9BQU8sQ0FBQ0ksT0FBTyxDQUFDLEdBQUd3RCxPQUFPLEdBQUdBLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0csaUJBQWlCQSxDQUFDQyxVQUFzQixFQUEwQjtFQUNoRjtFQUNBLE9BQU9DLG1CQUFtQixDQUFDRCxVQUFVLENBQUNFLElBQUksQ0FBQ0MsT0FBTyxDQUFDO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsNkJBQTZCQSxDQUFDQyxLQUFrQixFQUEwQjtFQUN4RixJQUFNQyxnQkFBd0MsR0FBRyxDQUFDLENBQUM7RUFDbkQsSUFBSTtJQUFBLElBQUFDLHFCQUFBO0lBQ0YsSUFBTUMsU0FBUyxJQUFBRCxxQkFBQSxHQUFHRixLQUFLLENBQUNoQixNQUFNLENBQUNvQixRQUFRLGNBQUFGLHFCQUFBLHVCQUFyQkEscUJBQUEsQ0FBdUJ6SCxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ25ELElBQUkwSCxTQUFTLEVBQUU7TUFDYixJQUFNRSxlQUFlLEdBQUc3RixJQUFJLENBQUNDLEtBQUssQ0FBQzBGLFNBQVMsQ0FBQztNQUM3QyxJQUFJRSxlQUFlLENBQUNDLE9BQU8sRUFBRTtRQUMzQnpILE1BQU0sQ0FBQ1MsSUFBSSxDQUFDK0csZUFBZSxDQUFDQyxPQUFPLENBQUMsQ0FBQ3RHLE9BQU8sQ0FBQyxVQUFBdUcsVUFBVSxFQUFJO1VBQ3pELElBQU1DLFVBQVUsR0FBR0gsZUFBZSxDQUFDQyxPQUFPLENBQUNDLFVBQVUsQ0FBQztVQUN0RCxJQUFJLENBQUFDLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFQyxRQUFRLE1BQUssS0FBSyxFQUFFO1lBQ2xDUixnQkFBZ0IsQ0FBQ00sVUFBVSxDQUFDLEdBQUdHLDhCQUFtQixDQUFDQyxHQUFHO1VBQ3hEO1VBQ0E7UUFDRixDQUFDLENBQUM7TUFDSjtJQUNGO0VBQ0YsQ0FBQyxDQUFDLE9BQU9DLEtBQUssRUFBRTtJQUNkQyxPQUFPLENBQUNELEtBQUssQ0FBQyxxREFBcUQsQ0FBQztFQUN0RTtFQUNBLE9BQU9YLGdCQUFnQjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTYSxtQkFBbUJBLENBQ2pDZCxLQUFrQixFQUVUO0VBQUEsSUFEVGUsb0JBQTRDLEdBQUFqSCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBbUYsU0FBQSxHQUFBbkYsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUVqRCxJQUFNb0MsU0FBUyxHQUFHOEQsS0FBSyxDQUFDaEIsTUFBTSxDQUFDdEMsTUFBTSxDQUFDdUIsR0FBRyxDQUFDLFVBQUFsQixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDQyxJQUFJO0VBQUEsRUFBQztFQUN0RCxJQUFNUixNQUFNLEdBQUcsSUFBQXdFLHlDQUE0QixFQUFDaEIsS0FBSyxFQUFFOUQsU0FBUyxDQUFDO0VBQzdELElBQU0rRSxZQUFZLEdBQUcsSUFBQXRFLDhCQUFpQixFQUFDSCxNQUFNLEVBQUVOLFNBQVMsQ0FBQztFQUN6RCxJQUFNK0QsZ0JBQWdCLEdBQUdGLDZCQUE2QixDQUFDQyxLQUFLLENBQUM7RUFFN0QsT0FBT0EsS0FBSyxDQUFDaEIsTUFBTSxDQUFDdEMsTUFBTSxDQUFDdUIsR0FBRyxDQUFDLFVBQUNoRCxLQUFrQixFQUFFaUcsVUFBa0IsRUFBSztJQUFBLElBQUFDLG1CQUFBO0lBQ3pFLElBQUkxRCxJQUFJLEdBQUcsSUFBQTJELCtCQUF3QixFQUFDbkcsS0FBSyxDQUFDd0MsSUFBSSxDQUFDO0lBQy9DLElBQUk0RCxZQUFZLEdBQUcsSUFBQUMsc0NBQStCLEVBQUNyRyxLQUFLLENBQUN3QyxJQUFJLENBQUM7SUFDOUQsSUFBSXRDLE1BQU0sR0FBRyxFQUFFO0lBRWYsSUFBTW9HLG1CQUFtQixHQUFHUixvQkFBb0IsQ0FBQzlGLEtBQUssQ0FBQytCLElBQUksQ0FBQztJQUM1RCxJQUFNd0UsV0FBVyxHQUFHUCxZQUFZLENBQUNDLFVBQVUsQ0FBQzs7SUFFNUM7SUFDQSxJQUFJSyxtQkFBbUIsS0FBSyxNQUFNLEVBQUU7TUFDbEM5RCxJQUFJLEdBQUc5QywwQkFBZSxDQUFDOEcsT0FBTztNQUM5QkosWUFBWSxHQUFHSyx3QkFBa0IsQ0FBQ0Msb0JBQW9CO0lBQ3hELENBQUMsTUFBTSxJQUNMSixtQkFBbUIsS0FBSyxVQUFVLEtBQUFKLG1CQUFBLEdBQ2xDbEcsS0FBSyxDQUFDbUYsUUFBUSxDQUFDM0gsR0FBRyxDQUFDbUosZ0NBQXFCLENBQUMsY0FBQVQsbUJBQUEsZUFBekNBLG1CQUFBLENBQTJDVSxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQ2pFO01BQ0FwRSxJQUFJLEdBQUc5QywwQkFBZSxDQUFDbUgsUUFBUTtNQUMvQlQsWUFBWSxHQUFHSyx3QkFBa0IsQ0FBQ0ssUUFBUTtJQUM1QyxDQUFDLE1BQU0sSUFBSTlCLGdCQUFnQixDQUFDaEYsS0FBSyxDQUFDK0IsSUFBSSxDQUFDLEVBQUU7TUFBQSxJQUFBZ0YsZUFBQTtNQUN2Q3ZFLElBQUksR0FBRzlDLDBCQUFlLENBQUNtSCxRQUFRO01BQy9CVCxZQUFZLEdBQUdLLHdCQUFrQixDQUFDSyxRQUFRO01BQzFDLENBQUFDLGVBQUEsR0FBQS9HLEtBQUssQ0FBQ21GLFFBQVEsY0FBQTRCLGVBQUEsZUFBZEEsZUFBQSxDQUFnQjVJLEdBQUcsQ0FBQ3dJLGdDQUFxQixFQUFFM0IsZ0JBQWdCLENBQUNoRixLQUFLLENBQUMrQixJQUFJLENBQUMsQ0FBQztJQUMxRSxDQUFDLE1BQU0sSUFBSXVFLG1CQUFtQixLQUFLLE1BQU0sRUFBRTtNQUN6QztNQUNBLElBQUk7UUFBQSxJQUFBVSxpQkFBQTtRQUNGLElBQU1wQyxJQUFJLElBQUFvQyxpQkFBQSxHQUFHakMsS0FBSyxDQUFDa0MsVUFBVSxDQUFDaEIsVUFBVSxDQUFDLGNBQUFlLGlCQUFBLHVCQUE1QkEsaUJBQUEsQ0FBOEJ4SixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUlvSCxJQUFJLEVBQUU7VUFDUixJQUFNc0MsU0FBUyxHQUFHLElBQUFDLGVBQVMsRUFBQ3ZDLElBQUksRUFBRXdDLGNBQVMsQ0FBQztVQUM1QyxJQUFJRixTQUFTLEVBQUU7WUFBQSxJQUFBRyxnQkFBQTtZQUNiN0UsSUFBSSxHQUFHOUMsMEJBQWUsQ0FBQ21ILFFBQVE7WUFDL0JULFlBQVksR0FBR0ssd0JBQWtCLENBQUNLLFFBQVE7WUFDMUMsQ0FBQU8sZ0JBQUEsR0FBQXJILEtBQUssQ0FBQ21GLFFBQVEsY0FBQWtDLGdCQUFBLGVBQWRBLGdCQUFBLENBQWdCbEosR0FBRyxDQUFDd0ksZ0NBQXFCLEVBQUVsQiw4QkFBbUIsQ0FBQ0MsR0FBRyxDQUFDO1VBQ3JFO1FBQ0Y7TUFDRixDQUFDLENBQUMsT0FBT0MsS0FBSyxFQUFFO1FBQ2Q7TUFBQTtJQUVKLENBQUMsTUFBTSxJQUNMVyxtQkFBbUIsS0FBSyxTQUFTLEtBQ2hDQyxXQUFXLENBQUNILFlBQVksS0FBS0ssd0JBQWtCLENBQUNLLFFBQVEsSUFDdkRQLFdBQVcsQ0FBQ0gsWUFBWSxLQUFLSyx3QkFBa0IsQ0FBQ0Msb0JBQW9CLENBQUMsRUFDdkU7TUFDQTtNQUNBbEUsSUFBSSxHQUFHK0QsV0FBVyxDQUFDL0QsSUFBSTtNQUN2QjRELFlBQVksR0FBR0csV0FBVyxDQUFDSCxZQUFZO01BQ3ZDbEcsTUFBTSxHQUFHcUcsV0FBVyxDQUFDckcsTUFBTTtJQUM3QixDQUFDLE1BQU0sSUFBSW9HLG1CQUFtQixLQUFLLFNBQVMsSUFBSUMsV0FBVyxDQUFDL0QsSUFBSSxLQUFLOUMsMEJBQWUsQ0FBQ2lCLEVBQUUsRUFBRTtNQUN2RjtNQUNBNkIsSUFBSSxHQUFHOUMsMEJBQWUsQ0FBQ2lCLEVBQUU7TUFDekJ5RixZQUFZLEdBQUdHLFdBQVcsQ0FBQ0gsWUFBWTtJQUN6QyxDQUFDLE1BQU07TUFDTDtNQUNBO01BQ0EsSUFBSUcsV0FBVyxDQUFDL0QsSUFBSSxLQUFLOUMsMEJBQWUsQ0FBQ0ssU0FBUyxFQUFFO1FBQ2xEeUMsSUFBSSxHQUFHK0QsV0FBVyxDQUFDL0QsSUFBSTtRQUN2QjRELFlBQVksR0FBR0csV0FBVyxDQUFDSCxZQUFZO1FBQ3ZDbEcsTUFBTSxHQUFHcUcsV0FBVyxDQUFDckcsTUFBTTtNQUM3QjtJQUNGO0lBRUEsT0FBQXRCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLb0IsS0FBSztNQUNSK0IsSUFBSSxFQUFFL0IsS0FBSyxDQUFDK0IsSUFBSTtNQUNoQnVGLEVBQUUsRUFBRXRILEtBQUssQ0FBQytCLElBQUk7TUFDZHdGLFdBQVcsRUFBRXZILEtBQUssQ0FBQytCLElBQUk7TUFDdkI3QixNQUFNLEVBQUVBLE1BQU07TUFDZHNILFFBQVEsRUFBRXZCLFVBQVU7TUFDcEJ6RCxJQUFJLEVBQUpBLElBQUk7TUFDSjRELFlBQVksRUFBWkEsWUFBWTtNQUNacUIsYUFBYSxFQUFFLFNBQWZBLGFBQWFBLENBQUdDLEVBQU87UUFBQSxPQUFLLFVBQUE5SCxDQUFDLEVBQUk7VUFDL0IsT0FBTzhILEVBQUUsQ0FBQ0MsT0FBTyxDQUFDL0gsQ0FBQyxDQUFDZ0ksS0FBSyxFQUFFM0IsVUFBVSxDQUFDO1FBQ3hDLENBQUM7TUFBQTtNQUNEZCxRQUFRLEVBQUVuRixLQUFLLENBQUNtRjtJQUFRO0VBRTVCLENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNSLG1CQUFtQkEsQ0FBQ2tELFlBQWlDLEVBQTBCO0VBQzdGLElBQUlBLFlBQVksQ0FBQy9JLE1BQU0sS0FBSyxDQUFDLEVBQUU7SUFDN0IsT0FBTyxJQUFJO0VBQ2I7RUFDQSxJQUFNNEYsVUFBVSxHQUFHLElBQUl2SSxLQUFLLENBQUMyTCxLQUFLLENBQUNELFlBQVksQ0FBQztFQUNoRCxJQUFNcEcsTUFBTSxHQUFHb0UsbUJBQW1CLENBQUNuQixVQUFVLENBQUM7RUFFOUMsSUFBTXFELElBQUksR0FBRyxJQUFBQyxtQkFBQSxhQUFJdkgsS0FBSyxDQUFDaUUsVUFBVSxDQUFDdUQsT0FBTyxDQUFDLENBQUM1SixJQUFJLENBQUMsQ0FBQyxFQUFFMkUsR0FBRyxDQUFDLFVBQUE5RSxDQUFDO0lBQUEsT0FBSXdHLFVBQVUsQ0FBQ3VDLFVBQVUsQ0FBQy9JLENBQUMsQ0FBQztFQUFBLEVBQUM7O0VBRXJGO0VBQ0EsT0FBTztJQUNMdUQsTUFBTSxFQUFOQSxNQUFNO0lBQ05ULElBQUksRUFBRSxFQUFFO0lBQ1IrRyxJQUFJLEVBQUpBLElBQUk7SUFDSjVDLFFBQVEsRUFBRVQsVUFBVSxDQUFDWCxNQUFNLENBQUNvQixRQUFRO0lBQ3BDO0lBQ0E7SUFDQStDLFdBQVcsRUFBRXhELFVBQVUsQ0FBQ1g7RUFDMUIsQ0FBQztBQUNIO0FBRU8sSUFBTW9FLGdCQUFnQixHQUFBL0ksT0FBQSxDQUFBK0ksZ0JBQUEsT0FBQW5KLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFDMUJvSiwwQkFBZSxDQUFDeEYsR0FBRyxFQUFHRSxnQkFBZ0IsR0FDdENzRiwwQkFBZSxDQUFDNUIsT0FBTyxFQUFHdEQsY0FBYyxHQUN4Q2tGLDBCQUFlLENBQUNDLEdBQUcsRUFBR3hILGNBQWMsR0FDcEN1SCwwQkFBZSxDQUFDak0sS0FBSyxFQUFHc0ksaUJBQWlCLEdBQ3pDMkQsMEJBQWUsQ0FBQ0UsUUFBUSxFQUFHakUsc0JBQXNCLENBQ25EO0FBRU0sSUFBTWtFLFVBV1osR0FBQW5KLE9BQUEsQ0FBQW1KLFVBQUEsR0FBRztFQUNGckYsY0FBYyxFQUFkQSxjQUFjO0VBQ2RyQyxjQUFjLEVBQWRBLGNBQWM7RUFDZDRELGlCQUFpQixFQUFqQkEsaUJBQWlCO0VBQ2pCRSxtQkFBbUIsRUFBbkJBLG1CQUFtQjtFQUNuQjdCLGdCQUFnQixFQUFoQkEsZ0JBQWdCO0VBQ2hCZ0IsbUJBQW1CLEVBQW5CQSxtQkFBbUI7RUFDbkJPLHNCQUFzQixFQUF0QkEsc0JBQXNCO0VBQ3RCbUUsdUJBQXVCLEVBQXZCQSxvQ0FBdUI7RUFDdkI5RyxpQkFBaUIsRUFBakJBLDhCQUFpQjtFQUNqQk0sdUJBQXVCLEVBQXZCQTtBQUNGLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/processors",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.2.0",
4
+ "version": "3.2.2",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -31,12 +31,12 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@danmarshall/deckgl-typings": "4.9.22",
34
- "@kepler.gl/common-utils": "3.2.0",
35
- "@kepler.gl/constants": "3.2.0",
36
- "@kepler.gl/schemas": "3.2.0",
37
- "@kepler.gl/table": "3.2.0",
38
- "@kepler.gl/types": "3.2.0",
39
- "@kepler.gl/utils": "3.2.0",
34
+ "@kepler.gl/common-utils": "3.2.2",
35
+ "@kepler.gl/constants": "3.2.2",
36
+ "@kepler.gl/schemas": "3.2.2",
37
+ "@kepler.gl/table": "3.2.2",
38
+ "@kepler.gl/types": "3.2.2",
39
+ "@kepler.gl/utils": "3.2.2",
40
40
  "@loaders.gl/arrow": "^4.3.2",
41
41
  "@loaders.gl/core": "^4.3.2",
42
42
  "@loaders.gl/csv": "^4.3.2",
@@ -453,12 +453,15 @@ export function arrowSchemaToFields(
453
453
  let analyzerType = arrowDataTypeToAnalyzerDataType(field.type);
454
454
  let format = '';
455
455
 
456
+ const fieldTypeSuggestion = fieldTypeSuggestions[field.name];
457
+ const keplerField = keplerFields[fieldIndex];
458
+
456
459
  // geometry fields produced by DuckDB's st_asgeojson()
457
- if (fieldTypeSuggestions[field.name] === 'JSON') {
460
+ if (fieldTypeSuggestion === 'JSON') {
458
461
  type = ALL_FIELD_TYPES.geojson;
459
462
  analyzerType = AnalyzerDATA_TYPES.GEOMETRY_FROM_STRING;
460
463
  } else if (
461
- fieldTypeSuggestions[field.name] === 'GEOMETRY' ||
464
+ fieldTypeSuggestion === 'GEOMETRY' ||
462
465
  field.metadata.get(GEOARROW_METADATA_KEY)?.startsWith('geoarrow')
463
466
  ) {
464
467
  type = ALL_FIELD_TYPES.geoarrow;
@@ -467,7 +470,7 @@ export function arrowSchemaToFields(
467
470
  type = ALL_FIELD_TYPES.geoarrow;
468
471
  analyzerType = AnalyzerDATA_TYPES.GEOMETRY;
469
472
  field.metadata?.set(GEOARROW_METADATA_KEY, geoArrowMetadata[field.name]);
470
- } else if (fieldTypeSuggestions[field.name] === 'BLOB') {
473
+ } else if (fieldTypeSuggestion === 'BLOB') {
471
474
  // When arrow wkb column saved to DuckDB as BLOB without any metadata, then queried back
472
475
  try {
473
476
  const data = table.getChildAt(fieldIndex)?.get(0);
@@ -482,10 +485,22 @@ export function arrowSchemaToFields(
482
485
  } catch (error) {
483
486
  // ignore, not WKB
484
487
  }
488
+ } else if (
489
+ fieldTypeSuggestion === 'VARCHAR' &&
490
+ (keplerField.analyzerType === AnalyzerDATA_TYPES.GEOMETRY ||
491
+ keplerField.analyzerType === AnalyzerDATA_TYPES.GEOMETRY_FROM_STRING)
492
+ ) {
493
+ // When wkb/wkt was saved as varchar in DuckDB
494
+ type = keplerField.type;
495
+ analyzerType = keplerField.analyzerType;
496
+ format = keplerField.format;
497
+ } else if (fieldTypeSuggestion === 'VARCHAR' && keplerField.type === ALL_FIELD_TYPES.h3) {
498
+ // when kepler detected h3 column using getFieldsFromData(), set type to h3 and analyzerType to H3
499
+ type = ALL_FIELD_TYPES.h3;
500
+ analyzerType = keplerField.analyzerType;
485
501
  } else {
486
502
  // TODO should we use Kepler getFieldsFromData instead
487
503
  // of arrowDataTypeToFieldType for all fields?
488
- const keplerField = keplerFields[fieldIndex];
489
504
  if (keplerField.type === ALL_FIELD_TYPES.timestamp) {
490
505
  type = keplerField.type;
491
506
  analyzerType = keplerField.analyzerType;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/reducers",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.2.0",
4
+ "version": "3.2.2",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,21 +30,21 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/actions": "3.2.0",
34
- "@kepler.gl/cloud-providers": "3.2.0",
35
- "@kepler.gl/common-utils": "3.2.0",
36
- "@kepler.gl/constants": "3.2.0",
37
- "@kepler.gl/deckgl-arrow-layers": "3.2.0",
38
- "@kepler.gl/deckgl-layers": "3.2.0",
39
- "@kepler.gl/effects": "3.2.0",
40
- "@kepler.gl/layers": "3.2.0",
41
- "@kepler.gl/localization": "3.2.0",
42
- "@kepler.gl/processors": "3.2.0",
43
- "@kepler.gl/schemas": "3.2.0",
44
- "@kepler.gl/table": "3.2.0",
45
- "@kepler.gl/tasks": "3.2.0",
46
- "@kepler.gl/types": "3.2.0",
47
- "@kepler.gl/utils": "3.2.0",
33
+ "@kepler.gl/actions": "3.2.2",
34
+ "@kepler.gl/cloud-providers": "3.2.2",
35
+ "@kepler.gl/common-utils": "3.2.2",
36
+ "@kepler.gl/constants": "3.2.2",
37
+ "@kepler.gl/deckgl-arrow-layers": "3.2.2",
38
+ "@kepler.gl/deckgl-layers": "3.2.2",
39
+ "@kepler.gl/effects": "3.2.2",
40
+ "@kepler.gl/layers": "3.2.2",
41
+ "@kepler.gl/localization": "3.2.2",
42
+ "@kepler.gl/processors": "3.2.2",
43
+ "@kepler.gl/schemas": "3.2.2",
44
+ "@kepler.gl/table": "3.2.2",
45
+ "@kepler.gl/tasks": "3.2.2",
46
+ "@kepler.gl/types": "3.2.2",
47
+ "@kepler.gl/utils": "3.2.2",
48
48
  "@loaders.gl/loader-utils": "^4.3.2",
49
49
  "@mapbox/geo-viewport": "^0.4.1",
50
50
  "@math.gl/web-mercator": "^3.6.2",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/schemas",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.2.0",
4
+ "version": "3.2.2",
5
5
  "description": "kepler.gl schemas used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,12 +30,12 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/common-utils": "3.2.0",
34
- "@kepler.gl/constants": "3.2.0",
35
- "@kepler.gl/layers": "3.2.0",
36
- "@kepler.gl/table": "3.2.0",
37
- "@kepler.gl/types": "3.2.0",
38
- "@kepler.gl/utils": "3.2.0",
33
+ "@kepler.gl/common-utils": "3.2.2",
34
+ "@kepler.gl/constants": "3.2.2",
35
+ "@kepler.gl/layers": "3.2.2",
36
+ "@kepler.gl/table": "3.2.2",
37
+ "@kepler.gl/types": "3.2.2",
38
+ "@kepler.gl/utils": "3.2.2",
39
39
  "@loaders.gl/loader-utils": "^4.3.2",
40
40
  "@types/keymirror": "^0.1.1",
41
41
  "@types/lodash": "4.17.5",