axidio-styleguide-library1-v2 0.4.38 → 0.4.39

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.
@@ -128,7 +128,11 @@ export class GroupChartComponent extends ComponentUniqueId {
128
128
  return { width, height, margin, chartContainer, verticalstackedcontainer };
129
129
  }
130
130
  calculateWidth(chartContainer, margin) {
131
- const baseWidth = parseInt(chartContainer.style('width')) - margin.left - margin.right;
131
+ const containerWidth = parseInt(chartContainer.style('width'));
132
+ const leftSvgWidth = margin.left + 20;
133
+ const rightSvgWidth = 60;
134
+ // Calculate available width excluding fixed y-axis elements
135
+ const baseWidth = containerWidth - leftSvgWidth - rightSvgWidth;
132
136
  const dataLength = this.chartData.data.length;
133
137
  let width = baseWidth;
134
138
  if (dataLength > 30 && this.isZoomedOut) {
@@ -251,17 +255,17 @@ export class GroupChartComponent extends ComponentUniqueId {
251
255
  const { chartContainer, height, margin } = dimensions;
252
256
  const rightSvgWidth = 60;
253
257
  // FIXED: Calculate total height including margins and extra space
254
- const totalHeight = height + margin.top + margin.bottom; // Added extra 60px
258
+ const totalHeight = height + margin.top + margin.bottom + 60; // Added extra 60px
255
259
  const outerContainer = chartContainer
256
260
  .append('div')
257
261
  .attr('id', this.uniqueId)
258
262
  .attr('class', 'outer-container')
259
263
  .style('width', '100%')
260
- .style('height', `${totalHeight}px`) // Use calculated total height
264
+ .style('height', `${totalHeight}px`)
261
265
  .style('overflow', 'hidden')
262
- .style('padding-left', `${margin.left}px`)
266
+ .style('padding-left', '0') // Remove left padding from outer container
263
267
  .style('padding-right', `${rightSvgWidth}px`)
264
- .style('margin-left', '15px')
268
+ .style('margin-left', '0') // Remove left margin
265
269
  .style('position', 'relative');
266
270
  const leftSvgWidth = margin.left + 20;
267
271
  // FIXED: Y-axis SVG with proper height
@@ -272,7 +276,7 @@ export class GroupChartComponent extends ComponentUniqueId {
272
276
  .style('position', 'absolute')
273
277
  .style('left', '0')
274
278
  .style('top', '0')
275
- .style('z-index', 1)
279
+ .style('z-index', 2) // Increased z-index to ensure it stays above
276
280
  .append('g')
277
281
  .attr('transform', `translate(${margin.left + 5},${margin.top})`);
278
282
  const svgYAxisRight = outerContainer
@@ -282,21 +286,23 @@ export class GroupChartComponent extends ComponentUniqueId {
282
286
  .style('position', 'absolute')
283
287
  .style('right', '40px')
284
288
  .style('top', '0')
285
- .style('z-index', 1)
289
+ .style('z-index', 2) // Increased z-index
286
290
  .append('g')
287
291
  .attr('transform', `translate(0,${margin.top})`);
292
+ // FIXED: Inner container starts AFTER the y-axis labels
288
293
  const innerContainer = outerContainer
289
294
  .append('div')
290
295
  .attr('class', 'inner-container')
291
- .style('width', '100%')
292
- .style('height', `${totalHeight}px`) // Match outer container height
296
+ .style('width', `calc(100% - ${leftSvgWidth}px)`) // Account for y-axis width
297
+ .style('height', `${totalHeight}px`)
298
+ .style('margin-left', `${leftSvgWidth}px`) // Push container to start after y-axis
293
299
  .style('overflow-x', 'auto')
294
300
  .style('overflow-y', 'hidden');
295
- // FIXED: Main SVG with increased height
301
+ // FIXED: Main SVG with increased height and proper positioning
296
302
  const svg = innerContainer
297
303
  .append('svg')
298
304
  .attr('width', dimensions.width - rightSvgWidth)
299
- .attr('height', totalHeight) // Use total height
305
+ .attr('height', totalHeight)
300
306
  .append('g')
301
307
  .attr('transform', `translate(0,${margin.top})`);
302
308
  return { outerContainer, svgYAxisLeft, svgYAxisRight, svg, totalHeight };
@@ -960,4 +966,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
960
966
  }], headerMenuclickEvent: [{
961
967
  type: Output
962
968
  }] } });
963
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2dyb3VwLWNoYXJ0L2dyb3VwLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ncm91cC1jaGFydC9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7QUE4RWxELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxpQkFBaUI7SUFxRHhEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUE3Q0EsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV6RCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDaEMsdUJBQWtCLEdBQXVCLEVBQXdCLENBQUM7UUFDbEUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFVix5QkFBb0IsR0FBZ0M7WUFDakUsUUFBUSxFQUFFO2dCQUNOLEtBQUssRUFBRSxFQUFFO2dCQUNULE1BQU0sRUFBRSxHQUFH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LG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxpQkFBaUIsaUJBR1osaUJBQWlCLENBQUMsSUFBSTt3REFJckMsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJbEQsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHcEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG5pbnRlcmZhY2UgQ2hhcnRNZXRhRGF0YSB7XHJcbiAgY29sb3JzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGNvbG9yQWJvdmVUYXJnZXQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGtleUxpc3Q6IHN0cmluZ1tdO1xyXG4gIGhhc0RyaWxsRG93bj86IGJvb2xlYW47XHJcbiAgYmFyV2l0aG91dENsaWNrPzogc3RyaW5nW107XHJcbiAgZGF0YVR5cGU/OiBzdHJpbmc7XHJcbiAgeUxhYmVsPzogc3RyaW5nO1xyXG4gIHhMYWJlbD86IHN0cmluZztcclxuICBsaW5leUxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGFyZ2V0TGluZURhdGEge1xyXG4gIHRhcmdldDogbnVtYmVyO1xyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbiAgdGFyZ2V0TmFtZT86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIENoYXJ0Q29uZmlndXJhdGlvbiB7XHJcbiAgbWFyZ2luOiB7IHRvcDogbnVtYmVyOyByaWdodDogbnVtYmVyOyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyIH07XHJcbiAgbGFiZWxGb3JtYXR0ZXI6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XHJcbiAgc3ZnSGVpZ2h0OiBudW1iZXI7XHJcbiAgbnVtYmVyT2ZZVGlja3M6IG51bWJlcjtcclxuICBsZWdlbmRKdXN0aWZpZWQ6IGJvb2xlYW47XHJcbiAgeUxpbmVBeGlzTGFiZWxGb21hdHRlcjogKHZhbHVlOiBhbnkpID0+IHN0cmluZztcclxuICB5QXhpc0xhYmVsRm9tYXR0ZXI6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XHJcbiAgbGluZUdyYXBoQ29sb3I6IHN0cmluZztcclxuICBzaG93TGluZUNoYXJ0QXhpczogYm9vbGVhbjtcclxuICBzaG93VmFsdWVzOiBib29sZWFuO1xyXG4gIGhlYWRlck1lbnVPcHRpb25zOiBhbnlbXTtcclxuICB4QXhpc0dyaWQ/OiBib29sZWFuO1xyXG4gIHlBeGlzR3JpZDogYm9vbGVhbjtcclxuICBsZWdlbmRWaXNpYmxlOiBib29sZWFuO1xyXG4gIGlzSGVhZGVyVmlzaWJsZT86IGJvb2xlYW47XHJcbiAgaXNUcmFuc3BhcmVudEJhY2tncm91bmQ/OiBib29sZWFuO1xyXG4gIGlzTXVsdGlDaGFydEdyaWRMaW5lPzogYm9vbGVhbjtcclxuICBpc0Z1bGxTY3JlZW4/OiBib29sZWFuO1xyXG4gIGN1c3RvbVlzY2FsZT86IG51bWJlcjtcclxuICB0ZXh0c09uQmFyPzogYm9vbGVhbjtcclxuICBpc1hheGlzTGFiZWxIaWRkZW4/OiBib29sZWFuO1xyXG4gIGlzWWF4aXNMYWJlbEhpZGRlbjogYm9vbGVhbjtcclxuICBpc1lheGlzSGlkZGVuPzogYm9vbGVhbjtcclxuICBpc1lheGlzRGFzaGVkPzogYm9vbGVhbjtcclxuICB0ZXh0Rm9ybWF0dGVyPzogc3RyaW5nO1xyXG4gIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ/OiBib29sZWFuO1xyXG4gIGlzWGdyaWRCZXR3ZWVuTGFiZWxzPzogYm9vbGVhbjtcclxuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcclxuICBoaWRlTGVnZW5kT25Ub3A6IGJvb2xlYW47XHJcbiAgaXNYYXhpc0NvbG9yOiBzdHJpbmc7XHJcbiAgbGFiZWxPdmVybGFwTWlub3JGaXg6IGJvb2xlYW47XHJcbiAgbm9Ib3ZlckVmZmVjdDogYm9vbGVhbjtcclxuICBub0hvdmVyRGlzcGxheURhdGE6IGJvb2xlYW47XHJcbiAgc2hvd1hheGlzVG9wOiBib29sZWFuO1xyXG4gIGRpc3BsYXlZYXhpc0xhYmVscz86IGJvb2xlYW47XHJcbiAgeExhYmVsc09uU2FtZUxpbmU/OiBib29sZWFuO1xyXG4gIHRleHRBbHdheXNIb3Jpem9udGFsPzogYm9vbGVhbjtcclxuICBsZWdlbmRBdFRvcFJpZ2h0PzogYm9vbGVhbjtcclxuICBpc0RyaWxsZG93bkNoYXJ0PzogYm9vbGVhbjtcclxuICBkaXNwbGF5VGl0bGVPblRvcD86IGJvb2xlYW47XHJcbiAgaXNUb2dnbGVWaXNpYmxlPzogYm9vbGVhbjtcclxuICBpc1RpdGxlSGlkZGVuPzogYm9vbGVhbjtcclxuICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b20/OiBib29sZWFuO1xyXG4gIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiBudW1iZXI7XHJcbiAgYmFyVmF1bGVDb2xvcj86IHN0cmluZztcclxuICB5QXhpc0N1c3RvbVRleHRTdHlsZXM/OiBzdHJpbmc7XHJcbiAgeUF4aXNDdXN0b21sYWJlbFN0eWxlcz86IHN0cmluZztcclxuICB4QXhpc0N1c3RvbWxhYmVsU3R5bGVzPzogc3RyaW5nO1xyXG4gIGlzUmlhPzogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZ3JvdXAtY2hhcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JvdXAtY2hhcnQuY29tcG9uZW50Lmxlc3MnLCAnLi4vY29tbW9uLXN0eWxlcy5sZXNzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyb3VwQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRVbmlxdWVJZCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcclxuICBsZWdlbmRWaXNpYmxlID0gdHJ1ZTtcclxuICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogQ2hhcnRDb25maWd1cmF0aW9uID0ge30gYXMgQ2hhcnRDb25maWd1cmF0aW9uO1xyXG4gIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cztcclxuXHJcbnByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbmZpZ3VyYXRpb246IFBhcnRpYWw8Q2hhcnRDb25maWd1cmF0aW9uPiA9IHtcclxuICAgIFwibWFyZ2luXCI6IHtcclxuICAgICAgICBcInRvcFwiOiAzMCxcclxuICAgICAgICBcImxlZnRcIjogMTEwLFxyXG4gICAgICAgIFwicmlnaHRcIjogNDAsXHJcbiAgICAgICAgXCJib3R0b21cIjogNTBcclxuICAgIH0sXHJcbiAgICBsYWJlbEZvcm1hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHN2Z0hlaWdodDogNzAsXHJcbiAgICBudW1iZXJPZllUaWNrczogNSxcclxuICAgIGxlZ2VuZEp1c3RpZmllZDogdHJ1ZSxcclxuICAgIHlMaW5lQXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB5QXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBsaW5lR3JhcGhDb2xvcjogJyNGNkQyODMnLFxyXG4gICAgc2hvd0xpbmVDaGFydEF4aXM6IHRydWUsXHJcbiAgICBzaG93VmFsdWVzOiB0cnVlLFxyXG4gICAgaGVhZGVyTWVudU9wdGlvbnM6IEhlYWRlckNvbmZpZ0hlbHBlci5oZWFkZXJDb25maWcuaGVhZGVyTWVudU9wdGlvbnMsXHJcbiAgICB5QXhpc0dyaWQ6IHRydWUsXHJcbiAgICBsZWdlbmRWaXNpYmxlOiB0cnVlLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiBmYWxzZSxcclxuICAgIGJhY2tncm91bmRDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgaGlkZUxlZ2VuZE9uVG9wOiB0cnVlLFxyXG4gICAgaXNYYXhpc0NvbG9yOiAnIzk5OTk5OScsXHJcbiAgICBsYWJlbE92ZXJsYXBNaW5vckZpeDogdHJ1ZSxcclxuICAgIG5vSG92ZXJFZmZlY3Q6IHRydWUsXHJcbiAgICBub0hvdmVyRGlzcGxheURhdGE6IHRydWUsXHJcbiAgICBzaG93WGF4aXNUb3A6IHRydWUsXHJcbiAgICBob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheTogMCxcclxuICB9O1xyXG5cclxuICB1bmlxdWVJZDogYW55ID0gdGhpcy5nZXRVbmlxdWVJZCgpO1xyXG4gIGlzWm9vbWVkT3V0ID0gZmFsc2U7XHJcbiAgaXNERDFPcGVuID0gZmFsc2U7XHJcbiAgaXNERDJPcGVuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge31cclxuXHJcbiAgZ2V0IGlzQWxlcnRFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uPy5oZWFkZXJNZW51T3B0aW9ucz8uc29tZShcclxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSAnZWRpdEFsZXJ0J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uUmVzaXplZChldmVudDogUmVzaXplZEV2ZW50KTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgZDMuc2VsZWN0KCcjJyArIHRoaXMudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVncm91cENoYXJ0KCk7XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG5cclxuICBpc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQ6IGJvb2xlYW4sIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNab29tZWRPdXQgPSBpc1pvb21PdXQ7XHJcbiAgICB0aGlzLm9uUmVzaXplZChldmVudCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVab29taW5ab29tb3V0Q2xpY2soeyBpc1pvb21PdXQsIGV2ZW50IH0pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCk7XHJcbiAgfVxyXG5cclxuICBpc0xlZ2VuZFZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhPy5tZXRhRGF0YT8uY29sb3JzICYmXHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycykubGVuZ3RoID4gMVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGtlZXBPcmRlciA9IChhLCBiKSA9PiBhO1xyXG5cclxuICBpbml0aWFsaXplZ3JvdXBDaGFydCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVyZ2VDb25maWd1cmF0aW9ucygpO1xyXG4gICAgY29uc3QgY2hhcnRDb250ZXh0ID0gdGhpcy5wcmVwYXJlQ2hhcnREYXRhKCk7XHJcbiAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKGNoYXJ0Q29udGV4dCk7XHJcbiAgICBjb25zdCBzY2FsZXMgPSB0aGlzLmNyZWF0ZVNjYWxlcyhjaGFydENvbnRleHQsIGRpbWVuc2lvbnMpO1xyXG4gICAgY29uc3Qgc3ZnRWxlbWVudHMgPSB0aGlzLmNyZWF0ZVNWR1N0cnVjdHVyZShkaW1lbnNpb25zKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlckF4ZXMoc3ZnRWxlbWVudHMsIHNjYWxlcywgY2hhcnRDb250ZXh0LCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyQmFycyhzdmdFbGVtZW50cy5zdmcsIGNoYXJ0Q29udGV4dCwgc2NhbGVzLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyTGFiZWxzKHN2Z0VsZW1lbnRzLCBzY2FsZXMsIGNoYXJ0Q29udGV4dCwgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLnJlbmRlclRhcmdldExpbmUoc3ZnRWxlbWVudHMsIHNjYWxlcywgY2hhcnRDb250ZXh0LCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyTGluZUdyYXBoKHN2Z0VsZW1lbnRzLnN2ZywgY2hhcnRDb250ZXh0LCBzY2FsZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXJnZUNvbmZpZ3VyYXRpb25zKCk6IHZvaWQge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltrZXldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgIGtleSxcclxuICAgICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZFZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmxlZ2VuZFZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlQ2hhcnREYXRhKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY2hhcnREYXRhLmRhdGE7XHJcbiAgICBjb25zdCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSA9IHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhO1xyXG4gICAgY29uc3QgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuXHJcbiAgICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgICAgbWV0YURhdGEuY29sb3JBYm92ZVRhcmdldCA9IG1ldGFEYXRhLmNvbG9ycztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkYXRhLFxyXG4gICAgICBtZXRhRGF0YSxcclxuICAgICAgbGluZURhdGEsXHJcbiAgICAgIGtleUxpc3Q6IG1ldGFEYXRhLmtleUxpc3QsXHJcbiAgICAgIGNvbG9yTWFwOiBtZXRhRGF0YS5jb2xvcnMsXHJcbiAgICAgIGlzUmlhOiB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbj8uaXNSaWEgfHwgZmFsc2UsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVEaW1lbnNpb25zKGNoYXJ0Q29udGV4dDogYW55KSB7XHJcbiAgICBjb25zdCBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIGNvbnN0IHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmdyb3VwY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgY29uc3QgbWFyZ2luID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luO1xyXG5cclxuICAgIGxldCB3aWR0aCA9IHRoaXMuY2FsY3VsYXRlV2lkdGgoY2hhcnRDb250YWluZXIsIG1hcmdpbik7XHJcbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy5jYWxjdWxhdGVIZWlnaHQodmVydGljYWxzdGFja2VkY29udGFpbmVyLCBtYXJnaW4pO1xyXG5cclxuICAgIGNvbnN0IG1pbkhlaWdodCA9IDE1NTtcclxuICAgIGhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgbWluSGVpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIGNoYXJ0Q29udGFpbmVyLCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlV2lkdGgoY2hhcnRDb250YWluZXI6IGFueSwgbWFyZ2luOiBhbnkpOiBudW1iZXIge1xyXG4gICAgY29uc3QgYmFzZVdpZHRoID0gcGFyc2VJbnQoY2hhcnRDb250YWluZXIuc3R5bGUoJ3dpZHRoJykpIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XHJcbiAgICBjb25zdCBkYXRhTGVuZ3RoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGg7XHJcbiAgICBsZXQgd2lkdGggPSBiYXNlV2lkdGg7XHJcblxyXG4gICAgaWYgKGRhdGFMZW5ndGggPiAzMCAmJiB0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIGNvbnN0IG11bHRpcGxpZXIgPSB0aGlzLmNoYXJ0RGF0YS5kcm9wZG93bkRhdGExID8gNjAgOiA0MDtcclxuICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgZGF0YUxlbmd0aCAqIG11bHRpcGxpZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kcm9wZG93bkRhdGEyICYmIHdpZHRoIDwgZGF0YUxlbmd0aCAqIDEyMCAmJiB0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHdpZHRoID0gZGF0YUxlbmd0aCAqIDEyMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YUxlbmd0aCA+IDggJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgaWYgKHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiYgd2lkdGggPCBkYXRhTGVuZ3RoICogMjUwKSB7XHJcbiAgICAgICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMjUwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHdpZHRoID0gZGF0YUxlbmd0aCAqIDE2MDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB3aWR0aDtcclxuICB9XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZUhlaWdodCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXI6IGFueSwgbWFyZ2luOiBhbnkpOiBudW1iZXIge1xyXG4gIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIHx8IDQwMDtcclxuICBsZXQgaGVpZ2h0O1xyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuKSB7XHJcbiAgICBoZWlnaHQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgfHwgY29udGFpbmVySGVpZ2h0O1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBGSVhFRDogVXNlIHBlcmNlbnRhZ2Ugb2YgY29udGFpbmVyIGhlaWdodCBtb3JlIHJlbGlhYmx5XHJcbiAgICBjb25zdCBzdmdIZWlnaHRQZXJjZW50YWdlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IHx8IDcwO1xyXG4gICAgaGVpZ2h0ID0gKGNvbnRhaW5lckhlaWdodCAqIHN2Z0hlaWdodFBlcmNlbnRhZ2UpIC8gMTAwO1xyXG4gIH1cclxuXHJcbiAgLy8gRklYRUQ6IEFwcGx5IG1hcmdpbiBhZGp1c3RtZW50cyBjb25zaXN0ZW50bHlcclxuICBoZWlnaHQgPSBoZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbTtcclxuXHJcbiAgLy8gRklYRUQ6IEFkZGl0aW9uYWwgYWRqdXN0bWVudHMgZm9yIGhlYWRlcnNcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiAhdGhpcy5pc0hlYWRlclZpc2libGUpIHtcclxuICAgIGhlaWdodCAtPSAxMzA7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgaGVpZ2h0IC09IDEwMDtcclxuICB9XHJcblxyXG4gIC8vIEZJWEVEOiBBZGQgdGhlIGV4dHJhIDUwcHggeW91IHdhbnRlZFxyXG4gIGhlaWdodCArPSA1MDtcclxuXHJcbiAgcmV0dXJuIE1hdGgubWF4KGhlaWdodCwgMTUwKTsgLy8gRW5zdXJlIG1pbmltdW0gaGVpZ2h0XHJcbn1cclxuXHJcbnByaXZhdGUgY3JlYXRlU2NhbGVzKGNoYXJ0Q29udGV4dDogYW55LCBkaW1lbnNpb25zOiBhbnkpIHtcclxuICBjb25zdCB7IGRhdGEsIG1ldGFEYXRhLCBsaW5lRGF0YSwga2V5TGlzdCB9ID0gY2hhcnRDb250ZXh0O1xyXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbWFyZ2luIH0gPSBkaW1lbnNpb25zO1xyXG4gIGNvbnN0IGxlZnRBbmRSaWdodFNwYWNlcyA9IDUwO1xyXG4gIGNvbnN0IHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuXHJcbiAgY29uc3QgZ3JvdXBzID0gZDMubWFwKGRhdGEsIChkKSA9PiBkLm5hbWUpLmtleXMoKTtcclxuXHJcbiAgbGV0IHg6IGFueTtcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgeCA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAucmFuZ2VSb3VuZChbd2lkdGgsIDBdKVxyXG4gICAgICAuYWxpZ24oMC41KVxyXG4gICAgICAucGFkZGluZygwLjUpXHJcbiAgICAgIC5kb21haW4oZGF0YS5tYXAoKGQ6IGFueSkgPT4gZC5uYW1lLnRvTG93ZXJDYXNlKCkpKTtcclxuICB9IGVsc2Uge1xyXG4gICAgeCA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgLnJhbmdlKFtsZWZ0QW5kUmlnaHRTcGFjZXMsIHdpZHRoIC0gcmlnaHRTdmdXaWR0aCAtIGxlZnRBbmRSaWdodFNwYWNlc10pXHJcbiAgICAgIC5wYWRkaW5nKDAuMyk7XHJcbiAgfVxyXG5cclxuICBjb25zdCB4U2NhbGVGcm9tT3JpZ2luID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGdyb3VwcykucmFuZ2UoWzAsIHdpZHRoIC0gcmlnaHRTdmdXaWR0aF0pO1xyXG5cclxuICBjb25zdCB4U3ViZ3JvdXAgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5TGlzdCkucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuXHJcbiAgLy8gRklYRUQ6IEltcHJvdmVkIG1heCB2YWx1ZSBjYWxjdWxhdGlvbiB0aGF0IGNvbnNpZGVycyBoZWlnaHRcclxuICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlTWF4VmFsdWUoZGF0YSwga2V5TGlzdCwgaGVpZ2h0KTtcclxuICBjb25zdCB5ID0gZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsIG1heFZhbHVlXSkubmljZSgpLnJhbmdlUm91bmQoW2hlaWdodCwgMF0pO1xyXG5cclxuICBsZXQgbGluZVlzY2FsZSA9IG51bGw7XHJcbiAgaWYgKGxpbmVEYXRhKSB7XHJcbiAgICBsaW5lWXNjYWxlID0gdGhpcy5jcmVhdGVMaW5lWVNjYWxlKGxpbmVEYXRhLCBoZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgY29sb3IgPSBkMy5zY2FsZU9yZGluYWwoKS5kb21haW4oa2V5TGlzdCkucmFuZ2UoT2JqZWN0LnZhbHVlcyhtZXRhRGF0YS5jb2xvcnMpKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHgsXHJcbiAgICB4U2NhbGVGcm9tT3JpZ2luLFxyXG4gICAgeFN1Ymdyb3VwLFxyXG4gICAgeSxcclxuICAgIGxpbmVZc2NhbGUsXHJcbiAgICBjb2xvcixcclxuICAgIGxlZnRBbmRSaWdodFNwYWNlcyxcclxuICAgIHJpZ2h0U3ZnV2lkdGgsXHJcbiAgfTtcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVNYXhWYWx1ZShkYXRhOiBhbnlbXSwga2V5TGlzdDogc3RyaW5nW10sIGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICBsZXQgbWF4VmFsdWUgPSBkMy5tYXgoZGF0YSwgKGQpID0+IGQzLm1heChrZXlMaXN0LCAoa2V5KSA9PiArZFtrZXldKSkgfHwgMDtcclxuXHJcbiAgLy8gRklYRUQ6IEJldHRlciBoYW5kbGluZyBmb3IgemVybyB2YWx1ZXNcclxuICBpZiAobWF4VmFsdWUgPT09IDApIHtcclxuICAgIG1heFZhbHVlID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGFcclxuICAgICAgPyB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMFxyXG4gICAgICA6IDEwMDtcclxuICB9XHJcblxyXG4gIC8vIEZJWEVEOiBTY2FsZSBiYXNlZCBvbiBhdmFpbGFibGUgaGVpZ2h0XHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSkge1xyXG4gICAgbWF4VmFsdWUgKj0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gIH0gZWxzZSBpZiAoaGVpZ2h0ID4gNDAwKSB7XHJcbiAgICAvLyBBdXRvLXNjYWxlIGZvciBsYXJnZXIgaGVpZ2h0c1xyXG4gICAgbWF4VmFsdWUgKj0gMS4yO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmIG1heFZhbHVlIDwgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQ7XHJcbiAgICBtYXhWYWx1ZSA9IG1heFZhbHVlIDwgMTAgJiYgdGFyZ2V0IDwgMTAgPyB0YXJnZXQgKyAzIDogdGFyZ2V0ICsgKHRhcmdldCAqIDAuMik7IC8vIDIwJSBidWZmZXJcclxuICB9XHJcblxyXG4gIHJldHVybiBtYXhWYWx1ZTtcclxufVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUxpbmVZU2NhbGUobGluZURhdGE6IGFueVtdLCBoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgbGV0IG1heExpbmVWYWx1ZSA9IGQzLm1heChsaW5lRGF0YSwgKGQpID0+ICtkLnZhbHVlKSB8fCAwO1xyXG4gICAgbWF4TGluZVZhbHVlICo9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSB8fCAxO1xyXG5cclxuICAgIGxldCBtaW5MaW5lVmFsdWUgPSBkMy5taW4obGluZURhdGEsIChkKSA9PiArZC52YWx1ZSkgfHwgMDtcclxuICAgIGlmIChtYXhMaW5lVmFsdWUgPiAwKSBtaW5MaW5lVmFsdWUgLT0gMztcclxuICAgIGlmIChtaW5MaW5lVmFsdWUgPiAwKSBtaW5MaW5lVmFsdWUgPSAwO1xyXG5cclxuICAgIHJldHVybiBkMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbbWluTGluZVZhbHVlLCBtYXhMaW5lVmFsdWVdKS5yYW5nZShbaGVpZ2h0LCBtaW5MaW5lVmFsdWVdKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlU1ZHU3RydWN0dXJlKGRpbWVuc2lvbnM6IGFueSkge1xyXG4gIGNvbnN0IHsgY2hhcnRDb250YWluZXIsIGhlaWdodCwgbWFyZ2luIH0gPSBkaW1lbnNpb25zO1xyXG4gIGNvbnN0IHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuICBcclxuICAvLyBGSVhFRDogQ2FsY3VsYXRlIHRvdGFsIGhlaWdodCBpbmNsdWRpbmcgbWFyZ2lucyBhbmQgZXh0cmEgc3BhY2VcclxuICBjb25zdCB0b3RhbEhlaWdodCA9IGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tOyAvLyBBZGRlZCBleHRyYSA2MHB4XHJcblxyXG4gIGNvbnN0IG91dGVyQ29udGFpbmVyID0gY2hhcnRDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignaWQnLCB0aGlzLnVuaXF1ZUlkKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ291dGVyLWNvbnRhaW5lcicpXHJcbiAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBgJHt0b3RhbEhlaWdodH1weGApIC8vIFVzZSBjYWxjdWxhdGVkIHRvdGFsIGhlaWdodFxyXG4gICAgLnN0eWxlKCdvdmVyZmxvdycsICdoaWRkZW4nKVxyXG4gICAgLnN0eWxlKCdwYWRkaW5nLWxlZnQnLCBgJHttYXJnaW4ubGVmdH1weGApXHJcbiAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YClcclxuICAgIC5zdHlsZSgnbWFyZ2luLWxlZnQnLCAnMTVweCcpXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XHJcblxyXG4gIGNvbnN0IGxlZnRTdmdXaWR0aCA9IG1hcmdpbi5sZWZ0ICsgMjA7XHJcblxyXG4gIC8vIEZJWEVEOiBZLWF4aXMgU1ZHIHdpdGggcHJvcGVyIGhlaWdodFxyXG4gIGNvbnN0IHN2Z1lBeGlzTGVmdCA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgbGVmdFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIHRvdGFsSGVpZ2h0KVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAuc3R5bGUoJ2xlZnQnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3RvcCcsICcwJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsIDEpXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7bWFyZ2luLmxlZnQgKyA1fSwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICBjb25zdCBzdmdZQXhpc1JpZ2h0ID0gb3V0ZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIHRvdGFsSGVpZ2h0KVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAuc3R5bGUoJ3JpZ2h0JywgJzQwcHgnKVxyXG4gICAgLnN0eWxlKCd0b3AnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gIGNvbnN0IGlubmVyQ29udGFpbmVyID0gb3V0ZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnaW5uZXItY29udGFpbmVyJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAuc3R5bGUoJ2hlaWdodCcsIGAke3RvdGFsSGVpZ2h0fXB4YCkgLy8gTWF0Y2ggb3V0ZXIgY29udGFpbmVyIGhlaWdodFxyXG4gICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKVxyXG4gICAgLnN0eWxlKCdvdmVyZmxvdy15JywgJ2hpZGRlbicpO1xyXG5cclxuICAvLyBGSVhFRDogTWFpbiBTVkcgd2l0aCBpbmNyZWFzZWQgaGVpZ2h0XHJcbiAgY29uc3Qgc3ZnID0gaW5uZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAuYXR0cignd2lkdGgnLCBkaW1lbnNpb25zLndpZHRoIC0gcmlnaHRTdmdXaWR0aClcclxuICAgIC5hdHRyKCdoZWlnaHQnLCB0b3RhbEhlaWdodCkgLy8gVXNlIHRvdGFsIGhlaWdodFxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gIHJldHVybiB7IG91dGVyQ29udGFpbmVyLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIHN2ZywgdG90YWxIZWlnaHQgfTtcclxufVxyXG5cclxuICBwcml2YXRlIHJlbmRlckF4ZXMoc3ZnRWxlbWVudHM6IGFueSwgc2NhbGVzOiBhbnksIGNoYXJ0Q29udGV4dDogYW55LCBkaW1lbnNpb25zOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQgfSA9IHN2Z0VsZW1lbnRzO1xyXG4gICAgY29uc3QgeyB4LCB4U2NhbGVGcm9tT3JpZ2luLCB5LCBsaW5lWXNjYWxlIH0gPSBzY2FsZXM7XHJcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZGltZW5zaW9ucztcclxuICAgIGNvbnN0IHsgbWV0YURhdGEsIGxpbmVEYXRhLCBrZXlMaXN0IH0gPSBjaGFydENvbnRleHQ7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJYQXhpcyhzdmcsIHgsIHhTY2FsZUZyb21PcmlnaW4sIGhlaWdodCwgY2hhcnRDb250ZXh0LCBrZXlMaXN0KTtcclxuICAgIHRoaXMucmVuZGVyWUF4aXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIHksIGRpbWVuc2lvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJZQXhpc0dyaWQoc3ZnLCB5LCBkaW1lbnNpb25zLndpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYZ3JpZEJldHdlZW5MYWJlbHMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJYQXhpc0dyaWQoc3ZnLCB4LCBoZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsaW5lRGF0YSAmJiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93TGluZUNoYXJ0QXhpcyAmJiBsaW5lWXNjYWxlKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyTGluZVlBeGlzKHN2Z1lBeGlzUmlnaHQsIGxpbmVZc2NhbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbnByaXZhdGUgcmVuZGVyWEF4aXMoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIHg6IGFueSxcclxuICAgIHhTY2FsZUZyb21PcmlnaW46IGFueSxcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgY2hhcnRDb250ZXh0OiBhbnksXHJcbiAgICBrZXlMaXN0OiBzdHJpbmdbXVxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBkYXRhLCBtZXRhRGF0YSB9ID0gY2hhcnRDb250ZXh0O1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IHhBeGlzID0gc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7aGVpZ2h0fSlgKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkpO1xyXG5cclxuICAgICAgLy8gRklYRUQ6IFNob3cgWC1heGlzIGxpbmVcclxuICAgICAgeEF4aXNcclxuICAgICAgICAuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjMDAwMDAwKScpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4JylcclxuICAgICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTtcclxuXHJcbiAgICAgIHhBeGlzLnNlbGVjdEFsbCgnZy50aWNrIGxpbmUnKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgIGNvbnN0IHRleHRDbGFzcyA9ICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bic7XHJcbiAgICAgIGNvbnN0IHRleHRTZWxlY3Rpb24gPSB4QXhpc1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ2cudGljayB0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCB0ZXh0Q2xhc3MpXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IsICM2NjY2NjYpJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMXB4Jyk7XHJcblxyXG4gICAgICBpZiAoa2V5TGlzdC5sZW5ndGggPiAxICYmICFtZXRhRGF0YS54TGFiZWwpIHtcclxuICAgICAgICB0ZXh0U2VsZWN0aW9uLmF0dHIoJ3knLCAyOCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVuZGVyTXVsdGlDaGFydFhBeGlzKHN2ZywgeCwgaGVpZ2h0LCBkYXRhLCBtZXRhRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhMYWJlbHNPblNhbWVMaW5lKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyWExhYmVsc09uU2FtZUxpbmUoc3ZnLCBkYXRhLCBtZXRhRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQm90dG9tIHgtYXhpc1xyXG4gICAgY29uc3QgeEF4aXMyID0gc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneDIgYXhpczInKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7aGVpZ2h0fSlgKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJyMwMDAnKVxyXG4gICAgICAuY2FsbChkMy5heGlzQm90dG9tKHhTY2FsZUZyb21PcmlnaW4pLnRpY2tTaXplKDApKTtcclxuXHJcbiAgICB4QXhpczJcclxuICAgICAgLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICMwMDAwMDApJylcclxuICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4JylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDIuYXhpczIgZy50aWNrIHRleHQnKS5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlck11bHRpQ2hhcnRYQXhpcyhzdmc6IGFueSwgeDogYW55LCBoZWlnaHQ6IG51bWJlciwgZGF0YTogYW55W10sIG1ldGFEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgY29uc3Qgc2hvcnRfdGlja19sZW5ndGhfYmcgPSA1O1xyXG4gICAgY29uc3QgbG9uZ190aWNrX2xlbmd0aF9iZyA9IDMwO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2hlaWdodH0pYClcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgwKSlcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5hdHRyKCd5MicsICgpID0+IHtcclxuICAgICAgaWYgKGFsdGVybmF0ZV90ZXh0ICYmICF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc05vQWx0ZXJuYXRlWGF4aXNUZXh0KSB7XHJcbiAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aF9iZyAtIDc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZyAtIDQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy13ZWVrbHljaGFydHMnKS5hdHRyKCd5JywgKCkgPT4ge1xyXG4gICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoX2JnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGhfYmc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJYTGFiZWxzT25TYW1lTGluZShzdmc6IGFueSwgZGF0YTogYW55W10sIG1ldGFEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNob3J0X3RpY2tfbGVuZ3RoX2JnID0gNTtcclxuICAgIGNvbnN0IGxvbmdfdGlja19sZW5ndGhfYmcgPSAzMDtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgIC5hdHRyKCd5Jywgc2hvcnRfdGlja19sZW5ndGhfYmcpXHJcbiAgICAgIC50ZXh0KChkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNWYWx1ZVRvQmVJZ25vcmVkID0gZGF0YS5zb21lKFxyXG4gICAgICAgICAgKGluZGl2OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGluZGl2Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZC50cmltKCkudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICAgICAgICBpbmRpdlttZXRhRGF0YS5rZXlMaXN0WzBdXSA9PT0gLTFcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChpc1ZhbHVlVG9CZUlnbm9yZWQpIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgaWYgKGQudHJpbSgpLmluZGV4T2YoJyAnKSA+IC0xKSB7XHJcbiAgICAgICAgICByZXR1cm4gZC50cmltKCkuc3Vic3RyaW5nKDAsIGQuaW5kZXhPZignICcpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2snKVxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLmF0dHIoJ3knLCBsb25nX3RpY2tfbGVuZ3RoX2JnKVxyXG4gICAgICAuYXR0cignZmlsbCcsICdjdXJyZW50Q29sb3InKVxyXG4gICAgICAudGV4dCgoZCkgPT4ge1xyXG4gICAgICAgIGlmIChkLnRyaW0oKS5pbmRleE9mKCcgJykgPiAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZyhkLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyWUF4aXMoc3ZnOiBhbnksIHN2Z1lBeGlzTGVmdDogYW55LCBzdmdZQXhpc1JpZ2h0OiBhbnksIHk6IGFueSwgZGltZW5zaW9uczogYW55KTogdm9pZCB7XHJcbiAgICAvLyBNYWluIFktYXhpcyBpbiBjaGFydCBhcmVhIChoaWRkZW4pXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dCB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5KVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAgIC8vIEZJWEVEOiBMZWZ0IFktYXhpcyB3aXRoIHZpc2libGUgbGluZVxyXG4gICAgY29uc3QgeUF4aXNMZWZ0ID0gZDNcclxuICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgIC50aWNrRm9ybWF0KHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzTGFiZWxGb21hdHRlcik7XHJcblxyXG4gICAgY29uc3QgeUF4aXNHcm91cCA9IHN2Z1lBeGlzTGVmdFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKHlBeGlzTGVmdCk7XHJcblxyXG4gICAgLy8gRklYRUQ6IFNob3cgWS1heGlzIHZlcnRpY2FsIGxpbmVcclxuICAgIHlBeGlzR3JvdXBcclxuICAgICAgLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICMwMDAwMDApJylcclxuICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4JylcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcblxyXG4gICAgLy8gRklYRUQ6IFBvc2l0aW9uIFktYXhpcyB2YWx1ZXMgd2l0aCBwcm9wZXIgc3BhY2luZ1xyXG4gICAgeUF4aXNHcm91cFxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IsICM2NjY2NjYpJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTFweCcpXHJcbiAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnNDAwJylcclxuICAgICAgLmF0dHIoJ3gnLCAtNikgIC8vIEZJWEVEOiBTbWFsbCBnYXAgZnJvbSBheGlzIGxpbmVcclxuICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ2VuZCcpXHJcbiAgICAgIC5hdHRyKCdkeScsICcwLjMyZW0nKTtcclxuXHJcbiAgICAvLyBSaWdodCBZLWF4aXMgKGhpZGRlbilcclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5KVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAgIHRoaXMuYXBwbHlBeGlzVmlzaWJpbGl0eVNldHRpbmdzKCk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSBhcHBseUF4aXNWaXNpYmlsaXR5U2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnZy5saWItbGluZS14LWF4aXMtdGV4dCA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAgIC8vIEZJWEVEOiBEb24ndCBoaWRlIHRoZSBZLWF4aXMgbGFiZWwgZWxlbWVudFxyXG4gICAgICBkMy5zZWxlY3RBbGwoJy5saWIteWxhYmVsLXZpc2libGUnKS5zdHlsZSgnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNIaWRkZW4pIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAgIC8vIEZJWEVEOiBLZWVwIFktYXhpcyBsYWJlbCB2aXNpYmxlXHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLmxpYi15bGFiZWwtdmlzaWJsZScpLnN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0Rhc2hlZCkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQgLmRvbWFpbicpLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpLnN0eWxlKCdjb2xvcicsICcjOTk5OTk5Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJZQXhpc0dyaWQoc3ZnOiBhbnksIHk6IGFueSwgd2lkdGg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneS1heGlzLWdyaWQnKVxyXG4gICAgICAuY2FsbChcclxuICAgICAgICBkMy5heGlzTGVmdCh5KVxyXG4gICAgICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgICAgLnRpY2tTaXplKC13aWR0aClcclxuICAgICAgICAgIC50aWNrRm9ybWF0KCcnKVxyXG4gICAgICApXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAnIzUzNTM1M2ZmJykgIC8vIEZJWEVEOiBMaWdodGVyIGdyaWRcclxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNycpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICdub25lJylcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2xpbmUnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcwLjVweCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJYQXhpc0dyaWQoc3ZnOiBhbnksIHg6IGFueSwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3guYmFuZHdpZHRoKCkgLyAyfSwke2hlaWdodH0pYClcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgtaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciwgIzk5OTk5OSknKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxpbmVZQXhpcyhzdmdZQXhpc1JpZ2h0OiBhbnksIGxpbmVZc2NhbGU6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgeUxpbmVBeGlzID0gZDNcclxuICAgICAgLmF4aXNSaWdodChsaW5lWXNjYWxlKVxyXG4gICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAudGlja0Zvcm1hdCh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55TGluZUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuXHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQxJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUxpbmVBeGlzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQmFycyhzdmc6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIHNjYWxlczogYW55LCBkaW1lbnNpb25zOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgZGF0YSwgbWV0YURhdGEsIGtleUxpc3QsIGlzUmlhIH0gPSBjaGFydENvbnRleHQ7XHJcbiAgICBjb25zdCB7IHgsIHhTdWJncm91cCwgeSB9ID0gc2NhbGVzO1xyXG4gICAgY29uc3QgeyBoZWlnaHQgfSA9IGRpbWVuc2lvbnM7XHJcblxyXG4gICAgY29uc3Qgc3RhdGUgPSBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5zZWxlY3RBbGwoJy5zdGF0ZScpXHJcbiAgICAgIC5kYXRhKGRhdGEpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IGB0cmFuc2xhdGUoJHt4KGQubmFtZSl9LDApYCk7XHJcblxyXG4gIHN0YXRlXHJcbiAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgIC5kYXRhKChkKSA9PiB0aGlzLnByZXBhcmVCYXJEYXRhKGQsIGtleUxpc3QpKVxyXG4gICAgLmVudGVyKClcclxuICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2JhcnMnKVxyXG4gICAgLm9uKCdjbGljaycsIChkKSA9PiB0aGlzLmhhbmRsZUJhckNsaWNrKGQsIG1ldGFEYXRhKSlcclxuICAgIC5hdHRyKCd4JywgKGQpID0+IHRoaXMuZ2V0QmFyWChkLCBkYXRhLCB4LCB4U3ViZ3JvdXApKVxyXG4gICAgLmF0dHIoJ3knLCAoZCkgPT4ge1xyXG4gICAgICAvLyBGSVhFRDogRW5zdXJlIGJhcnMgc3RhcnQgZnJvbSBjb3JyZWN0IFkgcG9zaXRpb25cclxuICAgICAgY29uc3QgdmFsdWUgPSBkLnZhbHVlID09PSAtMSA/IDAgOiBkLnZhbHVlO1xyXG4gICAgICByZXR1cm4geSh2YWx1ZSk7XHJcbiAgICB9KVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgKGQpID0+IHRoaXMuZ2V0QmFyV2lkdGgoZCwgZGF0YSwgeCwgeFN1Ymdyb3VwKSlcclxuICAgIC5hdHRyKCdoZWlnaHQnLCAoZCkgPT4ge1xyXG4gICAgICAvLyBGSVhFRDogSW1wcm92ZWQgaGVpZ2h0IGNhbGN1bGF0aW9uXHJcbiAgICAgIGNvbnN0IHZhbHVlID0gZC52YWx1ZSA9PT0gLTEgPyAwIDogZC52YWx1ZTtcclxuICAgICAgcmV0dXJuIGhlaWdodCAtIHkodmFsdWUpO1xyXG4gICAgfSlcclxuICAgIC5zdHlsZSgnY3Vyc29yJywgKGQpID0+IChtZXRhRGF0YS5oYXNEcmlsbERvd24gJiYgIWlzUmlhID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnKSlcclxuICAgIC5hdHRyKCdmaWxsJywgKGQpID0+IHRoaXMuZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEpKTtcclxuXHJcbiAgICBpZiAoIWlzUmlhICYmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCB8fCAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgJiYgIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wKSkpIHtcclxuICAgICAgc3RhdGUuc2VsZWN0QWxsKCdyZWN0Jykub24oJ21vdXNlb3V0JywgKGQsIGkpID0+IHRoaXMuaGFuZGxlTW91c2VPdXQoc3ZnKSkub24oJ21vdXNlb3ZlcicsIChkLCBpKSA9PiB0aGlzLmhhbmRsZU1vdXNlT3ZlcihzdmcsIGQsIGRhdGEsIG1ldGFEYXRhLCB4LCB5LCBzY2FsZXMubGVmdEFuZFJpZ2h0U3BhY2VzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJCYXJUZXh0cyhzdGF0ZSwgZGF0YSwgbWV0YURhdGEsIGtleUxpc3QsIHgsIHhTdWJncm91cCwgeSwgaXNSaWEsIHN2Zyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUJhckRhdGEoZDogYW55LCBrZXlMaXN0OiBzdHJpbmdbXSk6IGFueVtdIHtcclxuICAgIHJldHVybiBrZXlMaXN0Lm1hcCgoa2V5KSA9PiAoeyBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUJhckNsaWNrKGQ6IGFueSwgbWV0YURhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGQua2V5ID09PSAnVGFyZ2V0JykgcmV0dXJuO1xyXG4gICAgaWYgKFxyXG4gICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrPy5sZW5ndGggfHxcclxuICAgICAgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ubmFtZSkgJiYgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5rZXkpKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhclgoZDogYW55LCBkYXRhOiBhbnlbXSwgeDogYW55LCB4U3ViZ3JvdXA6IGFueSk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVEcmlsbGRvd25CYXJYKGQsIGRhdGEsIHgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHhTdWJncm91cChkLmtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZURyaWxsZG93bkJhclgoZDogYW55LCBkYXRhOiBhbnlbXSwgeDogYW55KTogbnVtYmVyIHtcclxuICAgIGxldCB0ZW1wU2NhbGU7XHJcbiAgICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgdGVtcFNjYWxlID0gdGhpcy5hZGp1c3REcmlsbGRvd25TY2FsZSh0ZW1wU2NhbGUsIGRhdGEsIHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGVtcFNjYWxlID8gdGVtcFNjYWxlKGQua2V5KSA6IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkanVzdERyaWxsZG93blNjYWxlKHRlbXBTY2FsZTogYW55LCBkYXRhOiBhbnlbXSwgeDogYW55KTogYW55IHtcclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBjb25zdCBrZXlzTGVuZ3RoID0gT2JqZWN0LmtleXModGhpcy5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoO1xyXG4gICAgICBjb25zdCBvZmZzZXQgPSBrZXlzTGVuZ3RoID09PSAyID8gMjAwIDogMzAwO1xyXG4gICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIG9mZnNldCkgLyAyLFxyXG4gICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIG9mZnNldCkgLyAyLFxyXG4gICAgICBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBTY2FsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFyV2lkdGgoZDogYW55LCBkYXRhOiBhbnlbXSwgeDogYW55LCB4U3ViZ3JvdXA6IGFueSk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICBsZXQgdGVtcFNjYWxlO1xyXG4gICAgICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgIHRlbXBTY2FsZSA9IHRoaXMuYWRqdXN0RHJpbGxkb3duU2NhbGUodGVtcFNjYWxlLCBkYXRhLCB4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gdGVtcFNjYWxlID8gdGVtcFNjYWxlLmJhbmR3aWR0aCgpIDogMDtcclxuICAgIH1cclxuICAgIHJldHVybiB4U3ViZ3JvdXAuYmFuZHdpZHRoKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhckhlaWdodChkOiBhbnksIHk6IGFueSwgaGVpZ2h0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKGQudmFsdWUgPT09IC0xKSByZXR1cm4gaGVpZ2h0IC0geSgwKTtcclxuICAgIGlmIChkLnZhbHVlKSByZXR1cm4gaGVpZ2h0IC0geShkLnZhbHVlKTtcclxuICAgIHJldHVybiBoZWlnaHQgLSB5KDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJDb2xvcihkOiBhbnksIG1ldGFEYXRhOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKFxyXG4gICAgICBkLnZhbHVlICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgIGQudmFsdWUgPj0gcGFyc2VJbnQodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSAmJlxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0XHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRbZC5rZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckJhclRleHRzKFxyXG4gICAgc3RhdGU6IGFueSxcclxuICAgIGRhdGE6IGFueVtdLFxyXG4gICAgbWV0YURhdGE6IGFueSxcclxuICAgIGtleUxpc3Q6IHN0cmluZ1tdLFxyXG4gICAgeDogYW55LFxyXG4gICAgeFN1Ymdyb3VwOiBhbnksXHJcbiAgICB5OiBhbnksXHJcbiAgICBpc1JpYTogYm9vbGVhbixcclxuICAgIHN2ZzogYW55XHJcbiAgKTogdm9pZCB7XHJcbiAgICBzdGF0ZVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLmRhdGEoKGQpID0+IHRoaXMucHJlcGFyZUJhckRhdGEoZCwga2V5TGlzdCkpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgIC5hdHRyKCd5JywgMClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kYXRhLWxhYmVscy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAudGV4dCgoZCkgPT4gdGhpcy5nZXRCYXJUZXh0TGFiZWwoZCkpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICcjMDAwJylcclxuICAgICAgLnN0eWxlKCdmb250LXdlaWdodCcsICdib2xkJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAoKSA9PiB0aGlzLmdldEJhclRleHRGb250U2l6ZSgpKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IHRoaXMuZ2V0QmFyVGV4dFRyYW5zZm9ybShkLCBkYXRhLCB4LCB4U3ViZ3JvdXAsIHkpKVxyXG4gICAgICAub24oJ2NsaWNrJywgKGQpID0+IHRoaXMuaGFuZGxlQmFyQ2xpY2soZCwgbWV0YURhdGEpKTtcclxuXHJcbiAgICBpZiAoIWlzUmlhKSB7XHJcbiAgICAgIHN0YXRlXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1kYXRhLWxhYmVscy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgIC5vbignbW91c2VvdXQnLCAoZCwgaSkgPT4gdGhpcy5oYW5kbGVNb3VzZU91dChzdmcpKVxyXG4gICAgICAgIC5vbignbW91c2VvdmVyJywgKGQsIGkpID0+XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZU1vdXNlT3ZlcihzdmcsIGQsIGRhdGEsIG1ldGFEYXRhLCB4LCB5LCB4LmJhbmR3aWR0aCgpKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhclRleHRMYWJlbChkOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFkLmtleSB8fCAhZC52YWx1ZSkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIGQua2V5Lmxlbmd0aCA+IDIwID8gZC5rZXkuc3Vic3RyaW5nKDAsIDE3KSArICcuLi4nIDogZC5rZXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhclRleHRGb250U2l6ZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gMTkwMCkgcmV0dXJuICcxOHB4JztcclxuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMCkgcmV0dXJuICcxMHB4JztcclxuICAgICAgcmV0dXJuICcxNHB4JztcclxuICAgIH1cclxuICAgIHJldHVybiAnMTRweCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhclRleHRUcmFuc2Zvcm0oZDogYW55LCBkYXRhOiBhbnlbXSwgeDogYW55LCB4U3ViZ3JvdXA6IGFueSwgeTogYW55KTogc3RyaW5nIHtcclxuICAgIGxldCB0ZW1wU2NhbGU7XHJcbiAgICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgdGVtcFNjYWxlID0gdGhpcy5hZGp1c3REcmlsbGRvd25TY2FsZSh0ZW1wU2NhbGUsIGRhdGEsIHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRBbHdheXNIb3Jpem9udGFsKSB7XHJcbiAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eFN1Ymdyb3VwKGQua2V5KX0sJHt5KGQudmFsdWUpIC0gM30pYDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGVtcFNjYWxlICYmICFpc05hTih0ZW1wU2NhbGUoZC5rZXkpKSkge1xyXG4gICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3RlbXBTY2FsZShkLmtleSkgKyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKiAwLjU1fSwke3koMCkgLSAxMH0pIHJvdGF0ZSgyNzApYDtcclxuICAgIH1cclxuICAgIHJldHVybiAndHJhbnNsYXRlKDAsMCknO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVNb3VzZU92ZXIoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIGQ6IGFueSxcclxuICAgIGRhdGE6IGFueVtdLFxyXG4gICAgbWV0YURhdGE6IGFueSxcclxuICAgIHg6IGFueSxcclxuICAgIHk6IGFueSxcclxuICAgIGxlZnRBbmRSaWdodFNwYWNlczogbnVtYmVyXHJcbiAgKTogdm9pZCB7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuXHJcbiAgICBsZXQgdGVtcFNjYWxlO1xyXG4gICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgIHRlbXBTY2FsZSA9IHRoaXMuYWRqdXN0RHJpbGxkb3duU2NhbGUodGVtcFNjYWxlLCBkYXRhLCB4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGZvcmVpZ25PYmplY3QgPSBzdmdcclxuICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgIC5hdHRyKCd4JywgKCkgPT4gdGhpcy5jYWxjdWxhdGVUb29sdGlwWChkLCB4LCB0ZW1wU2NhbGUsIG1ldGFEYXRhLCBsZWZ0QW5kUmlnaHRTcGFjZXMpKVxyXG4gICAgICAuYXR0cigneScsICgpID0+IHkoZC52YWx1ZSkgLSA0MylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgKCkgPT4gdGhpcy5jYWxjdWxhdGVUb29sdGlwV2lkdGgodGVtcFNjYWxlLCBtZXRhRGF0YSwgbGVmdEFuZFJpZ2h0U3BhY2VzKSlcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIDQwKTtcclxuXHJcbiAgICBmb3JlaWduT2JqZWN0XHJcbiAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd0aXRsZScpXHJcbiAgICAgIC5zdHlsZSgnei1pbmRleCcsIDk5KVxyXG4gICAgICAuaHRtbCgoKSA9PiB0aGlzLmdldFRvb2x0aXBIVE1MKGQsIG1ldGFEYXRhKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVRvb2x0aXBYKFxyXG4gICAgZDogYW55LFxyXG4gICAgeDogYW55LFxyXG4gICAgdGVtcFNjYWxlOiBhbnksXHJcbiAgICBtZXRhRGF0YTogYW55LFxyXG4gICAgbGVmdEFuZFJpZ2h0U3BhY2VzOiBudW1iZXJcclxuICApOiBudW1iZXIge1xyXG4gICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgICBpZiAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgIHJldHVybiB4KGQubmFtZSkgKyB0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMiAtIDkwO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgeChkLm5hbWUpICtcclxuICAgICAgICB0ZW1wU2NhbGUoZC5rZXkpIC1cclxuICAgICAgICAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICtcclxuICAgICAgICB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB4KGQubmFtZSkgK1xyXG4gICAgICB0ZW1wU2NhbGUoZC5rZXkpIC1cclxuICAgICAgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArXHJcbiAgICAgIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVRvb2x0aXBXaWR0aCh0ZW1wU2NhbGU6IGFueSwgbWV0YURhdGE6IGFueSwgbGVmdEFuZFJpZ2h0U3BhY2VzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgICBpZiAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgIHJldHVybiAnMTgwcHgnO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRvb2x0aXBIVE1MKGQ6IGFueSwgbWV0YURhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gICAgaWYgKCF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItbmFtZVwiPiR7ZC5uYW1lfTwvc3Bhbj48c3BhbiBjbGFzcz1cInRpdGxlLWJhci12YWx1ZVwiPjxzcGFuPiR7ZC52YWx1ZX08L3NwYW4+JHtkYXRhVHlwZX08L3NwYW4+YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRlbXBLZXkgPSBkLm5hbWUubGVuZ3RoIDw9IDggPyBkLm5hbWUgOiBkLm5hbWUuc3Vic3RyaW5nKDAsIDUpICsgJy4uLic7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItbmFtZVwiPiR7dGVtcEtleX06JHtkLnZhbHVlfSR7ZGF0YVR5cGV9PC9zcGFuPjxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLXZhbHVlXCI+JHtkLm5hbWV9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU1vdXNlT3V0KHN2ZzogYW55KTogdm9pZCB7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGFiZWxzKHN2Z0VsZW1lbnRzOiBhbnksIHNjYWxlczogYW55LCBjaGFydENvbnRleHQ6IGFueSwgZGltZW5zaW9uczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB7IHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0IH0gPSBzdmdFbGVtZW50cztcclxuICAgIGNvbnN0IHsgbWV0YURhdGEgfSA9IGNoYXJ0Q29udGV4dDtcclxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbWFyZ2luIH0gPSBkaW1lbnNpb25zO1xyXG5cclxuICAgIGlmIChtZXRhRGF0YS55TGFiZWwpIHtcclxuICAgICAgdGhpcy5yZW5kZXJZQXhpc0xhYmVsKHN2Z1lBeGlzTGVmdCwgbWV0YURhdGEueUxhYmVsLCBoZWlnaHQsIG1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgICB0aGlzLnJlbmRlclhBeGlzTGFiZWwoc3ZnLCBtZXRhRGF0YS54TGFiZWwsIHdpZHRoLCBoZWlnaHQsIG1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1ldGFEYXRhLmxpbmV5TGFiZWwpIHtcclxuICAgICAgdGhpcy5yZW5kZXJMaW5lWUF4aXNMYWJlbChzdmdZQXhpc1JpZ2h0LCBtZXRhRGF0YS5saW5leUxhYmVsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5wcml2YXRlIHJlbmRlcllBeGlzTGFiZWwoc3ZnWUF4aXNMZWZ0OiBhbnksIHlMYWJlbDogc3RyaW5nLCBoZWlnaHQ6IG51bWJlciwgbWFyZ2luOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIEZJWEVEOiBQcm9wZXIgWS1heGlzIGxhYmVsIHdpdGggY29ycmVjdCBwb3NpdGlvbmluZ1xyXG4gICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLXlsYWJlbC12aXNpYmxlJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoLTkwKScpXHJcbiAgICAgIC5hdHRyKCd5JywgLW1hcmdpbi5sZWZ0KVxyXG4gICAgICAuYXR0cigneCcsIDAgLSBoZWlnaHQgLyAyKVxyXG4gICAgICAuYXR0cignZHknLCAnMWVtJylcclxuICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxM3B4JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IsICM2NjY2NjYpJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgc3ZnWUF4aXNMZWZ0LnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJykudGV4dCh5TGFiZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlsYWJlbC13ZWVrbHlDaGFydHMgbGliLXlsYWJlbC12aXNpYmxlJylcclxuICAgICAgICAudGV4dCh5TGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJYQXhpc0xhYmVsKHN2ZzogYW55LCB4TGFiZWw6IHN0cmluZywgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG1hcmdpbjogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBpc0Fjcm9ueW0gPSB0aGlzLmlzQWNyb255bSh4TGFiZWwucmVwbGFjZSgvW15BLVphLXpdL2csICcnKSk7XHJcblxyXG4gICAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICBiYXNlQ2xhc3MgKz0gJyBsaWIteGxhYmVsLWRyaWxsZG93bmNoYXJ0cyc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgYmFzZUNsYXNzICs9ICcgbGliLXhsYWJlbC13ZWVrbHlDaGFydHMnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYmFzZUNsYXNzICs9ICcgbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsJztcclxuICAgIH1cclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsIGJhc2VDbGFzcylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgLy8gRklYRUQ6IEFkanVzdGVkIGZvciByZWR1Y2VkIGJvdHRvbSBtYXJnaW5cclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHt3aWR0aCAvIDJ9LCR7aGVpZ2h0ICsgMzJ9KWApXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IsICM2NjY2NjYpJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTNweCcpXHJcbiAgICAgIC50ZXh0KGlzQWNyb255bSA/IHhMYWJlbC50b1VwcGVyQ2FzZSgpIDogeExhYmVsLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgIC5zdHlsZSgndGV4dC10cmFuc2Zvcm0nLCBpc0Fjcm9ueW0gPyAnbm9uZScgOiAnY2FwaXRhbGl6ZScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0Fjcm9ueW0obGFiZWw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8XHJcbiAgICAgIChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGluZVlBeGlzTGFiZWwoc3ZnWUF4aXNSaWdodDogYW55LCBsaW5leUxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBsaWItbGluZS1heGlzJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKSByb3RhdGUoOTApJylcclxuICAgICAgLmF0dHIoJ3knLCAtMTAwKVxyXG4gICAgICAuYXR0cigneCcsIDEwMClcclxuICAgICAgLmF0dHIoJ2R5JywgJzVlbScpXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnc21hbGxlcicpXHJcbiAgICAgIC50ZXh0KGxpbmV5TGFiZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJUYXJnZXRMaW5lKHN2Z0VsZW1lbnRzOiBhbnksIHNjYWxlczogYW55LCBjaGFydENvbnRleHQ6IGFueSwgZGltZW5zaW9uczogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgeyBzdmcsIHN2Z1lBeGlzUmlnaHQgfSA9IHN2Z0VsZW1lbnRzO1xyXG4gICAgY29uc3QgeyB5IH0gPSBzY2FsZXM7XHJcbiAgICBjb25zdCB7IHdpZHRoIH0gPSBkaW1lbnNpb25zO1xyXG4gICAgY29uc3QgeyBtZXRhRGF0YSB9ID0gY2hhcnRDb250ZXh0O1xyXG4gICAgY29uc3QgdGFyZ2V0RGF0YTogVGFyZ2V0TGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YTtcclxuXHJcbiAgICBjb25zdCB5WmVybyA9IHkodGFyZ2V0RGF0YS50YXJnZXQpO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdsaW5lJylcclxuICAgICAgLmF0dHIoJ3gxJywgMClcclxuICAgICAgLmF0dHIoJ3gyJywgd2lkdGgpXHJcbiAgICAgIC5hdHRyKCd5MScsIHlaZXJvKVxyXG4gICAgICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgdGFyZ2V0RGF0YS5jb2xvcik7XHJcblxyXG4gICAgY29uc3QgcmlnaHRTdmdXaWR0aCA9IDYwO1xyXG4gICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke3laZXJvIC0gMzB9KWApXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCA1MClcclxuICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RhcmdldC1kaXNwbGF5JylcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC5odG1sKCgpID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSB0YXJnZXREYXRhLnRhcmdldE5hbWUgfHwgJ3RhcmdldCc7XHJcbiAgICAgICAgcmV0dXJuIGA8ZGl2PiR7dGFyZ2V0TmFtZX08L2Rpdj48ZGl2PiR7dGFyZ2V0RGF0YS50YXJnZXR9JHtkYXRhVHlwZX08L2Rpdj5gO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGluZUdyYXBoKHN2ZzogYW55LCBjaGFydENvbnRleHQ6IGFueSwgc2NhbGVzOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgbGluZURhdGEsIG1ldGFEYXRhIH0gPSBjaGFydENvbnRleHQ7XHJcbiAgICBpZiAoIWxpbmVEYXRhKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgeyB4LCBsaW5lWXNjYWxlIH0gPSBzY2FsZXM7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAuZGF0dW0obGluZURhdGEpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxyXG4gICAgICAuYXR0cignc3Ryb2tlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxLjUpXHJcbiAgICAgIC5hdHRyKFxyXG4gICAgICAgICdkJyxcclxuICAgICAgICBkM1xyXG4gICAgICAgICAgLmxpbmUoKVxyXG4gICAgICAgICAgLngoKGQ6IGFueSkgPT4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgICAgICAueSgoZDogYW55KSA9PiBsaW5lWXNjYWxlKGQudmFsdWUpKVxyXG4gICAgICApO1xyXG5cclxuICAgIGNvbnN0IGRvdCA9IHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdteUNpcmNsZXMnKVxyXG4gICAgICAuZGF0YShsaW5lRGF0YSlcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5vbignY2xpY2snLCAoZCkgPT4gdGhpcy5oYW5kbGVCYXJDbGljayhkLCBtZXRhRGF0YSkpO1xyXG5cclxuICAgIGRvdFxyXG4gICAgICAuYXBwZW5kKCdjaXJjbGUnKVxyXG4gICAgICAuYXR0cignZmlsbCcsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgICAuYXR0cignY3gnLCAoZDogYW55KSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLmF0dHIoJ2N5JywgKGQ6IGFueSkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgLnN0eWxlKCdjdXJzb3InLCAncG9pbnRlcicpXHJcbiAgICAgIC5hdHRyKCdyJywgMyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKSB7XHJcbiAgICAgIGRvdFxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdkb3QnKVxyXG4gICAgICAgIC5hdHRyKCdjb2xvcicsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAgIC5hdHRyKCdzdHlsZScsICdmb250LXNpemU6IC44NWVtJylcclxuICAgICAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgICAgIC5hdHRyKCd5JywgKGQ6IGFueSkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgICAuYXR0cignZHknLCAnLTFlbScpXHJcbiAgICAgICAgLnRleHQoKGQ6IGFueSkgPT4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2soZDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duIHx8IGQ/LnRvZ2dsZUZyb20pIHtcclxuICAgICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVIZWFkZXJNZW51Q2xpY2soaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5oZWFkZXJNZW51Y2xpY2tFdmVudC5lbWl0KGlkKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUREMUNsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNERDFPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNERDJPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVERDJDbGljayhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzREQyT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmlzREQxT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcbn0iLCI8ZGl2XHJcbiAgI2dyb3VwY29udGFpbmVyXHJcbiAgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiXHJcbiAgW25nQ2xhc3NdPVwieyAnbGliLW5vLWJhY2tncm91bmQnOiBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCB9XCJcclxuICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcpO1wiXHJcbiAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIlxyXG4+XHJcblxyXG48ZGl2IGNsYXNzPVwiaGVhZGVyLWFsdFwiICpuZ0lmPVwiIWlzSGVhZGVyVmlzaWJsZVwiPlxyXG4gIDxsaWItY2hhcnQtaGVhZGVyLXYyXHJcbiAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAoY2xpY2tFdmVudCk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcclxuICA+PC9saWItY2hhcnQtaGVhZGVyLXYyPlxyXG4gIDxsaWItY2hhcnQtaGVhZGVyLXYzXHJcbiAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAoY29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKT1cImhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICh6b29tSW5ab29tT3V0Q2xpY2spPVwiaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKCRldmVudClcIlxyXG4gID48L2xpYi1jaGFydC1oZWFkZXItdjM+XHJcbjwvZGl2PlxyXG5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12MVxyXG4gIFt0aXRsZV09XCJjaGFydERhdGEubWV0YURhdGEudGl0bGVcIlxyXG4gIFtoYXNEcmlsbERvd25dPVwiY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93blwiXHJcbiAgW2lzRWRpdEVuYWJsZWRdPVwiY2hhcnREYXRhLm1ldGFEYXRhLmlzRWRpdEVuYWJsZWRcIlxyXG4gIFttZW51T3B0aW9uc109XCJjaGFydENvbmZpZ3VyYXRpb24uaGVhZGVyTWVudU9wdGlvbnNcIlxyXG4gIFtpc3JpYV09XCJjdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWFcIlxyXG4gIFtzZWxlY3RlZEtwaVRvb2x0b3BdPVwiY2hhcnRDb25maWd1cmF0aW9uLnNlbGVjdGVkS3BpVG9vbHRvcFwiXHJcbiAgKG1lbnVPcHRpb25DbGlja0V2ZW50KT1cImhhbmRsZUhlYWRlck1lbnVDbGljaygkZXZlbnQpXCJcclxuICBbaXNBbGVydEVuYWJsZWRdPVwiaXNBbGVydEVuYWJsZWRcIlxyXG4gICpuZ0lmPVwiaXNIZWFkZXJWaXNpYmxlXCJcclxuPjwvbGliLWNoYXJ0LWhlYWRlci12MT5cclxuXHJcbiAgPGRpdlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJjaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XCJcclxuICAgIGlkPVwiZ3JvdXBjaGFydGNvbnRhaW5lclwiXHJcbiAgICAjZ3JvdXBjaGFydGNvbnRhaW5lclxyXG4gICAgY2xhc3M9XCJsaWItY2hhcnQtc3ZnXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
969
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2dyb3VwLWNoYXJ0L2dyb3VwLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ncm91cC1jaGFydC9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7QUE4RWxELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxpQkFBaUI7SUFxRHhEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUE3Q0EsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV6RCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDaEMsdUJBQWtCLEdBQXVCLEVBQXdCLENBQUM7UUFDbEUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFVix5QkFBb0IsR0FBZ0M7WUFDakUsUUFBUSxFQUFFO2dCQUNOLEtBQUssRUFBRSxFQUFFO2dCQUNULE1BQU0sRUFBRSxHQUFHO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFFBQVEsRUFBRSxFQUFFO2FBQ2Y7WUFDRCxjQUFjLEVBQUUsV0FBVyxDQUFDLGdCQUFnQjtZQUM1QyxTQUFTLEVBQUUsRUFBRTtZQUNiLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLHNCQUFzQixFQUFFLFdBQVcsQ0FBQyxnQkFBZ0I7WUFDcEQsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLGdCQUFnQjtZQUNoRCxjQUFjLEVBQUUsU0FBUztZQUN6QixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxpQkFBaUI7WUFDcEUsU0FBUyxFQUFFLElBQUk7WUFDZixhQUFhLEVBQUUsSUFBSTtZQUNuQixrQkFBa0IsRUFBRSxLQUFLO1lBQ3pCLGVBQWUsRUFBRSxTQUFTO1lBQzFCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLFlBQVksRUFBRSxTQUFTO1lBQ3ZCLG9CQUFvQixFQUFFLElBQUk7WUFDMUIsYUFBYSxFQUFFLElBQUk7WUFDbkIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixZQUFZLEVBQUUsSUFBSTtZQUNsQiwwQkFBMEIsRUFBRSxDQUFDO1NBQzlCLENBQUM7UUFFRixhQUFRLEdBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQXFDbEIsY0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBakN4QixDQUFDO0lBRUQsUUFBUSxLQUFJLENBQUM7SUFFYixJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUNyRCxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxXQUFXLENBQ3RDLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQW1CO1FBQzNCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQWtCLEVBQUUsS0FBVTtRQUM5QyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sQ0FBQyxDQUFDLENBQ1AsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTTtZQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ3ZELENBQUM7SUFDSixDQUFDO0lBSUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxtQkFBbUI7UUFDekIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLDJCQUEyQixDQUNwRSxHQUFHLEVBQ0gsSUFBSSxDQUFDLG9CQUFvQixFQUN6QixJQUFJLENBQUMsd0JBQXdCLENBQzlCLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbEUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx1QkFBdUIsQ0FBQztRQUNqRixDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBa0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDeEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFFekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzlDLENBQUM7UUFFRCxPQUFPO1lBQ0wsSUFBSTtZQUNKLFFBQVE7WUFDUixRQUFRO1lBQ1IsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ3pCLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTTtZQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEtBQUssSUFBSSxLQUFLO1NBQ3JELENBQUM7SUFDSixDQUFDO0lBRU8sbUJBQW1CLENBQUMsWUFBaUI7UUFDM0MsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUU5QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBFLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUN0QixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFckMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFSyxjQUFjLENBQUMsY0FBbUIsRUFBRSxNQUFXO1FBQ3JELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDL0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBRXpCLDREQUE0RDtRQUM1RCxNQUFNLFNBQVMsR0FBRyxjQUFjLEdBQUcsWUFBWSxHQUFHLGFBQWEsQ0FBQztRQUNoRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDOUMsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBRXRCLElBQUksVUFBVSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFELEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLElBQUksS0FBSyxHQUFHLFVBQVUsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pGLEtBQUssR0FBRyxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsSUFBSSxLQUFLLEdBQUcsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUM3RCxLQUFLLEdBQUcsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxlQUFlLENBQUMsd0JBQTZCLEVBQUUsTUFBVztRQUNoRSxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ2xGLElBQUksTUFBTSxDQUFDO1FBRVgsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekMsTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLElBQUksZUFBZSxDQUFDO1FBQ2hFLENBQUM7YUFBTSxDQUFDO1lBQ04sMERBQTBEO1lBQzFELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDcEUsTUFBTSxHQUFHLENBQUMsZUFBZSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3pELENBQUM7UUFFRCwrQ0FBK0M7UUFDL0MsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFN0MsNENBQTRDO1FBQzVDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxHQUFHLENBQUM7UUFDaEIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxHQUFHLENBQUM7UUFDaEIsQ0FBQztRQUVELHVDQUF1QztRQUN2QyxNQUFNLElBQUksRUFBRSxDQUFDO1FBRWIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtJQUN4RCxDQUFDO0lBRU8sWUFBWSxDQUFDLFlBQWlCLEVBQUUsVUFBZTtRQUNyRCxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsWUFBWSxDQUFDO1FBQzNELE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUM3QyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM5QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFFekIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVsRCxJQUFJLENBQU0sQ0FBQztRQUNYLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9ELENBQUMsR0FBRyxFQUFFO2lCQUNILFNBQVMsRUFBRTtpQkFDWCxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3RCLEtBQUssQ0FBQyxHQUFHLENBQUM7aUJBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQztpQkFDWixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQzthQUFNLENBQUM7WUFDTixDQUFDLEdBQUcsRUFBRTtpQkFDSCxTQUFTLEVBQUU7aUJBQ1gsTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDZCxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEdBQUcsYUFBYSxHQUFHLGtCQUFrQixDQUFDLENBQUM7aUJBQ3ZFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUV6RixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTNFLDhEQUE4RDtRQUM5RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEYsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV0RixPQUFPO1lBQ0wsQ0FBQztZQUNELGdCQUFnQjtZQUNoQixTQUFTO1lBQ1QsQ0FBQztZQUNELFVBQVU7WUFDVixLQUFLO1lBQ0wsa0JBQWtCO1lBQ2xCLGFBQWE7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQVcsRUFBRSxPQUFpQixFQUFFLE1BQWM7UUFDdEUsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNFLHlDQUF5QztRQUN6QyxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQixRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjO2dCQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLEVBQUU7Z0JBQzNDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDVixDQUFDO1FBRUQseUNBQXlDO1FBQ3pDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLFFBQVEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDO1FBQ25ELENBQUM7YUFBTSxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUN4QixnQ0FBZ0M7WUFDaEMsUUFBUSxJQUFJLEdBQUcsQ0FBQztRQUNsQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQ3BELFFBQVEsR0FBRyxRQUFRLEdBQUcsRUFBRSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDL0YsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxRQUFlLEVBQUUsTUFBYztRQUN0RCxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELFlBQVksSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUUxRCxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksWUFBWSxHQUFHLENBQUM7WUFBRSxZQUFZLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksWUFBWSxHQUFHLENBQUM7WUFBRSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFSyxrQkFBa0IsQ0FBQyxVQUFlO1FBQ3hDLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUN0RCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFFekIsa0VBQWtFO1FBQ2xFLE1BQU0sV0FBVyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsbUJBQW1CO1FBRWpGLE1BQU0sY0FBYyxHQUFHLGNBQWM7YUFDbEMsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUN6QixJQUFJLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDO2FBQ2hDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO2FBQ3RCLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxXQUFXLElBQUksQ0FBQzthQUNuQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQzthQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLDJDQUEyQzthQUN0RSxLQUFLLENBQUMsZUFBZSxFQUFFLEdBQUcsYUFBYSxJQUFJLENBQUM7YUFDNUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxxQkFBcUI7YUFDL0MsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVqQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUV0Qyx1Q0FBdUM7UUFDdkMsTUFBTSxZQUFZLEdBQUcsY0FBYzthQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2IsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7YUFDM0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7YUFDM0IsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7YUFDN0IsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7YUFDbEIsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDakIsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyw2Q0FBNkM7YUFDakUsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNYLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUVwRSxNQUFNLGFBQWEsR0FBRyxjQUFjO2FBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDYixJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQzthQUM1QixJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQzthQUMzQixLQUFLLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQzthQUM3QixLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQzthQUN0QixLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQzthQUNqQixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjthQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ1gsSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRW5ELHdEQUF3RDtRQUN4RCxNQUFNLGNBQWMsR0FBRyxjQUFjO2FBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDYixJQUFJLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDO2FBQ2hDLEtBQUssQ0FBQyxPQUFPLEVBQUUsZUFBZSxZQUFZLEtBQUssQ0FBQyxDQUFDLDJCQUEyQjthQUM1RSxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsV0FBVyxJQUFJLENBQUM7YUFDbkMsS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLFlBQVksSUFBSSxDQUFDLENBQUMsdUNBQXVDO2FBQ2pGLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDO2FBQzNCLEtBQUssQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFakMsK0RBQStEO1FBQy9ELE1BQU0sR0FBRyxHQUFHLGNBQWM7YUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUNiLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUM7YUFDL0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7YUFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNYLElBQUksQ0FBQyxXQUFXLEVBQUUsZUFBZSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUVuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzNFLENBQUM7SUFFUyxVQUFVLENBQUMsV0FBZ0IsRUFBRSxNQUFXLEVBQUUsWUFBaUIsRUFBRSxVQUFlO1FBQ2xGLE1BQU0sRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxHQUFHLFdBQVcsQ0FBQztRQUN6RCxNQUFNLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDdEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUM5QixNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxZQUFZLENBQUM7UUFFckQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbEUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUN4RSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVLLFdBQVcsQ0FDZixHQUFRLEVBQ1IsQ0FBTSxFQUNOLGdCQUFxQixFQUNyQixNQUFjLEVBQ2QsWUFBaUIsRUFDakIsT0FBaUI7UUFFakIsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxZQUFZLENBQUM7UUFFeEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0QsTUFBTSxLQUFLLEdBQUcsR0FBRztpQkFDZCxNQUFNLENBQUMsR0FBRyxDQUFDO2lCQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO2lCQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsTUFBTSxHQUFHLENBQUM7aUJBQzNDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRDLDBCQUEwQjtZQUMxQixLQUFLO2lCQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUM7aUJBQ2pCLEtBQUssQ0FBQyxRQUFRLEVBQUUsa0NBQWtDLENBQUM7aUJBQ25ELEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDO2lCQUM1QixLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRTdCLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFeEMsTUFBTSxTQUFTLEdBQUcsa0NBQWtDLENBQUM7WUFDckQsTUFBTSxhQUFhLEdBQUcsS0FBSztpQkFDeEIsU0FBUyxDQUFDLGFBQWEsQ0FBQztpQkFDeEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7aUJBQ3hCLEtBQUssQ0FBQyxNQUFNLEVBQUUsa0NBQWtDLENBQUM7aUJBQ2pELEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFOUIsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDM0MsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsZ0JBQWdCO1FBQ2hCLE1BQU0sTUFBTSxHQUFHLEdBQUc7YUFDZixNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7YUFDekIsSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLE1BQU0sR0FBRyxDQUFDO2FBQzNDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO2FBQ3RCLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckQsTUFBTTthQUNILE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDakIsS0FBSyxDQUFDLFFBQVEsRUFBRSxrQ0FBa0MsQ0FBQzthQUNuRCxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQzthQUM1QixJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXhCLEdBQUcsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWpFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxTQUFTLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDekYsQ0FBQztJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxHQUFRLEVBQUUsQ0FBTSxFQUFFLE1BQWMsRUFBRSxJQUFXLEVBQUUsUUFBYTtRQUN4RixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDM0IsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDL0IsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFFL0IsR0FBRzthQUNBLE1BQU0sQ0FBQyxHQUFHLENBQUM7YUFDWCxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQzthQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsTUFBTSxHQUFHLENBQUM7YUFDM0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFekQsR0FBRyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ3RELElBQUksY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3RFLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLE9BQU8sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixPQUFPLG9CQUFvQixHQUFHLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLEdBQUcsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFDQUFxQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7WUFDMUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsY0FBYyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsT0FBTyxtQkFBbUIsQ0FBQztZQUM3QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDdEIsT0FBTyxvQkFBb0IsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsR0FBUSxFQUFFLElBQVcsRUFBRSxRQUFhO1FBQ2xFLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBRS9CLEdBQUc7YUFDQSxTQUFTLENBQUMsd0JBQXdCLENBQUM7YUFDbkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQ0FBa0MsQ0FBQzthQUNqRCxJQUFJLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDO2FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1YsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUNsQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2dCQUNuRCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNwQyxDQUFDO1lBQ0YsSUFBSSxrQkFBa0I7Z0JBQUUsT0FBTyxFQUFFLENBQUM7WUFFbEMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdELENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUVMLEdBQUc7YUFDQSxTQUFTLENBQUMsbUJBQW1CLENBQUM7YUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsa0NBQWtDLENBQUM7YUFDakQsSUFBSSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzthQUM5QixJQUFJLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQzthQUM1QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNWLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFELENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFRLEVBQUUsWUFBaUIsRUFBRSxhQUFrQixFQUFFLENBQU0sRUFBRSxVQUFlO1FBQzFGLHFDQUFxQztRQUNyQyxHQUFHO2FBQ0EsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsc0NBQXNDLENBQUM7YUFDckQsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUM7YUFDNUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQzthQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ1AsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1Qix1Q0FBdUM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsRUFBRTthQUNqQixRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ1gsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUNYLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDO2FBQzdDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUUxRCxNQUFNLFVBQVUsR0FBRyxZQUFZO2FBQzVCLE1BQU0sQ0FBQyxHQUFHLENBQUM7YUFDWCxJQUFJLENBQUMsT0FBTyxFQUFFLCtDQUErQyxDQUFDO2FBQzlELElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDO2FBQzVELElBQUksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUM7YUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRW5CLG1DQUFtQztRQUNuQyxVQUFVO2FBQ1AsTUFBTSxDQUFDLFNBQVMsQ0FBQzthQUNqQixLQUFLLENBQUMsUUFBUSxFQUFFLGtDQUFrQyxDQUFDO2FBQ25ELEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDO2FBQzVCLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFN0Isb0RBQW9EO1FBQ3BELFVBQVU7YUFDUCxTQUFTLENBQUMsTUFBTSxDQUFDO2FBQ2pCLEtBQUssQ0FBQyxNQUFNLEVBQUUsa0NBQWtDLENBQUM7YUFDakQsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUM7YUFDMUIsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7YUFDM0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLGtDQUFrQzthQUNqRCxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQzthQUMxQixJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXhCLHdCQUF3QjtRQUN4QixhQUFhO2FBQ1YsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsK0NBQStDLENBQUM7YUFDOUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUM7YUFDNUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQzthQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ1AsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUssMkJBQTJCO1FBQy9CLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0MsRUFBRSxDQUFDLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQyxFQUFFLENBQUMsU0FBUyxDQUFDLDBCQUEwQixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQzdFLDZDQUE2QztZQUM3QyxFQUFFLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDMUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDbEUsbUNBQW1DO1lBQ25DLEVBQUUsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQyxFQUFFLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkcsQ0FBQztJQUNILENBQUM7SUFFSyxlQUFlLENBQUMsR0FBUSxFQUFFLENBQU0sRUFBRSxLQUFhO1FBQ25ELEdBQUc7YUFDQSxNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7YUFDNUIsSUFBSSxDQUNILEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ1gsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7YUFDN0MsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ2hCLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FDbEI7YUFDQSxLQUFLLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFFLHNCQUFzQjthQUNuRCxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQzthQUN2QixLQUFLLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDO2FBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUN6QyxTQUFTLENBQUMsTUFBTSxDQUFDO2FBQ2pCLEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLGVBQWUsQ0FBQyxHQUFRLEVBQUUsQ0FBTSxFQUFFLE1BQWM7UUFDdEQsR0FBRzthQUNBLE1BQU0sQ0FBQyxHQUFHLENBQUM7YUFDWCxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQzthQUNyQixJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQzthQUM5RCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDdkQsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQzthQUNoQyxLQUFLLENBQUMsT0FBTyxFQUFFLGtDQUFrQyxDQUFDO2FBQ2xELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxlQUFlLENBQUMsYUFBa0IsRUFBRSxVQUFlO1FBQ3pELE1BQU0sU0FBUyxHQUFHLEVBQUU7YUFDakIsU0FBUyxDQUFDLFVBQVUsQ0FBQzthQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQzthQUM3QyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ1gsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRTlELGFBQWE7YUFDVixNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSwwQkFBMEIsQ0FBQzthQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQzthQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDO2FBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRU8sVUFBVSxDQUFDLEdBQVEsRUFBRSxZQUFpQixFQUFFLE1BQVcsRUFBRSxVQUFlO1FBQzFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFZLENBQUM7UUFDeEQsTUFBTSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ25DLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7UUFFOUIsTUFBTSxLQUFLLEdBQUcsR0FBRzthQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUM7YUFDWCxTQUFTLENBQUMsUUFBUSxDQUFDO2FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDVixLQUFLLEVBQUU7YUFDUCxNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ1gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzRCxLQUFLO2FBQ0YsU0FBUyxDQUFDLE1BQU0sQ0FBQzthQUNqQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVDLEtBQUssRUFBRTthQUNQLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQzthQUNyQixFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNwRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ3JELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNmLG1EQUFtRDtZQUNuRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDM0MsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUM3RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDcEIscUNBQXFDO1lBQ3JDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMzQyxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2pGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqSixLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUN0TCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM3QyxHQUFHLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxDQUFNLEVBQUUsT0FBaUI7UUFDOUMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVPLGNBQWMsQ0FBQyxDQUFNLEVBQUUsUUFBYTtRQUMxQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDL0IsSUFDRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsTUFBTTtZQUNqQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQzNGLENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRU8sT0FBTyxDQUFDLENBQU0sRUFBRSxJQUFXLEVBQUUsQ0FBTSxFQUFFLFNBQWM7UUFDekQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM3QyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVPLHNCQUFzQixDQUFDLENBQU0sRUFBRSxJQUFXLEVBQUUsQ0FBTTtRQUN4RCxJQUFJLFNBQVMsQ0FBQztRQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUMxQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMxQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDN0QsU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUN4QixTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxTQUFjLEVBQUUsSUFBVyxFQUFFLENBQU07UUFDOUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUM5RCxNQUFNLE1BQU0sR0FBRyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUM1QyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUNkLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUM3QyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO2FBQzFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sV0FBVyxDQUFDLENBQU0sRUFBRSxJQUFXLEVBQUUsQ0FBTSxFQUFFLFNBQWM7UUFDN0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM3QyxJQUFJLFNBQVMsQ0FBQztZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQzdELFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNsRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQzt3QkFDeEIsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLFlBQVksQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLE1BQWM7UUFDakQsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUFFLE9BQU8sTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsQ0FBQyxLQUFLO1lBQUUsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxDQUFNLEVBQUUsUUFBYTtRQUN2QyxJQUNFLENBQUMsQ0FBQyxLQUFLO1lBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjO1lBQzdCLENBQUMsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUN6RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFDeEMsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLGNBQWMsQ0FDcEIsS0FBVSxFQUNWLElBQVcsRUFDWCxRQUFhLEVBQ2IsT0FBaUIsRUFDakIsQ0FBTSxFQUNOLFNBQWMsRUFDZCxDQUFNLEVBQ04sS0FBYyxFQUNkLEdBQVE7UUFFUixLQUFLO2FBQ0YsU0FBUyxDQUFDLE1BQU0sQ0FBQzthQUNqQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVDLEtBQUssRUFBRTthQUNQLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDZCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUNaLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ1osSUFBSSxDQUFDLE9BQU8sRUFBRSw4QkFBOEIsQ0FBQzthQUM3QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7YUFDckIsS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7YUFDNUIsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUNuRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzVFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFeEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsS0FBSztpQkFDRixTQUFTLENBQUMsK0JBQStCLENBQUM7aUJBQzFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNsRCxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQ2xFLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxDQUFNO1FBQzVCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNsQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNwRSxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDN0MsSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUk7Z0JBQUUsT0FBTyxNQUFNLENBQUM7WUFDNUMsSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUk7Z0JBQUUsT0FBTyxNQUFNLENBQUM7WUFDNUMsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxDQUFNLEVBQUUsSUFBVyxFQUFFLENBQU0sRUFBRSxTQUFjLEVBQUUsQ0FBTTtRQUM3RSxJQUFJLFNBQVMsQ0FBQztRQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUMxQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMxQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDN0QsU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUN4QixTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2pELE9BQU8sYUFBYSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDNUQsQ0FBQztRQUVELElBQUksU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sYUFBYSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDO1FBQ2xHLENBQUM7UUFDRCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFFTyxlQUFlLENBQ3JCLEdBQVEsRUFDUixDQUFNLEVBQ04sSUFBVyxFQUNYLFFBQWEsRUFDYixDQUFNLEVBQ04sQ0FBTSxFQUNOLGtCQUEwQjtRQUUxQixHQUFHLENBQUMsU0FBUyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFekQsSUFBSSxTQUFTLENBQUM7UUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzdELFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDeEIsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxhQUFhLEdBQUcsR0FBRzthQUN0QixNQUFNLENBQUMsZUFBZSxDQUFDO2FBQ3ZCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2FBQ3RGLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDaEMsSUFBSSxDQUFDLE9BQU8sRUFBRSwrQkFBK0IsQ0FBQzthQUM5QyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7YUFDeEYsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV0QixhQUFhO2FBQ1YsTUFBTSxDQUFDLFdBQVcsQ0FBQzthQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQzthQUN0QixLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQzthQUNwQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLENBQU0sRUFDTixDQUFNLEVBQ04sU0FBYyxFQUNkLFFBQWEsRUFDYixrQkFBMEI7UUFFMUIsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUN6RCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2RSxDQUFDO1lBQ0QsT0FBTyxDQUNMLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNULFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUNoQixDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUNwRCxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUMxQixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sQ0FDTCxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNULFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ2hCLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxHQUFHLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDcEQsU0FBUyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxTQUFjLEVBQUUsUUFBYSxFQUFFLGtCQUEwQjtRQUNyRixJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQixJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ3pELE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxPQUFPLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxHQUFHLGtCQUFrQixHQUFHLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sY0FBYyxDQUFDLENBQU0sRUFBRSxRQUFhO1FBQzFDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsT0FBTyxnQ0FBZ0MsQ0FBQyxDQUFDLElBQUksOENBQThDLENBQUMsQ0FBQyxLQUFLLFVBQVUsUUFBUSxTQUFTLENBQUM7UUFDaEksQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDN0UsT0FBTyxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsUUFBUSx3Q0FBd0MsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1FBQzlILENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQVE7UUFDN0IsR0FBRyxDQUFDLFNBQVMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNELENBQUM7SUFFTyxZQUFZLENBQUMsV0FBZ0IsRUFBRSxNQUFXLEVBQUUsWUFBaUIsRUFBRSxVQUFlO1FBQ3BGLE1BQU0sRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxHQUFHLFdBQVcsQ0FBQztRQUN6RCxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUU3QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFSyxnQkFBZ0IsQ0FBQyxZQUFpQixFQUFFLE1BQWMsRUFBRSxNQUFjLEVBQUUsTUFBVztRQUNuRixzREFBc0Q7UUFDdEQsWUFBWTthQUNULE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLHlDQUF5QyxDQUFDO2FBQ3hELElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDO2FBQzdELElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDO2FBQ2hDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ3ZCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7YUFDakIsS0FBSyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUM7YUFDOUIsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUM7YUFDMUIsS0FBSyxDQUFDLE1BQU0sRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1FBRXJELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9ELFlBQVksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0QsQ0FBQzthQUFNLENBQUM7WUFDTixZQUFZO2lCQUNULFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQztpQkFDbEMsSUFBSSxDQUFDLE9BQU8sRUFBRSw0Q0FBNEMsQ0FBQztpQkFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUssZ0JBQWdCLENBQUMsR0FBUSxFQUFFLE1BQWMsRUFBRSxLQUFhLEVBQUUsTUFBYyxFQUFFLE1BQVc7UUFDekYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRW5FLElBQUksU0FBUyxHQUFHLGtDQUFrQyxDQUFDO1FBQ25ELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDN0MsU0FBUyxJQUFJLDZCQUE2QixDQUFDO1FBQzdDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0RSxTQUFTLElBQUksMEJBQTBCLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLElBQUksMkJBQTJCLENBQUM7UUFDM0MsQ0FBQztRQUVELEdBQUc7YUFDQSxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7YUFDeEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUM7WUFDOUQsNENBQTRDO2FBQzNDLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxLQUFLLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxFQUFFLEdBQUcsQ0FBQzthQUMzRCxLQUFLLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQzthQUM5QixLQUFLLENBQUMsTUFBTSxFQUFFLGtDQUFrQyxDQUFDO2FBQ2pELEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO2FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQzdELEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFhO1FBQzdCLE9BQU8sQ0FDTCxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDdkQsQ0FBQztJQUNKLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxhQUFrQixFQUFFLFVBQWtCO1FBQ2pFLGFBQWE7YUFDVixNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxvQ0FBb0MsQ0FBQzthQUNuRCxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQzthQUM3RCxJQUFJLENBQUMsV0FBVyxFQUFFLDJCQUEyQixDQUFDO2FBQzlDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7YUFDZixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzthQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2FBQ2pCLEtBQUssQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDO2FBQzlCLEtBQUssQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDO2FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsV0FBZ0IsRUFBRSxNQUFXLEVBQUUsWUFBaUIsRUFBRSxVQUFlO1FBQ3hGLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWM7WUFBRSxPQUFPO1FBRTNDLE1BQU0sRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBQzNDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDckIsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUM3QixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLE1BQU0sVUFBVSxHQUFtQixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUVqRSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5DLEdBQUc7YUFDQSxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7YUFDYixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQzthQUNqQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQzthQUNqQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQzthQUNqQixLQUFLLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDO2FBQ2hDLEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJDLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN6QixhQUFhO2FBQ1YsTUFBTSxDQUFDLGVBQWUsQ0FBQzthQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsS0FBSyxHQUFHLEVBQUUsR0FBRyxDQUFDO2FBQy9DLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDO2FBQzVCLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2FBQ2xCLE1BQU0sQ0FBQyxXQUFXLENBQUM7YUFDbkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQzthQUMvQixLQUFLLENBQUMsT0FBTyxFQUFFLHlCQUF5QixDQUFDO2FBQ3pDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUN6QyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztZQUNyRCxPQUFPLFFBQVEsVUFBVSxjQUFjLFVBQVUsQ0FBQyxNQUFNLEdBQUcsUUFBUSxRQUFRLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sZUFBZSxDQUFDLEdBQVEsRUFBRSxZQUFpQixFQUFFLE1BQVc7UUFDOUQsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxZQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRXRCLE1BQU0sRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBRWpDLEdBQUc7YUFDQSxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2QsS0FBSyxDQUFDLFFBQVEsQ0FBQzthQUNmLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO2FBQ3BCLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQzthQUN0RCxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQzthQUN6QixJQUFJLENBQ0gsR0FBRyxFQUNILEVBQUU7YUFDQyxJQUFJLEVBQUU7YUFDTixDQUFDLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUM1QyxDQUFDLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDdEMsQ0FBQztRQUVKLE1BQU0sR0FBRyxHQUFHLEdBQUc7YUFDWixTQUFTLENBQUMsV0FBVyxDQUFDO2FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDZCxLQUFLLEVBQUU7YUFDUCxNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ1gsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUV4RCxHQUFHO2FBQ0EsTUFBTSxDQUFDLFFBQVEsQ0FBQzthQUNoQixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7YUFDcEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDdEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ3JELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0MsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7YUFDMUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVoQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQyxHQUFHO2lCQUNBLE1BQU0sQ0FBQyxNQUFNLENBQUM7aUJBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7aUJBQ3BCLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQztpQkFDckQsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQztpQkFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNwRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMxQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztpQkFDbEIsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLENBQU07UUFDaEIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsRUFBVTtRQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELDhCQUE4QixDQUFDLEtBQVU7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0ExbUNVLG1CQUFtQjttR0FBbkIsbUJBQW1CLG9mQzVGaEMsMDdDQXlDQTs7NEZEbURhLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxpQkFBaUIsaUJBR1osaUJBQWlCLENBQUMsSUFBSTt3REFJckMsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJbEQsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHcEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG5pbnRlcmZhY2UgQ2hhcnRNZXRhRGF0YSB7XHJcbiAgY29sb3JzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGNvbG9yQWJvdmVUYXJnZXQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGtleUxpc3Q6IHN0cmluZ1tdO1xyXG4gIGhhc0RyaWxsRG93bj86IGJvb2xlYW47XHJcbiAgYmFyV2l0aG91dENsaWNrPzogc3RyaW5nW107XHJcbiAgZGF0YVR5cGU/OiBzdHJpbmc7XHJcbiAgeUxhYmVsPzogc3RyaW5nO1xyXG4gIHhMYWJlbD86IHN0cmluZztcclxuICBsaW5leUxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGFyZ2V0TGluZURhdGEge1xyXG4gIHRhcmdldDogbnVtYmVyO1xyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbiAgdGFyZ2V0TmFtZT86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIENoYXJ0Q29uZmlndXJhdGlvbiB7XHJcbiAgbWFyZ2luOiB7IHRvcDogbnVtYmVyOyByaWdodDogbnVtYmVyOyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyIH07XHJcbiAgbGFiZWxGb3JtYXR0ZXI6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XHJcbiAgc3ZnSGVpZ2h0OiBudW1iZXI7XHJcbiAgbnVtYmVyT2ZZVGlja3M6IG51bWJlcjtcclxuICBsZWdlbmRKdXN0aWZpZWQ6IGJvb2xlYW47XHJcbiAgeUxpbmVBeGlzTGFiZWxGb21hdHRlcjogKHZhbHVlOiBhbnkpID0+IHN0cmluZztcclxuICB5QXhpc0xhYmVsRm9tYXR0ZXI6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XHJcbiAgbGluZUdyYXBoQ29sb3I6IHN0cmluZztcclxuICBzaG93TGluZUNoYXJ0QXhpczogYm9vbGVhbjtcclxuICBzaG93VmFsdWVzOiBib29sZWFuO1xyXG4gIGhlYWRlck1lbnVPcHRpb25zOiBhbnlbXTtcclxuICB4QXhpc0dyaWQ/OiBib29sZWFuO1xyXG4gIHlBeGlzR3JpZDogYm9vbGVhbjtcclxuICBsZWdlbmRWaXNpYmxlOiBib29sZWFuO1xyXG4gIGlzSGVhZGVyVmlzaWJsZT86IGJvb2xlYW47XHJcbiAgaXNUcmFuc3BhcmVudEJhY2tncm91bmQ/OiBib29sZWFuO1xyXG4gIGlzTXVsdGlDaGFydEdyaWRMaW5lPzogYm9vbGVhbjtcclxuICBpc0Z1bGxTY3JlZW4/OiBib29sZWFuO1xyXG4gIGN1c3RvbVlzY2FsZT86IG51bWJlcjtcclxuICB0ZXh0c09uQmFyPzogYm9vbGVhbjtcclxuICBpc1hheGlzTGFiZWxIaWRkZW4/OiBib29sZWFuO1xyXG4gIGlzWWF4aXNMYWJlbEhpZGRlbjogYm9vbGVhbjtcclxuICBpc1lheGlzSGlkZGVuPzogYm9vbGVhbjtcclxuICBpc1lheGlzRGFzaGVkPzogYm9vbGVhbjtcclxuICB0ZXh0Rm9ybWF0dGVyPzogc3RyaW5nO1xyXG4gIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ/OiBib29sZWFuO1xyXG4gIGlzWGdyaWRCZXR3ZWVuTGFiZWxzPzogYm9vbGVhbjtcclxuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcclxuICBoaWRlTGVnZW5kT25Ub3A6IGJvb2xlYW47XHJcbiAgaXNYYXhpc0NvbG9yOiBzdHJpbmc7XHJcbiAgbGFiZWxPdmVybGFwTWlub3JGaXg6IGJvb2xlYW47XHJcbiAgbm9Ib3ZlckVmZmVjdDogYm9vbGVhbjtcclxuICBub0hvdmVyRGlzcGxheURhdGE6IGJvb2xlYW47XHJcbiAgc2hvd1hheGlzVG9wOiBib29sZWFuO1xyXG4gIGRpc3BsYXlZYXhpc0xhYmVscz86IGJvb2xlYW47XHJcbiAgeExhYmVsc09uU2FtZUxpbmU/OiBib29sZWFuO1xyXG4gIHRleHRBbHdheXNIb3Jpem9udGFsPzogYm9vbGVhbjtcclxuICBsZWdlbmRBdFRvcFJpZ2h0PzogYm9vbGVhbjtcclxuICBpc0RyaWxsZG93bkNoYXJ0PzogYm9vbGVhbjtcclxuICBkaXNwbGF5VGl0bGVPblRvcD86IGJvb2xlYW47XHJcbiAgaXNUb2dnbGVWaXNpYmxlPzogYm9vbGVhbjtcclxuICBpc1RpdGxlSGlkZGVuPzogYm9vbGVhbjtcclxuICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b20/OiBib29sZWFuO1xyXG4gIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiBudW1iZXI7XHJcbiAgYmFyVmF1bGVDb2xvcj86IHN0cmluZztcclxuICB5QXhpc0N1c3RvbVRleHRTdHlsZXM/OiBzdHJpbmc7XHJcbiAgeUF4aXNDdXN0b21sYWJlbFN0eWxlcz86IHN0cmluZztcclxuICB4QXhpc0N1c3RvbWxhYmVsU3R5bGVzPzogc3RyaW5nO1xyXG4gIGlzUmlhPzogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZ3JvdXAtY2hhcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JvdXAtY2hhcnQuY29tcG9uZW50Lmxlc3MnLCAnLi4vY29tbW9uLXN0eWxlcy5sZXNzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyb3VwQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRVbmlxdWVJZCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcclxuICBsZWdlbmRWaXNpYmxlID0gdHJ1ZTtcclxuICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogQ2hhcnRDb25maWd1cmF0aW9uID0ge30gYXMgQ2hhcnRDb25maWd1cmF0aW9uO1xyXG4gIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cztcclxuXHJcbnByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbmZpZ3VyYXRpb246IFBhcnRpYWw8Q2hhcnRDb25maWd1cmF0aW9uPiA9IHtcclxuICAgIFwibWFyZ2luXCI6IHtcclxuICAgICAgICBcInRvcFwiOiAzMCxcclxuICAgICAgICBcImxlZnRcIjogMTEwLFxyXG4gICAgICAgIFwicmlnaHRcIjogNDAsXHJcbiAgICAgICAgXCJib3R0b21cIjogNTBcclxuICAgIH0sXHJcbiAgICBsYWJlbEZvcm1hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHN2Z0hlaWdodDogNzAsXHJcbiAgICBudW1iZXJPZllUaWNrczogNSxcclxuICAgIGxlZ2VuZEp1c3RpZmllZDogdHJ1ZSxcclxuICAgIHlMaW5lQXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB5QXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBsaW5lR3JhcGhDb2xvcjogJyNGNkQyODMnLFxyXG4gICAgc2hvd0xpbmVDaGFydEF4aXM6IHRydWUsXHJcbiAgICBzaG93VmFsdWVzOiB0cnVlLFxyXG4gICAgaGVhZGVyTWVudU9wdGlvbnM6IEhlYWRlckNvbmZpZ0hlbHBlci5oZWFkZXJDb25maWcuaGVhZGVyTWVudU9wdGlvbnMsXHJcbiAgICB5QXhpc0dyaWQ6IHRydWUsXHJcbiAgICBsZWdlbmRWaXNpYmxlOiB0cnVlLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiBmYWxzZSxcclxuICAgIGJhY2tncm91bmRDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgaGlkZUxlZ2VuZE9uVG9wOiB0cnVlLFxyXG4gICAgaXNYYXhpc0NvbG9yOiAnIzk5OTk5OScsXHJcbiAgICBsYWJlbE92ZXJsYXBNaW5vckZpeDogdHJ1ZSxcclxuICAgIG5vSG92ZXJFZmZlY3Q6IHRydWUsXHJcbiAgICBub0hvdmVyRGlzcGxheURhdGE6IHRydWUsXHJcbiAgICBzaG93WGF4aXNUb3A6IHRydWUsXHJcbiAgICBob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheTogMCxcclxuICB9O1xyXG5cclxuICB1bmlxdWVJZDogYW55ID0gdGhpcy5nZXRVbmlxdWVJZCgpO1xyXG4gIGlzWm9vbWVkT3V0ID0gZmFsc2U7XHJcbiAgaXNERDFPcGVuID0gZmFsc2U7XHJcbiAgaXNERDJPcGVuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge31cclxuXHJcbiAgZ2V0IGlzQWxlcnRFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uPy5oZWFkZXJNZW51T3B0aW9ucz8uc29tZShcclxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSAnZWRpdEFsZXJ0J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uUmVzaXplZChldmVudDogUmVzaXplZEV2ZW50KTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgZDMuc2VsZWN0KCcjJyArIHRoaXMudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVncm91cENoYXJ0KCk7XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG5cclxuICBpc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQ6IGJvb2xlYW4sIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNab29tZWRPdXQgPSBpc1pvb21PdXQ7XHJcbiAgICB0aGlzLm9uUmVzaXplZChldmVudCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVab29taW5ab29tb3V0Q2xpY2soeyBpc1pvb21PdXQsIGV2ZW50IH0pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCk7XHJcbiAgfVxyXG5cclxuICBpc0xlZ2VuZFZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhPy5tZXRhRGF0YT8uY29sb3JzICYmXHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycykubGVuZ3RoID4gMVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGtlZXBPcmRlciA9IChhLCBiKSA9PiBhO1xyXG5cclxuICBpbml0aWFsaXplZ3JvdXBDaGFydCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVyZ2VDb25maWd1cmF0aW9ucygpO1xyXG4gICAgY29uc3QgY2hhcnRDb250ZXh0ID0gdGhpcy5wcmVwYXJlQ2hhcnREYXRhKCk7XHJcbiAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKGNoYXJ0Q29udGV4dCk7XHJcbiAgICBjb25zdCBzY2FsZXMgPSB0aGlzLmNyZWF0ZVNjYWxlcyhjaGFydENvbnRleHQsIGRpbWVuc2lvbnMpO1xyXG4gICAgY29uc3Qgc3ZnRWxlbWVudHMgPSB0aGlzLmNyZWF0ZVNWR1N0cnVjdHVyZShkaW1lbnNpb25zKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlckF4ZXMoc3ZnRWxlbWVudHMsIHNjYWxlcywgY2hhcnRDb250ZXh0LCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyQmFycyhzdmdFbGVtZW50cy5zdmcsIGNoYXJ0Q29udGV4dCwgc2NhbGVzLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyTGFiZWxzKHN2Z0VsZW1lbnRzLCBzY2FsZXMsIGNoYXJ0Q29udGV4dCwgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLnJlbmRlclRhcmdldExpbmUoc3ZnRWxlbWVudHMsIHNjYWxlcywgY2hhcnRDb250ZXh0LCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyTGluZUdyYXBoKHN2Z0VsZW1lbnRzLnN2ZywgY2hhcnRDb250ZXh0LCBzY2FsZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXJnZUNvbmZpZ3VyYXRpb25zKCk6IHZvaWQge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltrZXldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgIGtleSxcclxuICAgICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZFZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmxlZ2VuZFZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlQ2hhcnREYXRhKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY2hhcnREYXRhLmRhdGE7XHJcbiAgICBjb25zdCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSA9IHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhO1xyXG4gICAgY29uc3QgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuXHJcbiAgICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgICAgbWV0YURhdGEuY29sb3JBYm92ZVRhcmdldCA9IG1ldGFEYXRhLmNvbG9ycztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkYXRhLFxyXG4gICAgICBtZXRhRGF0YSxcclxuICAgICAgbGluZURhdGEsXHJcbiAgICAgIGtleUxpc3Q6IG1ldGFEYXRhLmtleUxpc3QsXHJcbiAgICAgIGNvbG9yTWFwOiBtZXRhRGF0YS5jb2xvcnMsXHJcbiAgICAgIGlzUmlhOiB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbj8uaXNSaWEgfHwgZmFsc2UsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVEaW1lbnNpb25zKGNoYXJ0Q29udGV4dDogYW55KSB7XHJcbiAgICBjb25zdCBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIGNvbnN0IHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmdyb3VwY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgY29uc3QgbWFyZ2luID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luO1xyXG5cclxuICAgIGxldCB3aWR0aCA9IHRoaXMuY2FsY3VsYXRlV2lkdGgoY2hhcnRDb250YWluZXIsIG1hcmdpbik7XHJcbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy5jYWxjdWxhdGVIZWlnaHQodmVydGljYWxzdGFja2VkY29udGFpbmVyLCBtYXJnaW4pO1xyXG5cclxuICAgIGNvbnN0IG1pbkhlaWdodCA9IDE1NTtcclxuICAgIGhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgbWluSGVpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIGNoYXJ0Q29udGFpbmVyLCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgfTtcclxuICB9XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZVdpZHRoKGNoYXJ0Q29udGFpbmVyOiBhbnksIG1hcmdpbjogYW55KTogbnVtYmVyIHtcclxuICBjb25zdCBjb250YWluZXJXaWR0aCA9IHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKTtcclxuICBjb25zdCBsZWZ0U3ZnV2lkdGggPSBtYXJnaW4ubGVmdCArIDIwO1xyXG4gIGNvbnN0IHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuICBcclxuICAvLyBDYWxjdWxhdGUgYXZhaWxhYmxlIHdpZHRoIGV4Y2x1ZGluZyBmaXhlZCB5LWF4aXMgZWxlbWVudHNcclxuICBjb25zdCBiYXNlV2lkdGggPSBjb250YWluZXJXaWR0aCAtIGxlZnRTdmdXaWR0aCAtIHJpZ2h0U3ZnV2lkdGg7XHJcbiAgY29uc3QgZGF0YUxlbmd0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoO1xyXG4gIGxldCB3aWR0aCA9IGJhc2VXaWR0aDtcclxuXHJcbiAgaWYgKGRhdGFMZW5ndGggPiAzMCAmJiB0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMSA/IDYwIDogNDA7XHJcbiAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBkYXRhTGVuZ3RoICogbXVsdGlwbGllcik7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMiAmJiB3aWR0aCA8IGRhdGFMZW5ndGggKiAxMjAgJiYgdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMTIwO1xyXG4gIH1cclxuXHJcbiAgaWYgKGRhdGFMZW5ndGggPiA4ICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMiAmJiB3aWR0aCA8IGRhdGFMZW5ndGggKiAyNTApIHtcclxuICAgICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMjUwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMTYwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHdpZHRoO1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZUhlaWdodCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXI6IGFueSwgbWFyZ2luOiBhbnkpOiBudW1iZXIge1xyXG4gIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIHx8IDQwMDtcclxuICBsZXQgaGVpZ2h0O1xyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuKSB7XHJcbiAgICBoZWlnaHQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgfHwgY29udGFpbmVySGVpZ2h0O1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBGSVhFRDogVXNlIHBlcmNlbnRhZ2Ugb2YgY29udGFpbmVyIGhlaWdodCBtb3JlIHJlbGlhYmx5XHJcbiAgICBjb25zdCBzdmdIZWlnaHRQZXJjZW50YWdlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IHx8IDcwO1xyXG4gICAgaGVpZ2h0ID0gKGNvbnRhaW5lckhlaWdodCAqIHN2Z0hlaWdodFBlcmNlbnRhZ2UpIC8gMTAwO1xyXG4gIH1cclxuXHJcbiAgLy8gRklYRUQ6IEFwcGx5IG1hcmdpbiBhZGp1c3RtZW50cyBjb25zaXN0ZW50bHlcclxuICBoZWlnaHQgPSBoZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbTtcclxuXHJcbiAgLy8gRklYRUQ6IEFkZGl0aW9uYWwgYWRqdXN0bWVudHMgZm9yIGhlYWRlcnNcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiAhdGhpcy5pc0hlYWRlclZpc2libGUpIHtcclxuICAgIGhlaWdodCAtPSAxMzA7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgaGVpZ2h0IC09IDEwMDtcclxuICB9XHJcblxyXG4gIC8vIEZJWEVEOiBBZGQgdGhlIGV4dHJhIDUwcHggeW91IHdhbnRlZFxyXG4gIGhlaWdodCArPSA1MDtcclxuXHJcbiAgcmV0dXJuIE1hdGgubWF4KGhlaWdodCwgMTUwKTsgLy8gRW5zdXJlIG1pbmltdW0gaGVpZ2h0XHJcbn1cclxuXHJcbnByaXZhdGUgY3JlYXRlU2NhbGVzKGNoYXJ0Q29udGV4dDogYW55LCBkaW1lbnNpb25zOiBhbnkpIHtcclxuICBjb25zdCB7IGRhdGEsIG1ldGFEYXRhLCBsaW5lRGF0YSwga2V5TGlzdCB9ID0gY2hhcnRDb250ZXh0O1xyXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbWFyZ2luIH0gPSBkaW1lbnNpb25zO1xyXG4gIGNvbnN0IGxlZnRBbmRSaWdodFNwYWNlcyA9IDUwO1xyXG4gIGNvbnN0IHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuXHJcbiAgY29uc3QgZ3JvdXBzID0gZDMubWFwKGRhdGEsIChkKSA9PiBkLm5hbWUpLmtleXMoKTtcclxuXHJcbiAgbGV0IHg6IGFueTtcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgeCA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAucmFuZ2VSb3VuZChbd2lkdGgsIDBdKVxyXG4gICAgICAuYWxpZ24oMC41KVxyXG4gICAgICAucGFkZGluZygwLjUpXHJcbiAgICAgIC5kb21haW4oZGF0YS5tYXAoKGQ6IGFueSkgPT4gZC5uYW1lLnRvTG93ZXJDYXNlKCkpKTtcclxuICB9IGVsc2Uge1xyXG4gICAgeCA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgLnJhbmdlKFtsZWZ0QW5kUmlnaHRTcGFjZXMsIHdpZHRoIC0gcmlnaHRTdmdXaWR0aCAtIGxlZnRBbmRSaWdodFNwYWNlc10pXHJcbiAgICAgIC5wYWRkaW5nKDAuMyk7XHJcbiAgfVxyXG5cclxuICBjb25zdCB4U2NhbGVGcm9tT3JpZ2luID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGdyb3VwcykucmFuZ2UoWzAsIHdpZHRoIC0gcmlnaHRTdmdXaWR0aF0pO1xyXG5cclxuICBjb25zdCB4U3ViZ3JvdXAgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5TGlzdCkucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuXHJcbiAgLy8gRklYRUQ6IEltcHJvdmVkIG1heCB2YWx1ZSBjYWxjdWxhdGlvbiB0aGF0IGNvbnNpZGVycyBoZWlnaHRcclxuICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlTWF4VmFsdWUoZGF0YSwga2V5TGlzdCwgaGVpZ2h0KTtcclxuICBjb25zdCB5ID0gZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsIG1heFZhbHVlXSkubmljZSgpLnJhbmdlUm91bmQoW2hlaWdodCwgMF0pO1xyXG5cclxuICBsZXQgbGluZVlzY2FsZSA9IG51bGw7XHJcbiAgaWYgKGxpbmVEYXRhKSB7XHJcbiAgICBsaW5lWXNjYWxlID0gdGhpcy5jcmVhdGVMaW5lWVNjYWxlKGxpbmVEYXRhLCBoZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgY29sb3IgPSBkMy5zY2FsZU9yZGluYWwoKS5kb21haW4oa2V5TGlzdCkucmFuZ2UoT2JqZWN0LnZhbHVlcyhtZXRhRGF0YS5jb2xvcnMpKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHgsXHJcbiAgICB4U2NhbGVGcm9tT3JpZ2luLFxyXG4gICAgeFN1Ymdyb3VwLFxyXG4gICAgeSxcclxuICAgIGxpbmVZc2NhbGUsXHJcbiAgICBjb2xvcixcclxuICAgIGxlZnRBbmRSaWdodFNwYWNlcyxcclxuICAgIHJpZ2h0U3ZnV2lkdGgsXHJcbiAgfTtcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVNYXhWYWx1ZShkYXRhOiBhbnlbXSwga2V5TGlzdDogc3RyaW5nW10sIGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICBsZXQgbWF4VmFsdWUgPSBkMy5tYXgoZGF0YSwgKGQpID0+IGQzLm1heChrZXlMaXN0LCAoa2V5KSA9PiArZFtrZXldKSkgfHwgMDtcclxuXHJcbiAgLy8gRklYRUQ6IEJldHRlciBoYW5kbGluZyBmb3IgemVybyB2YWx1ZXNcclxuICBpZiAobWF4VmFsdWUgPT09IDApIHtcclxuICAgIG1heFZhbHVlID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGFcclxuICAgICAgPyB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMFxyXG4gICAgICA6IDEwMDtcclxuICB9XHJcblxyXG4gIC8vIEZJWEVEOiBTY2FsZSBiYXNlZCBvbiBhdmFpbGFibGUgaGVpZ2h0XHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSkge1xyXG4gICAgbWF4VmFsdWUgKj0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gIH0gZWxzZSBpZiAoaGVpZ2h0ID4gNDAwKSB7XHJcbiAgICAvLyBBdXRvLXNjYWxlIGZvciBsYXJnZXIgaGVpZ2h0c1xyXG4gICAgbWF4VmFsdWUgKj0gMS4yO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmIG1heFZhbHVlIDwgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQ7XHJcbiAgICBtYXhWYWx1ZSA9IG1heFZhbHVlIDwgMTAgJiYgdGFyZ2V0IDwgMTAgPyB0YXJnZXQgKyAzIDogdGFyZ2V0ICsgKHRhcmdldCAqIDAuMik7IC8vIDIwJSBidWZmZXJcclxuICB9XHJcblxyXG4gIHJldHVybiBtYXhWYWx1ZTtcclxufVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUxpbmVZU2NhbGUobGluZURhdGE6IGFueVtdLCBoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgbGV0IG1heExpbmVWYWx1ZSA9IGQzLm1heChsaW5lRGF0YSwgKGQpID0+ICtkLnZhbHVlKSB8fCAwO1xyXG4gICAgbWF4TGluZVZhbHVlICo9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSB8fCAxO1xyXG5cclxuICAgIGxldCBtaW5MaW5lVmFsdWUgPSBkMy5taW4obGluZURhdGEsIChkKSA9PiArZC52YWx1ZSkgfHwgMDtcclxuICAgIGlmIChtYXhMaW5lVmFsdWUgPiAwKSBtaW5MaW5lVmFsdWUgLT0gMztcclxuICAgIGlmIChtaW5MaW5lVmFsdWUgPiAwKSBtaW5MaW5lVmFsdWUgPSAwO1xyXG5cclxuICAgIHJldHVybiBkMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbbWluTGluZVZhbHVlLCBtYXhMaW5lVmFsdWVdKS5yYW5nZShbaGVpZ2h0LCBtaW5MaW5lVmFsdWVdKTtcclxuICB9XHJcblxyXG5wcml2YXRlIGNyZWF0ZVNWR1N0cnVjdHVyZShkaW1lbnNpb25zOiBhbnkpIHtcclxuICBjb25zdCB7IGNoYXJ0Q29udGFpbmVyLCBoZWlnaHQsIG1hcmdpbiB9ID0gZGltZW5zaW9ucztcclxuICBjb25zdCByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgXHJcbiAgLy8gRklYRUQ6IENhbGN1bGF0ZSB0b3RhbCBoZWlnaHQgaW5jbHVkaW5nIG1hcmdpbnMgYW5kIGV4dHJhIHNwYWNlXHJcbiAgY29uc3QgdG90YWxIZWlnaHQgPSBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDYwOyAvLyBBZGRlZCBleHRyYSA2MHB4XHJcblxyXG4gIGNvbnN0IG91dGVyQ29udGFpbmVyID0gY2hhcnRDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignaWQnLCB0aGlzLnVuaXF1ZUlkKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ291dGVyLWNvbnRhaW5lcicpXHJcbiAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBgJHt0b3RhbEhlaWdodH1weGApXHJcbiAgICAuc3R5bGUoJ292ZXJmbG93JywgJ2hpZGRlbicpXHJcbiAgICAuc3R5bGUoJ3BhZGRpbmctbGVmdCcsICcwJykgLy8gUmVtb3ZlIGxlZnQgcGFkZGluZyBmcm9tIG91dGVyIGNvbnRhaW5lclxyXG4gICAgLnN0eWxlKCdwYWRkaW5nLXJpZ2h0JywgYCR7cmlnaHRTdmdXaWR0aH1weGApXHJcbiAgICAuc3R5bGUoJ21hcmdpbi1sZWZ0JywgJzAnKSAvLyBSZW1vdmUgbGVmdCBtYXJnaW5cclxuICAgIC5zdHlsZSgncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcclxuXHJcbiAgY29uc3QgbGVmdFN2Z1dpZHRoID0gbWFyZ2luLmxlZnQgKyAyMDtcclxuXHJcbiAgLy8gRklYRUQ6IFktYXhpcyBTVkcgd2l0aCBwcm9wZXIgaGVpZ2h0XHJcbiAgY29uc3Qgc3ZnWUF4aXNMZWZ0ID0gb3V0ZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAuYXR0cignd2lkdGgnLCBsZWZ0U3ZnV2lkdGgpXHJcbiAgICAuYXR0cignaGVpZ2h0JywgdG90YWxIZWlnaHQpXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgIC5zdHlsZSgnbGVmdCcsICcwJylcclxuICAgIC5zdHlsZSgndG9wJywgJzAnKVxyXG4gICAgLnN0eWxlKCd6LWluZGV4JywgMikgLy8gSW5jcmVhc2VkIHotaW5kZXggdG8gZW5zdXJlIGl0IHN0YXlzIGFib3ZlXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7bWFyZ2luLmxlZnQgKyA1fSwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICBjb25zdCBzdmdZQXhpc1JpZ2h0ID0gb3V0ZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIHRvdGFsSGVpZ2h0KVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAuc3R5bGUoJ3JpZ2h0JywgJzQwcHgnKVxyXG4gICAgLnN0eWxlKCd0b3AnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3otaW5kZXgnLCAyKSAvLyBJbmNyZWFzZWQgei1pbmRleFxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gIC8vIEZJWEVEOiBJbm5lciBjb250YWluZXIgc3RhcnRzIEFGVEVSIHRoZSB5LWF4aXMgbGFiZWxzXHJcbiAgY29uc3QgaW5uZXJDb250YWluZXIgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdpbm5lci1jb250YWluZXInKVxyXG4gICAgLnN0eWxlKCd3aWR0aCcsIGBjYWxjKDEwMCUgLSAke2xlZnRTdmdXaWR0aH1weClgKSAvLyBBY2NvdW50IGZvciB5LWF4aXMgd2lkdGhcclxuICAgIC5zdHlsZSgnaGVpZ2h0JywgYCR7dG90YWxIZWlnaHR9cHhgKVxyXG4gICAgLnN0eWxlKCdtYXJnaW4tbGVmdCcsIGAke2xlZnRTdmdXaWR0aH1weGApIC8vIFB1c2ggY29udGFpbmVyIHRvIHN0YXJ0IGFmdGVyIHktYXhpc1xyXG4gICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKVxyXG4gICAgLnN0eWxlKCdvdmVyZmxvdy15JywgJ2hpZGRlbicpO1xyXG5cclxuICAvLyBGSVhFRDogTWFpbiBTVkcgd2l0aCBpbmNyZWFzZWQgaGVpZ2h0IGFuZCBwcm9wZXIgcG9zaXRpb25pbmdcclxuICBjb25zdCBzdmcgPSBpbm5lckNvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnc3ZnJylcclxuICAgIC5hdHRyKCd3aWR0aCcsIGRpbWVuc2lvbnMud2lkdGggLSByaWdodFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIHRvdGFsSGVpZ2h0KVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gIHJldHVybiB7IG91dGVyQ29udGFpbmVyLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIHN2ZywgdG90YWxIZWlnaHQgfTtcclxufVxyXG5cclxuICBwcml2YXRlIHJlbmRlckF4ZXMoc3ZnRWxlbWVudHM6IGFueSwgc2NhbGVzOiBhbnksIGNoYXJ0Q29udGV4dDogYW55LCBkaW1lbnNpb25zOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQgfSA9IHN2Z0VsZW1lbnRzO1xyXG4gICAgY29uc3QgeyB4LCB4U2NhbGVGcm9tT3JpZ2luLCB5LCBsaW5lWXNjYWxlIH0gPSBzY2FsZXM7XHJcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZGltZW5zaW9ucztcclxuICAgIGNvbnN0IHsgbWV0YURhdGEsIGxpbmVEYXRhLCBrZXlMaXN0IH0gPSBjaGFydENvbnRleHQ7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJYQXhpcyhzdmcsIHgsIHhTY2FsZUZyb21PcmlnaW4sIGhlaWdodCwgY2hhcnRDb250ZXh0LCBrZXlMaXN0KTtcclxuICAgIHRoaXMucmVuZGVyWUF4aXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIHksIGRpbWVuc2lvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJZQXhpc0dyaWQoc3ZnLCB5LCBkaW1lbnNpb25zLndpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYZ3JpZEJldHdlZW5MYWJlbHMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJYQXhpc0dyaWQoc3ZnLCB4LCBoZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsaW5lRGF0YSAmJiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93TGluZUNoYXJ0QXhpcyAmJiBsaW5lWXNjYWxlKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyTGluZVlBeGlzKHN2Z1lBeGlzUmlnaHQsIGxpbmVZc2NhbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbnByaXZhdGUgcmVuZGVyWEF4aXMoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIHg6IGFueSxcclxuICAgIHhTY2FsZUZyb21PcmlnaW46IGFueSxcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgY2hhcnRDb250ZXh0OiBhbnksXHJcbiAgICBrZXlMaXN0OiBzdHJpbmdbXVxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBkYXRhLCBtZXRhRGF0YSB9ID0gY2hhcnRDb250ZXh0O1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IHhBeGlzID0gc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7aGVpZ2h0fSlgKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkpO1xyXG5cclxuICAgICAgLy8gRklYRUQ6IFNob3cgWC1heGlzIGxpbmVcclxuICAgICAgeEF4aXNcclxuICAgICAgICAuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjMDAwMDAwKScpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4JylcclxuICAgICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTtcclxuXHJcbiAgICAgIHhBeGlzLnNlbGVjdEFsbCgnZy50aWNrIGxpbmUnKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgIGNvbnN0IHRleHRDbGFzcyA9ICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bic7XHJcbiAgICAgIGNvbnN0IHRleHRTZWxlY3Rpb24gPSB4QXhpc1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ2cudGljayB0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCB0ZXh0Q2xhc3MpXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IsICM2NjY2NjYpJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMXB4Jyk7XHJcblxyXG4gICAgICBpZiAoa2V5TGlzdC5sZW5ndGggPiAxICYmICFtZXRhRGF0YS54TGFiZWwpIHtcclxuICAgICAgICB0ZXh0U2VsZWN0aW9uLmF0dHIoJ3knLCAyOCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVuZGVyTXVsdGlDaGFydFhBeGlzKHN2ZywgeCwgaGVpZ2h0LCBkYXRhLCBtZXRhRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhMYWJlbHNPblNhbWVMaW5lKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyWExhYmVsc09uU2FtZUxpbmUoc3ZnLCBkYXRhLCBtZXRhRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQm90dG9tIHgtYXhpc1xyXG4gICAgY29uc3QgeEF4aXMyID0gc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneDIgYXhpczInKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7aGVpZ2h0fSlgKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJyMwMDAnKVxyXG4gICAgICAuY2FsbChkMy5heGlzQm90dG9tKHhTY2FsZUZyb21PcmlnaW4pLnRpY2tTaXplKDApKTtcclxuXHJcbiAgICB4QXhpczJcclxuICAgICAgLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICMwMDAwMDApJylcclxuICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4JylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDIuYXhpczIgZy50aWNrIHRleHQnKS5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlck11bHRpQ2hhcnRYQXhpcyhzdmc6IGFueSwgeDogYW55LCBoZWlnaHQ6IG51bWJlciwgZGF0YTogYW55W10sIG1ldGFEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgY29uc3Qgc2hvcnRfdGlja19sZW5ndGhfYmcgPSA1O1xyXG4gICAgY29uc3QgbG9uZ190aWNrX2xlbmd0aF9iZyA9IDMwO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2hlaWdodH0pYClcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgwKSlcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5hdHRyKCd5MicsICgpID0+IHtcclxuICAgICAgaWYgKGFsdGVybmF0ZV90ZXh0ICYmICF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc05vQWx0ZXJuYXRlWGF4aXNUZXh0KSB7XHJcbiAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aF9iZyAtIDc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZyAtIDQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy13ZWVrbHljaGFydHMnKS5hdHRyKCd5JywgKCkgPT4ge1xyXG4gICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoX2JnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGhfYmc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJYTGFiZWxzT25TYW1lTGluZShzdmc6IGFueSwgZGF0YTogYW55W10sIG1ldGFEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNob3J0X3RpY2tfbGVuZ3RoX2JnID0gNTtcclxuICAgIGNvbnN0IGxvbmdfdGlja19sZW5ndGhfYmcgPSAzMDtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgIC5hdHRyKCd5Jywgc2hvcnRfdGlja19sZW5ndGhfYmcpXHJcbiAgICAgIC50ZXh0KChkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNWYWx1ZVRvQmVJZ25vcmVkID0gZGF0YS5zb21lKFxyXG4gICAgICAgICAgKGluZGl2OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGluZGl2Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZC50cmltKCkudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICAgICAgICBpbmRpdlttZXRhRGF0YS5rZXlMaXN0WzBdXSA9PT0gLTFcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChpc1ZhbHVlVG9CZUlnbm9yZWQpIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgaWYgKGQudHJpbSgpLmluZGV4T2YoJyAnKSA+IC0xKSB7XHJcbiAgICAgICAgICByZXR1cm4gZC50cmltKCkuc3Vic3RyaW5nKDAsIGQuaW5kZXhPZignICcpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2snKVxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLmF0dHIoJ3knLCBsb25nX3RpY2tfbGVuZ3RoX2JnKVxyXG4gICAgICAuYXR0cignZmlsbCcsICdjdXJyZW50Q29sb3InKVxyXG4gICAgICAudGV4dCgoZCkgPT4ge1xyXG4gICAgICAgIGlmIChkLnRyaW0oKS5pbmRleE9mKCcgJykgPiAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZyhkLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyWUF4aXMoc3ZnOiBhbnksIHN2Z1lBeGlzTGVmdDogYW55LCBzdmdZQXhpc1JpZ2h0OiBhbnksIHk6IGFueSwgZGltZW5zaW9uczogYW55KTogdm9pZCB7XHJcbiAgICAvLyBNYWluIFktYXhpcyBpbiBjaGFydCBhcmVhIChoaWRkZW4pXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dCB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5KVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAgIC8vIEZJWEVEOiBMZWZ0IFktYXhpcyB3aXRoIHZpc2libGUgbGluZVxyXG4gICAgY29uc3QgeUF4aXNMZWZ0ID0gZDNcclxuICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgIC50aWNrRm9ybWF0KHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzTGFiZWxGb21hdHRlcik7XHJcblxyXG4gICAgY29uc3QgeUF4aXNHcm91cCA9IHN2Z1lBeGlzTGVmdFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKHlBeGlzTGVmdCk7XHJcblxyXG4gICAgLy8gRklYRUQ6IFNob3cgWS1heGlzIHZlcnRpY2FsIGxpbmVcclxuICAgIHlBeGlzR3JvdXBcclxuICAgICAgLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICMwMDAwMDApJylcclxuICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4JylcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcblxyXG4gICAgLy8gRklYRUQ6IFBvc2l0aW9uIFktYXhpcyB2YWx1ZXMgd2l0aCBwcm9wZXIgc3BhY2luZ1xyXG4gICAgeUF4aXNHcm91cFxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IsICM2NjY2NjYpJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTFweCcpXHJcbiAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnNDAwJylcclxuICAgICAgLmF0dHIoJ3gnLCAtNikgIC8vIEZJWEVEOiBTbWFsbCBnYXAgZnJvbSBheGlzIGxpbmVcclxuICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ2VuZCcpXHJcbiAgICAgIC5hdHRyKCdkeScsICcwLjMyZW0nKTtcclxuXHJcbiAgICAvLyBSaWdodCBZLWF4aXMgKGhpZGRlbilcclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5KVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAgIHRoaXMuYXBwbHlBeGlzVmlzaWJpbGl0eVNldHRpbmdzKCk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSBhcHBseUF4aXNWaXNpYmlsaXR5U2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnZy5saWItbGluZS14LWF4aXMtdGV4dCA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAgIC8vIEZJWEVEOiBEb24ndCBoaWRlIHRoZSBZLWF4aXMgbGFiZWwgZWxlbWVudFxyXG4gICAgICBkMy5zZWxlY3RBbGwoJy5saWIteWxhYmVsLXZpc2libGUnKS5zdHlsZSgnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNIaWRkZW4pIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAgIC8vIEZJWEVEOiBLZWVwIFktYXhpcyBsYWJlbCB2aXNpYmxlXHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLmxpYi15bGFiZWwtdmlzaWJsZScpLnN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0Rhc2hlZCkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQgLmRvbWFpbicpLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpLnN0eWxlKCdjb2xvcicsICcjOTk5OTk5Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJZQXhpc0dyaWQoc3ZnOiBhbnksIHk6IGFueSwgd2lkdGg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneS1heGlzLWdyaWQnKVxyXG4gICAgICAuY2FsbChcclxuICAgICAgICBkMy5heGlzTGVmdCh5KVxyXG4gICAgICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgICAgLnRpY2tTaXplKC13aWR0aClcclxuICAgICAgICAgIC50aWNrRm9ybWF0KCcnKVxyXG4gICAgICApXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAnIzUzNTM1M2ZmJykgIC8vIEZJWEVEOiBMaWdodGVyIGdyaWRcclxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNycpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICdub25lJylcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2xpbmUnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcwLjVweCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJYQXhpc0dyaWQoc3ZnOiBhbnksIHg6IGFueSwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3guYmFuZHdpZHRoKCkgLyAyfSwke2hlaWdodH0pYClcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgtaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciwgIzk5OTk5OSknKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxpbmVZQXhpcyhzdmdZQXhpc1JpZ2h0OiBhbnksIGxpbmVZc2NhbGU6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgeUxpbmVBeGlzID0gZDNcclxuICAgICAgLmF4aXNSaWdodChsaW5lWXNjYWxlKVxyXG4gICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAudGlja0Zvcm1hdCh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55TGluZUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuXHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQxJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUxpbmVBeGlzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQmFycyhzdmc6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIHNjYWxlczogYW55LCBkaW1lbnNpb25zOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgZGF0YSwgbWV0YURhdGEsIGtleUxpc3QsIGlzUmlhIH0gPSBjaGFydENvbnRleHQ7XHJcbiAgICBjb25zdCB7IHgsIHhTdWJncm91cCwgeSB9ID0gc2NhbGVzO1xyXG4gICAgY29uc3QgeyBoZWlnaHQgfSA9IGRpbWVuc2lvbnM7XHJcblxyXG4gICAgY29uc3Qgc3RhdGUgPSBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5zZWxlY3RBbGwoJy5zdGF0ZScpXHJcbiAgICAgIC5kYXRhKGRhdGEpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IGB0cmFuc2xhdGUoJHt4KGQubmFtZSl9LDApYCk7XHJcblxyXG4gIHN0YXRlXHJcbiAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgIC5kYXRhKChkKSA9PiB0aGlzLnByZXBhcmVCYXJEYXRhKGQsIGtleUxpc3QpKVxyXG4gICAgLmVudGVyKClcclxuICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2JhcnMnKVxyXG4gICAgLm9uKCdjbGljaycsIChkKSA9PiB0aGlzLmhhbmRsZUJhckNsaWNrKGQsIG1ldGFEYXRhKSlcclxuICAgIC5hdHRyKCd4JywgKGQpID0+IHRoaXMuZ2V0QmFyWChkLCBkYXRhLCB4LCB4U3ViZ3JvdXApKVxyXG4gICAgLmF0dHIoJ3knLCAoZCkgPT4ge1xyXG4gICAgICAvLyBGSVhFRDogRW5zdXJlIGJhcnMgc3RhcnQgZnJvbSBjb3JyZWN0IFkgcG9zaXRpb25cclxuICAgICAgY29uc3QgdmFsdWUgPSBkLnZhbHVlID09PSAtMSA/IDAgOiBkLnZhbHVlO1xyXG4gICAgICByZXR1cm4geSh2YWx1ZSk7XHJcbiAgICB9KVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgKGQpID0+IHRoaXMuZ2V0QmFyV2lkdGgoZCwgZGF0YSwgeCwgeFN1Ymdyb3VwKSlcclxuICAgIC5hdHRyKCdoZWlnaHQnLCAoZCkgPT4ge1xyXG4gICAgICAvLyBGSVhFRDogSW1wcm92ZWQgaGVpZ2h0IGNhbGN1bGF0aW9uXHJcbiAgICAgIGNvbnN0IHZhbHVlID0gZC52YWx1ZSA9PT0gLTEgPyAwIDogZC52YWx1ZTtcclxuICAgICAgcmV0dXJuIGhlaWdodCAtIHkodmFsdWUpO1xyXG4gICAgfSlcclxuICAgIC5zdHlsZSgnY3Vyc29yJywgKGQpID0+IChtZXRhRGF0YS5oYXNEcmlsbERvd24gJiYgIWlzUmlhID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnKSlcclxuICAgIC5hdHRyKCdmaWxsJywgKGQpID0+IHRoaXMuZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEpKTtcclxuXHJcbiAgICBpZiAoIWlzUmlhICYmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCB8fCAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgJiYgIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wKSkpIHtcclxuICAgICAgc3RhdGUuc2VsZWN0QWxsKCdyZWN0Jykub24oJ21vdXNlb3V0JywgKGQsIGkpID0+IHRoaXMuaGFuZGxlTW91c2VPdXQoc3ZnKSkub24oJ21vdXNlb3ZlcicsIChkLCBpKSA9PiB0aGlzLmhhbmRsZU1vdXNlT3ZlcihzdmcsIGQsIGRhdGEsIG1ldGFEYXRhLCB4LCB5LCBzY2FsZXMubGVmdEFuZFJpZ2h0U3BhY2VzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJCYXJUZXh0cyhzdGF0ZSwgZGF0YSwgbWV0YURhdGEsIGtleUxpc3QsIHgsIHhTdWJncm91cCwgeSwgaXNSaWEsIHN2Zyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUJhckRhdGEoZDogYW55LCBrZXlMaXN0OiBzdHJpbmdbXSk6IGFueVtdIHtcclxuICAgIHJldHVybiBrZXlMaXN0Lm1hcCgoa2V5KSA9PiAoeyBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUJhckNsaWNrKGQ6IGFueSwgbWV0YURhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGQua2V5ID09PSAnVGFyZ2V0JykgcmV0dXJuO1xyXG4gICAgaWYgKFxyXG4gICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrPy5sZW5ndGggfHxcclxuICAgICAgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ubmFtZSkgJiYgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5rZXkpKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhclgoZDogYW55LCBkYXRhOiBhbnlbXSwgeDogYW55LCB4U3ViZ3JvdXA6IGFueSk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVEcmlsbGRvd25CYXJYKGQsIGRhdGEsIHgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHhTdWJncm91cChkLmtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZURyaWxsZG93bkJhclgoZDogYW55LCBkYXRhOiBhbnlbXSwgeDogYW55KTogbnVtYmVyIHtcclxuICAgIGxldCB0ZW1wU2NhbGU7XHJcbiAgICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgdGVtcFNjYWxlID0gdGhpcy5hZGp1c3REcmlsbGRvd25TY2FsZSh0ZW1wU2NhbGUsIGRhdGEsIHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGVtcFNjYWxlID8gdGVtcFNjYWxlKGQua2V5KSA6IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkanVzdERyaWxsZG93blNjYWxlKHRlbXBTY2FsZTogYW55LCBkYXRhOiBhbnlbXSwgeDogYW55KTogYW55IHtcclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBjb25zdCBrZXlzTGVuZ3RoID0gT2JqZWN0LmtleXModGhpcy5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoO1xyXG4gICAgICBjb25zdCBvZmZzZXQgPSBrZXlzTGVuZ3RoID09PSAyID8gMjAwIDogMzAwO1xyXG4gICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIG9mZnNldCkgLyAyLFxyXG4gICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIG9mZnNldCkgLyAyLFxyXG4gICAgICBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBTY2FsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFyV2lkdGgoZDogYW55LCBkYXRhOiBhbnlbXSwgeDogYW55LCB4U3ViZ3JvdXA6IGFueSk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICBsZXQgdGVtcFNjYWxlO1xyXG4gICAgICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgIHRlbXBTY2FsZSA9IHRoaXMuYWRqdXN0RHJpbGxkb3duU2NhbGUodGVtcFNjYWxlLCBkYXRhLCB4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gdGVtcFNjYWxlID8gdGVtcFNjYWxlLmJhbmR3aWR0aCgpIDogMDtcclxuICAgIH1cclxuICAgIHJldHVybiB4U3ViZ3JvdXAuYmFuZHdpZHRoKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhckhlaWdodChkOiBhbnksIHk6IGFueSwgaGVpZ2h0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKGQudmFsdWUgPT09IC0xKSByZXR1cm4gaGVpZ2h0IC0geSgwKTtcclxuICAgIGlmIChkLnZhbHVlKSByZXR1cm4gaGVpZ2h0IC0geShkLnZhbHVlKTtcclxuICAgIHJldHVybiBoZWlnaHQgLSB5KDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJDb2xvcihkOiBhbnksIG1ldGFEYXRhOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKFxyXG4gICAgICBkLnZhbHVlICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgIGQudmFsdWUgPj0gcGFyc2VJbnQodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSAmJlxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0XHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRbZC5rZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckJhclRleHRzKFxyXG4gICAgc3RhdGU6IGFueSxcclxuICAgIGRhdGE6IGFueVtdLFxyXG4gICAgbWV0YURhdGE6IGFueSxcclxuICAgIGtleUxpc3Q6IHN0cmluZ1tdLFxyXG4gICAgeDogYW55LFxyXG4gICAgeFN1Ymdyb3VwOiBhbnksXHJcbiAgICB5OiBhbnksXHJcbiAgICBpc1JpYTogYm9vbGVhbixcclxuICAgIHN2ZzogYW55XHJcbiAgKTogdm9pZCB7XHJcbiAgICBzdGF0ZVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLmRhdGEoKGQpID0+IHRoaXMucHJlcGFyZUJhckRhdGEoZCwga2V5TGlzdCkpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgIC5hdHRyKCd5JywgMClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kYXRhLWxhYmVscy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAudGV4dCgoZCkgPT4gdGhpcy5nZXRCYXJUZXh0TGFiZWwoZCkpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICcjMDAwJylcclxuICAgICAgLnN0eWxlKCdmb250LXdlaWdodCcsICdib2xkJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAoKSA9PiB0aGlzLmdldEJhclRleHRGb250U2l6ZSgpKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IHRoaXMuZ2V0QmFyVGV4dFRyYW5zZm9ybShkLCBkYXRhLCB4LCB4U3ViZ3JvdXAsIHkpKVxyXG4gICAgICAub24oJ2NsaWNrJywgKGQpID0+IHRoaXMuaGFuZGxlQmFyQ2xpY2soZCwgbWV0YURhdGEpKTtcclxuXHJcbiAgICBpZiAoIWlzUmlhKSB7XHJcbiAgICAgIHN0YXRlXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1kYXRhLWxhYmVscy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgIC5vbignbW91c2VvdXQnLCAoZCwgaSkgPT4gdGhpcy5oYW5kbGVNb3VzZU91dChzdmcpKVxyXG4gICAgICAgIC5vbignbW91c2VvdmVyJywgKGQsIGkpID0+XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZU1vdXNlT3ZlcihzdmcsIGQsIGRhdGEsIG1ldGFEYXRhLCB4LCB5LCB4LmJhbmR3aWR0aCgpKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhclRleHRMYWJlbChkOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFkLmtleSB8fCAhZC52YWx1ZSkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIGQua2V5Lmxlbmd0aCA+IDIwID8gZC5rZXkuc3Vic3RyaW5nKDAsIDE3KSArICcuLi4nIDogZC5rZXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhclRleHRGb250U2l6ZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gMTkwMCkgcmV0dXJuICcxOHB4JztcclxuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMCkgcmV0dXJuICcxMHB4JztcclxuICAgICAgcmV0dXJuICcxNHB4JztcclxuICAgIH1cclxuICAgIHJldHVybiAnMTRweCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhclRleHRUcmFuc2Zvcm0oZDogYW55LCBkYXRhOiBhbnlbXSwgeDogYW55LCB4U3ViZ3JvdXA6IGFueSwgeTogYW55KTogc3RyaW5nIHtcclxuICAgIGxldCB0ZW1wU2NhbGU7XHJcbiAgICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgdGVtcFNjYWxlID0gdGhpcy5hZGp1c3REcmlsbGRvd25TY2FsZSh0ZW1wU2NhbGUsIGRhdGEsIHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRBbHdheXNIb3Jpem9udGFsKSB7XHJcbiAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eFN1Ymdyb3VwKGQua2V5KX0sJHt5KGQudmFsdWUpIC0gM30pYDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGVtcFNjYWxlICYmICFpc05hTih0ZW1wU2NhbGUoZC5rZXkpKSkge1xyXG4gICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3RlbXBTY2FsZShkLmtleSkgKyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKiAwLjU1fSwke3koMCkgLSAxMH0pIHJvdGF0ZSgyNzApYDtcclxuICAgIH1cclxuICAgIHJldHVybiAndHJhbnNsYXRlKDAsMCknO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVNb3VzZU92ZXIoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIGQ6IGFueSxcclxuICAgIGRhdGE6IGFueVtdLFxyXG4gICAgbWV0YURhdGE6IGFueSxcclxuICAgIHg6IGFueSxcclxuICAgIHk6IGFueSxcclxuICAgIGxlZnRBbmRSaWdodFNwYWNlczogbnVtYmVyXHJcbiAgKTogdm9pZCB7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuXHJcbiAgICBsZXQgdGVtcFNjYWxlO1xyXG4gICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgIHRlbXBTY2FsZSA9IHRoaXMuYWRqdXN0RHJpbGxkb3duU2NhbGUodGVtcFNjYWxlLCBkYXRhLCB4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGZvcmVpZ25PYmplY3QgPSBzdmdcclxuICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgIC5hdHRyKCd4JywgKCkgPT4gdGhpcy5jYWxjdWxhdGVUb29sdGlwWChkLCB4LCB0ZW1wU2NhbGUsIG1ldGFEYXRhLCBsZWZ0QW5kUmlnaHRTcGFjZXMpKVxyXG4gICAgICAuYXR0cigneScsICgpID0+IHkoZC52YWx1ZSkgLSA0MylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgKCkgPT4gdGhpcy5jYWxjdWxhdGVUb29sdGlwV2lkdGgodGVtcFNjYWxlLCBtZXRhRGF0YSwgbGVmdEFuZFJpZ2h0U3BhY2VzKSlcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIDQwKTtcclxuXHJcbiAgICBmb3JlaWduT2JqZWN0XHJcbiAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd0aXRsZScpXHJcbiAgICAgIC5zdHlsZSgnei1pbmRleCcsIDk5KVxyXG4gICAgICAuaHRtbCgoKSA9PiB0aGlzLmdldFRvb2x0aXBIVE1MKGQsIG1ldGFEYXRhKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVRvb2x0aXBYKFxyXG4gICAgZDogYW55LFxyXG4gICAgeDogYW55LFxyXG4gICAgdGVtcFNjYWxlOiBhbnksXHJcbiAgICBtZXRhRGF0YTogYW55LFxyXG4gICAgbGVmdEFuZFJpZ2h0U3BhY2VzOiBudW1iZXJcclxuICApOiBudW1iZXIge1xyXG4gICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgICBpZiAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgIHJldHVybiB4KGQubmFtZSkgKyB0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMiAtIDkwO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgeChkLm5hbWUpICtcclxuICAgICAgICB0ZW1wU2NhbGUoZC5rZXkpIC1cclxuICAgICAgICAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICtcclxuICAgICAgICB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB4KGQubmFtZSkgK1xyXG4gICAgICB0ZW1wU2NhbGUoZC5rZXkpIC1cclxuICAgICAgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArXHJcbiAgICAgIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVRvb2x0aXBXaWR0aCh0ZW1wU2NhbGU6IGFueSwgbWV0YURhdGE6IGFueSwgbGVmdEFuZFJpZ2h0U3BhY2VzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgICBpZiAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgIHJldHVybiAnMTgwcHgnO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRvb2x0aXBIVE1MKGQ6IGFueSwgbWV0YURhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gICAgaWYgKCF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItbmFtZVwiPiR7ZC5uYW1lfTwvc3Bhbj48c3BhbiBjbGFzcz1cInRpdGxlLWJhci12YWx1ZVwiPjxzcGFuPiR7ZC52YWx1ZX08L3NwYW4+JHtkYXRhVHlwZX08L3NwYW4+YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRlbXBLZXkgPSBkLm5hbWUubGVuZ3RoIDw9IDggPyBkLm5hbWUgOiBkLm5hbWUuc3Vic3RyaW5nKDAsIDUpICsgJy4uLic7XHJcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItbmFtZVwiPiR7dGVtcEtleX06JHtkLnZhbHVlfSR7ZGF0YVR5cGV9PC9zcGFuPjxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLXZhbHVlXCI+JHtkLm5hbWV9PC9zcGFuPmA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU1vdXNlT3V0KHN2ZzogYW55KTogdm9pZCB7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGFiZWxzKHN2Z0VsZW1lbnRzOiBhbnksIHNjYWxlczogYW55LCBjaGFydENvbnRleHQ6IGFueSwgZGltZW5zaW9uczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB7IHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0IH0gPSBzdmdFbGVtZW50cztcclxuICAgIGNvbnN0IHsgbWV0YURhdGEgfSA9IGNoYXJ0Q29udGV4dDtcclxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbWFyZ2luIH0gPSBkaW1lbnNpb25zO1xyXG5cclxuICAgIGlmIChtZXRhRGF0YS55TGFiZWwpIHtcclxuICAgICAgdGhpcy5yZW5kZXJZQXhpc0xhYmVsKHN2Z1lBeGlzTGVmdCwgbWV0YURhdGEueUxhYmVsLCBoZWlnaHQsIG1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgICB0aGlzLnJlbmRlclhBeGlzTGFiZWwoc3ZnLCBtZXRhRGF0YS54TGFiZWwsIHdpZHRoLCBoZWlnaHQsIG1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1ldGFEYXRhLmxpbmV5TGFiZWwpIHtcclxuICAgICAgdGhpcy5yZW5kZXJMaW5lWUF4aXNMYWJlbChzdmdZQXhpc1JpZ2h0LCBtZXRhRGF0YS5saW5leUxhYmVsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5wcml2YXRlIHJlbmRlcllBeGlzTGFiZWwoc3ZnWUF4aXNMZWZ0OiBhbnksIHlMYWJlbDogc3RyaW5nLCBoZWlnaHQ6IG51bWJlciwgbWFyZ2luOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIEZJWEVEOiBQcm9wZXIgWS1heGlzIGxhYmVsIHdpdGggY29ycmVjdCBwb3NpdGlvbmluZ1xyXG4gICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLXlsYWJlbC12aXNpYmxlJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoLTkwKScpXHJcbiAgICAgIC5hdHRyKCd5JywgLW1hcmdpbi5sZWZ0KVxyXG4gICAgICAuYXR0cigneCcsIDAgLSBoZWlnaHQgLyAyKVxyXG4gICAgICAuYXR0cignZHknLCAnMWVtJylcclxuICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxM3B4JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IsICM2NjY2NjYpJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgc3ZnWUF4aXNMZWZ0LnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJykudGV4dCh5TGFiZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlsYWJlbC13ZWVrbHlDaGFydHMgbGliLXlsYWJlbC12aXNpYmxlJylcclxuICAgICAgICAudGV4dCh5TGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJYQXhpc0xhYmVsKHN2ZzogYW55LCB4TGFiZWw6IHN0cmluZywgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG1hcmdpbjogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBpc0Fjcm9ueW0gPSB0aGlzLmlzQWNyb255bSh4TGFiZWwucmVwbGFjZSgvW15BLVphLXpdL2csICcnKSk7XHJcblxyXG4gICAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICBiYXNlQ2xhc3MgKz0gJyBsaWIteGxhYmVsLWRyaWxsZG93bmNoYXJ0cyc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgYmFzZUNsYXNzICs9ICcgbGliLXhsYWJlbC13ZWVrbHlDaGFydHMnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYmFzZUNsYXNzICs9ICcgbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsJztcclxuICAgIH1cclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsIGJhc2VDbGFzcylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgLy8gRklYRUQ6IEFkanVzdGVkIGZvciByZWR1Y2VkIGJvdHRvbSBtYXJnaW5cclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHt3aWR0aCAvIDJ9LCR7aGVpZ2h0ICsgMzJ9KWApXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IsICM2NjY2NjYpJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTNweCcpXHJcbiAgICAgIC50ZXh0KGlzQWNyb255bSA/IHhMYWJlbC50b1VwcGVyQ2FzZSgpIDogeExhYmVsLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgIC5zdHlsZSgndGV4dC10cmFuc2Zvcm0nLCBpc0Fjcm9ueW0gPyAnbm9uZScgOiAnY2FwaXRhbGl6ZScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0Fjcm9ueW0obGFiZWw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8XHJcbiAgICAgIChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGluZVlBeGlzTGFiZWwoc3ZnWUF4aXNSaWdodDogYW55LCBsaW5leUxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBsaWItbGluZS1heGlzJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKSByb3RhdGUoOTApJylcclxuICAgICAgLmF0dHIoJ3knLCAtMTAwKVxyXG4gICAgICAuYXR0cigneCcsIDEwMClcclxuICAgICAgLmF0dHIoJ2R5JywgJzVlbScpXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnc21hbGxlcicpXHJcbiAgICAgIC50ZXh0KGxpbmV5TGFiZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJUYXJnZXRMaW5lKHN2Z0VsZW1lbnRzOiBhbnksIHNjYWxlczogYW55LCBjaGFydENvbnRleHQ6IGFueSwgZGltZW5zaW9uczogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgeyBzdmcsIHN2Z1lBeGlzUmlnaHQgfSA9IHN2Z0VsZW1lbnRzO1xyXG4gICAgY29uc3QgeyB5IH0gPSBzY2FsZXM7XHJcbiAgICBjb25zdCB7IHdpZHRoIH0gPSBkaW1lbnNpb25zO1xyXG4gICAgY29uc3QgeyBtZXRhRGF0YSB9ID0gY2hhcnRDb250ZXh0O1xyXG4gICAgY29uc3QgdGFyZ2V0RGF0YTogVGFyZ2V0TGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YTtcclxuXHJcbiAgICBjb25zdCB5WmVybyA9IHkodGFyZ2V0RGF0YS50YXJnZXQpO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdsaW5lJylcclxuICAgICAgLmF0dHIoJ3gxJywgMClcclxuICAgICAgLmF0dHIoJ3gyJywgd2lkdGgpXHJcbiAgICAgIC5hdHRyKCd5MScsIHlaZXJvKVxyXG4gICAgICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgdGFyZ2V0RGF0YS5jb2xvcik7XHJcblxyXG4gICAgY29uc3QgcmlnaHRTdmdXaWR0aCA9IDYwO1xyXG4gICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke3laZXJvIC0gMzB9KWApXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCA1MClcclxuICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RhcmdldC1kaXNwbGF5JylcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC5odG1sKCgpID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSB0YXJnZXREYXRhLnRhcmdldE5hbWUgfHwgJ3RhcmdldCc7XHJcbiAgICAgICAgcmV0dXJuIGA8ZGl2PiR7dGFyZ2V0TmFtZX08L2Rpdj48ZGl2PiR7dGFyZ2V0RGF0YS50YXJnZXR9JHtkYXRhVHlwZX08L2Rpdj5gO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGluZUdyYXBoKHN2ZzogYW55LCBjaGFydENvbnRleHQ6IGFueSwgc2NhbGVzOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgbGluZURhdGEsIG1ldGFEYXRhIH0gPSBjaGFydENvbnRleHQ7XHJcbiAgICBpZiAoIWxpbmVEYXRhKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgeyB4LCBsaW5lWXNjYWxlIH0gPSBzY2FsZXM7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAuZGF0dW0obGluZURhdGEpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxyXG4gICAgICAuYXR0cignc3Ryb2tlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxLjUpXHJcbiAgICAgIC5hdHRyKFxyXG4gICAgICAgICdkJyxcclxuICAgICAgICBkM1xyXG4gICAgICAgICAgLmxpbmUoKVxyXG4gICAgICAgICAgLngoKGQ6IGFueSkgPT4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgICAgICAueSgoZDogYW55KSA9PiBsaW5lWXNjYWxlKGQudmFsdWUpKVxyXG4gICAgICApO1xyXG5cclxuICAgIGNvbnN0IGRvdCA9IHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdteUNpcmNsZXMnKVxyXG4gICAgICAuZGF0YShsaW5lRGF0YSlcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5vbignY2xpY2snLCAoZCkgPT4gdGhpcy5oYW5kbGVCYXJDbGljayhkLCBtZXRhRGF0YSkpO1xyXG5cclxuICAgIGRvdFxyXG4gICAgICAuYXBwZW5kKCdjaXJjbGUnKVxyXG4gICAgICAuYXR0cignZmlsbCcsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgICAuYXR0cignY3gnLCAoZDogYW55KSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLmF0dHIoJ2N5JywgKGQ6IGFueSkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgLnN0eWxlKCdjdXJzb3InLCAncG9pbnRlcicpXHJcbiAgICAgIC5hdHRyKCdyJywgMyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKSB7XHJcbiAgICAgIGRvdFxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdkb3QnKVxyXG4gICAgICAgIC5hdHRyKCdjb2xvcicsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAgIC5hdHRyKCdzdHlsZScsICdmb250LXNpemU6IC44NWVtJylcclxuICAgICAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgICAgIC5hdHRyKCd5JywgKGQ6IGFueSkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgICAuYXR0cignZHknLCAnLTFlbScpXHJcbiAgICAgICAgLnRleHQoKGQ6IGFueSkgPT4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2soZDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duIHx8IGQ/LnRvZ2dsZUZyb20pIHtcclxuICAgICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVIZWFkZXJNZW51Q2xpY2soaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5oZWFkZXJNZW51Y2xpY2tFdmVudC5lbWl0KGlkKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUREMUNsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNERDFPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNERDJPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVERDJDbGljayhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzREQyT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmlzREQxT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcbn0iLCI8ZGl2XHJcbiAgI2dyb3VwY29udGFpbmVyXHJcbiAgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiXHJcbiAgW25nQ2xhc3NdPVwieyAnbGliLW5vLWJhY2tncm91bmQnOiBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCB9XCJcclxuICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcpO1wiXHJcbiAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIlxyXG4+XHJcblxyXG48ZGl2IGNsYXNzPVwiaGVhZGVyLWFsdFwiICpuZ0lmPVwiIWlzSGVhZGVyVmlzaWJsZVwiPlxyXG4gIDxsaWItY2hhcnQtaGVhZGVyLXYyXHJcbiAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAoY2xpY2tFdmVudCk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcclxuICA+PC9saWItY2hhcnQtaGVhZGVyLXYyPlxyXG4gIDxsaWItY2hhcnQtaGVhZGVyLXYzXHJcbiAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAoY29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKT1cImhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICh6b29tSW5ab29tT3V0Q2xpY2spPVwiaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKCRldmVudClcIlxyXG4gID48L2xpYi1jaGFydC1oZWFkZXItdjM+XHJcbjwvZGl2PlxyXG5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12MVxyXG4gIFt0aXRsZV09XCJjaGFydERhdGEubWV0YURhdGEudGl0bGVcIlxyXG4gIFtoYXNEcmlsbERvd25dPVwiY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93blwiXHJcbiAgW2lzRWRpdEVuYWJsZWRdPVwiY2hhcnREYXRhLm1ldGFEYXRhLmlzRWRpdEVuYWJsZWRcIlxyXG4gIFttZW51T3B0aW9uc109XCJjaGFydENvbmZpZ3VyYXRpb24uaGVhZGVyTWVudU9wdGlvbnNcIlxyXG4gIFtpc3JpYV09XCJjdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWFcIlxyXG4gIFtzZWxlY3RlZEtwaVRvb2x0b3BdPVwiY2hhcnRDb25maWd1cmF0aW9uLnNlbGVjdGVkS3BpVG9vbHRvcFwiXHJcbiAgKG1lbnVPcHRpb25DbGlja0V2ZW50KT1cImhhbmRsZUhlYWRlck1lbnVDbGljaygkZXZlbnQpXCJcclxuICBbaXNBbGVydEVuYWJsZWRdPVwiaXNBbGVydEVuYWJsZWRcIlxyXG4gICpuZ0lmPVwiaXNIZWFkZXJWaXNpYmxlXCJcclxuPjwvbGliLWNoYXJ0LWhlYWRlci12MT5cclxuXHJcbiAgPGRpdlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJjaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XCJcclxuICAgIGlkPVwiZ3JvdXBjaGFydGNvbnRhaW5lclwiXHJcbiAgICAjZ3JvdXBjaGFydGNvbnRhaW5lclxyXG4gICAgY2xhc3M9XCJsaWItY2hhcnQtc3ZnXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=