@kepler.gl/reducers 3.3.0-alpha.6 → 3.3.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/combined-updaters.js +2 -2
- package/dist/cjs/map-state-updaters.js +8 -4
- package/dist/cjs/ui-state-updaters.js +40 -11
- package/dist/cjs/ui-state.js +2 -2
- package/dist/cjs/vis-state-updaters.js +338 -47
- package/dist/cjs/vis-state.js +2 -2
- package/dist/combined-updaters.d.ts +1 -1
- package/dist/esm/combined-updaters.js +2 -2
- package/dist/esm/map-state-updaters.js +8 -4
- package/dist/esm/ui-state-updaters.js +40 -11
- package/dist/esm/ui-state.js +2 -2
- package/dist/esm/vis-state-updaters.js +334 -49
- package/dist/esm/vis-state.js +2 -2
- package/dist/ui-state-updaters.d.ts +15 -1
- package/dist/vis-state-updaters.d.ts +27 -0
- package/package.json +18 -18
|
@@ -158,10 +158,11 @@ export var updateMapUpdater = function updateMapUpdater(state, action) {
|
|
|
158
158
|
* @public
|
|
159
159
|
*/
|
|
160
160
|
export var fitBoundsUpdater = function fitBoundsUpdater(state, action) {
|
|
161
|
-
var _state$globe;
|
|
161
|
+
var _action$meta, _state$globe;
|
|
162
162
|
var centerAndZoom = getCenterAndZoomFromBounds(action.payload, {
|
|
163
163
|
width: state.width,
|
|
164
|
-
height: state.height
|
|
164
|
+
height: state.height,
|
|
165
|
+
padding: (_action$meta = action.meta) === null || _action$meta === void 0 ? void 0 : _action$meta.padding
|
|
165
166
|
});
|
|
166
167
|
if (!centerAndZoom) {
|
|
167
168
|
// bounds is invalid
|
|
@@ -365,7 +366,10 @@ export var receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _re
|
|
|
365
366
|
// center map will override mapState config
|
|
366
367
|
if (options.centerMap && bounds) {
|
|
367
368
|
mergedState = fitBoundsUpdater(mergedState, {
|
|
368
|
-
payload: bounds
|
|
369
|
+
payload: bounds,
|
|
370
|
+
meta: {
|
|
371
|
+
padding: options.padding
|
|
372
|
+
}
|
|
369
373
|
});
|
|
370
374
|
}
|
|
371
375
|
|
|
@@ -643,4 +647,4 @@ function updateViewport(originalViewport, viewportUpdates) {
|
|
|
643
647
|
}
|
|
644
648
|
return newViewport;
|
|
645
649
|
}
|
|
646
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZW9WaWV3cG9ydCIsImJvb2xlYW5XaXRoaW4iLCJiYm94UG9seWdvbiIsImZpdEJvdW5kcyIsImRlZXBtZXJnZSIsInBpY2siLCJnZXRDZW50ZXJBbmRab29tRnJvbUJvdW5kcyIsInZhbGlkYXRlQm91bmRzIiwiTUFQQk9YX1RJTEVfU0laRSIsInZhbGlkYXRlVmlld1BvcnQiLCJNYXBTcGxpdE1vZGUiLCJNYXBWaWV3TW9kZSIsIkRFRkFVTFRfR0xPQkVfQ09ORklHIiwiR0xPQkVfTUlOX1pPT00iLCJHTE9CRV9NQVhfWk9PTSIsIkdMT0JFX01BWF9MQVRJVFVERSIsIm1hcFN0YXRlVXBkYXRlcnMiLCJJTklUSUFMX01BUF9TVEFURSIsInBpdGNoIiwiYmVhcmluZyIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwiem9vbSIsImRyYWdSb3RhdGUiLCJ3aWR0aCIsImhlaWdodCIsIm1pblpvb20iLCJ1bmRlZmluZWQiLCJtYXhab29tIiwibWF4UGl0Y2giLCJtYXhCb3VuZHMiLCJpc1NwbGl0IiwiaXNWaWV3cG9ydFN5bmNlZCIsImlzWm9vbUxvY2tlZCIsInNwbGl0TWFwVmlld3BvcnRzIiwibWFwVmlld01vZGUiLCJNT0RFXzJEIiwiZ2xvYmUiLCJlbmFibGVkIiwiY29uZmlnIiwibWFwU3BsaXRNb2RlIiwiU0lOR0xFX01BUCIsInN3aXBlQ29tcGFyZVBlcmNlbnRhZ2UiLCJ1cGRhdGVNYXBVcGRhdGVyIiwic3RhdGUiLCJhY3Rpb24iLCJfYWN0aW9uJHBheWxvYWQiLCJwYXlsb2FkIiwiaW5wdXRWaWV3cG9ydCIsInZpZXdwb3J0IiwiX2FjdGlvbiRwYXlsb2FkJG1hcEluIiwibWFwSW5kZXgiLCJ1cGRhdGVWaWV3cG9ydCIsIm90aGVyVmlld3BvcnRNYXBJbmRleCIsIm1hcCIsImN1cnJlbnRWaWV3cG9ydCIsImkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIl9vYmplY3RTcHJlYWQiLCJmaXRCb3VuZHNVcGRhdGVyIiwiX3N0YXRlJGdsb2JlIiwiY2VudGVyQW5kWm9vbSIsImlzR2xvYmVNb2RlIiwiQm9vbGVhbiIsIk1hdGgiLCJtaW4iLCJtYXgiLCJuZXdTdGF0ZSIsImNlbnRlciIsImxlbmd0aCIsInRvZ2dsZVBlcnNwZWN0aXZlVXBkYXRlciIsIl9zdGF0ZSRnbG9iZTIiLCJ3YXNHbG9iZUVuYWJsZWQiLCJNT0RFXzNEIiwic2V0TWFwVmlld01vZGVVcGRhdGVyIiwiX3N0YXRlJGdsb2JlMyIsIm5leHRTdGF0ZSIsIk1PREVfR0xPQkUiLCJnbG9iZUNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYiLCJfcmVmJHBheWxvYWQiLCJfcmVmJHBheWxvYWQkY29uZmlnIiwiX3JlZiRwYXlsb2FkJG9wdGlvbnMiLCJvcHRpb25zIiwiX3JlZiRwYXlsb2FkJGJvdW5kcyIsImJvdW5kcyIsIm1hcFN0YXRlIiwibWVyZ2VkU3RhdGUiLCJhcnJheU1lcmdlIiwiX2Rlc3RpbmF0aW9uQXJyYXkiLCJzb3VyY2VBcnJheSIsImNlbnRlck1hcCIsImdldE1hcERpbUZvclNwbGl0TWFwIiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiRFVBTF9NQVAiLCJzZXRNYXBTcGxpdE1vZGVVcGRhdGVyIiwicHJldk1vZGUiLCJTV0lQRV9DT01QQVJFIiwic2V0U3dpcGVDb21wYXJlUGVyY2VudGFnZVVwZGF0ZXIiLCJwZXJjZW50YWdlIiwiY2xhbXBlZCIsInRvZ2dsZVNwbGl0TWFwVmlld3BvcnRVcGRhdGVyIiwibmV3TWFwU3RhdGUiLCJsYXN0VXBkYXRlZFZpZXdwb3J0SW5kZXgiLCJmaW5kSW5kZXgiLCJ2IiwibGVmdFZpZXdwb3J0IiwicGlja1ZpZXdwb3J0UHJvcHNGcm9tTWFwU3RhdGUiLCJyaWdodFZpZXdwb3J0IiwidXBkYXRlVmlld3BvcnRCYXNlZE9uQm91bmRzIiwidmlld3BvcnRCb3VuZHMiLCJ2aWV3cG9ydEJvdW5kc1BvbHlnb24iLCJuZXdTdGF0ZU1heEJvdW5kcyIsIm1heEJvdW5kc1BvbHlnb24iLCJoYXNNYXhCb3VuZHNDaGFuZ2VkIiwiZXZlcnkiLCJ2YWwiLCJpZHgiLCJfZml0Qm91bmRzIiwiZGVmaW5lZFByb3BzIiwib2JqIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsImFjY3UiLCJfcmVmMiIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkiLCJrIiwiX2RlZmluZVByb3BlcnR5Iiwib3JpZ2luYWxWaWV3cG9ydCIsInZpZXdwb3J0VXBkYXRlcyIsIl9nbG9iZSIsIm5ld1ZpZXdwb3J0IiwiaXNHbG9iZSIsIl9uZXdWaWV3cG9ydCRsYXRpdHVkZSIsInpvb21BZGp1c3RtZW50IiwibG9nMiIsImNvcyIsIlBJIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgZ2VvVmlld3BvcnQgZnJvbSAnQG1hcGJveC9nZW8tdmlld3BvcnQnO1xuaW1wb3J0IHtib29sZWFuV2l0aGlufSBmcm9tICdAdHVyZi9ib29sZWFuLXdpdGhpbic7XG5pbXBvcnQge2Jib3hQb2x5Z29ufSBmcm9tICdAdHVyZi9iYm94LXBvbHlnb24nO1xuaW1wb3J0IHtmaXRCb3VuZHN9IGZyb20gJ0BtYXRoLmdsL3dlYi1tZXJjYXRvcic7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gvcGljayc7XG5cbmltcG9ydCB7XG4gIGdldENlbnRlckFuZFpvb21Gcm9tQm91bmRzLFxuICB2YWxpZGF0ZUJvdW5kcyxcbiAgTUFQQk9YX1RJTEVfU0laRSxcbiAgdmFsaWRhdGVWaWV3UG9ydFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7TWFwU3RhdGVBY3Rpb25zLCBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCwgQWN0aW9uVHlwZXN9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge01hcFN0YXRlLCBCb3VuZHMsIFZpZXdwb3J0fSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TWFwU3BsaXRNb2RlLCBNYXBWaWV3TW9kZSwgREVGQVVMVF9HTE9CRV9DT05GSUcsIEdMT0JFX01JTl9aT09NLCBHTE9CRV9NQVhfWk9PTSwgR0xPQkVfTUFYX0xBVElUVURFfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGBtYXBTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHttYXBTdGF0ZVVwZGF0ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIC8vIGNsaWNrIGJ1dHRvbiB0byBjbG9zZSBzaWRlIHBhbmVsXG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgbWFwU3RhdGU6IG1hcFN0YXRlVXBkYXRlcnMuZml0Qm91bmRzVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgbWFwU3RhdGUsIHtwYXlsb2FkOiBbMTI3LjM0LCAzMS4wOSwgMTI3LjU2LCAzMS41OV1dfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCBtYXBTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgbWFwU3RhdGVgXG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgcGl0Y2ggRGVmYXVsdDogYDBgXG4gKiBAcHJvcGVydHkgYmVhcmluZyBEZWZhdWx0OiBgMGBcbiAqIEBwcm9wZXJ0eSBsYXRpdHVkZSBEZWZhdWx0OiBgMzcuNzUwNDNgXG4gKiBAcHJvcGVydHkgbG9uZ2l0dWRlIERlZmF1bHQ6IGAtMTIyLjM0Njc5YFxuICogQHByb3BlcnR5IHpvb20gRGVmYXVsdDogYDlgXG4gKiBAcHJvcGVydHkgZHJhZ1JvdGF0ZSBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHJvcGVydHkgd2lkdGggRGVmYXVsdDogYDgwMGBcbiAqIEBwcm9wZXJ0eSBoZWlnaHQgRGVmYXVsdDogYDgwMGBcbiAqIEBwcm9wZXJ0eSBtaW5ab29tOiBgdW5kZWZpbmVkYCxcbiAqIEBwcm9wZXJ0eSBtYXhab29tOiBgdW5kZWZpbmVkYCxcbiAqIEBwcm9wZXJ0eSBtYXhQaXRjaDogYHVuZGVmaW5lZGAgKGRlZmF1bHRzIHRvIGFwcGxpY2F0aW9uIGNvbmZpZyB2YWx1ZSwgZGVjay5nbCBkZWZhdWx0IGlzIDYwKVxuICogQHByb3BlcnR5IG1heEJvdW5kczogYHVuZGVmaW5lZGAsXG4gKiBAcHJvcGVydHkgaXNTcGxpdDogYGZhbHNlYCxcbiAqIEBwcm9wZXJ0eSBpc1ZpZXdwb3J0U3luY2VkOiBgdHJ1ZWAsXG4gKiBAcHJvcGVydHkgaXNab29tTG9ja2VkOiBgZmFsc2VgLFxuICogQHByb3BlcnR5IHNwbGl0TWFwVmlld3BvcnRzOiBgW11gXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX01BUF9TVEFURTogTWFwU3RhdGUgPSB7XG4gIHBpdGNoOiAwLFxuICBiZWFyaW5nOiAwLFxuICBsYXRpdHVkZTogMzcuNzUwNDMsXG4gIGxvbmdpdHVkZTogLTEyMi4zNDY3OSxcbiAgem9vbTogOSxcbiAgZHJhZ1JvdGF0ZTogZmFsc2UsXG4gIHdpZHRoOiA4MDAsXG4gIGhlaWdodDogODAwLFxuICBtaW5ab29tOiB1bmRlZmluZWQsXG4gIG1heFpvb206IHVuZGVmaW5lZCxcbiAgbWF4UGl0Y2g6IHVuZGVmaW5lZCxcbiAgbWF4Qm91bmRzOiB1bmRlZmluZWQsXG4gIGlzU3BsaXQ6IGZhbHNlLFxuICBpc1ZpZXdwb3J0U3luY2VkOiB0cnVlLFxuICBpc1pvb21Mb2NrZWQ6IGZhbHNlLFxuICBzcGxpdE1hcFZpZXdwb3J0czogW10sXG4gIG1hcFZpZXdNb2RlOiBNYXBWaWV3TW9kZS5NT0RFXzJELFxuICBnbG9iZToge1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzogREVGQVVMVF9HTE9CRV9DT05GSUdcbiAgfSxcbiAgbWFwU3BsaXRNb2RlOiBNYXBTcGxpdE1vZGUuU0lOR0xFX01BUCxcbiAgc3dpcGVDb21wYXJlUGVyY2VudGFnZTogNTBcbn07XG5cbi8qIFVwZGF0ZXJzICovXG4vKipcbiAqIFVwZGF0ZSBtYXAgdmlld3BvcnRcbiAqIEBtZW1iZXJvZiBtYXBTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogTWFwU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlVwZGF0ZU1hcFVwZGF0ZXJBY3Rpb25cbik6IE1hcFN0YXRlID0+IHtcbiAgY29uc3Qge3ZpZXdwb3J0OiBpbnB1dFZpZXdwb3J0LCBtYXBJbmRleCA9IDB9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IHZpZXdwb3J0ID0gdmFsaWRhdGVWaWV3UG9ydChpbnB1dFZpZXdwb3J0KTtcblxuICBpZiAoc3RhdGUuaXNWaWV3cG9ydFN5bmNlZCkge1xuICAgIC8vIFRoZSBgdXBkYXRlVmlld3BvcnRgIGZ1bmN0aW9uIGlzIHR5cGVkIGFzIChWaWV3cG9ydCwgVmlld3BvcnQpIC0+IFZpZXdwb3J0IGJ1dCBoZXJlIHRoZVxuICAgIC8vIGV4cGVjdGVkIHR5cGluZyBpcyAoTWFwU3RhdGUsIFZpZXdwb3J0KSAtPiBNYXBTdGF0ZS5cbiAgICAvLyB0aGlzIGNvdWxkIGJlIGEgcG90ZW50aWFsIGJ1ZyBhcyB3ZSB0cmVhdCBWaWV3cG9ydCBhbmQgTWFwU3RhdGUgYXMgZXF1YWwgc2VlbWluZ2x5XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlICdWaWV3cG9ydCcgaXMgbWlzc2luZyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgZnJvbSB0eXBlICdNYXBTdGF0ZSc6IGlzU3BsaXQsIGlzVmlld3BvcnRTeW5jZWQsIGlzWm9vbUxvY2tlZCwgc3BsaXRNYXBWaWV3cG9ydHNcbiAgICByZXR1cm4gdXBkYXRlVmlld3BvcnQoc3RhdGUsIHZpZXdwb3J0KTtcbiAgfVxuXG4gIGxldCBvdGhlclZpZXdwb3J0TWFwSW5kZXggPSAtMTtcbiAgY29uc3Qgc3BsaXRNYXBWaWV3cG9ydHMgPSBzdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cy5tYXAoKGN1cnJlbnRWaWV3cG9ydCwgaSkgPT4ge1xuICAgIGlmIChpID09PSBtYXBJbmRleCkge1xuICAgICAgLy8gdXBkYXRlIHRoZSBtYXRjaGluZyB2aWV3cG9ydCB3aXRoIHRoZSBuZXdWaWV3cG9ydCBpbmZvIGluIHRoZSBhY3Rpb24gcGF5bG9hZFxuICAgICAgcmV0dXJuIHVwZGF0ZVZpZXdwb3J0KGN1cnJlbnRWaWV3cG9ydCwgdmlld3BvcnQpO1xuICAgIH1cblxuICAgIG90aGVyVmlld3BvcnRNYXBJbmRleCA9IGk7XG4gICAgLy8gbWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBvdGhlciB2aWV3cG9ydCAoeWV0KVxuICAgIHJldHVybiBjdXJyZW50Vmlld3BvcnQ7XG4gIH0pO1xuXG4gIC8vIG1ha2UgY29uZGl0aW9uYWwgdXBkYXRlcyB0byB0aGUgb3RoZXIgdmlld3BvcnQgbm90IG1hdGNoaW5nIHRoaXMgcGF5bG9hZCdzIGBtYXBJbmRleGBcbiAgaWYgKE51bWJlci5pc0Zpbml0ZShvdGhlclZpZXdwb3J0TWFwSW5kZXgpICYmIG90aGVyVmlld3BvcnRNYXBJbmRleCA+IC0xKSB7XG4gICAgLy8gd2lkdGggYW5kIGhlaWdodCBhcmUgYSBzcGVjaWFsIGNhc2UgYW5kIGFyZSBhbHdheXMgdXBkYXRlZFxuICAgIHNwbGl0TWFwVmlld3BvcnRzW290aGVyVmlld3BvcnRNYXBJbmRleF0gPSB7XG4gICAgICAuLi5zcGxpdE1hcFZpZXdwb3J0c1tvdGhlclZpZXdwb3J0TWFwSW5kZXhdLFxuICAgICAgd2lkdGg6IHNwbGl0TWFwVmlld3BvcnRzW21hcEluZGV4XS53aWR0aCxcbiAgICAgIGhlaWdodDogc3BsaXRNYXBWaWV3cG9ydHNbbWFwSW5kZXhdLmhlaWdodFxuICAgIH07XG5cbiAgICBpZiAoc3RhdGUuaXNab29tTG9ja2VkKSB7XG4gICAgICAvLyB1cGRhdGUgdGhlIG90aGVyIHZpZXdwb3J0IHdpdGggdGhlIG5ldyB6b29tIGZyb20gdGhlIHNwbGl0IHZpZXdwb3J0IHRoYXQgd2FzIHVwZGF0ZWQgd2l0aCB0aGlzIHBheWxvYWQncyBgbWFwSW5kZXhgXG4gICAgICBzcGxpdE1hcFZpZXdwb3J0c1tvdGhlclZpZXdwb3J0TWFwSW5kZXhdID0ge1xuICAgICAgICAuLi5zcGxpdE1hcFZpZXdwb3J0c1tvdGhlclZpZXdwb3J0TWFwSW5kZXhdLFxuICAgICAgICB6b29tOiBzcGxpdE1hcFZpZXdwb3J0c1ttYXBJbmRleF0uem9vbVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8vIHVwZGF0ZSB0aGUgdG9wLWxldmVsIG1hcFN0YXRlIHZpZXdwb3J0IHdpdGggdGhlIG1vc3QgcmVjZW50bHkgaW50ZXJhY3RlZC13aXRoIHNwbGl0IHZpZXdwb3J0XG4gICAgLy8gV0hZPyB0aGlzIGF2b2lkcyB6b29tIGFuZCBib3VuZHMgXCJqdW1waW5nXCIgZHVlIHRvIGEgXCJzdGFsZVwiIHRvcC1sZXZlbCBtYXBTdGF0ZSB2aWV3cG9ydCB3aGVuOlxuICAgIC8vICAxLiB0b2dnbGluZyBvZmYgdGhlIHVuc3luY2VkIHZpZXdwb3J0cyBtb2RlIHRvIHN3aXRjaCB0byB0aGUgc3luY2VkIHZpZXdwb3J0cyBtb2RlXG4gICAgLy8gIDIuIHRvZ2dsaW5nIG9uIHRoZSB6b29tIGxvY2sgZHVyaW5nIGFuIHVuc3luY2VkIHZpZXdwb3J0cyBtb2RlXG4gICAgLi4uc3RhdGUsXG4gICAgLi4uc3BsaXRNYXBWaWV3cG9ydHNbbWFwSW5kZXhdLFxuICAgIC8vIHVwZGF0ZSB0aGUgbWFwU3RhdGUgd2l0aCB0aGUgbmV3IGFycmF5IG9mIHNwbGl0IHZpZXdwb3J0c1xuICAgIHNwbGl0TWFwVmlld3BvcnRzXG4gIH07XG59O1xuXG4vKipcbiAqIEZpdCBtYXAgdmlld3BvcnQgdG8gYm91bmRzXG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZml0Qm91bmRzVXBkYXRlciA9IChcbiAgc3RhdGU6IE1hcFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5GaXRCb3VuZHNVcGRhdGVyQWN0aW9uXG4pOiBNYXBTdGF0ZSA9PiB7XG4gIGNvbnN0IGNlbnRlckFuZFpvb20gPSBnZXRDZW50ZXJBbmRab29tRnJvbUJvdW5kcyhhY3Rpb24ucGF5bG9hZCwge1xuICAgIHdpZHRoOiBzdGF0ZS53aWR0aCxcbiAgICBoZWlnaHQ6IHN0YXRlLmhlaWdodFxuICB9KTtcbiAgaWYgKCFjZW50ZXJBbmRab29tKSB7XG4gICAgLy8gYm91bmRzIGlzIGludmFsaWRcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJbiBnbG9iZSBtb2RlLCBjbGFtcCB6b29tIHRvIGdsb2JlJ3MgYWxsb3dlZCByYW5nZVxuICBjb25zdCBpc0dsb2JlTW9kZSA9IEJvb2xlYW4oc3RhdGUuZ2xvYmU/LmVuYWJsZWQpO1xuICBjb25zdCB6b29tID0gTnVtYmVyLmlzRmluaXRlKGNlbnRlckFuZFpvb20uem9vbSlcbiAgICA/IGlzR2xvYmVNb2RlXG4gICAgICA/IE1hdGgubWluKE1hdGgubWF4KGNlbnRlckFuZFpvb20uem9vbSwgR0xPQkVfTUlOX1pPT00pLCBHTE9CRV9NQVhfWk9PTSlcbiAgICAgIDogY2VudGVyQW5kWm9vbS56b29tXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF0aXR1ZGU6IGNlbnRlckFuZFpvb20uY2VudGVyWzFdLFxuICAgIGxvbmdpdHVkZTogY2VudGVyQW5kWm9vbS5jZW50ZXJbMF0sXG4gICAgLy8gRm9yIG1hcmdpbmFsIG9yIGludmFsaWQgYm91bmRzLCB6b29tIG1heSBiZSBOYU4uIE1ha2Ugc3VyZSB0byBwcm92aWRlIGEgdmFsaWQgdmFsdWUgaW4gb3JkZXJcbiAgICAvLyB0byBhdm9pZCBjb3JydXB0IHN0YXRlIGFuZCBwb3RlbnRpYWwgY3Jhc2hlcyBhcyB6b29tIGlzIGV4cGVjdGVkIHRvIGJlIGEgbnVtYmVyXG4gICAgLi4uKHpvb20gIT09IHVuZGVmaW5lZCA/IHt6b29tfSA6IHt9KVxuICB9O1xuXG4gIC8vIGlmIGZpdHRpbmcgdG8gYm91bmRzIHdoaWxlIHNwbGl0IGFuZCB1bnN5bmNlZFxuICAvLyBjb3B5IHRoZSBuZXcgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYW5kIHpvb20gdmFsdWVzIHRvIGVhY2ggc3BsaXQgdmlld3BvcnRcbiAgaWYgKG5ld1N0YXRlLnNwbGl0TWFwVmlld3BvcnRzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlLnNwbGl0TWFwVmlld3BvcnRzID0gbmV3U3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMubWFwKGN1cnJlbnRWaWV3cG9ydCA9PiAoe1xuICAgICAgLi4uY3VycmVudFZpZXdwb3J0LFxuICAgICAgbGF0aXR1ZGU6IG5ld1N0YXRlLmxhdGl0dWRlLFxuICAgICAgbG9uZ2l0dWRlOiBuZXdTdGF0ZS5sb25naXR1ZGUsXG4gICAgICB6b29tOiBuZXdTdGF0ZS56b29tXG4gICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBUb2dnbGUgYmV0d2VlbiAzZCBhbmQgMmQgbWFwLlxuICogQG1lbWJlcm9mIG1hcFN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVBlcnNwZWN0aXZlVXBkYXRlciA9IChzdGF0ZTogTWFwU3RhdGUpOiBNYXBTdGF0ZSA9PiB7XG4gIC8vIE9ubHkgZHJvcCBtaW4vbWF4Wm9vbSB3aGVuIHdlJ3JlIGFjdHVhbGx5IGxlYXZpbmcgZ2xvYmUgbW9kZSwgd2hlcmUgdGhvc2VcbiAgLy8gYm91bmRzIGFyZSBzZXQgdG8gZ2xvYmUtb25seSB2YWx1ZXMuIElmIGdsb2JlIHdhcyBuZXZlciBlbmFibGVkIHRoZXNlIGFyZVxuICAvLyB0aGUgYXBwJ3Mgb3duIGN1c3RvbSBib3VuZHMgYW5kIG11c3QgYmUgcHJlc2VydmVkLlxuICBjb25zdCB3YXNHbG9iZUVuYWJsZWQgPSBCb29sZWFuKHN0YXRlLmdsb2JlPy5lbmFibGVkKTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICAuLi57XG4gICAgICBwaXRjaDogc3RhdGUuZHJhZ1JvdGF0ZSA/IDAgOiA1MCxcbiAgICAgIGJlYXJpbmc6IHN0YXRlLmRyYWdSb3RhdGUgPyAwIDogMjRcbiAgICB9LFxuICAgIGRyYWdSb3RhdGU6ICFzdGF0ZS5kcmFnUm90YXRlLFxuICAgIG1hcFZpZXdNb2RlOiBzdGF0ZS5kcmFnUm90YXRlID8gTWFwVmlld01vZGUuTU9ERV8yRCA6IE1hcFZpZXdNb2RlLk1PREVfM0QsXG4gICAgZ2xvYmU6IHsuLi5zdGF0ZS5nbG9iZSEsIGVuYWJsZWQ6IGZhbHNlfSxcbiAgICAvLyBMZWF2aW5nIGdsb2JlIG1vZGU6IGRyb3AgZ2xvYmUtb25seSB6b29tIGJvdW5kcyBzbyB0aGUgZmxhdCBtYXAgKGFuZFxuICAgIC8vIGNvbnN1bWVycyBvZiBtYXBTdGF0ZSBzdWNoIGFzIHZpZGVvIGV4cG9ydCkgYXJlbid0IGxlZnQgY2xhbXBlZC4gV2hlblxuICAgIC8vIGdsb2JlIHdhcyBuZXZlciBvbiwga2VlcCB3aGF0ZXZlciBtaW4vbWF4Wm9vbSB0aGUgYXBwIGNvbmZpZ3VyZWQuXG4gICAgLi4uKHdhc0dsb2JlRW5hYmxlZCA/IHttaW5ab29tOiB1bmRlZmluZWQsIG1heFpvb206IHVuZGVmaW5lZH0gOiB7fSlcbiAgfTtcblxuICAvLyBpZiB0b2dnbGluZyAzZCBhbmQgMmQgd2hpbGUgc3BsaXQgYW5kIHVuc3luY2VkXG4gIC8vIGNvcHkgdGhlIG5ldyBwaXRjaCwgYmVhcmluZywgYW5kIGRyYWdSb3RhdGUgdmFsdWVzIHRvIGVhY2ggc3BsaXQgdmlld3BvcnRcbiAgaWYgKG5ld1N0YXRlLnNwbGl0TWFwVmlld3BvcnRzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlLnNwbGl0TWFwVmlld3BvcnRzID0gbmV3U3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMubWFwKGN1cnJlbnRWaWV3cG9ydCA9PiAoe1xuICAgICAgLi4uY3VycmVudFZpZXdwb3J0LFxuICAgICAgcGl0Y2g6IG5ld1N0YXRlLnBpdGNoLFxuICAgICAgYmVhcmluZzogbmV3U3RhdGUuYmVhcmluZyxcbiAgICAgIGRyYWdSb3RhdGU6IG5ld1N0YXRlLmRyYWdSb3RhdGVcbiAgICB9KSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBtYXAgdmlldyBtb2RlICgyRCwgM0QsIEdsb2JlKVxuICogQG1lbWJlcm9mIG1hcFN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcFZpZXdNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IE1hcFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5TZXRNYXBWaWV3TW9kZVVwZGF0ZXJBY3Rpb25cbik6IE1hcFN0YXRlID0+IHtcbiAgY29uc3Qge21hcFZpZXdNb2RlfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBsZXQgbmV4dFN0YXRlOiBNYXBTdGF0ZTtcblxuICAvLyBPbmx5IGNsZWFyIG1pbi9tYXhab29tIHdoZW4gbGVhdmluZyBnbG9iZSBtb2RlICh3aGVyZSB0aGV5IGhvbGQgZ2xvYmUtb25seVxuICAvLyBib3VuZHMpLiBPdGhlcndpc2UgcHJlc2VydmUgdGhlIGFwcCdzIGN1c3RvbSBib3VuZHMuXG4gIGNvbnN0IHdhc0dsb2JlRW5hYmxlZCA9IEJvb2xlYW4oc3RhdGUuZ2xvYmU/LmVuYWJsZWQpO1xuXG4gIHN3aXRjaCAobWFwVmlld01vZGUpIHtcbiAgICBjYXNlIE1hcFZpZXdNb2RlLk1PREVfMkQ6XG4gICAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBnbG9iZTogey4uLnN0YXRlLmdsb2JlISwgZW5hYmxlZDogZmFsc2V9LFxuICAgICAgICBwaXRjaDogMCxcbiAgICAgICAgYmVhcmluZzogMCxcbiAgICAgICAgZHJhZ1JvdGF0ZTogZmFsc2UsXG4gICAgICAgIC8vIENsZWFyIHRoZSBnbG9iZS1vbmx5IHpvb20gYm91bmRzIHNvIHRoZSBmbGF0IG1hcCAoYW5kIGFueXRoaW5nIHRoYXRcbiAgICAgICAgLy8gcmVhZHMgbWFwU3RhdGUsIGUuZy4gdmlkZW8gZXhwb3J0KSBpcyBub3QgbGVmdCB3aXRoIGdsb2JlJ3NcbiAgICAgICAgLy8gbWluL21heFpvb20gYWZ0ZXIgbGVhdmluZyBnbG9iZSBtb2RlLiBPbmx5IHdoZW4gZ2xvYmUgd2FzIGFjdHVhbGx5IG9uLlxuICAgICAgICAuLi4od2FzR2xvYmVFbmFibGVkID8ge21pblpvb206IHVuZGVmaW5lZCwgbWF4Wm9vbTogdW5kZWZpbmVkfSA6IHt9KSxcbiAgICAgICAgbWFwVmlld01vZGVcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1hcFZpZXdNb2RlLk1PREVfM0Q6XG4gICAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBnbG9iZTogey4uLnN0YXRlLmdsb2JlISwgZW5hYmxlZDogZmFsc2V9LFxuICAgICAgICBwaXRjaDogNTAsXG4gICAgICAgIGJlYXJpbmc6IDI0LFxuICAgICAgICBkcmFnUm90YXRlOiB0cnVlLFxuICAgICAgICAuLi4od2FzR2xvYmVFbmFibGVkID8ge21pblpvb206IHVuZGVmaW5lZCwgbWF4Wm9vbTogdW5kZWZpbmVkfSA6IHt9KSxcbiAgICAgICAgbWFwVmlld01vZGVcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1hcFZpZXdNb2RlLk1PREVfR0xPQkU6XG4gICAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBnbG9iZTogey4uLnN0YXRlLmdsb2JlISwgZW5hYmxlZDogdHJ1ZX0sXG4gICAgICAgIGRyYWdSb3RhdGU6IHRydWUsXG4gICAgICAgIHBpdGNoOiAwLFxuICAgICAgICBiZWFyaW5nOiAwLFxuICAgICAgICAvLyBBbGxvdyB6b29taW5nIG91dCBmdXJ0aGVyIHRoYW4gdGhlIGRlZmF1bHQgc28gdGhlIHdob2xlIGdsb2JlIGNhbiBiZVxuICAgICAgICAvLyBwdWxsZWQgYmFjayBvbiBzY3JlZW4uIENhcCB0aGUgbWF4IHpvb20gc28gdGhlIGJhc2VtYXAgdGlsZXMgc3RheVxuICAgICAgICAvLyBjb2hlcmVudCAodGhleSBicmVhayBkb3duIGF0IGhpZ2ggZ2xvYmUgem9vbSBpbiBkZWNrLmdsIDkueCkuXG4gICAgICAgIG1pblpvb206IEdMT0JFX01JTl9aT09NLFxuICAgICAgICBtYXhab29tOiBHTE9CRV9NQVhfWk9PTSxcbiAgICAgICAgem9vbTogTWF0aC5taW4oTWF0aC5tYXgoc3RhdGUuem9vbSwgR0xPQkVfTUlOX1pPT00pLCBHTE9CRV9NQVhfWk9PTSksXG4gICAgICAgIG1hcFZpZXdNb2RlXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChuZXh0U3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMubGVuZ3RoKSB7XG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzID0gbmV4dFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzLm1hcChjdXJyZW50Vmlld3BvcnQgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnRWaWV3cG9ydCxcbiAgICAgIHBpdGNoOiBuZXh0U3RhdGUucGl0Y2gsXG4gICAgICBiZWFyaW5nOiBuZXh0U3RhdGUuYmVhcmluZyxcbiAgICAgIGRyYWdSb3RhdGU6IG5leHRTdGF0ZS5kcmFnUm90YXRlXG4gICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGdsb2JlIGNvbmZpZ1xuICogQG1lbWJlcm9mIG1hcFN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGdsb2JlQ29uZmlnQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IE1hcFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5HbG9iZUNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IE1hcFN0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBnbG9iZToge1xuICAgICAgLi4uc3RhdGUuZ2xvYmUhLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmdsb2JlIS5jb25maWcsXG4gICAgICAgIC4uLmFjdGlvbi5wYXlsb2FkXG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiByZXNldCBtYXBTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBNYXBTdGF0ZSk6IE1hcFN0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfTUFQX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLy8gY29uc2lkZXIgY2FzZSB3aGVyZSB5b3UgaGF2ZSBhIHNwbGl0IG1hcCBhbmQgdXNlciB3YW50cyB0byByZXNldFxuLyoqXG4gKiBVcGRhdGUgYG1hcFN0YXRlYCB0byBwcm9wYWdhdGUgYSBuZXcgY29uZmlnXG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBNYXBTdGF0ZSxcbiAge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fSwgYm91bmRzID0gbnVsbH1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBNYXBTdGF0ZSA9PiB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UGFydGlhbDxNYXBTdGF0ZT59XG4gICAqL1xuICBjb25zdCBtYXBTdGF0ZSA9IChjb25maWcgfHwge30pLm1hcFN0YXRlIHx8IHt9O1xuICAvLyBtZXJnZWQgcmVjZWl2ZWQgbWFwU3RhdGUgd2l0aCBwcmV2aW91cyBzdGF0ZVxuICAvLyBzdGF0ZSBhbHNvIG1heSBpbmNsdWRlIHByb3BlcnRpZXMgdGhhdCBhcmUgbmV3IHRvIGFuIGV4aXN0aW5nLCBzYXZlZCBwcm9qZWN0J3MgbWFwU3RhdGVcblxuICBsZXQgbWVyZ2VkU3RhdGUgPSBkZWVwbWVyZ2U8TWFwU3RhdGU+KHN0YXRlLCBtYXBTdGF0ZSwge1xuICAgIC8vIG5vdGU6IGRlZXBtZXJnZSBieSBkZWZhdWx0IHdpbGwgbWVyZ2UgYXJyYXlzIGJ5IGNvbmNhdGVuYXRpbmcgdGhlbVxuICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSBkZXN0aW5hdGlvbiBhcnJheXMgd2l0aCBzb3VyY2UgYXJyYXlzLCBpZiBwcmVzZW50XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1RlaFNocmlrZS9kZWVwbWVyZ2UjYXJyYXltZXJnZS1leGFtcGxlLW92ZXJ3cml0ZS10YXJnZXQtYXJyYXlcbiAgICBhcnJheU1lcmdlOiAoX2Rlc3RpbmF0aW9uQXJyYXksIHNvdXJjZUFycmF5KSA9PiBzb3VyY2VBcnJheVxuICB9KTtcblxuICAvLyBpZiBjZW50ZXIgbWFwXG4gIC8vIGNlbnRlciBtYXAgd2lsbCBvdmVycmlkZSBtYXBTdGF0ZSBjb25maWdcbiAgaWYgKG9wdGlvbnMuY2VudGVyTWFwICYmIGJvdW5kcykge1xuICAgIG1lcmdlZFN0YXRlID0gZml0Qm91bmRzVXBkYXRlcihtZXJnZWRTdGF0ZSwge1xuICAgICAgcGF5bG9hZDogYm91bmRzXG4gICAgfSk7XG4gIH1cblxuICAvLyBtYWtlIHN1cmUgd2UgdmFsaWRhdGUgbWFwIHN0YXRlIGJlZm9yZSB3ZSBtZXJnZVxuICBtZXJnZWRTdGF0ZSA9IHZhbGlkYXRlVmlld1BvcnQobWVyZ2VkU3RhdGUpO1xuXG4gIHJldHVybiB7XG4gICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgLy8gdXBkYXRlIHdpZHRoIGlmIGBpc1NwbGl0YCBoYXMgY2hhbmdlZFxuICAgIC4uLmdldE1hcERpbUZvclNwbGl0TWFwKG1lcmdlZFN0YXRlLmlzU3BsaXQsIHN0YXRlKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGUgYmV0d2VlbiBvbmUgb3Igc3BsaXQgbWFwc1xuICogQG1lbWJlcm9mIG1hcFN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChzdGF0ZTogTWFwU3RhdGUpOiBNYXBTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgLi4uZ2V0TWFwRGltRm9yU3BsaXRNYXAoIXN0YXRlLmlzU3BsaXQsIHN0YXRlKSxcbiAgaXNTcGxpdDogIXN0YXRlLmlzU3BsaXQsXG4gIG1hcFNwbGl0TW9kZTogIXN0YXRlLmlzU3BsaXQgPyBNYXBTcGxpdE1vZGUuRFVBTF9NQVAgOiBNYXBTcGxpdE1vZGUuU0lOR0xFX01BUCxcbiAgLi4uKCFzdGF0ZS5pc1NwbGl0ID09PSBmYWxzZVxuICAgID8ge1xuICAgICAgICAvLyBpZiB0b2dnbGluZyB0byBubyBsb25nZXIgc3BsaXQgKHNpbmdsZSBtb2RlKSB0aGVuIHJlc2V0IGEgZmV3IHByb3BlcnRpZXNcbiAgICAgICAgaXNWaWV3cG9ydFN5bmNlZDogdHJ1ZSxcbiAgICAgICAgaXNab29tTG9ja2VkOiBmYWxzZSxcbiAgICAgICAgc3BsaXRNYXBWaWV3cG9ydHM6IFtdXG4gICAgICB9XG4gICAgOiB7fSlcbn0pO1xuXG4vKipcbiAqIFNldCB0aGUgbWFwIHNwbGl0IG1vZGUgKHNpbmdsZSwgZHVhbCwgb3Igc3dpcGUpXG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwU3BsaXRNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IE1hcFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5TZXRNYXBTcGxpdE1vZGVVcGRhdGVyQWN0aW9uXG4pOiBNYXBTdGF0ZSA9PiB7XG4gIGNvbnN0IHttYXBTcGxpdE1vZGV9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IHByZXZNb2RlID0gc3RhdGUubWFwU3BsaXRNb2RlO1xuXG4gIGlmIChtYXBTcGxpdE1vZGUgPT09IHByZXZNb2RlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgc3dpdGNoIChtYXBTcGxpdE1vZGUpIHtcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5TSU5HTEVfTUFQOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG1hcFNwbGl0TW9kZSxcbiAgICAgICAgaXNTcGxpdDogZmFsc2UsXG4gICAgICAgIC4uLihwcmV2TW9kZSA9PT0gTWFwU3BsaXRNb2RlLkRVQUxfTUFQICYmIHtcbiAgICAgICAgICB3aWR0aDogc3RhdGUud2lkdGggKiAyXG4gICAgICAgIH0pLFxuICAgICAgICBpc1ZpZXdwb3J0U3luY2VkOiB0cnVlLFxuICAgICAgICBpc1pvb21Mb2NrZWQ6IGZhbHNlLFxuICAgICAgICBzcGxpdE1hcFZpZXdwb3J0czogW11cbiAgICAgIH07XG4gICAgY2FzZSBNYXBTcGxpdE1vZGUuRFVBTF9NQVA6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbWFwU3BsaXRNb2RlLFxuICAgICAgICBpc1NwbGl0OiB0cnVlLFxuICAgICAgICAuLi4ocHJldk1vZGUgPT09IE1hcFNwbGl0TW9kZS5TSU5HTEVfTUFQICYmIHtcbiAgICAgICAgICB3aWR0aDogc3RhdGUud2lkdGggLyAyXG4gICAgICAgIH0pLFxuICAgICAgICAuLi4ocHJldk1vZGUgPT09IE1hcFNwbGl0TW9kZS5TV0lQRV9DT01QQVJFICYmIHtcbiAgICAgICAgICB3aWR0aDogc3RhdGUud2lkdGggLyAyXG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgIGNhc2UgTWFwU3BsaXRNb2RlLlNXSVBFX0NPTVBBUkU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbWFwU3BsaXRNb2RlLFxuICAgICAgICBpc1NwbGl0OiB0cnVlLFxuICAgICAgICAuLi4ocHJldk1vZGUgPT09IE1hcFNwbGl0TW9kZS5EVUFMX01BUCAmJiB7XG4gICAgICAgICAgd2lkdGg6IHN0YXRlLndpZHRoICogMlxuICAgICAgICB9KSxcbiAgICAgICAgaXNWaWV3cG9ydFN5bmNlZDogdHJ1ZSxcbiAgICAgICAgaXNab29tTG9ja2VkOiBmYWxzZSxcbiAgICAgICAgc3BsaXRNYXBWaWV3cG9ydHM6IFtdXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbi8qKlxuICogU2V0IHRoZSBzd2lwZSBjb21wYXJlIHBlcmNlbnRhZ2VcbiAqIEBtZW1iZXJvZiBtYXBTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTd2lwZUNvbXBhcmVQZXJjZW50YWdlVXBkYXRlciA9IChcbiAgc3RhdGU6IE1hcFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5TZXRTd2lwZUNvbXBhcmVQZXJjZW50YWdlVXBkYXRlckFjdGlvblxuKTogTWFwU3RhdGUgPT4ge1xuICBjb25zdCB7cGVyY2VudGFnZX0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWluKDEwMCwgTWF0aC5tYXgoMCwgcGVyY2VudGFnZSkpO1xuICBpZiAoY2xhbXBlZCA9PT0gc3RhdGUuc3dpcGVDb21wYXJlUGVyY2VudGFnZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHN3aXBlQ29tcGFyZVBlcmNlbnRhZ2U6IGNsYW1wZWRcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIGJldHdlZW4gbG9ja2VkIGFuZCB1bmxvY2tlZCBzcGxpdCB2aWV3cG9ydHNcbiAqIEBtZW1iZXJvZiBtYXBTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFZpZXdwb3J0VXBkYXRlciA9IChcbiAgc3RhdGU6IE1hcFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0VXBkYXRlckFjdGlvblxuKSA9PiB7XG4gIC8vIFN3aXBlIG1vZGUgYWx3YXlzIHVzZXMgc3luY2VkIHZpZXdwb3J0c1xuICBpZiAoc3RhdGUubWFwU3BsaXRNb2RlID09PSBNYXBTcGxpdE1vZGUuU1dJUEVfQ09NUEFSRSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIG5ldyBtYXAgc3RhdGUgaW1tZWRpYXRlbHkgZ2V0cyB0aGUgbmV3LCBvcHRpb25hbCBwYXlsb2FkIHZhbHVlcyBmb3IgaXNWaWV3cG9ydFN5bmNlZCBhbmQvb3IgaXNab29tTG9ja2VkXG4gIGNvbnN0IG5ld01hcFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIC4uLihhY3Rpb24ucGF5bG9hZCB8fCB7fSlcbiAgfTtcblxuICBpZiAobmV3TWFwU3RhdGUuaXNWaWV3cG9ydFN5bmNlZCkge1xuICAgIC8vIHN3aXRjaGluZyBmcm9tIHVuc3luY2VkIHRvIHN5bmNlZCB2aWV3cG9ydHNcbiAgICBuZXdNYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cyA9IFtdO1xuICB9IGVsc2Uge1xuICAgIC8vIHN3aXRjaGluZyBmcm9tIHN5bmNlZCB0byB1bnN5bmNlZCB2aWV3cG9ydHNcbiAgICAvLyBvciBhbHJlYWR5IGluIHVuc3luY2VkIG1vZGUgYW5kIHRvZ2dsaW5nIGxvY2tlZCB6b29tXG5cbiAgICBpZiAoc3RhdGUuaXNab29tTG9ja2VkICYmICFuZXdNYXBTdGF0ZS5pc1pvb21Mb2NrZWQpIHtcbiAgICAgIC8vIHN3aXRjaGluZyBvZmYgbG9ja2VkIHpvb20gd2hpbGUgdW5zeW5jZWRcbiAgICAgIC8vIGRvbid0IGNvcHkgdGhlIG1hcFN0YXRlcyB0byBsZWZ0IGFuZCByaWdodCB2aWV3cG9ydHMgYmVjYXVzZSB0aGVyZSB3aWxsIGJlIHpvb20gXCJqdW1waW5nXCJcbiAgICAgIHJldHVybiBuZXdNYXBTdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRlLmlzWm9vbUxvY2tlZCAmJiBuZXdNYXBTdGF0ZS5pc1pvb21Mb2NrZWQpIHtcbiAgICAgIC8vIHN3aXRjaGluZyBvbiBsb2NrZWQgem9vbSB3aGlsZSB1bnN5bmNlZFxuICAgICAgLy8gb25seSBjb3B5IHpvb20gdmlld3BvcnQgcHJvcGVydHkgZnJvbSB0aGUgbW9zdCByZWNlbnRseSBpbnRlcmFjdGVkLXdpdGggdmlld3BvcnQgdG8gdGhlIG90aGVyXG4gICAgICAvLyBUT0RPOiBkbyB3ZSB3YW50IHRvIGNoZWNrIGZvciBhIG1hdGNoIGEgZGlmZmVyZW50IHdheSwgc3VjaCBhcyBhIGNvbWJvIG9mIGBsYXRpdHVkZWAgYW5kIGBsb25naXR1ZGVgP1xuICAgICAgY29uc3QgbGFzdFVwZGF0ZWRWaWV3cG9ydEluZGV4ID0gbmV3TWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMuZmluZEluZGV4KFxuICAgICAgICB2ID0+IG5ld01hcFN0YXRlLnpvb20gPT09IHYuem9vbVxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3BsaXRNYXBWaWV3cG9ydHMgPSBuZXdNYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cy5tYXAoKGN1cnJlbnRWaWV3cG9ydCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSA9PT0gbGFzdFVwZGF0ZWRWaWV3cG9ydEluZGV4KSB7XG4gICAgICAgICAgLy8gbm8gem9vbSB0byBtb2RpZnkgaGVyZVxuICAgICAgICAgIHJldHVybiBjdXJyZW50Vmlld3BvcnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhlIG90aGVyIHZpZXdwb3J0IGdldHMgdGhlIG1vc3QgcmVjZW50bHkgaW50ZXJhY3RlZC13aXRoIHZpZXdwb3J0J3Mgem9vbVxuICAgICAgICAvLyBXSFk/IHRoZSB2aWV3cG9ydCB0aGUgdXNlciB3YXMgbGFzdCBpbnRlcmFjdGluZyB3aXRoIHdpbGwgc2V0IHpvb20gYWNyb3NzIHRoZSBib2FyZCBmb3Igc21vb3RoIFVYXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY3VycmVudFZpZXdwb3J0LFxuICAgICAgICAgIHpvb206IG5ld01hcFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzW2xhc3RVcGRhdGVkVmlld3BvcnRJbmRleF0uem9vbVxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIG5ld01hcFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzID0gc3BsaXRNYXBWaWV3cG9ydHM7XG5cbiAgICAgIHJldHVybiBuZXdNYXBTdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBpZiBjdXJyZW50IHZpZXdwb3J0IGlzIHN5bmNlZCwgYW5kIHdlIGFyZSB1bnN5bmNpbmcgaXRcbiAgICAvLyBvciBhbHJlYWR5IGluIHVuc3luY2VkIG1vZGUgYW5kIE5PVCB0b2dnbGluZyBsb2NrZWQgem9vbVxuICAgIC8vIG1ha2UgYSBmcmVzaCBjb3B5IG9mIHRoZSBjdXJyZW50IHZpZXdwb3J0IG9iamVjdCwgYXNzaWduIGl0IHRvIHNwbGl0TWFwVmlld3BvcnRzW11cbiAgICAvLyBwaWNrVmlld3BvcnRQcm9wc0Zyb21NYXBTdGF0ZSBpcyBjYWxsZWQgdHdpY2UgdG8gYXZvaWQgbWVtb3J5IGFsbG9jYXRpb24gY29uZmxpY3RzXG4gICAgY29uc3QgbGVmdFZpZXdwb3J0ID0gcGlja1ZpZXdwb3J0UHJvcHNGcm9tTWFwU3RhdGUobmV3TWFwU3RhdGUpO1xuICAgIGNvbnN0IHJpZ2h0Vmlld3BvcnQgPSBwaWNrVmlld3BvcnRQcm9wc0Zyb21NYXBTdGF0ZShuZXdNYXBTdGF0ZSk7XG4gICAgbmV3TWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMgPSBbbGVmdFZpZXdwb3J0LCByaWdodFZpZXdwb3J0XTtcbiAgfVxuXG4gIC8vIHJldHVybiBuZXcgc3RhdGVcbiAgcmV0dXJuIG5ld01hcFN0YXRlO1xufTtcblxuLy8gSGVscGVyc1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcERpbUZvclNwbGl0TWFwKGlzU3BsaXQsIHN0YXRlKSB7XG4gIC8vIGNhc2VzOlxuICAvLyAxLiBzdGF0ZSBzcGxpdDogdHJ1ZSAtIGlzU3BsaXQ6IHRydWVcbiAgLy8gZG8gbm90aGluZ1xuICAvLyAyLiBzdGF0ZSBzcGxpdDogZmFsc2UgLSBpc1NwbGl0OiBmYWxzZVxuICAvLyBkbyBub3RoaW5nXG4gIGlmIChzdGF0ZS5pc1NwbGl0ID09PSBpc1NwbGl0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLy8gSW4gc3dpcGUgbW9kZSwgYm90aCBtYXBzIHVzZSBmdWxsIHdpZHRoIChvdmVybGFwcGluZyB3aXRoIGNsaXApXG4gIGlmIChzdGF0ZS5tYXBTcGxpdE1vZGUgPT09IE1hcFNwbGl0TW9kZS5TV0lQRV9DT01QQVJFKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3Qgd2lkdGggPVxuICAgIHN0YXRlLmlzU3BsaXQgJiYgIWlzU3BsaXRcbiAgICAgID8gLy8gMy4gc3RhdGUgc3BsaXQ6IHRydWUgLSBpc1NwbGl0OiBmYWxzZVxuICAgICAgICAvLyBkb3VibGUgd2lkdGhcbiAgICAgICAgc3RhdGUud2lkdGggKiAyXG4gICAgICA6IC8vIDQuIHN0YXRlIHNwbGl0OiBmYWxzZSAtIGlzU3BsaXQ6IHRydWVcbiAgICAgICAgLy8gc3BsaXQgd2lkdGhcbiAgICAgICAgc3RhdGUud2lkdGggLyAyO1xuXG4gIHJldHVybiB7XG4gICAgd2lkdGhcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVmlld3BvcnRCYXNlZE9uQm91bmRzKHN0YXRlOiBNYXBTdGF0ZSwgbmV3TWFwU3RhdGU6IE1hcFN0YXRlKSB7XG4gIC8vIEdldCB0aGUgbmV3IHZpZXdwb3J0IGJvdW5kc1xuICBjb25zdCB2aWV3cG9ydEJvdW5kcyA9IGdlb1ZpZXdwb3J0LmJvdW5kcyhcbiAgICBbbmV3TWFwU3RhdGUubG9uZ2l0dWRlLCBuZXdNYXBTdGF0ZS5sYXRpdHVkZV0sXG4gICAgbmV3TWFwU3RhdGUuem9vbSxcbiAgICBbbmV3TWFwU3RhdGUud2lkdGgsIG5ld01hcFN0YXRlLmhlaWdodF0sXG4gICAgTUFQQk9YX1RJTEVfU0laRVxuICApO1xuICAvLyBHZW5lcmF0ZSB0dXJmIFBvbHlnb24gZnJvbSBib3VuZHMgZm9yIGNvbXBhcmlzb25cbiAgY29uc3Qgdmlld3BvcnRCb3VuZHNQb2x5Z29uID0gYmJveFBvbHlnb24odmlld3BvcnRCb3VuZHMpO1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IG5ld1N0YXRlTWF4Qm91bmRzOiBCb3VuZHMgPSBuZXdNYXBTdGF0ZS5tYXhCb3VuZHM7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWF4Qm91bmRzUG9seWdvbiA9IGJib3hQb2x5Z29uKG5ld1N0YXRlTWF4Qm91bmRzKTtcblxuICAvLyBJZiBtYXhCb3VuZHMgaGFzIGNoYW5nZWQgcmVzZXQgdGhlIHZpZXdwb3J0IHRvIHNuYXAgdG8gYm91bmRzXG4gIGNvbnN0IGhhc01heEJvdW5kc0NoYW5nZWQgPVxuICAgICFzdGF0ZS5tYXhCb3VuZHMgfHwgIXN0YXRlLm1heEJvdW5kcy5ldmVyeSgodmFsLCBpZHgpID0+IHZhbCA9PT0gbmV3U3RhdGVNYXhCb3VuZHNbaWR4XSk7XG4gIGlmIChoYXNNYXhCb3VuZHNDaGFuZ2VkKSB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIG5ld01hcFN0YXRlIHZpZXdwb3J0IGlzIHdpdGhpbiBtYXhCb3VuZHNcbiAgICBpZiAoIWJvb2xlYW5XaXRoaW4odmlld3BvcnRCb3VuZHNQb2x5Z29uLCBtYXhCb3VuZHNQb2x5Z29uKSkge1xuICAgICAgY29uc3Qge2xhdGl0dWRlLCBsb25naXR1ZGUsIHpvb219ID0gZml0Qm91bmRzKHtcbiAgICAgICAgd2lkdGg6IG5ld01hcFN0YXRlLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IG5ld01hcFN0YXRlLmhlaWdodCxcbiAgICAgICAgYm91bmRzOiBbXG4gICAgICAgICAgW25ld1N0YXRlTWF4Qm91bmRzWzBdLCBuZXdTdGF0ZU1heEJvdW5kc1sxXV0sXG4gICAgICAgICAgW25ld1N0YXRlTWF4Qm91bmRzWzJdLCBuZXdTdGF0ZU1heEJvdW5kc1szXV1cbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIG5ld01hcFN0YXRlID0ge1xuICAgICAgICAuLi5uZXdNYXBTdGF0ZSxcbiAgICAgICAgbGF0aXR1ZGUsXG4gICAgICAgIGxvbmdpdHVkZSxcbiAgICAgICAgLy8gRm9yIG1hcmdpbmFsIG9yIGludmFsaWQgYm91bmRzLCB6b29tIG1heSBiZSBOYU4uIE1ha2Ugc3VyZSB0byBwcm92aWRlIGEgdmFsaWQgdmFsdWUgaW4gb3JkZXJcbiAgICAgICAgLy8gdG8gYXZvaWQgY29ycnVwdCBzdGF0ZSBhbmQgcG90ZW50aWFsIGNyYXNoZXMgYXMgem9vbSBpcyBleHBlY3RlZCB0byBiZSBhIG51bWJlclxuICAgICAgICAuLi4oTnVtYmVyLmlzRmluaXRlKHpvb20pID8ge3pvb219IDoge30pXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbmV3TWFwU3RhdGU7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgbmV3TWFwU3RhdGUgdmlld3BvcnQgaXMgd2l0aGluIG1heEJvdW5kc1xuICBpZiAoIWJvb2xlYW5XaXRoaW4odmlld3BvcnRCb3VuZHNQb2x5Z29uLCBtYXhCb3VuZHNQb2x5Z29uKSkge1xuICAgIG5ld01hcFN0YXRlID0ge1xuICAgICAgLi4ubmV3TWFwU3RhdGUsXG4gICAgICBsb25naXR1ZGU6IHN0YXRlLmxvbmdpdHVkZSxcbiAgICAgIGxhdGl0dWRlOiBzdGF0ZS5sYXRpdHVkZSxcbiAgICAgIHpvb206IHN0YXRlLnpvb21cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG5ld01hcFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGlja1ZpZXdwb3J0UHJvcHNGcm9tTWFwU3RhdGUoc3RhdGU6IE1hcFN0YXRlKTogVmlld3BvcnQge1xuICByZXR1cm4gcGljayhzdGF0ZSwgW1xuICAgICd3aWR0aCcsXG4gICAgJ2hlaWdodCcsXG4gICAgJ3pvb20nLFxuICAgICdwaXRjaCcsXG4gICAgJ2JlYXJpbmcnLFxuICAgICdsYXRpdHVkZScsXG4gICAgJ2xvbmdpdHVkZScsXG4gICAgJ2RyYWdSb3RhdGUnLFxuICAgICdtaW5ab29tJyxcbiAgICAnbWF4Wm9vbScsXG4gICAgJ21heFBpdGNoJyxcbiAgICAnbWF4Qm91bmRzJ1xuICBdKTtcbn1cblxuLyoqIFNlbGVjdCBpdGVtcyBmcm9tIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkICovXG5jb25zdCBkZWZpbmVkUHJvcHMgPSBvYmogPT5cbiAgT2JqZWN0LmVudHJpZXMob2JqKS5yZWR1Y2UoXG4gICAgKGFjY3UsIFtrLCB2XSkgPT4gKHsuLi5hY2N1LCAuLi4odiAhPT0gdW5kZWZpbmVkID8ge1trXTogdn0gOiB7fSl9KSxcbiAgICB7fVxuICApO1xuXG5mdW5jdGlvbiB1cGRhdGVWaWV3cG9ydChvcmlnaW5hbFZpZXdwb3J0OiBWaWV3cG9ydCwgdmlld3BvcnRVcGRhdGVzOiBWaWV3cG9ydCk6IFZpZXdwb3J0IHtcbiAgbGV0IG5ld1ZpZXdwb3J0ID0ge1xuICAgIC4uLm9yaWdpbmFsVmlld3BvcnQsXG4gICAgLi4uKGRlZmluZWRQcm9wcyh2aWV3cG9ydFVwZGF0ZXMpIHx8IHt9KVxuICB9O1xuXG4gIC8vIGRlY2suZ2wncyBnbG9iZSBjb250cm9sbGVyIGFwcGxpZXMgYSBsYXRpdHVkZS1kZXBlbmRlbnQgYWRqdXN0bWVudCB0byB0aGVcbiAgLy8gem9vbSByYW5nZSAoc2VlIEtlcGxlckdsb2JlVmlldy5fY29uc3RyYWluWm9vbSkuIElmIHdlIGNsYW1wIHRoZSBwcm9wYWdhdGVkXG4gIC8vIHpvb20gaGVyZSBhZ2FpbnN0IHRoZSByYXcgbWluWm9vbS9tYXhab29tICh3aXRob3V0IHRoYXQgYWRqdXN0bWVudCksIFJlZHV4XG4gIC8vIGVuZHMgdXAgZGlzYWdyZWVpbmcgd2l0aCB0aGUgY29udHJvbGxlcjogdGhlIGNvbnRyb2xsZXIgbGV0cyB0aGUgdXNlciBwdWxsXG4gIC8vIHRoZSBnbG9iZSBmdXJ0aGVyIG91dCwgYnV0IHRoaXMgY2xhbXAgc25hcHMgem9vbSBiYWNrIHRvIGBtaW5ab29tYCB3aGVuIHRoZVxuICAvLyBpbnRlcmFjdGlvbidzIGluZXJ0aWEgdHJhbnNpdGlvbiBlbmRzLiBBcHBseSB0aGUgc2FtZSBhZGp1c3RtZW50IGluIGdsb2JlXG4gIC8vIG1vZGUgc28gUmVkdXggc3RheXMgY29uc2lzdGVudCB3aXRoIHRoZSBjb250cm9sbGVyIGFuZCB0aGVyZSdzIG5vIHNuYXAtYmFjay5cbiAgY29uc3QgaXNHbG9iZSA9IChuZXdWaWV3cG9ydCBhcyBhbnkpLmdsb2JlPy5lbmFibGVkO1xuXG4gIGlmIChpc0dsb2JlKSB7XG4gICAgLy8gS2VlcCB0aGUgY2FtZXJhIHRhcmdldCB3aXRoaW4gYSBsYXRpdHVkZSBiYW5kIGFyb3VuZCB0aGUgZXF1YXRvciBzbyB0aGVcbiAgICAvLyBzdG9yZWQgdmlld3BvcnQgY2FuJ3QgYmUgY2VudGVyZWQgb24gdGhlIHBvbGVzIChtYXRjaGVzIHRoZSBnbG9iZVxuICAgIC8vIGNvbnRyb2xsZXIncyBhcHBseUNvbnN0cmFpbnRzIHNvIGdlb2NvZGVyL3Byb2dyYW1tYXRpYyB1cGRhdGVzIGFncmVlKS5cbiAgICBpZiAodHlwZW9mIG5ld1ZpZXdwb3J0LmxhdGl0dWRlID09PSAnbnVtYmVyJykge1xuICAgICAgbmV3Vmlld3BvcnQubGF0aXR1ZGUgPSBNYXRoLm1pbihcbiAgICAgICAgR0xPQkVfTUFYX0xBVElUVURFLFxuICAgICAgICBNYXRoLm1heCgtR0xPQkVfTUFYX0xBVElUVURFLCBuZXdWaWV3cG9ydC5sYXRpdHVkZSlcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHpvb21BZGp1c3RtZW50ID0gTWF0aC5sb2cyKE1hdGguY29zKCgobmV3Vmlld3BvcnQubGF0aXR1ZGUgPz8gMCkgKiBNYXRoLlBJKSAvIDE4MCkpO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBuZXdWaWV3cG9ydC5taW5ab29tID09PSAnbnVtYmVyJyAmJlxuICAgICAgdHlwZW9mIG5ld1ZpZXdwb3J0Lnpvb20gPT09ICdudW1iZXInICYmXG4gICAgICBuZXdWaWV3cG9ydC56b29tIDwgbmV3Vmlld3BvcnQubWluWm9vbSArIHpvb21BZGp1c3RtZW50XG4gICAgKSB7XG4gICAgICBuZXdWaWV3cG9ydC56b29tID0gbmV3Vmlld3BvcnQubWluWm9vbSArIHpvb21BZGp1c3RtZW50O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbmV3Vmlld3BvcnQubWF4Wm9vbSA9PT0gJ251bWJlcicgJiZcbiAgICAgIHR5cGVvZiBuZXdWaWV3cG9ydC56b29tID09PSAnbnVtYmVyJyAmJlxuICAgICAgbmV3Vmlld3BvcnQuem9vbSA+IG5ld1ZpZXdwb3J0Lm1heFpvb20gKyB6b29tQWRqdXN0bWVudFxuICAgICkge1xuICAgICAgbmV3Vmlld3BvcnQuem9vbSA9IG5ld1ZpZXdwb3J0Lm1heFpvb20gKyB6b29tQWRqdXN0bWVudDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTWFrZSBzdXJlIHpvb20gbGV2ZWwgZG9lc24ndCBnbyBiZWxsb3cgbWluWm9vbSBpZiBkZWZpbmVkXG4gICAgaWYgKG5ld1ZpZXdwb3J0Lm1pblpvb20gJiYgbmV3Vmlld3BvcnQuem9vbSAmJiBuZXdWaWV3cG9ydC56b29tIDwgbmV3Vmlld3BvcnQubWluWm9vbSkge1xuICAgICAgbmV3Vmlld3BvcnQuem9vbSA9IG5ld1ZpZXdwb3J0Lm1pblpvb207XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB6b29tIGxldmVsIGRvZXNuJ3QgZ28gYWJvdmUgbWF4Wm9vbSBpZiBkZWZpbmVkXG4gICAgaWYgKG5ld1ZpZXdwb3J0Lm1heFpvb20gJiYgbmV3Vmlld3BvcnQuem9vbSAmJiBuZXdWaWV3cG9ydC56b29tID4gbmV3Vmlld3BvcnQubWF4Wm9vbSkge1xuICAgICAgbmV3Vmlld3BvcnQuem9vbSA9IG5ld1ZpZXdwb3J0Lm1heFpvb207XG4gICAgfVxuICB9XG4gIC8vIExpbWl0IHZpZXdwb3J0IHVwZGF0ZSBiYXNlZCBvbiBtYXhCb3VuZHNcbiAgaWYgKG5ld1ZpZXdwb3J0Lm1heEJvdW5kcyAmJiB2YWxpZGF0ZUJvdW5kcyhuZXdWaWV3cG9ydC5tYXhCb3VuZHMpKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlICdWaWV3cG9ydCcgaXMgbWlzc2luZyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgZnJvbSB0eXBlICdNYXBTdGF0ZSc6IGlzU3BsaXQsIGlzVmlld3BvcnRTeW5jZWQsIGlzWm9vbUxvY2tlZCwgc3BsaXRNYXBWaWV3cG9ydHNcbiAgICBuZXdWaWV3cG9ydCA9IHVwZGF0ZVZpZXdwb3J0QmFzZWRPbkJvdW5kcyhvcmlnaW5hbFZpZXdwb3J0LCBuZXdWaWV3cG9ydCk7XG4gIH1cblxuICByZXR1cm4gbmV3Vmlld3BvcnQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBOztBQUVBLE9BQU9BLFdBQVcsTUFBTSxzQkFBc0I7QUFDOUMsU0FBUUMsYUFBYSxRQUFPLHNCQUFzQjtBQUNsRCxTQUFRQyxXQUFXLFFBQU8sb0JBQW9CO0FBQzlDLFNBQVFDLFNBQVMsUUFBTyx1QkFBdUI7QUFDL0MsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsT0FBT0MsSUFBSSxNQUFNLGFBQWE7QUFFOUIsU0FDRUMsMEJBQTBCLEVBQzFCQyxjQUFjLEVBQ2RDLGdCQUFnQixFQUNoQkMsZ0JBQWdCLFFBQ1gsa0JBQWtCO0FBR3pCLFNBQVFDLFlBQVksRUFBRUMsV0FBVyxFQUFFQyxvQkFBb0IsRUFBRUMsY0FBYyxFQUFFQyxjQUFjLEVBQUVDLGtCQUFr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
|
|
650
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZW9WaWV3cG9ydCIsImJvb2xlYW5XaXRoaW4iLCJiYm94UG9seWdvbiIsImZpdEJvdW5kcyIsImRlZXBtZXJnZSIsInBpY2siLCJnZXRDZW50ZXJBbmRab29tRnJvbUJvdW5kcyIsInZhbGlkYXRlQm91bmRzIiwiTUFQQk9YX1RJTEVfU0laRSIsInZhbGlkYXRlVmlld1BvcnQiLCJNYXBTcGxpdE1vZGUiLCJNYXBWaWV3TW9kZSIsIkRFRkFVTFRfR0xPQkVfQ09ORklHIiwiR0xPQkVfTUlOX1pPT00iLCJHTE9CRV9NQVhfWk9PTSIsIkdMT0JFX01BWF9MQVRJVFVERSIsIm1hcFN0YXRlVXBkYXRlcnMiLCJJTklUSUFMX01BUF9TVEFURSIsInBpdGNoIiwiYmVhcmluZyIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwiem9vbSIsImRyYWdSb3RhdGUiLCJ3aWR0aCIsImhlaWdodCIsIm1pblpvb20iLCJ1bmRlZmluZWQiLCJtYXhab29tIiwibWF4UGl0Y2giLCJtYXhCb3VuZHMiLCJpc1NwbGl0IiwiaXNWaWV3cG9ydFN5bmNlZCIsImlzWm9vbUxvY2tlZCIsInNwbGl0TWFwVmlld3BvcnRzIiwibWFwVmlld01vZGUiLCJNT0RFXzJEIiwiZ2xvYmUiLCJlbmFibGVkIiwiY29uZmlnIiwibWFwU3BsaXRNb2RlIiwiU0lOR0xFX01BUCIsInN3aXBlQ29tcGFyZVBlcmNlbnRhZ2UiLCJ1cGRhdGVNYXBVcGRhdGVyIiwic3RhdGUiLCJhY3Rpb24iLCJfYWN0aW9uJHBheWxvYWQiLCJwYXlsb2FkIiwiaW5wdXRWaWV3cG9ydCIsInZpZXdwb3J0IiwiX2FjdGlvbiRwYXlsb2FkJG1hcEluIiwibWFwSW5kZXgiLCJ1cGRhdGVWaWV3cG9ydCIsIm90aGVyVmlld3BvcnRNYXBJbmRleCIsIm1hcCIsImN1cnJlbnRWaWV3cG9ydCIsImkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIl9vYmplY3RTcHJlYWQiLCJmaXRCb3VuZHNVcGRhdGVyIiwiX2FjdGlvbiRtZXRhIiwiX3N0YXRlJGdsb2JlIiwiY2VudGVyQW5kWm9vbSIsInBhZGRpbmciLCJtZXRhIiwiaXNHbG9iZU1vZGUiLCJCb29sZWFuIiwiTWF0aCIsIm1pbiIsIm1heCIsIm5ld1N0YXRlIiwiY2VudGVyIiwibGVuZ3RoIiwidG9nZ2xlUGVyc3BlY3RpdmVVcGRhdGVyIiwiX3N0YXRlJGdsb2JlMiIsIndhc0dsb2JlRW5hYmxlZCIsIk1PREVfM0QiLCJzZXRNYXBWaWV3TW9kZVVwZGF0ZXIiLCJfc3RhdGUkZ2xvYmUzIiwibmV4dFN0YXRlIiwiTU9ERV9HTE9CRSIsImdsb2JlQ29uZmlnQ2hhbmdlVXBkYXRlciIsInJlc2V0TWFwQ29uZmlnVXBkYXRlciIsImluaXRpYWxTdGF0ZSIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwiX3JlZiIsIl9yZWYkcGF5bG9hZCIsIl9yZWYkcGF5bG9hZCRjb25maWciLCJfcmVmJHBheWxvYWQkb3B0aW9ucyIsIm9wdGlvbnMiLCJfcmVmJHBheWxvYWQkYm91bmRzIiwiYm91bmRzIiwibWFwU3RhdGUiLCJtZXJnZWRTdGF0ZSIsImFycmF5TWVyZ2UiLCJfZGVzdGluYXRpb25BcnJheSIsInNvdXJjZUFycmF5IiwiY2VudGVyTWFwIiwiZ2V0TWFwRGltRm9yU3BsaXRNYXAiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJEVUFMX01BUCIsInNldE1hcFNwbGl0TW9kZVVwZGF0ZXIiLCJwcmV2TW9kZSIsIlNXSVBFX0NPTVBBUkUiLCJzZXRTd2lwZUNvbXBhcmVQZXJjZW50YWdlVXBkYXRlciIsInBlcmNlbnRhZ2UiLCJjbGFtcGVkIiwidG9nZ2xlU3BsaXRNYXBWaWV3cG9ydFVwZGF0ZXIiLCJuZXdNYXBTdGF0ZSIsImxhc3RVcGRhdGVkVmlld3BvcnRJbmRleCIsImZpbmRJbmRleCIsInYiLCJsZWZ0Vmlld3BvcnQiLCJwaWNrVmlld3BvcnRQcm9wc0Zyb21NYXBTdGF0ZSIsInJpZ2h0Vmlld3BvcnQiLCJ1cGRhdGVWaWV3cG9ydEJhc2VkT25Cb3VuZHMiLCJ2aWV3cG9ydEJvdW5kcyIsInZpZXdwb3J0Qm91bmRzUG9seWdvbiIsIm5ld1N0YXRlTWF4Qm91bmRzIiwibWF4Qm91bmRzUG9seWdvbiIsImhhc01heEJvdW5kc0NoYW5nZWQiLCJldmVyeSIsInZhbCIsImlkeCIsIl9maXRCb3VuZHMiLCJkZWZpbmVkUHJvcHMiLCJvYmoiLCJPYmplY3QiLCJlbnRyaWVzIiwicmVkdWNlIiwiYWNjdSIsIl9yZWYyIiwiX3JlZjMiLCJfc2xpY2VkVG9BcnJheSIsImsiLCJfZGVmaW5lUHJvcGVydHkiLCJvcmlnaW5hbFZpZXdwb3J0Iiwidmlld3BvcnRVcGRhdGVzIiwiX2dsb2JlIiwibmV3Vmlld3BvcnQiLCJpc0dsb2JlIiwiX25ld1ZpZXdwb3J0JGxhdGl0dWRlIiwiem9vbUFkanVzdG1lbnQiLCJsb2cyIiwiY29zIiwiUEkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFwLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBnZW9WaWV3cG9ydCBmcm9tICdAbWFwYm94L2dlby12aWV3cG9ydCc7XG5pbXBvcnQge2Jvb2xlYW5XaXRoaW59IGZyb20gJ0B0dXJmL2Jvb2xlYW4td2l0aGluJztcbmltcG9ydCB7YmJveFBvbHlnb259IGZyb20gJ0B0dXJmL2Jib3gtcG9seWdvbic7XG5pbXBvcnQge2ZpdEJvdW5kc30gZnJvbSAnQG1hdGguZ2wvd2ViLW1lcmNhdG9yJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCBwaWNrIGZyb20gJ2xvZGFzaC9waWNrJztcblxuaW1wb3J0IHtcbiAgZ2V0Q2VudGVyQW5kWm9vbUZyb21Cb3VuZHMsXG4gIHZhbGlkYXRlQm91bmRzLFxuICBNQVBCT1hfVElMRV9TSVpFLFxuICB2YWxpZGF0ZVZpZXdQb3J0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtNYXBTdGF0ZUFjdGlvbnMsIFJlY2VpdmVNYXBDb25maWdQYXlsb2FkLCBBY3Rpb25UeXBlc30gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7TWFwU3RhdGUsIEJvdW5kcywgVmlld3BvcnR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtNYXBTcGxpdE1vZGUsIE1hcFZpZXdNb2RlLCBERUZBVUxUX0dMT0JFX0NPTkZJRywgR0xPQkVfTUlOX1pPT00sIEdMT0JFX01BWF9aT09NLCBHTE9CRV9NQVhfTEFUSVRVREV9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYG1hcFN0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge21hcFN0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgLy8gY2xpY2sgYnV0dG9uIHRvIGNsb3NlIHNpZGUgcGFuZWxcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICBtYXBTdGF0ZTogbWFwU3RhdGVVcGRhdGVycy5maXRCb3VuZHNVcGRhdGVyKFxuICogICAgICAgICAgICAgICBtYXBTdGF0ZSwge3BheWxvYWQ6IFsxMjcuMzQsIDMxLjA5LCAxMjcuNTYsIDMxLjU5XV19XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IG1hcFN0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGBtYXBTdGF0ZWBcbiAqIEBtZW1iZXJvZiBtYXBTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBwaXRjaCBEZWZhdWx0OiBgMGBcbiAqIEBwcm9wZXJ0eSBiZWFyaW5nIERlZmF1bHQ6IGAwYFxuICogQHByb3BlcnR5IGxhdGl0dWRlIERlZmF1bHQ6IGAzNy43NTA0M2BcbiAqIEBwcm9wZXJ0eSBsb25naXR1ZGUgRGVmYXVsdDogYC0xMjIuMzQ2NzlgXG4gKiBAcHJvcGVydHkgem9vbSBEZWZhdWx0OiBgOWBcbiAqIEBwcm9wZXJ0eSBkcmFnUm90YXRlIERlZmF1bHQ6IGBmYWxzZWBcbiAqIEBwcm9wZXJ0eSB3aWR0aCBEZWZhdWx0OiBgODAwYFxuICogQHByb3BlcnR5IGhlaWdodCBEZWZhdWx0OiBgODAwYFxuICogQHByb3BlcnR5IG1pblpvb206IGB1bmRlZmluZWRgLFxuICogQHByb3BlcnR5IG1heFpvb206IGB1bmRlZmluZWRgLFxuICogQHByb3BlcnR5IG1heFBpdGNoOiBgdW5kZWZpbmVkYCAoZGVmYXVsdHMgdG8gYXBwbGljYXRpb24gY29uZmlnIHZhbHVlLCBkZWNrLmdsIGRlZmF1bHQgaXMgNjApXG4gKiBAcHJvcGVydHkgbWF4Qm91bmRzOiBgdW5kZWZpbmVkYCxcbiAqIEBwcm9wZXJ0eSBpc1NwbGl0OiBgZmFsc2VgLFxuICogQHByb3BlcnR5IGlzVmlld3BvcnRTeW5jZWQ6IGB0cnVlYCxcbiAqIEBwcm9wZXJ0eSBpc1pvb21Mb2NrZWQ6IGBmYWxzZWAsXG4gKiBAcHJvcGVydHkgc3BsaXRNYXBWaWV3cG9ydHM6IGBbXWBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfTUFQX1NUQVRFOiBNYXBTdGF0ZSA9IHtcbiAgcGl0Y2g6IDAsXG4gIGJlYXJpbmc6IDAsXG4gIGxhdGl0dWRlOiAzNy43NTA0MyxcbiAgbG9uZ2l0dWRlOiAtMTIyLjM0Njc5LFxuICB6b29tOiA5LFxuICBkcmFnUm90YXRlOiBmYWxzZSxcbiAgd2lkdGg6IDgwMCxcbiAgaGVpZ2h0OiA4MDAsXG4gIG1pblpvb206IHVuZGVmaW5lZCxcbiAgbWF4Wm9vbTogdW5kZWZpbmVkLFxuICBtYXhQaXRjaDogdW5kZWZpbmVkLFxuICBtYXhCb3VuZHM6IHVuZGVmaW5lZCxcbiAgaXNTcGxpdDogZmFsc2UsXG4gIGlzVmlld3BvcnRTeW5jZWQ6IHRydWUsXG4gIGlzWm9vbUxvY2tlZDogZmFsc2UsXG4gIHNwbGl0TWFwVmlld3BvcnRzOiBbXSxcbiAgbWFwVmlld01vZGU6IE1hcFZpZXdNb2RlLk1PREVfMkQsXG4gIGdsb2JlOiB7XG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiBERUZBVUxUX0dMT0JFX0NPTkZJR1xuICB9LFxuICBtYXBTcGxpdE1vZGU6IE1hcFNwbGl0TW9kZS5TSU5HTEVfTUFQLFxuICBzd2lwZUNvbXBhcmVQZXJjZW50YWdlOiA1MFxufTtcblxuLyogVXBkYXRlcnMgKi9cbi8qKlxuICogVXBkYXRlIG1hcCB2aWV3cG9ydFxuICogQG1lbWJlcm9mIG1hcFN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBNYXBTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVXBkYXRlTWFwVXBkYXRlckFjdGlvblxuKTogTWFwU3RhdGUgPT4ge1xuICBjb25zdCB7dmlld3BvcnQ6IGlucHV0Vmlld3BvcnQsIG1hcEluZGV4ID0gMH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgdmlld3BvcnQgPSB2YWxpZGF0ZVZpZXdQb3J0KGlucHV0Vmlld3BvcnQpO1xuXG4gIGlmIChzdGF0ZS5pc1ZpZXdwb3J0U3luY2VkKSB7XG4gICAgLy8gVGhlIGB1cGRhdGVWaWV3cG9ydGAgZnVuY3Rpb24gaXMgdHlwZWQgYXMgKFZpZXdwb3J0LCBWaWV3cG9ydCkgLT4gVmlld3BvcnQgYnV0IGhlcmUgdGhlXG4gICAgLy8gZXhwZWN0ZWQgdHlwaW5nIGlzIChNYXBTdGF0ZSwgVmlld3BvcnQpIC0+IE1hcFN0YXRlLlxuICAgIC8vIHRoaXMgY291bGQgYmUgYSBwb3RlbnRpYWwgYnVnIGFzIHdlIHRyZWF0IFZpZXdwb3J0IGFuZCBNYXBTdGF0ZSBhcyBlcXVhbCBzZWVtaW5nbHlcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGUgJ1ZpZXdwb3J0JyBpcyBtaXNzaW5nIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBmcm9tIHR5cGUgJ01hcFN0YXRlJzogaXNTcGxpdCwgaXNWaWV3cG9ydFN5bmNlZCwgaXNab29tTG9ja2VkLCBzcGxpdE1hcFZpZXdwb3J0c1xuICAgIHJldHVybiB1cGRhdGVWaWV3cG9ydChzdGF0ZSwgdmlld3BvcnQpO1xuICB9XG5cbiAgbGV0IG90aGVyVmlld3BvcnRNYXBJbmRleCA9IC0xO1xuICBjb25zdCBzcGxpdE1hcFZpZXdwb3J0cyA9IHN0YXRlLnNwbGl0TWFwVmlld3BvcnRzLm1hcCgoY3VycmVudFZpZXdwb3J0LCBpKSA9PiB7XG4gICAgaWYgKGkgPT09IG1hcEluZGV4KSB7XG4gICAgICAvLyB1cGRhdGUgdGhlIG1hdGNoaW5nIHZpZXdwb3J0IHdpdGggdGhlIG5ld1ZpZXdwb3J0IGluZm8gaW4gdGhlIGFjdGlvbiBwYXlsb2FkXG4gICAgICByZXR1cm4gdXBkYXRlVmlld3BvcnQoY3VycmVudFZpZXdwb3J0LCB2aWV3cG9ydCk7XG4gICAgfVxuXG4gICAgb3RoZXJWaWV3cG9ydE1hcEluZGV4ID0gaTtcbiAgICAvLyBtYWtlIG5vIGNoYW5nZXMgdG8gdGhlIG90aGVyIHZpZXdwb3J0ICh5ZXQpXG4gICAgcmV0dXJuIGN1cnJlbnRWaWV3cG9ydDtcbiAgfSk7XG5cbiAgLy8gbWFrZSBjb25kaXRpb25hbCB1cGRhdGVzIHRvIHRoZSBvdGhlciB2aWV3cG9ydCBub3QgbWF0Y2hpbmcgdGhpcyBwYXlsb2FkJ3MgYG1hcEluZGV4YFxuICBpZiAoTnVtYmVyLmlzRmluaXRlKG90aGVyVmlld3BvcnRNYXBJbmRleCkgJiYgb3RoZXJWaWV3cG9ydE1hcEluZGV4ID4gLTEpIHtcbiAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBhIHNwZWNpYWwgY2FzZSBhbmQgYXJlIGFsd2F5cyB1cGRhdGVkXG4gICAgc3BsaXRNYXBWaWV3cG9ydHNbb3RoZXJWaWV3cG9ydE1hcEluZGV4XSA9IHtcbiAgICAgIC4uLnNwbGl0TWFwVmlld3BvcnRzW290aGVyVmlld3BvcnRNYXBJbmRleF0sXG4gICAgICB3aWR0aDogc3BsaXRNYXBWaWV3cG9ydHNbbWFwSW5kZXhdLndpZHRoLFxuICAgICAgaGVpZ2h0OiBzcGxpdE1hcFZpZXdwb3J0c1ttYXBJbmRleF0uaGVpZ2h0XG4gICAgfTtcblxuICAgIGlmIChzdGF0ZS5pc1pvb21Mb2NrZWQpIHtcbiAgICAgIC8vIHVwZGF0ZSB0aGUgb3RoZXIgdmlld3BvcnQgd2l0aCB0aGUgbmV3IHpvb20gZnJvbSB0aGUgc3BsaXQgdmlld3BvcnQgdGhhdCB3YXMgdXBkYXRlZCB3aXRoIHRoaXMgcGF5bG9hZCdzIGBtYXBJbmRleGBcbiAgICAgIHNwbGl0TWFwVmlld3BvcnRzW290aGVyVmlld3BvcnRNYXBJbmRleF0gPSB7XG4gICAgICAgIC4uLnNwbGl0TWFwVmlld3BvcnRzW290aGVyVmlld3BvcnRNYXBJbmRleF0sXG4gICAgICAgIHpvb206IHNwbGl0TWFwVmlld3BvcnRzW21hcEluZGV4XS56b29tXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLy8gdXBkYXRlIHRoZSB0b3AtbGV2ZWwgbWFwU3RhdGUgdmlld3BvcnQgd2l0aCB0aGUgbW9zdCByZWNlbnRseSBpbnRlcmFjdGVkLXdpdGggc3BsaXQgdmlld3BvcnRcbiAgICAvLyBXSFk/IHRoaXMgYXZvaWRzIHpvb20gYW5kIGJvdW5kcyBcImp1bXBpbmdcIiBkdWUgdG8gYSBcInN0YWxlXCIgdG9wLWxldmVsIG1hcFN0YXRlIHZpZXdwb3J0IHdoZW46XG4gICAgLy8gIDEuIHRvZ2dsaW5nIG9mZiB0aGUgdW5zeW5jZWQgdmlld3BvcnRzIG1vZGUgdG8gc3dpdGNoIHRvIHRoZSBzeW5jZWQgdmlld3BvcnRzIG1vZGVcbiAgICAvLyAgMi4gdG9nZ2xpbmcgb24gdGhlIHpvb20gbG9jayBkdXJpbmcgYW4gdW5zeW5jZWQgdmlld3BvcnRzIG1vZGVcbiAgICAuLi5zdGF0ZSxcbiAgICAuLi5zcGxpdE1hcFZpZXdwb3J0c1ttYXBJbmRleF0sXG4gICAgLy8gdXBkYXRlIHRoZSBtYXBTdGF0ZSB3aXRoIHRoZSBuZXcgYXJyYXkgb2Ygc3BsaXQgdmlld3BvcnRzXG4gICAgc3BsaXRNYXBWaWV3cG9ydHNcbiAgfTtcbn07XG5cbi8qKlxuICogRml0IG1hcCB2aWV3cG9ydCB0byBib3VuZHNcbiAqIEBtZW1iZXJvZiBtYXBTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBmaXRCb3VuZHNVcGRhdGVyID0gKFxuICBzdGF0ZTogTWFwU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLkZpdEJvdW5kc1VwZGF0ZXJBY3Rpb25cbik6IE1hcFN0YXRlID0+IHtcbiAgY29uc3QgY2VudGVyQW5kWm9vbSA9IGdldENlbnRlckFuZFpvb21Gcm9tQm91bmRzKGFjdGlvbi5wYXlsb2FkLCB7XG4gICAgd2lkdGg6IHN0YXRlLndpZHRoLFxuICAgIGhlaWdodDogc3RhdGUuaGVpZ2h0LFxuICAgIHBhZGRpbmc6IGFjdGlvbi5tZXRhPy5wYWRkaW5nXG4gIH0pO1xuICBpZiAoIWNlbnRlckFuZFpvb20pIHtcbiAgICAvLyBib3VuZHMgaXMgaW52YWxpZFxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIEluIGdsb2JlIG1vZGUsIGNsYW1wIHpvb20gdG8gZ2xvYmUncyBhbGxvd2VkIHJhbmdlXG4gIGNvbnN0IGlzR2xvYmVNb2RlID0gQm9vbGVhbihzdGF0ZS5nbG9iZT8uZW5hYmxlZCk7XG4gIGNvbnN0IHpvb20gPSBOdW1iZXIuaXNGaW5pdGUoY2VudGVyQW5kWm9vbS56b29tKVxuICAgID8gaXNHbG9iZU1vZGVcbiAgICAgID8gTWF0aC5taW4oTWF0aC5tYXgoY2VudGVyQW5kWm9vbS56b29tLCBHTE9CRV9NSU5fWk9PTSksIEdMT0JFX01BWF9aT09NKVxuICAgICAgOiBjZW50ZXJBbmRab29tLnpvb21cbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXRpdHVkZTogY2VudGVyQW5kWm9vbS5jZW50ZXJbMV0sXG4gICAgbG9uZ2l0dWRlOiBjZW50ZXJBbmRab29tLmNlbnRlclswXSxcbiAgICAvLyBGb3IgbWFyZ2luYWwgb3IgaW52YWxpZCBib3VuZHMsIHpvb20gbWF5IGJlIE5hTi4gTWFrZSBzdXJlIHRvIHByb3ZpZGUgYSB2YWxpZCB2YWx1ZSBpbiBvcmRlclxuICAgIC8vIHRvIGF2b2lkIGNvcnJ1cHQgc3RhdGUgYW5kIHBvdGVudGlhbCBjcmFzaGVzIGFzIHpvb20gaXMgZXhwZWN0ZWQgdG8gYmUgYSBudW1iZXJcbiAgICAuLi4oem9vbSAhPT0gdW5kZWZpbmVkID8ge3pvb219IDoge30pXG4gIH07XG5cbiAgLy8gaWYgZml0dGluZyB0byBib3VuZHMgd2hpbGUgc3BsaXQgYW5kIHVuc3luY2VkXG4gIC8vIGNvcHkgdGhlIG5ldyBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbmQgem9vbSB2YWx1ZXMgdG8gZWFjaCBzcGxpdCB2aWV3cG9ydFxuICBpZiAobmV3U3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMgPSBuZXdTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cy5tYXAoY3VycmVudFZpZXdwb3J0ID0+ICh7XG4gICAgICAuLi5jdXJyZW50Vmlld3BvcnQsXG4gICAgICBsYXRpdHVkZTogbmV3U3RhdGUubGF0aXR1ZGUsXG4gICAgICBsb25naXR1ZGU6IG5ld1N0YXRlLmxvbmdpdHVkZSxcbiAgICAgIHpvb206IG5ld1N0YXRlLnpvb21cbiAgICB9KSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFRvZ2dsZSBiZXR3ZWVuIDNkIGFuZCAyZCBtYXAuXG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlUGVyc3BlY3RpdmVVcGRhdGVyID0gKHN0YXRlOiBNYXBTdGF0ZSk6IE1hcFN0YXRlID0+IHtcbiAgLy8gT25seSBkcm9wIG1pbi9tYXhab29tIHdoZW4gd2UncmUgYWN0dWFsbHkgbGVhdmluZyBnbG9iZSBtb2RlLCB3aGVyZSB0aG9zZVxuICAvLyBib3VuZHMgYXJlIHNldCB0byBnbG9iZS1vbmx5IHZhbHVlcy4gSWYgZ2xvYmUgd2FzIG5ldmVyIGVuYWJsZWQgdGhlc2UgYXJlXG4gIC8vIHRoZSBhcHAncyBvd24gY3VzdG9tIGJvdW5kcyBhbmQgbXVzdCBiZSBwcmVzZXJ2ZWQuXG4gIGNvbnN0IHdhc0dsb2JlRW5hYmxlZCA9IEJvb2xlYW4oc3RhdGUuZ2xvYmU/LmVuYWJsZWQpO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIC4uLntcbiAgICAgIHBpdGNoOiBzdGF0ZS5kcmFnUm90YXRlID8gMCA6IDUwLFxuICAgICAgYmVhcmluZzogc3RhdGUuZHJhZ1JvdGF0ZSA/IDAgOiAyNFxuICAgIH0sXG4gICAgZHJhZ1JvdGF0ZTogIXN0YXRlLmRyYWdSb3RhdGUsXG4gICAgbWFwVmlld01vZGU6IHN0YXRlLmRyYWdSb3RhdGUgPyBNYXBWaWV3TW9kZS5NT0RFXzJEIDogTWFwVmlld01vZGUuTU9ERV8zRCxcbiAgICBnbG9iZTogey4uLnN0YXRlLmdsb2JlISwgZW5hYmxlZDogZmFsc2V9LFxuICAgIC8vIExlYXZpbmcgZ2xvYmUgbW9kZTogZHJvcCBnbG9iZS1vbmx5IHpvb20gYm91bmRzIHNvIHRoZSBmbGF0IG1hcCAoYW5kXG4gICAgLy8gY29uc3VtZXJzIG9mIG1hcFN0YXRlIHN1Y2ggYXMgdmlkZW8gZXhwb3J0KSBhcmVuJ3QgbGVmdCBjbGFtcGVkLiBXaGVuXG4gICAgLy8gZ2xvYmUgd2FzIG5ldmVyIG9uLCBrZWVwIHdoYXRldmVyIG1pbi9tYXhab29tIHRoZSBhcHAgY29uZmlndXJlZC5cbiAgICAuLi4od2FzR2xvYmVFbmFibGVkID8ge21pblpvb206IHVuZGVmaW5lZCwgbWF4Wm9vbTogdW5kZWZpbmVkfSA6IHt9KVxuICB9O1xuXG4gIC8vIGlmIHRvZ2dsaW5nIDNkIGFuZCAyZCB3aGlsZSBzcGxpdCBhbmQgdW5zeW5jZWRcbiAgLy8gY29weSB0aGUgbmV3IHBpdGNoLCBiZWFyaW5nLCBhbmQgZHJhZ1JvdGF0ZSB2YWx1ZXMgdG8gZWFjaCBzcGxpdCB2aWV3cG9ydFxuICBpZiAobmV3U3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMgPSBuZXdTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cy5tYXAoY3VycmVudFZpZXdwb3J0ID0+ICh7XG4gICAgICAuLi5jdXJyZW50Vmlld3BvcnQsXG4gICAgICBwaXRjaDogbmV3U3RhdGUucGl0Y2gsXG4gICAgICBiZWFyaW5nOiBuZXdTdGF0ZS5iZWFyaW5nLFxuICAgICAgZHJhZ1JvdGF0ZTogbmV3U3RhdGUuZHJhZ1JvdGF0ZVxuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IG1hcCB2aWV3IG1vZGUgKDJELCAzRCwgR2xvYmUpXG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwVmlld01vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogTWFwU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlNldE1hcFZpZXdNb2RlVXBkYXRlckFjdGlvblxuKTogTWFwU3RhdGUgPT4ge1xuICBjb25zdCB7bWFwVmlld01vZGV9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGxldCBuZXh0U3RhdGU6IE1hcFN0YXRlO1xuXG4gIC8vIE9ubHkgY2xlYXIgbWluL21heFpvb20gd2hlbiBsZWF2aW5nIGdsb2JlIG1vZGUgKHdoZXJlIHRoZXkgaG9sZCBnbG9iZS1vbmx5XG4gIC8vIGJvdW5kcykuIE90aGVyd2lzZSBwcmVzZXJ2ZSB0aGUgYXBwJ3MgY3VzdG9tIGJvdW5kcy5cbiAgY29uc3Qgd2FzR2xvYmVFbmFibGVkID0gQm9vbGVhbihzdGF0ZS5nbG9iZT8uZW5hYmxlZCk7XG5cbiAgc3dpdGNoIChtYXBWaWV3TW9kZSkge1xuICAgIGNhc2UgTWFwVmlld01vZGUuTU9ERV8yRDpcbiAgICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGdsb2JlOiB7Li4uc3RhdGUuZ2xvYmUhLCBlbmFibGVkOiBmYWxzZX0sXG4gICAgICAgIHBpdGNoOiAwLFxuICAgICAgICBiZWFyaW5nOiAwLFxuICAgICAgICBkcmFnUm90YXRlOiBmYWxzZSxcbiAgICAgICAgLy8gQ2xlYXIgdGhlIGdsb2JlLW9ubHkgem9vbSBib3VuZHMgc28gdGhlIGZsYXQgbWFwIChhbmQgYW55dGhpbmcgdGhhdFxuICAgICAgICAvLyByZWFkcyBtYXBTdGF0ZSwgZS5nLiB2aWRlbyBleHBvcnQpIGlzIG5vdCBsZWZ0IHdpdGggZ2xvYmUnc1xuICAgICAgICAvLyBtaW4vbWF4Wm9vbSBhZnRlciBsZWF2aW5nIGdsb2JlIG1vZGUuIE9ubHkgd2hlbiBnbG9iZSB3YXMgYWN0dWFsbHkgb24uXG4gICAgICAgIC4uLih3YXNHbG9iZUVuYWJsZWQgPyB7bWluWm9vbTogdW5kZWZpbmVkLCBtYXhab29tOiB1bmRlZmluZWR9IDoge30pLFxuICAgICAgICBtYXBWaWV3TW9kZVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWFwVmlld01vZGUuTU9ERV8zRDpcbiAgICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGdsb2JlOiB7Li4uc3RhdGUuZ2xvYmUhLCBlbmFibGVkOiBmYWxzZX0sXG4gICAgICAgIHBpdGNoOiA1MCxcbiAgICAgICAgYmVhcmluZzogMjQsXG4gICAgICAgIGRyYWdSb3RhdGU6IHRydWUsXG4gICAgICAgIC4uLih3YXNHbG9iZUVuYWJsZWQgPyB7bWluWm9vbTogdW5kZWZpbmVkLCBtYXhab29tOiB1bmRlZmluZWR9IDoge30pLFxuICAgICAgICBtYXBWaWV3TW9kZVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWFwVmlld01vZGUuTU9ERV9HTE9CRTpcbiAgICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGdsb2JlOiB7Li4uc3RhdGUuZ2xvYmUhLCBlbmFibGVkOiB0cnVlfSxcbiAgICAgICAgZHJhZ1JvdGF0ZTogdHJ1ZSxcbiAgICAgICAgcGl0Y2g6IDAsXG4gICAgICAgIGJlYXJpbmc6IDAsXG4gICAgICAgIC8vIEFsbG93IHpvb21pbmcgb3V0IGZ1cnRoZXIgdGhhbiB0aGUgZGVmYXVsdCBzbyB0aGUgd2hvbGUgZ2xvYmUgY2FuIGJlXG4gICAgICAgIC8vIHB1bGxlZCBiYWNrIG9uIHNjcmVlbi4gQ2FwIHRoZSBtYXggem9vbSBzbyB0aGUgYmFzZW1hcCB0aWxlcyBzdGF5XG4gICAgICAgIC8vIGNvaGVyZW50ICh0aGV5IGJyZWFrIGRvd24gYXQgaGlnaCBnbG9iZSB6b29tIGluIGRlY2suZ2wgOS54KS5cbiAgICAgICAgbWluWm9vbTogR0xPQkVfTUlOX1pPT00sXG4gICAgICAgIG1heFpvb206IEdMT0JFX01BWF9aT09NLFxuICAgICAgICB6b29tOiBNYXRoLm1pbihNYXRoLm1heChzdGF0ZS56b29tLCBHTE9CRV9NSU5fWk9PTSksIEdMT0JFX01BWF9aT09NKSxcbiAgICAgICAgbWFwVmlld01vZGVcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKG5leHRTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cy5sZW5ndGgpIHtcbiAgICBuZXh0U3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMgPSBuZXh0U3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMubWFwKGN1cnJlbnRWaWV3cG9ydCA9PiAoe1xuICAgICAgLi4uY3VycmVudFZpZXdwb3J0LFxuICAgICAgcGl0Y2g6IG5leHRTdGF0ZS5waXRjaCxcbiAgICAgIGJlYXJpbmc6IG5leHRTdGF0ZS5iZWFyaW5nLFxuICAgICAgZHJhZ1JvdGF0ZTogbmV4dFN0YXRlLmRyYWdSb3RhdGVcbiAgICB9KSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZ2xvYmUgY29uZmlnXG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZ2xvYmVDb25maWdDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogTWFwU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLkdsb2JlQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogTWFwU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGdsb2JlOiB7XG4gICAgICAuLi5zdGF0ZS5nbG9iZSEsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuZ2xvYmUhLmNvbmZpZyxcbiAgICAgICAgLi4uYWN0aW9uLnBheWxvYWRcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIHJlc2V0IG1hcFN0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiBtYXBTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGU6IE1hcFN0YXRlKTogTWFwU3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9NQVBfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vLyBjb25zaWRlciBjYXNlIHdoZXJlIHlvdSBoYXZlIGEgc3BsaXQgbWFwIGFuZCB1c2VyIHdhbnRzIHRvIHJlc2V0XG4vKipcbiAqIFVwZGF0ZSBgbWFwU3RhdGVgIHRvIHByb3BhZ2F0ZSBhIG5ldyBjb25maWdcbiAqIEBtZW1iZXJvZiBtYXBTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IE1hcFN0YXRlLFxuICB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9LCBib3VuZHMgPSBudWxsfVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IE1hcFN0YXRlID0+IHtcbiAgLyoqXG4gICAqIEB0eXBlIHtQYXJ0aWFsPE1hcFN0YXRlPn1cbiAgICovXG4gIGNvbnN0IG1hcFN0YXRlID0gKGNvbmZpZyB8fCB7fSkubWFwU3RhdGUgfHwge307XG4gIC8vIG1lcmdlZCByZWNlaXZlZCBtYXBTdGF0ZSB3aXRoIHByZXZpb3VzIHN0YXRlXG4gIC8vIHN0YXRlIGFsc28gbWF5IGluY2x1ZGUgcHJvcGVydGllcyB0aGF0IGFyZSBuZXcgdG8gYW4gZXhpc3RpbmcsIHNhdmVkIHByb2plY3QncyBtYXBTdGF0ZVxuXG4gIGxldCBtZXJnZWRTdGF0ZSA9IGRlZXBtZXJnZTxNYXBTdGF0ZT4oc3RhdGUsIG1hcFN0YXRlLCB7XG4gICAgLy8gbm90ZTogZGVlcG1lcmdlIGJ5IGRlZmF1bHQgd2lsbCBtZXJnZSBhcnJheXMgYnkgY29uY2F0ZW5hdGluZyB0aGVtXG4gICAgLy8gYnV0IHdlIG5lZWQgdG8gb3ZlcndyaXRlIGRlc3RpbmF0aW9uIGFycmF5cyB3aXRoIHNvdXJjZSBhcnJheXMsIGlmIHByZXNlbnRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vVGVoU2hyaWtlL2RlZXBtZXJnZSNhcnJheW1lcmdlLWV4YW1wbGUtb3ZlcndyaXRlLXRhcmdldC1hcnJheVxuICAgIGFycmF5TWVyZ2U6IChfZGVzdGluYXRpb25BcnJheSwgc291cmNlQXJyYXkpID0+IHNvdXJjZUFycmF5XG4gIH0pO1xuXG4gIC8vIGlmIGNlbnRlciBtYXBcbiAgLy8gY2VudGVyIG1hcCB3aWxsIG92ZXJyaWRlIG1hcFN0YXRlIGNvbmZpZ1xuICBpZiAob3B0aW9ucy5jZW50ZXJNYXAgJiYgYm91bmRzKSB7XG4gICAgbWVyZ2VkU3RhdGUgPSBmaXRCb3VuZHNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgICBwYXlsb2FkOiBib3VuZHMsXG4gICAgICBtZXRhOiB7cGFkZGluZzogb3B0aW9ucy5wYWRkaW5nfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gbWFrZSBzdXJlIHdlIHZhbGlkYXRlIG1hcCBzdGF0ZSBiZWZvcmUgd2UgbWVyZ2VcbiAgbWVyZ2VkU3RhdGUgPSB2YWxpZGF0ZVZpZXdQb3J0KG1lcmdlZFN0YXRlKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgIC8vIHVwZGF0ZSB3aWR0aCBpZiBgaXNTcGxpdGAgaGFzIGNoYW5nZWRcbiAgICAuLi5nZXRNYXBEaW1Gb3JTcGxpdE1hcChtZXJnZWRTdGF0ZS5pc1NwbGl0LCBzdGF0ZSlcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIGJldHdlZW4gb25lIG9yIHNwbGl0IG1hcHNcbiAqIEBtZW1iZXJvZiBtYXBTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoc3RhdGU6IE1hcFN0YXRlKTogTWFwU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIC4uLmdldE1hcERpbUZvclNwbGl0TWFwKCFzdGF0ZS5pc1NwbGl0LCBzdGF0ZSksXG4gIGlzU3BsaXQ6ICFzdGF0ZS5pc1NwbGl0LFxuICBtYXBTcGxpdE1vZGU6ICFzdGF0ZS5pc1NwbGl0ID8gTWFwU3BsaXRNb2RlLkRVQUxfTUFQIDogTWFwU3BsaXRNb2RlLlNJTkdMRV9NQVAsXG4gIC4uLighc3RhdGUuaXNTcGxpdCA9PT0gZmFsc2VcbiAgICA/IHtcbiAgICAgICAgLy8gaWYgdG9nZ2xpbmcgdG8gbm8gbG9uZ2VyIHNwbGl0IChzaW5nbGUgbW9kZSkgdGhlbiByZXNldCBhIGZldyBwcm9wZXJ0aWVzXG4gICAgICAgIGlzVmlld3BvcnRTeW5jZWQ6IHRydWUsXG4gICAgICAgIGlzWm9vbUxvY2tlZDogZmFsc2UsXG4gICAgICAgIHNwbGl0TWFwVmlld3BvcnRzOiBbXVxuICAgICAgfVxuICAgIDoge30pXG59KTtcblxuLyoqXG4gKiBTZXQgdGhlIG1hcCBzcGxpdCBtb2RlIChzaW5nbGUsIGR1YWwsIG9yIHN3aXBlKVxuICogQG1lbWJlcm9mIG1hcFN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcFNwbGl0TW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBNYXBTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuU2V0TWFwU3BsaXRNb2RlVXBkYXRlckFjdGlvblxuKTogTWFwU3RhdGUgPT4ge1xuICBjb25zdCB7bWFwU3BsaXRNb2RlfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBwcmV2TW9kZSA9IHN0YXRlLm1hcFNwbGl0TW9kZTtcblxuICBpZiAobWFwU3BsaXRNb2RlID09PSBwcmV2TW9kZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHN3aXRjaCAobWFwU3BsaXRNb2RlKSB7XG4gICAgY2FzZSBNYXBTcGxpdE1vZGUuU0lOR0xFX01BUDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBtYXBTcGxpdE1vZGUsXG4gICAgICAgIGlzU3BsaXQ6IGZhbHNlLFxuICAgICAgICAuLi4ocHJldk1vZGUgPT09IE1hcFNwbGl0TW9kZS5EVUFMX01BUCAmJiB7XG4gICAgICAgICAgd2lkdGg6IHN0YXRlLndpZHRoICogMlxuICAgICAgICB9KSxcbiAgICAgICAgaXNWaWV3cG9ydFN5bmNlZDogdHJ1ZSxcbiAgICAgICAgaXNab29tTG9ja2VkOiBmYWxzZSxcbiAgICAgICAgc3BsaXRNYXBWaWV3cG9ydHM6IFtdXG4gICAgICB9O1xuICAgIGNhc2UgTWFwU3BsaXRNb2RlLkRVQUxfTUFQOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG1hcFNwbGl0TW9kZSxcbiAgICAgICAgaXNTcGxpdDogdHJ1ZSxcbiAgICAgICAgLi4uKHByZXZNb2RlID09PSBNYXBTcGxpdE1vZGUuU0lOR0xFX01BUCAmJiB7XG4gICAgICAgICAgd2lkdGg6IHN0YXRlLndpZHRoIC8gMlxuICAgICAgICB9KSxcbiAgICAgICAgLi4uKHByZXZNb2RlID09PSBNYXBTcGxpdE1vZGUuU1dJUEVfQ09NUEFSRSAmJiB7XG4gICAgICAgICAgd2lkdGg6IHN0YXRlLndpZHRoIC8gMlxuICAgICAgICB9KVxuICAgICAgfTtcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5TV0lQRV9DT01QQVJFOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG1hcFNwbGl0TW9kZSxcbiAgICAgICAgaXNTcGxpdDogdHJ1ZSxcbiAgICAgICAgLi4uKHByZXZNb2RlID09PSBNYXBTcGxpdE1vZGUuRFVBTF9NQVAgJiYge1xuICAgICAgICAgIHdpZHRoOiBzdGF0ZS53aWR0aCAqIDJcbiAgICAgICAgfSksXG4gICAgICAgIGlzVmlld3BvcnRTeW5jZWQ6IHRydWUsXG4gICAgICAgIGlzWm9vbUxvY2tlZDogZmFsc2UsXG4gICAgICAgIHNwbGl0TWFwVmlld3BvcnRzOiBbXVxuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc3dpcGUgY29tcGFyZSBwZXJjZW50YWdlXG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0U3dpcGVDb21wYXJlUGVyY2VudGFnZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBNYXBTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuU2V0U3dpcGVDb21wYXJlUGVyY2VudGFnZVVwZGF0ZXJBY3Rpb25cbik6IE1hcFN0YXRlID0+IHtcbiAgY29uc3Qge3BlcmNlbnRhZ2V9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIHBlcmNlbnRhZ2UpKTtcbiAgaWYgKGNsYW1wZWQgPT09IHN0YXRlLnN3aXBlQ29tcGFyZVBlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzd2lwZUNvbXBhcmVQZXJjZW50YWdlOiBjbGFtcGVkXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZSBiZXR3ZWVuIGxvY2tlZCBhbmQgdW5sb2NrZWQgc3BsaXQgdmlld3BvcnRzXG4gKiBAbWVtYmVyb2YgbWFwU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBWaWV3cG9ydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBNYXBTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydFVwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICAvLyBTd2lwZSBtb2RlIGFsd2F5cyB1c2VzIHN5bmNlZCB2aWV3cG9ydHNcbiAgaWYgKHN0YXRlLm1hcFNwbGl0TW9kZSA9PT0gTWFwU3BsaXRNb2RlLlNXSVBFX0NPTVBBUkUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBuZXcgbWFwIHN0YXRlIGltbWVkaWF0ZWx5IGdldHMgdGhlIG5ldywgb3B0aW9uYWwgcGF5bG9hZCB2YWx1ZXMgZm9yIGlzVmlld3BvcnRTeW5jZWQgYW5kL29yIGlzWm9vbUxvY2tlZFxuICBjb25zdCBuZXdNYXBTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICAuLi4oYWN0aW9uLnBheWxvYWQgfHwge30pXG4gIH07XG5cbiAgaWYgKG5ld01hcFN0YXRlLmlzVmlld3BvcnRTeW5jZWQpIHtcbiAgICAvLyBzd2l0Y2hpbmcgZnJvbSB1bnN5bmNlZCB0byBzeW5jZWQgdmlld3BvcnRzXG4gICAgbmV3TWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMgPSBbXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBzd2l0Y2hpbmcgZnJvbSBzeW5jZWQgdG8gdW5zeW5jZWQgdmlld3BvcnRzXG4gICAgLy8gb3IgYWxyZWFkeSBpbiB1bnN5bmNlZCBtb2RlIGFuZCB0b2dnbGluZyBsb2NrZWQgem9vbVxuXG4gICAgaWYgKHN0YXRlLmlzWm9vbUxvY2tlZCAmJiAhbmV3TWFwU3RhdGUuaXNab29tTG9ja2VkKSB7XG4gICAgICAvLyBzd2l0Y2hpbmcgb2ZmIGxvY2tlZCB6b29tIHdoaWxlIHVuc3luY2VkXG4gICAgICAvLyBkb24ndCBjb3B5IHRoZSBtYXBTdGF0ZXMgdG8gbGVmdCBhbmQgcmlnaHQgdmlld3BvcnRzIGJlY2F1c2UgdGhlcmUgd2lsbCBiZSB6b29tIFwianVtcGluZ1wiXG4gICAgICByZXR1cm4gbmV3TWFwU3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0ZS5pc1pvb21Mb2NrZWQgJiYgbmV3TWFwU3RhdGUuaXNab29tTG9ja2VkKSB7XG4gICAgICAvLyBzd2l0Y2hpbmcgb24gbG9ja2VkIHpvb20gd2hpbGUgdW5zeW5jZWRcbiAgICAgIC8vIG9ubHkgY29weSB6b29tIHZpZXdwb3J0IHByb3BlcnR5IGZyb20gdGhlIG1vc3QgcmVjZW50bHkgaW50ZXJhY3RlZC13aXRoIHZpZXdwb3J0IHRvIHRoZSBvdGhlclxuICAgICAgLy8gVE9ETzogZG8gd2Ugd2FudCB0byBjaGVjayBmb3IgYSBtYXRjaCBhIGRpZmZlcmVudCB3YXksIHN1Y2ggYXMgYSBjb21ibyBvZiBgbGF0aXR1ZGVgIGFuZCBgbG9uZ2l0dWRlYD9cbiAgICAgIGNvbnN0IGxhc3RVcGRhdGVkVmlld3BvcnRJbmRleCA9IG5ld01hcFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzLmZpbmRJbmRleChcbiAgICAgICAgdiA9PiBuZXdNYXBTdGF0ZS56b29tID09PSB2Lnpvb21cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNwbGl0TWFwVmlld3BvcnRzID0gbmV3TWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHMubWFwKChjdXJyZW50Vmlld3BvcnQsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgPT09IGxhc3RVcGRhdGVkVmlld3BvcnRJbmRleCkge1xuICAgICAgICAgIC8vIG5vIHpvb20gdG8gbW9kaWZ5IGhlcmVcbiAgICAgICAgICByZXR1cm4gY3VycmVudFZpZXdwb3J0O1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoZSBvdGhlciB2aWV3cG9ydCBnZXRzIHRoZSBtb3N0IHJlY2VudGx5IGludGVyYWN0ZWQtd2l0aCB2aWV3cG9ydCdzIHpvb21cbiAgICAgICAgLy8gV0hZPyB0aGUgdmlld3BvcnQgdGhlIHVzZXIgd2FzIGxhc3QgaW50ZXJhY3Rpbmcgd2l0aCB3aWxsIHNldCB6b29tIGFjcm9zcyB0aGUgYm9hcmQgZm9yIHNtb290aCBVWFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmN1cnJlbnRWaWV3cG9ydCxcbiAgICAgICAgICB6b29tOiBuZXdNYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0c1tsYXN0VXBkYXRlZFZpZXdwb3J0SW5kZXhdLnpvb21cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBuZXdNYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cyA9IHNwbGl0TWFwVmlld3BvcnRzO1xuXG4gICAgICByZXR1cm4gbmV3TWFwU3RhdGU7XG4gICAgfVxuXG4gICAgLy8gaWYgY3VycmVudCB2aWV3cG9ydCBpcyBzeW5jZWQsIGFuZCB3ZSBhcmUgdW5zeW5jaW5nIGl0XG4gICAgLy8gb3IgYWxyZWFkeSBpbiB1bnN5bmNlZCBtb2RlIGFuZCBOT1QgdG9nZ2xpbmcgbG9ja2VkIHpvb21cbiAgICAvLyBtYWtlIGEgZnJlc2ggY29weSBvZiB0aGUgY3VycmVudCB2aWV3cG9ydCBvYmplY3QsIGFzc2lnbiBpdCB0byBzcGxpdE1hcFZpZXdwb3J0c1tdXG4gICAgLy8gcGlja1ZpZXdwb3J0UHJvcHNGcm9tTWFwU3RhdGUgaXMgY2FsbGVkIHR3aWNlIHRvIGF2b2lkIG1lbW9yeSBhbGxvY2F0aW9uIGNvbmZsaWN0c1xuICAgIGNvbnN0IGxlZnRWaWV3cG9ydCA9IHBpY2tWaWV3cG9ydFByb3BzRnJvbU1hcFN0YXRlKG5ld01hcFN0YXRlKTtcbiAgICBjb25zdCByaWdodFZpZXdwb3J0ID0gcGlja1ZpZXdwb3J0UHJvcHNGcm9tTWFwU3RhdGUobmV3TWFwU3RhdGUpO1xuICAgIG5ld01hcFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzID0gW2xlZnRWaWV3cG9ydCwgcmlnaHRWaWV3cG9ydF07XG4gIH1cblxuICAvLyByZXR1cm4gbmV3IHN0YXRlXG4gIHJldHVybiBuZXdNYXBTdGF0ZTtcbn07XG5cbi8vIEhlbHBlcnNcbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXBEaW1Gb3JTcGxpdE1hcChpc1NwbGl0LCBzdGF0ZSkge1xuICAvLyBjYXNlczpcbiAgLy8gMS4gc3RhdGUgc3BsaXQ6IHRydWUgLSBpc1NwbGl0OiB0cnVlXG4gIC8vIGRvIG5vdGhpbmdcbiAgLy8gMi4gc3RhdGUgc3BsaXQ6IGZhbHNlIC0gaXNTcGxpdDogZmFsc2VcbiAgLy8gZG8gbm90aGluZ1xuICBpZiAoc3RhdGUuaXNTcGxpdCA9PT0gaXNTcGxpdCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIEluIHN3aXBlIG1vZGUsIGJvdGggbWFwcyB1c2UgZnVsbCB3aWR0aCAob3ZlcmxhcHBpbmcgd2l0aCBjbGlwKVxuICBpZiAoc3RhdGUubWFwU3BsaXRNb2RlID09PSBNYXBTcGxpdE1vZGUuU1dJUEVfQ09NUEFSRSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHdpZHRoID1cbiAgICBzdGF0ZS5pc1NwbGl0ICYmICFpc1NwbGl0XG4gICAgICA/IC8vIDMuIHN0YXRlIHNwbGl0OiB0cnVlIC0gaXNTcGxpdDogZmFsc2VcbiAgICAgICAgLy8gZG91YmxlIHdpZHRoXG4gICAgICAgIHN0YXRlLndpZHRoICogMlxuICAgICAgOiAvLyA0LiBzdGF0ZSBzcGxpdDogZmFsc2UgLSBpc1NwbGl0OiB0cnVlXG4gICAgICAgIC8vIHNwbGl0IHdpZHRoXG4gICAgICAgIHN0YXRlLndpZHRoIC8gMjtcblxuICByZXR1cm4ge1xuICAgIHdpZHRoXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0QmFzZWRPbkJvdW5kcyhzdGF0ZTogTWFwU3RhdGUsIG5ld01hcFN0YXRlOiBNYXBTdGF0ZSkge1xuICAvLyBHZXQgdGhlIG5ldyB2aWV3cG9ydCBib3VuZHNcbiAgY29uc3Qgdmlld3BvcnRCb3VuZHMgPSBnZW9WaWV3cG9ydC5ib3VuZHMoXG4gICAgW25ld01hcFN0YXRlLmxvbmdpdHVkZSwgbmV3TWFwU3RhdGUubGF0aXR1ZGVdLFxuICAgIG5ld01hcFN0YXRlLnpvb20sXG4gICAgW25ld01hcFN0YXRlLndpZHRoLCBuZXdNYXBTdGF0ZS5oZWlnaHRdLFxuICAgIE1BUEJPWF9USUxFX1NJWkVcbiAgKTtcbiAgLy8gR2VuZXJhdGUgdHVyZiBQb2x5Z29uIGZyb20gYm91bmRzIGZvciBjb21wYXJpc29uXG4gIGNvbnN0IHZpZXdwb3J0Qm91bmRzUG9seWdvbiA9IGJib3hQb2x5Z29uKHZpZXdwb3J0Qm91bmRzKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBuZXdTdGF0ZU1heEJvdW5kczogQm91bmRzID0gbmV3TWFwU3RhdGUubWF4Qm91bmRzO1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IG1heEJvdW5kc1BvbHlnb24gPSBiYm94UG9seWdvbihuZXdTdGF0ZU1heEJvdW5kcyk7XG5cbiAgLy8gSWYgbWF4Qm91bmRzIGhhcyBjaGFuZ2VkIHJlc2V0IHRoZSB2aWV3cG9ydCB0byBzbmFwIHRvIGJvdW5kc1xuICBjb25zdCBoYXNNYXhCb3VuZHNDaGFuZ2VkID1cbiAgICAhc3RhdGUubWF4Qm91bmRzIHx8ICFzdGF0ZS5tYXhCb3VuZHMuZXZlcnkoKHZhbCwgaWR4KSA9PiB2YWwgPT09IG5ld1N0YXRlTWF4Qm91bmRzW2lkeF0pO1xuICBpZiAoaGFzTWF4Qm91bmRzQ2hhbmdlZCkge1xuICAgIC8vIENoZWNrIGlmIHRoZSBuZXdNYXBTdGF0ZSB2aWV3cG9ydCBpcyB3aXRoaW4gbWF4Qm91bmRzXG4gICAgaWYgKCFib29sZWFuV2l0aGluKHZpZXdwb3J0Qm91bmRzUG9seWdvbiwgbWF4Qm91bmRzUG9seWdvbikpIHtcbiAgICAgIGNvbnN0IHtsYXRpdHVkZSwgbG9uZ2l0dWRlLCB6b29tfSA9IGZpdEJvdW5kcyh7XG4gICAgICAgIHdpZHRoOiBuZXdNYXBTdGF0ZS53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBuZXdNYXBTdGF0ZS5oZWlnaHQsXG4gICAgICAgIGJvdW5kczogW1xuICAgICAgICAgIFtuZXdTdGF0ZU1heEJvdW5kc1swXSwgbmV3U3RhdGVNYXhCb3VuZHNbMV1dLFxuICAgICAgICAgIFtuZXdTdGF0ZU1heEJvdW5kc1syXSwgbmV3U3RhdGVNYXhCb3VuZHNbM11dXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBuZXdNYXBTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3TWFwU3RhdGUsXG4gICAgICAgIGxhdGl0dWRlLFxuICAgICAgICBsb25naXR1ZGUsXG4gICAgICAgIC8vIEZvciBtYXJnaW5hbCBvciBpbnZhbGlkIGJvdW5kcywgem9vbSBtYXkgYmUgTmFOLiBNYWtlIHN1cmUgdG8gcHJvdmlkZSBhIHZhbGlkIHZhbHVlIGluIG9yZGVyXG4gICAgICAgIC8vIHRvIGF2b2lkIGNvcnJ1cHQgc3RhdGUgYW5kIHBvdGVudGlhbCBjcmFzaGVzIGFzIHpvb20gaXMgZXhwZWN0ZWQgdG8gYmUgYSBudW1iZXJcbiAgICAgICAgLi4uKE51bWJlci5pc0Zpbml0ZSh6b29tKSA/IHt6b29tfSA6IHt9KVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld01hcFN0YXRlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIG5ld01hcFN0YXRlIHZpZXdwb3J0IGlzIHdpdGhpbiBtYXhCb3VuZHNcbiAgaWYgKCFib29sZWFuV2l0aGluKHZpZXdwb3J0Qm91bmRzUG9seWdvbiwgbWF4Qm91bmRzUG9seWdvbikpIHtcbiAgICBuZXdNYXBTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld01hcFN0YXRlLFxuICAgICAgbG9uZ2l0dWRlOiBzdGF0ZS5sb25naXR1ZGUsXG4gICAgICBsYXRpdHVkZTogc3RhdGUubGF0aXR1ZGUsXG4gICAgICB6b29tOiBzdGF0ZS56b29tXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBuZXdNYXBTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBpY2tWaWV3cG9ydFByb3BzRnJvbU1hcFN0YXRlKHN0YXRlOiBNYXBTdGF0ZSk6IFZpZXdwb3J0IHtcbiAgcmV0dXJuIHBpY2soc3RhdGUsIFtcbiAgICAnd2lkdGgnLFxuICAgICdoZWlnaHQnLFxuICAgICd6b29tJyxcbiAgICAncGl0Y2gnLFxuICAgICdiZWFyaW5nJyxcbiAgICAnbGF0aXR1ZGUnLFxuICAgICdsb25naXR1ZGUnLFxuICAgICdkcmFnUm90YXRlJyxcbiAgICAnbWluWm9vbScsXG4gICAgJ21heFpvb20nLFxuICAgICdtYXhQaXRjaCcsXG4gICAgJ21heEJvdW5kcydcbiAgXSk7XG59XG5cbi8qKiBTZWxlY3QgaXRlbXMgZnJvbSBvYmplY3Qgd2hvc2UgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCAqL1xuY29uc3QgZGVmaW5lZFByb3BzID0gb2JqID0+XG4gIE9iamVjdC5lbnRyaWVzKG9iaikucmVkdWNlKFxuICAgIChhY2N1LCBbaywgdl0pID0+ICh7Li4uYWNjdSwgLi4uKHYgIT09IHVuZGVmaW5lZCA/IHtba106IHZ9IDoge30pfSksXG4gICAge31cbiAgKTtcblxuZnVuY3Rpb24gdXBkYXRlVmlld3BvcnQob3JpZ2luYWxWaWV3cG9ydDogVmlld3BvcnQsIHZpZXdwb3J0VXBkYXRlczogVmlld3BvcnQpOiBWaWV3cG9ydCB7XG4gIGxldCBuZXdWaWV3cG9ydCA9IHtcbiAgICAuLi5vcmlnaW5hbFZpZXdwb3J0LFxuICAgIC4uLihkZWZpbmVkUHJvcHModmlld3BvcnRVcGRhdGVzKSB8fCB7fSlcbiAgfTtcblxuICAvLyBkZWNrLmdsJ3MgZ2xvYmUgY29udHJvbGxlciBhcHBsaWVzIGEgbGF0aXR1ZGUtZGVwZW5kZW50IGFkanVzdG1lbnQgdG8gdGhlXG4gIC8vIHpvb20gcmFuZ2UgKHNlZSBLZXBsZXJHbG9iZVZpZXcuX2NvbnN0cmFpblpvb20pLiBJZiB3ZSBjbGFtcCB0aGUgcHJvcGFnYXRlZFxuICAvLyB6b29tIGhlcmUgYWdhaW5zdCB0aGUgcmF3IG1pblpvb20vbWF4Wm9vbSAod2l0aG91dCB0aGF0IGFkanVzdG1lbnQpLCBSZWR1eFxuICAvLyBlbmRzIHVwIGRpc2FncmVlaW5nIHdpdGggdGhlIGNvbnRyb2xsZXI6IHRoZSBjb250cm9sbGVyIGxldHMgdGhlIHVzZXIgcHVsbFxuICAvLyB0aGUgZ2xvYmUgZnVydGhlciBvdXQsIGJ1dCB0aGlzIGNsYW1wIHNuYXBzIHpvb20gYmFjayB0byBgbWluWm9vbWAgd2hlbiB0aGVcbiAgLy8gaW50ZXJhY3Rpb24ncyBpbmVydGlhIHRyYW5zaXRpb24gZW5kcy4gQXBwbHkgdGhlIHNhbWUgYWRqdXN0bWVudCBpbiBnbG9iZVxuICAvLyBtb2RlIHNvIFJlZHV4IHN0YXlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29udHJvbGxlciBhbmQgdGhlcmUncyBubyBzbmFwLWJhY2suXG4gIGNvbnN0IGlzR2xvYmUgPSAobmV3Vmlld3BvcnQgYXMgYW55KS5nbG9iZT8uZW5hYmxlZDtcblxuICBpZiAoaXNHbG9iZSkge1xuICAgIC8vIEtlZXAgdGhlIGNhbWVyYSB0YXJnZXQgd2l0aGluIGEgbGF0aXR1ZGUgYmFuZCBhcm91bmQgdGhlIGVxdWF0b3Igc28gdGhlXG4gICAgLy8gc3RvcmVkIHZpZXdwb3J0IGNhbid0IGJlIGNlbnRlcmVkIG9uIHRoZSBwb2xlcyAobWF0Y2hlcyB0aGUgZ2xvYmVcbiAgICAvLyBjb250cm9sbGVyJ3MgYXBwbHlDb25zdHJhaW50cyBzbyBnZW9jb2Rlci9wcm9ncmFtbWF0aWMgdXBkYXRlcyBhZ3JlZSkuXG4gICAgaWYgKHR5cGVvZiBuZXdWaWV3cG9ydC5sYXRpdHVkZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIG5ld1ZpZXdwb3J0LmxhdGl0dWRlID0gTWF0aC5taW4oXG4gICAgICAgIEdMT0JFX01BWF9MQVRJVFVERSxcbiAgICAgICAgTWF0aC5tYXgoLUdMT0JFX01BWF9MQVRJVFVERSwgbmV3Vmlld3BvcnQubGF0aXR1ZGUpXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCB6b29tQWRqdXN0bWVudCA9IE1hdGgubG9nMihNYXRoLmNvcygoKG5ld1ZpZXdwb3J0LmxhdGl0dWRlID8/IDApICogTWF0aC5QSSkgLyAxODApKTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbmV3Vmlld3BvcnQubWluWm9vbSA9PT0gJ251bWJlcicgJiZcbiAgICAgIHR5cGVvZiBuZXdWaWV3cG9ydC56b29tID09PSAnbnVtYmVyJyAmJlxuICAgICAgbmV3Vmlld3BvcnQuem9vbSA8IG5ld1ZpZXdwb3J0Lm1pblpvb20gKyB6b29tQWRqdXN0bWVudFxuICAgICkge1xuICAgICAgbmV3Vmlld3BvcnQuem9vbSA9IG5ld1ZpZXdwb3J0Lm1pblpvb20gKyB6b29tQWRqdXN0bWVudDtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5ld1ZpZXdwb3J0Lm1heFpvb20gPT09ICdudW1iZXInICYmXG4gICAgICB0eXBlb2YgbmV3Vmlld3BvcnQuem9vbSA9PT0gJ251bWJlcicgJiZcbiAgICAgIG5ld1ZpZXdwb3J0Lnpvb20gPiBuZXdWaWV3cG9ydC5tYXhab29tICsgem9vbUFkanVzdG1lbnRcbiAgICApIHtcbiAgICAgIG5ld1ZpZXdwb3J0Lnpvb20gPSBuZXdWaWV3cG9ydC5tYXhab29tICsgem9vbUFkanVzdG1lbnQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE1ha2Ugc3VyZSB6b29tIGxldmVsIGRvZXNuJ3QgZ28gYmVsbG93IG1pblpvb20gaWYgZGVmaW5lZFxuICAgIGlmIChuZXdWaWV3cG9ydC5taW5ab29tICYmIG5ld1ZpZXdwb3J0Lnpvb20gJiYgbmV3Vmlld3BvcnQuem9vbSA8IG5ld1ZpZXdwb3J0Lm1pblpvb20pIHtcbiAgICAgIG5ld1ZpZXdwb3J0Lnpvb20gPSBuZXdWaWV3cG9ydC5taW5ab29tO1xuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgem9vbSBsZXZlbCBkb2Vzbid0IGdvIGFib3ZlIG1heFpvb20gaWYgZGVmaW5lZFxuICAgIGlmIChuZXdWaWV3cG9ydC5tYXhab29tICYmIG5ld1ZpZXdwb3J0Lnpvb20gJiYgbmV3Vmlld3BvcnQuem9vbSA+IG5ld1ZpZXdwb3J0Lm1heFpvb20pIHtcbiAgICAgIG5ld1ZpZXdwb3J0Lnpvb20gPSBuZXdWaWV3cG9ydC5tYXhab29tO1xuICAgIH1cbiAgfVxuICAvLyBMaW1pdCB2aWV3cG9ydCB1cGRhdGUgYmFzZWQgb24gbWF4Qm91bmRzXG4gIGlmIChuZXdWaWV3cG9ydC5tYXhCb3VuZHMgJiYgdmFsaWRhdGVCb3VuZHMobmV3Vmlld3BvcnQubWF4Qm91bmRzKSkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZSAnVmlld3BvcnQnIGlzIG1pc3NpbmcgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGZyb20gdHlwZSAnTWFwU3RhdGUnOiBpc1NwbGl0LCBpc1ZpZXdwb3J0U3luY2VkLCBpc1pvb21Mb2NrZWQsIHNwbGl0TWFwVmlld3BvcnRzXG4gICAgbmV3Vmlld3BvcnQgPSB1cGRhdGVWaWV3cG9ydEJhc2VkT25Cb3VuZHMob3JpZ2luYWxWaWV3cG9ydCwgbmV3Vmlld3BvcnQpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1ZpZXdwb3J0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTs7QUFFQSxPQUFPQSxXQUFXLE1BQU0sc0JBQXNCO0FBQzlDLFNBQVFDLGFBQWEsUUFBTyxzQkFBc0I7QUFDbEQsU0FBUUMsV0FBVyxRQUFPLG9CQUFvQjtBQUM5QyxTQUFRQyxTQUFTLFFBQU8sdUJBQXVCO0FBQy9DLE9BQU9DLFNBQVMsTUFBTSxXQUFXO0FBQ2pDLE9BQU9DLElBQUksTUFBTSxhQUFhO0FBRTlCLFNBQ0VDLDBCQUEwQixFQUMxQkMsY0FBYyxFQUNk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QUFJLENBQUM2RSxHQUFHLENBQUUsRUFBQUgscUJBQUEsR0FBQ0YsV0FBVyxDQUFDeEgsUUFBUSxjQUFBMEgscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxDQUFDLElBQUkxRSxJQUFJLENBQUM4RSxFQUFFLEdBQUksR0FBRyxDQUFDLENBQUM7SUFDekYsSUFDRSxPQUFPTixXQUFXLENBQUNsSCxPQUFPLEtBQUssUUFBUSxJQUN2QyxPQUFPa0gsV0FBVyxDQUFDdEgsSUFBSSxLQUFLLFFBQVEsSUFDcENzSCxXQUFXLENBQUN0SCxJQUFJLEdBQUdzSCxXQUFXLENBQUNsSCxPQUFPLEdBQUdxSCxjQUFjLEVBQ3ZEO01BQ0FILFdBQVcsQ0FBQ3RILElBQUksR0FBR3NILFdBQVcsQ0FBQ2xILE9BQU8sR0FBR3FILGNBQWM7SUFDekQ7SUFDQSxJQUNFLE9BQU9ILFdBQVcsQ0FBQ2hILE9BQU8sS0FBSyxRQUFRLElBQ3ZDLE9BQU9nSCxXQUFXLENBQUN0SCxJQUFJLEtBQUssUUFBUSxJQUNwQ3NILFdBQVcsQ0FBQ3RILElBQUksR0FBR3NILFdBQVcsQ0FBQ2hILE9BQU8sR0FBR21ILGNBQWMsRUFDdkQ7TUFDQUgsV0FBVyxDQUFDdEgsSUFBSSxHQUFHc0gsV0FBVyxDQUFDaEgsT0FBTyxHQUFHbUgsY0FBYztJQUN6RDtFQUNGLENBQUMsTUFBTTtJQUNMO0lBQ0EsSUFBSUgsV0FBVyxDQUFDbEgsT0FBTyxJQUFJa0gsV0FBVyxDQUFDdEgsSUFBSSxJQUFJc0gsV0FBVyxDQUFDdEgsSUFBSSxHQUFHc0gsV0FBVyxDQUFDbEgsT0FBTyxFQUFFO01BQ3JGa0gsV0FBVyxDQUFDdEgsSUFBSSxHQUFHc0gsV0FBVyxDQUFDbEgsT0FBTztJQUN4QztJQUNBO0lBQ0EsSUFBSWtILFdBQVcsQ0FBQ2hILE9BQU8sSUFBSWdILFdBQVcsQ0FBQ3RILElBQUksSUFBSXNILFdBQVcsQ0FBQ3RILElBQUksR0FBR3NILFdBQVcsQ0FBQ2hILE9BQU8sRUFBRTtNQUNyRmdILFdBQVcsQ0FBQ3RILElBQUksR0FBR3NILFdBQVcsQ0FBQ2hILE9BQU87SUFDeEM7RUFDRjtFQUNBO0VBQ0EsSUFBSWdILFdBQVcsQ0FBQzlHLFNBQVMsSUFBSXZCLGNBQWMsQ0FBQ3FJLFdBQVcsQ0FBQzlHLFNBQVMsQ0FBQyxFQUFFO0lBQ2xFO0lBQ0E4RyxXQUFXLEdBQUd4QiwyQkFBMkIsQ0FBQ3FCLGdCQUFnQixFQUFFRyxXQUFXLENBQUM7RUFDMUU7RUFFQSxPQUFPQSxXQUFXO0FBQ3BCIiwiaWdub3JlTGlzdCI6W119
|