kepler.gl 3.2.2 → 3.2.3
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.
- package/dist/src/processors/src/file-handler.d.ts +2 -7
- package/dist/src/utils/src/arrow-data-container.d.ts +38 -1
- package/dist/src/utils/src/data-container-interface.d.ts +3 -2
- package/dist/src/utils/src/index.d.ts +1 -1
- package/package.json +2 -2
- package/src/actions/package.json +8 -8
- package/src/ai-assistant/package.json +7 -7
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/package.json +3 -3
- package/src/components/package.json +16 -16
- package/src/constants/dist/default-settings.js +1 -1
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/da/54/b803dd69cea23939320d2d3aa0502638ac264cea8968854e5ccc4a71ddfbb0d6ce41a875ec1be176eb7d99815b3d6464bf60d0274b1175d7fcb131846d7d +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/9c/6d/1f90c56b793c944c2a9a393e837a46aef02e3b867e2bf28fcb0929c4ac5e +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/umd/keplergl.min.js +1 -1
- package/src/deckgl-arrow-layers/dist/utils/utils.js +5 -4
- package/src/deckgl-arrow-layers/dist/utils/validate.js +3 -2
- package/src/deckgl-arrow-layers/package.json +3 -2
- package/src/deckgl-arrow-layers/src/utils/utils.ts +4 -3
- package/src/deckgl-arrow-layers/src/utils/validate.ts +2 -1
- package/src/deckgl-layers/package.json +4 -4
- package/src/duckdb/dist/table/duckdb-table.js +3 -3
- package/src/duckdb/package.json +7 -6
- package/src/duckdb/src/table/duckdb-table.ts +11 -6
- package/src/effects/package.json +5 -5
- package/src/layers/dist/base-layer.js +2 -6
- package/src/layers/dist/layer-text-label.js +3 -3
- package/src/layers/package.json +9 -9
- package/src/layers/src/base-layer.ts +3 -2
- package/src/layers/src/layer-text-label.ts +3 -3
- package/src/localization/package.json +1 -1
- package/src/processors/dist/file-handler.d.ts +2 -7
- package/src/processors/dist/file-handler.js +8 -16
- package/src/processors/package.json +7 -7
- package/src/processors/src/file-handler.ts +3 -10
- package/src/reducers/package.json +16 -16
- package/src/schemas/package.json +7 -7
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/fd/ef/551b4725615a0e609688e4b55cf4f617fab2a80dcb5e9efb288d77e62f25cd67f3525e372e109c35ef3b3508da4eb974cdf1a784ee3ff610942b93415cc7 +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/aa/b2/36c45c478923af2d1fd8b06c81f5aa622e67be3239349c2219ac4652d959 +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +1 -1
- package/src/table/dist/kepler-table.js +3 -3
- package/src/table/package.json +5 -5
- package/src/table/src/kepler-table.ts +1 -1
- package/src/tasks/package.json +2 -2
- package/src/types/package.json +1 -1
- package/src/utils/dist/arrow-data-container.d.ts +38 -1
- package/src/utils/dist/arrow-data-container.js +78 -11
- package/src/utils/dist/data-container-interface.d.ts +3 -2
- package/src/utils/dist/data-container-interface.js +1 -1
- package/src/utils/dist/data-utils.js +3 -6
- package/src/utils/dist/index.d.ts +1 -1
- package/src/utils/dist/index.js +29 -1
- package/src/utils/package.json +4 -4
- package/src/utils/src/arrow-data-container.ts +101 -13
- package/src/utils/src/data-container-interface.ts +3 -2
- package/src/utils/src/data-utils.ts +2 -2
- package/src/utils/src/index.ts +5 -1
- package/umd/keplergl.min.js +1370 -1370
|
@@ -158,12 +158,12 @@ var KeplerTable = /*#__PURE__*/function () {
|
|
|
158
158
|
key: "update",
|
|
159
159
|
value: (function () {
|
|
160
160
|
var _update = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(data) {
|
|
161
|
-
var _this$dataContainer$u, _this$dataContainer;
|
|
161
|
+
var _ref3, _data$arrowTable, _this$dataContainer$u, _this$dataContainer;
|
|
162
162
|
var dataContainerData;
|
|
163
163
|
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
164
164
|
while (1) switch (_context2.prev = _context2.next) {
|
|
165
165
|
case 0:
|
|
166
|
-
dataContainerData = data.
|
|
166
|
+
dataContainerData = (_ref3 = (_data$arrowTable = data.arrowTable) !== null && _data$arrowTable !== void 0 ? _data$arrowTable : data.cols) !== null && _ref3 !== void 0 ? _ref3 : data.rows;
|
|
167
167
|
(_this$dataContainer$u = (_this$dataContainer = this.dataContainer).update) === null || _this$dataContainer$u === void 0 || _this$dataContainer$u.call(_this$dataContainer, dataContainerData);
|
|
168
168
|
this.allIndexes = this.dataContainer.getPlainIndex();
|
|
169
169
|
this.filteredIndex = this.allIndexes;
|
|
@@ -645,4 +645,4 @@ function getFieldValueAccessor(f, i, dc) {
|
|
|
645
645
|
f.type === _constants.ALL_FIELD_TYPES.timestamp, i, f.format || '', dc);
|
|
646
646
|
}
|
|
647
647
|
var _default = exports["default"] = KeplerTable;
|
|
648
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2QzQXJyYXkiLCJfY29uc3RhbnRzIiwiX2dwdUZpbHRlclV0aWxzIiwiX3V0aWxzIiwiX2NvbW1vblV0aWxzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiRklEX0tFWSIsIm1heWJlVG9EYXRlIiwiaXNUaW1lIiwiZmllbGRJZHgiLCJmb3JtYXQiLCJkYyIsImQiLCJ0aW1lVG9Vbml4TWlsbGkiLCJ2YWx1ZUF0IiwiaW5kZXgiLCJLZXBsZXJUYWJsZSIsIl9yZWYiLCJpbmZvIiwiY29sb3IiLCJtZXRhZGF0YSIsIl9yZWYkc3VwcG9ydGVkRmlsdGVyVCIsInN1cHBvcnRlZEZpbHRlclR5cGVzIiwiX3JlZiRkaXNhYmxlRGF0YU9wZXJhIiwiZGlzYWJsZURhdGFPcGVyYXRpb24iLCJfY2xhc3NDYWxsQ2hlY2syIiwiZGF0YXNldEluZm8iLCJpZCIsImdlbmVyYXRlSGFzaElkIiwibGFiZWwiLCJ0eXBlIiwiZGVmYXVsdE1ldGFkYXRhIiwiZGF0YUNvbnRhaW5lciIsImNyZWF0ZURhdGFDb250YWluZXIiLCJncHVGaWx0ZXIiLCJnZXRHcHVGaWx0ZXJQcm9wcyIsInVuZGVmaW5lZCIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJfaW1wb3J0RGF0YSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3JlZjIiLCJkYXRhIiwiZGF0YUNvbnRhaW5lckRhdGEiLCJpbnB1dERhdGFGb3JtYXQiLCJmaWVsZHMiLCJhbGxJbmRleGVzIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwiY29scyIsInJvd3MiLCJEYXRhRm9ybSIsIkNPTFNfQVJSQVkiLCJST1dTX0FSUkFZIiwiYXJyb3dUYWJsZSIsIm1hcCIsImkiLCJkaXNwbGF5TmFtZSIsImFuYWx5emVyVHlwZSIsIkFMTF9GSUVMRF9UWVBFUyIsInN0cmluZyIsInZhbHVlQWNjZXNzb3IiLCJnZXRGaWVsZFZhbHVlQWNjZXNzb3IiLCJnZXRQbGFpbkluZGV4IiwiZmlsdGVyZWRJbmRleCIsImZpbHRlcmVkSW5kZXhGb3JEb21haW4iLCJmaWVsZFBhaXJzIiwiZmluZFBvaW50RmllbGRQYWlycyIsInN0b3AiLCJpbXBvcnREYXRhIiwiX3giLCJfdXBkYXRlIiwiX2NhbGxlZTIiLCJfdGhpcyRkYXRhQ29udGFpbmVyJHUiLCJfdGhpcyRkYXRhQ29udGFpbmVyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwidXBkYXRlIiwiYWJydXB0IiwiX3gyIiwiZ2V0IiwibnVtUm93cyIsImdldENvbHVtbkZpZWxkIiwiY29sdW1uTmFtZSIsImZpZWxkIiwiZmluZCIsImZkIiwiX2Fzc2V0RmllbGQiLCJnZXRDb2x1bW5GaWVsZElkeCIsImZpbmRJbmRleCIsIkJvb2xlYW4iLCJnZXRDb2x1bW5EaXNwbGF5Rm9ybWF0IiwiZGlzcGxheUZvcm1hdCIsImdldFZhbHVlIiwicm93SWR4IiwidXBkYXRlQ29sdW1uRmllbGQiLCJuZXdGaWVsZCIsImFzc2lnbiIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJ1cGRhdGVUYWJsZUNvbG9yIiwibmV3Q29sb3IiLCJnZXRDb2x1bW5GaWx0ZXJQcm9wcyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiZmlsdGVyUHJvcHMiLCJmaWVsZERvbWFpbiIsImdldENvbHVtbkZpbHRlckRvbWFpbiIsImdldEZpbHRlclByb3BzIiwiZmlsdGVyVGFibGUiLCJmaWx0ZXJzIiwibGF5ZXJzIiwib3B0IiwiX3RoaXMiLCJkYXRhSWQiLCJvbGRGaWx0ZXJSZWNvcmQiLCJmaWx0ZXJSZWNvcmQiLCJnZXRGaWx0ZXJSZWNvcmQiLCJjaGFuZ2VkRmlsdGVycyIsImRpZmZGaWx0ZXJzIiwic2hvdWxkQ2FsRG9tYWluIiwiZHluYW1pY0RvbWFpbiIsInNob3VsZENhbEluZGV4IiwiY3B1IiwiZmlsdGVyUmVzdWx0IiwiZHluYW1pY0RvbWFpbkZpbHRlcnMiLCJjcHVGaWx0ZXJzIiwiZmlsdGVyRnVuY3MiLCJyZWR1Y2UiLCJhY2MiLCJmaWVsZEluZGV4IiwiZ2V0RGF0YXNldEZpZWxkSW5kZXhGb3JGaWx0ZXIiLCJnZXRGaWx0ZXJGdW5jdGlvbiIsImZpbHRlckRhdGFCeUZpbHRlclR5cGVzIiwiZmlsdGVyVGFibGVDUFUiLCJjcHVPbmx5IiwiaWdub3JlRG9tYWluIiwiZmlsdGVyZWRJZHhDUFUiLCJmaWx0ZXJSZWNvcmRDUFUiLCJncHUiLCJjb3BpZWQiLCJjb3B5VGFibGUiLCJmaWx0ZXJlZCIsImRvbWFpbiIsInJlYWwiLCJpbnRlZ2VyIiwiZ2V0TnVtZXJpY0ZpZWxkRG9tYWluIiwiaDMiLCJkYXRlIiwiZ2V0T3JkaW5hbERvbWFpbiIsInRpbWVzdGFtcCIsImdldFRpbWVzdGFtcEZpZWxkRG9tYWluIiwiZ2V0Q29sdW1uTGF5ZXJEb21haW4iLCJzY2FsZVR5cGUiLCJTQ0FMRV9UWVBFUyIsIkNvbnNvbGUiLCJlcnJvciIsImNvbmNhdCIsImluZGV4VmFsdWVBY2Nlc3NvciIsInNvcnRGdW5jdGlvbiIsImdldFNvcnRpbmdGdW5jdGlvbiIsIm9yZGluYWwiLCJjdXN0b21PcmRpbmFsIiwicG9pbnQiLCJxdWFudGlsZSIsImdldFF1YW50aWxlRG9tYWluIiwibG9nIiwiZ2V0TG9nRG9tYWluIiwicXVhbnRpemUiLCJsaW5lYXIiLCJzcXJ0IiwiY3VzdG9tIiwiZ2V0TGluZWFyRG9tYWluIiwiZmllbGROYW1lIiwiY29uZGl0aW9uIiwic3BlY2lhbENoYXJhY3RlclNldCIsImZvdW5kTWF0Y2hpbmdGaWVsZHMiLCJyZSIsInN1ZmZpeFBhaXIiLCJhbGxOYW1lcyIsInBhcnRuZXJJZHgiLCJyZXBsYWNlIiwibWF0Y2giLCJhbHRJZHgiLCJBTFRJVFVERV9GSUVMRFMiLCJzb21lIiwiYWx0IiwidG9Mb3dlckNhc2UiLCJjYXJyeSIsImlkeCIsIl9pdGVyYXRvciIsIlRSSVBfUE9JTlRfRklFTERTIiwiX3N0ZXAiLCJSZWdFeHAiLCJfZm91bmRNYXRjaGluZ0ZpZWxkcyIsInRyaW1OYW1lIiwidHJpbSIsImRlZmF1bHROYW1lIiwicGFpciIsImxhdCIsImxuZyIsImFsdGl0dWRlIiwic3VmZml4IiwiZXJyIiwic29ydERhdGFzZXRCeUNvbHVtbiIsImRhdGFzZXQiLCJjb2x1bW4iLCJtb2RlIiwic29ydEJ5IiwiU09SVF9PUkRFUiIsIkFTQ0VORElORyIsIlVOU09SVCIsInNvcnRDb2x1bW4iLCJzb3J0T3JkZXIiLCJhc2NlbmRpbmciLCJkZXNjZW5kaW5nIiwic29ydCIsImIiLCJ2YWx1ZTEiLCJ2YWx1ZTIiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJwaW5UYWJsZUNvbHVtbnMiLCJwaW5uZWRDb2x1bW5zIiwiaW5jbHVkZXMiLCJjbyIsImNvcHlUYWJsZUFuZFVwZGF0ZSIsIm9yaWdpbmFsIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJvcHRpb25zIiwiZW50cmllcyIsImVudHJ5IiwiYmluZCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9rZXBsZXItdGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHthc2NlbmRpbmcsIGRlc2NlbmRpbmd9IGZyb20gJ2QzLWFycmF5JztcblxuaW1wb3J0IHtcbiAgVFJJUF9QT0lOVF9GSUVMRFMsXG4gIFNPUlRfT1JERVIsXG4gIEFMTF9GSUVMRF9UWVBFUyxcbiAgQUxUSVRVREVfRklFTERTLFxuICBTQ0FMRV9UWVBFU1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBSR0JDb2xvcixcbiAgRmllbGQsXG4gIEZpZWxkUGFpcixcbiAgRmllbGREb21haW4sXG4gIEZpbHRlcixcbiAgUHJvdG9EYXRhc2V0LFxuICBGaWx0ZXJSZWNvcmQsXG4gIEZpbHRlckRhdGFzZXRPcHQsXG4gIFJhbmdlRmllbGREb21haW4sXG4gIFNlbGVjdEZpZWxkRG9tYWluLFxuICBNdWx0aVNlbGVjdEZpZWxkRG9tYWluLFxuICBUaW1lUmFuZ2VGaWVsZERvbWFpblxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtnZXRHcHVGaWx0ZXJQcm9wcywgZ2V0RGF0YXNldEZpZWxkSW5kZXhGb3JGaWx0ZXJ9IGZyb20gJy4vZ3B1LWZpbHRlci11dGlscyc7XG5cbmltcG9ydCB7XG4gIGdldFNvcnRpbmdGdW5jdGlvbixcbiAgdGltZVRvVW5peE1pbGxpLFxuICBjcmVhdGVEYXRhQ29udGFpbmVyLFxuICBEYXRhRm9ybSxcbiAgZGlmZkZpbHRlcnMsXG4gIGZpbHRlckRhdGFCeUZpbHRlclR5cGVzLFxuICBGaWx0ZXJSZXN1bHQsXG4gIGdldEZpbHRlckZ1bmN0aW9uLFxuICBnZXRGaWx0ZXJQcm9wcyxcbiAgZ2V0RmlsdGVyUmVjb3JkLFxuICBnZXROdW1lcmljRmllbGREb21haW4sXG4gIGdldFRpbWVzdGFtcEZpZWxkRG9tYWluLFxuICBnZXRMaW5lYXJEb21haW4sXG4gIGdldExvZ0RvbWFpbixcbiAgZ2V0T3JkaW5hbERvbWFpbixcbiAgZ2V0UXVhbnRpbGVEb21haW4sXG4gIERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIEZpbHRlckNoYW5nZWRcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCBub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcblxuLy8gVE9ETyBpc29sYXRlIGxheWVyIHR5cGUsIGRlcGVuZHMgb24gQGtlcGxlci5nbC9sYXllcnNcbnR5cGUgTGF5ZXIgPSBhbnk7XG5cbmV4cG9ydCB0eXBlIEdwdUZpbHRlciA9IHtcbiAgZmlsdGVyUmFuZ2U6IG51bWJlcltdW107XG4gIGZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnM6IHtcbiAgICBbaWQ6IHN0cmluZ106IHtuYW1lOiBzdHJpbmc7IGRvbWFpbjA6IG51bWJlcn0gfCBudWxsO1xuICB9O1xuICBmaWx0ZXJWYWx1ZUFjY2Vzc29yOiAoXG4gICAgZGM6IERhdGFDb250YWluZXJJbnRlcmZhY2VcbiAgKSA9PiAoXG4gICAgZ2V0SW5kZXg/OiAoYW55KSA9PiBudW1iZXIsXG4gICAgZ2V0RGF0YT86IChkY186IERhdGFDb250YWluZXJJbnRlcmZhY2UsIGQ6IGFueSwgZmllbGRJbmRleDogbnVtYmVyKSA9PiBhbnlcbiAgKSA9PiAoZDogYW55LCBvYmplY3RJbmZvPzoge2luZGV4OiBudW1iZXJ9KSA9PiAobnVtYmVyIHwgbnVtYmVyW10pW107XG59O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJQcm9wcyA9XG4gIHwgTnVtZXJpY0ZpZWxkRmlsdGVyUHJvcHNcbiAgfCBCb29sZWFuRmllbGRGaWx0ZXJQcm9wc1xuICB8IFN0cmluZ0ZpZWxkRmlsdGVyUHJvcHNcbiAgfCBUaW1lRmllbGRGaWx0ZXJQcm9wcztcblxuZXhwb3J0IHR5cGUgTnVtZXJpY0ZpZWxkRmlsdGVyUHJvcHMgPSBSYW5nZUZpZWxkRG9tYWluICYge1xuICB2YWx1ZTogW251bWJlciwgbnVtYmVyXTtcbiAgdHlwZTogc3RyaW5nO1xuICB0eXBlT3B0aW9uczogc3RyaW5nW107XG4gIGdwdTogYm9vbGVhbjtcbiAgY29sdW1uU3RhdHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufTtcbmV4cG9ydCB0eXBlIEJvb2xlYW5GaWVsZEZpbHRlclByb3BzID0gU2VsZWN0RmllbGREb21haW4gJiB7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IGJvb2xlYW47XG4gIGdwdTogYm9vbGVhbjtcbiAgY29sdW1uU3RhdHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufTtcbmV4cG9ydCB0eXBlIFN0cmluZ0ZpZWxkRmlsdGVyUHJvcHMgPSBNdWx0aVNlbGVjdEZpZWxkRG9tYWluICYge1xuICB0eXBlOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmdbXTtcbiAgZ3B1OiBib29sZWFuO1xuICBjb2x1bW5TdGF0cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuZXhwb3J0IHR5cGUgVGltZUZpZWxkRmlsdGVyUHJvcHMgPSBUaW1lUmFuZ2VGaWVsZERvbWFpbiAmIHtcbiAgdHlwZTogc3RyaW5nO1xuICB2aWV3OiBGaWx0ZXJbJ3ZpZXcnXTtcbiAgZml4ZWREb21haW46IGJvb2xlYW47XG4gIHZhbHVlOiBudW1iZXJbXTtcbiAgZ3B1OiBib29sZWFuO1xuICBjb2x1bW5TdGF0cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuXG4vLyBVbmlxdWUgaWRlbnRpZmllciBvZiBlYWNoIGZpZWxkXG5jb25zdCBGSURfS0VZID0gJ25hbWUnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF5YmVUb0RhdGUoXG4gIGlzVGltZTogYm9vbGVhbixcbiAgZmllbGRJZHg6IG51bWJlcixcbiAgZm9ybWF0OiBzdHJpbmcsXG4gIGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICAvLyBBbiBvYmplY3Qgd2l0aCByb3cgaW5kZXggb3IgYSBtYXRlcmlhbGl6ZWQgcm93IGFycmF5IChmb3IgbWF0ZXJpYWxpemVkIGhvdmVyIGluZm8gZnJvbSB0cmlwIGxheWVyKVxuICBkOiB7aW5kZXg6IG51bWJlcn0gfCBhbnlbXVxuKSB7XG4gIGlmIChpc1RpbWUpIHtcbiAgICByZXR1cm4gdGltZVRvVW5peE1pbGxpKEFycmF5LmlzQXJyYXkoZCkgPyBkW2ZpZWxkSWR4XSA6IGRjLnZhbHVlQXQoZC5pbmRleCwgZmllbGRJZHgpLCBmb3JtYXQpO1xuICB9XG5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZCkgPyBkW2ZpZWxkSWR4XSA6IGRjLnZhbHVlQXQoZC5pbmRleCwgZmllbGRJZHgpO1xufVxuXG5jbGFzcyBLZXBsZXJUYWJsZTxGIGV4dGVuZHMgRmllbGQgPSBGaWVsZD4ge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIHR5cGU/OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGNvbG9yOiBSR0JDb2xvcjtcblxuICAvLyBmaWVsZHMgYW5kIGRhdGFcbiAgZmllbGRzOiBGW10gPSBbXTtcblxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlO1xuXG4gIGFsbEluZGV4ZXM6IG51bWJlcltdID0gW107XG4gIGZpbHRlcmVkSW5kZXg6IG51bWJlcltdID0gW107XG4gIGZpbHRlcmVkSWR4Q1BVPzogbnVtYmVyW107XG4gIGZpbHRlcmVkSW5kZXhGb3JEb21haW46IG51bWJlcltdID0gW107XG4gIGZpZWxkUGFpcnM6IEZpZWxkUGFpcltdID0gW107XG4gIGdwdUZpbHRlcjogR3B1RmlsdGVyO1xuICBmaWx0ZXJSZWNvcmQ/OiBGaWx0ZXJSZWNvcmQ7XG4gIGZpbHRlclJlY29yZENQVT86IEZpbHRlclJlY29yZDtcbiAgY2hhbmdlZEZpbHRlcnM/OiBGaWx0ZXJDaGFuZ2VkO1xuXG4gIC8vIHRhYmxlLWluamVjdGVkIG1ldGFkYXRhXG4gIHNvcnRDb2x1bW4/OiB7XG4gICAgLy8gY29sdW1uIG5hbWU6IHNvcnRlZCBpZHhcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7IC8vIEFTQ0VORElORyB8IERFU0NFTkRJTkcgfCBVTlNPUlRcbiAgfTtcbiAgc29ydE9yZGVyPzogbnVtYmVyW10gfCBudWxsO1xuXG4gIHBpbm5lZENvbHVtbnM/OiBzdHJpbmdbXTtcbiAgc3VwcG9ydGVkRmlsdGVyVHlwZXM/OiBzdHJpbmdbXSB8IG51bGw7XG4gIGRpc2FibGVEYXRhT3BlcmF0aW9uPzogYm9vbGVhbjtcblxuICAvLyB0YWJsZS1pbmplY3RlZCBtZXRhZGF0YVxuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICBnZXRGaWxlUHJvY2Vzc29yPzogKGRhdGE6IGFueSwgaW5wdXRGb3JtYXQ/OiBzdHJpbmcpID0+IHtkYXRhOiBhbnk7IGZvcm1hdDogc3RyaW5nfTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgaW5mbyxcbiAgICBjb2xvcixcbiAgICBtZXRhZGF0YSxcbiAgICBzdXBwb3J0ZWRGaWx0ZXJUeXBlcyA9IG51bGwsXG4gICAgZGlzYWJsZURhdGFPcGVyYXRpb24gPSBmYWxzZVxuICB9OiB7XG4gICAgaW5mbz86IFByb3RvRGF0YXNldFsnaW5mbyddO1xuICAgIGNvbG9yOiBSR0JDb2xvcjtcbiAgICBtZXRhZGF0YT86IFByb3RvRGF0YXNldFsnbWV0YWRhdGEnXTtcbiAgICBzdXBwb3J0ZWRGaWx0ZXJUeXBlcz86IFByb3RvRGF0YXNldFsnc3VwcG9ydGVkRmlsdGVyVHlwZXMnXTtcbiAgICBkaXNhYmxlRGF0YU9wZXJhdGlvbj86IFByb3RvRGF0YXNldFsnZGlzYWJsZURhdGFPcGVyYXRpb24nXTtcbiAgfSkge1xuICAgIC8vIFRPRE8gLSB3aGF0IHRvIGRvIGlmIHZhbGlkYXRpb24gZmFpbHM/IENhbiBrZXBsZXIgaGFuZGxlIGV4Y2VwdGlvbnM/XG4gICAgLy8gY29uc3QgdmFsaWRhdGVkRGF0YSA9IHZhbGlkYXRlSW5wdXREYXRhKGRhdGEpO1xuICAgIC8vIGlmICghdmFsaWRhdGVkRGF0YSkge1xuICAgIC8vICAgcmV0dXJuIHRoaXM7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgZGF0YXNldEluZm8gPSB7XG4gICAgICBpZDogZ2VuZXJhdGVIYXNoSWQoNCksXG4gICAgICBsYWJlbDogJ25ldyBkYXRhc2V0JyxcbiAgICAgIHR5cGU6ICcnLFxuICAgICAgLi4uaW5mb1xuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TWV0YWRhdGEgPSB7XG4gICAgICBpZDogZGF0YXNldEluZm8uaWQsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBmb3JtYXQ6IGRhdGFzZXRJbmZvLmZvcm1hdCB8fCAnJyxcbiAgICAgIGxhYmVsOiBkYXRhc2V0SW5mby5sYWJlbCB8fCAnJ1xuICAgIH07XG5cbiAgICB0aGlzLmlkID0gZGF0YXNldEluZm8uaWQ7XG4gICAgdGhpcy50eXBlID0gZGF0YXNldEluZm8udHlwZTtcbiAgICB0aGlzLmxhYmVsID0gZGF0YXNldEluZm8ubGFiZWw7XG4gICAgdGhpcy5jb2xvciA9IGNvbG9yO1xuICAgIHRoaXMubWV0YWRhdGEgPSB7XG4gICAgICAuLi5kZWZhdWx0TWV0YWRhdGEsXG4gICAgICAuLi5tZXRhZGF0YVxuICAgIH07XG5cbiAgICB0aGlzLnN1cHBvcnRlZEZpbHRlclR5cGVzID0gc3VwcG9ydGVkRmlsdGVyVHlwZXM7XG4gICAgdGhpcy5kaXNhYmxlRGF0YU9wZXJhdGlvbiA9IGRpc2FibGVEYXRhT3BlcmF0aW9uO1xuXG4gICAgdGhpcy5kYXRhQ29udGFpbmVyID0gY3JlYXRlRGF0YUNvbnRhaW5lcihbXSk7XG4gICAgdGhpcy5ncHVGaWx0ZXIgPSBnZXRHcHVGaWx0ZXJQcm9wcyhbXSwgdGhpcy5pZCwgW10sIHVuZGVmaW5lZCk7XG4gIH1cblxuICBhc3luYyBpbXBvcnREYXRhKHtkYXRhfToge2RhdGE6IFByb3RvRGF0YXNldFsnZGF0YSddfSkge1xuICAgIGNvbnN0IGRhdGFDb250YWluZXJEYXRhID0gZGF0YS5jb2xzID8gZGF0YS5jb2xzIDogZGF0YS5yb3dzO1xuICAgIGNvbnN0IGlucHV0RGF0YUZvcm1hdCA9IGRhdGEuY29scyA/IERhdGFGb3JtLkNPTFNfQVJSQVkgOiBEYXRhRm9ybS5ST1dTX0FSUkFZO1xuXG4gICAgY29uc3QgZGF0YUNvbnRhaW5lciA9IGNyZWF0ZURhdGFDb250YWluZXIoZGF0YUNvbnRhaW5lckRhdGEsIHtcbiAgICAgIGZpZWxkczogZGF0YS5maWVsZHMsXG4gICAgICBhcnJvd1RhYmxlOiBkYXRhLmFycm93VGFibGUsXG4gICAgICBpbnB1dERhdGFGb3JtYXRcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpZWxkczogRmllbGRbXSA9IGRhdGEuZmllbGRzLm1hcCgoZiwgaSkgPT4gKHtcbiAgICAgIC4uLmYsXG4gICAgICBmaWVsZElkeDogaSxcbiAgICAgIGlkOiBmLm5hbWUsXG4gICAgICBkaXNwbGF5TmFtZTogZi5kaXNwbGF5TmFtZSB8fCBmLm5hbWUsXG4gICAgICBhbmFseXplclR5cGU6IGYuYW5hbHl6ZXJUeXBlIHx8IEFMTF9GSUVMRF9UWVBFUy5zdHJpbmcsXG4gICAgICBmb3JtYXQ6IGYuZm9ybWF0IHx8ICcnLFxuICAgICAgdmFsdWVBY2Nlc3NvcjogZ2V0RmllbGRWYWx1ZUFjY2Vzc29yKGYsIGksIGRhdGFDb250YWluZXIpXG4gICAgfSkpO1xuXG4gICAgY29uc3QgYWxsSW5kZXhlcyA9IGRhdGFDb250YWluZXIuZ2V0UGxhaW5JbmRleCgpO1xuICAgIHRoaXMuZGF0YUNvbnRhaW5lciA9IGRhdGFDb250YWluZXI7XG4gICAgdGhpcy5hbGxJbmRleGVzID0gYWxsSW5kZXhlcztcbiAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSBhbGxJbmRleGVzO1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9IGFsbEluZGV4ZXM7XG4gICAgdGhpcy5maWVsZFBhaXJzID0gZmluZFBvaW50RmllbGRQYWlycyhmaWVsZHMpO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTWFrZSBzdXJlIHRoYXQgZmllbGRzIHNhdGlzZmllcyBGIGV4dGVuZHMgRmllbGRcbiAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcbiAgICB0aGlzLmdwdUZpbHRlciA9IGdldEdwdUZpbHRlclByb3BzKFtdLCB0aGlzLmlkLCBmaWVsZHMsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlIHRhYmxlIHdpdGggbmV3IGRhdGFcbiAgICogQHBhcmFtIGRhdGEgLSBuZXcgZGF0YSBlLmcuIHRoZSBhcnJvdyBkYXRhIHdpdGggbmV3IGJhdGNoZXMgbG9hZGVkXG4gICAqL1xuICBhc3luYyB1cGRhdGUoZGF0YTogUHJvdG9EYXRhc2V0WydkYXRhJ10pIHtcbiAgICBjb25zdCBkYXRhQ29udGFpbmVyRGF0YSA9IGRhdGEuY29scyA/IGRhdGEuY29scyA6IGRhdGEucm93cztcbiAgICB0aGlzLmRhdGFDb250YWluZXIudXBkYXRlPy4oZGF0YUNvbnRhaW5lckRhdGEpO1xuICAgIHRoaXMuYWxsSW5kZXhlcyA9IHRoaXMuZGF0YUNvbnRhaW5lci5nZXRQbGFpbkluZGV4KCk7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4ID0gdGhpcy5hbGxJbmRleGVzO1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9IHRoaXMuYWxsSW5kZXhlcztcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmllbGRcbiAgICogQHBhcmFtIGNvbHVtbk5hbWVcbiAgICovXG4gIGdldENvbHVtbkZpZWxkKGNvbHVtbk5hbWU6IHN0cmluZyk6IEYgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZChmZCA9PiBmZFtGSURfS0VZXSA9PT0gY29sdW1uTmFtZSk7XG4gICAgdGhpcy5fYXNzZXRGaWVsZChjb2x1bW5OYW1lLCBmaWVsZCk7XG4gICAgcmV0dXJuIGZpZWxkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWVsZElkeFxuICAgKiBAcGFyYW0gY29sdW1uTmFtZVxuICAgKi9cbiAgZ2V0Q29sdW1uRmllbGRJZHgoY29sdW1uTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBmaWVsZElkeCA9IHRoaXMuZmllbGRzLmZpbmRJbmRleChmZCA9PiBmZFtGSURfS0VZXSA9PT0gY29sdW1uTmFtZSk7XG4gICAgdGhpcy5fYXNzZXRGaWVsZChjb2x1bW5OYW1lLCBCb29sZWFuKGZpZWxkSWR4ID4gLTEpKTtcbiAgICByZXR1cm4gZmllbGRJZHg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRpc3BsYXlGb3JtYXRcbiAgICogQHBhcmFtIGNvbHVtbk5hbWVcbiAgICovXG4gIGdldENvbHVtbkRpc3BsYXlGb3JtYXQoY29sdW1uTmFtZSkge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZChmZCA9PiBmZFtGSURfS0VZXSA9PT0gY29sdW1uTmFtZSk7XG4gICAgdGhpcy5fYXNzZXRGaWVsZChjb2x1bW5OYW1lLCBmaWVsZCk7XG4gICAgcmV0dXJuIGZpZWxkPy5kaXNwbGF5Rm9ybWF0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgYSBjZWxsXG4gICAqL1xuICBnZXRWYWx1ZShjb2x1bW5OYW1lOiBzdHJpbmcsIHJvd0lkeDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ2V0Q29sdW1uRmllbGQoY29sdW1uTmFtZSk7XG4gICAgcmV0dXJuIGZpZWxkID8gZmllbGQudmFsdWVBY2Nlc3Nvcih7aW5kZXg6IHJvd0lkeH0pIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGV4aXN0aW5nIGZpZWxkIHdpdGggYSBuZXcgb2JqZWN0XG4gICAqIEBwYXJhbSBmaWVsZElkeFxuICAgKiBAcGFyYW0gbmV3RmllbGRcbiAgICovXG4gIHVwZGF0ZUNvbHVtbkZpZWxkKGZpZWxkSWR4OiBudW1iZXIsIG5ld0ZpZWxkOiBGKTogdm9pZCB7XG4gICAgdGhpcy5maWVsZHMgPSBPYmplY3QuYXNzaWduKFsuLi50aGlzLmZpZWxkc10sIHtbZmllbGRJZHhdOiBuZXdGaWVsZH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBkYXRhc2V0IGNvbG9yIGJ5IGN1c3RvbSBjb2xvclxuICAgKiBAcGFyYW0gbmV3Q29sb3JcbiAgICovXG4gIHVwZGF0ZVRhYmxlQ29sb3IobmV3Q29sb3I6IFJHQkNvbG9yKTogdm9pZCB7XG4gICAgdGhpcy5jb2xvciA9IG5ld0NvbG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgZmlsdGVyUHJvcHMgdG8gZmllbGQgYW5kIHJldHJpZXZlIGl0XG4gICAqIEBwYXJhbSBjb2x1bW5OYW1lXG4gICAqL1xuICBnZXRDb2x1bW5GaWx0ZXJQcm9wcyhjb2x1bW5OYW1lOiBzdHJpbmcpOiBGWydmaWx0ZXJQcm9wcyddIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmllbGRJZHggPSB0aGlzLmdldENvbHVtbkZpZWxkSWR4KGNvbHVtbk5hbWUpO1xuICAgIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzW2ZpZWxkSWR4XTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZpZWxkLCAnZmlsdGVyUHJvcHMnKSkge1xuICAgICAgcmV0dXJuIGZpZWxkLmZpbHRlclByb3BzO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkRG9tYWluID0gdGhpcy5nZXRDb2x1bW5GaWx0ZXJEb21haW4oZmllbGQpO1xuICAgIGlmICghZmllbGREb21haW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZ2V0RmlsdGVyUHJvcHMoZmllbGQsIGZpZWxkRG9tYWluKTtcbiAgICBjb25zdCBuZXdGaWVsZCA9IHtcbiAgICAgIC4uLmZpZWxkLFxuICAgICAgZmlsdGVyUHJvcHNcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVDb2x1bW5GaWVsZChmaWVsZElkeCwgbmV3RmllbGQpO1xuXG4gICAgcmV0dXJuIGZpbHRlclByb3BzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGZpbHRlcnMgdG8gZGF0YXNldCwgcmV0dXJuIHRoZSBmaWx0ZXJlZCBkYXRhc2V0IHdpdGggdXBkYXRlZCBgZ3B1RmlsdGVyYCwgYGZpbHRlclJlY29yZGAsIGBmaWx0ZXJlZEluZGV4YCwgYGZpbHRlcmVkSW5kZXhGb3JEb21haW5gXG4gICAqIEBwYXJhbSBmaWx0ZXJzXG4gICAqIEBwYXJhbSBsYXllcnNcbiAgICogQHBhcmFtIG9wdFxuICAgKi9cbiAgZmlsdGVyVGFibGUoZmlsdGVyczogRmlsdGVyW10sIGxheWVyczogTGF5ZXJbXSwgb3B0PzogRmlsdGVyRGF0YXNldE9wdCk6IEtlcGxlclRhYmxlPEZpZWxkPiB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXIsIGlkOiBkYXRhSWQsIGZpbHRlclJlY29yZDogb2xkRmlsdGVyUmVjb3JkLCBmaWVsZHN9ID0gdGhpcztcblxuICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZpbHRlcnNcbiAgICBjb25zdCBmaWx0ZXJSZWNvcmQgPSBnZXRGaWx0ZXJSZWNvcmQoZGF0YUlkLCBmaWx0ZXJzLCBvcHQgfHwge30pO1xuXG4gICAgdGhpcy5maWx0ZXJSZWNvcmQgPSBmaWx0ZXJSZWNvcmQ7XG4gICAgdGhpcy5ncHVGaWx0ZXIgPSBnZXRHcHVGaWx0ZXJQcm9wcyhmaWx0ZXJzLCBkYXRhSWQsIGZpZWxkcywgdGhpcy5ncHVGaWx0ZXIpO1xuXG4gICAgdGhpcy5jaGFuZ2VkRmlsdGVycyA9IGRpZmZGaWx0ZXJzKGZpbHRlclJlY29yZCwgb2xkRmlsdGVyUmVjb3JkKTtcblxuICAgIGlmICghZmlsdGVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJbmRleCA9IHRoaXMuYWxsSW5kZXhlcztcbiAgICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9IHRoaXMuYWxsSW5kZXhlcztcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGdlbmVyYXRlIDIgc2V0cyBvZiBmaWx0ZXIgcmVzdWx0XG4gICAgLy8gZmlsdGVyZWRJbmRleCB1c2VkIHRvIGNhbGN1bGF0ZSBsYXllciBkYXRhXG4gICAgLy8gZmlsdGVyZWRJbmRleEZvckRvbWFpbiB1c2VkIHRvIGNhbGN1bGF0ZSBsYXllciBEb21haW5cbiAgICBjb25zdCBzaG91bGRDYWxEb21haW4gPSBCb29sZWFuKHRoaXMuY2hhbmdlZEZpbHRlcnMuZHluYW1pY0RvbWFpbik7XG4gICAgY29uc3Qgc2hvdWxkQ2FsSW5kZXggPSBCb29sZWFuKHRoaXMuY2hhbmdlZEZpbHRlcnMuY3B1KTtcblxuICAgIGxldCBmaWx0ZXJSZXN1bHQ6IEZpbHRlclJlc3VsdCA9IHt9O1xuICAgIGlmIChzaG91bGRDYWxEb21haW4gfHwgc2hvdWxkQ2FsSW5kZXgpIHtcbiAgICAgIGNvbnN0IGR5bmFtaWNEb21haW5GaWx0ZXJzID0gc2hvdWxkQ2FsRG9tYWluID8gZmlsdGVyUmVjb3JkLmR5bmFtaWNEb21haW4gOiBudWxsO1xuICAgICAgY29uc3QgY3B1RmlsdGVycyA9IHNob3VsZENhbEluZGV4ID8gZmlsdGVyUmVjb3JkLmNwdSA6IG51bGw7XG5cbiAgICAgIGNvbnN0IGZpbHRlckZ1bmNzID0gZmlsdGVycy5yZWR1Y2UoKGFjYywgZmlsdGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkSW5kZXggPSBnZXREYXRhc2V0RmllbGRJbmRleEZvckZpbHRlcih0aGlzLmlkLCBmaWx0ZXIpO1xuICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkSW5kZXggIT09IC0xID8gZmllbGRzW2ZpZWxkSW5kZXhdIDogbnVsbDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICBbZmlsdGVyLmlkXTogZ2V0RmlsdGVyRnVuY3Rpb24oZmllbGQsIHRoaXMuaWQsIGZpbHRlciwgbGF5ZXJzLCBkYXRhQ29udGFpbmVyKVxuICAgICAgICB9O1xuICAgICAgfSwge30pO1xuXG4gICAgICBmaWx0ZXJSZXN1bHQgPSBmaWx0ZXJEYXRhQnlGaWx0ZXJUeXBlcyhcbiAgICAgICAge2R5bmFtaWNEb21haW5GaWx0ZXJzLCBjcHVGaWx0ZXJzLCBmaWx0ZXJGdW5jc30sXG4gICAgICAgIGRhdGFDb250YWluZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJlZEluZGV4ID0gZmlsdGVyUmVzdWx0LmZpbHRlcmVkSW5kZXggfHwgdGhpcy5maWx0ZXJlZEluZGV4O1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9XG4gICAgICBmaWx0ZXJSZXN1bHQuZmlsdGVyZWRJbmRleEZvckRvbWFpbiB8fCB0aGlzLmZpbHRlcmVkSW5kZXhGb3JEb21haW47XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBmaWx0ZXJzIHRvIGEgZGF0YXNldCBhbGwgb24gQ1BVLCBhc3NpZ24gdG8gYGZpbHRlcmVkSWR4Q1BVYCwgYGZpbHRlclJlY29yZENQVWBcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogQHBhcmFtIGxheWVyc1xuICAgKi9cbiAgZmlsdGVyVGFibGVDUFUoZmlsdGVyczogRmlsdGVyW10sIGxheWVyczogTGF5ZXJbXSk6IEtlcGxlclRhYmxlPEZpZWxkPiB7XG4gICAgY29uc3Qgb3B0ID0ge1xuICAgICAgY3B1T25seTogdHJ1ZSxcbiAgICAgIGlnbm9yZURvbWFpbjogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyBubyBmaWx0ZXJcbiAgICBpZiAoIWZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSWR4Q1BVID0gdGhpcy5hbGxJbmRleGVzO1xuICAgICAgdGhpcy5maWx0ZXJSZWNvcmRDUFUgPSBnZXRGaWx0ZXJSZWNvcmQodGhpcy5pZCwgZmlsdGVycywgb3B0KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIG5vIGdwdSBmaWx0ZXJcbiAgICBpZiAoIWZpbHRlcnMuZmluZChmID0+IGYuZ3B1KSkge1xuICAgICAgdGhpcy5maWx0ZXJlZElkeENQVSA9IHRoaXMuZmlsdGVyZWRJbmRleDtcbiAgICAgIHRoaXMuZmlsdGVyUmVjb3JkQ1BVID0gZ2V0RmlsdGVyUmVjb3JkKHRoaXMuaWQsIGZpbHRlcnMsIG9wdCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBtYWtlIGEgY29weSBmb3IgY3B1IGZpbHRlcmluZ1xuICAgIGNvbnN0IGNvcGllZCA9IGNvcHlUYWJsZSh0aGlzKTtcblxuICAgIGNvcGllZC5maWx0ZXJSZWNvcmQgPSB0aGlzLmZpbHRlclJlY29yZENQVTtcbiAgICBjb3BpZWQuZmlsdGVyZWRJbmRleCA9IHRoaXMuZmlsdGVyZWRJZHhDUFUgfHwgW107XG5cbiAgICBjb25zdCBmaWx0ZXJlZCA9IGNvcGllZC5maWx0ZXJUYWJsZShmaWx0ZXJzLCBsYXllcnMsIG9wdCk7XG5cbiAgICB0aGlzLmZpbHRlcmVkSWR4Q1BVID0gZmlsdGVyZWQuZmlsdGVyZWRJbmRleDtcbiAgICB0aGlzLmZpbHRlclJlY29yZENQVSA9IGZpbHRlcmVkLmZpbHRlclJlY29yZDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBmaWVsZCBkb21haW4gYmFzZWQgb24gZmllbGQgdHlwZSBhbmQgZGF0YVxuICAgKiBmb3IgRmlsdGVyXG4gICAqL1xuICBnZXRDb2x1bW5GaWx0ZXJEb21haW4oZmllbGQ6IEYpOiBGaWVsZERvbWFpbiB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXJ9ID0gdGhpcztcbiAgICBjb25zdCB7dmFsdWVBY2Nlc3Nvcn0gPSBmaWVsZDtcblxuICAgIGxldCBkb21haW47XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgICAgICAvLyBjYWxjdWxhdGUgZG9tYWluIGFuZCBzdGVwXG4gICAgICAgIHJldHVybiBnZXROdW1lcmljRmllbGREb21haW4oZGF0YUNvbnRhaW5lciwgdmFsdWVBY2Nlc3Nvcik7XG5cbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW46XG4gICAgICAgIHJldHVybiB7ZG9tYWluOiBbdHJ1ZSwgZmFsc2VdfTtcblxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMuc3RyaW5nOlxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMuaDM6XG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgICAgICBkb21haW4gPSBnZXRPcmRpbmFsRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpO1xuICAgICAgICByZXR1cm4ge2RvbWFpbn07XG5cbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgICAgcmV0dXJuIGdldFRpbWVzdGFtcEZpZWxkRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge2RvbWFpbjogZ2V0T3JkaW5hbERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKX07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBHZXQgdGhlIGRvbWFpbiBvZiB0aGlzIGNvbHVtbiBiYXNlZCBvbiBzY2FsZSB0eXBlXG4gICAqL1xuICBnZXRDb2x1bW5MYXllckRvbWFpbihmaWVsZDogRiwgc2NhbGVUeXBlOiBzdHJpbmcpOiBudW1iZXJbXSB8IHN0cmluZ1tdIHwgW251bWJlciwgbnVtYmVyXSB8IG51bGwge1xuICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4Rm9yRG9tYWlufSA9IHRoaXM7XG5cbiAgICBpZiAoIVNDQUxFX1RZUEVTW3NjYWxlVHlwZV0pIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoYHNjYWxlIHR5cGUgJHtzY2FsZVR5cGV9IG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHt2YWx1ZUFjY2Vzc29yfSA9IGZpZWxkO1xuICAgIGNvbnN0IGluZGV4VmFsdWVBY2Nlc3NvciA9IGkgPT4gdmFsdWVBY2Nlc3Nvcih7aW5kZXg6IGl9KTtcbiAgICBjb25zdCBzb3J0RnVuY3Rpb24gPSBnZXRTb3J0aW5nRnVuY3Rpb24oZmllbGQudHlwZSk7XG5cbiAgICBzd2l0Y2ggKHNjYWxlVHlwZSkge1xuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5vcmRpbmFsOlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsOlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5wb2ludDpcbiAgICAgICAgLy8gZG8gbm90IHJlY2FsY3VsYXRlIG9yZGluYWwgZG9tYWluIGJhc2VkIG9uIGZpbHRlcmVkIGRhdGFcbiAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgb3JkaW5hbCBkb21haW4gZXZlcnkgdGltZVxuICAgICAgICByZXR1cm4gZ2V0T3JkaW5hbERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5xdWFudGlsZTpcbiAgICAgICAgcmV0dXJuIGdldFF1YW50aWxlRG9tYWluKGZpbHRlcmVkSW5kZXhGb3JEb21haW4sIGluZGV4VmFsdWVBY2Nlc3Nvciwgc29ydEZ1bmN0aW9uKTtcblxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5sb2c6XG4gICAgICAgIHJldHVybiBnZXRMb2dEb21haW4oZmlsdGVyZWRJbmRleEZvckRvbWFpbiwgaW5kZXhWYWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5xdWFudGl6ZTpcbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMubGluZWFyOlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5zcXJ0OlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5jdXN0b206XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZ2V0TGluZWFyRG9tYWluKGZpbHRlcmVkSW5kZXhGb3JEb21haW4sIGluZGV4VmFsdWVBY2Nlc3Nvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNhbXBsZSBvZiByb3dzIHRvIGNhbGN1bGF0ZSBsYXllciBib3VuZGFyaWVzXG4gICAqL1xuICAvLyBnZXRTYW1wbGVEYXRhKHJvd3MpXG5cbiAgLyoqXG4gICAqIFBhcnNlIGNlbGwgdmFsdWUgYmFzZWQgb24gY29sdW1uIHR5cGUgYW5kIHJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBWYWx1ZSB0aGUgZmllbGQgdmFsdWUsIHR5cGUgdGhlIGZpZWxkIHR5cGVcbiAgICovXG4gIC8vIHBhcnNlRmllbGRWYWx1ZSh2YWx1ZSwgdHlwZSlcblxuICAvLyBzb3J0RGF0YXNldEJ5Q29sdW1uKClcblxuICAvKipcbiAgICogQXNzZXJ0IHdoZXRoZXIgZmllbGQgZXhpc3RcbiAgICogQHBhcmFtIGZpZWxkTmFtZVxuICAgKiBAcGFyYW0gY29uZGl0aW9uXG4gICAqL1xuICBfYXNzZXRGaWVsZChmaWVsZE5hbWU6IHN0cmluZywgY29uZGl0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgQ29uc29sZS5lcnJvcihgJHtmaWVsZE5hbWV9IGRvZXNudCBleGlzdCBpbiBkYXRhc2V0ICR7dGhpcy5pZH1gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgRGF0YXNldHMgPSB7XG4gIFtrZXk6IHN0cmluZ106IEtlcGxlclRhYmxlPEZpZWxkPjtcbn07XG5cbi8vIEhFTFBFUiBGVU5DVElPTlMgKE1BSU5MWSBFWFBPUlRFRCBGT1IgVEVTVC4uLilcbi8vIGhhdmUgdG8gZG91YmxlIGV4Y2FwZVxuY29uc3Qgc3BlY2lhbENoYXJhY3RlclNldCA9IGBbI18mQFxcXFwuXFxcXC1cXFxcIF1gO1xuXG5mdW5jdGlvbiBmb3VuZE1hdGNoaW5nRmllbGRzKHJlLCBzdWZmaXhQYWlyLCBhbGxOYW1lcywgZmllbGROYW1lKSB7XG4gIGNvbnN0IHBhcnRuZXJJZHggPSBhbGxOYW1lcy5maW5kSW5kZXgoXG4gICAgZCA9PiBkID09PSBmaWVsZE5hbWUucmVwbGFjZShyZSwgbWF0Y2ggPT4gbWF0Y2gucmVwbGFjZShzdWZmaXhQYWlyWzBdLCBzdWZmaXhQYWlyWzFdKSlcbiAgKTtcbiAgbGV0IGFsdElkeCA9IC0xO1xuICBpZiAocGFydG5lcklkeCA+IC0xKSB7XG4gICAgLy8gaWYgZm91bmQgcGFydG5lciwgZ28gb24gYW5kIGxvb2sgZm9yIGFsdGl0dWRlXG4gICAgQUxUSVRVREVfRklFTERTLnNvbWUoYWx0ID0+IHtcbiAgICAgIGFsdElkeCA9IGFsbE5hbWVzLmZpbmRJbmRleChcbiAgICAgICAgZCA9PiBkID09PSBmaWVsZE5hbWUucmVwbGFjZShyZSwgbWF0Y2ggPT4gbWF0Y2gucmVwbGFjZShzdWZmaXhQYWlyWzBdLCBhbHQpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhbHRJZHggPiAtMTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge3BhcnRuZXJJZHgsIGFsdElkeH07XG59XG4vKipcbiAqIEZpbmQgcG9pbnQgZmllbGRzIHBhaXJzIGZyb20gZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHJldHVybnMgZm91bmQgcG9pbnQgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUG9pbnRGaWVsZFBhaXJzKGZpZWxkczogRmllbGRbXSk6IEZpZWxkUGFpcltdIHtcbiAgY29uc3QgYWxsTmFtZXMgPSBmaWVsZHMubWFwKGYgPT4gZi5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuXG4gIC8vIGdldCBsaXN0IG9mIGFsbCBmaWVsZHMgd2l0aCBtYXRjaGluZyBzdWZmaXhlc1xuICBjb25zdCBhY2M6IEZpZWxkUGFpcltdID0gW107XG4gIHJldHVybiBhbGxOYW1lcy5yZWR1Y2UoKGNhcnJ5LCBmaWVsZE5hbWUsIGlkeCkgPT4ge1xuICAgIC8vIFRoaXMgc2VhcmNoIGZvciBwYWlycyB3aWxsIGVhcmx5IGV4aXQgaWYgZm91bmQuXG4gICAgZm9yIChjb25zdCBzdWZmaXhQYWlyIG9mIFRSSVBfUE9JTlRfRklFTERTKSB7XG4gICAgICAvLyBtYXRjaCBmaXJzdCBzdWZmaXhcbiAgICAgIC8vIChefFsjXyZAXFwuXFwtXFwgXSlsYXQoWyNfJkBcXC5cXC1cXCBdfCQpXG4gICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYChefCR7c3BlY2lhbENoYXJhY3RlclNldH0pJHtzdWZmaXhQYWlyWzBdfSgke3NwZWNpYWxDaGFyYWN0ZXJTZXR9fCQpYCk7XG5cbiAgICAgIGlmIChyZS50ZXN0KGZpZWxkTmFtZSkpIHtcbiAgICAgICAgY29uc3Qge3BhcnRuZXJJZHgsIGFsdElkeH0gPSBmb3VuZE1hdGNoaW5nRmllbGRzKHJlLCBzdWZmaXhQYWlyLCBhbGxOYW1lcywgZmllbGROYW1lKTtcblxuICAgICAgICBpZiAocGFydG5lcklkeCA+IC0xKSB7XG4gICAgICAgICAgY29uc3QgdHJpbU5hbWUgPSBmaWVsZE5hbWUucmVwbGFjZShyZSwgJycpLnRyaW0oKTtcblxuICAgICAgICAgIGNhcnJ5LnB1c2goe1xuICAgICAgICAgICAgZGVmYXVsdE5hbWU6IHRyaW1OYW1lIHx8ICdwb2ludCcsXG4gICAgICAgICAgICBwYWlyOiB7XG4gICAgICAgICAgICAgIGxhdDoge1xuICAgICAgICAgICAgICAgIGZpZWxkSWR4OiBpZHgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkc1tpZHhdLm5hbWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbG5nOiB7XG4gICAgICAgICAgICAgICAgZmllbGRJZHg6IHBhcnRuZXJJZHgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkc1twYXJ0bmVySWR4XS5uYW1lXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC4uLihhbHRJZHggPiAtMVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBhbHRpdHVkZToge1xuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkSWR4OiBhbHRJZHgsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkc1thbHRJZHhdLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3VmZml4OiBzdWZmaXhQYWlyXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGNhcnJ5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYXJyeTtcbiAgfSwgYWNjKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFzZXRcbiAqIEBwYXJhbSBjb2x1bW5cbiAqIEBwYXJhbSBtb2RlXG4gKiBAdHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydERhdGFzZXRCeUNvbHVtbihcbiAgZGF0YXNldDogS2VwbGVyVGFibGU8RmllbGQ+LFxuICBjb2x1bW46IHN0cmluZyxcbiAgbW9kZT86IHN0cmluZ1xuKTogS2VwbGVyVGFibGU8RmllbGQ+IHtcbiAgY29uc3Qge2FsbEluZGV4ZXMsIGZpZWxkcywgZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0O1xuICBjb25zdCBmaWVsZEluZGV4ID0gZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cblxuICBjb25zdCBzb3J0QnkgPSBTT1JUX09SREVSW21vZGUgfHwgJyddIHx8IFNPUlRfT1JERVIuQVNDRU5ESU5HO1xuXG4gIGlmIChzb3J0QnkgPT09IFNPUlRfT1JERVIuVU5TT1JUKSB7XG4gICAgZGF0YXNldC5zb3J0Q29sdW1uID0ge307XG4gICAgZGF0YXNldC5zb3J0T3JkZXIgPSBudWxsO1xuXG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cblxuICBjb25zdCBzb3J0RnVuY3Rpb24gPSBzb3J0QnkgPT09IFNPUlRfT1JERVIuQVNDRU5ESU5HID8gYXNjZW5kaW5nIDogZGVzY2VuZGluZztcbiAgY29uc3Qgc29ydE9yZGVyID0gYWxsSW5kZXhlcy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCB2YWx1ZTEgPSBkYXRhQ29udGFpbmVyLnZhbHVlQXQoYSwgZmllbGRJbmRleCk7XG4gICAgY29uc3QgdmFsdWUyID0gZGF0YUNvbnRhaW5lci52YWx1ZUF0KGIsIGZpZWxkSW5kZXgpO1xuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlMSkgJiYgbm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlMikpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlMSkgJiYgIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZTIpKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBzb3J0RnVuY3Rpb24odmFsdWUxLCB2YWx1ZTIpO1xuICB9KTtcblxuICBkYXRhc2V0LnNvcnRDb2x1bW4gPSB7XG4gICAgW2NvbHVtbl06IHNvcnRCeVxuICB9O1xuICBkYXRhc2V0LnNvcnRPcmRlciA9IHNvcnRPcmRlcjtcblxuICByZXR1cm4gZGF0YXNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1ucyhkYXRhc2V0OiBLZXBsZXJUYWJsZTxGaWVsZD4sIGNvbHVtbjogc3RyaW5nKTogS2VwbGVyVGFibGU8RmllbGQ+IHtcbiAgY29uc3QgZmllbGQgPSBkYXRhc2V0LmdldENvbHVtbkZpZWxkKGNvbHVtbik7XG4gIGlmICghZmllbGQpIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuXG4gIGxldCBwaW5uZWRDb2x1bW5zO1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhc2V0LnBpbm5lZENvbHVtbnMpICYmIGRhdGFzZXQucGlubmVkQ29sdW1ucy5pbmNsdWRlcyhmaWVsZC5uYW1lKSkge1xuICAgIC8vIHVucGluIGl0XG4gICAgcGlubmVkQ29sdW1ucyA9IGRhdGFzZXQucGlubmVkQ29sdW1ucy5maWx0ZXIoY28gPT4gY28gIT09IGZpZWxkLm5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHBpbm5lZENvbHVtbnMgPSAoZGF0YXNldC5waW5uZWRDb2x1bW5zIHx8IFtdKS5jb25jYXQoZmllbGQubmFtZSk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge3Bpbm5lZENvbHVtbnN9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZShvcmlnaW5hbDogS2VwbGVyVGFibGU8RmllbGQ+KTogS2VwbGVyVGFibGU8RmllbGQ+IHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpKSwgb3JpZ2luYWwpO1xufVxuXG4vKipcbiAqIEB0eXBlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQW5kVXBkYXRlKFxuICBvcmlnaW5hbDogS2VwbGVyVGFibGU8RmllbGQ+LFxuICBvcHRpb25zOiBQYXJ0aWFsPEtlcGxlclRhYmxlPEZpZWxkPj4gPSB7fVxuKTogS2VwbGVyVGFibGU8RmllbGQ+IHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGFjY1tlbnRyeVswXV0gPSBlbnRyeVsxXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCBjb3B5VGFibGUob3JpZ2luYWwpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkVmFsdWVBY2Nlc3NvcjxcbiAgRiBleHRlbmRzIHtcbiAgICB0eXBlPzogRmllbGRbJ3R5cGUnXTtcbiAgICBmb3JtYXQ/OiBGaWVsZFsnZm9ybWF0J107XG4gIH1cbj4oZjogRiwgaTogbnVtYmVyLCBkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZSkge1xuICByZXR1cm4gbWF5YmVUb0RhdGUuYmluZChcbiAgICBudWxsLFxuICAgIC8vIGlzIHRpbWVcbiAgICBmLnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXAsXG4gICAgaSxcbiAgICBmLmZvcm1hdCB8fCAnJyxcbiAgICBkY1xuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBLZXBsZXJUYWJsZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxVQUFBLEdBQUFGLE9BQUE7QUFzQkEsSUFBQUcsZUFBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBb0JBLElBQUFLLFlBQUEsR0FBQUwsT0FBQTtBQUEyRSxTQUFBTSwyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEsS0FBQUosQ0FBQSxxQkFBQUUsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxNQUFBRSxDQUFBLEdBQUFLLDJCQUFBLENBQUFQLENBQUEsTUFBQUMsQ0FBQSxJQUFBRCxDQUFBLHVCQUFBQSxDQUFBLENBQUFRLE1BQUEsSUFBQU4sQ0FBQSxLQUFBRixDQUFBLEdBQUFFLENBQUEsT0FBQU8sRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFB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
|
|
648
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2QzQXJyYXkiLCJfY29uc3RhbnRzIiwiX2dwdUZpbHRlclV0aWxzIiwiX3V0aWxzIiwiX2NvbW1vblV0aWxzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiRklEX0tFWSIsIm1heWJlVG9EYXRlIiwiaXNUaW1lIiwiZmllbGRJZHgiLCJmb3JtYXQiLCJkYyIsImQiLCJ0aW1lVG9Vbml4TWlsbGkiLCJ2YWx1ZUF0IiwiaW5kZXgiLCJLZXBsZXJUYWJsZSIsIl9yZWYiLCJpbmZvIiwiY29sb3IiLCJtZXRhZGF0YSIsIl9yZWYkc3VwcG9ydGVkRmlsdGVyVCIsInN1cHBvcnRlZEZpbHRlclR5cGVzIiwiX3JlZiRkaXNhYmxlRGF0YU9wZXJhIiwiZGlzYWJsZURhdGFPcGVyYXRpb24iLCJfY2xhc3NDYWxsQ2hlY2syIiwiZGF0YXNldEluZm8iLCJpZCIsImdlbmVyYXRlSGFzaElkIiwibGFiZWwiLCJ0eXBlIiwiZGVmYXVsdE1ldGFkYXRhIiwiZGF0YUNvbnRhaW5lciIsImNyZWF0ZURhdGFDb250YWluZXIiLCJncHVGaWx0ZXIiLCJnZXRHcHVGaWx0ZXJQcm9wcyIsInVuZGVmaW5lZCIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJfaW1wb3J0RGF0YSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3JlZjIiLCJkYXRhIiwiZGF0YUNvbnRhaW5lckRhdGEiLCJpbnB1dERhdGFGb3JtYXQiLCJmaWVsZHMiLCJhbGxJbmRleGVzIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwiY29scyIsInJvd3MiLCJEYXRhRm9ybSIsIkNPTFNfQVJSQVkiLCJST1dTX0FSUkFZIiwiYXJyb3dUYWJsZSIsIm1hcCIsImkiLCJkaXNwbGF5TmFtZSIsImFuYWx5emVyVHlwZSIsIkFMTF9GSUVMRF9UWVBFUyIsInN0cmluZyIsInZhbHVlQWNjZXNzb3IiLCJnZXRGaWVsZFZhbHVlQWNjZXNzb3IiLCJnZXRQbGFpbkluZGV4IiwiZmlsdGVyZWRJbmRleCIsImZpbHRlcmVkSW5kZXhGb3JEb21haW4iLCJmaWVsZFBhaXJzIiwiZmluZFBvaW50RmllbGRQYWlycyIsInN0b3AiLCJpbXBvcnREYXRhIiwiX3giLCJfdXBkYXRlIiwiX2NhbGxlZTIiLCJfcmVmMyIsIl9kYXRhJGFycm93VGFibGUiLCJfdGhpcyRkYXRhQ29udGFpbmVyJHUiLCJfdGhpcyRkYXRhQ29udGFpbmVyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwidXBkYXRlIiwiYWJydXB0IiwiX3gyIiwiZ2V0IiwibnVtUm93cyIsImdldENvbHVtbkZpZWxkIiwiY29sdW1uTmFtZSIsImZpZWxkIiwiZmluZCIsImZkIiwiX2Fzc2V0RmllbGQiLCJnZXRDb2x1bW5GaWVsZElkeCIsImZpbmRJbmRleCIsIkJvb2xlYW4iLCJnZXRDb2x1bW5EaXNwbGF5Rm9ybWF0IiwiZGlzcGxheUZvcm1hdCIsImdldFZhbHVlIiwicm93SWR4IiwidXBkYXRlQ29sdW1uRmllbGQiLCJuZXdGaWVsZCIsImFzc2lnbiIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJ1cGRhdGVUYWJsZUNvbG9yIiwibmV3Q29sb3IiLCJnZXRDb2x1bW5GaWx0ZXJQcm9wcyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiZmlsdGVyUHJvcHMiLCJmaWVsZERvbWFpbiIsImdldENvbHVtbkZpbHRlckRvbWFpbiIsImdldEZpbHRlclByb3BzIiwiZmlsdGVyVGFibGUiLCJmaWx0ZXJzIiwibGF5ZXJzIiwib3B0IiwiX3RoaXMiLCJkYXRhSWQiLCJvbGRGaWx0ZXJSZWNvcmQiLCJmaWx0ZXJSZWNvcmQiLCJnZXRGaWx0ZXJSZWNvcmQiLCJjaGFuZ2VkRmlsdGVycyIsImRpZmZGaWx0ZXJzIiwic2hvdWxkQ2FsRG9tYWluIiwiZHluYW1pY0RvbWFpbiIsInNob3VsZENhbEluZGV4IiwiY3B1IiwiZmlsdGVyUmVzdWx0IiwiZHluYW1pY0RvbWFpbkZpbHRlcnMiLCJjcHVGaWx0ZXJzIiwiZmlsdGVyRnVuY3MiLCJyZWR1Y2UiLCJhY2MiLCJmaWVsZEluZGV4IiwiZ2V0RGF0YXNldEZpZWxkSW5kZXhGb3JGaWx0ZXIiLCJnZXRGaWx0ZXJGdW5jdGlvbiIsImZpbHRlckRhdGFCeUZpbHRlclR5cGVzIiwiZmlsdGVyVGFibGVDUFUiLCJjcHVPbmx5IiwiaWdub3JlRG9tYWluIiwiZmlsdGVyZWRJZHhDUFUiLCJmaWx0ZXJSZWNvcmRDUFUiLCJncHUiLCJjb3BpZWQiLCJjb3B5VGFibGUiLCJmaWx0ZXJlZCIsImRvbWFpbiIsInJlYWwiLCJpbnRlZ2VyIiwiZ2V0TnVtZXJpY0ZpZWxkRG9tYWluIiwiaDMiLCJkYXRlIiwiZ2V0T3JkaW5hbERvbWFpbiIsInRpbWVzdGFtcCIsImdldFRpbWVzdGFtcEZpZWxkRG9tYWluIiwiZ2V0Q29sdW1uTGF5ZXJEb21haW4iLCJzY2FsZVR5cGUiLCJTQ0FMRV9UWVBFUyIsIkNvbnNvbGUiLCJlcnJvciIsImNvbmNhdCIsImluZGV4VmFsdWVBY2Nlc3NvciIsInNvcnRGdW5jdGlvbiIsImdldFNvcnRpbmdGdW5jdGlvbiIsIm9yZGluYWwiLCJjdXN0b21PcmRpbmFsIiwicG9pbnQiLCJxdWFudGlsZSIsImdldFF1YW50aWxlRG9tYWluIiwibG9nIiwiZ2V0TG9nRG9tYWluIiwicXVhbnRpemUiLCJsaW5lYXIiLCJzcXJ0IiwiY3VzdG9tIiwiZ2V0TGluZWFyRG9tYWluIiwiZmllbGROYW1lIiwiY29uZGl0aW9uIiwic3BlY2lhbENoYXJhY3RlclNldCIsImZvdW5kTWF0Y2hpbmdGaWVsZHMiLCJyZSIsInN1ZmZpeFBhaXIiLCJhbGxOYW1lcyIsInBhcnRuZXJJZHgiLCJyZXBsYWNlIiwibWF0Y2giLCJhbHRJZHgiLCJBTFRJVFVERV9GSUVMRFMiLCJzb21lIiwiYWx0IiwidG9Mb3dlckNhc2UiLCJjYXJyeSIsImlkeCIsIl9pdGVyYXRvciIsIlRSSVBfUE9JTlRfRklFTERTIiwiX3N0ZXAiLCJSZWdFeHAiLCJfZm91bmRNYXRjaGluZ0ZpZWxkcyIsInRyaW1OYW1lIiwidHJpbSIsImRlZmF1bHROYW1lIiwicGFpciIsImxhdCIsImxuZyIsImFsdGl0dWRlIiwic3VmZml4IiwiZXJyIiwic29ydERhdGFzZXRCeUNvbHVtbiIsImRhdGFzZXQiLCJjb2x1bW4iLCJtb2RlIiwic29ydEJ5IiwiU09SVF9PUkRFUiIsIkFTQ0VORElORyIsIlVOU09SVCIsInNvcnRDb2x1bW4iLCJzb3J0T3JkZXIiLCJhc2NlbmRpbmciLCJkZXNjZW5kaW5nIiwic29ydCIsImIiLCJ2YWx1ZTEiLCJ2YWx1ZTIiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJwaW5UYWJsZUNvbHVtbnMiLCJwaW5uZWRDb2x1bW5zIiwiaW5jbHVkZXMiLCJjbyIsImNvcHlUYWJsZUFuZFVwZGF0ZSIsIm9yaWdpbmFsIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJvcHRpb25zIiwiZW50cmllcyIsImVudHJ5IiwiYmluZCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9rZXBsZXItdGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHthc2NlbmRpbmcsIGRlc2NlbmRpbmd9IGZyb20gJ2QzLWFycmF5JztcblxuaW1wb3J0IHtcbiAgVFJJUF9QT0lOVF9GSUVMRFMsXG4gIFNPUlRfT1JERVIsXG4gIEFMTF9GSUVMRF9UWVBFUyxcbiAgQUxUSVRVREVfRklFTERTLFxuICBTQ0FMRV9UWVBFU1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBSR0JDb2xvcixcbiAgRmllbGQsXG4gIEZpZWxkUGFpcixcbiAgRmllbGREb21haW4sXG4gIEZpbHRlcixcbiAgUHJvdG9EYXRhc2V0LFxuICBGaWx0ZXJSZWNvcmQsXG4gIEZpbHRlckRhdGFzZXRPcHQsXG4gIFJhbmdlRmllbGREb21haW4sXG4gIFNlbGVjdEZpZWxkRG9tYWluLFxuICBNdWx0aVNlbGVjdEZpZWxkRG9tYWluLFxuICBUaW1lUmFuZ2VGaWVsZERvbWFpblxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtnZXRHcHVGaWx0ZXJQcm9wcywgZ2V0RGF0YXNldEZpZWxkSW5kZXhGb3JGaWx0ZXJ9IGZyb20gJy4vZ3B1LWZpbHRlci11dGlscyc7XG5cbmltcG9ydCB7XG4gIGdldFNvcnRpbmdGdW5jdGlvbixcbiAgdGltZVRvVW5peE1pbGxpLFxuICBjcmVhdGVEYXRhQ29udGFpbmVyLFxuICBEYXRhRm9ybSxcbiAgZGlmZkZpbHRlcnMsXG4gIGZpbHRlckRhdGFCeUZpbHRlclR5cGVzLFxuICBGaWx0ZXJSZXN1bHQsXG4gIGdldEZpbHRlckZ1bmN0aW9uLFxuICBnZXRGaWx0ZXJQcm9wcyxcbiAgZ2V0RmlsdGVyUmVjb3JkLFxuICBnZXROdW1lcmljRmllbGREb21haW4sXG4gIGdldFRpbWVzdGFtcEZpZWxkRG9tYWluLFxuICBnZXRMaW5lYXJEb21haW4sXG4gIGdldExvZ0RvbWFpbixcbiAgZ2V0T3JkaW5hbERvbWFpbixcbiAgZ2V0UXVhbnRpbGVEb21haW4sXG4gIERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIEZpbHRlckNoYW5nZWRcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCBub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcblxuLy8gVE9ETyBpc29sYXRlIGxheWVyIHR5cGUsIGRlcGVuZHMgb24gQGtlcGxlci5nbC9sYXllcnNcbnR5cGUgTGF5ZXIgPSBhbnk7XG5cbmV4cG9ydCB0eXBlIEdwdUZpbHRlciA9IHtcbiAgZmlsdGVyUmFuZ2U6IG51bWJlcltdW107XG4gIGZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnM6IHtcbiAgICBbaWQ6IHN0cmluZ106IHtuYW1lOiBzdHJpbmc7IGRvbWFpbjA6IG51bWJlcn0gfCBudWxsO1xuICB9O1xuICBmaWx0ZXJWYWx1ZUFjY2Vzc29yOiAoXG4gICAgZGM6IERhdGFDb250YWluZXJJbnRlcmZhY2VcbiAgKSA9PiAoXG4gICAgZ2V0SW5kZXg/OiAoYW55KSA9PiBudW1iZXIsXG4gICAgZ2V0RGF0YT86IChkY186IERhdGFDb250YWluZXJJbnRlcmZhY2UsIGQ6IGFueSwgZmllbGRJbmRleDogbnVtYmVyKSA9PiBhbnlcbiAgKSA9PiAoZDogYW55LCBvYmplY3RJbmZvPzoge2luZGV4OiBudW1iZXJ9KSA9PiAobnVtYmVyIHwgbnVtYmVyW10pW107XG59O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJQcm9wcyA9XG4gIHwgTnVtZXJpY0ZpZWxkRmlsdGVyUHJvcHNcbiAgfCBCb29sZWFuRmllbGRGaWx0ZXJQcm9wc1xuICB8IFN0cmluZ0ZpZWxkRmlsdGVyUHJvcHNcbiAgfCBUaW1lRmllbGRGaWx0ZXJQcm9wcztcblxuZXhwb3J0IHR5cGUgTnVtZXJpY0ZpZWxkRmlsdGVyUHJvcHMgPSBSYW5nZUZpZWxkRG9tYWluICYge1xuICB2YWx1ZTogW251bWJlciwgbnVtYmVyXTtcbiAgdHlwZTogc3RyaW5nO1xuICB0eXBlT3B0aW9uczogc3RyaW5nW107XG4gIGdwdTogYm9vbGVhbjtcbiAgY29sdW1uU3RhdHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufTtcbmV4cG9ydCB0eXBlIEJvb2xlYW5GaWVsZEZpbHRlclByb3BzID0gU2VsZWN0RmllbGREb21haW4gJiB7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IGJvb2xlYW47XG4gIGdwdTogYm9vbGVhbjtcbiAgY29sdW1uU3RhdHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufTtcbmV4cG9ydCB0eXBlIFN0cmluZ0ZpZWxkRmlsdGVyUHJvcHMgPSBNdWx0aVNlbGVjdEZpZWxkRG9tYWluICYge1xuICB0eXBlOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmdbXTtcbiAgZ3B1OiBib29sZWFuO1xuICBjb2x1bW5TdGF0cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuZXhwb3J0IHR5cGUgVGltZUZpZWxkRmlsdGVyUHJvcHMgPSBUaW1lUmFuZ2VGaWVsZERvbWFpbiAmIHtcbiAgdHlwZTogc3RyaW5nO1xuICB2aWV3OiBGaWx0ZXJbJ3ZpZXcnXTtcbiAgZml4ZWREb21haW46IGJvb2xlYW47XG4gIHZhbHVlOiBudW1iZXJbXTtcbiAgZ3B1OiBib29sZWFuO1xuICBjb2x1bW5TdGF0cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuXG4vLyBVbmlxdWUgaWRlbnRpZmllciBvZiBlYWNoIGZpZWxkXG5jb25zdCBGSURfS0VZID0gJ25hbWUnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF5YmVUb0RhdGUoXG4gIGlzVGltZTogYm9vbGVhbixcbiAgZmllbGRJZHg6IG51bWJlcixcbiAgZm9ybWF0OiBzdHJpbmcsXG4gIGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICAvLyBBbiBvYmplY3Qgd2l0aCByb3cgaW5kZXggb3IgYSBtYXRlcmlhbGl6ZWQgcm93IGFycmF5IChmb3IgbWF0ZXJpYWxpemVkIGhvdmVyIGluZm8gZnJvbSB0cmlwIGxheWVyKVxuICBkOiB7aW5kZXg6IG51bWJlcn0gfCBhbnlbXVxuKSB7XG4gIGlmIChpc1RpbWUpIHtcbiAgICByZXR1cm4gdGltZVRvVW5peE1pbGxpKEFycmF5LmlzQXJyYXkoZCkgPyBkW2ZpZWxkSWR4XSA6IGRjLnZhbHVlQXQoZC5pbmRleCwgZmllbGRJZHgpLCBmb3JtYXQpO1xuICB9XG5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZCkgPyBkW2ZpZWxkSWR4XSA6IGRjLnZhbHVlQXQoZC5pbmRleCwgZmllbGRJZHgpO1xufVxuXG5jbGFzcyBLZXBsZXJUYWJsZTxGIGV4dGVuZHMgRmllbGQgPSBGaWVsZD4ge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIHR5cGU/OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGNvbG9yOiBSR0JDb2xvcjtcblxuICAvLyBmaWVsZHMgYW5kIGRhdGFcbiAgZmllbGRzOiBGW10gPSBbXTtcblxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlO1xuXG4gIGFsbEluZGV4ZXM6IG51bWJlcltdID0gW107XG4gIGZpbHRlcmVkSW5kZXg6IG51bWJlcltdID0gW107XG4gIGZpbHRlcmVkSWR4Q1BVPzogbnVtYmVyW107XG4gIGZpbHRlcmVkSW5kZXhGb3JEb21haW46IG51bWJlcltdID0gW107XG4gIGZpZWxkUGFpcnM6IEZpZWxkUGFpcltdID0gW107XG4gIGdwdUZpbHRlcjogR3B1RmlsdGVyO1xuICBmaWx0ZXJSZWNvcmQ/OiBGaWx0ZXJSZWNvcmQ7XG4gIGZpbHRlclJlY29yZENQVT86IEZpbHRlclJlY29yZDtcbiAgY2hhbmdlZEZpbHRlcnM/OiBGaWx0ZXJDaGFuZ2VkO1xuXG4gIC8vIHRhYmxlLWluamVjdGVkIG1ldGFkYXRhXG4gIHNvcnRDb2x1bW4/OiB7XG4gICAgLy8gY29sdW1uIG5hbWU6IHNvcnRlZCBpZHhcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7IC8vIEFTQ0VORElORyB8IERFU0NFTkRJTkcgfCBVTlNPUlRcbiAgfTtcbiAgc29ydE9yZGVyPzogbnVtYmVyW10gfCBudWxsO1xuXG4gIHBpbm5lZENvbHVtbnM/OiBzdHJpbmdbXTtcbiAgc3VwcG9ydGVkRmlsdGVyVHlwZXM/OiBzdHJpbmdbXSB8IG51bGw7XG4gIGRpc2FibGVEYXRhT3BlcmF0aW9uPzogYm9vbGVhbjtcblxuICAvLyB0YWJsZS1pbmplY3RlZCBtZXRhZGF0YVxuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICBnZXRGaWxlUHJvY2Vzc29yPzogKGRhdGE6IGFueSwgaW5wdXRGb3JtYXQ/OiBzdHJpbmcpID0+IHtkYXRhOiBhbnk7IGZvcm1hdDogc3RyaW5nfTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgaW5mbyxcbiAgICBjb2xvcixcbiAgICBtZXRhZGF0YSxcbiAgICBzdXBwb3J0ZWRGaWx0ZXJUeXBlcyA9IG51bGwsXG4gICAgZGlzYWJsZURhdGFPcGVyYXRpb24gPSBmYWxzZVxuICB9OiB7XG4gICAgaW5mbz86IFByb3RvRGF0YXNldFsnaW5mbyddO1xuICAgIGNvbG9yOiBSR0JDb2xvcjtcbiAgICBtZXRhZGF0YT86IFByb3RvRGF0YXNldFsnbWV0YWRhdGEnXTtcbiAgICBzdXBwb3J0ZWRGaWx0ZXJUeXBlcz86IFByb3RvRGF0YXNldFsnc3VwcG9ydGVkRmlsdGVyVHlwZXMnXTtcbiAgICBkaXNhYmxlRGF0YU9wZXJhdGlvbj86IFByb3RvRGF0YXNldFsnZGlzYWJsZURhdGFPcGVyYXRpb24nXTtcbiAgfSkge1xuICAgIC8vIFRPRE8gLSB3aGF0IHRvIGRvIGlmIHZhbGlkYXRpb24gZmFpbHM/IENhbiBrZXBsZXIgaGFuZGxlIGV4Y2VwdGlvbnM/XG4gICAgLy8gY29uc3QgdmFsaWRhdGVkRGF0YSA9IHZhbGlkYXRlSW5wdXREYXRhKGRhdGEpO1xuICAgIC8vIGlmICghdmFsaWRhdGVkRGF0YSkge1xuICAgIC8vICAgcmV0dXJuIHRoaXM7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgZGF0YXNldEluZm8gPSB7XG4gICAgICBpZDogZ2VuZXJhdGVIYXNoSWQoNCksXG4gICAgICBsYWJlbDogJ25ldyBkYXRhc2V0JyxcbiAgICAgIHR5cGU6ICcnLFxuICAgICAgLi4uaW5mb1xuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TWV0YWRhdGEgPSB7XG4gICAgICBpZDogZGF0YXNldEluZm8uaWQsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBmb3JtYXQ6IGRhdGFzZXRJbmZvLmZvcm1hdCB8fCAnJyxcbiAgICAgIGxhYmVsOiBkYXRhc2V0SW5mby5sYWJlbCB8fCAnJ1xuICAgIH07XG5cbiAgICB0aGlzLmlkID0gZGF0YXNldEluZm8uaWQ7XG4gICAgdGhpcy50eXBlID0gZGF0YXNldEluZm8udHlwZTtcbiAgICB0aGlzLmxhYmVsID0gZGF0YXNldEluZm8ubGFiZWw7XG4gICAgdGhpcy5jb2xvciA9IGNvbG9yO1xuICAgIHRoaXMubWV0YWRhdGEgPSB7XG4gICAgICAuLi5kZWZhdWx0TWV0YWRhdGEsXG4gICAgICAuLi5tZXRhZGF0YVxuICAgIH07XG5cbiAgICB0aGlzLnN1cHBvcnRlZEZpbHRlclR5cGVzID0gc3VwcG9ydGVkRmlsdGVyVHlwZXM7XG4gICAgdGhpcy5kaXNhYmxlRGF0YU9wZXJhdGlvbiA9IGRpc2FibGVEYXRhT3BlcmF0aW9uO1xuXG4gICAgdGhpcy5kYXRhQ29udGFpbmVyID0gY3JlYXRlRGF0YUNvbnRhaW5lcihbXSk7XG4gICAgdGhpcy5ncHVGaWx0ZXIgPSBnZXRHcHVGaWx0ZXJQcm9wcyhbXSwgdGhpcy5pZCwgW10sIHVuZGVmaW5lZCk7XG4gIH1cblxuICBhc3luYyBpbXBvcnREYXRhKHtkYXRhfToge2RhdGE6IFByb3RvRGF0YXNldFsnZGF0YSddfSkge1xuICAgIGNvbnN0IGRhdGFDb250YWluZXJEYXRhID0gZGF0YS5jb2xzID8gZGF0YS5jb2xzIDogZGF0YS5yb3dzO1xuICAgIGNvbnN0IGlucHV0RGF0YUZvcm1hdCA9IGRhdGEuY29scyA/IERhdGFGb3JtLkNPTFNfQVJSQVkgOiBEYXRhRm9ybS5ST1dTX0FSUkFZO1xuXG4gICAgY29uc3QgZGF0YUNvbnRhaW5lciA9IGNyZWF0ZURhdGFDb250YWluZXIoZGF0YUNvbnRhaW5lckRhdGEsIHtcbiAgICAgIGZpZWxkczogZGF0YS5maWVsZHMsXG4gICAgICBhcnJvd1RhYmxlOiBkYXRhLmFycm93VGFibGUsXG4gICAgICBpbnB1dERhdGFGb3JtYXRcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpZWxkczogRmllbGRbXSA9IGRhdGEuZmllbGRzLm1hcCgoZiwgaSkgPT4gKHtcbiAgICAgIC4uLmYsXG4gICAgICBmaWVsZElkeDogaSxcbiAgICAgIGlkOiBmLm5hbWUsXG4gICAgICBkaXNwbGF5TmFtZTogZi5kaXNwbGF5TmFtZSB8fCBmLm5hbWUsXG4gICAgICBhbmFseXplclR5cGU6IGYuYW5hbHl6ZXJUeXBlIHx8IEFMTF9GSUVMRF9UWVBFUy5zdHJpbmcsXG4gICAgICBmb3JtYXQ6IGYuZm9ybWF0IHx8ICcnLFxuICAgICAgdmFsdWVBY2Nlc3NvcjogZ2V0RmllbGRWYWx1ZUFjY2Vzc29yKGYsIGksIGRhdGFDb250YWluZXIpXG4gICAgfSkpO1xuXG4gICAgY29uc3QgYWxsSW5kZXhlcyA9IGRhdGFDb250YWluZXIuZ2V0UGxhaW5JbmRleCgpO1xuICAgIHRoaXMuZGF0YUNvbnRhaW5lciA9IGRhdGFDb250YWluZXI7XG4gICAgdGhpcy5hbGxJbmRleGVzID0gYWxsSW5kZXhlcztcbiAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSBhbGxJbmRleGVzO1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9IGFsbEluZGV4ZXM7XG4gICAgdGhpcy5maWVsZFBhaXJzID0gZmluZFBvaW50RmllbGRQYWlycyhmaWVsZHMpO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTWFrZSBzdXJlIHRoYXQgZmllbGRzIHNhdGlzZmllcyBGIGV4dGVuZHMgRmllbGRcbiAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcbiAgICB0aGlzLmdwdUZpbHRlciA9IGdldEdwdUZpbHRlclByb3BzKFtdLCB0aGlzLmlkLCBmaWVsZHMsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlIHRhYmxlIHdpdGggbmV3IGRhdGFcbiAgICogQHBhcmFtIGRhdGEgLSBuZXcgZGF0YSBlLmcuIHRoZSBhcnJvdyBkYXRhIHdpdGggbmV3IGJhdGNoZXMgbG9hZGVkXG4gICAqL1xuICBhc3luYyB1cGRhdGUoZGF0YTogUHJvdG9EYXRhc2V0WydkYXRhJ10pIHtcbiAgICBjb25zdCBkYXRhQ29udGFpbmVyRGF0YSA9IGRhdGEuYXJyb3dUYWJsZSA/PyBkYXRhLmNvbHMgPz8gZGF0YS5yb3dzO1xuICAgIHRoaXMuZGF0YUNvbnRhaW5lci51cGRhdGU/LihkYXRhQ29udGFpbmVyRGF0YSk7XG4gICAgdGhpcy5hbGxJbmRleGVzID0gdGhpcy5kYXRhQ29udGFpbmVyLmdldFBsYWluSW5kZXgoKTtcbiAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSB0aGlzLmFsbEluZGV4ZXM7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4Rm9yRG9tYWluID0gdGhpcy5hbGxJbmRleGVzO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFDb250YWluZXIubnVtUm93cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWVsZFxuICAgKiBAcGFyYW0gY29sdW1uTmFtZVxuICAgKi9cbiAgZ2V0Q29sdW1uRmllbGQoY29sdW1uTmFtZTogc3RyaW5nKTogRiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGZkID0+IGZkW0ZJRF9LRVldID09PSBjb2x1bW5OYW1lKTtcbiAgICB0aGlzLl9hc3NldEZpZWxkKGNvbHVtbk5hbWUsIGZpZWxkKTtcbiAgICByZXR1cm4gZmllbGQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZpZWxkSWR4XG4gICAqIEBwYXJhbSBjb2x1bW5OYW1lXG4gICAqL1xuICBnZXRDb2x1bW5GaWVsZElkeChjb2x1bW5OYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gdGhpcy5maWVsZHMuZmluZEluZGV4KGZkID0+IGZkW0ZJRF9LRVldID09PSBjb2x1bW5OYW1lKTtcbiAgICB0aGlzLl9hc3NldEZpZWxkKGNvbHVtbk5hbWUsIEJvb2xlYW4oZmllbGRJZHggPiAtMSkpO1xuICAgIHJldHVybiBmaWVsZElkeDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGlzcGxheUZvcm1hdFxuICAgKiBAcGFyYW0gY29sdW1uTmFtZVxuICAgKi9cbiAgZ2V0Q29sdW1uRGlzcGxheUZvcm1hdChjb2x1bW5OYW1lKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGZkID0+IGZkW0ZJRF9LRVldID09PSBjb2x1bW5OYW1lKTtcbiAgICB0aGlzLl9hc3NldEZpZWxkKGNvbHVtbk5hbWUsIGZpZWxkKTtcbiAgICByZXR1cm4gZmllbGQ/LmRpc3BsYXlGb3JtYXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiBhIGNlbGxcbiAgICovXG4gIGdldFZhbHVlKGNvbHVtbk5hbWU6IHN0cmluZywgcm93SWR4OiBudW1iZXIpOiBhbnkge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRDb2x1bW5GaWVsZChjb2x1bW5OYW1lKTtcbiAgICByZXR1cm4gZmllbGQgPyBmaWVsZC52YWx1ZUFjY2Vzc29yKHtpbmRleDogcm93SWR4fSkgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgZXhpc3RpbmcgZmllbGQgd2l0aCBhIG5ldyBvYmplY3RcbiAgICogQHBhcmFtIGZpZWxkSWR4XG4gICAqIEBwYXJhbSBuZXdGaWVsZFxuICAgKi9cbiAgdXBkYXRlQ29sdW1uRmllbGQoZmllbGRJZHg6IG51bWJlciwgbmV3RmllbGQ6IEYpOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkcyA9IE9iamVjdC5hc3NpZ24oWy4uLnRoaXMuZmllbGRzXSwge1tmaWVsZElkeF06IG5ld0ZpZWxkfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGRhdGFzZXQgY29sb3IgYnkgY3VzdG9tIGNvbG9yXG4gICAqIEBwYXJhbSBuZXdDb2xvclxuICAgKi9cbiAgdXBkYXRlVGFibGVDb2xvcihuZXdDb2xvcjogUkdCQ29sb3IpOiB2b2lkIHtcbiAgICB0aGlzLmNvbG9yID0gbmV3Q29sb3I7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBmaWx0ZXJQcm9wcyB0byBmaWVsZCBhbmQgcmV0cmlldmUgaXRcbiAgICogQHBhcmFtIGNvbHVtbk5hbWVcbiAgICovXG4gIGdldENvbHVtbkZpbHRlclByb3BzKGNvbHVtbk5hbWU6IHN0cmluZyk6IEZbJ2ZpbHRlclByb3BzJ10gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBmaWVsZElkeCA9IHRoaXMuZ2V0Q29sdW1uRmllbGRJZHgoY29sdW1uTmFtZSk7XG4gICAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHNbZmllbGRJZHhdO1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZmllbGQsICdmaWx0ZXJQcm9wcycpKSB7XG4gICAgICByZXR1cm4gZmllbGQuZmlsdGVyUHJvcHM7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGREb21haW4gPSB0aGlzLmdldENvbHVtbkZpbHRlckRvbWFpbihmaWVsZCk7XG4gICAgaWYgKCFmaWVsZERvbWFpbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyUHJvcHMgPSBnZXRGaWx0ZXJQcm9wcyhmaWVsZCwgZmllbGREb21haW4pO1xuICAgIGNvbnN0IG5ld0ZpZWxkID0ge1xuICAgICAgLi4uZmllbGQsXG4gICAgICBmaWx0ZXJQcm9wc1xuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbkZpZWxkKGZpZWxkSWR4LCBuZXdGaWVsZCk7XG5cbiAgICByZXR1cm4gZmlsdGVyUHJvcHM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgZmlsdGVycyB0byBkYXRhc2V0LCByZXR1cm4gdGhlIGZpbHRlcmVkIGRhdGFzZXQgd2l0aCB1cGRhdGVkIGBncHVGaWx0ZXJgLCBgZmlsdGVyUmVjb3JkYCwgYGZpbHRlcmVkSW5kZXhgLCBgZmlsdGVyZWRJbmRleEZvckRvbWFpbmBcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogQHBhcmFtIGxheWVyc1xuICAgKiBAcGFyYW0gb3B0XG4gICAqL1xuICBmaWx0ZXJUYWJsZShmaWx0ZXJzOiBGaWx0ZXJbXSwgbGF5ZXJzOiBMYXllcltdLCBvcHQ/OiBGaWx0ZXJEYXRhc2V0T3B0KTogS2VwbGVyVGFibGU8RmllbGQ+IHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lciwgaWQ6IGRhdGFJZCwgZmlsdGVyUmVjb3JkOiBvbGRGaWx0ZXJSZWNvcmQsIGZpZWxkc30gPSB0aGlzO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gZmlsdGVyc1xuICAgIGNvbnN0IGZpbHRlclJlY29yZCA9IGdldEZpbHRlclJlY29yZChkYXRhSWQsIGZpbHRlcnMsIG9wdCB8fCB7fSk7XG5cbiAgICB0aGlzLmZpbHRlclJlY29yZCA9IGZpbHRlclJlY29yZDtcbiAgICB0aGlzLmdwdUZpbHRlciA9IGdldEdwdUZpbHRlclByb3BzKGZpbHRlcnMsIGRhdGFJZCwgZmllbGRzLCB0aGlzLmdwdUZpbHRlcik7XG5cbiAgICB0aGlzLmNoYW5nZWRGaWx0ZXJzID0gZGlmZkZpbHRlcnMoZmlsdGVyUmVjb3JkLCBvbGRGaWx0ZXJSZWNvcmQpO1xuXG4gICAgaWYgKCFmaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZEluZGV4ID0gdGhpcy5hbGxJbmRleGVzO1xuICAgICAgdGhpcy5maWx0ZXJlZEluZGV4Rm9yRG9tYWluID0gdGhpcy5hbGxJbmRleGVzO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gZ2VuZXJhdGUgMiBzZXRzIG9mIGZpbHRlciByZXN1bHRcbiAgICAvLyBmaWx0ZXJlZEluZGV4IHVzZWQgdG8gY2FsY3VsYXRlIGxheWVyIGRhdGFcbiAgICAvLyBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIHVzZWQgdG8gY2FsY3VsYXRlIGxheWVyIERvbWFpblxuICAgIGNvbnN0IHNob3VsZENhbERvbWFpbiA9IEJvb2xlYW4odGhpcy5jaGFuZ2VkRmlsdGVycy5keW5hbWljRG9tYWluKTtcbiAgICBjb25zdCBzaG91bGRDYWxJbmRleCA9IEJvb2xlYW4odGhpcy5jaGFuZ2VkRmlsdGVycy5jcHUpO1xuXG4gICAgbGV0IGZpbHRlclJlc3VsdDogRmlsdGVyUmVzdWx0ID0ge307XG4gICAgaWYgKHNob3VsZENhbERvbWFpbiB8fCBzaG91bGRDYWxJbmRleCkge1xuICAgICAgY29uc3QgZHluYW1pY0RvbWFpbkZpbHRlcnMgPSBzaG91bGRDYWxEb21haW4gPyBmaWx0ZXJSZWNvcmQuZHluYW1pY0RvbWFpbiA6IG51bGw7XG4gICAgICBjb25zdCBjcHVGaWx0ZXJzID0gc2hvdWxkQ2FsSW5kZXggPyBmaWx0ZXJSZWNvcmQuY3B1IDogbnVsbDtcblxuICAgICAgY29uc3QgZmlsdGVyRnVuY3MgPSBmaWx0ZXJzLnJlZHVjZSgoYWNjLCBmaWx0ZXIpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRJbmRleCA9IGdldERhdGFzZXRGaWVsZEluZGV4Rm9yRmlsdGVyKHRoaXMuaWQsIGZpbHRlcik7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRJbmRleCAhPT0gLTEgPyBmaWVsZHNbZmllbGRJbmRleF0gOiBudWxsO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgIFtmaWx0ZXIuaWRdOiBnZXRGaWx0ZXJGdW5jdGlvbihmaWVsZCwgdGhpcy5pZCwgZmlsdGVyLCBsYXllcnMsIGRhdGFDb250YWluZXIpXG4gICAgICAgIH07XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIGZpbHRlclJlc3VsdCA9IGZpbHRlckRhdGFCeUZpbHRlclR5cGVzKFxuICAgICAgICB7ZHluYW1pY0RvbWFpbkZpbHRlcnMsIGNwdUZpbHRlcnMsIGZpbHRlckZ1bmNzfSxcbiAgICAgICAgZGF0YUNvbnRhaW5lclxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSBmaWx0ZXJSZXN1bHQuZmlsdGVyZWRJbmRleCB8fCB0aGlzLmZpbHRlcmVkSW5kZXg7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4Rm9yRG9tYWluID1cbiAgICAgIGZpbHRlclJlc3VsdC5maWx0ZXJlZEluZGV4Rm9yRG9tYWluIHx8IHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbjtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGZpbHRlcnMgdG8gYSBkYXRhc2V0IGFsbCBvbiBDUFUsIGFzc2lnbiB0byBgZmlsdGVyZWRJZHhDUFVgLCBgZmlsdGVyUmVjb3JkQ1BVYFxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKiBAcGFyYW0gbGF5ZXJzXG4gICAqL1xuICBmaWx0ZXJUYWJsZUNQVShmaWx0ZXJzOiBGaWx0ZXJbXSwgbGF5ZXJzOiBMYXllcltdKTogS2VwbGVyVGFibGU8RmllbGQ+IHtcbiAgICBjb25zdCBvcHQgPSB7XG4gICAgICBjcHVPbmx5OiB0cnVlLFxuICAgICAgaWdub3JlRG9tYWluOiB0cnVlXG4gICAgfTtcblxuICAgIC8vIG5vIGZpbHRlclxuICAgIGlmICghZmlsdGVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJZHhDUFUgPSB0aGlzLmFsbEluZGV4ZXM7XG4gICAgICB0aGlzLmZpbHRlclJlY29yZENQVSA9IGdldEZpbHRlclJlY29yZCh0aGlzLmlkLCBmaWx0ZXJzLCBvcHQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm8gZ3B1IGZpbHRlclxuICAgIGlmICghZmlsdGVycy5maW5kKGYgPT4gZi5ncHUpKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSWR4Q1BVID0gdGhpcy5maWx0ZXJlZEluZGV4O1xuICAgICAgdGhpcy5maWx0ZXJSZWNvcmRDUFUgPSBnZXRGaWx0ZXJSZWNvcmQodGhpcy5pZCwgZmlsdGVycywgb3B0KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIG1ha2UgYSBjb3B5IGZvciBjcHUgZmlsdGVyaW5nXG4gICAgY29uc3QgY29waWVkID0gY29weVRhYmxlKHRoaXMpO1xuXG4gICAgY29waWVkLmZpbHRlclJlY29yZCA9IHRoaXMuZmlsdGVyUmVjb3JkQ1BVO1xuICAgIGNvcGllZC5maWx0ZXJlZEluZGV4ID0gdGhpcy5maWx0ZXJlZElkeENQVSB8fCBbXTtcblxuICAgIGNvbnN0IGZpbHRlcmVkID0gY29waWVkLmZpbHRlclRhYmxlKGZpbHRlcnMsIGxheWVycywgb3B0KTtcblxuICAgIHRoaXMuZmlsdGVyZWRJZHhDUFUgPSBmaWx0ZXJlZC5maWx0ZXJlZEluZGV4O1xuICAgIHRoaXMuZmlsdGVyUmVjb3JkQ1BVID0gZmlsdGVyZWQuZmlsdGVyUmVjb3JkO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGZpZWxkIGRvbWFpbiBiYXNlZCBvbiBmaWVsZCB0eXBlIGFuZCBkYXRhXG4gICAqIGZvciBGaWx0ZXJcbiAgICovXG4gIGdldENvbHVtbkZpbHRlckRvbWFpbihmaWVsZDogRik6IEZpZWxkRG9tYWluIHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lcn0gPSB0aGlzO1xuICAgIGNvbnN0IHt2YWx1ZUFjY2Vzc29yfSA9IGZpZWxkO1xuXG4gICAgbGV0IGRvbWFpbjtcblxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBkb21haW4gYW5kIHN0ZXBcbiAgICAgICAgcmV0dXJuIGdldE51bWVyaWNGaWVsZERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMuYm9vbGVhbjpcbiAgICAgICAgcmV0dXJuIHtkb21haW46IFt0cnVlLCBmYWxzZV19O1xuXG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc6XG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5oMzpcbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgICAgIGRvbWFpbiA9IGdldE9yZGluYWxEb21haW4oZGF0YUNvbnRhaW5lciwgdmFsdWVBY2Nlc3Nvcik7XG4gICAgICAgIHJldHVybiB7ZG9tYWlufTtcblxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgICByZXR1cm4gZ2V0VGltZXN0YW1wRmllbGREb21haW4oZGF0YUNvbnRhaW5lciwgdmFsdWVBY2Nlc3Nvcik7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7ZG9tYWluOiBnZXRPcmRpbmFsRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIEdldCB0aGUgZG9tYWluIG9mIHRoaXMgY29sdW1uIGJhc2VkIG9uIHNjYWxlIHR5cGVcbiAgICovXG4gIGdldENvbHVtbkxheWVyRG9tYWluKGZpZWxkOiBGLCBzY2FsZVR5cGU6IHN0cmluZyk6IG51bWJlcltdIHwgc3RyaW5nW10gfCBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbCB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXhGb3JEb21haW59ID0gdGhpcztcblxuICAgIGlmICghU0NBTEVfVFlQRVNbc2NhbGVUeXBlXSkge1xuICAgICAgQ29uc29sZS5lcnJvcihgc2NhbGUgdHlwZSAke3NjYWxlVHlwZX0gbm90IHN1cHBvcnRlZGApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qge3ZhbHVlQWNjZXNzb3J9ID0gZmllbGQ7XG4gICAgY29uc3QgaW5kZXhWYWx1ZUFjY2Vzc29yID0gaSA9PiB2YWx1ZUFjY2Vzc29yKHtpbmRleDogaX0pO1xuICAgIGNvbnN0IHNvcnRGdW5jdGlvbiA9IGdldFNvcnRpbmdGdW5jdGlvbihmaWVsZC50eXBlKTtcblxuICAgIHN3aXRjaCAoc2NhbGVUeXBlKSB7XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLm9yZGluYWw6XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWw6XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLnBvaW50OlxuICAgICAgICAvLyBkbyBub3QgcmVjYWxjdWxhdGUgb3JkaW5hbCBkb21haW4gYmFzZWQgb24gZmlsdGVyZWQgZGF0YVxuICAgICAgICAvLyBkb24ndCBuZWVkIHRvIHVwZGF0ZSBvcmRpbmFsIGRvbWFpbiBldmVyeSB0aW1lXG4gICAgICAgIHJldHVybiBnZXRPcmRpbmFsRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpO1xuXG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLnF1YW50aWxlOlxuICAgICAgICByZXR1cm4gZ2V0UXVhbnRpbGVEb21haW4oZmlsdGVyZWRJbmRleEZvckRvbWFpbiwgaW5kZXhWYWx1ZUFjY2Vzc29yLCBzb3J0RnVuY3Rpb24pO1xuXG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLmxvZzpcbiAgICAgICAgcmV0dXJuIGdldExvZ0RvbWFpbihmaWx0ZXJlZEluZGV4Rm9yRG9tYWluLCBpbmRleFZhbHVlQWNjZXNzb3IpO1xuXG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLnF1YW50aXplOlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5saW5lYXI6XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLnNxcnQ6XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLmN1c3RvbTpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBnZXRMaW5lYXJEb21haW4oZmlsdGVyZWRJbmRleEZvckRvbWFpbiwgaW5kZXhWYWx1ZUFjY2Vzc29yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc2FtcGxlIG9mIHJvd3MgdG8gY2FsY3VsYXRlIGxheWVyIGJvdW5kYXJpZXNcbiAgICovXG4gIC8vIGdldFNhbXBsZURhdGEocm93cylcblxuICAvKipcbiAgICogUGFyc2UgY2VsbCB2YWx1ZSBiYXNlZCBvbiBjb2x1bW4gdHlwZSBhbmQgcmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIFZhbHVlIHRoZSBmaWVsZCB2YWx1ZSwgdHlwZSB0aGUgZmllbGQgdHlwZVxuICAgKi9cbiAgLy8gcGFyc2VGaWVsZFZhbHVlKHZhbHVlLCB0eXBlKVxuXG4gIC8vIHNvcnREYXRhc2V0QnlDb2x1bW4oKVxuXG4gIC8qKlxuICAgKiBBc3NlcnQgd2hldGhlciBmaWVsZCBleGlzdFxuICAgKiBAcGFyYW0gZmllbGROYW1lXG4gICAqIEBwYXJhbSBjb25kaXRpb25cbiAgICovXG4gIF9hc3NldEZpZWxkKGZpZWxkTmFtZTogc3RyaW5nLCBjb25kaXRpb246IGFueSk6IHZvaWQge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBDb25zb2xlLmVycm9yKGAke2ZpZWxkTmFtZX0gZG9lc250IGV4aXN0IGluIGRhdGFzZXQgJHt0aGlzLmlkfWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBEYXRhc2V0cyA9IHtcbiAgW2tleTogc3RyaW5nXTogS2VwbGVyVGFibGU8RmllbGQ+O1xufTtcblxuLy8gSEVMUEVSIEZVTkNUSU9OUyAoTUFJTkxZIEVYUE9SVEVEIEZPUiBURVNULi4uKVxuLy8gaGF2ZSB0byBkb3VibGUgZXhjYXBlXG5jb25zdCBzcGVjaWFsQ2hhcmFjdGVyU2V0ID0gYFsjXyZAXFxcXC5cXFxcLVxcXFwgXWA7XG5cbmZ1bmN0aW9uIGZvdW5kTWF0Y2hpbmdGaWVsZHMocmUsIHN1ZmZpeFBhaXIsIGFsbE5hbWVzLCBmaWVsZE5hbWUpIHtcbiAgY29uc3QgcGFydG5lcklkeCA9IGFsbE5hbWVzLmZpbmRJbmRleChcbiAgICBkID0+IGQgPT09IGZpZWxkTmFtZS5yZXBsYWNlKHJlLCBtYXRjaCA9PiBtYXRjaC5yZXBsYWNlKHN1ZmZpeFBhaXJbMF0sIHN1ZmZpeFBhaXJbMV0pKVxuICApO1xuICBsZXQgYWx0SWR4ID0gLTE7XG4gIGlmIChwYXJ0bmVySWR4ID4gLTEpIHtcbiAgICAvLyBpZiBmb3VuZCBwYXJ0bmVyLCBnbyBvbiBhbmQgbG9vayBmb3IgYWx0aXR1ZGVcbiAgICBBTFRJVFVERV9GSUVMRFMuc29tZShhbHQgPT4ge1xuICAgICAgYWx0SWR4ID0gYWxsTmFtZXMuZmluZEluZGV4KFxuICAgICAgICBkID0+IGQgPT09IGZpZWxkTmFtZS5yZXBsYWNlKHJlLCBtYXRjaCA9PiBtYXRjaC5yZXBsYWNlKHN1ZmZpeFBhaXJbMF0sIGFsdCkpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFsdElkeCA+IC0xO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB7cGFydG5lcklkeCwgYWx0SWR4fTtcbn1cbi8qKlxuICogRmluZCBwb2ludCBmaWVsZHMgcGFpcnMgZnJvbSBmaWVsZHNcbiAqXG4gKiBAcGFyYW0gZmllbGRzXG4gKiBAcmV0dXJucyBmb3VuZCBwb2ludCBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQb2ludEZpZWxkUGFpcnMoZmllbGRzOiBGaWVsZFtdKTogRmllbGRQYWlyW10ge1xuICBjb25zdCBhbGxOYW1lcyA9IGZpZWxkcy5tYXAoZiA9PiBmLm5hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgLy8gZ2V0IGxpc3Qgb2YgYWxsIGZpZWxkcyB3aXRoIG1hdGNoaW5nIHN1ZmZpeGVzXG4gIGNvbnN0IGFjYzogRmllbGRQYWlyW10gPSBbXTtcbiAgcmV0dXJuIGFsbE5hbWVzLnJlZHVjZSgoY2FycnksIGZpZWxkTmFtZSwgaWR4KSA9PiB7XG4gICAgLy8gVGhpcyBzZWFyY2ggZm9yIHBhaXJzIHdpbGwgZWFybHkgZXhpdCBpZiBmb3VuZC5cbiAgICBmb3IgKGNvbnN0IHN1ZmZpeFBhaXIgb2YgVFJJUF9QT0lOVF9GSUVMRFMpIHtcbiAgICAgIC8vIG1hdGNoIGZpcnN0IHN1ZmZpeFxuICAgICAgLy8gKF58WyNfJkBcXC5cXC1cXCBdKWxhdChbI18mQFxcLlxcLVxcIF18JClcbiAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgKF58JHtzcGVjaWFsQ2hhcmFjdGVyU2V0fSkke3N1ZmZpeFBhaXJbMF19KCR7c3BlY2lhbENoYXJhY3RlclNldH18JClgKTtcblxuICAgICAgaWYgKHJlLnRlc3QoZmllbGROYW1lKSkge1xuICAgICAgICBjb25zdCB7cGFydG5lcklkeCwgYWx0SWR4fSA9IGZvdW5kTWF0Y2hpbmdGaWVsZHMocmUsIHN1ZmZpeFBhaXIsIGFsbE5hbWVzLCBmaWVsZE5hbWUpO1xuXG4gICAgICAgIGlmIChwYXJ0bmVySWR4ID4gLTEpIHtcbiAgICAgICAgICBjb25zdCB0cmltTmFtZSA9IGZpZWxkTmFtZS5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xuXG4gICAgICAgICAgY2FycnkucHVzaCh7XG4gICAgICAgICAgICBkZWZhdWx0TmFtZTogdHJpbU5hbWUgfHwgJ3BvaW50JyxcbiAgICAgICAgICAgIHBhaXI6IHtcbiAgICAgICAgICAgICAgbGF0OiB7XG4gICAgICAgICAgICAgICAgZmllbGRJZHg6IGlkeCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGRzW2lkeF0ubmFtZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsbmc6IHtcbiAgICAgICAgICAgICAgICBmaWVsZElkeDogcGFydG5lcklkeCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGRzW3BhcnRuZXJJZHhdLm5hbWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLi4uKGFsdElkeCA+IC0xXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGFsdGl0dWRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGRJZHg6IGFsdElkeCxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGRzW2FsdElkeF0ubmFtZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWZmaXg6IHN1ZmZpeFBhaXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNhcnJ5O1xuICB9LCBhY2MpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHBhcmFtIGNvbHVtblxuICogQHBhcmFtIG1vZGVcbiAqIEB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0RGF0YXNldEJ5Q29sdW1uKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZTxGaWVsZD4sXG4gIGNvbHVtbjogc3RyaW5nLFxuICBtb2RlPzogc3RyaW5nXG4pOiBLZXBsZXJUYWJsZTxGaWVsZD4ge1xuICBjb25zdCB7YWxsSW5kZXhlcywgZmllbGRzLCBkYXRhQ29udGFpbmVyfSA9IGRhdGFzZXQ7XG4gIGNvbnN0IGZpZWxkSW5kZXggPSBmaWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJbmRleCA8IDApIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuXG4gIGNvbnN0IHNvcnRCeSA9IFNPUlRfT1JERVJbbW9kZSB8fCAnJ10gfHwgU09SVF9PUkRFUi5BU0NFTkRJTkc7XG5cbiAgaWYgKHNvcnRCeSA9PT0gU09SVF9PUkRFUi5VTlNPUlQpIHtcbiAgICBkYXRhc2V0LnNvcnRDb2x1bW4gPSB7fTtcbiAgICBkYXRhc2V0LnNvcnRPcmRlciA9IG51bGw7XG5cbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuXG4gIGNvbnN0IHNvcnRGdW5jdGlvbiA9IHNvcnRCeSA9PT0gU09SVF9PUkRFUi5BU0NFTkRJTkcgPyBhc2NlbmRpbmcgOiBkZXNjZW5kaW5nO1xuICBjb25zdCBzb3J0T3JkZXIgPSBhbGxJbmRleGVzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgIGNvbnN0IHZhbHVlMSA9IGRhdGFDb250YWluZXIudmFsdWVBdChhLCBmaWVsZEluZGV4KTtcbiAgICBjb25zdCB2YWx1ZTIgPSBkYXRhQ29udGFpbmVyLnZhbHVlQXQoYiwgZmllbGRJbmRleCk7XG4gICAgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQodmFsdWUxKSAmJiBub3ROdWxsb3JVbmRlZmluZWQodmFsdWUyKSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUxKSAmJiAhbm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlMikpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRGdW5jdGlvbih2YWx1ZTEsIHZhbHVlMik7XG4gIH0pO1xuXG4gIGRhdGFzZXQuc29ydENvbHVtbiA9IHtcbiAgICBbY29sdW1uXTogc29ydEJ5XG4gIH07XG4gIGRhdGFzZXQuc29ydE9yZGVyID0gc29ydE9yZGVyO1xuXG4gIHJldHVybiBkYXRhc2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQ6IEtlcGxlclRhYmxlPEZpZWxkPiwgY29sdW1uOiBzdHJpbmcpOiBLZXBsZXJUYWJsZTxGaWVsZD4ge1xuICBjb25zdCBmaWVsZCA9IGRhdGFzZXQuZ2V0Q29sdW1uRmllbGQoY29sdW1uKTtcbiAgaWYgKCFmaWVsZCkge1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG5cbiAgbGV0IHBpbm5lZENvbHVtbnM7XG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGFzZXQucGlubmVkQ29sdW1ucykgJiYgZGF0YXNldC5waW5uZWRDb2x1bW5zLmluY2x1ZGVzKGZpZWxkLm5hbWUpKSB7XG4gICAgLy8gdW5waW4gaXRcbiAgICBwaW5uZWRDb2x1bW5zID0gZGF0YXNldC5waW5uZWRDb2x1bW5zLmZpbHRlcihjbyA9PiBjbyAhPT0gZmllbGQubmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcGlubmVkQ29sdW1ucyA9IChkYXRhc2V0LnBpbm5lZENvbHVtbnMgfHwgW10pLmNvbmNhdChmaWVsZC5uYW1lKTtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7cGlubmVkQ29sdW1uc30pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlKG9yaWdpbmFsOiBLZXBsZXJUYWJsZTxGaWVsZD4pOiBLZXBsZXJUYWJsZTxGaWVsZD4ge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvcmlnaW5hbCkpLCBvcmlnaW5hbCk7XG59XG5cbi8qKlxuICogQHR5cGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5VGFibGVBbmRVcGRhdGUoXG4gIG9yaWdpbmFsOiBLZXBsZXJUYWJsZTxGaWVsZD4sXG4gIG9wdGlvbnM6IFBhcnRpYWw8S2VwbGVyVGFibGU8RmllbGQ+PiA9IHt9XG4pOiBLZXBsZXJUYWJsZTxGaWVsZD4ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMob3B0aW9ucykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgYWNjW2VudHJ5WzBdXSA9IGVudHJ5WzFdO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIGNvcHlUYWJsZShvcmlnaW5hbCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRWYWx1ZUFjY2Vzc29yPFxuICBGIGV4dGVuZHMge1xuICAgIHR5cGU/OiBGaWVsZFsndHlwZSddO1xuICAgIGZvcm1hdD86IEZpZWxkWydmb3JtYXQnXTtcbiAgfVxuPihmOiBGLCBpOiBudW1iZXIsIGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSB7XG4gIHJldHVybiBtYXliZVRvRGF0ZS5iaW5kKFxuICAgIG51bGwsXG4gICAgLy8gaXMgdGltZVxuICAgIGYudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcCxcbiAgICBpLFxuICAgIGYuZm9ybWF0IHx8ICcnLFxuICAgIGRjXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtlcGxlclRhYmxlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQXNCQSxJQUFBRyxlQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFvQkEsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQTJFLFNBQUFNLDJCQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLENBQUEsR0FBQUssMkJBQUEsQ0FBQVAsQ0FBQSxNQUFBQyxDQUFBLElBQUFELENBQUEsdUJBQUFBLENBQUEsQ0FBQVEsTUFBQSxJQUFBTixDQUFBLEtBQUFGLENBQUEsR0FBQUUsQ0FBQSxP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QUEsT0FBSUEsRUFBRSxLQUFLM0ksS0FBSyxDQUFDeEcsSUFBSTtJQUFBLEVBQUM7RUFDdkUsQ0FBQyxNQUFNO0lBQ0xpUCxhQUFhLEdBQUcsQ0FBQ2pCLE9BQU8sQ0FBQ2lCLGFBQWEsSUFBSSxFQUFFLEVBQUVqRSxNQUFNLENBQUN4RSxLQUFLLENBQUN4RyxJQUFJLENBQUM7RUFDbEU7O0VBRUE7RUFDQSxPQUFPb1Asa0JBQWtCLENBQUNwQixPQUFPLEVBQUU7SUFBQ2lCLGFBQWEsRUFBYkE7RUFBYSxDQUFDLENBQUM7QUFDckQ7QUFFTyxTQUFTakYsU0FBU0EsQ0FBQ3FGLFFBQTRCLEVBQXNCO0VBQzFFLE9BQU9qUCxNQUFNLENBQUNpSCxNQUFNLENBQUNqSCxNQUFNLENBQUNrUCxNQUFNLENBQUNsUCxNQUFNLENBQUNtUCxjQUFjLENBQUNGLFFBQVEsQ0FBQyxDQUFDLEVBQUVBLFFBQVEsQ0FBQztBQUNoRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNELGtCQUFrQkEsQ0FDaENDLFFBQTRCLEVBRVI7RUFBQSxJQURwQkcsT0FBb0MsR0FBQTNPLFNBQUEsQ0FBQS9CLE1BQUEsUUFBQStCLFNBQUEsUUFBQW9DLFNBQUEsR0FBQXBDLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFFekMsT0FBT1QsTUFBTSxDQUFDcVAsT0FBTyxDQUFDRCxPQUFPLENBQUMsQ0FBQ3JHLE1BQU0sQ0FBQyxVQUFDQyxHQUFHLEVBQUVzRyxLQUFLLEVBQUs7SUFDcER0RyxHQUFHLENBQUNzRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4QixPQUFPdEcsR0FBRztFQUNaLENBQUMsRUFBRVksU0FBUyxDQUFDcUYsUUFBUSxDQUFDLENBQUM7QUFDekI7QUFFTyxTQUFTcksscUJBQXFCQSxDQUtuQzNGLENBQUksRUFBRXFGLENBQVMsRUFBRWxELEVBQTBCLEVBQUU7RUFDN0MsT0FBT0osV0FBVyxDQUFDdU8sSUFBSSxDQUNyQixJQUFJO0VBQ0o7RUFDQXRRLENBQUMsQ0FBQ3NELElBQUksS0FBS2tDLDBCQUFlLENBQUM0RixTQUFTLEVBQ3BDL0YsQ0FBQyxFQUNEckYsQ0FBQyxDQUFDa0MsTUFBTSxJQUFJLEVBQUUsRUFDZEMsRUFDRixDQUFDO0FBQ0g7QUFBQyxJQUFBb08sUUFBQSxHQUFBQyxPQUFBLGNBRWNoTyxXQUFXIiwiaWdub3JlTGlzdCI6W119
|
package/src/table/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/table",
|
|
3
3
|
"author": "Shan He <shan@uber.com>",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.3",
|
|
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,10 +30,10 @@
|
|
|
30
30
|
"umd"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@kepler.gl/common-utils": "3.2.
|
|
34
|
-
"@kepler.gl/constants": "3.2.
|
|
35
|
-
"@kepler.gl/types": "3.2.
|
|
36
|
-
"@kepler.gl/utils": "3.2.
|
|
33
|
+
"@kepler.gl/common-utils": "3.2.3",
|
|
34
|
+
"@kepler.gl/constants": "3.2.3",
|
|
35
|
+
"@kepler.gl/types": "3.2.3",
|
|
36
|
+
"@kepler.gl/utils": "3.2.3",
|
|
37
37
|
"@loaders.gl/mvt": "^4.3.2",
|
|
38
38
|
"@loaders.gl/pmtiles": "^4.3.2",
|
|
39
39
|
"@types/d3-array": "^2.8.0",
|
|
@@ -241,7 +241,7 @@ class KeplerTable<F extends Field = Field> {
|
|
|
241
241
|
* @param data - new data e.g. the arrow data with new batches loaded
|
|
242
242
|
*/
|
|
243
243
|
async update(data: ProtoDataset['data']) {
|
|
244
|
-
const dataContainerData = data.
|
|
244
|
+
const dataContainerData = data.arrowTable ?? data.cols ?? data.rows;
|
|
245
245
|
this.dataContainer.update?.(dataContainerData);
|
|
246
246
|
this.allIndexes = this.dataContainer.getPlainIndex();
|
|
247
247
|
this.filteredIndex = this.allIndexes;
|
package/src/tasks/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/tasks",
|
|
3
3
|
"author": "Shan He <shan@uber.com>",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.3",
|
|
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,7 +30,7 @@
|
|
|
30
30
|
"umd"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@kepler.gl/processors": "3.2.
|
|
33
|
+
"@kepler.gl/processors": "3.2.3",
|
|
34
34
|
"react-palm": "^3.3.8"
|
|
35
35
|
},
|
|
36
36
|
"nyc": {
|
package/src/types/package.json
CHANGED
|
@@ -8,6 +8,43 @@ declare type ArrowDataContainerInput = {
|
|
|
8
8
|
fields?: ProtoDatasetField[];
|
|
9
9
|
arrowTable?: arrow.Table;
|
|
10
10
|
};
|
|
11
|
+
/**
|
|
12
|
+
* Check if table is an ArrowTable object.
|
|
13
|
+
*
|
|
14
|
+
* We use duck-typing instead of `instanceof arrow.Table` because DuckDB loads its own
|
|
15
|
+
* bundled version of Apache Arrow. When DuckDB creates Arrow tables, they are instances
|
|
16
|
+
* of DuckDB's Arrow.Table class, not the Arrow.Table class from our application's
|
|
17
|
+
* apache-arrow package. This causes `instanceof` checks to fail even though the objects
|
|
18
|
+
* are functionally equivalent Arrow tables.
|
|
19
|
+
*
|
|
20
|
+
* @param data - object to check
|
|
21
|
+
* @returns true if data is an ArrowTable object (type guarded)
|
|
22
|
+
*/
|
|
23
|
+
export declare function isArrowTable(data: any): data is arrow.Table;
|
|
24
|
+
/**
|
|
25
|
+
* Check if data is an ArrowVector object.
|
|
26
|
+
* Uses duck-typing instead of `instanceof` to handle DuckDB's bundled Arrow version.
|
|
27
|
+
*
|
|
28
|
+
* @param data - object to check
|
|
29
|
+
* @returns true if data is an ArrowVector object (type guarded)
|
|
30
|
+
*/
|
|
31
|
+
export declare function isArrowVector(data: any): data is arrow.Vector;
|
|
32
|
+
/**
|
|
33
|
+
* Check if data is an Arrow FixedSizeList DataType.
|
|
34
|
+
* Uses duck-typing instead of `instanceof` to handle DuckDB's bundled Arrow version.
|
|
35
|
+
*
|
|
36
|
+
* @param data - object to check
|
|
37
|
+
* @returns true if data is an Arrow FixedSizeList DataType (type guarded)
|
|
38
|
+
*/
|
|
39
|
+
export declare function isArrowFixedSizeList(data: any): data is arrow.FixedSizeList;
|
|
40
|
+
/**
|
|
41
|
+
* Check if data is an Arrow Struct DataType.
|
|
42
|
+
* Uses duck-typing instead of `instanceof` to handle DuckDB's bundled Arrow version.
|
|
43
|
+
*
|
|
44
|
+
* @param data - object to check
|
|
45
|
+
* @returns true if data is an Arrow Struct DataType (type guarded)
|
|
46
|
+
*/
|
|
47
|
+
export declare function isArrowStruct(data: any): data is arrow.Struct;
|
|
11
48
|
/**
|
|
12
49
|
* A data container where all data is stored in raw Arrow table
|
|
13
50
|
*/
|
|
@@ -26,7 +63,7 @@ export declare class ArrowDataContainer implements DataContainerInterface {
|
|
|
26
63
|
*/
|
|
27
64
|
private _createTable;
|
|
28
65
|
getTable(): arrow.Table<any>;
|
|
29
|
-
update(updateData: arrow.Vector<any>[]): void;
|
|
66
|
+
update(updateData: arrow.Vector<any>[] | arrow.Table): void;
|
|
30
67
|
numChunks(): number;
|
|
31
68
|
numRows(): number;
|
|
32
69
|
numColumns(): number;
|