kepler.gl 3.1.10 → 3.2.0
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/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/dist/modal-container.js +3 -3
- package/src/components/dist/modals/tilesets-modals/tileset-raster-form.js +38 -9
- package/src/components/dist/side-panel/layer-panel/raster-tile-layer-configurator.js +3 -3
- package/src/components/package.json +15 -15
- package/src/components/src/modal-container.tsx +6 -2
- package/src/components/src/modals/tilesets-modals/tileset-raster-form.tsx +60 -4
- package/src/components/src/side-panel/layer-panel/raster-tile-layer-configurator.tsx +2 -1
- package/src/constants/dist/default-settings.js +2 -2
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/56/48/71c2c5381c01c063c164e15fa04b4b1f3faae02e6727f2f2daf483e15205feca68334bad721af0c6f31abb20b56d60504623838127764aab6883912e7f71 +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/bf/88/ea60c7619185516464a4ae21f51394966047bfdf190a5463de651c61931c +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/umd/keplergl.min.js +1 -1
- package/src/deckgl-arrow-layers/package.json +2 -2
- package/src/deckgl-layers/package.json +4 -4
- package/src/duckdb/package.json +6 -6
- package/src/effects/package.json +5 -5
- package/src/layers/dist/raster-tile/gpu-utils.d.ts +11 -10
- package/src/layers/dist/raster-tile/gpu-utils.js +7 -6
- package/src/layers/dist/raster-tile/image.d.ts +4 -0
- package/src/layers/dist/raster-tile/image.js +30 -16
- package/src/layers/dist/raster-tile/raster-tile-layer.d.ts +4 -0
- package/src/layers/dist/raster-tile/raster-tile-layer.js +18 -6
- package/src/layers/dist/raster-tile/request-throttle.d.ts +1 -1
- package/src/layers/dist/raster-tile/request-throttle.js +17 -16
- package/src/layers/dist/raster-tile/types.d.ts +16 -0
- package/src/layers/dist/raster-tile/types.js +1 -1
- package/src/layers/dist/raster-tile/url.d.ts +1 -1
- package/src/layers/dist/raster-tile/url.js +5 -4
- package/src/layers/package.json +9 -9
- package/src/layers/src/raster-tile/gpu-utils.ts +96 -78
- package/src/layers/src/raster-tile/image.ts +35 -9
- package/src/layers/src/raster-tile/raster-tile-layer.ts +23 -5
- package/src/layers/src/raster-tile/request-throttle.ts +10 -5
- package/src/layers/src/raster-tile/types.ts +19 -1
- package/src/layers/src/raster-tile/url.ts +10 -3
- package/src/localization/package.json +1 -1
- package/src/processors/package.json +7 -7
- 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/21/4a/50f77069dbf70c6792dd82d4e149375a888e25ddddd3209e2db013be62091f79082291fa06eb518cccb111b09a778e2946c1fb7a27bb6e32f72da0ccf250 +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/c5/b6/9c4bdb089acc30ac8a16a6b9b93898757537f7017b2f725ddb832b4614d6 +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +1 -1
- package/src/table/dist/tileset/vector-tile-utils.js +9 -5
- package/src/table/package.json +5 -5
- package/src/table/src/tileset/vector-tile-utils.ts +9 -6
- package/src/tasks/package.json +2 -2
- package/src/types/package.json +1 -1
- package/src/utils/dist/application-config.js +5 -5
- package/src/utils/package.json +4 -4
- package/src/utils/src/application-config.ts +4 -6
- package/umd/keplergl.min.js +1150 -1130
|
@@ -52,14 +52,14 @@ var getNumRasterTilesBeingLoaded = exports.getNumRasterTilesBeingLoaded = functi
|
|
|
52
52
|
};
|
|
53
53
|
var LOAD_ELEVATION_AFTER_ZOOM = exports.LOAD_ELEVATION_AFTER_ZOOM = 8.9;
|
|
54
54
|
var getShouldLoadTerrain = function getShouldLoadTerrain(stac, mapState, visConfig) {
|
|
55
|
-
var _stac$rasterTileServe;
|
|
55
|
+
var _stac$rasterTileServe, _stac$rasterServerSup;
|
|
56
56
|
return Boolean(
|
|
57
57
|
// we need a raster tile server for elevations even when we user PMTiles
|
|
58
58
|
((_stac$rasterTileServe = stac.rasterTileServerUrls) === null || _stac$rasterTileServe === void 0 ? void 0 : _stac$rasterTileServe.length) > 0 &&
|
|
59
59
|
// check the switch from the layer configurator
|
|
60
60
|
visConfig.enableTerrain && (
|
|
61
61
|
// disabled in Top view by default
|
|
62
|
-
mapState.dragRotate || visConfig.enableTerrainTopView) && (0, _utils.getApplicationConfig)().rasterServerSupportsElevation);
|
|
62
|
+
mapState.dragRotate || visConfig.enableTerrainTopView) && ((_stac$rasterServerSup = stac.rasterServerSupportsElevation) !== null && _stac$rasterServerSup !== void 0 ? _stac$rasterServerSup : (0, _utils.getApplicationConfig)().rasterServerSupportsElevation));
|
|
63
63
|
};
|
|
64
64
|
var RasterTileLayer = exports["default"] = /*#__PURE__*/function (_KeplerLayer) {
|
|
65
65
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
@@ -564,7 +564,11 @@ var RasterTileLayer = exports["default"] = /*#__PURE__*/function (_KeplerLayer)
|
|
|
564
564
|
boundsForGeometry: [west, north, east, south],
|
|
565
565
|
index: props.index,
|
|
566
566
|
signal: props.signal,
|
|
567
|
-
rasterTileServerUrls: props.stac.rasterTileServerUrls || []
|
|
567
|
+
rasterTileServerUrls: props.stac.rasterTileServerUrls || [],
|
|
568
|
+
rasterServerMaxRetries: props.stac.rasterServerMaxRetries,
|
|
569
|
+
rasterServerRetryDelay: props.stac.rasterServerRetryDelay,
|
|
570
|
+
rasterServerServerErrorsToRetry: props.stac.rasterServerServerErrorsToRetry,
|
|
571
|
+
rasterServerMaxPerServerRequests: props.stac.rasterServerMaxPerServerRequests
|
|
568
572
|
});
|
|
569
573
|
case 11:
|
|
570
574
|
_context.t0 = _context.sent;
|
|
@@ -591,7 +595,11 @@ var RasterTileLayer = exports["default"] = /*#__PURE__*/function (_KeplerLayer)
|
|
|
591
595
|
boundsForGeometry: [west, north, east, south],
|
|
592
596
|
index: props.index,
|
|
593
597
|
signal: props.signal,
|
|
594
|
-
rasterTileServerUrls: props.stac.rasterTileServerUrls || []
|
|
598
|
+
rasterTileServerUrls: props.stac.rasterTileServerUrls || [],
|
|
599
|
+
rasterServerMaxRetries: props.stac.rasterServerMaxRetries,
|
|
600
|
+
rasterServerRetryDelay: props.stac.rasterServerRetryDelay,
|
|
601
|
+
rasterServerServerErrorsToRetry: props.stac.rasterServerServerErrorsToRetry,
|
|
602
|
+
rasterServerMaxPerServerRequests: props.stac.rasterServerMaxPerServerRequests
|
|
595
603
|
}) : null]);
|
|
596
604
|
case 18:
|
|
597
605
|
_yield$Promise$all = _context.sent;
|
|
@@ -664,7 +672,11 @@ var RasterTileLayer = exports["default"] = /*#__PURE__*/function (_KeplerLayer)
|
|
|
664
672
|
boundsForGeometry: [west, north, east, south],
|
|
665
673
|
index: props.index,
|
|
666
674
|
signal: props.signal,
|
|
667
|
-
rasterTileServerUrls: metadata.rasterTileServerUrls
|
|
675
|
+
rasterTileServerUrls: metadata.rasterTileServerUrls,
|
|
676
|
+
rasterServerMaxRetries: metadata.rasterServerMaxRetries,
|
|
677
|
+
rasterServerRetryDelay: metadata.rasterServerRetryDelay,
|
|
678
|
+
rasterServerServerErrorsToRetry: metadata.rasterServerServerErrorsToRetry,
|
|
679
|
+
rasterServerMaxPerServerRequests: metadata.rasterServerMaxPerServerRequests
|
|
668
680
|
});
|
|
669
681
|
case 13:
|
|
670
682
|
_context2.t0 = _context2.sent;
|
|
@@ -878,4 +890,4 @@ function getRasterLayerPMTiles(props) {
|
|
|
878
890
|
_imageCoordinateSystem: _typed.COORDINATE_SYSTEM.CARTESIAN
|
|
879
891
|
});
|
|
880
892
|
}
|
|
881
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX3R5cGVkMiIsIl9wbXRpbGVzIiwiX21lbW9pemUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3R5cGVkMyIsIl9jb25zdGFudHMiLCJfZGVja2dsTGF5ZXJzIiwiX2NvbW1vblV0aWxzIiwiX3V0aWxzIiwiX2NvbmZpZyIsIl9ncHVVdGlscyIsIl9pbWFnZSIsIl9yYXN0ZXJUaWxlSWNvbiIsIl9yYXN0ZXJUaWxlVXRpbHMiLCJfYmFzZUxheWVyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsImRldmljZVBpeGVsUmF0aW8iLCJNYXRoIiwibWluIiwid2luZG93IiwidGlsZXNCZWluZ0xvYWRlZCIsImdldE51bVJhc3RlclRpbGVzQmVpbmdMb2FkZWQiLCJleHBvcnRzIiwiTE9BRF9FTEVWQVRJT05fQUZURVJfWk9PTSIsImdldFNob3VsZExvYWRUZXJyYWluIiwic3RhYyIsIm1hcFN0YXRlIiwidmlzQ29uZmlnIiwiX3N0YWMkcmFzdGVyVGlsZVNlcnZlIiwicmFzdGVyVGlsZVNlcnZlclVybHMiLCJlbmFibGVUZXJyYWluIiwiZHJhZ1JvdGF0ZSIsImVuYWJsZVRlcnJhaW5Ub3BWaWV3IiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJyYXN0ZXJTZXJ2ZXJTdXBwb3J0c0VsZXZhdGlvbiIsIlJhc3RlclRpbGVMYXllciIsIl9LZXBsZXJMYXllciIsInByb3BzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiSW5maW5pdHkiLCJyZWdpc3RlclZpc0NvbmZpZyIsInJhc3RlclZpc0NvbmZpZ3MiLCJyZXNvbHZlciIsInByZXNldCIsInByZXNldE9wdGlvbnMiLCJfcHJlc2V0T3B0aW9ucyRzaW5nbGUiLCJfcHJlc2V0T3B0aW9ucyRzaW5nbGUyIiwiY29uY2F0IiwiaWQiLCJjb2xsZWN0aW9uIiwic2luZ2xlQmFuZCIsImFzc2V0SWQiLCJiYW5kSW5kZXgiLCJnZXREYXRhU291cmNlUGFyYW1zIiwibWVtb2l6ZSIsIm1ldGEiLCJ6UmFuZ2UiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImdldCIsIkxBWUVSX1RZUEVTIiwicmFzdGVyVGlsZSIsIlJhc3Rlckljb24iLCJEYXRhc2V0VHlwZSIsIlJBU1RFUl9USUxFIiwiY2F0ZWdvcmljYWxDb2xvckxlZ2VuZHMiLCJjb25maWciLCJjb2xvclJhbmdlIiwiY29sb3JMZWdlbmRzIiwiY29sb3IiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJjb2xvckZpZWxkIiwiYW5hbHl6ZXJUeXBlIiwiZm9ybWF0IiwidHlwZSIsImZpZWxkSWR4IiwidmFsdWVBY2Nlc3NvciIsImRpc3BsYXlOYW1lIiwiZ2V0SG92ZXJEYXRhIiwic2hvdWxkUmVuZGVyTGF5ZXIiLCJpc1Zpc2libGUiLCJmb3JtYXRMYXllckRhdGEiLCJkYXRhc2V0cyIsIm9sZExheWVyRGF0YSIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiZGF0YUlkIiwibm90TnVsbG9yVW5kZWZpbmVkIiwiZGF0YXNldCIsImRhdGFVcGRhdGVUcmlnZ2VycyIsImdldERhdGFVcGRhdGVUcmlnZ2VycyIsInRyaWdnZXJDaGFuZ2VkIiwiZ2V0Q2hhbmdlZFRyaWdnZXJzIiwiZ2V0TWV0YSIsInVwZGF0ZUxheWVyTWV0YSIsInRpbGVTb3VyY2UiLCJtZXRhZGF0YSIsInBtdGlsZXNUeXBlIiwiUE1UaWxlc1R5cGUiLCJSQVNURVIiLCJtZXRhZGF0YVVybCIsIl9yZWYiLCJvbGREYXRhc2V0Iiwib2xkVGlsZVNvdXJjZSIsImRhdGEiLCJQTVRpbGVzU291cmNlIiwiY3JlYXRlRGF0YVNvdXJjZSIsInVwZGF0ZU1ldGEiLCJib3VuZHMiLCJnZXRTVEFDQm91bmRzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1c2VTVEFDU2VhcmNoaW5nIiwiYXZhaWxhYmxlQmFuZHMiLCJnZXRFT0JhbmRzIiwic2luZ2xlQmFuZE5hbWUiLCJhdmFpbGFibGVQcmVzZXRzIiwiZmlsdGVyQXZhaWxhYmxlUHJlc2V0cyIsIlBSRVNFVF9PUFRJT05TIiwiaW5jbHVkZXMiLCJ2aXNDb25maWdTZXR0aW5ncyIsImRlZmF1bHRWYWx1ZSIsImNvbG9yRGVmYXVsdHMiLCJEQVRBX1NPVVJDRV9DT0xPUl9ERUZBVUxUUyIsIm9uVmlld3BvcnRMb2FkIiwidGlsZXMiLCJ1cGRhdGVNaW5NYXhQaXhlbFZhbHVlIiwibmV3WlJhbmdlIiwiY29tcHV0ZVpSYW5nZSIsIl9nZXRNaW5NYXhGcm9tVGlsZTJESCIsImdldE1pbk1heEZyb21UaWxlMkRIZWFkZXJzIiwiX2dldE1pbk1heEZyb21UaWxlMkRIMiIsIl9zbGljZWRUb0FycmF5MiIsIm1heCIsIm1pblZpZXdwb3J0UGl4ZWxWYWx1ZSIsIm1heFZpZXdwb3J0UGl4ZWxWYWx1ZSIsImdldE1pbk1heFBpeGVsVmFsdWVzIiwiaW1hZ2VzIiwibWluUGl4ZWxWYWx1ZSIsIm1heFBpeGVsVmFsdWUiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImltYWdlIiwiX2dldEltYWdlTWluTWF4IiwiZ2V0SW1hZ2VNaW5NYXgiLCJfZ2V0SW1hZ2VNaW5NYXgyIiwiZXJyIiwicmVuZGVyTGF5ZXIiLCJvcHRzIiwiX2RhdGEkZGF0YXNldCIsInJlbmRlclBNVGlsZXNMYXllciIsInJlbmRlclN0YWNMYXllciIsIl9kYXRhJGRhdGFzZXQyIiwiX3RoaXMyIiwiZXhwZXJpbWVudGFsQ29udGV4dCIsInN0YWNfdmVyc2lvbiIsIl90aGlzJGdldERlZmF1bHREZWNrTCIsImdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyIsIm9wYWNpdHkiLCJ2aXNpYmxlIiwiaGFzU2hhZG93RWZmZWN0IiwiY29sb3JtYXBJZCIsImxpbmVhclJlc2NhbGluZyIsImxpbmVhclJlc2NhbGluZ0ZhY3RvciIsIm5vbkxpbmVhclJlc2NhbGluZyIsImdhbW1hQ29udHJhc3RGYWN0b3IiLCJzaWdtb2lkYWxDb250cmFzdEZhY3RvciIsInNpZ21vaWRhbEJpYXNGYWN0b3IiLCJzYXR1cmF0aW9uVmFsdWUiLCJmaWx0ZXJFbmFibGVkIiwiZmlsdGVyUmFuZ2UiLCJzdGFjU2VhcmNoUHJvdmlkZXIiLCJzdGFydERhdGUiLCJlbmREYXRlIiwiX3N0YWNRdWVyeSIsImNhdGVnb3JpY2FsQ29sb3JNYXAiLCJjb2xvck1hcCIsImR5bmFtaWNDb2xvciIsInNob3VsZExvYWRUZXJyYWluIiwiRGF0ZSIsImJhbmRDb21iaW5hdGlvbiIsImdldFNpbmdsZUJhbmRQcmVzZXRPcHRpb25zIiwiZGF0YVNvdXJjZVBhcmFtcyIsIm1pblpvb20iLCJtYXhab29tIiwiZ2xvYmFsQm91bmRzIiwibG9hZEFzc2V0SWRzIiwibG9hZEJhbmRJbmRleGVzIiwicmVuZGVyQmFuZEluZGV4ZXMiLCJkYXRhVHlwZSIsImRzTWluUGl4ZWxWYWx1ZSIsImRzTWF4UGl4ZWxWYWx1ZSIsIm1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlIiwibWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWUiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImdldFRpbGVEYXRhQ3VzdG9tUHJvcHMiLCJ0aWxlTGF5ZXIiLCJUaWxlTGF5ZXIiLCJ0aWxlU2l6ZSIsImdldFRpbGVEYXRhIiwiYXJncyIsImJpbmQiLCJyZW5kZXJTdWJMYXllcnMiLCJyZW5kZXJTdWJMYXllcnNTdGFjIiwibWF4UmVxdWVzdHMiLCJnZXRNYXhSZXF1ZXN0cyIsInVwZGF0ZVRyaWdnZXJzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlZmluZW1lbnRTdHJhdGVneSIsImhhc0NhdGVnb3JpY2FsQ29sb3JNYXAiLCJfZGF0YSRkYXRhc2V0MyIsIl90aGlzMyIsIl90aGlzJGdldERlZmF1bHREZWNrTDIiLCJzaG93VGlsZUJvcmRlcnMiLCJnZXRUaWxlRGF0YVBNVGlsZXMiLCJwaWNrYWJsZSIsImF1dG9IaWdobGlnaHQiLCJ6b29tT2Zmc2V0IiwicmVuZGVyU3ViTGF5ZXJzUE1UaWxlcyIsIl9nZXRUaWxlRGF0YSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3Byb3BzJGJib3giLCJ3ZXN0Iiwic291dGgiLCJlYXN0Iiwibm9ydGgiLCJ6b29tIiwiYXNzZXRSZXF1ZXN0cyIsInRlcnJhaW4iLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwiX3RlcnJhaW4iLCJfdGhpcyRnZXRNaW5NYXhQaXhlbFYiLCJfdGhpcyRnZXRNaW5NYXhQaXhlbFYyIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwiYmJveCIsImluZGV4IiwieiIsImJib3hJbnRlcnNlY3RzIiwiYWJydXB0IiwiZ2V0U1RBQ0ltYWdlUmVxdWVzdHMiLCJzZW50IiwidDAiLCJsb2FkVGVycmFpbiIsImJvdW5kc0Zvckdlb21ldHJ5Iiwic2lnbmFsIiwiUHJvbWlzZSIsImFsbCIsImxvYWRJbWFnZXMiLCJtaW5WYWx1ZSIsIm1heFZhbHVlIiwiaW1hZ2VCYW5kcyIsInQxIiwic3RvcCIsIl94IiwiX2dldFRpbGVEYXRhUE1UaWxlcyIsIl9jYWxsZWUyIiwiX3Byb3BzJGJib3gyIiwiX3lpZWxkJFByb21pc2UkYWxsMyIsIl95aWVsZCRQcm9taXNlJGFsbDQiLCJfdGhpcyRnZXRNaW5NYXhQaXhlbFYzIiwiX3RoaXMkZ2V0TWluTWF4UGl4ZWxWNCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl94MiIsIl94MyIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld0xheWVyUHJvcCIsImxhYmVsIiwiS2VwbGVyTGF5ZXIiLCJ0aWxlIiwiZ2xvYmFsTWluUGl4ZWxWYWx1ZSIsImdsb2JhbE1heFBpeGVsVmFsdWUiLCJ0aWxlTWluUGl4ZWxWYWx1ZSIsInRpbGVNYXhQaXhlbFZhbHVlIiwiX2dldE1vZHVsZXMiLCJnZXRNb2R1bGVzIiwibW9kdWxlcyIsIm1vZHVsZVByb3BzIiwiaWRTdWZmaXgiLCJSYXN0ZXJNZXNoTGF5ZXIiLCJtZXNoIiwiZ2V0UG9seWdvbk9mZnNldCIsImNvb3JkaW5hdGVTeXN0ZW0iLCJDT09SRElOQVRFX1NZU1RFTSIsIkxOR0xBVCIsImdldENvbG9yIiwiUmFzdGVyTGF5ZXIiLCJfaW1hZ2VDb29yZGluYXRlU3lzdGVtIiwiQ0FSVEVTSUFOIiwiX3Byb3BzJGRhdGEiLCJfcHJvcHMkdGlsZSIsIl9wcm9wcyR0aWxlJGJib3giLCJsYXllcnMiLCJtaW1lVHlwZSIsImdldFJhc3RlckxheWVyUE1UaWxlcyIsImJvcmRlckNvbG9yIiwiUGF0aExheWVyIiwiZ2V0UGF0aCIsImQiLCJ3aWR0aE1pblBpeGVscyIsImltYWdlUmdiYSIsIl9nZXRNb2R1bGVzMiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yYXN0ZXItdGlsZS9yYXN0ZXItdGlsZS1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0NPT1JESU5BVEVfU1lTVEVNLCBMYXllciBhcyBEZWNrTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2NvcmUvdHlwZWQnO1xuaW1wb3J0IHtUaWxlTGF5ZXIsIEdlb0JvdW5kaW5nQm94fSBmcm9tICdAZGVjay5nbC9nZW8tbGF5ZXJzL3R5cGVkJztcbmltcG9ydCB7UE1UaWxlc1NvdXJjZSwgUE1UaWxlc1RpbGVTb3VyY2V9IGZyb20gJ0Bsb2FkZXJzLmdsL3BtdGlsZXMnO1xuaW1wb3J0IHtUZXh0dXJlMkRQcm9wc30gZnJvbSAnQGx1bWEuZ2wvd2ViZ2wnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoL21lbW9pemUnO1xuXG5pbXBvcnQge1BhdGhMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzL3R5cGVkJztcbmltcG9ydCB7RGF0YXNldFR5cGUsIFBNVGlsZXNUeXBlLCBMQVlFUl9UWVBFU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtSYXN0ZXJMYXllciwgUmFzdGVyTWVzaExheWVyfSBmcm9tICdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnO1xuaW1wb3J0IHtcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICBMYXllckNvbG9yQ29uZmlnLFxuICBMYXllckhlaWdodENvbmZpZyxcbiAgVmlzdWFsQ2hhbm5lbCxcbiAgVmlzQ29uZmlnQ29sb3JSYW5nZSxcbiAgVmlzQ29uZmlnU2VsZWN0aW9uLFxuICBWaXNDb25maWdCb29sZWFuLFxuICBWaXNDb25maWdJbnB1dCxcbiAgVmlzQ29uZmlnUmFuZ2UsXG4gIFZpc0NvbmZpZ051bWJlclxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7RGF0YXNldHMsIEtlcGxlclRhYmxlIGFzIEtlcGxlckRhdGFzZXQsIFZlY3RvclRpbGVNZXRhZGF0YX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2dldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtyYXN0ZXJWaXNDb25maWdzLCBQUkVTRVRfT1BUSU9OUywgREFUQV9TT1VSQ0VfQ09MT1JfREVGQVVMVFN9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7Z2V0TW9kdWxlc30gZnJvbSAnLi9ncHUtdXRpbHMnO1xuaW1wb3J0IHtnZXRTVEFDSW1hZ2VSZXF1ZXN0cywgbG9hZEltYWdlcywgbG9hZFRlcnJhaW59IGZyb20gJy4vaW1hZ2UnO1xuaW1wb3J0IFJhc3Rlckljb24gZnJvbSAnLi9yYXN0ZXItdGlsZS1pY29uJztcbmltcG9ydCB7XG4gIGdldERhdGFTb3VyY2VQYXJhbXMsXG4gIGdldE1heFJlcXVlc3RzLFxuICBiYm94SW50ZXJzZWN0cyxcbiAgY29tcHV0ZVpSYW5nZSxcbiAgZ2V0U1RBQ0JvdW5kcyxcbiAgZ2V0RU9CYW5kcyxcbiAgZmlsdGVyQXZhaWxhYmxlUHJlc2V0cyxcbiAgZ2V0U2luZ2xlQmFuZFByZXNldE9wdGlvbnMsXG4gIGdldEltYWdlTWluTWF4LFxuICBnZXRNaW5NYXhGcm9tVGlsZTJESGVhZGVyc1xufSBmcm9tICcuL3Jhc3Rlci10aWxlLXV0aWxzJztcbmltcG9ydCB7XG4gIEdldFRpbGVEYXRhQ3VzdG9tUHJvcHMsXG4gIEdldFRpbGVEYXRhRGVmYXVsdFByb3BzLFxuICBHZXRUaWxlRGF0YVByb3BzLFxuICBSZW5kZXJTdWJMYXllcnNQcm9wcyxcbiAgR2V0VGlsZURhdGFPdXRwdXQsXG4gIERhdGFTb3VyY2VQYXJhbXMsXG4gIEtlcGxlclJhc3RlckRhdGFzZXQsXG4gIFRpbGUyREhlYWRlcixcbiAgUHJlc2V0T3B0aW9uLFxuICBDb21wbGV0ZVNUQUNPYmplY3Rcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB7RmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWV9IGZyb20gJy4uL2xheWVyLXV0aWxzJztcbmltcG9ydCB7ZGVmYXVsdCBhcyBLZXBsZXJMYXllciwgTGF5ZXJCYXNlQ29uZmlnUGFydGlhbH0gZnJvbSAnLi4vYmFzZS1sYXllcic7XG5cbi8vIEFkanVzdCB0aWxlU2l6ZSB0byBkZXZpY2VQaXhlbFJhdGlvLCBidXQgbm90IGhpZ2hlciB0aGFuIDIgdG8gcmVkdWNlIHJlcXVlc3RzIHRvIHNlcnZlclxuY29uc3QgZGV2aWNlUGl4ZWxSYXRpbzogbnVtYmVyID0gTWF0aC5taW4oXG4gIDIsXG4gICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbykgfHwgMVxuKTtcblxuLy8gR2xvYmFsIGNvdW50ZXIgdGhhdCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgdGlsZXMgY3VycmVudGx5IGJlaW5nIGxvYWRlZCBhY3Jvc3MgYWxsIHRoZSByYXN0ZXIgdGlsZSBsYXllcnNcbmxldCB0aWxlc0JlaW5nTG9hZGVkID0gMDtcblxuLy8gVGhpcyBpcyBhIHRlbXAgc29sdXRpb24gdG8gdHJhY2sgbG9hZGluZ1xuZXhwb3J0IGNvbnN0IGdldE51bVJhc3RlclRpbGVzQmVpbmdMb2FkZWQgPSAoKSA9PiB7XG4gIHJldHVybiB0aWxlc0JlaW5nTG9hZGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IExPQURfRUxFVkFUSU9OX0FGVEVSX1pPT00gPSA4Ljk7XG5cbmNvbnN0IGdldFNob3VsZExvYWRUZXJyYWluID0gKHN0YWMsIG1hcFN0YXRlLCB2aXNDb25maWcpID0+IHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgLy8gd2UgbmVlZCBhIHJhc3RlciB0aWxlIHNlcnZlciBmb3IgZWxldmF0aW9ucyBldmVuIHdoZW4gd2UgdXNlciBQTVRpbGVzXG4gICAgc3RhYy5yYXN0ZXJUaWxlU2VydmVyVXJscz8ubGVuZ3RoID4gMCAmJlxuICAgICAgLy8gY2hlY2sgdGhlIHN3aXRjaCBmcm9tIHRoZSBsYXllciBjb25maWd1cmF0b3JcbiAgICAgIHZpc0NvbmZpZy5lbmFibGVUZXJyYWluICYmXG4gICAgICAvLyBkaXNhYmxlZCBpbiBUb3AgdmlldyBieSBkZWZhdWx0XG4gICAgICAobWFwU3RhdGUuZHJhZ1JvdGF0ZSB8fCB2aXNDb25maWcuZW5hYmxlVGVycmFpblRvcFZpZXcpICYmXG4gICAgICBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnJhc3RlclNlcnZlclN1cHBvcnRzRWxldmF0aW9uXG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBSYXN0ZXJUaWxlTGF5ZXJWaXNDb25maWdDb21tb25TZXR0aW5ncyA9IHtcbiAgb3BhY2l0eTogVmlzQ29uZmlnTnVtYmVyO1xuICBlbmFibGVUZXJyYWluOiBWaXNDb25maWdCb29sZWFuO1xuICBlbmFibGVUZXJyYWluVG9wVmlldzogVmlzQ29uZmlnQm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFJhc3RlclRpbGVMYXllclZpc0NvbmZpZ1NldHRpbmdzID0gUmFzdGVyVGlsZUxheWVyVmlzQ29uZmlnQ29tbW9uU2V0dGluZ3MgJiB7XG4gIHByZXNldDogVmlzQ29uZmlnU2VsZWN0aW9uO1xuICB1c2VTVEFDU2VhcmNoaW5nOiBWaXNDb25maWdCb29sZWFuO1xuICBzdGFjU2VhcmNoUHJvdmlkZXI6IFZpc0NvbmZpZ1NlbGVjdGlvbjtcbiAgc3RhcnREYXRlOiBWaXNDb25maWdJbnB1dDtcbiAgZW5kRGF0ZTogVmlzQ29uZmlnSW5wdXQ7XG4gIGR5bmFtaWNDb2xvcjogVmlzQ29uZmlnQm9vbGVhbjtcbiAgY29sb3JtYXBJZDogVmlzQ29uZmlnU2VsZWN0aW9uO1xuICBjb2xvclJhbmdlOiBWaXNDb25maWdDb2xvclJhbmdlO1xuICBsaW5lYXJSZXNjYWxpbmdGYWN0b3I6IFZpc0NvbmZpZ1JhbmdlO1xuICBub25MaW5lYXJSZXNjYWxpbmc6IFZpc0NvbmZpZ0Jvb2xlYW47XG4gIGdhbW1hQ29udHJhc3RGYWN0b3I6IFZpc0NvbmZpZ051bWJlcjtcbiAgc2lnbW9pZGFsQ29udHJhc3RGYWN0b3I6IFZpc0NvbmZpZ051bWJlcjtcbiAgc2lnbW9pZGFsQmlhc0ZhY3RvcjogVmlzQ29uZmlnTnVtYmVyO1xuICBzYXR1cmF0aW9uVmFsdWU6IFZpc0NvbmZpZ051bWJlcjtcbiAgZmlsdGVyRW5hYmxlZDogVmlzQ29uZmlnQm9vbGVhbjtcbiAgZmlsdGVyUmFuZ2U6IFZpc0NvbmZpZ1JhbmdlO1xuICBfc3RhY1F1ZXJ5OiBWaXNDb25maWdJbnB1dDtcbiAgc2luZ2xlQmFuZE5hbWU6IFZpc0NvbmZpZ1NlbGVjdGlvbjtcbn07XG5cbnR5cGUgUmFzdGVyVGlsZUxheWVyTWV0YSA9IHtcbiAgelJhbmdlOiBudW1iZXJbXSB8IG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSYXN0ZXJUaWxlTGF5ZXIgZXh0ZW5kcyBLZXBsZXJMYXllciB7XG4gIGRlY2xhcmUgdmlzQ29uZmlnU2V0dGluZ3M6IFJhc3RlclRpbGVMYXllclZpc0NvbmZpZ1NldHRpbmdzO1xuICBkZWNsYXJlIG1ldGE6IFJhc3RlclRpbGVMYXllck1ldGE7XG5cbiAgLyoqIE1pbiBiYW5kcyBpbWFnZSBkYXRhIHZhbHVlLCBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3cG9ydCAqL1xuICBtaW5WaWV3cG9ydFBpeGVsVmFsdWUgPSBJbmZpbml0eTtcbiAgLyoqIE1heCBiYW5kcyBpbWFnZSBkYXRhIHZhbHVlLCBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3cG9ydCAqL1xuICBtYXhWaWV3cG9ydFBpeGVsVmFsdWUgPSAtSW5maW5pdHk7XG4gIC8qKiBNZW1vaXplZCBtZXRob2QgdGhhdCBjYWxjdWxhdGVzIGRhdGEgc291cmNlIHBhcmFtcyAqL1xuXG4gIGdldERhdGFTb3VyY2VQYXJhbXM6IChcbiAgICBzdGFjOiBDb21wbGV0ZVNUQUNPYmplY3QsXG4gICAgcHJlc2V0OiBzdHJpbmcsXG4gICAgcHJlc2V0T3B0aW9uczogUHJlc2V0T3B0aW9uXG4gICkgPT4gRGF0YVNvdXJjZVBhcmFtcyB8IG51bGw7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyhyYXN0ZXJWaXNDb25maWdzKTtcblxuICAgIC8vIE5vIHR3byBTVEFDIGlkcyBtYXkgYmUgdGhlIHNhbWUgd2l0aGluIGEgc2luZ2xlIGNvbGxlY3Rpb24sIHRob3VnaCBpdCdzIGNvbmNlaXZhYmx5IHBvc3NpYmxlXG4gICAgLy8gYWNyb3NzIG11bHRpcGxlIFNUQUMgY29sbGVjdGlvbnMgdGhlcmUgY291bGQgYmUgYW4gaWQgY29sbGlzaW9uLiBOb3RlOiBTVEFDIENvbGxlY3Rpb25cbiAgICAvLyBvYmplY3RzIGRvbid0IGhhdmUgYSBgY29sbGVjdGlvbmAga2V5OyBTVEFDIEl0ZW0gb2JqZWN0cyBoYXZlIGEgYGNvbGxlY3Rpb25gIGtleSAod2hpY2hcbiAgICAvLyBtYXRjaGVzIHRoZSBjb2xsZWN0aW9uJ3MgYGlkYCkuXG4gICAgY29uc3QgcmVzb2x2ZXIgPSAoc3RhYzogQ29tcGxldGVTVEFDT2JqZWN0LCBwcmVzZXQ6IHN0cmluZywgcHJlc2V0T3B0aW9uczogUHJlc2V0T3B0aW9uKSA9PlxuICAgICAgYCR7c3RhYy5pZH0tJHtzdGFjLmNvbGxlY3Rpb259LSR7cHJlc2V0fS0ke3ByZXNldE9wdGlvbnMuc2luZ2xlQmFuZD8uYXNzZXRJZH0tJHtwcmVzZXRPcHRpb25zLnNpbmdsZUJhbmQ/LmJhbmRJbmRleH1gO1xuICAgIHRoaXMuZ2V0RGF0YVNvdXJjZVBhcmFtcyA9IG1lbW9pemUoXG4gICAgICAoc3RhYywgcHJlc2V0LCBwcmVzZXRPcHRpb25zKSA9PiBnZXREYXRhU291cmNlUGFyYW1zKHN0YWMsIHByZXNldCwgcHJlc2V0T3B0aW9ucyksXG4gICAgICByZXNvbHZlclxuICAgICk7XG5cbiAgICB0aGlzLm1ldGEgPSB7elJhbmdlOiBudWxsfTtcbiAgfVxuXG4gIHN0YXRpYyBmaW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldDogS2VwbGVyRGF0YXNldCk6IEZpbmREZWZhdWx0TGF5ZXJQcm9wc1JldHVyblZhbHVlIHtcbiAgICBpZiAoZGF0YXNldC50eXBlICE9PSBEYXRhc2V0VHlwZS5SQVNURVJfVElMRSkge1xuICAgICAgcmV0dXJuIHtwcm9wczogW119O1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0xheWVyUHJvcCA9IHtcbiAgICAgIGRhdGFJZDogZGF0YXNldC5pZCxcbiAgICAgIGxhYmVsOiBkYXRhc2V0LmxhYmVsLFxuICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgfTtcblxuICAgIHJldHVybiB7cHJvcHM6IFtuZXdMYXllclByb3BdfTtcbiAgfVxuXG4gIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIExBWUVSX1RZUEVTLnJhc3RlclRpbGU7XG4gIH1cblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnUmFzdGVyIFRpbGUnO1xuICB9XG5cbiAgZ2V0IGxheWVySWNvbigpOiBLZXBsZXJMYXllclsnbGF5ZXJJY29uJ10ge1xuICAgIHJldHVybiBSYXN0ZXJJY29uO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRlZERhdGFzZXRUeXBlcygpOiBEYXRhc2V0VHlwZVtdIHtcbiAgICByZXR1cm4gW0RhdGFzZXRUeXBlLlJBU1RFUl9USUxFXTtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpOiBSZWNvcmQ8c3RyaW5nLCBWaXN1YWxDaGFubmVsPiB7XG4gICAgY29uc3Qge1xuICAgICAgdmlzQ29uZmlnOiB7XG4gICAgICAgIGNvbG9yUmFuZ2U6IHtjb2xvckxlZ2VuZHM6IGNhdGVnb3JpY2FsQ29sb3JMZWdlbmRzfVxuICAgICAgfVxuICAgIH0gPSB0aGlzLmNvbmZpZztcbiAgICBpZiAoY2F0ZWdvcmljYWxDb2xvckxlZ2VuZHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBzdXBlci52aXN1YWxDaGFubmVscy5jb2xvclxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIGdldCByZXF1aXJlRGF0YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhcbiAgICBwcm9wczogTGF5ZXJCYXNlQ29uZmlnUGFydGlhbFxuICApOiBMYXllckJhc2VDb25maWcgJiBQYXJ0aWFsPExheWVyQ29sb3JDb25maWcgJiBMYXllckhlaWdodENvbmZpZz4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci5nZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMpLFxuICAgICAgY29sb3JGaWVsZDoge1xuICAgICAgICBhbmFseXplclR5cGU6ICcnLFxuICAgICAgICBuYW1lOiAnQ2F0ZWdvcnknLFxuICAgICAgICBmb3JtYXQ6ICcnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZmllbGRJZHg6IC0xLFxuICAgICAgICB2YWx1ZUFjY2Vzc29yOiAoKSA9PiAnJyxcbiAgICAgICAgZGlzcGxheU5hbWU6ICdDYXRlZ29yeSdcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2V0SG92ZXJEYXRhKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gV2UgY2FuIHJlbmRlciB3aXRob3V0IGNvbHVtbnMsIHNvIHdlIHJlZGVmaW5lIHRoaXMgbWV0aG9kXG4gIHNob3VsZFJlbmRlckxheWVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMudHlwZSAmJiB0aGlzLmNvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzOiBEYXRhc2V0cywgb2xkTGF5ZXJEYXRhPzogYW55KSB7XG4gICAgY29uc3Qge2RhdGFJZH0gPSB0aGlzLmNvbmZpZztcbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZChkYXRhSWQpKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gICAgLy8gY2FsbCB1cGRhdGVEYXRhIHRvIHVwZGF0ZUxheWVyTWV0YVxuICAgIGNvbnN0IGRhdGFVcGRhdGVUcmlnZ2VycyA9IHRoaXMuZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzKGRhdGFzZXQpO1xuICAgIGNvbnN0IHRyaWdnZXJDaGFuZ2VkID0gdGhpcy5nZXRDaGFuZ2VkVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzKTtcblxuICAgIGlmICh0cmlnZ2VyQ2hhbmdlZCAmJiB0cmlnZ2VyQ2hhbmdlZC5nZXRNZXRhKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyTWV0YShkYXRhc2V0IGFzIEtlcGxlclJhc3RlckRhdGFzZXQpO1xuICAgIH1cblxuICAgIGxldCB0aWxlU291cmNlOiBQTVRpbGVzVGlsZVNvdXJjZSB8IG51bGwgPSBudWxsO1xuICAgIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5wbXRpbGVzVHlwZSA9PT0gUE1UaWxlc1R5cGUuUkFTVEVSKSB7XG4gICAgICBjb25zdCBtZXRhZGF0YVVybCA9IGRhdGFzZXQubWV0YWRhdGEubWV0YWRhdGFVcmw7XG4gICAgICAvLyB1c2UgdGhlIG9sZCB0aWxlIHNvdXJjZSBpZiBpdCBleGlzdHMgYW5kIG1hdGNoZXMgdGhlIG5ldyBtZXRhZGF0YVVybFxuICAgICAgY29uc3Qge2RhdGFzZXQ6IG9sZERhdGFzZXQsIHRpbGVTb3VyY2U6IG9sZFRpbGVTb3VyY2V9ID0gb2xkTGF5ZXJEYXRhIHx8IHt9O1xuICAgICAgaWYgKG9sZERhdGFzZXQgPT09IGRhdGFzZXQgJiYgb2xkVGlsZVNvdXJjZT8uZGF0YSA9PT0gbWV0YWRhdGFVcmwpIHtcbiAgICAgICAgdGlsZVNvdXJjZSA9IG9sZExheWVyRGF0YS50aWxlU291cmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGlsZVNvdXJjZSA9IG1ldGFkYXRhVXJsID8gUE1UaWxlc1NvdXJjZS5jcmVhdGVEYXRhU291cmNlKG1ldGFkYXRhVXJsLCB7fSkgOiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7ZGF0YXNldCwgdGlsZVNvdXJjZX07XG4gIH1cblxuICB1cGRhdGVMYXllck1ldGEoZGF0YXNldDogS2VwbGVyUmFzdGVyRGF0YXNldCk6IHZvaWQge1xuICAgIGlmIChkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLlJBU1RFUl9USUxFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhYyA9IGRhdGFzZXQubWV0YWRhdGE7XG4gICAgaWYgKHN0YWMucG10aWxlc1R5cGUgPT09IFBNVGlsZXNUeXBlLlJBU1RFUikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTWV0YSh7XG4gICAgICAgIGJvdW5kczogc3RhYy5ib3VuZHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJvdW5kcyA9IGdldFNUQUNCb3VuZHMoc3RhYyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgLy8gSWYgYSBTVEFDIEl0ZW0gKGkuZS4gc3RhYy50eXBlID09PSAnRmVhdHVyZScpLCB0aGVuIHNldCBtYXAgYm91bmRzLlxuICAgICAgLy8gQnV0IHdlIGRvbid0IHdhbnQgdG8gc2V0IGJvdW5kcyBmb3IgTGFuZHNhdCBvciBTZW50aW5lbCBiZWNhdXNlIGl0IHdvdWxkIHpvb20gb3V0IHRvIHpvb21cbiAgICAgIC8vIDAsIGFuZCB3ZSBkb24ndCBoYXZlIGxvdy16b29tIHRpbGVzLlxuICAgICAgaWYgKHN0YWMudHlwZSA9PT0gJ0ZlYXR1cmUnKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTWV0YSh7Ym91bmRzfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1biB3aGVuIGFkZGluZyBhIG5ldyBkYXRhc2V0XG4gICAqL1xuICBzZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldDogS2VwbGVyRGF0YXNldCk6IFJhc3RlclRpbGVMYXllciB7XG4gICAgY29uc3Qgc3RhYyA9IGRhdGFzZXQ/Lm1ldGFkYXRhIGFzIEdldFRpbGVEYXRhQ3VzdG9tUHJvcHNbJ3N0YWMnXTtcblxuICAgIGlmICghc3RhYykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHN0YWMucG10aWxlc1R5cGUgPT09IFBNVGlsZXNUeXBlLlJBU1RFUikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gV2hlbiBhIFNUQUMgQ29sbGVjdGlvbiBpcyBhZGRlZCwgdXNlU3RhY1NlYXJjaGluZyBzaG91bGQgYmUgdHJ1ZSB0byBwcmV2ZW50IGEgYmxhY2sgc2NyZWVuXG4gICAgdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh7XG4gICAgICB1c2VTVEFDU2VhcmNoaW5nOiBzdGFjLnR5cGUgPT09ICdDb2xsZWN0aW9uJ1xuICAgIH0pO1xuXG4gICAgLy8gU2V0IHNpbmdsZUJhbmROYW1lIGlmIHRoZXJlIGlzIG9ubHkgb25lIGJhbmRcbiAgICBjb25zdCBhdmFpbGFibGVCYW5kcyA9IGdldEVPQmFuZHMoc3RhYykgfHwgW107XG4gICAgaWYgKGF2YWlsYWJsZUJhbmRzPy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe3NpbmdsZUJhbmROYW1lOiBhdmFpbGFibGVCYW5kc1swXS5uYW1lfSk7XG4gICAgfVxuXG4gICAgLy8gQ2hhbmdlIHRoZSBwcmVzZXQgaWYgdGhlIGRlZmF1bHQgb25lIGlzIG5vdCBhbGxvd2VkXG4gICAgY29uc3QgYXZhaWxhYmxlUHJlc2V0cyA9IGZpbHRlckF2YWlsYWJsZVByZXNldHMoc3RhYywgUFJFU0VUX09QVElPTlMpO1xuICAgIGlmIChcbiAgICAgIGF2YWlsYWJsZVByZXNldHM/Lmxlbmd0aCAmJlxuICAgICAgIWF2YWlsYWJsZVByZXNldHM/LmluY2x1ZGVzKHRoaXMudmlzQ29uZmlnU2V0dGluZ3MucHJlc2V0LmRlZmF1bHRWYWx1ZSBhcyBzdHJpbmcpXG4gICAgKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtwcmVzZXQ6IGF2YWlsYWJsZVByZXNldHNbMF19KTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBpbXByb3ZlZCBpbWFnZSBwcm9jZXNzaW5nIHByb3BzIG9ubHkgZm9yIG5vbiBzaW5nbGUgYmFuZCBtb2Rlc1xuICAgIGNvbnN0IHByZXNldCA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5wcmVzZXQ7XG4gICAgY29uc3QgY29sb3JEZWZhdWx0cyA9IERBVEFfU09VUkNFX0NPTE9SX0RFRkFVTFRTW3N0YWMuaWRdO1xuICAgIGlmIChjb2xvckRlZmF1bHRzICYmIHByZXNldCAhPT0gJ3NpbmdsZUJhbmQnKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKGNvbG9yRGVmYXVsdHMpO1xuICAgIH1cblxuICAgIC8qXG4gICAgTGFuZFNhdCBzcGVjaWZpZXMgdGVtcG9yYWwgYm91bmRzIGJ1dCB0aGUgdmFsaWQgZGF0YSBpcyBhZnRlciBlbmQgZGF0ZVxuICAgIGNvbnN0IHVwZGF0ZWREYXRlcyA9IHRpbWVSYW5nZVRvU3RhY1RlbXBvcmFsSW50ZXJ2YWwoXG4gICAgICBzdGFjIGFzIFN0YWNUeXBlcy5TVEFDQ29sbGVjdGlvbixcbiAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5zdGFydERhdGUsXG4gICAgICB0aGlzLmNvbmZpZy52aXNDb25maWcuZW5kRGF0ZVxuICAgICk7XG4gICAgdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh1cGRhdGVkRGF0ZXMpO1xuICAgICovXG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgelJhbmdlIG9mIHZpZXdwb3J0LiBUaGlzIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IHRpbGVzIGluIGV4dHJ1ZGVkIG1vZGUgYXJlIHNob3duIHByb3Blcmx5XG4gICAqIGF0IGhpZ2ggZWxldmF0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2ZvdXJzcXVhcmUvc3R1ZGlvLW1vbm9yZXBvL3B1bGwvMTg5Mi9maWxlc1xuICAgKiBEZXJpdmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Zpc2dsL2RlY2suZ2wvYmxvYi84ZDgyNGE0YjgzNmZlZTNiZmViZTZmYzk2MmUwZjAzZDhjMWRiZDBkL21vZHVsZXMvZ2VvLWxheWVycy9zcmMvdGVycmFpbi1sYXllci90ZXJyYWluLWxheWVyLmpzI0wxNzMtTDE5NlxuICAgKlxuICAgKiBAcGFyYW0gdGlsZXMgQXJyYXkgb2YgdGlsZXMgaW4gY3VycmVudCB2aWV3cG9ydFxuICAgKi9cbiAgb25WaWV3cG9ydExvYWQodGlsZXM6IChUaWxlMkRIZWFkZXIgfCBudWxsKVtdKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVNaW5NYXhQaXhlbFZhbHVlKHRpbGVzKTtcbiAgICBjb25zdCBuZXdaUmFuZ2UgPSBjb21wdXRlWlJhbmdlKHRpbGVzKTtcbiAgICBpZiAoIW5ld1pSYW5nZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHt6UmFuZ2V9ID0gdGhpcy5tZXRhO1xuICAgIGlmICghelJhbmdlIHx8IG5ld1pSYW5nZVswXSA8IHpSYW5nZVswXSB8fCBuZXdaUmFuZ2VbMV0gPiB6UmFuZ2VbMV0pIHtcbiAgICAgIHRoaXMubWV0YS56UmFuZ2UgPSBuZXdaUmFuZ2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB2aWV3cG9ydC1yZWxhdGVkIG1pblB4ZWxWYWx1ZSBhbmQgbWF4UGl4ZWxWYWx1ZVxuICAgKiBAcGFyYW0gdGlsZXMgLSBkZWNrLmdsIHRpbGVzXG4gICAqL1xuICB1cGRhdGVNaW5NYXhQaXhlbFZhbHVlKHRpbGVzOiAoVGlsZTJESGVhZGVyIHwgbnVsbClbXSk6IHZvaWQge1xuICAgIGNvbnN0IFttaW4sIG1heF0gPSBnZXRNaW5NYXhGcm9tVGlsZTJESGVhZGVycyh0aWxlcyk7XG4gICAgdGhpcy5taW5WaWV3cG9ydFBpeGVsVmFsdWUgPSBtaW47XG4gICAgdGhpcy5tYXhWaWV3cG9ydFBpeGVsVmFsdWUgPSBtYXg7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIG1pbiBhbmQgbWF4IHZhbHVlcyBvZiBpbnB1dCByYXN0ZXIgYmFuZCBpbWFnZSBwcm9wZXJ0aWVzXG4gICAqIGFuZCB1cGRhdGUgYG1pbkJhbmRzVmFsdWVgIGFuZCBgbWF4QmFuZHNWYWx1ZWBcbiAgICogQHBhcmFtIGltYWdlcyAtIHJhc3RlciBiYW5kIGltYWdlIHByb3BlcnRpZXNcbiAgICogQHJldHVybiBbbWluLCBtYXhdIHBpeGVsIHZhbHVlcyBmb3IgdGhlIHRpbGVcbiAgICovXG4gIGdldE1pbk1heFBpeGVsVmFsdWVzKGltYWdlczogVGV4dHVyZTJEUHJvcHNbXSB8IG51bGwpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICBsZXQgbWluUGl4ZWxWYWx1ZSA9IEluZmluaXR5O1xuICAgIGxldCBtYXhQaXhlbFZhbHVlID0gLUluZmluaXR5O1xuICAgIGlmIChpbWFnZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaW1hZ2Ugb2YgaW1hZ2VzKSB7XG4gICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSBnZXRJbWFnZU1pbk1heChpbWFnZS5kYXRhKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtaW4gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbWluUGl4ZWxWYWx1ZSA9IE1hdGgubWluKG1pbiwgbWluUGl4ZWxWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtYXggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbWF4UGl4ZWxWYWx1ZSA9IE1hdGgubWF4KG1heCwgbWF4UGl4ZWxWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFttaW5QaXhlbFZhbHVlLCBtYXhQaXhlbFZhbHVlXTtcbiAgfVxuXG4gIC8vIGdlbmVyYXRlIGEgZGVjayBsYXllclxuICByZW5kZXJMYXllcihvcHRzKTogVGlsZUxheWVyPGFueT5bXSB7XG4gICAgY29uc3Qge2RhdGF9ID0gb3B0cztcblxuICAgIGlmIChkYXRhPy5kYXRhc2V0Py5tZXRhZGF0YT8ucG10aWxlc1R5cGUgPT09IFBNVGlsZXNUeXBlLlJBU1RFUikge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUE1UaWxlc0xheWVyKG9wdHMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZW5kZXJTdGFjTGF5ZXIob3B0cyk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclN0YWNMYXllcihvcHRzKTogVGlsZUxheWVyPGFueT5bXSB7XG4gICAgY29uc3Qge2RhdGEsIG1hcFN0YXRlLCBleHBlcmltZW50YWxDb250ZXh0fSA9IG9wdHM7XG4gICAgY29uc3Qgc3RhYyA9IGRhdGE/LmRhdGFzZXQ/Lm1ldGFkYXRhIGFzIEdldFRpbGVEYXRhQ3VzdG9tUHJvcHNbJ3N0YWMnXTtcblxuICAgIC8vIElmIGEgdGFidWxhciBkYXRhc2V0IGlzIGxvYWRlZCwgYW5kIHRoZW4gdGhlIGxheWVyIHR5cGUgaXMgc3dpdGNoZWQgZnJvbSBQb2ludCB0byBSYXN0ZXIgVGlsZVxuICAgIC8vIGxheWVyLCB0aGlzIGBzdGFjYCBvYmplY3Qgd2lsbCBleGlzdCBidXQgd2lsbCBub3QgYmUgcmFzdGVyIG1ldGFkYXRhXG4gICAgaWYgKCFzdGFjIHx8ICFzdGFjLnN0YWNfdmVyc2lvbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHt2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge2lkLCBvcGFjaXR5LCB2aXNpYmxlfSA9IHRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuXG4gICAgY29uc3QgaGFzU2hhZG93RWZmZWN0ID0gZXhwZXJpbWVudGFsQ29udGV4dD8uaGFzU2hhZG93RWZmZWN0O1xuXG4gICAgY29uc3Qge1xuICAgICAgcHJlc2V0LFxuICAgICAgY29sb3JtYXBJZCxcbiAgICAgIGxpbmVhclJlc2NhbGluZyxcbiAgICAgIGxpbmVhclJlc2NhbGluZ0ZhY3RvcixcbiAgICAgIG5vbkxpbmVhclJlc2NhbGluZyxcbiAgICAgIGdhbW1hQ29udHJhc3RGYWN0b3IsXG4gICAgICBzaWdtb2lkYWxDb250cmFzdEZhY3RvcixcbiAgICAgIHNpZ21vaWRhbEJpYXNGYWN0b3IsXG4gICAgICBzYXR1cmF0aW9uVmFsdWUsXG4gICAgICBmaWx0ZXJFbmFibGVkLFxuICAgICAgZmlsdGVyUmFuZ2UsXG4gICAgICB1c2VTVEFDU2VhcmNoaW5nLFxuICAgICAgc3RhY1NlYXJjaFByb3ZpZGVyLFxuICAgICAgc3RhcnREYXRlLFxuICAgICAgZW5kRGF0ZSxcbiAgICAgIF9zdGFjUXVlcnksXG4gICAgICBzaW5nbGVCYW5kTmFtZSxcbiAgICAgIGNvbG9yUmFuZ2U6IHtjb2xvck1hcDogY2F0ZWdvcmljYWxDb2xvck1hcH0sXG4gICAgICBkeW5hbWljQ29sb3JcbiAgICB9ID0gdmlzQ29uZmlnO1xuXG4gICAgY29uc3Qgc2hvdWxkTG9hZFRlcnJhaW4gPSBnZXRTaG91bGRMb2FkVGVycmFpbihzdGFjLCBtYXBTdGF0ZSwgdmlzQ29uZmlnKTtcblxuICAgIGlmIChuZXcgRGF0ZShlbmREYXRlKSA8IG5ldyBEYXRlKHN0YXJ0RGF0ZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCB7YmFuZENvbWJpbmF0aW9ufSA9IFBSRVNFVF9PUFRJT05TW3ByZXNldF07XG5cbiAgICBjb25zdCBzaW5nbGVCYW5kID0gZ2V0U2luZ2xlQmFuZFByZXNldE9wdGlvbnMoc3RhYywgc2luZ2xlQmFuZE5hbWUpO1xuICAgIGNvbnN0IGRhdGFTb3VyY2VQYXJhbXM6IERhdGFTb3VyY2VQYXJhbXMgfCBudWxsID0gdGhpcy5nZXREYXRhU291cmNlUGFyYW1zKHN0YWMsIHByZXNldCwge1xuICAgICAgc2luZ2xlQmFuZFxuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhU291cmNlUGFyYW1zKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgbWluWm9vbSxcbiAgICAgIG1heFpvb20sXG4gICAgICBnbG9iYWxCb3VuZHMsXG4gICAgICBsb2FkQXNzZXRJZHMsXG4gICAgICBsb2FkQmFuZEluZGV4ZXMsXG4gICAgICByZW5kZXJCYW5kSW5kZXhlcyxcbiAgICAgIGRhdGFUeXBlLFxuICAgICAgbWluUGl4ZWxWYWx1ZTogZHNNaW5QaXhlbFZhbHVlLFxuICAgICAgbWF4UGl4ZWxWYWx1ZTogZHNNYXhQaXhlbFZhbHVlLFxuICAgICAgbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWUsXG4gICAgICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZVxuICAgIH0gPSBkYXRhU291cmNlUGFyYW1zO1xuXG4gICAgY29uc3QgbWluUGl4ZWxWYWx1ZSA9XG4gICAgICAhZHluYW1pY0NvbG9yICYmIE51bWJlci5pc0Zpbml0ZShkc01pblBpeGVsVmFsdWUpXG4gICAgICAgID8gZHNNaW5QaXhlbFZhbHVlXG4gICAgICAgIDogdGhpcy5taW5WaWV3cG9ydFBpeGVsVmFsdWU7XG4gICAgY29uc3QgbWF4UGl4ZWxWYWx1ZSA9XG4gICAgICAhZHluYW1pY0NvbG9yICYmIE51bWJlci5pc0Zpbml0ZShkc01heFBpeGVsVmFsdWUpXG4gICAgICAgID8gZHNNYXhQaXhlbFZhbHVlXG4gICAgICAgIDogdGhpcy5tYXhWaWV3cG9ydFBpeGVsVmFsdWU7XG5cbiAgICBjb25zdCBnZXRUaWxlRGF0YUN1c3RvbVByb3BzOiBHZXRUaWxlRGF0YUN1c3RvbVByb3BzID0ge1xuICAgICAgc3RhYyxcbiAgICAgIGxvYWRBc3NldElkcyxcbiAgICAgIGxvYWRCYW5kSW5kZXhlcyxcbiAgICAgIGNvbG9ybWFwSWQsXG4gICAgICBzaG91bGRMb2FkVGVycmFpbixcbiAgICAgIGdsb2JhbEJvdW5kcyxcbiAgICAgIHVzZVNUQUNTZWFyY2hpbmcsXG4gICAgICBzdGFjU2VhcmNoUHJvdmlkZXIsXG4gICAgICBzdGFydERhdGUsXG4gICAgICBlbmREYXRlLFxuICAgICAgX3N0YWNRdWVyeSxcbiAgICAgIGNhdGVnb3JpY2FsQ29sb3JNYXAsXG4gICAgICBtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICAgIG1heENhdGVnb3JpY2FsQmFuZFZhbHVlXG4gICAgfTtcblxuICAgIGNvbnN0IHRpbGVMYXllciA9IG5ldyBUaWxlTGF5ZXI8YW55LCBSZW5kZXJTdWJMYXllcnNQcm9wcz4oe1xuICAgICAgaWQsXG4gICAgICBtaW5ab29tLFxuICAgICAgbWF4Wm9vbSxcbiAgICAgIHRpbGVTaXplOiA1MTIgLyBkZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgZ2V0VGlsZURhdGE6IChhcmdzOiBhbnkpID0+IHRoaXMuZ2V0VGlsZURhdGEoey4uLmFyZ3MsIC4uLmdldFRpbGVEYXRhQ3VzdG9tUHJvcHN9KSxcbiAgICAgIG9uVmlld3BvcnRMb2FkOiB0aGlzLm9uVmlld3BvcnRMb2FkLmJpbmQodGhpcyksXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMgZG9lc24ndCBrbm93IHdlJ2xsIHBhc3MgYXBwcm9wcmlhdGUgcHJvcHMgaGVyZVxuICAgICAgcmVuZGVyU3ViTGF5ZXJzOiByZW5kZXJTdWJMYXllcnNTdGFjLFxuICAgICAgbWF4UmVxdWVzdHM6IGdldE1heFJlcXVlc3RzKHN0YWMucmFzdGVyVGlsZVNlcnZlclVybHMgfHwgW10pLFxuICAgICAgLy8gUGFzc2luZyB2aXNpYmxlIG9uIHRvIFRpbGVMYXllciBpcyBuZWNlc3NhcnkgZm9yIHNwbGl0IHZpZXcgdG8gd29ya1xuICAgICAgdmlzaWJsZSxcbiAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgIGdldFRpbGVEYXRhOiBbXG4gICAgICAgICAgc2hvdWxkTG9hZFRlcnJhaW4sXG4gICAgICAgICAgLy8gQ29sb3JtYXAgaGFzIGNoYW5nZWRcbiAgICAgICAgICBjb2xvcm1hcElkLFxuICAgICAgICAgIC8vIGFzc2V0cyB0byBiZSBsb2FkZWQgaGFzIGNoYW5nZWRcbiAgICAgICAgICAuLi5sb2FkQXNzZXRJZHMsXG4gICAgICAgICAgLy8gYmFuZCBpbmRleGVzIHRvIGJlIGxvYWRlZCBoYXMgY2hhbmdlZFxuICAgICAgICAgIC4uLmxvYWRCYW5kSW5kZXhlcyxcbiAgICAgICAgICB1c2VTVEFDU2VhcmNoaW5nLFxuICAgICAgICAgIHN0YWNTZWFyY2hQcm92aWRlcixcbiAgICAgICAgICBzdGFydERhdGUsXG4gICAgICAgICAgZW5kRGF0ZSxcbiAgICAgICAgICBfc3RhY1F1ZXJ5LFxuICAgICAgICAgIGNhdGVnb3JpY2FsQ29sb3JNYXAsXG4gICAgICAgICAgbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWUsXG4gICAgICAgICAgbWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIFByb3BzIGZvciAzRCBtb2RlXG4gICAgICAuLi4oc2hvdWxkTG9hZFRlcnJhaW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICB6UmFuZ2U6IHRoaXMubWV0YS56UmFuZ2UgfHwgbnVsbCxcbiAgICAgICAgICAgIHJlZmluZW1lbnRTdHJhdGVneTogJ25vLW92ZXJsYXAnXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICAgIHJlbmRlckJhbmRJbmRleGVzLFxuICAgICAgb3BhY2l0eSxcbiAgICAgIGxpbmVhclJlc2NhbGluZyxcbiAgICAgIGxpbmVhclJlc2NhbGluZ0ZhY3RvcixcbiAgICAgIG5vbkxpbmVhclJlc2NhbGluZyxcbiAgICAgIG1pblBpeGVsVmFsdWUsXG4gICAgICBtYXhQaXhlbFZhbHVlLFxuICAgICAgZ2FtbWFDb250cmFzdEZhY3RvcixcbiAgICAgIHNpZ21vaWRhbENvbnRyYXN0RmFjdG9yLFxuICAgICAgc2lnbW9pZGFsQmlhc0ZhY3RvcixcbiAgICAgIHNhdHVyYXRpb25WYWx1ZSxcbiAgICAgIGJhbmRDb21iaW5hdGlvbixcbiAgICAgIGZpbHRlckVuYWJsZWQsXG4gICAgICBmaWx0ZXJSYW5nZSxcbiAgICAgIGRhdGFUeXBlLFxuICAgICAgbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWUsXG4gICAgICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICAgIGhhc0NhdGVnb3JpY2FsQ29sb3JNYXA6IEJvb2xlYW4oY2F0ZWdvcmljYWxDb2xvck1hcCksXG4gICAgICBoYXNTaGFkb3dFZmZlY3RcbiAgICB9KTtcblxuICAgIHJldHVybiBbdGlsZUxheWVyXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUE1UaWxlc0xheWVyKG9wdHMpOiBUaWxlTGF5ZXI8YW55PltdIHtcbiAgICBjb25zdCB7aWQsIG9wYWNpdHksIHZpc2libGV9ID0gdGhpcy5nZXREZWZhdWx0RGVja0xheWVyUHJvcHMob3B0cyk7XG5cbiAgICBjb25zdCB7ZGF0YSwgbWFwU3RhdGV9ID0gb3B0cztcbiAgICBjb25zdCBtZXRhZGF0YSA9IGRhdGE/LmRhdGFzZXQ/Lm1ldGFkYXRhIGFzIFZlY3RvclRpbGVNZXRhZGF0YTtcbiAgICBjb25zdCB7dmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgY29uc3QgdGlsZVNvdXJjZSA9IGRhdGEudGlsZVNvdXJjZTtcbiAgICBjb25zdCBzaG93VGlsZUJvcmRlcnMgPSBmYWxzZTtcbiAgICBjb25zdCBtaW5ab29tID0gbWV0YWRhdGEubWluWm9vbSB8fCAwO1xuICAgIGNvbnN0IG1heFpvb20gPSBtZXRhZGF0YS5tYXhab29tIHx8IDMwO1xuXG4gICAgY29uc3Qgc2hvdWxkTG9hZFRlcnJhaW4gPSBnZXRTaG91bGRMb2FkVGVycmFpbihtZXRhZGF0YSwgbWFwU3RhdGUsIHZpc0NvbmZpZyk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IFRpbGVMYXllcjxhbnksIFJhc3RlclRpbGVMYXllclZpc0NvbmZpZ0NvbW1vblNldHRpbmdzPih7XG4gICAgICAgIGlkLFxuICAgICAgICBnZXRUaWxlRGF0YTogKGFyZ3M6IGFueSkgPT5cbiAgICAgICAgICB0aGlzLmdldFRpbGVEYXRhUE1UaWxlcyh7Li4uYXJncywgc2hvdWxkTG9hZFRlcnJhaW4sIG1ldGFkYXRhfSwgdGlsZVNvdXJjZSksXG5cbiAgICAgICAgLy8gQXNzdW1lIHRoZSBwbXRpbGVzIGZpbGUgc3VwcG9ydCBIVFRQLzIsIHNvIHdlIGFyZW4ndCBsaW1pdGVkIGJ5IHRoZSBicm93c2VyIHRvIGEgY2VydGFpbiBudW1iZXIgcGVyIGRvbWFpbi5cbiAgICAgICAgbWF4UmVxdWVzdHM6IDIwLFxuXG4gICAgICAgIHBpY2thYmxlOiB0cnVlLFxuICAgICAgICBhdXRvSGlnaGxpZ2h0OiBzaG93VGlsZUJvcmRlcnMsXG5cbiAgICAgICAgb25WaWV3cG9ydExvYWQ6IHRoaXMub25WaWV3cG9ydExvYWQuYmluZCh0aGlzKSxcblxuICAgICAgICBtaW5ab29tLFxuICAgICAgICBtYXhab29tLFxuICAgICAgICB0aWxlU2l6ZTogNTEyIC8gZGV2aWNlUGl4ZWxSYXRpbyxcbiAgICAgICAgem9vbU9mZnNldDogZGV2aWNlUGl4ZWxSYXRpbyA9PT0gMSA/IC0xIDogMCxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTIGRvZXNuJ3Qga25vdyB3ZSdsbCBwYXNzIGFwcHJvcHJpYXRlIHByb3BzIGhlcmVcbiAgICAgICAgcmVuZGVyU3ViTGF5ZXJzOiByZW5kZXJTdWJMYXllcnNQTVRpbGVzLFxuXG4gICAgICAgIHRpbGVTb3VyY2UsXG4gICAgICAgIHNob3dUaWxlQm9yZGVycyxcblxuICAgICAgICB2aXNpYmxlLFxuICAgICAgICBvcGFjaXR5LFxuXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgZ2V0VGlsZURhdGE6IFtzaG91bGRMb2FkVGVycmFpbl1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gUHJvcHMgZm9yIDNEIG1vZGVcbiAgICAgICAgLi4uKHNob3VsZExvYWRUZXJyYWluXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHpSYW5nZTogdGhpcy5tZXRhLnpSYW5nZSB8fCBudWxsLFxuICAgICAgICAgICAgICByZWZpbmVtZW50U3RyYXRlZ3k6ICduby1vdmVybGFwJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9KVxuICAgIF07XG4gIH1cblxuICBhc3luYyBnZXRUaWxlRGF0YShwcm9wczogR2V0VGlsZURhdGFQcm9wcyk6IFByb21pc2U8R2V0VGlsZURhdGFPdXRwdXQ+IHtcbiAgICBjb25zdCB7XG4gICAgICBzaG91bGRMb2FkVGVycmFpbixcbiAgICAgIGdsb2JhbEJvdW5kcyxcbiAgICAgIGJib3g6IHt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGh9LFxuICAgICAgaW5kZXg6IHt6OiB6b29tfVxuICAgIH0gPSBwcm9wcztcblxuICAgIGlmIChnbG9iYWxCb3VuZHMgJiYgIWJib3hJbnRlcnNlY3RzKGdsb2JhbEJvdW5kcywgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0pKSB7XG4gICAgICAvLyB0aWxlIGlzIG91dHNpZGUgb2YgU1RBQyBvYmplY3QncyBib3VuZGluZyBib3g7IGRvbid0IGZldGNoIHRpbGVcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc2V0UmVxdWVzdHMgPSBhd2FpdCBnZXRTVEFDSW1hZ2VSZXF1ZXN0cyhwcm9wcyk7XG4gICAgLy8gTm8gYXNzZXRzIHRvIGxvYWQsIG1vc3QgbGlrZWx5IGR1ZSB0byBwcm9wcyBiZWluZyBpbnZhbGlkL3Vuc3VwcG9ydGVkXG4gICAgaWYgKCFhc3NldFJlcXVlc3RzKSB7XG4gICAgICAvLyBXZSBzdGlsbCBpc3N1ZSB0aGUgbG9hZFRlcnJhaW4gcmVxdWVzdCBpZiBhcHBsaWNhYmxlXG4gICAgICBjb25zdCB0ZXJyYWluID1cbiAgICAgICAgc2hvdWxkTG9hZFRlcnJhaW4gJiZcbiAgICAgICAgTE9BRF9FTEVWQVRJT05fQUZURVJfWk9PTSA8IHpvb20gJiZcbiAgICAgICAgKGF3YWl0IGxvYWRUZXJyYWluKHtcbiAgICAgICAgICBib3VuZHNGb3JHZW9tZXRyeTogW3dlc3QsIG5vcnRoLCBlYXN0LCBzb3V0aF0sXG4gICAgICAgICAgaW5kZXg6IHByb3BzLmluZGV4LFxuICAgICAgICAgIHNpZ25hbDogcHJvcHMuc2lnbmFsLFxuICAgICAgICAgIHJhc3RlclRpbGVTZXJ2ZXJVcmxzOiBwcm9wcy5zdGFjLnJhc3RlclRpbGVTZXJ2ZXJVcmxzIHx8IFtdXG4gICAgICAgIH0pKTtcbiAgICAgIHJldHVybiB7aW1hZ2VzOiBudWxsLCAuLi4odGVycmFpbiA/IHt0ZXJyYWlufSA6IHt9KX07XG4gICAgfVxuXG4gICAgdGlsZXNCZWluZ0xvYWRlZCsrO1xuXG4gICAgLy8gV3JhcCBsb2FkaW5nIGltYWdlcyBpbnRvIGEgdHJ5L2NhdGNoIGJlY2F1c2UgdGlsZXMgdGhhdCBhcmUgb25seSBicmllZmx5IGluIHZpZXcgd2lsbCBiZVxuICAgIC8vIGFib3J0ZWQuIFRoZSBgQWJvcnRDb250cm9sbGVyLmFib3J0KClgIGNyZWF0ZXMgYSBET01FeGNlcHRpb24gZXJyb3IuXG4gICAgLy8gTm90ZSB0aGF0IHNpbmNlIGxvYWRpbmcgaXMgYXN5bmMsIHRyeS9jYXRjaCB3aWxsIG9ubHkgd29yayB3aGVuIGF3YWl0ZWQgaW5zaWRlIHRoZSB0cnkgYmxvY2tcbiAgICB0cnkge1xuICAgICAgY29uc3QgW2ltYWdlcywgdGVycmFpbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGxvYWRJbWFnZXMoYXNzZXRSZXF1ZXN0cywgcHJvcHMuY29sb3JtYXBJZCwge1xuICAgICAgICAgIGNvbG9yTWFwOiBwcm9wcy5jYXRlZ29yaWNhbENvbG9yTWFwLFxuICAgICAgICAgIG1pblZhbHVlOiBwcm9wcy5taW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICAgICAgICBtYXhWYWx1ZTogcHJvcHMubWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWVcbiAgICAgICAgfSksXG4gICAgICAgIHNob3VsZExvYWRUZXJyYWluICYmIExPQURfRUxFVkFUSU9OX0FGVEVSX1pPT00gPCB6b29tXG4gICAgICAgICAgPyBsb2FkVGVycmFpbih7XG4gICAgICAgICAgICAgIGJvdW5kc0Zvckdlb21ldHJ5OiBbd2VzdCwgbm9ydGgsIGVhc3QsIHNvdXRoXSxcbiAgICAgICAgICAgICAgaW5kZXg6IHByb3BzLmluZGV4LFxuICAgICAgICAgICAgICBzaWduYWw6IHByb3BzLnNpZ25hbCxcbiAgICAgICAgICAgICAgcmFzdGVyVGlsZVNlcnZlclVybHM6IHByb3BzLnN0YWMucmFzdGVyVGlsZVNlcnZlclVybHMgfHwgW11cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgICBdKTtcblxuICAgICAgY29uc3QgW21pbiwgbWF4XSA9IHRoaXMuZ2V0TWluTWF4UGl4ZWxWYWx1ZXMoaW1hZ2VzLmltYWdlQmFuZHMpO1xuICAgICAgdGlsZXNCZWluZ0xvYWRlZC0tO1xuXG4gICAgICAvLyBBZGQgdGVycmFpbiBkYXRhIG9ubHkgaWYgd2UgcmVxdWVzdGVkIGl0IGFib3ZlXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbWFnZXMsXG4gICAgICAgIC4uLih0ZXJyYWluID8ge3RlcnJhaW59IDoge30pLFxuICAgICAgICBtaW5QaXhlbFZhbHVlOiBtaW4sXG4gICAgICAgIG1heFBpeGVsVmFsdWU6IG1heFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGlsZXNCZWluZ0xvYWRlZC0tO1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICAvLyB0aWxlIHdhcyBhYm9ydGVkXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTb21lIG90aGVyIHVuaGFuZGxlZCBlcnJvclxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VGlsZURhdGFQTVRpbGVzKFxuICAgIHByb3BzOiBHZXRUaWxlRGF0YURlZmF1bHRQcm9wcyAmIHtcbiAgICAgIHNob3VsZExvYWRUZXJyYWluOiBib29sZWFuO1xuICAgICAgbWV0YWRhdGE6IHtyYXN0ZXJUaWxlU2VydmVyVXJsczogc3RyaW5nW119O1xuICAgICAgZ2xvYmFsQm91bmRzOiBEYXRhU291cmNlUGFyYW1zWydnbG9iYWxCb3VuZHMnXTtcbiAgICB9LFxuICAgIHRpbGVTb3VyY2VcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB7XG4gICAgICBzaG91bGRMb2FkVGVycmFpbixcbiAgICAgIGdsb2JhbEJvdW5kcyxcbiAgICAgIGJib3g6IHt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGh9LFxuICAgICAgaW5kZXg6IHt6OiB6b29tfSxcbiAgICAgIG1ldGFkYXRhXG4gICAgfSA9IHByb3BzO1xuXG4gICAgaWYgKGdsb2JhbEJvdW5kcyAmJiAhYmJveEludGVyc2VjdHMoZ2xvYmFsQm91bmRzLCBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSkpIHtcbiAgICAgIC8vIHRpbGUgaXMgb3V0c2lkZSBvZiBTVEFDIG9iamVjdCdzIGJvdW5kaW5nIGJveDsgZG9uJ3QgZmV0Y2ggdGlsZVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGlsZXNCZWluZ0xvYWRlZCsrO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFtpbWFnZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbdGlsZVNvdXJjZS5nZXRUaWxlRGF0YShwcm9wcyldKTtcbiAgICAgIC8vIEZvciBud28gY2hlY2sgaWYgdGhlIGJhc2UgdGlsZSBleGlzdHMsIGFzIHRoaXMgY2FuIGNhdXNlIGxvYWRpbmcgdG8gZ2V0IHN0dWNrIHdpdGggXCJzcGFyc2VcIiBQTVRpbGVzLlxuICAgICAgY29uc3QgdGVycmFpbiA9XG4gICAgICAgIGltYWdlICYmIHNob3VsZExvYWRUZXJyYWluICYmIExPQURfRUxFVkFUSU9OX0FGVEVSX1pPT00gPCB6b29tXG4gICAgICAgICAgPyBhd2FpdCBsb2FkVGVycmFpbih7XG4gICAgICAgICAgICAgIGJvdW5kc0Zvckdlb21ldHJ5OiBbd2VzdCwgbm9ydGgsIGVhc3QsIHNvdXRoXSxcbiAgICAgICAgICAgICAgaW5kZXg6IHByb3BzLmluZGV4LFxuICAgICAgICAgICAgICBzaWduYWw6IHByb3BzLnNpZ25hbCxcbiAgICAgICAgICAgICAgcmFzdGVyVGlsZVNlcnZlclVybHM6IG1ldGFkYXRhLnJhc3RlclRpbGVTZXJ2ZXJVcmxzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgbGV0IG1pblBpeGVsVmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IG1heFBpeGVsVmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB0aGlzLmdldE1pbk1heFBpeGVsVmFsdWVzKFt7ZGF0YTogaW1hZ2V9XSk7XG4gICAgICAgIG1pblBpeGVsVmFsdWUgPSBtaW47XG4gICAgICAgIG1heFBpeGVsVmFsdWUgPSBtYXg7XG4gICAgICB9XG4gICAgICB0aWxlc0JlaW5nTG9hZGVkLS07XG5cbiAgICAgIC8vIEFkZCB0ZXJyYWluIGRhdGEgb25seSBpZiB3ZSByZXF1ZXN0ZWQgaXQgYWJvdmVcbiAgICAgIHJldHVybiB7aW1hZ2UsIG1pblBpeGVsVmFsdWUsIG1heFBpeGVsVmFsdWUsIC4uLih0ZXJyYWluID8ge3RlcnJhaW59IDoge30pfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGlsZXNCZWluZ0xvYWRlZC0tO1xuXG4gICAgICBpZiAoKGVycm9yIGFzIEVycm9yKS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgLy8gdGlsZSB3YXMgYWJvcnRlZFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gU29tZSBvdGhlciB1bmhhbmRsZWQgZXJyb3JcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJTdWJMYXllcnNTdGFjKHByb3BzOiBSZW5kZXJTdWJMYXllcnNQcm9wcyk6IERlY2tMYXllcjxhbnk+IHwgRGVja0xheWVyPGFueT5bXSB7XG4gIGNvbnN0IHtcbiAgICB0aWxlLFxuICAgIGRhdGEsXG4gICAgbWluUGl4ZWxWYWx1ZTogZ2xvYmFsTWluUGl4ZWxWYWx1ZSxcbiAgICBtYXhQaXhlbFZhbHVlOiBnbG9iYWxNYXhQaXhlbFZhbHVlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYmJveCA9IHRpbGUuYmJveCBhcyBHZW9Cb3VuZGluZ0JveDtcbiAgY29uc3Qge3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aH0gPSBiYm94O1xuXG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBpbWFnZXMsXG4gICAgdGVycmFpbixcbiAgICBtaW5QaXhlbFZhbHVlOiB0aWxlTWluUGl4ZWxWYWx1ZSxcbiAgICBtYXhQaXhlbFZhbHVlOiB0aWxlTWF4UGl4ZWxWYWx1ZVxuICB9ID0gZGF0YTtcbiAgaWYgKCFpbWFnZXMgfHwgKEFycmF5LmlzQXJyYXkoaW1hZ2VzKSAmJiBpbWFnZXMubGVuZ3RoID09PSAwKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IG1pblBpeGVsVmFsdWUgPSBOdW1iZXIuaXNGaW5pdGUoZ2xvYmFsTWluUGl4ZWxWYWx1ZSlcbiAgICA/IGdsb2JhbE1pblBpeGVsVmFsdWVcbiAgICA6IHRpbGVNaW5QaXhlbFZhbHVlO1xuICBjb25zdCBtYXhQaXhlbFZhbHVlID0gTnVtYmVyLmlzRmluaXRlKGdsb2JhbE1heFBpeGVsVmFsdWUpXG4gICAgPyBnbG9iYWxNYXhQaXhlbFZhbHVlXG4gICAgOiB0aWxlTWF4UGl4ZWxWYWx1ZTtcbiAgaWYgKHR5cGVvZiBtaW5QaXhlbFZhbHVlICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWF4UGl4ZWxWYWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7bW9kdWxlcywgbW9kdWxlUHJvcHN9ID0gZ2V0TW9kdWxlcyh7XG4gICAgaW1hZ2VzLFxuICAgIHByb3BzOiB7Li4ucHJvcHMsIG1pblBpeGVsVmFsdWUsIG1heFBpeGVsVmFsdWV9XG4gIH0pO1xuXG4gIGNvbnN0IGlkU3VmZml4ID0gcHJvcHMuaGFzU2hhZG93RWZmZWN0ID8gJ3NoYWRvdycgOiAnJztcblxuICByZXR1cm4gdGVycmFpblxuICAgID8gbmV3IFJhc3Rlck1lc2hMYXllcihwcm9wcywge1xuICAgICAgICBpZDogYHJhc3Rlci0zZC1sYXllci0ke3Byb3BzLmlkfS0ke2lkU3VmZml4fWAsXG4gICAgICAgIC8vIER1bW15IGRhdGFcbiAgICAgICAgZGF0YTogWzFdLFxuICAgICAgICBtZXNoOiB0ZXJyYWluLFxuICAgICAgICBpbWFnZXMsXG4gICAgICAgIG1vZHVsZXMsXG4gICAgICAgIG1vZHVsZVByb3BzLFxuXG4gICAgICAgIGdldFBvbHlnb25PZmZzZXQ6IG51bGwsXG4gICAgICAgIGNvb3JkaW5hdGVTeXN0ZW06IENPT1JESU5BVEVfU1lTVEVNLkxOR0xBVCxcbiAgICAgICAgLy8gQ29sb3IgdG8gdXNlIGlmIHN1cmZhY2VJbWFnZSBpcyB1bmF2YWlsYWJsZVxuICAgICAgICBnZXRDb2xvcjogWzI1NSwgMjU1LCAyNTVdXG4gICAgICAgIC8vIG1hdGVyaWFsOiBmYWxzZVxuICAgICAgfSlcbiAgICA6IG5ldyBSYXN0ZXJMYXllcihwcm9wcywge1xuICAgICAgICBpZDogYHJhc3Rlci0yZC1sYXllci0ke3Byb3BzLmlkfS0ke2lkU3VmZml4fWAsXG4gICAgICAgIGltYWdlcyxcbiAgICAgICAgbW9kdWxlcyxcbiAgICAgICAgbW9kdWxlUHJvcHMsXG4gICAgICAgIGJvdW5kczogW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0sXG4gICAgICAgIF9pbWFnZUNvb3JkaW5hdGVTeXN0ZW06IENPT1JESU5BVEVfU1lTVEVNLkNBUlRFU0lBTlxuICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN1YkxheWVyc1BNVGlsZXMocHJvcHM6IHtcbiAgaWQ6IHN0cmluZztcbiAgZGF0YTogYW55O1xuICB0aWxlU291cmNlOiBhbnk7XG4gIHNob3dUaWxlQm9yZGVyczogYW55O1xuICBtaW5ab29tOiBhbnk7XG4gIG1heFpvb206IGFueTtcbiAgdGlsZTogYW55O1xufSkge1xuICBjb25zdCB7XG4gICAgdGlsZVNvdXJjZSxcbiAgICBzaG93VGlsZUJvcmRlcnMsXG4gICAgbWluWm9vbSxcbiAgICBtYXhab29tLFxuICAgIHRpbGU6IHtcbiAgICAgIGluZGV4OiB7ejogem9vbX0sXG4gICAgICBiYm94OiB7d2VzdCwgc291dGgsIGVhc3QsIG5vcnRofVxuICAgIH1cbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGxheWVyczogYW55W10gPSBbXTtcblxuICBpZiAocHJvcHMuZGF0YT8uaW1hZ2UpIHtcbiAgICBzd2l0Y2ggKHRpbGVTb3VyY2UubWltZVR5cGUpIHtcbiAgICAgIGNhc2UgJ2ltYWdlL3BuZyc6XG4gICAgICBjYXNlICdpbWFnZS9qcGVnJzpcbiAgICAgIGNhc2UgJ2ltYWdlL3dlYnAnOlxuICAgICAgY2FzZSAnaW1hZ2UvYXZpZic6XG4gICAgICAgIGxheWVycy5wdXNoKGdldFJhc3RlckxheWVyUE1UaWxlcyhwcm9wcykpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gRGVidWcgdGlsZSBib3JkZXJzXG4gIGNvbnN0IGJvcmRlckNvbG9yID0gem9vbSA8PSBtaW5ab29tIHx8IHpvb20gPj0gbWF4Wm9vbSA/IFsyNTUsIDAsIDAsIDI1NV0gOiBbMCwgMCwgMjU1LCAyNTVdO1xuICBpZiAoc2hvd1RpbGVCb3JkZXJzKSB7XG4gICAgbGF5ZXJzLnB1c2goXG4gICAgICBuZXcgUGF0aExheWVyKHtcbiAgICAgICAgaWQ6IGAke3Byb3BzLmlkfS1ib3JkZXJgLFxuICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgW1xuICAgICAgICAgICAgW3dlc3QsIG5vcnRoXSxcbiAgICAgICAgICAgIFt3ZXN0LCBzb3V0aF0sXG4gICAgICAgICAgICBbZWFzdCwgc291dGhdLFxuICAgICAgICAgICAgW2Vhc3QsIG5vcnRoXSxcbiAgICAgICAgICAgIFt3ZXN0LCBub3J0aF1cbiAgICAgICAgICBdXG4gICAgICAgIF0sXG4gICAgICAgIGdldFBhdGg6IGQgPT4gZCxcbiAgICAgICAgZ2V0Q29sb3I6IGJvcmRlckNvbG9yIGFzIGFueSxcbiAgICAgICAgd2lkdGhNaW5QaXhlbHM6IDRcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBsYXllcnM7XG59XG5cbmZ1bmN0aW9uIGdldFJhc3RlckxheWVyUE1UaWxlcyhwcm9wczoge2lkOiBzdHJpbmc7IGRhdGE6IGFueTsgdGlsZTogYW55fSkge1xuICBjb25zdCB7dGlsZSwgZGF0YX0gPSBwcm9wcztcbiAgY29uc3QgYmJveCA9IHRpbGUuYmJveCBhcyBHZW9Cb3VuZGluZ0JveDtcbiAgY29uc3Qge3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aH0gPSBiYm94O1xuXG4gIGlmICghZGF0YT8uaW1hZ2UpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBpbWFnZXMgPSB7aW1hZ2VSZ2JhOiB7ZGF0YTogZGF0YS5pbWFnZX19O1xuICBjb25zdCB7dGVycmFpbn0gPSBkYXRhO1xuXG4gIGNvbnN0IHttb2R1bGVzLCBtb2R1bGVQcm9wc30gPSBnZXRNb2R1bGVzKHtcbiAgICBpbWFnZXNcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcnJhaW5cbiAgICA/IG5ldyBSYXN0ZXJNZXNoTGF5ZXIocHJvcHMsIHtcbiAgICAgICAgaWQ6IGByYXN0ZXItM2QtbGF5ZXItJHtwcm9wcy5pZH1gLFxuICAgICAgICAvLyBEdW1teSBkYXRhXG4gICAgICAgIGRhdGE6IFsxXSxcbiAgICAgICAgbWVzaDogdGVycmFpbixcbiAgICAgICAgaW1hZ2VzLFxuICAgICAgICBtb2R1bGVzLFxuICAgICAgICBtb2R1bGVQcm9wcyxcblxuICAgICAgICBnZXRQb2x5Z29uT2Zmc2V0OiBudWxsLFxuICAgICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVQsXG4gICAgICAgIC8vIENvbG9yIHRvIHVzZSBpZiBzdXJmYWNlSW1hZ2UgaXMgdW5hdmFpbGFibGVcbiAgICAgICAgZ2V0Q29sb3I6IFsyNTUsIDI1NSwgMjU1XVxuICAgICAgICAvLyBtYXRlcmlhbDogZmFsc2VcbiAgICAgIH0pXG4gICAgOiBuZXcgUmFzdGVyTGF5ZXIocHJvcHMsIHtcbiAgICAgICAgaWQ6IGByYXN0ZXItMmQtbGF5ZXItJHtwcm9wcy5pZH1gLFxuICAgICAgICBkYXRhOiBudWxsIGFzIG5ldmVyLFxuICAgICAgICBpbWFnZXMsXG4gICAgICAgIG1vZHVsZXMsXG4gICAgICAgIG1vZHVsZVByb3BzLFxuICAgICAgICBib3VuZHM6IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdLFxuICAgICAgICBfaW1hZ2VDb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5DQVJURVNJQU5cbiAgICAgIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFBRyxRQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7QUFFQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxhQUFBLEdBQUFQLE9BQUE7QUFjQSxJQUFBUSxZQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxNQUFBLEdBQUFU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
|
|
893
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX3R5cGVkMiIsIl9wbXRpbGVzIiwiX21lbW9pemUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3R5cGVkMyIsIl9jb25zdGFudHMiLCJfZGVja2dsTGF5ZXJzIiwiX2NvbW1vblV0aWxzIiwiX3V0aWxzIiwiX2NvbmZpZyIsIl9ncHVVdGlscyIsIl9pbWFnZSIsIl9yYXN0ZXJUaWxlSWNvbiIsIl9yYXN0ZXJUaWxlVXRpbHMiLCJfYmFzZUxheWVyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsImRldmljZVBpeGVsUmF0aW8iLCJNYXRoIiwibWluIiwid2luZG93IiwidGlsZXNCZWluZ0xvYWRlZCIsImdldE51bVJhc3RlclRpbGVzQmVpbmdMb2FkZWQiLCJleHBvcnRzIiwiTE9BRF9FTEVWQVRJT05fQUZURVJfWk9PTSIsImdldFNob3VsZExvYWRUZXJyYWluIiwic3RhYyIsIm1hcFN0YXRlIiwidmlzQ29uZmlnIiwiX3N0YWMkcmFzdGVyVGlsZVNlcnZlIiwiX3N0YWMkcmFzdGVyU2VydmVyU3VwIiwicmFzdGVyVGlsZVNlcnZlclVybHMiLCJlbmFibGVUZXJyYWluIiwiZHJhZ1JvdGF0ZSIsImVuYWJsZVRlcnJhaW5Ub3BWaWV3IiwicmFzdGVyU2VydmVyU3VwcG9ydHNFbGV2YXRpb24iLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsIlJhc3RlclRpbGVMYXllciIsIl9LZXBsZXJMYXllciIsInByb3BzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiSW5maW5pdHkiLCJyZWdpc3RlclZpc0NvbmZpZyIsInJhc3RlclZpc0NvbmZpZ3MiLCJyZXNvbHZlciIsInByZXNldCIsInByZXNldE9wdGlvbnMiLCJfcHJlc2V0T3B0aW9ucyRzaW5nbGUiLCJfcHJlc2V0T3B0aW9ucyRzaW5nbGUyIiwiY29uY2F0IiwiaWQiLCJjb2xsZWN0aW9uIiwic2luZ2xlQmFuZCIsImFzc2V0SWQiLCJiYW5kSW5kZXgiLCJnZXREYXRhU291cmNlUGFyYW1zIiwibWVtb2l6ZSIsIm1ldGEiLCJ6UmFuZ2UiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImdldCIsIkxBWUVSX1RZUEVTIiwicmFzdGVyVGlsZSIsIlJhc3Rlckljb24iLCJEYXRhc2V0VHlwZSIsIlJBU1RFUl9USUxFIiwiY2F0ZWdvcmljYWxDb2xvckxlZ2VuZHMiLCJjb25maWciLCJjb2xvclJhbmdlIiwiY29sb3JMZWdlbmRzIiwiY29sb3IiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJjb2xvckZpZWxkIiwiYW5hbHl6ZXJUeXBlIiwiZm9ybWF0IiwidHlwZSIsImZpZWxkSWR4IiwidmFsdWVBY2Nlc3NvciIsImRpc3BsYXlOYW1lIiwiZ2V0SG92ZXJEYXRhIiwic2hvdWxkUmVuZGVyTGF5ZXIiLCJpc1Zpc2libGUiLCJmb3JtYXRMYXllckRhdGEiLCJkYXRhc2V0cyIsIm9sZExheWVyRGF0YSIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiZGF0YUlkIiwibm90TnVsbG9yVW5kZWZpbmVkIiwiZGF0YXNldCIsImRhdGFVcGRhdGVUcmlnZ2VycyIsImdldERhdGFVcGRhdGVUcmlnZ2VycyIsInRyaWdnZXJDaGFuZ2VkIiwiZ2V0Q2hhbmdlZFRyaWdnZXJzIiwiZ2V0TWV0YSIsInVwZGF0ZUxheWVyTWV0YSIsInRpbGVTb3VyY2UiLCJtZXRhZGF0YSIsInBtdGlsZXNUeXBlIiwiUE1UaWxlc1R5cGUiLCJSQVNURVIiLCJtZXRhZGF0YVVybCIsIl9yZWYiLCJvbGREYXRhc2V0Iiwib2xkVGlsZVNvdXJjZSIsImRhdGEiLCJQTVRpbGVzU291cmNlIiwiY3JlYXRlRGF0YVNvdXJjZSIsInVwZGF0ZU1ldGEiLCJib3VuZHMiLCJnZXRTVEFDQm91bmRzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1c2VTVEFDU2VhcmNoaW5nIiwiYXZhaWxhYmxlQmFuZHMiLCJnZXRFT0JhbmRzIiwic2luZ2xlQmFuZE5hbWUiLCJhdmFpbGFibGVQcmVzZXRzIiwiZmlsdGVyQXZhaWxhYmxlUHJlc2V0cyIsIlBSRVNFVF9PUFRJT05TIiwiaW5jbHVkZXMiLCJ2aXNDb25maWdTZXR0aW5ncyIsImRlZmF1bHRWYWx1ZSIsImNvbG9yRGVmYXVsdHMiLCJEQVRBX1NPVVJDRV9DT0xPUl9ERUZBVUxUUyIsIm9uVmlld3BvcnRMb2FkIiwidGlsZXMiLCJ1cGRhdGVNaW5NYXhQaXhlbFZhbHVlIiwibmV3WlJhbmdlIiwiY29tcHV0ZVpSYW5nZSIsIl9nZXRNaW5NYXhGcm9tVGlsZTJESCIsImdldE1pbk1heEZyb21UaWxlMkRIZWFkZXJzIiwiX2dldE1pbk1heEZyb21UaWxlMkRIMiIsIl9zbGljZWRUb0FycmF5MiIsIm1heCIsIm1pblZpZXdwb3J0UGl4ZWxWYWx1ZSIsIm1heFZpZXdwb3J0UGl4ZWxWYWx1ZSIsImdldE1pbk1heFBpeGVsVmFsdWVzIiwiaW1hZ2VzIiwibWluUGl4ZWxWYWx1ZSIsIm1heFBpeGVsVmFsdWUiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImltYWdlIiwiX2dldEltYWdlTWluTWF4IiwiZ2V0SW1hZ2VNaW5NYXgiLCJfZ2V0SW1hZ2VNaW5NYXgyIiwiZXJyIiwicmVuZGVyTGF5ZXIiLCJvcHRzIiwiX2RhdGEkZGF0YXNldCIsInJlbmRlclBNVGlsZXNMYXllciIsInJlbmRlclN0YWNMYXllciIsIl9kYXRhJGRhdGFzZXQyIiwiX3RoaXMyIiwiZXhwZXJpbWVudGFsQ29udGV4dCIsInN0YWNfdmVyc2lvbiIsIl90aGlzJGdldERlZmF1bHREZWNrTCIsImdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyIsIm9wYWNpdHkiLCJ2aXNpYmxlIiwiaGFzU2hhZG93RWZmZWN0IiwiY29sb3JtYXBJZCIsImxpbmVhclJlc2NhbGluZyIsImxpbmVhclJlc2NhbGluZ0ZhY3RvciIsIm5vbkxpbmVhclJlc2NhbGluZyIsImdhbW1hQ29udHJhc3RGYWN0b3IiLCJzaWdtb2lkYWxDb250cmFzdEZhY3RvciIsInNpZ21vaWRhbEJpYXNGYWN0b3IiLCJzYXR1cmF0aW9uVmFsdWUiLCJmaWx0ZXJFbmFibGVkIiwiZmlsdGVyUmFuZ2UiLCJzdGFjU2VhcmNoUHJvdmlkZXIiLCJzdGFydERhdGUiLCJlbmREYXRlIiwiX3N0YWNRdWVyeSIsImNhdGVnb3JpY2FsQ29sb3JNYXAiLCJjb2xvck1hcCIsImR5bmFtaWNDb2xvciIsInNob3VsZExvYWRUZXJyYWluIiwiRGF0ZSIsImJhbmRDb21iaW5hdGlvbiIsImdldFNpbmdsZUJhbmRQcmVzZXRPcHRpb25zIiwiZGF0YVNvdXJjZVBhcmFtcyIsIm1pblpvb20iLCJtYXhab29tIiwiZ2xvYmFsQm91bmRzIiwibG9hZEFzc2V0SWRzIiwibG9hZEJhbmRJbmRleGVzIiwicmVuZGVyQmFuZEluZGV4ZXMiLCJkYXRhVHlwZSIsImRzTWluUGl4ZWxWYWx1ZSIsImRzTWF4UGl4ZWxWYWx1ZSIsIm1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlIiwibWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWUiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImdldFRpbGVEYXRhQ3VzdG9tUHJvcHMiLCJ0aWxlTGF5ZXIiLCJUaWxlTGF5ZXIiLCJ0aWxlU2l6ZSIsImdldFRpbGVEYXRhIiwiYXJncyIsImJpbmQiLCJyZW5kZXJTdWJMYXllcnMiLCJyZW5kZXJTdWJMYXllcnNTdGFjIiwibWF4UmVxdWVzdHMiLCJnZXRNYXhSZXF1ZXN0cyIsInVwZGF0ZVRyaWdnZXJzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlZmluZW1lbnRTdHJhdGVneSIsImhhc0NhdGVnb3JpY2FsQ29sb3JNYXAiLCJfZGF0YSRkYXRhc2V0MyIsIl90aGlzMyIsIl90aGlzJGdldERlZmF1bHREZWNrTDIiLCJzaG93VGlsZUJvcmRlcnMiLCJnZXRUaWxlRGF0YVBNVGlsZXMiLCJwaWNrYWJsZSIsImF1dG9IaWdobGlnaHQiLCJ6b29tT2Zmc2V0IiwicmVuZGVyU3ViTGF5ZXJzUE1UaWxlcyIsIl9nZXRUaWxlRGF0YSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3Byb3BzJGJib3giLCJ3ZXN0Iiwic291dGgiLCJlYXN0Iiwibm9ydGgiLCJ6b29tIiwiYXNzZXRSZXF1ZXN0cyIsInRlcnJhaW4iLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwiX3RlcnJhaW4iLCJfdGhpcyRnZXRNaW5NYXhQaXhlbFYiLCJfdGhpcyRnZXRNaW5NYXhQaXhlbFYyIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwiYmJveCIsImluZGV4IiwieiIsImJib3hJbnRlcnNlY3RzIiwiYWJydXB0IiwiZ2V0U1RBQ0ltYWdlUmVxdWVzdHMiLCJzZW50IiwidDAiLCJsb2FkVGVycmFpbiIsImJvdW5kc0Zvckdlb21ldHJ5Iiwic2lnbmFsIiwicmFzdGVyU2VydmVyTWF4UmV0cmllcyIsInJhc3RlclNlcnZlclJldHJ5RGVsYXkiLCJyYXN0ZXJTZXJ2ZXJTZXJ2ZXJFcnJvcnNUb1JldHJ5IiwicmFzdGVyU2VydmVyTWF4UGVyU2VydmVyUmVxdWVzdHMiLCJQcm9taXNlIiwiYWxsIiwibG9hZEltYWdlcyIsIm1pblZhbHVlIiwibWF4VmFsdWUiLCJpbWFnZUJhbmRzIiwidDEiLCJzdG9wIiwiX3giLCJfZ2V0VGlsZURhdGFQTVRpbGVzIiwiX2NhbGxlZTIiLCJfcHJvcHMkYmJveDIiLCJfeWllbGQkUHJvbWlzZSRhbGwzIiwiX3lpZWxkJFByb21pc2UkYWxsNCIsIl90aGlzJGdldE1pbk1heFBpeGVsVjMiLCJfdGhpcyRnZXRNaW5NYXhQaXhlbFY0IiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX3gyIiwiX3gzIiwiZmluZERlZmF1bHRMYXllclByb3BzIiwibmV3TGF5ZXJQcm9wIiwibGFiZWwiLCJLZXBsZXJMYXllciIsInRpbGUiLCJnbG9iYWxNaW5QaXhlbFZhbHVlIiwiZ2xvYmFsTWF4UGl4ZWxWYWx1ZSIsInRpbGVNaW5QaXhlbFZhbHVlIiwidGlsZU1heFBpeGVsVmFsdWUiLCJfZ2V0TW9kdWxlcyIsImdldE1vZHVsZXMiLCJtb2R1bGVzIiwibW9kdWxlUHJvcHMiLCJpZFN1ZmZpeCIsIlJhc3Rlck1lc2hMYXllciIsIm1lc2giLCJnZXRQb2x5Z29uT2Zmc2V0IiwiY29vcmRpbmF0ZVN5c3RlbSIsIkNPT1JESU5BVEVfU1lTVEVNIiwiTE5HTEFUIiwiZ2V0Q29sb3IiLCJSYXN0ZXJMYXllciIsIl9pbWFnZUNvb3JkaW5hdGVTeXN0ZW0iLCJDQVJURVNJQU4iLCJfcHJvcHMkZGF0YSIsIl9wcm9wcyR0aWxlIiwiX3Byb3BzJHRpbGUkYmJveCIsImxheWVycyIsIm1pbWVUeXBlIiwiZ2V0UmFzdGVyTGF5ZXJQTVRpbGVzIiwiYm9yZGVyQ29sb3IiLCJQYXRoTGF5ZXIiLCJnZXRQYXRoIiwiZCIsIndpZHRoTWluUGl4ZWxzIiwiaW1hZ2VSZ2JhIiwiX2dldE1vZHVsZXMyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci10aWxlL3Jhc3Rlci10aWxlLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU0sIExheWVyIGFzIERlY2tMYXllcn0gZnJvbSAnQGRlY2suZ2wvY29yZS90eXBlZCc7XG5pbXBvcnQge1RpbGVMYXllciwgR2VvQm91bmRpbmdCb3h9IGZyb20gJ0BkZWNrLmdsL2dlby1sYXllcnMvdHlwZWQnO1xuaW1wb3J0IHtQTVRpbGVzU291cmNlLCBQTVRpbGVzVGlsZVNvdXJjZX0gZnJvbSAnQGxvYWRlcnMuZ2wvcG10aWxlcyc7XG5pbXBvcnQge1RleHR1cmUyRFByb3BzfSBmcm9tICdAbHVtYS5nbC93ZWJnbCc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gvbWVtb2l6ZSc7XG5cbmltcG9ydCB7UGF0aExheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMvdHlwZWQnO1xuaW1wb3J0IHtEYXRhc2V0VHlwZSwgUE1UaWxlc1R5cGUsIExBWUVSX1RZUEVTfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1Jhc3RlckxheWVyLCBSYXN0ZXJNZXNoTGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWxheWVycyc7XG5pbXBvcnQge1xuICBMYXllckJhc2VDb25maWcsXG4gIExheWVyQ29sb3JDb25maWcsXG4gIExheWVySGVpZ2h0Q29uZmlnLFxuICBWaXN1YWxDaGFubmVsLFxuICBWaXNDb25maWdDb2xvclJhbmdlLFxuICBWaXNDb25maWdTZWxlY3Rpb24sXG4gIFZpc0NvbmZpZ0Jvb2xlYW4sXG4gIFZpc0NvbmZpZ0lucHV0LFxuICBWaXNDb25maWdSYW5nZSxcbiAgVmlzQ29uZmlnTnVtYmVyXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtEYXRhc2V0cywgS2VwbGVyVGFibGUgYXMgS2VwbGVyRGF0YXNldCwgVmVjdG9yVGlsZU1ldGFkYXRhfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7Z2V0QXBwbGljYXRpb25Db25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge3Jhc3RlclZpc0NvbmZpZ3MsIFBSRVNFVF9PUFRJT05TLCBEQVRBX1NPVVJDRV9DT0xPUl9ERUZBVUxUU30gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtnZXRNb2R1bGVzfSBmcm9tICcuL2dwdS11dGlscyc7XG5pbXBvcnQge2dldFNUQUNJbWFnZVJlcXVlc3RzLCBsb2FkSW1hZ2VzLCBsb2FkVGVycmFpbn0gZnJvbSAnLi9pbWFnZSc7XG5pbXBvcnQgUmFzdGVySWNvbiBmcm9tICcuL3Jhc3Rlci10aWxlLWljb24nO1xuaW1wb3J0IHtcbiAgZ2V0RGF0YVNvdXJjZVBhcmFtcyxcbiAgZ2V0TWF4UmVxdWVzdHMsXG4gIGJib3hJbnRlcnNlY3RzLFxuICBjb21wdXRlWlJhbmdlLFxuICBnZXRTVEFDQm91bmRzLFxuICBnZXRFT0JhbmRzLFxuICBmaWx0ZXJBdmFpbGFibGVQcmVzZXRzLFxuICBnZXRTaW5nbGVCYW5kUHJlc2V0T3B0aW9ucyxcbiAgZ2V0SW1hZ2VNaW5NYXgsXG4gIGdldE1pbk1heEZyb21UaWxlMkRIZWFkZXJzXG59IGZyb20gJy4vcmFzdGVyLXRpbGUtdXRpbHMnO1xuaW1wb3J0IHtcbiAgR2V0VGlsZURhdGFDdXN0b21Qcm9wcyxcbiAgR2V0VGlsZURhdGFEZWZhdWx0UHJvcHMsXG4gIEdldFRpbGVEYXRhUHJvcHMsXG4gIFJlbmRlclN1YkxheWVyc1Byb3BzLFxuICBHZXRUaWxlRGF0YU91dHB1dCxcbiAgRGF0YVNvdXJjZVBhcmFtcyxcbiAgS2VwbGVyUmFzdGVyRGF0YXNldCxcbiAgVGlsZTJESGVhZGVyLFxuICBQcmVzZXRPcHRpb24sXG4gIENvbXBsZXRlU1RBQ09iamVjdFxufSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHtGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZX0gZnJvbSAnLi4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIEtlcGxlckxheWVyLCBMYXllckJhc2VDb25maWdQYXJ0aWFsfSBmcm9tICcuLi9iYXNlLWxheWVyJztcblxuLy8gQWRqdXN0IHRpbGVTaXplIHRvIGRldmljZVBpeGVsUmF0aW8sIGJ1dCBub3QgaGlnaGVyIHRoYW4gMiB0byByZWR1Y2UgcmVxdWVzdHMgdG8gc2VydmVyXG5jb25zdCBkZXZpY2VQaXhlbFJhdGlvOiBudW1iZXIgPSBNYXRoLm1pbihcbiAgMixcbiAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSB8fCAxXG4pO1xuXG4vLyBHbG9iYWwgY291bnRlciB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiB0aWxlcyBjdXJyZW50bHkgYmVpbmcgbG9hZGVkIGFjcm9zcyBhbGwgdGhlIHJhc3RlciB0aWxlIGxheWVyc1xubGV0IHRpbGVzQmVpbmdMb2FkZWQgPSAwO1xuXG4vLyBUaGlzIGlzIGEgdGVtcCBzb2x1dGlvbiB0byB0cmFjayBsb2FkaW5nXG5leHBvcnQgY29uc3QgZ2V0TnVtUmFzdGVyVGlsZXNCZWluZ0xvYWRlZCA9ICgpID0+IHtcbiAgcmV0dXJuIHRpbGVzQmVpbmdMb2FkZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgTE9BRF9FTEVWQVRJT05fQUZURVJfWk9PTSA9IDguOTtcblxuY29uc3QgZ2V0U2hvdWxkTG9hZFRlcnJhaW4gPSAoc3RhYywgbWFwU3RhdGUsIHZpc0NvbmZpZykgPT4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICAvLyB3ZSBuZWVkIGEgcmFzdGVyIHRpbGUgc2VydmVyIGZvciBlbGV2YXRpb25zIGV2ZW4gd2hlbiB3ZSB1c2VyIFBNVGlsZXNcbiAgICBzdGFjLnJhc3RlclRpbGVTZXJ2ZXJVcmxzPy5sZW5ndGggPiAwICYmXG4gICAgICAvLyBjaGVjayB0aGUgc3dpdGNoIGZyb20gdGhlIGxheWVyIGNvbmZpZ3VyYXRvclxuICAgICAgdmlzQ29uZmlnLmVuYWJsZVRlcnJhaW4gJiZcbiAgICAgIC8vIGRpc2FibGVkIGluIFRvcCB2aWV3IGJ5IGRlZmF1bHRcbiAgICAgIChtYXBTdGF0ZS5kcmFnUm90YXRlIHx8IHZpc0NvbmZpZy5lbmFibGVUZXJyYWluVG9wVmlldykgJiZcbiAgICAgIChzdGFjLnJhc3RlclNlcnZlclN1cHBvcnRzRWxldmF0aW9uID8/IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkucmFzdGVyU2VydmVyU3VwcG9ydHNFbGV2YXRpb24pXG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBSYXN0ZXJUaWxlTGF5ZXJWaXNDb25maWdDb21tb25TZXR0aW5ncyA9IHtcbiAgb3BhY2l0eTogVmlzQ29uZmlnTnVtYmVyO1xuICBlbmFibGVUZXJyYWluOiBWaXNDb25maWdCb29sZWFuO1xuICBlbmFibGVUZXJyYWluVG9wVmlldzogVmlzQ29uZmlnQm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFJhc3RlclRpbGVMYXllclZpc0NvbmZpZ1NldHRpbmdzID0gUmFzdGVyVGlsZUxheWVyVmlzQ29uZmlnQ29tbW9uU2V0dGluZ3MgJiB7XG4gIHByZXNldDogVmlzQ29uZmlnU2VsZWN0aW9uO1xuICB1c2VTVEFDU2VhcmNoaW5nOiBWaXNDb25maWdCb29sZWFuO1xuICBzdGFjU2VhcmNoUHJvdmlkZXI6IFZpc0NvbmZpZ1NlbGVjdGlvbjtcbiAgc3RhcnREYXRlOiBWaXNDb25maWdJbnB1dDtcbiAgZW5kRGF0ZTogVmlzQ29uZmlnSW5wdXQ7XG4gIGR5bmFtaWNDb2xvcjogVmlzQ29uZmlnQm9vbGVhbjtcbiAgY29sb3JtYXBJZDogVmlzQ29uZmlnU2VsZWN0aW9uO1xuICBjb2xvclJhbmdlOiBWaXNDb25maWdDb2xvclJhbmdlO1xuICBsaW5lYXJSZXNjYWxpbmdGYWN0b3I6IFZpc0NvbmZpZ1JhbmdlO1xuICBub25MaW5lYXJSZXNjYWxpbmc6IFZpc0NvbmZpZ0Jvb2xlYW47XG4gIGdhbW1hQ29udHJhc3RGYWN0b3I6IFZpc0NvbmZpZ051bWJlcjtcbiAgc2lnbW9pZGFsQ29udHJhc3RGYWN0b3I6IFZpc0NvbmZpZ051bWJlcjtcbiAgc2lnbW9pZGFsQmlhc0ZhY3RvcjogVmlzQ29uZmlnTnVtYmVyO1xuICBzYXR1cmF0aW9uVmFsdWU6IFZpc0NvbmZpZ051bWJlcjtcbiAgZmlsdGVyRW5hYmxlZDogVmlzQ29uZmlnQm9vbGVhbjtcbiAgZmlsdGVyUmFuZ2U6IFZpc0NvbmZpZ1JhbmdlO1xuICBfc3RhY1F1ZXJ5OiBWaXNDb25maWdJbnB1dDtcbiAgc2luZ2xlQmFuZE5hbWU6IFZpc0NvbmZpZ1NlbGVjdGlvbjtcbn07XG5cbnR5cGUgUmFzdGVyVGlsZUxheWVyTWV0YSA9IHtcbiAgelJhbmdlOiBudW1iZXJbXSB8IG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSYXN0ZXJUaWxlTGF5ZXIgZXh0ZW5kcyBLZXBsZXJMYXllciB7XG4gIGRlY2xhcmUgdmlzQ29uZmlnU2V0dGluZ3M6IFJhc3RlclRpbGVMYXllclZpc0NvbmZpZ1NldHRpbmdzO1xuICBkZWNsYXJlIG1ldGE6IFJhc3RlclRpbGVMYXllck1ldGE7XG5cbiAgLyoqIE1pbiBiYW5kcyBpbWFnZSBkYXRhIHZhbHVlLCBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3cG9ydCAqL1xuICBtaW5WaWV3cG9ydFBpeGVsVmFsdWUgPSBJbmZpbml0eTtcbiAgLyoqIE1heCBiYW5kcyBpbWFnZSBkYXRhIHZhbHVlLCBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3cG9ydCAqL1xuICBtYXhWaWV3cG9ydFBpeGVsVmFsdWUgPSAtSW5maW5pdHk7XG4gIC8qKiBNZW1vaXplZCBtZXRob2QgdGhhdCBjYWxjdWxhdGVzIGRhdGEgc291cmNlIHBhcmFtcyAqL1xuXG4gIGdldERhdGFTb3VyY2VQYXJhbXM6IChcbiAgICBzdGFjOiBDb21wbGV0ZVNUQUNPYmplY3QsXG4gICAgcHJlc2V0OiBzdHJpbmcsXG4gICAgcHJlc2V0T3B0aW9uczogUHJlc2V0T3B0aW9uXG4gICkgPT4gRGF0YVNvdXJjZVBhcmFtcyB8IG51bGw7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyhyYXN0ZXJWaXNDb25maWdzKTtcblxuICAgIC8vIE5vIHR3byBTVEFDIGlkcyBtYXkgYmUgdGhlIHNhbWUgd2l0aGluIGEgc2luZ2xlIGNvbGxlY3Rpb24sIHRob3VnaCBpdCdzIGNvbmNlaXZhYmx5IHBvc3NpYmxlXG4gICAgLy8gYWNyb3NzIG11bHRpcGxlIFNUQUMgY29sbGVjdGlvbnMgdGhlcmUgY291bGQgYmUgYW4gaWQgY29sbGlzaW9uLiBOb3RlOiBTVEFDIENvbGxlY3Rpb25cbiAgICAvLyBvYmplY3RzIGRvbid0IGhhdmUgYSBgY29sbGVjdGlvbmAga2V5OyBTVEFDIEl0ZW0gb2JqZWN0cyBoYXZlIGEgYGNvbGxlY3Rpb25gIGtleSAod2hpY2hcbiAgICAvLyBtYXRjaGVzIHRoZSBjb2xsZWN0aW9uJ3MgYGlkYCkuXG4gICAgY29uc3QgcmVzb2x2ZXIgPSAoc3RhYzogQ29tcGxldGVTVEFDT2JqZWN0LCBwcmVzZXQ6IHN0cmluZywgcHJlc2V0T3B0aW9uczogUHJlc2V0T3B0aW9uKSA9PlxuICAgICAgYCR7c3RhYy5pZH0tJHtzdGFjLmNvbGxlY3Rpb259LSR7cHJlc2V0fS0ke3ByZXNldE9wdGlvbnMuc2luZ2xlQmFuZD8uYXNzZXRJZH0tJHtwcmVzZXRPcHRpb25zLnNpbmdsZUJhbmQ/LmJhbmRJbmRleH1gO1xuICAgIHRoaXMuZ2V0RGF0YVNvdXJjZVBhcmFtcyA9IG1lbW9pemUoXG4gICAgICAoc3RhYywgcHJlc2V0LCBwcmVzZXRPcHRpb25zKSA9PiBnZXREYXRhU291cmNlUGFyYW1zKHN0YWMsIHByZXNldCwgcHJlc2V0T3B0aW9ucyksXG4gICAgICByZXNvbHZlclxuICAgICk7XG5cbiAgICB0aGlzLm1ldGEgPSB7elJhbmdlOiBudWxsfTtcbiAgfVxuXG4gIHN0YXRpYyBmaW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldDogS2VwbGVyRGF0YXNldCk6IEZpbmREZWZhdWx0TGF5ZXJQcm9wc1JldHVyblZhbHVlIHtcbiAgICBpZiAoZGF0YXNldC50eXBlICE9PSBEYXRhc2V0VHlwZS5SQVNURVJfVElMRSkge1xuICAgICAgcmV0dXJuIHtwcm9wczogW119O1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0xheWVyUHJvcCA9IHtcbiAgICAgIGRhdGFJZDogZGF0YXNldC5pZCxcbiAgICAgIGxhYmVsOiBkYXRhc2V0LmxhYmVsLFxuICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgfTtcblxuICAgIHJldHVybiB7cHJvcHM6IFtuZXdMYXllclByb3BdfTtcbiAgfVxuXG4gIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIExBWUVSX1RZUEVTLnJhc3RlclRpbGU7XG4gIH1cblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnUmFzdGVyIFRpbGUnO1xuICB9XG5cbiAgZ2V0IGxheWVySWNvbigpOiBLZXBsZXJMYXllclsnbGF5ZXJJY29uJ10ge1xuICAgIHJldHVybiBSYXN0ZXJJY29uO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRlZERhdGFzZXRUeXBlcygpOiBEYXRhc2V0VHlwZVtdIHtcbiAgICByZXR1cm4gW0RhdGFzZXRUeXBlLlJBU1RFUl9USUxFXTtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpOiBSZWNvcmQ8c3RyaW5nLCBWaXN1YWxDaGFubmVsPiB7XG4gICAgY29uc3Qge1xuICAgICAgdmlzQ29uZmlnOiB7XG4gICAgICAgIGNvbG9yUmFuZ2U6IHtjb2xvckxlZ2VuZHM6IGNhdGVnb3JpY2FsQ29sb3JMZWdlbmRzfVxuICAgICAgfVxuICAgIH0gPSB0aGlzLmNvbmZpZztcbiAgICBpZiAoY2F0ZWdvcmljYWxDb2xvckxlZ2VuZHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBzdXBlci52aXN1YWxDaGFubmVscy5jb2xvclxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIGdldCByZXF1aXJlRGF0YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhcbiAgICBwcm9wczogTGF5ZXJCYXNlQ29uZmlnUGFydGlhbFxuICApOiBMYXllckJhc2VDb25maWcgJiBQYXJ0aWFsPExheWVyQ29sb3JDb25maWcgJiBMYXllckhlaWdodENvbmZpZz4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci5nZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMpLFxuICAgICAgY29sb3JGaWVsZDoge1xuICAgICAgICBhbmFseXplclR5cGU6ICcnLFxuICAgICAgICBuYW1lOiAnQ2F0ZWdvcnknLFxuICAgICAgICBmb3JtYXQ6ICcnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZmllbGRJZHg6IC0xLFxuICAgICAgICB2YWx1ZUFjY2Vzc29yOiAoKSA9PiAnJyxcbiAgICAgICAgZGlzcGxheU5hbWU6ICdDYXRlZ29yeSdcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2V0SG92ZXJEYXRhKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gV2UgY2FuIHJlbmRlciB3aXRob3V0IGNvbHVtbnMsIHNvIHdlIHJlZGVmaW5lIHRoaXMgbWV0aG9kXG4gIHNob3VsZFJlbmRlckxheWVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMudHlwZSAmJiB0aGlzLmNvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzOiBEYXRhc2V0cywgb2xkTGF5ZXJEYXRhPzogYW55KSB7XG4gICAgY29uc3Qge2RhdGFJZH0gPSB0aGlzLmNvbmZpZztcbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZChkYXRhSWQpKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gICAgLy8gY2FsbCB1cGRhdGVEYXRhIHRvIHVwZGF0ZUxheWVyTWV0YVxuICAgIGNvbnN0IGRhdGFVcGRhdGVUcmlnZ2VycyA9IHRoaXMuZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzKGRhdGFzZXQpO1xuICAgIGNvbnN0IHRyaWdnZXJDaGFuZ2VkID0gdGhpcy5nZXRDaGFuZ2VkVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzKTtcblxuICAgIGlmICh0cmlnZ2VyQ2hhbmdlZCAmJiB0cmlnZ2VyQ2hhbmdlZC5nZXRNZXRhKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyTWV0YShkYXRhc2V0IGFzIEtlcGxlclJhc3RlckRhdGFzZXQpO1xuICAgIH1cblxuICAgIGxldCB0aWxlU291cmNlOiBQTVRpbGVzVGlsZVNvdXJjZSB8IG51bGwgPSBudWxsO1xuICAgIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5wbXRpbGVzVHlwZSA9PT0gUE1UaWxlc1R5cGUuUkFTVEVSKSB7XG4gICAgICBjb25zdCBtZXRhZGF0YVVybCA9IGRhdGFzZXQubWV0YWRhdGEubWV0YWRhdGFVcmw7XG4gICAgICAvLyB1c2UgdGhlIG9sZCB0aWxlIHNvdXJjZSBpZiBpdCBleGlzdHMgYW5kIG1hdGNoZXMgdGhlIG5ldyBtZXRhZGF0YVVybFxuICAgICAgY29uc3Qge2RhdGFzZXQ6IG9sZERhdGFzZXQsIHRpbGVTb3VyY2U6IG9sZFRpbGVTb3VyY2V9ID0gb2xkTGF5ZXJEYXRhIHx8IHt9O1xuICAgICAgaWYgKG9sZERhdGFzZXQgPT09IGRhdGFzZXQgJiYgb2xkVGlsZVNvdXJjZT8uZGF0YSA9PT0gbWV0YWRhdGFVcmwpIHtcbiAgICAgICAgdGlsZVNvdXJjZSA9IG9sZExheWVyRGF0YS50aWxlU291cmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGlsZVNvdXJjZSA9IG1ldGFkYXRhVXJsID8gUE1UaWxlc1NvdXJjZS5jcmVhdGVEYXRhU291cmNlKG1ldGFkYXRhVXJsLCB7fSkgOiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7ZGF0YXNldCwgdGlsZVNvdXJjZX07XG4gIH1cblxuICB1cGRhdGVMYXllck1ldGEoZGF0YXNldDogS2VwbGVyUmFzdGVyRGF0YXNldCk6IHZvaWQge1xuICAgIGlmIChkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLlJBU1RFUl9USUxFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhYyA9IGRhdGFzZXQubWV0YWRhdGE7XG4gICAgaWYgKHN0YWMucG10aWxlc1R5cGUgPT09IFBNVGlsZXNUeXBlLlJBU1RFUikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTWV0YSh7XG4gICAgICAgIGJvdW5kczogc3RhYy5ib3VuZHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJvdW5kcyA9IGdldFNUQUNCb3VuZHMoc3RhYyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgLy8gSWYgYSBTVEFDIEl0ZW0gKGkuZS4gc3RhYy50eXBlID09PSAnRmVhdHVyZScpLCB0aGVuIHNldCBtYXAgYm91bmRzLlxuICAgICAgLy8gQnV0IHdlIGRvbid0IHdhbnQgdG8gc2V0IGJvdW5kcyBmb3IgTGFuZHNhdCBvciBTZW50aW5lbCBiZWNhdXNlIGl0IHdvdWxkIHpvb20gb3V0IHRvIHpvb21cbiAgICAgIC8vIDAsIGFuZCB3ZSBkb24ndCBoYXZlIGxvdy16b29tIHRpbGVzLlxuICAgICAgaWYgKHN0YWMudHlwZSA9PT0gJ0ZlYXR1cmUnKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTWV0YSh7Ym91bmRzfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1biB3aGVuIGFkZGluZyBhIG5ldyBkYXRhc2V0XG4gICAqL1xuICBzZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldDogS2VwbGVyRGF0YXNldCk6IFJhc3RlclRpbGVMYXllciB7XG4gICAgY29uc3Qgc3RhYyA9IGRhdGFzZXQ/Lm1ldGFkYXRhIGFzIEdldFRpbGVEYXRhQ3VzdG9tUHJvcHNbJ3N0YWMnXTtcblxuICAgIGlmICghc3RhYykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHN0YWMucG10aWxlc1R5cGUgPT09IFBNVGlsZXNUeXBlLlJBU1RFUikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gV2hlbiBhIFNUQUMgQ29sbGVjdGlvbiBpcyBhZGRlZCwgdXNlU3RhY1NlYXJjaGluZyBzaG91bGQgYmUgdHJ1ZSB0byBwcmV2ZW50IGEgYmxhY2sgc2NyZWVuXG4gICAgdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh7XG4gICAgICB1c2VTVEFDU2VhcmNoaW5nOiBzdGFjLnR5cGUgPT09ICdDb2xsZWN0aW9uJ1xuICAgIH0pO1xuXG4gICAgLy8gU2V0IHNpbmdsZUJhbmROYW1lIGlmIHRoZXJlIGlzIG9ubHkgb25lIGJhbmRcbiAgICBjb25zdCBhdmFpbGFibGVCYW5kcyA9IGdldEVPQmFuZHMoc3RhYykgfHwgW107XG4gICAgaWYgKGF2YWlsYWJsZUJhbmRzPy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe3NpbmdsZUJhbmROYW1lOiBhdmFpbGFibGVCYW5kc1swXS5uYW1lfSk7XG4gICAgfVxuXG4gICAgLy8gQ2hhbmdlIHRoZSBwcmVzZXQgaWYgdGhlIGRlZmF1bHQgb25lIGlzIG5vdCBhbGxvd2VkXG4gICAgY29uc3QgYXZhaWxhYmxlUHJlc2V0cyA9IGZpbHRlckF2YWlsYWJsZVByZXNldHMoc3RhYywgUFJFU0VUX09QVElPTlMpO1xuICAgIGlmIChcbiAgICAgIGF2YWlsYWJsZVByZXNldHM/Lmxlbmd0aCAmJlxuICAgICAgIWF2YWlsYWJsZVByZXNldHM/LmluY2x1ZGVzKHRoaXMudmlzQ29uZmlnU2V0dGluZ3MucHJlc2V0LmRlZmF1bHRWYWx1ZSBhcyBzdHJpbmcpXG4gICAgKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtwcmVzZXQ6IGF2YWlsYWJsZVByZXNldHNbMF19KTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBpbXByb3ZlZCBpbWFnZSBwcm9jZXNzaW5nIHByb3BzIG9ubHkgZm9yIG5vbiBzaW5nbGUgYmFuZCBtb2Rlc1xuICAgIGNvbnN0IHByZXNldCA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5wcmVzZXQ7XG4gICAgY29uc3QgY29sb3JEZWZhdWx0cyA9IERBVEFfU09VUkNFX0NPTE9SX0RFRkFVTFRTW3N0YWMuaWRdO1xuICAgIGlmIChjb2xvckRlZmF1bHRzICYmIHByZXNldCAhPT0gJ3NpbmdsZUJhbmQnKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKGNvbG9yRGVmYXVsdHMpO1xuICAgIH1cblxuICAgIC8qXG4gICAgTGFuZFNhdCBzcGVjaWZpZXMgdGVtcG9yYWwgYm91bmRzIGJ1dCB0aGUgdmFsaWQgZGF0YSBpcyBhZnRlciBlbmQgZGF0ZVxuICAgIGNvbnN0IHVwZGF0ZWREYXRlcyA9IHRpbWVSYW5nZVRvU3RhY1RlbXBvcmFsSW50ZXJ2YWwoXG4gICAgICBzdGFjIGFzIFN0YWNUeXBlcy5TVEFDQ29sbGVjdGlvbixcbiAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5zdGFydERhdGUsXG4gICAgICB0aGlzLmNvbmZpZy52aXNDb25maWcuZW5kRGF0ZVxuICAgICk7XG4gICAgdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh1cGRhdGVkRGF0ZXMpO1xuICAgICovXG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgelJhbmdlIG9mIHZpZXdwb3J0LiBUaGlzIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IHRpbGVzIGluIGV4dHJ1ZGVkIG1vZGUgYXJlIHNob3duIHByb3Blcmx5XG4gICAqIGF0IGhpZ2ggZWxldmF0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2ZvdXJzcXVhcmUvc3R1ZGlvLW1vbm9yZXBvL3B1bGwvMTg5Mi9maWxlc1xuICAgKiBEZXJpdmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Zpc2dsL2RlY2suZ2wvYmxvYi84ZDgyNGE0YjgzNmZlZTNiZmViZTZmYzk2MmUwZjAzZDhjMWRiZDBkL21vZHVsZXMvZ2VvLWxheWVycy9zcmMvdGVycmFpbi1sYXllci90ZXJyYWluLWxheWVyLmpzI0wxNzMtTDE5NlxuICAgKlxuICAgKiBAcGFyYW0gdGlsZXMgQXJyYXkgb2YgdGlsZXMgaW4gY3VycmVudCB2aWV3cG9ydFxuICAgKi9cbiAgb25WaWV3cG9ydExvYWQodGlsZXM6IChUaWxlMkRIZWFkZXIgfCBudWxsKVtdKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVNaW5NYXhQaXhlbFZhbHVlKHRpbGVzKTtcbiAgICBjb25zdCBuZXdaUmFuZ2UgPSBjb21wdXRlWlJhbmdlKHRpbGVzKTtcbiAgICBpZiAoIW5ld1pSYW5nZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHt6UmFuZ2V9ID0gdGhpcy5tZXRhO1xuICAgIGlmICghelJhbmdlIHx8IG5ld1pSYW5nZVswXSA8IHpSYW5nZVswXSB8fCBuZXdaUmFuZ2VbMV0gPiB6UmFuZ2VbMV0pIHtcbiAgICAgIHRoaXMubWV0YS56UmFuZ2UgPSBuZXdaUmFuZ2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB2aWV3cG9ydC1yZWxhdGVkIG1pblB4ZWxWYWx1ZSBhbmQgbWF4UGl4ZWxWYWx1ZVxuICAgKiBAcGFyYW0gdGlsZXMgLSBkZWNrLmdsIHRpbGVzXG4gICAqL1xuICB1cGRhdGVNaW5NYXhQaXhlbFZhbHVlKHRpbGVzOiAoVGlsZTJESGVhZGVyIHwgbnVsbClbXSk6IHZvaWQge1xuICAgIGNvbnN0IFttaW4sIG1heF0gPSBnZXRNaW5NYXhGcm9tVGlsZTJESGVhZGVycyh0aWxlcyk7XG4gICAgdGhpcy5taW5WaWV3cG9ydFBpeGVsVmFsdWUgPSBtaW47XG4gICAgdGhpcy5tYXhWaWV3cG9ydFBpeGVsVmFsdWUgPSBtYXg7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIG1pbiBhbmQgbWF4IHZhbHVlcyBvZiBpbnB1dCByYXN0ZXIgYmFuZCBpbWFnZSBwcm9wZXJ0aWVzXG4gICAqIGFuZCB1cGRhdGUgYG1pbkJhbmRzVmFsdWVgIGFuZCBgbWF4QmFuZHNWYWx1ZWBcbiAgICogQHBhcmFtIGltYWdlcyAtIHJhc3RlciBiYW5kIGltYWdlIHByb3BlcnRpZXNcbiAgICogQHJldHVybiBbbWluLCBtYXhdIHBpeGVsIHZhbHVlcyBmb3IgdGhlIHRpbGVcbiAgICovXG4gIGdldE1pbk1heFBpeGVsVmFsdWVzKGltYWdlczogVGV4dHVyZTJEUHJvcHNbXSB8IG51bGwpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICBsZXQgbWluUGl4ZWxWYWx1ZSA9IEluZmluaXR5O1xuICAgIGxldCBtYXhQaXhlbFZhbHVlID0gLUluZmluaXR5O1xuICAgIGlmIChpbWFnZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaW1hZ2Ugb2YgaW1hZ2VzKSB7XG4gICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSBnZXRJbWFnZU1pbk1heChpbWFnZS5kYXRhKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtaW4gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbWluUGl4ZWxWYWx1ZSA9IE1hdGgubWluKG1pbiwgbWluUGl4ZWxWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtYXggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbWF4UGl4ZWxWYWx1ZSA9IE1hdGgubWF4KG1heCwgbWF4UGl4ZWxWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFttaW5QaXhlbFZhbHVlLCBtYXhQaXhlbFZhbHVlXTtcbiAgfVxuXG4gIC8vIGdlbmVyYXRlIGEgZGVjayBsYXllclxuICByZW5kZXJMYXllcihvcHRzKTogVGlsZUxheWVyPGFueT5bXSB7XG4gICAgY29uc3Qge2RhdGF9ID0gb3B0cztcblxuICAgIGlmIChkYXRhPy5kYXRhc2V0Py5tZXRhZGF0YT8ucG10aWxlc1R5cGUgPT09IFBNVGlsZXNUeXBlLlJBU1RFUikge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUE1UaWxlc0xheWVyKG9wdHMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZW5kZXJTdGFjTGF5ZXIob3B0cyk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclN0YWNMYXllcihvcHRzKTogVGlsZUxheWVyPGFueT5bXSB7XG4gICAgY29uc3Qge2RhdGEsIG1hcFN0YXRlLCBleHBlcmltZW50YWxDb250ZXh0fSA9IG9wdHM7XG4gICAgY29uc3Qgc3RhYyA9IGRhdGE/LmRhdGFzZXQ/Lm1ldGFkYXRhIGFzIEdldFRpbGVEYXRhQ3VzdG9tUHJvcHNbJ3N0YWMnXTtcblxuICAgIC8vIElmIGEgdGFidWxhciBkYXRhc2V0IGlzIGxvYWRlZCwgYW5kIHRoZW4gdGhlIGxheWVyIHR5cGUgaXMgc3dpdGNoZWQgZnJvbSBQb2ludCB0byBSYXN0ZXIgVGlsZVxuICAgIC8vIGxheWVyLCB0aGlzIGBzdGFjYCBvYmplY3Qgd2lsbCBleGlzdCBidXQgd2lsbCBub3QgYmUgcmFzdGVyIG1ldGFkYXRhXG4gICAgaWYgKCFzdGFjIHx8ICFzdGFjLnN0YWNfdmVyc2lvbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHt2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge2lkLCBvcGFjaXR5LCB2aXNpYmxlfSA9IHRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuXG4gICAgY29uc3QgaGFzU2hhZG93RWZmZWN0ID0gZXhwZXJpbWVudGFsQ29udGV4dD8uaGFzU2hhZG93RWZmZWN0O1xuXG4gICAgY29uc3Qge1xuICAgICAgcHJlc2V0LFxuICAgICAgY29sb3JtYXBJZCxcbiAgICAgIGxpbmVhclJlc2NhbGluZyxcbiAgICAgIGxpbmVhclJlc2NhbGluZ0ZhY3RvcixcbiAgICAgIG5vbkxpbmVhclJlc2NhbGluZyxcbiAgICAgIGdhbW1hQ29udHJhc3RGYWN0b3IsXG4gICAgICBzaWdtb2lkYWxDb250cmFzdEZhY3RvcixcbiAgICAgIHNpZ21vaWRhbEJpYXNGYWN0b3IsXG4gICAgICBzYXR1cmF0aW9uVmFsdWUsXG4gICAgICBmaWx0ZXJFbmFibGVkLFxuICAgICAgZmlsdGVyUmFuZ2UsXG4gICAgICB1c2VTVEFDU2VhcmNoaW5nLFxuICAgICAgc3RhY1NlYXJjaFByb3ZpZGVyLFxuICAgICAgc3RhcnREYXRlLFxuICAgICAgZW5kRGF0ZSxcbiAgICAgIF9zdGFjUXVlcnksXG4gICAgICBzaW5nbGVCYW5kTmFtZSxcbiAgICAgIGNvbG9yUmFuZ2U6IHtjb2xvck1hcDogY2F0ZWdvcmljYWxDb2xvck1hcH0sXG4gICAgICBkeW5hbWljQ29sb3JcbiAgICB9ID0gdmlzQ29uZmlnO1xuXG4gICAgY29uc3Qgc2hvdWxkTG9hZFRlcnJhaW4gPSBnZXRTaG91bGRMb2FkVGVycmFpbihzdGFjLCBtYXBTdGF0ZSwgdmlzQ29uZmlnKTtcblxuICAgIGlmIChuZXcgRGF0ZShlbmREYXRlKSA8IG5ldyBEYXRlKHN0YXJ0RGF0ZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCB7YmFuZENvbWJpbmF0aW9ufSA9IFBSRVNFVF9PUFRJT05TW3ByZXNldF07XG5cbiAgICBjb25zdCBzaW5nbGVCYW5kID0gZ2V0U2luZ2xlQmFuZFByZXNldE9wdGlvbnMoc3RhYywgc2luZ2xlQmFuZE5hbWUpO1xuICAgIGNvbnN0IGRhdGFTb3VyY2VQYXJhbXM6IERhdGFTb3VyY2VQYXJhbXMgfCBudWxsID0gdGhpcy5nZXREYXRhU291cmNlUGFyYW1zKHN0YWMsIHByZXNldCwge1xuICAgICAgc2luZ2xlQmFuZFxuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhU291cmNlUGFyYW1zKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgbWluWm9vbSxcbiAgICAgIG1heFpvb20sXG4gICAgICBnbG9iYWxCb3VuZHMsXG4gICAgICBsb2FkQXNzZXRJZHMsXG4gICAgICBsb2FkQmFuZEluZGV4ZXMsXG4gICAgICByZW5kZXJCYW5kSW5kZXhlcyxcbiAgICAgIGRhdGFUeXBlLFxuICAgICAgbWluUGl4ZWxWYWx1ZTogZHNNaW5QaXhlbFZhbHVlLFxuICAgICAgbWF4UGl4ZWxWYWx1ZTogZHNNYXhQaXhlbFZhbHVlLFxuICAgICAgbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWUsXG4gICAgICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZVxuICAgIH0gPSBkYXRhU291cmNlUGFyYW1zO1xuXG4gICAgY29uc3QgbWluUGl4ZWxWYWx1ZSA9XG4gICAgICAhZHluYW1pY0NvbG9yICYmIE51bWJlci5pc0Zpbml0ZShkc01pblBpeGVsVmFsdWUpXG4gICAgICAgID8gZHNNaW5QaXhlbFZhbHVlXG4gICAgICAgIDogdGhpcy5taW5WaWV3cG9ydFBpeGVsVmFsdWU7XG4gICAgY29uc3QgbWF4UGl4ZWxWYWx1ZSA9XG4gICAgICAhZHluYW1pY0NvbG9yICYmIE51bWJlci5pc0Zpbml0ZShkc01heFBpeGVsVmFsdWUpXG4gICAgICAgID8gZHNNYXhQaXhlbFZhbHVlXG4gICAgICAgIDogdGhpcy5tYXhWaWV3cG9ydFBpeGVsVmFsdWU7XG5cbiAgICBjb25zdCBnZXRUaWxlRGF0YUN1c3RvbVByb3BzOiBHZXRUaWxlRGF0YUN1c3RvbVByb3BzID0ge1xuICAgICAgc3RhYyxcbiAgICAgIGxvYWRBc3NldElkcyxcbiAgICAgIGxvYWRCYW5kSW5kZXhlcyxcbiAgICAgIGNvbG9ybWFwSWQsXG4gICAgICBzaG91bGRMb2FkVGVycmFpbixcbiAgICAgIGdsb2JhbEJvdW5kcyxcbiAgICAgIHVzZVNUQUNTZWFyY2hpbmcsXG4gICAgICBzdGFjU2VhcmNoUHJvdmlkZXIsXG4gICAgICBzdGFydERhdGUsXG4gICAgICBlbmREYXRlLFxuICAgICAgX3N0YWNRdWVyeSxcbiAgICAgIGNhdGVnb3JpY2FsQ29sb3JNYXAsXG4gICAgICBtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICAgIG1heENhdGVnb3JpY2FsQmFuZFZhbHVlXG4gICAgfTtcblxuICAgIGNvbnN0IHRpbGVMYXllciA9IG5ldyBUaWxlTGF5ZXI8YW55LCBSZW5kZXJTdWJMYXllcnNQcm9wcz4oe1xuICAgICAgaWQsXG4gICAgICBtaW5ab29tLFxuICAgICAgbWF4Wm9vbSxcbiAgICAgIHRpbGVTaXplOiA1MTIgLyBkZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgZ2V0VGlsZURhdGE6IChhcmdzOiBhbnkpID0+IHRoaXMuZ2V0VGlsZURhdGEoey4uLmFyZ3MsIC4uLmdldFRpbGVEYXRhQ3VzdG9tUHJvcHN9KSxcbiAgICAgIG9uVmlld3BvcnRMb2FkOiB0aGlzLm9uVmlld3BvcnRMb2FkLmJpbmQodGhpcyksXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gVFMgZG9lc24ndCBrbm93IHdlJ2xsIHBhc3MgYXBwcm9wcmlhdGUgcHJvcHMgaGVyZVxuICAgICAgcmVuZGVyU3ViTGF5ZXJzOiByZW5kZXJTdWJMYXllcnNTdGFjLFxuICAgICAgbWF4UmVxdWVzdHM6IGdldE1heFJlcXVlc3RzKHN0YWMucmFzdGVyVGlsZVNlcnZlclVybHMgfHwgW10pLFxuICAgICAgLy8gUGFzc2luZyB2aXNpYmxlIG9uIHRvIFRpbGVMYXllciBpcyBuZWNlc3NhcnkgZm9yIHNwbGl0IHZpZXcgdG8gd29ya1xuICAgICAgdmlzaWJsZSxcbiAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgIGdldFRpbGVEYXRhOiBbXG4gICAgICAgICAgc2hvdWxkTG9hZFRlcnJhaW4sXG4gICAgICAgICAgLy8gQ29sb3JtYXAgaGFzIGNoYW5nZWRcbiAgICAgICAgICBjb2xvcm1hcElkLFxuICAgICAgICAgIC8vIGFzc2V0cyB0byBiZSBsb2FkZWQgaGFzIGNoYW5nZWRcbiAgICAgICAgICAuLi5sb2FkQXNzZXRJZHMsXG4gICAgICAgICAgLy8gYmFuZCBpbmRleGVzIHRvIGJlIGxvYWRlZCBoYXMgY2hhbmdlZFxuICAgICAgICAgIC4uLmxvYWRCYW5kSW5kZXhlcyxcbiAgICAgICAgICB1c2VTVEFDU2VhcmNoaW5nLFxuICAgICAgICAgIHN0YWNTZWFyY2hQcm92aWRlcixcbiAgICAgICAgICBzdGFydERhdGUsXG4gICAgICAgICAgZW5kRGF0ZSxcbiAgICAgICAgICBfc3RhY1F1ZXJ5LFxuICAgICAgICAgIGNhdGVnb3JpY2FsQ29sb3JNYXAsXG4gICAgICAgICAgbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWUsXG4gICAgICAgICAgbWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIFByb3BzIGZvciAzRCBtb2RlXG4gICAgICAuLi4oc2hvdWxkTG9hZFRlcnJhaW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICB6UmFuZ2U6IHRoaXMubWV0YS56UmFuZ2UgfHwgbnVsbCxcbiAgICAgICAgICAgIHJlZmluZW1lbnRTdHJhdGVneTogJ25vLW92ZXJsYXAnXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICAgIHJlbmRlckJhbmRJbmRleGVzLFxuICAgICAgb3BhY2l0eSxcbiAgICAgIGxpbmVhclJlc2NhbGluZyxcbiAgICAgIGxpbmVhclJlc2NhbGluZ0ZhY3RvcixcbiAgICAgIG5vbkxpbmVhclJlc2NhbGluZyxcbiAgICAgIG1pblBpeGVsVmFsdWUsXG4gICAgICBtYXhQaXhlbFZhbHVlLFxuICAgICAgZ2FtbWFDb250cmFzdEZhY3RvcixcbiAgICAgIHNpZ21vaWRhbENvbnRyYXN0RmFjdG9yLFxuICAgICAgc2lnbW9pZGFsQmlhc0ZhY3RvcixcbiAgICAgIHNhdHVyYXRpb25WYWx1ZSxcbiAgICAgIGJhbmRDb21iaW5hdGlvbixcbiAgICAgIGZpbHRlckVuYWJsZWQsXG4gICAgICBmaWx0ZXJSYW5nZSxcbiAgICAgIGRhdGFUeXBlLFxuICAgICAgbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWUsXG4gICAgICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICAgIGhhc0NhdGVnb3JpY2FsQ29sb3JNYXA6IEJvb2xlYW4oY2F0ZWdvcmljYWxDb2xvck1hcCksXG4gICAgICBoYXNTaGFkb3dFZmZlY3RcbiAgICB9KTtcblxuICAgIHJldHVybiBbdGlsZUxheWVyXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUE1UaWxlc0xheWVyKG9wdHMpOiBUaWxlTGF5ZXI8YW55PltdIHtcbiAgICBjb25zdCB7aWQsIG9wYWNpdHksIHZpc2libGV9ID0gdGhpcy5nZXREZWZhdWx0RGVja0xheWVyUHJvcHMob3B0cyk7XG5cbiAgICBjb25zdCB7ZGF0YSwgbWFwU3RhdGV9ID0gb3B0cztcbiAgICBjb25zdCBtZXRhZGF0YSA9IGRhdGE/LmRhdGFzZXQ/Lm1ldGFkYXRhIGFzIFZlY3RvclRpbGVNZXRhZGF0YTtcbiAgICBjb25zdCB7dmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgY29uc3QgdGlsZVNvdXJjZSA9IGRhdGEudGlsZVNvdXJjZTtcbiAgICBjb25zdCBzaG93VGlsZUJvcmRlcnMgPSBmYWxzZTtcbiAgICBjb25zdCBtaW5ab29tID0gbWV0YWRhdGEubWluWm9vbSB8fCAwO1xuICAgIGNvbnN0IG1heFpvb20gPSBtZXRhZGF0YS5tYXhab29tIHx8IDMwO1xuXG4gICAgY29uc3Qgc2hvdWxkTG9hZFRlcnJhaW4gPSBnZXRTaG91bGRMb2FkVGVycmFpbihtZXRhZGF0YSwgbWFwU3RhdGUsIHZpc0NvbmZpZyk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IFRpbGVMYXllcjxhbnksIFJhc3RlclRpbGVMYXllclZpc0NvbmZpZ0NvbW1vblNldHRpbmdzPih7XG4gICAgICAgIGlkLFxuICAgICAgICBnZXRUaWxlRGF0YTogKGFyZ3M6IGFueSkgPT5cbiAgICAgICAgICB0aGlzLmdldFRpbGVEYXRhUE1UaWxlcyh7Li4uYXJncywgc2hvdWxkTG9hZFRlcnJhaW4sIG1ldGFkYXRhfSwgdGlsZVNvdXJjZSksXG5cbiAgICAgICAgLy8gQXNzdW1lIHRoZSBwbXRpbGVzIGZpbGUgc3VwcG9ydCBIVFRQLzIsIHNvIHdlIGFyZW4ndCBsaW1pdGVkIGJ5IHRoZSBicm93c2VyIHRvIGEgY2VydGFpbiBudW1iZXIgcGVyIGRvbWFpbi5cbiAgICAgICAgbWF4UmVxdWVzdHM6IDIwLFxuXG4gICAgICAgIHBpY2thYmxlOiB0cnVlLFxuICAgICAgICBhdXRvSGlnaGxpZ2h0OiBzaG93VGlsZUJvcmRlcnMsXG5cbiAgICAgICAgb25WaWV3cG9ydExvYWQ6IHRoaXMub25WaWV3cG9ydExvYWQuYmluZCh0aGlzKSxcblxuICAgICAgICBtaW5ab29tLFxuICAgICAgICBtYXhab29tLFxuICAgICAgICB0aWxlU2l6ZTogNTEyIC8gZGV2aWNlUGl4ZWxSYXRpbyxcbiAgICAgICAgem9vbU9mZnNldDogZGV2aWNlUGl4ZWxSYXRpbyA9PT0gMSA/IC0xIDogMCxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTIGRvZXNuJ3Qga25vdyB3ZSdsbCBwYXNzIGFwcHJvcHJpYXRlIHByb3BzIGhlcmVcbiAgICAgICAgcmVuZGVyU3ViTGF5ZXJzOiByZW5kZXJTdWJMYXllcnNQTVRpbGVzLFxuXG4gICAgICAgIHRpbGVTb3VyY2UsXG4gICAgICAgIHNob3dUaWxlQm9yZGVycyxcblxuICAgICAgICB2aXNpYmxlLFxuICAgICAgICBvcGFjaXR5LFxuXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgZ2V0VGlsZURhdGE6IFtzaG91bGRMb2FkVGVycmFpbl1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gUHJvcHMgZm9yIDNEIG1vZGVcbiAgICAgICAgLi4uKHNob3VsZExvYWRUZXJyYWluXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHpSYW5nZTogdGhpcy5tZXRhLnpSYW5nZSB8fCBudWxsLFxuICAgICAgICAgICAgICByZWZpbmVtZW50U3RyYXRlZ3k6ICduby1vdmVybGFwJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9KVxuICAgIF07XG4gIH1cblxuICBhc3luYyBnZXRUaWxlRGF0YShwcm9wczogR2V0VGlsZURhdGFQcm9wcyk6IFByb21pc2U8R2V0VGlsZURhdGFPdXRwdXQ+IHtcbiAgICBjb25zdCB7XG4gICAgICBzaG91bGRMb2FkVGVycmFpbixcbiAgICAgIGdsb2JhbEJvdW5kcyxcbiAgICAgIGJib3g6IHt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGh9LFxuICAgICAgaW5kZXg6IHt6OiB6b29tfVxuICAgIH0gPSBwcm9wcztcblxuICAgIGlmIChnbG9iYWxCb3VuZHMgJiYgIWJib3hJbnRlcnNlY3RzKGdsb2JhbEJvdW5kcywgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0pKSB7XG4gICAgICAvLyB0aWxlIGlzIG91dHNpZGUgb2YgU1RBQyBvYmplY3QncyBib3VuZGluZyBib3g7IGRvbid0IGZldGNoIHRpbGVcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc2V0UmVxdWVzdHMgPSBhd2FpdCBnZXRTVEFDSW1hZ2VSZXF1ZXN0cyhwcm9wcyk7XG4gICAgLy8gTm8gYXNzZXRzIHRvIGxvYWQsIG1vc3QgbGlrZWx5IGR1ZSB0byBwcm9wcyBiZWluZyBpbnZhbGlkL3Vuc3VwcG9ydGVkXG4gICAgaWYgKCFhc3NldFJlcXVlc3RzKSB7XG4gICAgICAvLyBXZSBzdGlsbCBpc3N1ZSB0aGUgbG9hZFRlcnJhaW4gcmVxdWVzdCBpZiBhcHBsaWNhYmxlXG4gICAgICBjb25zdCB0ZXJyYWluID1cbiAgICAgICAgc2hvdWxkTG9hZFRlcnJhaW4gJiZcbiAgICAgICAgTE9BRF9FTEVWQVRJT05fQUZURVJfWk9PTSA8IHpvb20gJiZcbiAgICAgICAgKGF3YWl0IGxvYWRUZXJyYWluKHtcbiAgICAgICAgICBib3VuZHNGb3JHZW9tZXRyeTogW3dlc3QsIG5vcnRoLCBlYXN0LCBzb3V0aF0sXG4gICAgICAgICAgaW5kZXg6IHByb3BzLmluZGV4LFxuICAgICAgICAgIHNpZ25hbDogcHJvcHMuc2lnbmFsLFxuICAgICAgICAgIHJhc3RlclRpbGVTZXJ2ZXJVcmxzOiBwcm9wcy5zdGFjLnJhc3RlclRpbGVTZXJ2ZXJVcmxzIHx8IFtdLFxuICAgICAgICAgIHJhc3RlclNlcnZlck1heFJldHJpZXM6IHByb3BzLnN0YWMucmFzdGVyU2VydmVyTWF4UmV0cmllcyxcbiAgICAgICAgICByYXN0ZXJTZXJ2ZXJSZXRyeURlbGF5OiBwcm9wcy5zdGFjLnJhc3RlclNlcnZlclJldHJ5RGVsYXksXG4gICAgICAgICAgcmFzdGVyU2VydmVyU2VydmVyRXJyb3JzVG9SZXRyeTogcHJvcHMuc3RhYy5yYXN0ZXJTZXJ2ZXJTZXJ2ZXJFcnJvcnNUb1JldHJ5LFxuICAgICAgICAgIHJhc3RlclNlcnZlck1heFBlclNlcnZlclJlcXVlc3RzOiBwcm9wcy5zdGFjLnJhc3RlclNlcnZlck1heFBlclNlcnZlclJlcXVlc3RzXG4gICAgICAgIH0pKTtcbiAgICAgIHJldHVybiB7aW1hZ2VzOiBudWxsLCAuLi4odGVycmFpbiA/IHt0ZXJyYWlufSA6IHt9KX07XG4gICAgfVxuXG4gICAgdGlsZXNCZWluZ0xvYWRlZCsrO1xuXG4gICAgLy8gV3JhcCBsb2FkaW5nIGltYWdlcyBpbnRvIGEgdHJ5L2NhdGNoIGJlY2F1c2UgdGlsZXMgdGhhdCBhcmUgb25seSBicmllZmx5IGluIHZpZXcgd2lsbCBiZVxuICAgIC8vIGFib3J0ZWQuIFRoZSBgQWJvcnRDb250cm9sbGVyLmFib3J0KClgIGNyZWF0ZXMgYSBET01FeGNlcHRpb24gZXJyb3IuXG4gICAgLy8gTm90ZSB0aGF0IHNpbmNlIGxvYWRpbmcgaXMgYXN5bmMsIHRyeS9jYXRjaCB3aWxsIG9ubHkgd29yayB3aGVuIGF3YWl0ZWQgaW5zaWRlIHRoZSB0cnkgYmxvY2tcbiAgICB0cnkge1xuICAgICAgY29uc3QgW2ltYWdlcywgdGVycmFpbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGxvYWRJbWFnZXMoYXNzZXRSZXF1ZXN0cywgcHJvcHMuY29sb3JtYXBJZCwge1xuICAgICAgICAgIGNvbG9yTWFwOiBwcm9wcy5jYXRlZ29yaWNhbENvbG9yTWFwLFxuICAgICAgICAgIG1pblZhbHVlOiBwcm9wcy5taW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICAgICAgICBtYXhWYWx1ZTogcHJvcHMubWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWVcbiAgICAgICAgfSksXG4gICAgICAgIHNob3VsZExvYWRUZXJyYWluICYmIExPQURfRUxFVkFUSU9OX0FGVEVSX1pPT00gPCB6b29tXG4gICAgICAgICAgPyBsb2FkVGVycmFpbih7XG4gICAgICAgICAgICAgIGJvdW5kc0Zvckdlb21ldHJ5OiBbd2VzdCwgbm9ydGgsIGVhc3QsIHNvdXRoXSxcbiAgICAgICAgICAgICAgaW5kZXg6IHByb3BzLmluZGV4LFxuICAgICAgICAgICAgICBzaWduYWw6IHByb3BzLnNpZ25hbCxcbiAgICAgICAgICAgICAgcmFzdGVyVGlsZVNlcnZlclVybHM6IHByb3BzLnN0YWMucmFzdGVyVGlsZVNlcnZlclVybHMgfHwgW10sXG4gICAgICAgICAgICAgIHJhc3RlclNlcnZlck1heFJldHJpZXM6IHByb3BzLnN0YWMucmFzdGVyU2VydmVyTWF4UmV0cmllcyxcbiAgICAgICAgICAgICAgcmFzdGVyU2VydmVyUmV0cnlEZWxheTogcHJvcHMuc3RhYy5yYXN0ZXJTZXJ2ZXJSZXRyeURlbGF5LFxuICAgICAgICAgICAgICByYXN0ZXJTZXJ2ZXJTZXJ2ZXJFcnJvcnNUb1JldHJ5OiBwcm9wcy5zdGFjLnJhc3RlclNlcnZlclNlcnZlckVycm9yc1RvUmV0cnksXG4gICAgICAgICAgICAgIHJhc3RlclNlcnZlck1heFBlclNlcnZlclJlcXVlc3RzOiBwcm9wcy5zdGFjLnJhc3RlclNlcnZlck1heFBlclNlcnZlclJlcXVlc3RzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbFxuICAgICAgXSk7XG5cbiAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB0aGlzLmdldE1pbk1heFBpeGVsVmFsdWVzKGltYWdlcy5pbWFnZUJhbmRzKTtcbiAgICAgIHRpbGVzQmVpbmdMb2FkZWQtLTtcblxuICAgICAgLy8gQWRkIHRlcnJhaW4gZGF0YSBvbmx5IGlmIHdlIHJlcXVlc3RlZCBpdCBhYm92ZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW1hZ2VzLFxuICAgICAgICAuLi4odGVycmFpbiA/IHt0ZXJyYWlufSA6IHt9KSxcbiAgICAgICAgbWluUGl4ZWxWYWx1ZTogbWluLFxuICAgICAgICBtYXhQaXhlbFZhbHVlOiBtYXhcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRpbGVzQmVpbmdMb2FkZWQtLTtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgLy8gdGlsZSB3YXMgYWJvcnRlZFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gU29tZSBvdGhlciB1bmhhbmRsZWQgZXJyb3JcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFRpbGVEYXRhUE1UaWxlcyhcbiAgICBwcm9wczogR2V0VGlsZURhdGFEZWZhdWx0UHJvcHMgJiB7XG4gICAgICBzaG91bGRMb2FkVGVycmFpbjogYm9vbGVhbjtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHJhc3RlclRpbGVTZXJ2ZXJVcmxzOiBzdHJpbmdbXTtcbiAgICAgICAgcmFzdGVyU2VydmVyTWF4UmV0cmllcz86IG51bWJlcjtcbiAgICAgICAgcmFzdGVyU2VydmVyUmV0cnlEZWxheT86IG51bWJlcjtcbiAgICAgICAgcmFzdGVyU2VydmVyU2VydmVyRXJyb3JzVG9SZXRyeT86IG51bWJlcltdO1xuICAgICAgICByYXN0ZXJTZXJ2ZXJNYXhQZXJTZXJ2ZXJSZXF1ZXN0cz86IG51bWJlcjtcbiAgICAgIH07XG4gICAgICBnbG9iYWxCb3VuZHM6IERhdGFTb3VyY2VQYXJhbXNbJ2dsb2JhbEJvdW5kcyddO1xuICAgIH0sXG4gICAgdGlsZVNvdXJjZVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHNob3VsZExvYWRUZXJyYWluLFxuICAgICAgZ2xvYmFsQm91bmRzLFxuICAgICAgYmJveDoge3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aH0sXG4gICAgICBpbmRleDoge3o6IHpvb219LFxuICAgICAgbWV0YWRhdGFcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBpZiAoZ2xvYmFsQm91bmRzICYmICFiYm94SW50ZXJzZWN0cyhnbG9iYWxCb3VuZHMsIFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdKSkge1xuICAgICAgLy8gdGlsZSBpcyBvdXRzaWRlIG9mIFNUQUMgb2JqZWN0J3MgYm91bmRpbmcgYm94OyBkb24ndCBmZXRjaCB0aWxlXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aWxlc0JlaW5nTG9hZGVkKys7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgW2ltYWdlXSA9IGF3YWl0IFByb21pc2UuYWxsKFt0aWxlU291cmNlLmdldFRpbGVEYXRhKHByb3BzKV0pO1xuICAgICAgLy8gRm9yIG53byBjaGVjayBpZiB0aGUgYmFzZSB0aWxlIGV4aXN0cywgYXMgdGhpcyBjYW4gY2F1c2UgbG9hZGluZyB0byBnZXQgc3R1Y2sgd2l0aCBcInNwYXJzZVwiIFBNVGlsZXMuXG4gICAgICBjb25zdCB0ZXJyYWluID1cbiAgICAgICAgaW1hZ2UgJiYgc2hvdWxkTG9hZFRlcnJhaW4gJiYgTE9BRF9FTEVWQVRJT05fQUZURVJfWk9PTSA8IHpvb21cbiAgICAgICAgICA/IGF3YWl0IGxvYWRUZXJyYWluKHtcbiAgICAgICAgICAgICAgYm91bmRzRm9yR2VvbWV0cnk6IFt3ZXN0LCBub3J0aCwgZWFzdCwgc291dGhdLFxuICAgICAgICAgICAgICBpbmRleDogcHJvcHMuaW5kZXgsXG4gICAgICAgICAgICAgIHNpZ25hbDogcHJvcHMuc2lnbmFsLFxuICAgICAgICAgICAgICByYXN0ZXJUaWxlU2VydmVyVXJsczogbWV0YWRhdGEucmFzdGVyVGlsZVNlcnZlclVybHMsXG4gICAgICAgICAgICAgIHJhc3RlclNlcnZlck1heFJldHJpZXM6IG1ldGFkYXRhLnJhc3RlclNlcnZlck1heFJldHJpZXMsXG4gICAgICAgICAgICAgIHJhc3RlclNlcnZlclJldHJ5RGVsYXk6IG1ldGFkYXRhLnJhc3RlclNlcnZlclJldHJ5RGVsYXksXG4gICAgICAgICAgICAgIHJhc3RlclNlcnZlclNlcnZlckVycm9yc1RvUmV0cnk6IG1ldGFkYXRhLnJhc3RlclNlcnZlclNlcnZlckVycm9yc1RvUmV0cnksXG4gICAgICAgICAgICAgIHJhc3RlclNlcnZlck1heFBlclNlcnZlclJlcXVlc3RzOiBtZXRhZGF0YS5yYXN0ZXJTZXJ2ZXJNYXhQZXJTZXJ2ZXJSZXF1ZXN0c1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIGxldCBtaW5QaXhlbFZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBtYXhQaXhlbFZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gdGhpcy5nZXRNaW5NYXhQaXhlbFZhbHVlcyhbe2RhdGE6IGltYWdlfV0pO1xuICAgICAgICBtaW5QaXhlbFZhbHVlID0gbWluO1xuICAgICAgICBtYXhQaXhlbFZhbHVlID0gbWF4O1xuICAgICAgfVxuICAgICAgdGlsZXNCZWluZ0xvYWRlZC0tO1xuXG4gICAgICAvLyBBZGQgdGVycmFpbiBkYXRhIG9ubHkgaWYgd2UgcmVxdWVzdGVkIGl0IGFib3ZlXG4gICAgICByZXR1cm4ge2ltYWdlLCBtaW5QaXhlbFZhbHVlLCBtYXhQaXhlbFZhbHVlLCAuLi4odGVycmFpbiA/IHt0ZXJyYWlufSA6IHt9KX07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRpbGVzQmVpbmdMb2FkZWQtLTtcblxuICAgICAgaWYgKChlcnJvciBhcyBFcnJvcikubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgIC8vIHRpbGUgd2FzIGFib3J0ZWRcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbWUgb3RoZXIgdW5oYW5kbGVkIGVycm9yXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyU3ViTGF5ZXJzU3RhYyhwcm9wczogUmVuZGVyU3ViTGF5ZXJzUHJvcHMpOiBEZWNrTGF5ZXI8YW55PiB8IERlY2tMYXllcjxhbnk+W10ge1xuICBjb25zdCB7XG4gICAgdGlsZSxcbiAgICBkYXRhLFxuICAgIG1pblBpeGVsVmFsdWU6IGdsb2JhbE1pblBpeGVsVmFsdWUsXG4gICAgbWF4UGl4ZWxWYWx1ZTogZ2xvYmFsTWF4UGl4ZWxWYWx1ZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJib3ggPSB0aWxlLmJib3ggYXMgR2VvQm91bmRpbmdCb3g7XG4gIGNvbnN0IHt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGh9ID0gYmJveDtcblxuICBpZiAoIWRhdGEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7XG4gICAgaW1hZ2VzLFxuICAgIHRlcnJhaW4sXG4gICAgbWluUGl4ZWxWYWx1ZTogdGlsZU1pblBpeGVsVmFsdWUsXG4gICAgbWF4UGl4ZWxWYWx1ZTogdGlsZU1heFBpeGVsVmFsdWVcbiAgfSA9IGRhdGE7XG4gIGlmICghaW1hZ2VzIHx8IChBcnJheS5pc0FycmF5KGltYWdlcykgJiYgaW1hZ2VzLmxlbmd0aCA9PT0gMCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBtaW5QaXhlbFZhbHVlID0gTnVtYmVyLmlzRmluaXRlKGdsb2JhbE1pblBpeGVsVmFsdWUpXG4gICAgPyBnbG9iYWxNaW5QaXhlbFZhbHVlXG4gICAgOiB0aWxlTWluUGl4ZWxWYWx1ZTtcbiAgY29uc3QgbWF4UGl4ZWxWYWx1ZSA9IE51bWJlci5pc0Zpbml0ZShnbG9iYWxNYXhQaXhlbFZhbHVlKVxuICAgID8gZ2xvYmFsTWF4UGl4ZWxWYWx1ZVxuICAgIDogdGlsZU1heFBpeGVsVmFsdWU7XG4gIGlmICh0eXBlb2YgbWluUGl4ZWxWYWx1ZSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIG1heFBpeGVsVmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3Qge21vZHVsZXMsIG1vZHVsZVByb3BzfSA9IGdldE1vZHVsZXMoe1xuICAgIGltYWdlcyxcbiAgICBwcm9wczogey4uLnByb3BzLCBtaW5QaXhlbFZhbHVlLCBtYXhQaXhlbFZhbHVlfVxuICB9KTtcblxuICBjb25zdCBpZFN1ZmZpeCA9IHByb3BzLmhhc1NoYWRvd0VmZmVjdCA/ICdzaGFkb3cnIDogJyc7XG5cbiAgcmV0dXJuIHRlcnJhaW5cbiAgICA/IG5ldyBSYXN0ZXJNZXNoTGF5ZXIocHJvcHMsIHtcbiAgICAgICAgaWQ6IGByYXN0ZXItM2QtbGF5ZXItJHtwcm9wcy5pZH0tJHtpZFN1ZmZpeH1gLFxuICAgICAgICAvLyBEdW1teSBkYXRhXG4gICAgICAgIGRhdGE6IFsxXSxcbiAgICAgICAgbWVzaDogdGVycmFpbixcbiAgICAgICAgaW1hZ2VzLFxuICAgICAgICBtb2R1bGVzLFxuICAgICAgICBtb2R1bGVQcm9wcyxcblxuICAgICAgICBnZXRQb2x5Z29uT2Zmc2V0OiBudWxsLFxuICAgICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVQsXG4gICAgICAgIC8vIENvbG9yIHRvIHVzZSBpZiBzdXJmYWNlSW1hZ2UgaXMgdW5hdmFpbGFibGVcbiAgICAgICAgZ2V0Q29sb3I6IFsyNTUsIDI1NSwgMjU1XVxuICAgICAgICAvLyBtYXRlcmlhbDogZmFsc2VcbiAgICAgIH0pXG4gICAgOiBuZXcgUmFzdGVyTGF5ZXIocHJvcHMsIHtcbiAgICAgICAgaWQ6IGByYXN0ZXItMmQtbGF5ZXItJHtwcm9wcy5pZH0tJHtpZFN1ZmZpeH1gLFxuICAgICAgICBpbWFnZXMsXG4gICAgICAgIG1vZHVsZXMsXG4gICAgICAgIG1vZHVsZVByb3BzLFxuICAgICAgICBib3VuZHM6IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdLFxuICAgICAgICBfaW1hZ2VDb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5DQVJURVNJQU5cbiAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdWJMYXllcnNQTVRpbGVzKHByb3BzOiB7XG4gIGlkOiBzdHJpbmc7XG4gIGRhdGE6IGFueTtcbiAgdGlsZVNvdXJjZTogYW55O1xuICBzaG93VGlsZUJvcmRlcnM6IGFueTtcbiAgbWluWm9vbTogYW55O1xuICBtYXhab29tOiBhbnk7XG4gIHRpbGU6IGFueTtcbn0pIHtcbiAgY29uc3Qge1xuICAgIHRpbGVTb3VyY2UsXG4gICAgc2hvd1RpbGVCb3JkZXJzLFxuICAgIG1pblpvb20sXG4gICAgbWF4Wm9vbSxcbiAgICB0aWxlOiB7XG4gICAgICBpbmRleDoge3o6IHpvb219LFxuICAgICAgYmJveDoge3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aH1cbiAgICB9XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBsYXllcnM6IGFueVtdID0gW107XG5cbiAgaWYgKHByb3BzLmRhdGE/LmltYWdlKSB7XG4gICAgc3dpdGNoICh0aWxlU291cmNlLm1pbWVUeXBlKSB7XG4gICAgICBjYXNlICdpbWFnZS9wbmcnOlxuICAgICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgICBjYXNlICdpbWFnZS93ZWJwJzpcbiAgICAgIGNhc2UgJ2ltYWdlL2F2aWYnOlxuICAgICAgICBsYXllcnMucHVzaChnZXRSYXN0ZXJMYXllclBNVGlsZXMocHJvcHMpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlYnVnIHRpbGUgYm9yZGVyc1xuICBjb25zdCBib3JkZXJDb2xvciA9IHpvb20gPD0gbWluWm9vbSB8fCB6b29tID49IG1heFpvb20gPyBbMjU1LCAwLCAwLCAyNTVdIDogWzAsIDAsIDI1NSwgMjU1XTtcbiAgaWYgKHNob3dUaWxlQm9yZGVycykge1xuICAgIGxheWVycy5wdXNoKFxuICAgICAgbmV3IFBhdGhMYXllcih7XG4gICAgICAgIGlkOiBgJHtwcm9wcy5pZH0tYm9yZGVyYCxcbiAgICAgICAgZGF0YTogW1xuICAgICAgICAgIFtcbiAgICAgICAgICAgIFt3ZXN0LCBub3J0aF0sXG4gICAgICAgICAgICBbd2VzdCwgc291dGhdLFxuICAgICAgICAgICAgW2Vhc3QsIHNvdXRoXSxcbiAgICAgICAgICAgIFtlYXN0LCBub3J0aF0sXG4gICAgICAgICAgICBbd2VzdCwgbm9ydGhdXG4gICAgICAgICAgXVxuICAgICAgICBdLFxuICAgICAgICBnZXRQYXRoOiBkID0+IGQsXG4gICAgICAgIGdldENvbG9yOiBib3JkZXJDb2xvciBhcyBhbnksXG4gICAgICAgIHdpZHRoTWluUGl4ZWxzOiA0XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbGF5ZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRSYXN0ZXJMYXllclBNVGlsZXMocHJvcHM6IHtpZDogc3RyaW5nOyBkYXRhOiBhbnk7IHRpbGU6IGFueX0pIHtcbiAgY29uc3Qge3RpbGUsIGRhdGF9ID0gcHJvcHM7XG4gIGNvbnN0IGJib3ggPSB0aWxlLmJib3ggYXMgR2VvQm91bmRpbmdCb3g7XG4gIGNvbnN0IHt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGh9ID0gYmJveDtcblxuICBpZiAoIWRhdGE/LmltYWdlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgaW1hZ2VzID0ge2ltYWdlUmdiYToge2RhdGE6IGRhdGEuaW1hZ2V9fTtcbiAgY29uc3Qge3RlcnJhaW59ID0gZGF0YTtcblxuICBjb25zdCB7bW9kdWxlcywgbW9kdWxlUHJvcHN9ID0gZ2V0TW9kdWxlcyh7XG4gICAgaW1hZ2VzXG4gIH0pO1xuXG4gIHJldHVybiB0ZXJyYWluXG4gICAgPyBuZXcgUmFzdGVyTWVzaExheWVyKHByb3BzLCB7XG4gICAgICAgIGlkOiBgcmFzdGVyLTNkLWxheWVyLSR7cHJvcHMuaWR9YCxcbiAgICAgICAgLy8gRHVtbXkgZGF0YVxuICAgICAgICBkYXRhOiBbMV0sXG4gICAgICAgIG1lc2g6IHRlcnJhaW4sXG4gICAgICAgIGltYWdlcyxcbiAgICAgICAgbW9kdWxlcyxcbiAgICAgICAgbW9kdWxlUHJvcHMsXG5cbiAgICAgICAgZ2V0UG9seWdvbk9mZnNldDogbnVsbCxcbiAgICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFULFxuICAgICAgICAvLyBDb2xvciB0byB1c2UgaWYgc3VyZmFjZUltYWdlIGlzIHVuYXZhaWxhYmxlXG4gICAgICAgIGdldENvbG9yOiBbMjU1LCAyNTUsIDI1NV1cbiAgICAgICAgLy8gbWF0ZXJpYWw6IGZhbHNlXG4gICAgICB9KVxuICAgIDogbmV3IFJhc3RlckxheWVyKHByb3BzLCB7XG4gICAgICAgIGlkOiBgcmFzdGVyLTJkLWxheWVyLSR7cHJvcHMuaWR9YCxcbiAgICAgICAgZGF0YTogbnVsbCBhcyBuZXZlcixcbiAgICAgICAgaW1hZ2VzLFxuICAgICAgICBtb2R1bGVzLFxuICAgICAgICBtb2R1bGVQcm9wcyxcbiAgICAgICAgYm91bmRzOiBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSxcbiAgICAgICAgX2ltYWdlQ29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uQ0FSVEVTSUFOXG4gICAgICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsUUFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBRUEsSUFBQUssT0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sYUFBQSxHQUFBUCxPQUFBO0FBY0EsSUFBQVEsWUFBQSxHQUFBUixPQUFBO0FBRUEsSUFBQVMsTUFBQSxHQUFBVCxPQUFBO0FBRUEsSUFBQVUsT0FBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsU0FBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksTUFBQSxHQUFBWixPQUFBO0FBQ0EsSUFBQWEsZUFBQSxHQUFBVCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQWMsZ0JBQUEsR0FBQWQsT0FBQTtBQTBCQSxJQUFBZSxVQUFBLEdBQUFYLHNCQUFBLENBQUFKLE9BQUE7QUFBNkUsU0FBQWdCLDJCQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLENBQUEsR0FBQUssMkJBQUEsQ0FBQVAsQ0FBQSxNQUFBQyxDQUFBLElBQUFELENBQUEsdUJBQUFBLENBQUEsQ0FBQVEsTUFBQSxJQUFBTixDQUFB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
|
|
@@ -4,7 +4,7 @@ declare class RequestThrottle {
|
|
|
4
4
|
constructor();
|
|
5
5
|
private getServerQueue;
|
|
6
6
|
getDebugInfo(): string;
|
|
7
|
-
throttleRequest<T>(serverKey: string, requestFunction: () => Promise<T
|
|
7
|
+
throttleRequest<T>(serverKey: string, requestFunction: () => Promise<T>, maxConcurrentRequestsOverride?: number): Promise<T>;
|
|
8
8
|
}
|
|
9
9
|
export declare function getRequestThrottle(): RequestThrottle;
|
|
10
10
|
export {};
|
|
@@ -47,17 +47,18 @@ var RequestThrottle = /*#__PURE__*/function () {
|
|
|
47
47
|
}, {
|
|
48
48
|
key: "throttleRequest",
|
|
49
49
|
value: function () {
|
|
50
|
-
var _throttleRequest = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(serverKey, requestFunction) {
|
|
51
|
-
var serverQueue, nextRequest;
|
|
50
|
+
var _throttleRequest = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(serverKey, requestFunction, maxConcurrentRequestsOverride) {
|
|
51
|
+
var serverQueue, maxConcurrentRequests, nextRequest;
|
|
52
52
|
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
53
53
|
while (1) switch (_context2.prev = _context2.next) {
|
|
54
54
|
case 0:
|
|
55
55
|
serverQueue = this.getServerQueue(serverKey);
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
maxConcurrentRequests = typeof maxConcurrentRequestsOverride === 'number' ? maxConcurrentRequestsOverride : this.maxConcurrentRequests;
|
|
57
|
+
if (!(serverQueue.activeRequests >= maxConcurrentRequests && Boolean(maxConcurrentRequests))) {
|
|
58
|
+
_context2.next = 5;
|
|
58
59
|
break;
|
|
59
60
|
}
|
|
60
|
-
_context2.next =
|
|
61
|
+
_context2.next = 5;
|
|
61
62
|
return new Promise(function (resolve) {
|
|
62
63
|
serverQueue.queue.push( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
63
64
|
var result;
|
|
@@ -83,29 +84,29 @@ var RequestThrottle = /*#__PURE__*/function () {
|
|
|
83
84
|
}, _callee, null, [[0, 8]]);
|
|
84
85
|
})));
|
|
85
86
|
});
|
|
86
|
-
case
|
|
87
|
+
case 5:
|
|
87
88
|
serverQueue.activeRequests++;
|
|
88
|
-
_context2.prev =
|
|
89
|
-
_context2.next =
|
|
89
|
+
_context2.prev = 6;
|
|
90
|
+
_context2.next = 9;
|
|
90
91
|
return requestFunction();
|
|
91
|
-
case 8:
|
|
92
|
-
return _context2.abrupt("return", _context2.sent);
|
|
93
92
|
case 9:
|
|
94
|
-
_context2.
|
|
93
|
+
return _context2.abrupt("return", _context2.sent);
|
|
94
|
+
case 10:
|
|
95
|
+
_context2.prev = 10;
|
|
95
96
|
serverQueue.activeRequests--;
|
|
96
97
|
// Process next request in queue if any
|
|
97
98
|
nextRequest = serverQueue.queue.shift();
|
|
98
99
|
if (nextRequest) {
|
|
99
100
|
nextRequest();
|
|
100
101
|
}
|
|
101
|
-
return _context2.finish(
|
|
102
|
-
case
|
|
102
|
+
return _context2.finish(10);
|
|
103
|
+
case 15:
|
|
103
104
|
case "end":
|
|
104
105
|
return _context2.stop();
|
|
105
106
|
}
|
|
106
|
-
}, _callee2, this, [[
|
|
107
|
+
}, _callee2, this, [[6,, 10, 15]]);
|
|
107
108
|
}));
|
|
108
|
-
function throttleRequest(_x, _x2) {
|
|
109
|
+
function throttleRequest(_x, _x2, _x3) {
|
|
109
110
|
return _throttleRequest.apply(this, arguments);
|
|
110
111
|
}
|
|
111
112
|
return throttleRequest;
|
|
@@ -117,4 +118,4 @@ function getRequestThrottle() {
|
|
|
117
118
|
if (!requestThrottle) requestThrottle = new RequestThrottle();
|
|
118
119
|
return requestThrottle;
|
|
119
120
|
}
|
|
120
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
121
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiUmVxdWVzdFRocm90dGxlIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJzZXJ2ZXJRdWV1ZXMiLCJtYXhDb25jdXJyZW50UmVxdWVzdHMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInJhc3RlclNlcnZlck1heFBlclNlcnZlclJlcXVlc3RzIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiZ2V0U2VydmVyUXVldWUiLCJzZXJ2ZXJLZXkiLCJhY3RpdmVSZXF1ZXN0cyIsInF1ZXVlIiwiZ2V0RGVidWdJbmZvIiwic3RhdHMiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwiX3JlZiIsIl9yZWYyIiwiX3NsaWNlZFRvQXJyYXkyIiwiY29uY2F0IiwibGVuZ3RoIiwiam9pbiIsIl90aHJvdHRsZVJlcXVlc3QiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJyZXF1ZXN0RnVuY3Rpb24iLCJtYXhDb25jdXJyZW50UmVxdWVzdHNPdmVycmlkZSIsInNlcnZlclF1ZXVlIiwibmV4dFJlcXVlc3QiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwicHJldiIsIm5leHQiLCJCb29sZWFuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwdXNoIiwiX2NhbGxlZSIsInJlc3VsdCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJzZW50IiwiYWJydXB0IiwidDAiLCJzdG9wIiwic2hpZnQiLCJmaW5pc2giLCJ0aHJvdHRsZVJlcXVlc3QiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwicmVxdWVzdFRocm90dGxlIiwiZ2V0UmVxdWVzdFRocm90dGxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci10aWxlL3JlcXVlc3QtdGhyb3R0bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtnZXRBcHBsaWNhdGlvbkNvbmZpZ30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmludGVyZmFjZSBSZXF1ZXN0UXVldWUge1xuICBhY3RpdmVSZXF1ZXN0czogbnVtYmVyO1xuICBxdWV1ZTogQXJyYXk8KCkgPT4gUHJvbWlzZTxhbnk+Pjtcbn1cblxuY2xhc3MgUmVxdWVzdFRocm90dGxlIHtcbiAgcHJpdmF0ZSBzZXJ2ZXJRdWV1ZXM6IFJlY29yZDxzdHJpbmcsIFJlcXVlc3RRdWV1ZT47XG4gIHByaXZhdGUgbWF4Q29uY3VycmVudFJlcXVlc3RzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXJ2ZXJRdWV1ZXMgPSB7fTtcbiAgICB0aGlzLm1heENvbmN1cnJlbnRSZXF1ZXN0cyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkucmFzdGVyU2VydmVyTWF4UGVyU2VydmVyUmVxdWVzdHM7XG4gIH1cblxuICBwcml2YXRlIGdldFNlcnZlclF1ZXVlKHNlcnZlcktleTogc3RyaW5nKTogUmVxdWVzdFF1ZXVlIHtcbiAgICBpZiAoIXRoaXMuc2VydmVyUXVldWVzW3NlcnZlcktleV0pIHtcbiAgICAgIHRoaXMuc2VydmVyUXVldWVzW3NlcnZlcktleV0gPSB7XG4gICAgICAgIGFjdGl2ZVJlcXVlc3RzOiAwLFxuICAgICAgICBxdWV1ZTogW11cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcnZlclF1ZXVlc1tzZXJ2ZXJLZXldO1xuICB9XG5cbiAgZ2V0RGVidWdJbmZvKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhdHMgPSBPYmplY3QuZW50cmllcyh0aGlzLnNlcnZlclF1ZXVlcykubWFwKChbc2VydmVyS2V5LCBxdWV1ZV0pID0+IHtcbiAgICAgIHJldHVybiBgU2VydmVyOiAke3NlcnZlcktleX1cbiAgQWN0aXZlIFJlcXVlc3RzOiAke3F1ZXVlLmFjdGl2ZVJlcXVlc3RzfVxuICBRdWV1ZWQgUmVxdWVzdHM6ICR7cXVldWUucXVldWUubGVuZ3RofWA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhdHMubGVuZ3RoID4gMFxuICAgICAgPyBgUmVxdWVzdCBUaHJvdHRsZSBTdGF0czpcXG4ke3N0YXRzLmpvaW4oJ1xcbicpfWBcbiAgICAgIDogJ05vIGFjdGl2ZSBzZXJ2ZXIgcXVldWVzJztcbiAgfVxuXG4gIGFzeW5jIHRocm90dGxlUmVxdWVzdDxUPihcbiAgICBzZXJ2ZXJLZXk6IHN0cmluZyxcbiAgICByZXF1ZXN0RnVuY3Rpb246ICgpID0+IFByb21pc2U8VD4sXG4gICAgbWF4Q29uY3VycmVudFJlcXVlc3RzT3ZlcnJpZGU/OiBudW1iZXJcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3Qgc2VydmVyUXVldWUgPSB0aGlzLmdldFNlcnZlclF1ZXVlKHNlcnZlcktleSk7XG4gICAgY29uc3QgbWF4Q29uY3VycmVudFJlcXVlc3RzID1cbiAgICAgIHR5cGVvZiBtYXhDb25jdXJyZW50UmVxdWVzdHNPdmVycmlkZSA9PT0gJ251bWJlcidcbiAgICAgICAgPyBtYXhDb25jdXJyZW50UmVxdWVzdHNPdmVycmlkZVxuICAgICAgICA6IHRoaXMubWF4Q29uY3VycmVudFJlcXVlc3RzO1xuXG4gICAgaWYgKHNlcnZlclF1ZXVlLmFjdGl2ZVJlcXVlc3RzID49IG1heENvbmN1cnJlbnRSZXF1ZXN0cyAmJiBCb29sZWFuKG1heENvbmN1cnJlbnRSZXF1ZXN0cykpIHtcbiAgICAgIC8vIFdhaXQgZm9yIGEgc2xvdCB0byBiZWNvbWUgYXZhaWxhYmxlXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgc2VydmVyUXVldWUucXVldWUucHVzaChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3RGdW5jdGlvbigpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHNlcnZlclF1ZXVlLmFjdGl2ZVJlcXVlc3RzKys7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCByZXF1ZXN0RnVuY3Rpb24oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2VydmVyUXVldWUuYWN0aXZlUmVxdWVzdHMtLTtcbiAgICAgIC8vIFByb2Nlc3MgbmV4dCByZXF1ZXN0IGluIHF1ZXVlIGlmIGFueVxuICAgICAgY29uc3QgbmV4dFJlcXVlc3QgPSBzZXJ2ZXJRdWV1ZS5xdWV1ZS5zaGlmdCgpO1xuICAgICAgaWYgKG5leHRSZXF1ZXN0KSB7XG4gICAgICAgIG5leHRSZXF1ZXN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENyZWF0ZSBhIHNpbmdsZXRvbiBpbnN0YW5jZVxubGV0IHJlcXVlc3RUaHJvdHRsZTogUmVxdWVzdFRocm90dGxlIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXF1ZXN0VGhyb3R0bGUoKTogUmVxdWVzdFRocm90dGxlIHtcbiAgaWYgKCFyZXF1ZXN0VGhyb3R0bGUpIHJlcXVlc3RUaHJvdHRsZSA9IG5ldyBSZXF1ZXN0VGhyb3R0bGUoKTtcbiAgcmV0dXJuIHJlcXVlc3RUaHJvdHRsZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUhBO0FBQ0E7QUFBQSxJQVNNQyxlQUFlO0VBSW5CLFNBQUFBLGdCQUFBLEVBQWM7SUFBQSxJQUFBQyxnQkFBQSxtQkFBQUQsZUFBQTtJQUFBLElBQUFFLGdCQUFBO0lBQUEsSUFBQUEs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
|
|
@@ -79,6 +79,14 @@ export declare type CategoricalColormapOptions = {
|
|
|
79
79
|
};
|
|
80
80
|
export declare type ExtendedKeplerSTAC = {
|
|
81
81
|
rasterTileServerUrls?: [];
|
|
82
|
+
/** Optional per-layer override for max retries when fetching raster data */
|
|
83
|
+
rasterServerMaxRetries?: number;
|
|
84
|
+
/** Optional per-layer override for retry delay between attempts (ms) */
|
|
85
|
+
rasterServerRetryDelay?: number;
|
|
86
|
+
/** Optional per-layer override for which server errors are retried */
|
|
87
|
+
rasterServerServerErrorsToRetry?: number[];
|
|
88
|
+
/** Optional per-layer override for max concurrent requests per server */
|
|
89
|
+
rasterServerMaxPerServerRequests?: number;
|
|
82
90
|
};
|
|
83
91
|
/**
|
|
84
92
|
* Custom fields we pass on to the getTileData callback
|
|
@@ -177,6 +185,14 @@ export declare type AssetRequestData = {
|
|
|
177
185
|
useMask: boolean;
|
|
178
186
|
/** Pass this property through the request to pick specific bands from the response */
|
|
179
187
|
responseRequiredBandIndices?: number[] | null;
|
|
188
|
+
/** Optional per-request override for max retries when fetching NPY arrays */
|
|
189
|
+
rasterServerMaxRetries?: number;
|
|
190
|
+
/** Optional per-request override for retry delay between attempts (ms) */
|
|
191
|
+
rasterServerRetryDelay?: number;
|
|
192
|
+
/** Optional per-request override for which server errors are retried */
|
|
193
|
+
rasterServerServerErrorsToRetry?: number[];
|
|
194
|
+
/** Optional per-request override for max concurrent requests per server */
|
|
195
|
+
rasterServerMaxPerServerRequests?: number;
|
|
180
196
|
};
|
|
181
197
|
export declare type NPYLoaderDataTypes = Uint8Array | Uint8ClampedArray | Int8Array | Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array | Float64Array;
|
|
182
198
|
export interface NPYLoaderResponse {
|