axidio-styleguide-library1-v2 0.4.58 → 0.4.59

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.
@@ -250,7 +250,7 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
250
250
  this.renderAxisLabels(svg, svgYAxisLeft, svgYAxisRight, metaData, width, height, margin, self, isria, RIGHT_SVG_WIDTH);
251
251
  // ==================== TARGET LINE ====================
252
252
  if (this.chartData.targetLineData) {
253
- this.renderTargetLine(svg, svgYAxisRight, y, width, RIGHT_SVG_WIDTH, metaData, self, isria);
253
+ this.renderTargetLine(svg, svgYAxisRight, y, width, RIGHT_SVG_WIDTH, metaData, self);
254
254
  }
255
255
  // ==================== LINE CHART ====================
256
256
  if (lineData) {
@@ -275,13 +275,12 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
275
275
  .attr('class', 'x1 axis1')
276
276
  .attr('transform', `translate(0,${translateY})`)
277
277
  // .attr('transform', `translate(-35,${translateY})`)
278
- // .call(d3.axisBottom(x))
279
- .call(isria ? d3.axisBottom(x).tickSize(0) : d3.axisBottom(x))
278
+ .call(d3.axisBottom(x))
280
279
  // .call((g) => g.select('.domain').remove());
281
280
  // .call((g) => { if (!isria) g.select('.domain').remove(); })
282
281
  .call(g => {
283
282
  // RIA + single subgroup → remove domain
284
- if (isria && (subgroups.length > 1 && self.chartData.data.length === 1)) {
283
+ if (isria && subgroups.length === 1) {
285
284
  g.select('.domain').remove();
286
285
  return;
287
286
  }
@@ -292,11 +291,11 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
292
291
  })
293
292
  .call((g) => {
294
293
  // Move only the axis line (domain) to the left
295
- g.select('.domain').attr('transform', 'translate(-60,0)');
294
+ g.select('.domain').attr('transform', 'translate(-35,0)');
296
295
  })
297
296
  .call((g) => {
298
297
  // Increase spacing between axis and labels
299
- if (isria && (subgroups.length === 1 || self.chartData.data.length > 1)) {
298
+ if (isria && subgroups.length === 1) {
300
299
  g.selectAll('.tick text')
301
300
  .attr('dy', '1em'); // Default is '0.71em', increase for more space
302
301
  }
@@ -359,14 +358,11 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
359
358
  this.applyXLabelsOnSameLine(svg, subgroups, data, metaData, self, shortTickLengthBg, isMobile, isria);
360
359
  }
361
360
  // Mobile override for RIA
362
- if (isria && self.chartData.data.length >= 3) {
361
+ if (isria && self.chartData.data.length > 8) {
363
362
  svg.selectAll('g.x1.axis1 g.tick text')
364
- .classed('mobile-xaxis-override', false)
365
- // // .text((d: string) => d.substring(0, 3))
366
- // .text((d: string) => d.substring(0, 4).toLowerCase())
367
- // .text((d: string) => d.toLowerCase())
368
- .text((d) => d)
369
- .style('font-size', '11px')
363
+ .classed('mobile-xaxis-override', true)
364
+ .text((d) => d.substring(0, 3))
365
+ .style('font-size', '12px')
370
366
  .attr('y', 5)
371
367
  .attr('x', 5)
372
368
  .style('text-anchor', 'middle');
@@ -949,7 +945,6 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
949
945
  .style('stroke-width', '1px');
950
946
  })
951
947
  .selectAll('text')
952
- .style('font-size', isria ? '11px' : null)
953
948
  .style('fill', 'var(--chart-text-color)');
954
949
  // Right y-axis (hidden by default)
955
950
  svgYAxisRight.append('g')
@@ -998,7 +993,7 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
998
993
  .attr('transform', 'rotate(-90)')
999
994
  .attr('y', yPosition)
1000
995
  .attr('x', 0 - height / 2)
1001
- .attr('dy', '0.5em')
996
+ .attr('dy', '1em')
1002
997
  .style('text-anchor', 'middle')
1003
998
  .attr('fill', 'var(--chart-text-color)');
1004
999
  if (this.chartConfiguration.isMultiChartGridLine === undefined) {
@@ -1060,12 +1055,11 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
1060
1055
  }
1061
1056
  return baseClass + ' lib-axis-waterfall-label';
1062
1057
  }
1063
- renderTargetLine(svg, svgYAxisRight, y, width, rightSvgWidth, metaData, self, isria) {
1058
+ renderTargetLine(svg, svgYAxisRight, y, width, rightSvgWidth, metaData, self) {
1064
1059
  const yZero = y(this.chartData.targetLineData.target);
1065
1060
  // Draw target line
1066
1061
  svg.append('line')
1067
- // .attr('x1', 20)
1068
- .attr('x1', isria ? 0 : 20)
1062
+ .attr('x1', 20)
1069
1063
  .attr('x2', width)
1070
1064
  .attr('y1', yZero)
1071
1065
  .attr('y2', yZero)
@@ -1079,7 +1073,7 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
1079
1073
  .attr('width', rightSvgWidth)
1080
1074
  .attr('height', 50)
1081
1075
  .append('xhtml:div')
1082
- .attr('class', isria ? 'target-display-ria' : 'target-display')
1076
+ .attr('class', 'target-display')
1083
1077
  .style('color', 'var(--chart-text-color)')
1084
1078
  .html(`<div>${targetLineName}</div><div>${self.chartData.targetLineData.target}${dataTypeTemp}</div>`);
1085
1079
  }
@@ -1220,7 +1214,6 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
1220
1214
  }
1221
1215
  createChartContainers(chartContainer, margin, height, rightSvgWidth, self, width) {
1222
1216
  // Outer container
1223
- const isria = this.customChartConfiguration.isRia;
1224
1217
  const outerContainer = chartContainer
1225
1218
  .append('div')
1226
1219
  .attr('id', self.uniqueId)
@@ -1228,8 +1221,7 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
1228
1221
  .style('width', '100%')
1229
1222
  .style('height', height)
1230
1223
  .style('overflow', 'visible') // Allow overflow to show scrollbars
1231
- // .style('padding-left', `${margin.left}px`)
1232
- .style('padding-left', `${isria ? margin.left + 18 : margin.left + 15}px`)
1224
+ .style('padding-left', `${margin.left}px`)
1233
1225
  .style('padding-right', `${rightSvgWidth}px`)
1234
1226
  .style('margin-left', '15px');
1235
1227
  // Left Y-Axis
@@ -1257,8 +1249,7 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
1257
1249
  .append('div')
1258
1250
  .attr('class', 'inner-container')
1259
1251
  .style('width', '100%')
1260
- .style('overflow-x', 'auto')
1261
- .style('height', isria ? '248px' : null);
1252
+ .style('overflow-x', 'auto');
1262
1253
  // Main SVG
1263
1254
  const svg = innerContainer
1264
1255
  .append('svg')
@@ -1288,11 +1279,11 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
1288
1279
  this.clickEvent.emit(event);
1289
1280
  }
1290
1281
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HorizontalGroupedBarWithScrollZoomComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1291
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HorizontalGroupedBarWithScrollZoomComponent, selector: "lib-horizontal-grouped-bar-with-scroll-zoom", inputs: { chartData: "chartData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent", headerMenuclickEvent: "headerMenuclickEvent" }, viewQueries: [{ propertyName: "containerElt", first: true, predicate: ["groupchartcontainer"], descendants: true, static: true }, { propertyName: "groupcontainerElt", first: true, predicate: ["groupcontainer"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n #groupcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <lib-chart-header-v1\r\n [title]=\"chartData.metaData.title\"\r\n [hasDrillDown]=\"chartData.metaData.hasDrillDown\"\r\n [isEditEnabled]=\"chartData.metaData.isEditEnabled\"\r\n [menuOptions]=\"chartConfiguration.headerMenuOptions\"\r\n [isria]=\"customChartConfiguration.isRia\"\r\n [selectedKpiTooltop]=\"chartConfiguration.selectedKpiTooltop\"\r\n (menuOptionClickEvent)=\"handleHeaderMenuClick($event)\"\r\n [isAlertEnabled]=\"isAlertEnabled\"\r\n *ngIf=\"isHeaderVisible\"\r\n ></lib-chart-header-v1>\r\n <div\r\n *ngIf=\"\r\n chartData &&\r\n chartData.metaData &&\r\n chartConfiguration.legendJustified &&\r\n legendVisible &&\r\n chartConfiguration.legendAtTopRight\r\n \"\r\n class=\"legend-holder-right\"\r\n [style.height]=\"chartConfiguration.footerHeight\"\r\n >\r\n <ul class=\"display-flex\">\r\n <li\r\n class=\"legends-positioning-inline\"\r\n *ngFor=\"let item of chartData.metaData.colors | keyvalue : keepOrder\"\r\n >\r\n <span\r\n class=\"lib-donut-justified-label-icon-drilldown\"\r\n [style.background-color]=\"item.value\"\r\n ></span\r\n ><span>{{ item.key }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"groupchartcontainer\"\r\n #groupchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n\r\n\r\n <!-- <div\r\n *ngIf=\"\r\n chartData &&\r\n chartData.metaData &&\r\n chartConfiguration.legendJustified &&\r\n legendVisible &&\r\n !chartConfiguration.legendAtTopRight\r\n \"\r\n class=\"lib-donut-chart-footer\"\r\n [style.height]=\"chartConfiguration.footerHeight\"\r\n >\r\n <ul class=\"lib-donut-justified-label-wrapper\">\r\n <li\r\n class=\"lib-donut-justified-label-item\"\r\n *ngFor=\"let item of chartData.metaData.colors | keyvalue\"\r\n >\r\n <span\r\n class=\"lib-donut-justified-label-icon\"\r\n [style.background-color]=\"item.value\"\r\n ></span\r\n ><span>{{ item.key }}</span>\r\n </li>\r\n </ul>\r\n </div> -->\r\n\r\n\r\n <!-- <div *ngIf=\"chartConfiguration?.isDisplayBarDetailsAtBottom\">\r\n <div\r\n class=\"bar-values lib-display-flex lib-justify-content-center lib-align-items-center\"\r\n *ngFor=\"\r\n let item of chartData.metaData.colors | keyvalue : keepOrder;\r\n let i = index\r\n \">\r\n <div\r\n class=\"bar-name font-size-1\"\r\n *ngIf=\"\r\n chartData.data[0][item.key] &&\r\n i <= chartConfiguration.howmanyBarDetailsToDisplay\r\n \"\r\n >\r\n {{ item.key }}\r\n </div>\r\n <div\r\n class=\"bar-value lib-display-flex lib-align-items-center font-size-1\"\r\n [style.color]=\"\r\n chartConfiguration.barVauleColor ? barVauleColor : item.value\r\n \"\r\n *ngIf=\"\r\n chartData.data[0][item.key] &&\r\n i <= chartConfiguration.howmanyBarDetailsToDisplay\r\n \"\r\n >\r\n {{ chartData.data[0][item.key] }}\r\n </div>\r\n </div>\r\n </div> -->\r\n</div>\r\n", styles: [".lib-axis-group-label{font-size:.85em;font-weight:600;letter-spacing:0px;color:#000;opacity:1}.text-transform-uppercase{text-transform:uppercase!important}.text-transform-capitalize{text-transform:capitalize!important}.legend-holder-right{display:flex;justify-content:flex-end}.display-flex{display:flex}.legends-positioning-inline{display:flex;align-items:center;justify-content:center;margin-right:10px;margin-left:35px;font-size:18px;font-weight:700;letter-spacing:0px;color:#000;opacity:1}.title{background-color:#d9d9d9;height:50px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1.3}.title:after{content:\"\";position:absolute;bottom:0;margin-bottom:-10px;left:50%;margin-left:-10px;width:0;height:0;border-top:solid 10px #d3d3d3;border-left:solid 10px transparent;border-right:solid 10px transparent}.title-bar-name{color:var(--font-color)!important;font-size:17px;font-weight:700;text-transform:capitalize}.title-bar-value{color:var(--font-color)!important;font-size:14px}.title-bar-value>span{font-weight:600}.zoomIcons-holder{display:flex;align-items:center}.legends-latest{height:14px;width:14px;display:flex;margin-right:10px}.legend-latest-holder{font-size:12px;display:flex;justify-content:flex-start;align-items:center}.marginRight-30{margin-right:30px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}.marginLeft-20{margin-left:20px}.target-display{font-size:12px;line-height:14.52px;font-weight:700;text-transform:uppercase;float:right}.target-display-ria{font-size:10px;line-height:14.52px;font-weight:400;text-transform:uppercase}.legend-style{font-weight:600;text-transform:capitalize}.bar-values{margin-top:10px}.bar-name{font-weight:600;margin-right:10px;text-transform:capitalize}.lib-chart-svg{margin-top:10px}.bar-value{height:29px;background-color:#f4f4f4;padding-left:15px;padding-right:15px;border-radius:8px;box-shadow:-2px 2px 10px #0000004d,2px 2px 10px #0000004d;font-weight:600}.mobile-xaxis-override{writing-mode:sideways-lr}@media (min-height: 900px){.legends-latest{height:17px;width:17px}}.outer-container{position:relative;width:100%;overflow:visible}.inner-container{width:100%;overflow-x:auto;overflow-y:hidden;position:relative;padding-bottom:20px;-webkit-overflow-scrolling:touch}.inner-container.scroll-enabled{overflow-x:auto;-webkit-overflow-scrolling:touch;background-size:40px 100%,40px 100%,14px 100%,14px 100%;background-attachment:local,local,scroll,scroll}.inner-container.scroll-enabled::-webkit-scrollbar{height:8px}.inner-container.scroll-enabled::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.inner-container.scroll-enabled::-webkit-scrollbar-thumb{background:#888;border-radius:4px}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ResizedDirective, selector: "[resized]", outputs: ["resized"] }, { kind: "component", type: i3.ChartHeaderV1Component, selector: "lib-chart-header-v1", inputs: ["isAlertEnabled", "title", "menuOptions", "isEditEnabled", "isria", "hasDrillDown", "selectedKpiTooltop"], outputs: ["menuOptionClickEvent"] }, { kind: "component", type: i4.ChartHeaderV2Component, selector: "lib-chart-header-v2", inputs: ["chartData", "chartConfiguration"], outputs: ["clickEvent", "zoomInZoomOutClick"] }, { kind: "component", type: i5.ChartHeaderV3Component, selector: "lib-chart-header-v3", inputs: ["chartData", "chartConfiguration"], outputs: ["compareByFilterSelection", "zoomInZoomOutClick"] }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }], encapsulation: i0.ViewEncapsulation.None }); }
1282
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HorizontalGroupedBarWithScrollZoomComponent, selector: "lib-horizontal-grouped-bar-with-scroll-zoom", inputs: { chartData: "chartData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent", headerMenuclickEvent: "headerMenuclickEvent" }, viewQueries: [{ propertyName: "containerElt", first: true, predicate: ["groupchartcontainer"], descendants: true, static: true }, { propertyName: "groupcontainerElt", first: true, predicate: ["groupcontainer"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n #groupcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <lib-chart-header-v1\r\n [title]=\"chartData.metaData.title\"\r\n [hasDrillDown]=\"chartData.metaData.hasDrillDown\"\r\n [isEditEnabled]=\"chartData.metaData.isEditEnabled\"\r\n [menuOptions]=\"chartConfiguration.headerMenuOptions\"\r\n [isria]=\"customChartConfiguration.isRia\"\r\n [selectedKpiTooltop]=\"chartConfiguration.selectedKpiTooltop\"\r\n (menuOptionClickEvent)=\"handleHeaderMenuClick($event)\"\r\n [isAlertEnabled]=\"isAlertEnabled\"\r\n *ngIf=\"isHeaderVisible\"\r\n ></lib-chart-header-v1>\r\n <div\r\n *ngIf=\"\r\n chartData &&\r\n chartData.metaData &&\r\n chartConfiguration.legendJustified &&\r\n legendVisible &&\r\n chartConfiguration.legendAtTopRight\r\n \"\r\n class=\"legend-holder-right\"\r\n [style.height]=\"chartConfiguration.footerHeight\"\r\n >\r\n <ul class=\"display-flex\">\r\n <li\r\n class=\"legends-positioning-inline\"\r\n *ngFor=\"let item of chartData.metaData.colors | keyvalue : keepOrder\"\r\n >\r\n <span\r\n class=\"lib-donut-justified-label-icon-drilldown\"\r\n [style.background-color]=\"item.value\"\r\n ></span\r\n ><span>{{ item.key }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"groupchartcontainer\"\r\n #groupchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n\r\n\r\n <!-- <div\r\n *ngIf=\"\r\n chartData &&\r\n chartData.metaData &&\r\n chartConfiguration.legendJustified &&\r\n legendVisible &&\r\n !chartConfiguration.legendAtTopRight\r\n \"\r\n class=\"lib-donut-chart-footer\"\r\n [style.height]=\"chartConfiguration.footerHeight\"\r\n >\r\n <ul class=\"lib-donut-justified-label-wrapper\">\r\n <li\r\n class=\"lib-donut-justified-label-item\"\r\n *ngFor=\"let item of chartData.metaData.colors | keyvalue\"\r\n >\r\n <span\r\n class=\"lib-donut-justified-label-icon\"\r\n [style.background-color]=\"item.value\"\r\n ></span\r\n ><span>{{ item.key }}</span>\r\n </li>\r\n </ul>\r\n </div> -->\r\n\r\n\r\n <!-- <div *ngIf=\"chartConfiguration?.isDisplayBarDetailsAtBottom\">\r\n <div\r\n class=\"bar-values lib-display-flex lib-justify-content-center lib-align-items-center\"\r\n *ngFor=\"\r\n let item of chartData.metaData.colors | keyvalue : keepOrder;\r\n let i = index\r\n \">\r\n <div\r\n class=\"bar-name font-size-1\"\r\n *ngIf=\"\r\n chartData.data[0][item.key] &&\r\n i <= chartConfiguration.howmanyBarDetailsToDisplay\r\n \"\r\n >\r\n {{ item.key }}\r\n </div>\r\n <div\r\n class=\"bar-value lib-display-flex lib-align-items-center font-size-1\"\r\n [style.color]=\"\r\n chartConfiguration.barVauleColor ? barVauleColor : item.value\r\n \"\r\n *ngIf=\"\r\n chartData.data[0][item.key] &&\r\n i <= chartConfiguration.howmanyBarDetailsToDisplay\r\n \"\r\n >\r\n {{ chartData.data[0][item.key] }}\r\n </div>\r\n </div>\r\n </div> -->\r\n</div>\r\n", styles: [".lib-axis-group-label{font-size:.85em;font-weight:600;letter-spacing:0px;color:#000;opacity:1}.text-transform-uppercase{text-transform:uppercase!important}.text-transform-capitalize{text-transform:capitalize!important}.legend-holder-right{display:flex;justify-content:flex-end}.display-flex{display:flex}.legends-positioning-inline{display:flex;align-items:center;justify-content:center;margin-right:10px;margin-left:35px;font-size:18px;font-weight:700;letter-spacing:0px;color:#000;opacity:1}.title{background-color:#d9d9d9;height:50px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1.3}.title:after{content:\"\";position:absolute;bottom:0;margin-bottom:-10px;left:50%;margin-left:-10px;width:0;height:0;border-top:solid 10px #d3d3d3;border-left:solid 10px transparent;border-right:solid 10px transparent}.title-bar-name{color:var(--font-color)!important;font-size:17px;font-weight:700;text-transform:capitalize}.title-bar-value{color:var(--font-color)!important;font-size:14px}.title-bar-value>span{font-weight:600}.zoomIcons-holder{display:flex;align-items:center}.legends-latest{height:14px;width:14px;display:flex;margin-right:10px}.legend-latest-holder{font-size:12px;display:flex;justify-content:flex-start;align-items:center}.marginRight-30{margin-right:30px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}.marginLeft-20{margin-left:20px}.target-display{font-size:12px;line-height:14.52px;font-weight:700;text-transform:uppercase;float:right}.legend-style{font-weight:600;text-transform:capitalize}.bar-values{margin-top:10px}.bar-name{font-weight:600;margin-right:10px;text-transform:capitalize}.lib-chart-svg{margin-top:10px}.bar-value{height:29px;background-color:#f4f4f4;padding-left:15px;padding-right:15px;border-radius:8px;box-shadow:-2px 2px 10px #0000004d,2px 2px 10px #0000004d;font-weight:600}.mobile-xaxis-override{writing-mode:sideways-lr}@media (min-height: 900px){.legends-latest{height:17px;width:17px}}.outer-container{position:relative;width:100%;overflow:visible}.inner-container{width:100%;overflow-x:auto;overflow-y:hidden;position:relative;padding-bottom:20px;-webkit-overflow-scrolling:touch;scrollbar-width:none}.inner-container.scroll-enabled{overflow-x:auto;-webkit-overflow-scrolling:touch;background-size:40px 100%,40px 100%,14px 100%,14px 100%;background-attachment:local,local,scroll,scroll}.inner-container.scroll-enabled::-webkit-scrollbar{height:8px}.inner-container.scroll-enabled::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.inner-container.scroll-enabled::-webkit-scrollbar-thumb{background:#888;border-radius:4px}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ResizedDirective, selector: "[resized]", outputs: ["resized"] }, { kind: "component", type: i3.ChartHeaderV1Component, selector: "lib-chart-header-v1", inputs: ["isAlertEnabled", "title", "menuOptions", "isEditEnabled", "isria", "hasDrillDown", "selectedKpiTooltop"], outputs: ["menuOptionClickEvent"] }, { kind: "component", type: i4.ChartHeaderV2Component, selector: "lib-chart-header-v2", inputs: ["chartData", "chartConfiguration"], outputs: ["clickEvent", "zoomInZoomOutClick"] }, { kind: "component", type: i5.ChartHeaderV3Component, selector: "lib-chart-header-v3", inputs: ["chartData", "chartConfiguration"], outputs: ["compareByFilterSelection", "zoomInZoomOutClick"] }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }], encapsulation: i0.ViewEncapsulation.None }); }
1292
1283
  }
1293
1284
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HorizontalGroupedBarWithScrollZoomComponent, decorators: [{
1294
1285
  type: Component,
1295
- args: [{ selector: 'lib-horizontal-grouped-bar-with-scroll-zoom', encapsulation: ViewEncapsulation.None, template: "<div\r\n #groupcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <lib-chart-header-v1\r\n [title]=\"chartData.metaData.title\"\r\n [hasDrillDown]=\"chartData.metaData.hasDrillDown\"\r\n [isEditEnabled]=\"chartData.metaData.isEditEnabled\"\r\n [menuOptions]=\"chartConfiguration.headerMenuOptions\"\r\n [isria]=\"customChartConfiguration.isRia\"\r\n [selectedKpiTooltop]=\"chartConfiguration.selectedKpiTooltop\"\r\n (menuOptionClickEvent)=\"handleHeaderMenuClick($event)\"\r\n [isAlertEnabled]=\"isAlertEnabled\"\r\n *ngIf=\"isHeaderVisible\"\r\n ></lib-chart-header-v1>\r\n <div\r\n *ngIf=\"\r\n chartData &&\r\n chartData.metaData &&\r\n chartConfiguration.legendJustified &&\r\n legendVisible &&\r\n chartConfiguration.legendAtTopRight\r\n \"\r\n class=\"legend-holder-right\"\r\n [style.height]=\"chartConfiguration.footerHeight\"\r\n >\r\n <ul class=\"display-flex\">\r\n <li\r\n class=\"legends-positioning-inline\"\r\n *ngFor=\"let item of chartData.metaData.colors | keyvalue : keepOrder\"\r\n >\r\n <span\r\n class=\"lib-donut-justified-label-icon-drilldown\"\r\n [style.background-color]=\"item.value\"\r\n ></span\r\n ><span>{{ item.key }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"groupchartcontainer\"\r\n #groupchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n\r\n\r\n <!-- <div\r\n *ngIf=\"\r\n chartData &&\r\n chartData.metaData &&\r\n chartConfiguration.legendJustified &&\r\n legendVisible &&\r\n !chartConfiguration.legendAtTopRight\r\n \"\r\n class=\"lib-donut-chart-footer\"\r\n [style.height]=\"chartConfiguration.footerHeight\"\r\n >\r\n <ul class=\"lib-donut-justified-label-wrapper\">\r\n <li\r\n class=\"lib-donut-justified-label-item\"\r\n *ngFor=\"let item of chartData.metaData.colors | keyvalue\"\r\n >\r\n <span\r\n class=\"lib-donut-justified-label-icon\"\r\n [style.background-color]=\"item.value\"\r\n ></span\r\n ><span>{{ item.key }}</span>\r\n </li>\r\n </ul>\r\n </div> -->\r\n\r\n\r\n <!-- <div *ngIf=\"chartConfiguration?.isDisplayBarDetailsAtBottom\">\r\n <div\r\n class=\"bar-values lib-display-flex lib-justify-content-center lib-align-items-center\"\r\n *ngFor=\"\r\n let item of chartData.metaData.colors | keyvalue : keepOrder;\r\n let i = index\r\n \">\r\n <div\r\n class=\"bar-name font-size-1\"\r\n *ngIf=\"\r\n chartData.data[0][item.key] &&\r\n i <= chartConfiguration.howmanyBarDetailsToDisplay\r\n \"\r\n >\r\n {{ item.key }}\r\n </div>\r\n <div\r\n class=\"bar-value lib-display-flex lib-align-items-center font-size-1\"\r\n [style.color]=\"\r\n chartConfiguration.barVauleColor ? barVauleColor : item.value\r\n \"\r\n *ngIf=\"\r\n chartData.data[0][item.key] &&\r\n i <= chartConfiguration.howmanyBarDetailsToDisplay\r\n \"\r\n >\r\n {{ chartData.data[0][item.key] }}\r\n </div>\r\n </div>\r\n </div> -->\r\n</div>\r\n", styles: [".lib-axis-group-label{font-size:.85em;font-weight:600;letter-spacing:0px;color:#000;opacity:1}.text-transform-uppercase{text-transform:uppercase!important}.text-transform-capitalize{text-transform:capitalize!important}.legend-holder-right{display:flex;justify-content:flex-end}.display-flex{display:flex}.legends-positioning-inline{display:flex;align-items:center;justify-content:center;margin-right:10px;margin-left:35px;font-size:18px;font-weight:700;letter-spacing:0px;color:#000;opacity:1}.title{background-color:#d9d9d9;height:50px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1.3}.title:after{content:\"\";position:absolute;bottom:0;margin-bottom:-10px;left:50%;margin-left:-10px;width:0;height:0;border-top:solid 10px #d3d3d3;border-left:solid 10px transparent;border-right:solid 10px transparent}.title-bar-name{color:var(--font-color)!important;font-size:17px;font-weight:700;text-transform:capitalize}.title-bar-value{color:var(--font-color)!important;font-size:14px}.title-bar-value>span{font-weight:600}.zoomIcons-holder{display:flex;align-items:center}.legends-latest{height:14px;width:14px;display:flex;margin-right:10px}.legend-latest-holder{font-size:12px;display:flex;justify-content:flex-start;align-items:center}.marginRight-30{margin-right:30px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}.marginLeft-20{margin-left:20px}.target-display{font-size:12px;line-height:14.52px;font-weight:700;text-transform:uppercase;float:right}.target-display-ria{font-size:10px;line-height:14.52px;font-weight:400;text-transform:uppercase}.legend-style{font-weight:600;text-transform:capitalize}.bar-values{margin-top:10px}.bar-name{font-weight:600;margin-right:10px;text-transform:capitalize}.lib-chart-svg{margin-top:10px}.bar-value{height:29px;background-color:#f4f4f4;padding-left:15px;padding-right:15px;border-radius:8px;box-shadow:-2px 2px 10px #0000004d,2px 2px 10px #0000004d;font-weight:600}.mobile-xaxis-override{writing-mode:sideways-lr}@media (min-height: 900px){.legends-latest{height:17px;width:17px}}.outer-container{position:relative;width:100%;overflow:visible}.inner-container{width:100%;overflow-x:auto;overflow-y:hidden;position:relative;padding-bottom:20px;-webkit-overflow-scrolling:touch}.inner-container.scroll-enabled{overflow-x:auto;-webkit-overflow-scrolling:touch;background-size:40px 100%,40px 100%,14px 100%,14px 100%;background-attachment:local,local,scroll,scroll}.inner-container.scroll-enabled::-webkit-scrollbar{height:8px}.inner-container.scroll-enabled::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.inner-container.scroll-enabled::-webkit-scrollbar-thumb{background:#888;border-radius:4px}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"] }]
1286
+ args: [{ selector: 'lib-horizontal-grouped-bar-with-scroll-zoom', encapsulation: ViewEncapsulation.None, template: "<div\r\n #groupcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <lib-chart-header-v1\r\n [title]=\"chartData.metaData.title\"\r\n [hasDrillDown]=\"chartData.metaData.hasDrillDown\"\r\n [isEditEnabled]=\"chartData.metaData.isEditEnabled\"\r\n [menuOptions]=\"chartConfiguration.headerMenuOptions\"\r\n [isria]=\"customChartConfiguration.isRia\"\r\n [selectedKpiTooltop]=\"chartConfiguration.selectedKpiTooltop\"\r\n (menuOptionClickEvent)=\"handleHeaderMenuClick($event)\"\r\n [isAlertEnabled]=\"isAlertEnabled\"\r\n *ngIf=\"isHeaderVisible\"\r\n ></lib-chart-header-v1>\r\n <div\r\n *ngIf=\"\r\n chartData &&\r\n chartData.metaData &&\r\n chartConfiguration.legendJustified &&\r\n legendVisible &&\r\n chartConfiguration.legendAtTopRight\r\n \"\r\n class=\"legend-holder-right\"\r\n [style.height]=\"chartConfiguration.footerHeight\"\r\n >\r\n <ul class=\"display-flex\">\r\n <li\r\n class=\"legends-positioning-inline\"\r\n *ngFor=\"let item of chartData.metaData.colors | keyvalue : keepOrder\"\r\n >\r\n <span\r\n class=\"lib-donut-justified-label-icon-drilldown\"\r\n [style.background-color]=\"item.value\"\r\n ></span\r\n ><span>{{ item.key }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"groupchartcontainer\"\r\n #groupchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n\r\n\r\n <!-- <div\r\n *ngIf=\"\r\n chartData &&\r\n chartData.metaData &&\r\n chartConfiguration.legendJustified &&\r\n legendVisible &&\r\n !chartConfiguration.legendAtTopRight\r\n \"\r\n class=\"lib-donut-chart-footer\"\r\n [style.height]=\"chartConfiguration.footerHeight\"\r\n >\r\n <ul class=\"lib-donut-justified-label-wrapper\">\r\n <li\r\n class=\"lib-donut-justified-label-item\"\r\n *ngFor=\"let item of chartData.metaData.colors | keyvalue\"\r\n >\r\n <span\r\n class=\"lib-donut-justified-label-icon\"\r\n [style.background-color]=\"item.value\"\r\n ></span\r\n ><span>{{ item.key }}</span>\r\n </li>\r\n </ul>\r\n </div> -->\r\n\r\n\r\n <!-- <div *ngIf=\"chartConfiguration?.isDisplayBarDetailsAtBottom\">\r\n <div\r\n class=\"bar-values lib-display-flex lib-justify-content-center lib-align-items-center\"\r\n *ngFor=\"\r\n let item of chartData.metaData.colors | keyvalue : keepOrder;\r\n let i = index\r\n \">\r\n <div\r\n class=\"bar-name font-size-1\"\r\n *ngIf=\"\r\n chartData.data[0][item.key] &&\r\n i <= chartConfiguration.howmanyBarDetailsToDisplay\r\n \"\r\n >\r\n {{ item.key }}\r\n </div>\r\n <div\r\n class=\"bar-value lib-display-flex lib-align-items-center font-size-1\"\r\n [style.color]=\"\r\n chartConfiguration.barVauleColor ? barVauleColor : item.value\r\n \"\r\n *ngIf=\"\r\n chartData.data[0][item.key] &&\r\n i <= chartConfiguration.howmanyBarDetailsToDisplay\r\n \"\r\n >\r\n {{ chartData.data[0][item.key] }}\r\n </div>\r\n </div>\r\n </div> -->\r\n</div>\r\n", styles: [".lib-axis-group-label{font-size:.85em;font-weight:600;letter-spacing:0px;color:#000;opacity:1}.text-transform-uppercase{text-transform:uppercase!important}.text-transform-capitalize{text-transform:capitalize!important}.legend-holder-right{display:flex;justify-content:flex-end}.display-flex{display:flex}.legends-positioning-inline{display:flex;align-items:center;justify-content:center;margin-right:10px;margin-left:35px;font-size:18px;font-weight:700;letter-spacing:0px;color:#000;opacity:1}.title{background-color:#d9d9d9;height:50px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1.3}.title:after{content:\"\";position:absolute;bottom:0;margin-bottom:-10px;left:50%;margin-left:-10px;width:0;height:0;border-top:solid 10px #d3d3d3;border-left:solid 10px transparent;border-right:solid 10px transparent}.title-bar-name{color:var(--font-color)!important;font-size:17px;font-weight:700;text-transform:capitalize}.title-bar-value{color:var(--font-color)!important;font-size:14px}.title-bar-value>span{font-weight:600}.zoomIcons-holder{display:flex;align-items:center}.legends-latest{height:14px;width:14px;display:flex;margin-right:10px}.legend-latest-holder{font-size:12px;display:flex;justify-content:flex-start;align-items:center}.marginRight-30{margin-right:30px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}.marginLeft-20{margin-left:20px}.target-display{font-size:12px;line-height:14.52px;font-weight:700;text-transform:uppercase;float:right}.legend-style{font-weight:600;text-transform:capitalize}.bar-values{margin-top:10px}.bar-name{font-weight:600;margin-right:10px;text-transform:capitalize}.lib-chart-svg{margin-top:10px}.bar-value{height:29px;background-color:#f4f4f4;padding-left:15px;padding-right:15px;border-radius:8px;box-shadow:-2px 2px 10px #0000004d,2px 2px 10px #0000004d;font-weight:600}.mobile-xaxis-override{writing-mode:sideways-lr}@media (min-height: 900px){.legends-latest{height:17px;width:17px}}.outer-container{position:relative;width:100%;overflow:visible}.inner-container{width:100%;overflow-x:auto;overflow-y:hidden;position:relative;padding-bottom:20px;-webkit-overflow-scrolling:touch;scrollbar-width:none}.inner-container.scroll-enabled{overflow-x:auto;-webkit-overflow-scrolling:touch;background-size:40px 100%,40px 100%,14px 100%,14px 100%;background-attachment:local,local,scroll,scroll}.inner-container.scroll-enabled::-webkit-scrollbar{height:8px}.inner-container.scroll-enabled::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.inner-container.scroll-enabled::-webkit-scrollbar-thumb{background:#888;border-radius:4px}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"] }]
1296
1287
  }], ctorParameters: () => [], propDecorators: { containerElt: [{
1297
1288
  type: ViewChild,
1298
1289
  args: ['groupchartcontainer', { static: true }]
@@ -1308,4 +1299,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1308
1299
  }], headerMenuclickEvent: [{
1309
1300
  type: Output
1310
1301
  }] } });
1311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxrQkFBa0IsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7OztBQVdsRCxNQUFNLE9BQU8sMkNBQ1gsU0FBUSxpQkFBaUI7SUF5RXpCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUEvREEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5Qiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFD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QyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxjQUFjLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBQ0QsY0FBYyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUNELDhCQUE4QixDQUFDLEtBQUs7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0FyK0NVLDJDQUEyQzttR0FBM0MsMkNBQTJDLGdoQkN6QnhELGs3SEF3SEE7OzRGRC9GYSwyQ0FBMkM7a0JBVHZELFNBQVM7K0JBQ0UsNkNBQTZDLGlCQU14QyxpQkFBaUIsQ0FBQyxJQUFJO3dEQU9yQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlsRCxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdwQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRVbmlxdWVJZCB9IGZyb20gJy4uL3VuaXF1ZS1pZCc7XHJcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tICcuLi9jaGFydC1oZWxwZXInO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XHJcbmltcG9ydCB7IFJlc2l6ZWRFdmVudCB9IGZyb20gJ2FuZ3VsYXItcmVzaXplLWV2ZW50JztcclxuaW1wb3J0IEhlYWRlckNvbmZpZ0hlbHBlciBmcm9tICcuLi9oZWFkZXItY29uZmlnJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWhvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2NvbW1vbi1zdHlsZXMubGVzcycsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbEdyb3VwZWRCYXJXaXRoU2Nyb2xsWm9vbUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWRcclxuICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBpc0hlYWRlclZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGxlZ2VuZFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hhcnRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uOiBhbnkgPSB7XHJcbiAgICBtYXJnaW46IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDIwLCBsZWZ0OiA0MCB9LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsZWdlbmRKdXN0aWZpZWQ6IHRydWUsXHJcbiAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgeUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgIHNob3dMaW5lQ2hhcnRBeGlzOiB0cnVlLFxyXG4gICAgc2hvd1ZhbHVlczogdHJ1ZSxcclxuICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gICAgeEF4aXNHcmlkOiB1bmRlZmluZWQsXHJcbiAgICB5QXhpc0dyaWQ6IGZhbHNlLFxyXG4gICAgbGVnZW5kVmlzaWJsZTogZmFsc2UsXHJcbiAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICBjdXN0b21Zc2NhbGU6IHVuZGVmaW5lZCxcclxuICAgIHRleHRzT25CYXI6IHVuZGVmaW5lZCxcclxuICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiBmYWxzZSxcclxuICAgIGlzWWF4aXNIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNEYXNoZWQ6IHVuZGVmaW5lZCxcclxuICAgIHRleHRGb3JtYXR0ZXI6IHVuZGVmaW5lZCxcclxuICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgIGhpZGVMZWdlbmRPblRvcDogdHJ1ZSxcclxuICAgIGlzWGF4aXNDb2xvcjogJyM5OTk5OTknLFxyXG4gICAgbGFiZWxPdmVybGFwTWlub3JGaXg6IHRydWUsXHJcbiAgICBub0hvdmVyRWZmZWN0OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckRpc3BsYXlEYXRhOiB0cnVlLFxyXG4gICAgc2hvd1hheGlzVG9wOiB0cnVlLFxyXG4gICAgZGlzcGxheVlheGlzTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICB4TGFiZWxzT25TYW1lTGluZTogdW5kZWZpbmVkLFxyXG4gICAgdGV4dEFsd2F5c0hvcml6b250YWw6IHVuZGVmaW5lZCxcclxuICAgIGxlZ2VuZEF0VG9wUmlnaHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHRydWUsXHJcbiAgICBkaXNwbGF5VGl0bGVPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgaXNUb2dnbGVWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RpdGxlSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b206IHVuZGVmaW5lZCxcclxuICAgIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiAwLFxyXG4gICAgYmFyVmF1bGVDb2xvcjogdW5kZWZpbmVkLFxyXG4gICAgZGVmYXVsdEJhckhlaWdodDogMixcclxuICB9O1xyXG5cclxuICB1bmlxdWVJZDogYW55ID0gdGhpcy5nZXRVbmlxdWVJZCgpO1xyXG4gIGlzWm9vbWVkT3V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0REMU9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0REMk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgb25SZXNpemVkKGV2ZW50OiBSZXNpemVkRXZlbnQpIHtcclxuICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkMy5zZWxlY3QoJyMnICsgc2VsZi51bmlxdWVJZCkucmVtb3ZlKCk7XHJcbiAgICAgICAgc2VsZi5pbml0aWFsaXplZ3JvdXBDaGFydCgpO1xyXG4gICAgICB9LmJpbmQoc2VsZiksXHJcbiAgICAgIDEwXHJcbiAgICApO1xyXG4gIH1cclxuICBpc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQsIGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgdGhpcy5vblJlc2l6ZWQoZXZlbnQpO1xyXG4gIH1cclxuICBoYW5kbGVab29taW5ab29tb3V0Q2xpY2soeyBpc1pvb21PdXQsIGV2ZW50IH0pIHtcclxuICAgIHRoaXMuaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge31cclxuICBpc0xlZ2VuZFZpc2libGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyAmJlxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMpLmxlbmd0aCA+IDFcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2VlcE9yZGVyID0gKGEsIGIpID0+IHtcclxuICAgIHJldHVybiBhO1xyXG4gIH07XHJcblxyXG4gIGdldCBpc0FsZXJ0RW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbj8uaGVhZGVyTWVudU9wdGlvbnM/LnNvbWUoXHJcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gJ2VkaXRBbGVydCdcclxuICAgICk7XHJcbiAgfSAgXHJcblxyXG5pbml0aWFsaXplZ3JvdXBDaGFydCgpIHtcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBWQVJJQUJMRSBERUNMQVJBVElPTlMgPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCBzZWxmID0gdGhpcztcclxuICBsZXQgZGF0YSA9IFtdO1xyXG4gIGxldCBtZXRhRGF0YTogYW55ID0gbnVsbDtcclxuICBsZXQga2V5TGlzdCA9IG51bGw7XHJcbiAgbGV0IGxpbmVEYXRhID0gbnVsbDtcclxuICBsZXQgY29sb3JNYXAgPSB7fTtcclxuICBsZXQgZm9ybWF0RnJvbUJhY2tlbmQ7XHJcbiAgbGV0IGZvcm1hdEZvckh1Z2VOdW1iZXJzO1xyXG4gIFxyXG4gIC8vIERldmljZSBkZXRlY3Rpb25cclxuICBjb25zdCBpc01vYmlsZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNTc2O1xyXG4gIGNvbnN0IGlzVGFibGV0ID0gd2luZG93LmlubmVyV2lkdGggPj0gNTc2ICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyO1xyXG4gIGNvbnN0IGlzRGVza3RvcCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDk5MjtcclxuICBjb25zdCBpc3JpYSA9IHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhO1xyXG5cclxuICAvLyBDaGFydCBzY2FsZSB2YXJpYWJsZXNcclxuICBsZXQgeDogYW55O1xyXG4gIGxldCB0ZW1wU2NhbGU7XHJcblxyXG4gIC8vIFRpY2sgbGVuZ3RoIGNvbnN0YW50c1xyXG4gIGNvbnN0IFNIT1JUX1RJQ0tfTEVOR1RIID0gNDtcclxuICBjb25zdCBMT05HX1RJQ0tfTEVOR1RIID0gMTY7XHJcbiAgY29uc3QgU0hPUlRfVElDS19MRU5HVEhfQkcgPSA1O1xyXG4gIGNvbnN0IExPTkdfVElDS19MRU5HVEhfQkcgPSAzMDtcclxuICBjb25zdCBMRUZUX0FORF9SSUdIVF9TUEFDRVMgPSA1MDtcclxuICBjb25zdCBSSUdIVF9TVkdfV0lEVEggPSA2MDtcclxuICBcclxuICAvLyBGbGFnc1xyXG4gIGxldCBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBDT05GSUdVUkFUSU9OIFNFVFVQID09PT09PT09PT09PT09PT09PT09XHJcbiAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25ba2V5XSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAga2V5LFxyXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEV4dHJhY3QgY2hhcnQgZGF0YVxyXG4gIGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuXHJcbiAgLy8gU2V0dXAgY29sb3IgbWFwcGluZ3NcclxuICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgIG1ldGFEYXRhWydjb2xvckFib3ZlVGFyZ2V0J10gPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgfVxyXG4gIGNvbG9yTWFwID0gbWV0YURhdGEuY29sb3JzO1xyXG4gIGtleUxpc3QgPSBtZXRhRGF0YS5rZXlMaXN0O1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBDT05UQUlORVIgU0VUVVAgPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICBjb25zdCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5ncm91cGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICBjb25zdCBtYXJnaW4gPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW47XHJcbiAgXHJcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLmNhbGN1bGF0ZUNoYXJ0RGltZW5zaW9ucyhcclxuICAgIGNoYXJ0Q29udGFpbmVyLFxyXG4gICAgdmVydGljYWxzdGFja2VkY29udGFpbmVyLFxyXG4gICAgbWFyZ2luLFxyXG4gICAgc2VsZlxyXG4gICk7XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFZJU0lCSUxJVFkgQ09ORklHVVJBVElPTiA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGU7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLmxlZ2VuZFZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IERBVEEgRk9STUFUVElORyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgIGZvcm1hdEZyb21CYWNrZW5kID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXIpO1xyXG4gICAgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gU1ZHIENPTlRBSU5FUlMgQ1JFQVRJT04gPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCB7XHJcbiAgICBvdXRlckNvbnRhaW5lcixcclxuICAgIHN2Z1lBeGlzTGVmdCxcclxuICAgIHN2Z1lBeGlzUmlnaHQsXHJcbiAgICBpbm5lckNvbnRhaW5lcixcclxuICAgIHN2Z1xyXG4gIH0gPSB0aGlzLmNyZWF0ZUNoYXJ0Q29udGFpbmVycyhjaGFydENvbnRhaW5lciwgbWFyZ2luLCBoZWlnaHQsIFJJR0hUX1NWR19XSURUSCwgc2VsZiwgd2lkdGgpO1xyXG5cclxuICAvLyBPbmx5IGVuYWJsZSBob3Jpem9udGFsIHNjcm9sbGluZyBvbiBtb2JpbGUvdGFibGV0IHdoZW4gaW4gem9vbWVkLW91dFxyXG4gIC8vIG1vZGUgYW5kIHRoZXJlIGFyZSBtYW55IGdyb3VwcyBvciBtdWx0aXBsZSBzdWJncm91cHMuIE90aGVyd2lzZSBrZWVwXHJcbiAgLy8gdGhlIGlubmVyIGNvbnRhaW5lciBmaXhlZCAobm8gc2Nyb2xsYmFyKS5cclxuICB0cnkge1xyXG4gICAgY29uc3QgZ3JvdXBzQ291bnQgPSAoZGF0YSBhcyBhbnkpLmxlbmd0aCB8fCAwO1xyXG4gICAgY29uc3Qgc3ViZ3JvdXBzQ291bnQgPSAoa2V5TGlzdCBhcyBhbnkgJiYgKGtleUxpc3QgYXMgYW55KS5sZW5ndGgpIHx8IDA7XHJcbiAgICAvLyBPbiBtb2JpbGUvdGFibGV0OiBhbHdheXMgZW5hYmxlIGhvcml6b250YWwgc2Nyb2xsaW5nIHdoZW4gdGhlcmUgaXNcclxuICAgIC8vIG1vcmUgdGhhbiBvbmUgc3ViZ3JvdXAgc28gZ3JvdXBlZCBiYXJzIGRvbid0IGdldCBjb25nZXN0ZWQuXHJcbiAgICAvLyBPbiBkZXNrdG9wOiBlbmFibGUgc2Nyb2xsaW5nIHdoZW4gdGhlcmUgYXJlIG1hbnkgZ3JvdXBzIG9yXHJcbiAgICAvLyBtdWx0aXBsZSBzdWJncm91cHMgKGtlZXBzIHByZXZpb3VzIGJlaGF2aW9yKS5cclxuICAgIGlmICgoaXNNb2JpbGUgfHwgaXNUYWJsZXQpICYmIHN1Ymdyb3Vwc0NvdW50ID4gMSkge1xyXG4gICAgICBpbm5lckNvbnRhaW5lci5zdHlsZSgnb3ZlcmZsb3cteCcsICdhdXRvJyk7XHJcbiAgICAgIGlubmVyQ29udGFpbmVyLmNsYXNzZWQoJ3Njcm9sbC1lbmFibGVkJywgdHJ1ZSk7XHJcbiAgICB9IGVsc2UgaWYgKGdyb3Vwc0NvdW50ID4gOCB8fCBzdWJncm91cHNDb3VudCA+IDIpIHtcclxuICAgICAgaW5uZXJDb250YWluZXIuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpO1xyXG4gICAgICBpbm5lckNvbnRhaW5lci5jbGFzc2VkKCdzY3JvbGwtZW5hYmxlZCcsIHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5uZXJDb250YWluZXIuc3R5bGUoJ292ZXJmbG93LXgnLCAnaGlkZGVuJyk7XHJcbiAgICAgIGlubmVyQ29udGFpbmVyLmNsYXNzZWQoJ3Njcm9sbC1lbmFibGVkJywgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIC8vIGlnbm9yZVxyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gU0NBTEVTIFNFVFVQID09PT09PT09PT09PT09PT09PT09XHJcbiAgY29uc3Qgc3ViZ3JvdXBzOiBhbnkgPSBrZXlMaXN0O1xyXG4gIGNvbnN0IGdyb3VwcyA9IGQzLm1hcChkYXRhLCAoZCkgPT4gZC5uYW1lKS5rZXlzKCk7XHJcblxyXG4gIC8vIFgtYXhpcyBzY2FsZSBjb25maWd1cmF0aW9uXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgIHggPSBkMy5zY2FsZUJhbmQoKVxyXG4gICAgICAucmFuZ2VSb3VuZChbd2lkdGgsIDBdKVxyXG4gICAgICAuYWxpZ24oMC41KVxyXG4gICAgICAucGFkZGluZyhbMC41XSlcclxuICAgICAgLmRvbWFpbihkYXRhLm1hcCgoZDogYW55KSA9PiBkLm5hbWUudG9Mb3dlckNhc2UoKSkpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB4ID0gZDMuc2NhbGVCYW5kKClcclxuICAgICAgLmRvbWFpbihncm91cHMpXHJcbiAgICAgIC5yYW5nZShbTEVGVF9BTkRfUklHSFRfU1BBQ0VTLCB3aWR0aCAtIFJJR0hUX1NWR19XSURUSCAtIExFRlRfQU5EX1JJR0hUX1NQQUNFU10pXHJcbiAgICAgIC5wYWRkaW5nKFswLjNdKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHhTY2FsZUZyb21PcmlnaW4gPSBkMy5zY2FsZUJhbmQoKVxyXG4gICAgLmRvbWFpbihncm91cHMpXHJcbiAgICAucmFuZ2UoWzAsIHdpZHRoIC0gUklHSFRfU1ZHX1dJRFRIXSk7XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFgtQVhJUyBSRU5ERVJJTkcgPT09PT09PT09PT09PT09PT09PT1cclxuICB0aGlzLnJlbmRlclhBeGlzKHN2ZywgeCwgaGVpZ2h0LCBtZXRhRGF0YSwgc3ViZ3JvdXBzLCBkYXRhLCBcclxuICAgIFNIT1JUX1RJQ0tfTEVOR1RIX0JHLCBMT05HX1RJQ0tfTEVOR1RIX0JHLCBzZWxmLCBpc3JpYSwgaXNNb2JpbGUsIGlzVGFibGV0KTtcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gWS1BWElTIFNFVFVQID09PT09PT09PT09PT09PT09PT09XHJcbiAgY29uc3QgeSA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2VSb3VuZChbaGVpZ2h0LCAwXSk7XHJcbiAgbGV0IG1heFZhbHVlID0gdGhpcy5jYWxjdWxhdGVNYXhWYWx1ZShkYXRhLCBrZXlMaXN0KTtcclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSkge1xyXG4gICAgbWF4VmFsdWUgPSBtYXhWYWx1ZSAqIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJiBtYXhWYWx1ZSA8IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkge1xyXG4gICAgbWF4VmFsdWUgPSBtYXhWYWx1ZSA8IDEwICYmIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCA8IDEwXHJcbiAgICAgID8gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgM1xyXG4gICAgICA6IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDIwO1xyXG4gIH1cclxuXHJcbiAgeS5kb21haW4oWzAsIG1heFZhbHVlXSkubmljZSgpO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBMSU5FIENIQVJUIFktU0NBTEUgPT09PT09PT09PT09PT09PT09PT1cclxuICBsZXQgbGluZVlzY2FsZTtcclxuICBsZXQgeUxpbmVBeGlzO1xyXG5cclxuICBpZiAobGluZURhdGEgIT0gbnVsbCkge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZXR1cExpbmVZU2NhbGUobGluZURhdGEsIGhlaWdodCwgc2VsZik7XHJcbiAgICBsaW5lWXNjYWxlID0gcmVzdWx0LmxpbmVZc2NhbGU7XHJcbiAgICB5TGluZUF4aXMgPSByZXN1bHQueUxpbmVBeGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gR1JJRCBMSU5FUyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIHRoaXMucmVuZGVyR3JpZExpbmVzKHN2ZywgeCwgeSwgaGVpZ2h0LCB3aWR0aCwgc2VsZiwgaXNyaWEpO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBCQVJTIFJFTkRFUklORyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGNvbnN0IHhTdWJncm91cCA9IHRoaXMuc2V0dXBYU3ViZ3JvdXBTY2FsZShzdWJncm91cHMsIHgsIHNlbGYpO1xyXG4gIGNvbnN0IGNvbG9yID0gZDMuc2NhbGVPcmRpbmFsKClcclxuICAgIC5kb21haW4oc3ViZ3JvdXBzKVxyXG4gICAgLnJhbmdlKE9iamVjdC52YWx1ZXMobWV0YURhdGEuY29sb3JzKSk7XHJcblxyXG4gIHRoaXMucmVuZGVyQmFycyhzdmcsIGRhdGEsIHN1Ymdyb3VwcywgeCwgeFN1Ymdyb3VwLCB5LCBoZWlnaHQsIGNvbG9yLCBcclxuICAgIG1ldGFEYXRhLCBzZWxmLCBMRUZUX0FORF9SSUdIVF9TUEFDRVMsIHRlbXBTY2FsZSwgaXNyaWEpO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBCQVIgTEFCRUxTID09PT09PT09PT09PT09PT09PT09XHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgdGhpcy5yZW5kZXJCYXJMYWJlbHMoc3ZnLCBkYXRhLCBzdWJncm91cHMsIHgsIHhTdWJncm91cCwgeSwgaGVpZ2h0LCBcclxuICAgICAgbWV0YURhdGEsIHNlbGYsIHRlbXBTY2FsZSwgaXNyaWEpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gWS1BWElTIFJFTkRFUklORyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIHRoaXMucmVuZGVyWUF4aXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIHksIHlMaW5lQXhpcywgXHJcbiAgICBsaW5lRGF0YSwgc2VsZiwgaXNyaWEsIG1hcmdpbik7XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IEFYSVMgTEFCRUxTID09PT09PT09PT09PT09PT09PT09XHJcbiAgdGhpcy5yZW5kZXJBeGlzTGFiZWxzKHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBtZXRhRGF0YSwgXHJcbiAgICB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIHNlbGYsIGlzcmlhLCBSSUdIVF9TVkdfV0lEVEgpO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBUQVJHRVQgTElORSA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgdGhpcy5yZW5kZXJUYXJnZXRMaW5lKHN2Zywgc3ZnWUF4aXNSaWdodCwgeSwgd2lkdGgsIFJJR0hUX1NWR19XSURUSCwgXHJcbiAgICAgIG1ldGFEYXRhLCBzZWxmLCBpc3JpYSk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBMSU5FIENIQVJUID09PT09PT09PT09PT09PT09PT09XHJcbiAgaWYgKGxpbmVEYXRhKSB7XHJcbiAgICB0aGlzLnJlbmRlckxpbmVDaGFydChzdmcsIGxpbmVEYXRhLCB4LCBsaW5lWXNjYWxlLCBtZXRhRGF0YSwgc2VsZik7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBaT09NIEhBTkRMSU5HID09PT09PT09PT09PT09PT09PT09XHJcbiAgaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIHRoaXMuaGFuZGxlWm9vbU91dChzdmcsIGhlaWdodCwgbWFyZ2luKTtcclxuICB9XHJcbn1cclxuXHJcbi8vID09PT09PT09PT09PT09PT09PT09IEhFTFBFUiBNRVRIT0RTID09PT09PT09PT09PT09PT09PT09XHJcblxyXG5wcml2YXRlIHJlbmRlclhBeGlzKHN2ZywgeCwgaGVpZ2h0LCBtZXRhRGF0YSwgc3ViZ3JvdXBzLCBkYXRhLCBcclxuICBzaG9ydFRpY2tMZW5ndGhCZywgbG9uZ1RpY2tMZW5ndGhCZywgc2VsZiwgaXNyaWEsIGlzTW9iaWxlLCBpc1RhYmxldCkge1xyXG4gIFxyXG4gIGxldCBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gTm9ybWFsIHRpY2tzIGZvciBkYXNoYm9hcmQgY2hhcnRzXHJcbiAgICAvLyBEeW5hbWljYWxseSBhZGp1c3QgWSB0cmFuc2xhdGlvbiBmb3IgbW9iaWxlXHJcbiAgICBsZXQgdHJhbnNsYXRlWSA9IGhlaWdodDtcclxuICAgIGlmIChpc01vYmlsZSkge1xyXG4gICAgICB0cmFuc2xhdGVZID0gaGVpZ2h0ICsgMTA7IC8vIEFkZCBleHRyYSBzcGFjZSBhdCB0aGUgdG9wIGZvciBtb2JpbGVcclxuICAgIH1cclxuICAgIHN2Zy5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7dHJhbnNsYXRlWX0pYClcclxuICAgICAgLy8gLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoLTM1LCR7dHJhbnNsYXRlWX0pYClcclxuICAgICAgLy8gLmNhbGwoZDMuYXhpc0JvdHRvbSh4KSlcclxuICAgICAgIC5jYWxsKGlzcmlhID8gZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgwKSA6IGQzLmF4aXNCb3R0b20oeCkpIFxyXG4gICAgICAvLyAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgICAgIC8vIC5jYWxsKChnKSA9PiB7IGlmICghaXNyaWEpIGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCk7IH0pXHJcbiAgICAgIC5jYWxsKGcgPT4ge1xyXG4gICAgLy8gUklBICsgc2luZ2xlIHN1Ymdyb3VwIOKGkiByZW1vdmUgZG9tYWluXHJcbiAgICBpZiAoaXNyaWEgJiYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmIHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09PTEgKSkge1xyXG4gICAgICAgIGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3JcclxuICAgIGlmICghaXNyaWEpIHtcclxuICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpO1xyXG4gICAgfVxyXG59KVxyXG4gICAgICAgLmNhbGwoKGcpID0+IHtcclxuICAgIC8vIE1vdmUgb25seSB0aGUgYXhpcyBsaW5lIChkb21haW4pIHRvIHRoZSBsZWZ0XHJcbiAgICBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoLTYwLDApJyk7fSlcclxuICAgICAuY2FsbCgoZykgPT4ge1xyXG4gICAgLy8gSW5jcmVhc2Ugc3BhY2luZyBiZXR3ZWVuIGF4aXMgYW5kIGxhYmVsc1xyXG4gICAgaWYoaXNyaWEgJiYgKHN1Ymdyb3Vwcy5sZW5ndGggPT09IDEgfHwgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPjEgKSkge1xyXG4gICAgZy5zZWxlY3RBbGwoJy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cignZHknLCAnMWVtJyk7IC8vIERlZmF1bHQgaXMgJzAuNzFlbScsIGluY3JlYXNlIGZvciBtb3JlIHNwYWNlXHJcbiAgICB9XHJcbiAgfSlcclxuICAuY2FsbCgoZykgPT4ge1xyXG4gIC8vIFJlbW92ZSBvbmx5IHRoZSBsYXN0IHRpY2tcclxuICAgaWYoaXNyaWEgJiYgc3ViZ3JvdXBzLmxlbmd0aCA9PT0gMSkge1xyXG4gIGNvbnN0IHRpY2tzID0gZy5zZWxlY3RBbGwoJy50aWNrJyk7XHJcbiAgaWYgKHRpY2tzLnNpemUoKSA+IDApIHtcclxuICAgIC8vIGQzLnNlbGVjdCh0aWNrcy5ub2RlcygpW3RpY2tzLnNpemUoKSAtIDFdKS5yZW1vdmUoKTtcclxuICAgICBkMy5zZWxlY3QodGlja3Mubm9kZXMoKVt0aWNrcy5zaXplKCkgLSAxXSkuc2VsZWN0KCdsaW5lJykucmVtb3ZlKCk7XHJcbiAgfVxyXG59XHJcbn0pO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5yZW1vdmUoKTtcclxuXHJcbiAgICBjb25zdCB5T2Zmc2V0ID0gc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgIW1ldGFEYXRhLnhMYWJlbCA/IDMyIDogMDtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuYXR0cigneScsIHlPZmZzZXQgfHwgbnVsbCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIEJpZ2dlciB0aWNrcyBmb3Igd2Vla2x5IGNoYXJ0c1xyXG4gICAgc3ZnLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtoZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuXHJcbiAgICAvLyBBbHRlcm5hdGUgdGljayBsaW5lIHNpemVzXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuYXR0cigneTInLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmIChhbHRlcm5hdGVfdGV4dCAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc05vQWx0ZXJuYXRlWGF4aXNUZXh0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBsb25nVGlja0xlbmd0aEJnIC0gNztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHNob3J0VGlja0xlbmd0aEJnIC0gNDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgLy8gWC1heGlzIGxhYmVsIHRleHRzXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICAgICAgcmV0dXJuIHNob3J0VGlja0xlbmd0aEJnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gbG9uZ1RpY2tMZW5ndGhCZztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIHNob3J0VGlja0xlbmd0aEJnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIC8vIEFwcGx5IGxhYmVscyBvbiBzYW1lIGxpbmUgY29uZmlndXJhdGlvblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgdGhpcy5hcHBseVhMYWJlbHNPblNhbWVMaW5lKHN2Zywgc3ViZ3JvdXBzLCBkYXRhLCBtZXRhRGF0YSwgc2VsZiwgXHJcbiAgICAgIHNob3J0VGlja0xlbmd0aEJnLCBpc01vYmlsZSwgaXNyaWEpO1xyXG4gIH1cclxuXHJcbiAgLy8gTW9iaWxlIG92ZXJyaWRlIGZvciBSSUFcclxuICBpZiAoaXNyaWEgJiYgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPj0zKSB7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmNsYXNzZWQoJ21vYmlsZS14YXhpcy1vdmVycmlkZScsIGZhbHNlKVxyXG4gICAgICAvLyAvLyAudGV4dCgoZDogc3RyaW5nKSA9PiBkLnN1YnN0cmluZygwLCAzKSlcclxuICAgICAgLy8gLnRleHQoKGQ6IHN0cmluZykgPT4gZC5zdWJzdHJpbmcoMCwgNCkudG9Mb3dlckNhc2UoKSlcclxuICAgICAgLy8gLnRleHQoKGQ6IHN0cmluZykgPT4gZC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAudGV4dCgoZDogc3RyaW5nKSA9PiBkKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMXB4JylcclxuICAgICAgLmF0dHIoJ3knLCA1KVxyXG4gICAgICAuYXR0cigneCcsIDUpXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJyk7XHJcbiAgfVxyXG5cclxuLy8g4pyFIFRhYmxldCBWaWV3IOKAlCBSb3RhdGUgaWYgdGV4dCA+IDEwIGNoYXJhY3RlcnNcclxuaWYgKGlzVGFibGV0KSB7XHJcbiAgIGNvbnN0IHRleHROb2RlcyA9IHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKTtcclxuICB0ZXh0Tm9kZXMuZWFjaChmdW5jdGlvbiAoZDogYW55KSB7XHJcbiAgICBjb25zdCB0ZXh0ID0gZCA/IGQudG9TdHJpbmcoKS50cmltKCkgOiAnJztcclxuXHJcbiAgICAvLyBEZXRlY3QgZGF0ZSBmb3JtYXRzICh0byBza2lwIHRoZW0pXHJcbiAgICBjb25zdCBpc0RhdGVTdHJpbmcgPVxyXG4gICAgICAvXlxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fSQvLnRlc3QodGV4dCkgfHwgLy8gZS5nLiAyMDI1LTEwLTI5IG9yIDEwLzI5LzIwMjVcclxuICAgICAgL14oXFxkezEsNH1bLVxcL11cXGR7MSwyfVstXFwvXVxcZHsxLDR9KVxccypbLeKAk11cXHMqKFxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fSkkLy50ZXN0KHRleHQpOyBcclxuXHJcbiAgICAgIFxyXG4gICAgaWYgKCFpc0RhdGVTdHJpbmcgJiYgdGV4dC5sZW5ndGggPiAxMCkge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSB0ZXh0LnNsaWNlKDAsOSkgKyAn4oCmJztcclxuICAgICAgdGV4dE5vZGVzXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTBweCcpXHJcbiAgICAgICAgLy8gLnRleHQodHJpbW1lZClcclxuICAgICAgIFxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5cclxuICAvLyBNb2JpbGUvdGFibGV0IG92ZXJyaWRlIC0gY2hlY2sgZm9yIHNpbmdsZS1ncm91cCBkYXRlIGNoYXJ0cyBmaXJzdFxyXG4gIGlmIChpc01vYmlsZSkge1xyXG4gICAgY29uc3QgdGV4dE5vZGVzID0gc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpO1xyXG4gICAgY29uc3QgZ3JvdXBzQ291bnQgPSAoZGF0YSBhcyBhbnkpLmxlbmd0aCB8fCAwO1xyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGRhdGVzIGluIHgtYXhpcyBhbmQgc2luZ2xlIGdyb3VwXHJcbiAgICBsZXQgaGFzRGF0ZVZhbHVlcyA9IGZhbHNlO1xyXG4gICAgdGV4dE5vZGVzLmVhY2goZnVuY3Rpb24oZCkge1xyXG4gICAgICAvLyBDaGVjayBmb3IgZGF0ZSB2YWx1ZXMgdXNpbmcgYm90aCBEYXRlLnBhcnNlIGFuZCByZWdleCBmb3IgZGF0ZSBmb3JtYXRcclxuICAgICAgICBjb25zdCBpc0RhdGVTdHJpbmcgPVxyXG4gICAgL15cXGR7MSw0fVstXFwvXVxcZHsxLDJ9Wy1cXC9dXFxkezEsNH0kLy50ZXN0KGQudHJpbSgpKSB8fFxyXG4gICAgL14oXFxkezEsNH1bLVxcL11cXGR7MSwyfVstXFwvXVxcZHsxLDR9KVxccypbLeKAk11cXHMqKFxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fSkkLy50ZXN0KGQudHJpbSgpKTtcclxuICAgICAgaWYgKCFoYXNEYXRlVmFsdWVzICYmIGlzRGF0ZVN0cmluZykge1xyXG4gICAgICAgIGhhc0RhdGVWYWx1ZXMgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDb3VudCB1bmlxdWUgeC1heGlzIGxhYmVsc1xyXG4gICAgY29uc3QgdW5pcXVlTGFiZWxzID0gbmV3IFNldCgpO1xyXG4gICAgdGV4dE5vZGVzLmVhY2goZnVuY3Rpb24oZCkge1xyXG4gICAgICB1bmlxdWVMYWJlbHMuYWRkKGQpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBsYWJlbENvdW50ID0gdW5pcXVlTGFiZWxzLnNpemU7XHJcbiAgICBpZiAoaGFzRGF0ZVZhbHVlcyAmJiBsYWJlbENvdW50IDwgMykge1xyXG4gICAgICAvLyBGb3IgMyBvciBmZXdlciBsYWJlbHMsIGtlZXAgaG9yaXpvbnRhbCBkaXNwbGF5XHJcbiAgICAgIHRleHROb2Rlc1xyXG4gICAgICAgIC5zdHlsZSgnd3JpdGluZy1tb2RlJywgJ2hvcml6b250YWwtdGInKSAgLy8gRXhwbGljaXRseSBzZXQgaG9yaXpvbnRhbFxyXG4gICAgICAgIC5jbGFzc2VkKCdtb2JpbGUteGF4aXMtb3ZlcnJpZGUnLCBmYWxzZSkgLy8gUmVtb3ZlIHZlcnRpY2FsIGNsYXNzXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoMCknKSAgICAgICAgICAvLyBSZW1vdmUgYW55IHJvdGF0aW9uXHJcbiAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpICAgICAgICAgICAvLyBDZW50ZXIgYWxpZ25cclxuICAgICAgICAuYXR0cigneScsIDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHVzaCBkb3duIGEgYml0XHJcbiAgICAgICAgLmF0dHIoJ2R4JywgJzAnKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IGFueSB4IG9mZnNldFxyXG4gICAgICAgIC5hdHRyKCdkeScsICcwJyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCBhbnkgeSBvZmZzZXRcclxuICAgIH0gZWxzZSBpZiAobGFiZWxDb3VudCA+PSAzKSB7XHJcbiAgICAgIC8vIEZvciBtb3JlIHRoYW4gMyBsYWJlbHMsIHVzZSB2ZXJ0aWNhbCBhbGlnbm1lbnRcclxuICAgICAgdGV4dE5vZGVzXHJcbiAgICAgICAgLnN0eWxlKCd3cml0aW5nLW1vZGUnLCAnc2lkZXdheXMtbHInKSAgIC8vIFZlcnRpY2FsIHRleHRcclxuICAgICAgICAuY2xhc3NlZCgnbW9iaWxlLXhheGlzLW92ZXJyaWRlJywgdHJ1ZSkgLy8gQWRkIHZlcnRpY2FsIGNsYXNzXHJcbiAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpICAgICAgICAgIC8vIENlbnRlciBhbGlnblxyXG4gICAgICAgIC5hdHRyKCd5JywgMzApICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdmVydGljYWwgcG9zaXRpb25cclxuICAgICAgICAuYXR0cigneCcsIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgeCBwb3NpdGlvblxyXG4gICAgfSBlbHNlIGlmICghdGhpcy5pc0hlYWRlclZpc2libGUpIHtcclxuICAgICAgLy8gRGVmYXVsdCBtb2JpbGUgYmVoYXZpb3IgZm9yIG5vbi1kYXRlIG9yIG11bHRpLWdyb3VwXHJcbiAgICAgIHRleHROb2Rlcy5jbGFzc2VkKCdtb2JpbGUteGF4aXMtb3ZlcnJpZGUnLCB0cnVlKTtcclxuICAgIH0gIFxyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBhcHBseVhMYWJlbHNPblNhbWVMaW5lKHN2Zywgc3ViZ3JvdXBzLCBkYXRhLCBtZXRhRGF0YSwgc2VsZiwgXHJcbiAgc2hvcnRUaWNrTGVuZ3RoQmcsIGlzTW9iaWxlLCBpc3JpYSkge1xyXG4gIFxyXG4gIGNvbnN0IHhBeGlzTGFiZWxzID0gc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgLnN0eWxlKCdmb250LXNpemUnLCB0aGlzLmlzSGVhZGVyVmlzaWJsZSA/ICcxOHB4JyA6ICcxNHB4JylcclxuICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgLmF0dHIoJ3knLCAoZCkgPT4gdGhpcy5jYWxjdWxhdGVYTGFiZWxZUG9zaXRpb24oZCwgc3ViZ3JvdXBzLCBkYXRhLCBtZXRhRGF0YSwgc2VsZiwgc2hvcnRUaWNrTGVuZ3RoQmcpKVxyXG4gICAgLmF0dHIoJ3gnLCAoZCkgPT4gKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCAmJiAhc2VsZi5pc1pvb21lZE91dCkgPyAxIDogMClcclxuICAgIC50ZXh0KChkKSA9PiB0aGlzLmZvcm1hdFhMYWJlbFRleHQoZCwgZGF0YSwgbWV0YURhdGEsIHN1Ymdyb3Vwcywgc2VsZiwgaXNNb2JpbGUpKTtcclxuXHJcbiAgLy8gQXBwbHkgd3JpdGluZy1tb2RlIGZvciBncm91cGVkIGNoYXJ0cyB3aXRoIGRhdGUgbGFiZWxzIGluIHpvb21lZC1vdXQgdmlld1xyXG4gIHhBeGlzTGFiZWxzLmVhY2goZnVuY3Rpb24odGhpczogU1ZHVGV4dEVsZW1lbnQsIGQ6IGFueSkge1xyXG4gICAgY29uc3QgaXNEYXRlTGFiZWwgPSAvXihcXGR7Miw0fVstXFwvXSk/XFxkezIsNH1bLVxcL11cXGR7Miw0fSQvLnRlc3QoZC50cmltKCkpO1xyXG4gICAgY29uc3QgaXNXZWVrTGFiZWwgPSAvd2Vla3x3a3x3XFxkKy9pLnRlc3QoZCk7XHJcbiAgICBcclxuICAgIGlmIChzdWJncm91cHMubGVuZ3RoID4gMSAmJiBzZWxmLmlzWm9vbWVkT3V0ICYmIGRhdGEubGVuZ3RoID4gOCAmJiBpc0RhdGVMYWJlbCAmJiAhaXNXZWVrTGFiZWwpIHtcclxuICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCd3cml0aW5nLW1vZGUnLCAnc2lkZXdheXMtbHInKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy8gQWRkIHNlY29uZCBsaW5lIGZvciBub24tZGF0ZSBsYWJlbHMgb24gZGVza3RvcFxyXG4gIGlmICghaXNNb2JpbGUpIHtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgLmZpbHRlcigoZCkgPT4gIS9cXGR7Miw0fVstXFwvXS8udGVzdChkKSlcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgIC5hdHRyKCd5JywgMzApXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLmF0dHIoJ3gnLCAoZCkgPT4gKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCAmJiAhc2VsZi5pc1pvb21lZE91dCkgPyAxIDogMClcclxuICAgICAgLnRleHQoKGQpID0+IHtcclxuICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJyksIGQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVYTGFiZWxZUG9zaXRpb24oZCwgc3ViZ3JvdXBzLCBkYXRhLCBtZXRhRGF0YSwgc2VsZiwgc2hvcnRUaWNrTGVuZ3RoQmcpIHtcclxuICAvLyBGb3IgZ3JvdXBlZCBiYXIgY2hhcnRzIHdpdGggbWFueSBiYXJzIGFuZCB4TGFiZWwgcHJlc2VudFxyXG4gIGlmIChzdWJncm91cHMubGVuZ3RoID4gMSAmJiBkYXRhLmxlbmd0aCA+IDggJiYgbWV0YURhdGEueExhYmVsKSB7XHJcbiAgICBjb25zdCBpc0RhdGVMYWJlbCA9IC9cXGR7Miw0fVstXFwvXS8udGVzdChkKTtcclxuICAgIHJldHVybiBpc0RhdGVMYWJlbCA/IHNob3J0VGlja0xlbmd0aEJnICsgMTQgOiBzaG9ydFRpY2tMZW5ndGhCZztcclxuICB9XHJcblxyXG4gIC8vIEZvciBncm91cGVkIGJhciBjaGFydHMgd2l0aCBtYW55IGJhcnMgYW5kIE5PIHhMYWJlbFxyXG4gIGlmIChzdWJncm91cHMubGVuZ3RoID4gMSAmJiBkYXRhLmxlbmd0aCA+IDggJiYgIW1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgY29uc3QgY2hhcnRIYXNFeHRyYUJvdHRvbSA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbiAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4uYm90dG9tID49IDQwO1xyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICByZXR1cm4gc2hvcnRUaWNrTGVuZ3RoQmcgKyAyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoYXJ0SGFzRXh0cmFCb3R0b20gPyBzaG9ydFRpY2tMZW5ndGhCZyA6IHNob3J0VGlja0xlbmd0aEJnICsgMTA7XHJcbiAgfVxyXG5cclxuICAvLyBEZWZhdWx0L2ZhbGxiYWNrIGxvZ2ljXHJcbiAgbGV0IGJhc2VZID0gc2VsZi5pc0hlYWRlclZpc2libGUgPyBzaG9ydFRpY2tMZW5ndGhCZyArIDI1IDogc2hvcnRUaWNrTGVuZ3RoQmc7XHJcbiAgXHJcbiAgaWYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmICFtZXRhRGF0YS54TGFiZWwgJiYgXHJcbiAgICAgICgvXFxkezIsNH1bLVxcL11cXGR7Mn1bLVxcL11cXGR7Miw0fS8udGVzdChkKSB8fCAvXFxkezIsNH1bLVxcL11cXGR7Miw0fS8udGVzdChkKSkpIHtcclxuICAgIGJhc2VZID0gc2VsZi5pc0hlYWRlclZpc2libGUgPyBzaG9ydFRpY2tMZW5ndGhCZyArIDE1IDogc2hvcnRUaWNrTGVuZ3RoQmcgKyAyNTtcclxuICB9XHJcblxyXG4gIGlmICgvXFxkezIsNH1bLVxcL11cXGR7Miw0fS8udGVzdChkKSAmJiBkLmluZGV4T2YoJyAnKSA+IC0xKSB7XHJcbiAgICBiYXNlWSArPSA0O1xyXG4gIH1cclxuXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbiAmJiBzdWJncm91cHMubGVuZ3RoID4gMSkge1xyXG4gICAgYmFzZVkgPSBNYXRoLm1heChzaG9ydFRpY2tMZW5ndGhCZywgYmFzZVkgLSAxMCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYmFzZVk7XHJcbn1cclxuXHJcbnByaXZhdGUgZm9ybWF0WExhYmVsVGV4dChkLCBkYXRhLCBtZXRhRGF0YSwgc3ViZ3JvdXBzLCBzZWxmLCBpc01vYmlsZSkge1xyXG4gIC8vIENoZWNrIGlmIHdlJ3JlIG9uIG1vYmlsZSBvciB0YWJsZXRcclxuICBjb25zdCBpc1NtYWxsU2NyZWVuID0gd2luZG93LmlubmVyV2lkdGggPCA5OTI7IC8vIExlc3MgdGhhbiA5OTJweCAobW9iaWxlIG9yIHRhYmxldClcclxuICBcclxuICAvLyBIZWxwZXIgdG8gZXh0cmFjdCBhbmQgZm9ybWF0IHdlZWsgbnVtYmVyXHJcbiAgY29uc3QgZXh0cmFjdFdlZWtOdW1iZXIgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgICBjb25zdCBtYXRjaCA9IHRleHQubWF0Y2goLyg/OndlZWt8d2t8dylcXHMqKFxcZCspL2kpO1xyXG4gICAgcmV0dXJuIG1hdGNoID8gYFcke21hdGNoWzFdfWAgOiBudWxsO1xyXG4gIH07XHJcblxyXG4gIC8vIEhlbHBlciB0byBleHRyYWN0IGRhdGUgcGFydFxyXG4gIGNvbnN0IGV4dHJhY3REYXRlID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gICAgY29uc3QgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9cXGR7Mn1bLVxcL11cXGR7Mn1bLVxcL11cXGR7Miw0fS8pO1xyXG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiBudWxsO1xyXG4gIH07XHJcblxyXG4gIC8vIENoZWNrIGlmIGxhYmVsIGNvbnRhaW5zIGJvdGggZGF0ZSBhbmQgd2VlayBpbmZvcm1hdGlvblxyXG4gIGNvbnN0IGhhc0RhdGVBbmRUaW1lID0gKHRleHQ6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgZGF0ZU1hdGNoID0gL1xcZHsyLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fS8udGVzdCh0ZXh0KTtcclxuICAgIGNvbnN0IHdlZWtNYXRjaCA9IC8oPzp3ZWVrfHdrfHcpXFxzKlxcZCsvaS50ZXN0KHRleHQpO1xyXG4gICAgcmV0dXJuIHsgaXNEYXRlOiBkYXRlTWF0Y2gsIGlzV2Vlazogd2Vla01hdGNoIH07XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgbGFiZWxJbmZvID0gaGFzRGF0ZUFuZFRpbWUoZCk7XHJcblxyXG4gIC8vIE1vYmlsZSBoYW5kbGluZzogZm9ybWF0IGRhdGUgYW5kIHdlZWsgcGFydHNcclxuICBpZiAoaXNNb2JpbGUpIHtcclxuICAgIC8vIElmIGhlYWRlciBpcyBoaWRkZW4gKGNvbXBhY3QgbW9iaWxlKVxyXG4gICAgaWYgKCFzZWxmLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICAvLyBJZiBpdCBoYXMgYm90aCBkYXRlIGFuZCB3ZWVrLCBmb3JtYXQgYXBwcm9wcmlhdGVseVxyXG4gICAgICBpZiAobGFiZWxJbmZvLmlzRGF0ZSAmJiBsYWJlbEluZm8uaXNXZWVrKSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZVBhcnQgPSBleHRyYWN0RGF0ZShkKTtcclxuICAgICAgICBjb25zdCB3ZWVrUGFydCA9IGV4dHJhY3RXZWVrTnVtYmVyKGQpO1xyXG4gICAgICAgIGlmIChkYXRlUGFydCAmJiB3ZWVrUGFydCkge1xyXG4gICAgICAgICAgcmV0dXJuIGAke2RhdGVQYXJ0fVxcbiR7d2Vla1BhcnR9YDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgaXQncyBqdXN0IGEgZGF0ZSwgcmV0dXJuIGl0IHVuY2hhbmdlZFxyXG4gICAgICBpZiAobGFiZWxJbmZvLmlzRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBleHRyYWN0RGF0ZShkKSB8fCBkO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIElmIGl0IGhhcyBqdXN0IHdlZWsgbnVtYmVyLCBmb3JtYXQgaXQgYXMgVyMjXHJcbiAgICAgIGlmIChsYWJlbEluZm8uaXNXZWVrKSB7XHJcbiAgICAgICAgY29uc3Qgd2Vla1BhcnQgPSBleHRyYWN0V2Vla051bWJlcihkKTtcclxuICAgICAgICBpZiAod2Vla1BhcnQpIHtcclxuICAgICAgICAgIHJldHVybiB3ZWVrUGFydDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gRm9yIG5vbi1kYXRlIGxhYmVscywgdHJpbSBhcyBiZWZvcmVcclxuICAgICAgY29uc3QgZmlyc3RQYXJ0ID0gZC5zcGxpdCgvW1xcc1xcLV0rLylbMF07XHJcbiAgICAgIHJldHVybiBmaXJzdFBhcnQuc3Vic3RyaW5nKDAsIDMpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpZiB2YWx1ZSBzaG91bGQgYmUgaWdub3JlZFxyXG4gIGNvbnN0IGlzVmFsdWVUb0JlSWdub3JlZCA9IGRhdGEuc29tZSgoaW5kaXY6IGFueSkgPT4gXHJcbiAgICBpbmRpdi5uYW1lICYmIGluZGl2Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZC50cmltKCkudG9Mb3dlckNhc2UoKSAmJiBcclxuICAgIGluZGl2W21ldGFEYXRhLmtleUxpc3RbMF1dID09PSAtMVxyXG4gICk7XHJcblxyXG4gIGlmIChpc1ZhbHVlVG9CZUlnbm9yZWQpIHtcclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBkYXRlIHJhbmdlIGxhYmVsc1xyXG4gIGNvbnN0IGRhdGVSYW5nZVJlZ2V4ID0gLyhcXGR7Miw0fVstXFwvXVxcZHsyfVstXFwvXVxcZHsyLDR9KVxccyotXFxzKihcXGR7Miw0fVstXFwvXVxcZHsyfVstXFwvXVxcZHsyLDR9KS87XHJcbiAgaWYgKGRhdGVSYW5nZVJlZ2V4LnRlc3QoZC50cmltKCkpKSB7XHJcbiAgICByZXR1cm4gZC50cmltKCkucmVwbGFjZShkYXRlUmFuZ2VSZWdleCwgKG0sIGQxLCBkMikgPT4gYCR7ZDF9IC0gJHtkMn1gKTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBzcGxpdHRpbmcgb2YgbXVsdGktcGFydCBsYWJlbHNcclxuICBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgIXNlbGYuaXNab29tZWRPdXQgJiYgZGF0YS5sZW5ndGggPiA4ICYmIFxyXG4gICAgICBkLmluZGV4T2YoJyAnKSA+IC0xICYmIChsYWJlbEluZm8uaXNEYXRlIHx8IGxhYmVsSW5mby5pc1dlZWspKSB7XHJcbiAgICBjb25zdCBmaXJzdCA9IGQuc3Vic3RyaW5nKDAsIGQuaW5kZXhPZignICcpKTtcclxuICAgIGNvbnN0IHNlY29uZCA9IGQuc3Vic3RyaW5nKGQuaW5kZXhPZignICcpICsgMSkudHJpbSgpO1xyXG4gICAgcmV0dXJuIGAke2ZpcnN0fVxcbiR7c2Vjb25kfWA7XHJcbiAgfVxyXG5cclxuICAvLyBIYW5kbGUgZGF0ZSBsYWJlbHMgaW4gbWluaW1pemVkIHZpZXdcclxuICBpZiAobGFiZWxJbmZvLmlzRGF0ZSkge1xyXG4gICAgaWYgKCFzZWxmLmlzSGVhZGVyVmlzaWJsZSAmJiBkLmluZGV4T2YoJyAnKSA+IC0xKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0ID0gZC5zdWJzdHJpbmcoMCwgZC5pbmRleE9mKCcgJykpO1xyXG4gICAgICBjb25zdCBzZWNvbmQgPSBkLnN1YnN0cmluZyhkLmluZGV4T2YoJyAnKSArIDEpLnRyaW0oKTtcclxuICAgICAgcmV0dXJuIGAke2ZpcnN0fVxcbiR7c2Vjb25kfWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZDtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBsYWJlbHMgd2l0aCBzcGFjZXNcclxuICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoMCwgZC5pbmRleE9mKCcgJykpLnRvTG93ZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZC50b0xvd2VyQ2FzZSgpO1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZU1heFZhbHVlKGRhdGEsIGtleUxpc3QpIHtcclxuICBsZXQgbWF4VmFsdWUgPSBkMy5tYXgoZGF0YSwgKGQpID0+IGQzLm1heChrZXlMaXN0LCAoa2V5KSA9PiArZFtrZXldKSk7XHJcbiAgXHJcbiAgaWYgKG1heFZhbHVlID09PSAwKSB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHtcclxuICAgICAgbWF4VmFsdWUgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1heFZhbHVlID0gMTAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1heFZhbHVlO1xyXG59XHJcblxyXG5wcml2YXRlIHNldHVwTGluZVlTY2FsZShsaW5lRGF0YSwgaGVpZ2h0LCBzZWxmKSB7XHJcbiAgbGV0IG1heExpbmVWYWx1ZSA9IGQzLm1heChsaW5lRGF0YSwgKGQpID0+ICtkLnZhbHVlKTtcclxuICBtYXhMaW5lVmFsdWUgPSBtYXhMaW5lVmFsdWUgKiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGU7XHJcblxyXG4gIGxldCBtaW5MaW5lVmFsdWUgPSBkMy5taW4obGluZURhdGEsIChkKSA9PiArZC52YWx1ZSk7XHJcbiAgaWYgKG1heExpbmVWYWx1ZSA+IDApIG1pbkxpbmVWYWx1ZSA9IG1pbkxpbmVWYWx1ZSAtIDM7XHJcbiAgaWYgKG1pbkxpbmVWYWx1ZSA+IDApIG1pbkxpbmVWYWx1ZSA9IDA7XHJcblxyXG4gIGNvbnN0IGxpbmVZc2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAuZG9tYWluKFttaW5MaW5lVmFsdWUsIG1heExpbmVWYWx1ZV0pXHJcbiAgICAucmFuZ2UoW2hlaWdodCwgbWluTGluZVZhbHVlXSk7XHJcblxyXG4gIGNvbnN0IHlMaW5lQXhpcyA9IGQzLmF4aXNSaWdodChsaW5lWXNjYWxlKVxyXG4gICAgLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgLnRpY2tTaXplKDApXHJcbiAgICAudGlja0Zvcm1hdChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55TGluZUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuXHJcbiAgcmV0dXJuIHsgbGluZVlzY2FsZSwgeUxpbmVBeGlzIH07XHJcbn1cclxuXHJcbnByaXZhdGUgcmVuZGVyR3JpZExpbmVzKHN2ZywgeCwgeSwgaGVpZ2h0LCB3aWR0aCwgc2VsZiwgaXNyaWEpIHtcclxuICAvLyBYLWF4aXMgZ3JpZCBiZXR3ZWVuIGxhYmVsc1xyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hncmlkQmV0d2VlbkxhYmVscykge1xyXG4gICAgc3ZnLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHt4LmJhbmR3aWR0aCgpIC8gMn0sJHtoZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoLWhlaWdodCkudGlja0Zvcm1hdCgnJykpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IsICM5OTk5OTkpJylcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8gWS1heGlzIGdyaWRcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNHcmlkKSB7XHJcbiAgICBzdmcuYXBwZW5kKCdnJylcclxuICAgICAgLmNhbGwoZDMuYXhpc0xlZnQoeSkudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpLnRpY2tTaXplKC13aWR0aCkpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciwgI0I5QjlCOSknKVxyXG4gICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMC41JylcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1kb21haW4tY29sb3IsICMwMDAwMDApJykpO1xyXG4gIH0gaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQgJiYgIWlzcmlhKSB7XHJcbiAgICBzdmcuYXBwZW5kKCdnJylcclxuICAgICAgLmNhbGwoZDMuYXhpc0xlZnQoeSkudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICNCOUI5QjkpJylcclxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNScpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtZG9tYWluLWNvbG9yLCAjMDAwMDAwKScpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4JykpO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBzZXR1cFhTdWJncm91cFNjYWxlKHN1Ymdyb3VwcywgeCwgc2VsZikge1xyXG4gIGNvbnN0IHhTdWJncm91cCA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihzdWJncm91cHMpO1xyXG5cclxuICBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIHhTdWJncm91cC5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gIH0gZWxzZSBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA9PT0gMSAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgeFN1Ymdyb3VwLnJhbmdlKFswLCAxMDBdKTtcclxuICB9IGVsc2UgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09PSB1bmRlZmluZWQpIHtcclxuICAgIHhTdWJncm91cC5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB4U3ViZ3JvdXAucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB4U3ViZ3JvdXA7XHJcbn1cclxuXHJcbnByaXZhdGUgcmVuZGVyQmFycyhzdmcsIGRhdGEsIHN1Ymdyb3VwcywgeCwgeFN1Ymdyb3VwLCB5LCBoZWlnaHQsIGNvbG9yLCBcclxuICBtZXRhRGF0YSwgc2VsZiwgbGVmdEFuZFJpZ2h0U3BhY2VzLCB0ZW1wU2NhbGUsIGlzcmlhKSB7XHJcbiAgXHJcbiAgY29uc3Qgc3RhdGUgPSBzdmcuYXBwZW5kKCdnJylcclxuICAgIC5zZWxlY3RBbGwoJy5zdGF0ZScpXHJcbiAgICAuZGF0YShkYXRhKVxyXG4gICAgLmVudGVyKClcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkKSA9PiBgdHJhbnNsYXRlKCR7eChkLm5hbWUpfSwwKWApO1xyXG5cclxuICBjb25zdCBiYXJzID0gc3RhdGUuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgIC5kYXRhKChkKSA9PiB0aGlzLnByZXBhcmVCYXJEYXRhKGQsIHN1Ymdyb3VwcykpXHJcbiAgICAuZW50ZXIoKVxyXG4gICAgLmFwcGVuZCgncmVjdCcpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnYmFycycpXHJcbiAgICAub24oJ2NsaWNrJywgKGQpID0+IHRoaXMuaGFuZGxlQmFyQ2xpY2soZCwgbWV0YURhdGEsIHNlbGYpKVxyXG4gICAgLmF0dHIoJ3gnLCAoZCkgPT4gdGhpcy5jYWxjdWxhdGVCYXJYKGQsIGRhdGEsIHgsIHhTdWJncm91cCwgc2VsZiwgdGVtcFNjYWxlKSlcclxuICAgIC5hdHRyKCd5JywgKGQpID0+IHRoaXMuY2FsY3VsYXRlQmFyWShkLCB5LCBoZWlnaHQsIHNlbGYpKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgKGQpID0+IHRoaXMuY2FsY3VsYXRlQmFyV2lkdGgoZCwgZGF0YSwgc3ViZ3JvdXBzLCB4LCB4U3ViZ3JvdXAsIHNlbGYsIHRlbXBTY2FsZSkpXHJcbiAgICAuYXR0cignaGVpZ2h0JywgKGQpID0+IHRoaXMuY2FsY3VsYXRlQmFySGVpZ2h0KGQsIHksIGhlaWdodCwgc2VsZikpXHJcbiAgICAuc3R5bGUoJ2N1cnNvcicsICgpID0+IChtZXRhRGF0YS5oYXNEcmlsbERvd24gJiYgIWlzcmlhKSA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JylcclxuICAgIC5hdHRyKCdmaWxsJywgKGQpID0+IHRoaXMuZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEsIHNlbGYpKTtcclxuXHJcbiAgLy8gQXR0YWNoIG1vdXNlIGV2ZW50cyBpZiBub3QgUklBXHJcbiAgaWYgKCFpc3JpYSAmJiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3AgfHwgXHJcbiAgICAgICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyID09PSB1bmRlZmluZWQgJiYgXHJcbiAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCA9PT0gdW5kZWZpbmVkKSkpIHtcclxuICAgIGJhcnMub24oJ21vdXNlb3V0JywgKGQsIGkpID0+IHRoaXMuaGFuZGxlTW91c2VPdXQoc3ZnKSlcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIChkLCBpKSA9PiB0aGlzLmhhbmRsZU1vdXNlT3ZlcihkLCBzdmcsIGRhdGEsIHgsIHksIGhlaWdodCwgbWV0YURhdGEsIHNlbGYsIGxlZnRBbmRSaWdodFNwYWNlcywgdGVtcFNjYWxlKSk7XHJcbiAgfVxyXG59XHJcblxyXG5wcml2YXRlIHByZXBhcmVCYXJEYXRhKGQsIHN1Ymdyb3Vwcykge1xyXG4gIGNvbnN0IG5ld0xpc3Q6IGFueSA9IFtdO1xyXG4gIHN1Ymdyb3Vwcy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgIG5ld0xpc3QucHVzaCh7IGtleToga2V5LCB2YWx1ZTogZFtrZXldLCBuYW1lOiBkLm5hbWUgfSk7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIG5ld0xpc3Q7XHJcbn1cclxuXHJcbnByaXZhdGUgaGFuZGxlQmFyQ2xpY2soZCwgbWV0YURhdGEsIHNlbGYpIHtcclxuICBpZiAoZC5rZXkgIT09ICdUYXJnZXQnKSB7XHJcbiAgICBpZiAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fCAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmxlbmd0aCB8fFxyXG4gICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmIFxyXG4gICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/LmtleSkpKSB7XHJcbiAgICAgIHNlbGYuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZUJhclgoZCwgZGF0YSwgeCwgeFN1Ymdyb3VwLCBzZWxmLCB0ZW1wU2NhbGUpIHtcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlRHJpbGxkb3duQmFyWChkLCBkYXRhLCB4LCBzZWxmLCB0ZW1wU2NhbGUpO1xyXG4gIH1cclxuICByZXR1cm4geFN1Ymdyb3VwKGQua2V5KTtcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVEcmlsbGRvd25CYXJYKGQsIGRhdGEsIHgsIHNlbGYsIHRlbXBTY2FsZSkge1xyXG4gIGRhdGEuZm9yRWFjaCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICBcclxuICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICBjb25zdCByZWR1Y2VkQmFyV2lkdGggPSBzZWxmLmlzWm9vbWVkT3V0ID8gNjAgOiAzMDtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSAoeC5iYW5kd2lkdGgoKSAtIHJlZHVjZWRCYXJXaWR0aCkgLyAyO1xyXG4gICAgICAgIHRlbXBTY2FsZS5yYW5nZShbb2Zmc2V0LCB4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0XSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuICByZXR1cm4gdGVtcFNjYWxlKGQua2V5KTtcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVCYXJZKGQsIHksIGhlaWdodCwgc2VsZikge1xyXG4gIGlmIChkLnZhbHVlID09PSAtMSkge1xyXG4gICAgcmV0dXJuIHkoMCk7XHJcbiAgfVxyXG5cclxuICBpZiAoZC52YWx1ZSA+PSAwKSB7XHJcbiAgICBjb25zdCBiYXJIZWlnaHQgPSBoZWlnaHQgLSB5KGQudmFsdWUpO1xyXG4gICAgY29uc3QgbWluSGVpZ2h0ID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGVmYXVsdEJhckhlaWdodCB8fCAyO1xyXG4gICAgcmV0dXJuIGJhckhlaWdodCA8IG1pbkhlaWdodCA/IHkoMCkgLSBtaW5IZWlnaHQgOiB5KGQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHkoMCk7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlQmFyV2lkdGgoZCwgZGF0YSwgc3ViZ3JvdXBzLCB4LCB4U3ViZ3JvdXAsIHNlbGYsIHRlbXBTY2FsZSkge1xyXG4gIC8vIERldmljZSBkZXRlY3Rpb24gZm9yIHJlc3BvbnNpdmUgc2l6aW5nXHJcbiAgY29uc3QgaXNNb2JpbGUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDU3NjtcclxuICBjb25zdCBpc1RhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDU3NiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDk5MjtcclxuXHJcbiAgLy8gRm9yIGdyb3VwZWQgYmFyIGNoYXJ0cyBpbiB6b29tLWluIHZpZXdcclxuICBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgIXNlbGYuaXNab29tZWRPdXQpIHtcclxuICAgIHJldHVybiBpc01vYmlsZSA/IDIyIDogaXNUYWJsZXQgPyAzNiA6IDUwO1xyXG4gIH1cclxuXHJcbiAgLy8gRm9yIHNpbmdsZS1iYXIgY2hhcnRzIGluIHpvb20taW4gdmlld1xyXG4gIGlmIChzdWJncm91cHMubGVuZ3RoID09PSAxICYmICFzZWxmLmlzWm9vbWVkT3V0KSB7XHJcbiAgICByZXR1cm4gaXNNb2JpbGUgPyA2MCA6IDgwO1xyXG4gIH1cclxuXHJcbiAgLy8gTWluaW11bSBiYXIgd2lkdGhzIGZvciB6b29tZWQtb3V0IHN0YXRlXHJcbiAgY29uc3QgbWluQmFyV2lkdGggPSAoKCkgPT4ge1xyXG4gICAgaWYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIHJldHVybiBpc01vYmlsZSA/IDE4IDogaXNUYWJsZXQgPyAyNCA6IDMwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzTW9iaWxlID8gMTIgOiBpc1RhYmxldCA/IDE2IDogMjA7XHJcbiAgfSkoKTtcclxuXHJcbiAgLy8gRGVmYXVsdCBsb2dpYyBmb3IgZHJpbGxkb3duIGNoYXJ0c1xyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICBsZXQgY2FsY3VsYXRlZFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKFtdKS5yYW5nZShbMCwgMF0pO1xyXG4gICAgXHJcbiAgICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuICAgICAgICBjYWxjdWxhdGVkU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgY29uc3QgcmVkdWNlZEJhcldpZHRoID0gc2VsZi5pc1pvb21lZE91dCA/IDYwIDogMTAwO1xyXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHguYmFuZHdpZHRoKCkgLSByZWR1Y2VkQmFyV2lkdGgpIC8gMjtcclxuICAgICAgICAgIGNhbGN1bGF0ZWRTY2FsZS5yYW5nZShbb2Zmc2V0LCB4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgLy8gRW5zdXJlIG1pbmltdW0gd2lkdGggZXZlbiBpbiBkcmlsbGRvd24gbW9kZVxyXG4gICAgcmV0dXJuIE1hdGgubWF4KGNhbGN1bGF0ZWRTY2FsZS5iYW5kd2lkdGgoKSwgbWluQmFyV2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gRm9yIHJlZ3VsYXIgY2hhcnRzLCBlbnN1cmUgbWluaW11bSB3aWR0aFxyXG4gIHJldHVybiBNYXRoLm1heCh4U3ViZ3JvdXAuYmFuZHdpZHRoKCksIG1pbkJhcldpZHRoKTtcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVCYXJIZWlnaHQoZCwgeSwgaGVpZ2h0LCBzZWxmKSB7XHJcbiAgaWYgKGQudmFsdWUgPT09IC0xKSB7XHJcbiAgICByZXR1cm4gaGVpZ2h0IC0geSgwKTtcclxuICB9XHJcblxyXG4gIGlmIChkLnZhbHVlID49IDApIHtcclxuICAgIGNvbnN0IGJhckhlaWdodCA9IGhlaWdodCAtIHkoZC52YWx1ZSk7XHJcbiAgICBjb25zdCBtaW5IZWlnaHQgPSBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5kZWZhdWx0QmFySGVpZ2h0IHx8IDI7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoYmFySGVpZ2h0LCBtaW5IZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbn1cclxuXHJcbnByaXZhdGUgZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEsIHNlbGYpIHtcclxuICBpZiAoZC52YWx1ZSAmJiBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJiBcclxuICAgICAgZC52YWx1ZSA+PSBwYXJzZUZsb2F0KHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkgJiYgXHJcbiAgICAgIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgIFxyXG4gICAgY29uc3Qga2V5ID0gZC5rZXkudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IGNvbG9yQWJvdmVUYXJnZXQgPSBPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0KVxyXG4gICAgICAuZmluZChrID0+IGsudG9Mb3dlckNhc2UoKSA9PT0ga2V5KTtcclxuICAgIFxyXG4gICAgaWYgKGNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRbY29sb3JBYm92ZVRhcmdldF07XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG59XHJcblxyXG5wcml2YXRlIHJlbmRlckJhckxhYmVscyhzdmcsIGRhdGEsIHN1Ymdyb3VwcywgeCwgeFN1Ymdyb3VwLCB5LCBoZWlnaHQsIFxyXG4gIG1ldGFEYXRhLCBzZWxmLCB0ZW1wU2NhbGUsIGlzcmlhKSB7XHJcbiAgXHJcbiAgY29uc3Qgc3RhdGUgPSBzdmcuc2VsZWN0QWxsKCcuc3RhdGUnKTtcclxuICBcclxuICBjb25zdCBsYWJlbHMgPSBzdGF0ZS5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgLmRhdGEoKGQpID0+IHRoaXMucHJlcGFyZUJhckRhdGEoZCwgc3ViZ3JvdXBzKSlcclxuICAgIC5lbnRlcigpXHJcbiAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5hdHRyKCd4JywgMClcclxuICAgIC5hdHRyKCd5JywgMClcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGF0YS1sYWJlbHMtd2Vla2x5Y2hhcnRzJylcclxuICAgIC50ZXh0KChkKSA9PiB0aGlzLmZvcm1hdEJhckxhYmVsKGQpKVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJyMwMDAnKVxyXG4gICAgLnN0eWxlKCdmb250LXdlaWdodCcsICdib2xkJylcclxuICAgIC5zdHlsZSgnZm9udC1zaXplJywgKGQpID0+IHRoaXMuY2FsY3VsYXRlTGFiZWxGb250U2l6ZShzZWxmKSlcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4gdGhpcy5jYWxjdWxhdGVMYWJlbFRyYW5zZm9ybShkLCBkYXRhLCB4LCB4U3ViZ3JvdXAsIHksIHNlbGYsIHRlbXBTY2FsZSkpXHJcbiAgICAub24oJ2NsaWNrJywgKGQpID0+IHRoaXMuaGFuZGxlQmFyQ2xpY2soZCwgbWV0YURhdGEsIHNlbGYpKTtcclxuXHJcbiAgaWYgKCFpc3JpYSkge1xyXG4gICAgbGFiZWxzLm9uKCdtb3VzZW91dCcsICgpID0+IHRoaXMuaGFuZGxlTW91c2VPdXQoc3ZnKSlcclxuICAgICAgICAgIC5vbignbW91c2VvdmVyJywgKGQpID0+IHRoaXMuaGFuZGxlTW91c2VPdmVyKGQsIHN2ZywgZGF0YSwgeCwgeSwgaGVpZ2h0LCBtZXRhRGF0YSwgc2VsZiwgNTAsIHRlbXBTY2FsZSkpO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBmb3JtYXRCYXJMYWJlbChkKSB7XHJcbiAgaWYgKCFkLmtleSB8fCAhZC52YWx1ZSkgcmV0dXJuICcnO1xyXG4gIHJldHVybiBkLmtleS5sZW5ndGggPiAyMCA/IGQua2V5LnN1YnN0cmluZygwLCAxNykgKyAnLi4uJyA6IGQua2V5O1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZUxhYmVsRm9udFNpemUoc2VsZikge1xyXG4gIGlmIChzZWxmLmlzWm9vbWVkT3V0KSByZXR1cm4gJzlweCc7XHJcblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxOTAwKSByZXR1cm4gJzE4cHgnO1xyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMCkgcmV0dXJuICcxMHB4JztcclxuICAgIHJldHVybiAnMTRweCc7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gJzE0cHgnO1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZUxhYmVsVHJhbnNmb3JtKGQsIGRhdGEsIHgsIHhTdWJncm91cCwgeSwgc2VsZiwgdGVtcFNjYWxlKSB7XHJcbiAgbGV0IGNhbGN1bGF0ZWRTY2FsZTtcclxuICBcclxuICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICBjYWxjdWxhdGVkU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgXHJcbiAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBjb25zdCByZWR1Y2VkV2lkdGggPSBPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT09IDIgPyAyMDAgOiAzMDA7XHJcbiAgICAgICAgICBjb25zdCBvZmZzZXQgPSAoeC5iYW5kd2lkdGgoKSAtIHJlZHVjZWRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgY2FsY3VsYXRlZFNjYWxlLnJhbmdlKFtvZmZzZXQsIHguYmFuZHdpZHRoKCkgLSBvZmZzZXRdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMjtcclxuICAgICAgICAgIGNhbGN1bGF0ZWRTY2FsZS5yYW5nZShbb2Zmc2V0LCB4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0QWx3YXlzSG9yaXpvbnRhbCkge1xyXG4gICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4U3ViZ3JvdXAoZC5rZXkpfSwke3koZC52YWx1ZSkgLSAzfSlgO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFpc05hTihjYWxjdWxhdGVkU2NhbGUoZC5rZXkpKSkge1xyXG4gICAgcmV0dXJuIGB0cmFuc2xhdGUoJHtjYWxjdWxhdGVkU2NhbGUoZC5rZXkpICsgY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpICogMC41NX0sJHt5KDApIC0gMTB9KSByb3RhdGUoMjcwKWA7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gJ3RyYW5zbGF0ZSgwLDApJztcclxufVxyXG5cclxucHJpdmF0ZSBoYW5kbGVNb3VzZU92ZXIoZCwgc3ZnLCBkYXRhLCB4LCB5LCBoZWlnaHQsIG1ldGFEYXRhLCBzZWxmLCBsZWZ0QW5kUmlnaHRTcGFjZXMsIHRlbXBTY2FsZSkge1xyXG4gIHN2Zy5zZWxlY3RBbGwoJy5saWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpLnJlbW92ZSgpO1xyXG5cclxuICBsZXQgY2FsY3VsYXRlZFNjYWxlO1xyXG4gIGxldCBlbGVtZW50c0NvdW50ZXI7XHJcblxyXG4gIGRhdGEuZm9yRWFjaCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgIGVsZW1lbnRzQ291bnRlciA9IGtleXMubGVuZ3RoO1xyXG4gICAgICBjYWxjdWxhdGVkU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgXHJcbiAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBjb25zdCByZWR1Y2VkV2lkdGggPSBPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT09IDIgPyAyMDAgOiAzMDA7XHJcbiAgICAgICAgICBjb25zdCBvZmZzZXQgPSAoeC5iYW5kd2lkdGgoKSAtIHJlZHVjZWRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgY2FsY3VsYXRlZFNjYWxlLnJhbmdlKFtvZmZzZXQsIHguYmFuZHdpZHRoKCkgLSBvZmZzZXRdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMjtcclxuICAgICAgICAgIGNhbGN1bGF0ZWRTY2FsZS5yYW5nZShbb2Zmc2V0LCB4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHhQb3NpdGlvbiA9IHRoaXMuY2FsY3VsYXRlVG9vbHRpcFgoZCwgeCwgY2FsY3VsYXRlZFNjYWxlLCBtZXRhRGF0YSwgbGVmdEFuZFJpZ2h0U3BhY2VzKTtcclxuICBjb25zdCB3aWR0aCA9IHRoaXMuY2FsY3VsYXRlVG9vbHRpcFdpZHRoKGNhbGN1bGF0ZWRTY2FsZSwgbWV0YURhdGEsIGxlZnRBbmRSaWdodFNwYWNlcyk7XHJcblxyXG4gIHN2Zy5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgLmF0dHIoJ3gnLCB4UG9zaXRpb24pXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKVxyXG4gICAgLmF0dHIoJ3knLCB5KGQudmFsdWUpIC0gMyAtIDQwIC0gMTApXHJcbiAgICAuYXR0cignZHknLCBkLmNsYXNzKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgd2lkdGgpXHJcbiAgICAuYXR0cignaGVpZ2h0JywgNTApXHJcbiAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ3RpdGxlJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsIDk5KVxyXG4gICAgLmh0bWwoKCkgPT4gdGhpcy5nZW5lcmF0ZVRvb2x0aXBIVE1MKGQsIG1ldGFEYXRhKSk7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlVG9vbHRpcFgoZCwgeCwgY2FsY3VsYXRlZFNjYWxlLCBtZXRhRGF0YSwgbGVmdEFuZFJpZ2h0U3BhY2VzKSB7XHJcbiAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgaWYgKGNhbGN1bGF0ZWRTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgcmV0dXJuIHgoZC5uYW1lKSArIGNhbGN1bGF0ZWRTY2FsZShkLmtleSkgKyBjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgLyAyIC0gOTA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geChkLm5hbWUpICsgY2FsY3VsYXRlZFNjYWxlKGQua2V5KSAtIFxyXG4gICAgICAgICAgIChjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyKSAvIDIgKyBcclxuICAgICAgICAgICBjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgLyAyO1xyXG4gIH1cclxuICByZXR1cm4geChkLm5hbWUpICsgY2FsY3VsYXRlZFNjYWxlKGQua2V5KSAtIFxyXG4gICAgICAgICAoY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICsgXHJcbiAgICAgICAgIGNhbGN1bGF0ZWRTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlVG9vbHRpcFdpZHRoKGNhbGN1bGF0ZWRTY2FsZSwgbWV0YURhdGEsIGxlZnRBbmRSaWdodFNwYWNlcykge1xyXG4gIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgIGlmIChjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgIHJldHVybiAnMTgwcHgnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhbGN1bGF0ZWRTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDI7XHJcbiAgfVxyXG4gIHJldHVybiBjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG59XHJcblxyXG5wcml2YXRlIGdlbmVyYXRlVG9vbHRpcEhUTUwoZCwgbWV0YURhdGEpIHtcclxuICBjb25zdCBiYXJMYWJlbCA9IGQua2V5O1xyXG4gIGNvbnN0IGRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgfHwgJyc7XHJcbiAgY29uc3QgdmFsdWUgPSBkLnZhbHVlO1xyXG4gIFxyXG4gIGxldCBodG1sID0gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4ke2JhckxhYmVsfTwvc3Bhbj5gO1xyXG4gIGh0bWwgKz0gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLXZhbHVlXCI+PHNwYW4+JHt2YWx1ZX08L3NwYW4+JHtkYXRhVHlwZX08L3NwYW4+YDtcclxuICBcclxuICByZXR1cm4gaHRtbDtcclxufVxyXG5cclxucHJpdmF0ZSBoYW5kbGVNb3VzZU91dChzdmcpIHtcclxuICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxufVxyXG5cclxucHJpdmF0ZSByZW5kZXJZQXhpcyhzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgeSwgeUxpbmVBeGlzLCBsaW5lRGF0YSwgc2VsZiwgaXNyaWEsIG1hcmdpbikge1xyXG4gIC8vIEhpZGRlbiB5LWF4aXMgZm9yIHJlZmVyZW5jZVxyXG4gIHN2Zy5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0IHlheGlzLWRhc2hlZCcpXHJcbiAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgIC5jYWxsKHkpXHJcbiAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAvLyBMZWZ0IHktYXhpc1xyXG4gIHN2Z1lBeGlzTGVmdC5hcHBlbmQoJ2cnKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgLmNhbGwoZDMuYXhpc0xlZnQoeSlcclxuICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgLnRpY2tGb3JtYXQoKGQpID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIgXHJcbiAgICAgICAgICA/IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzTGFiZWxGb21hdHRlcihkKSBcclxuICAgICAgICAgIDogZDtcclxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkID49IDEwMDAgPyBmb3JtYXR0ZWQgLyAxMDAwICsgJ2snIDogZm9ybWF0dGVkO1xyXG4gICAgICB9KSlcclxuICAgIC5jYWxsKChnKSA9PiB7XHJcbiAgICAgIGcuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1kb21haW4tY29sb3IsICMwMDAwMDApJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTtcclxuICAgIH0pXHJcbiAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgIC5zdHlsZSgnZm9udC1zaXplJywgaXNyaWEgPyAnMTFweCcgOiBudWxsKVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcblxyXG4gIC8vIFJpZ2h0IHktYXhpcyAoaGlkZGVuIGJ5IGRlZmF1bHQpXHJcbiAgc3ZnWUF4aXNSaWdodC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgIC5jYWxsKHkpXHJcbiAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAvLyBMaW5lIGNoYXJ0IGF4aXMgaWYgYXBwbGljYWJsZVxyXG4gIGlmIChsaW5lRGF0YSAhPSBudWxsICYmIGxpbmVEYXRhICYmIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnNob3dMaW5lQ2hhcnRBeGlzKSB7XHJcbiAgICBzdmdZQXhpc1JpZ2h0LmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dDEnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5TGluZUF4aXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gQXBwbHkgYXhpcyB2aXNpYmlsaXR5IGNvbmZpZ3VyYXRpb25zXHJcbiAgdGhpcy5hcHBseUF4aXNWaXNpYmlsaXR5Q29uZmlnKHNlbGYpO1xyXG59XHJcblxyXG5wcml2YXRlIGFwcGx5QXhpc1Zpc2liaWxpdHlDb25maWcoc2VsZikge1xyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW4pIHtcclxuICAgIGQzLnNlbGVjdEFsbCgnZy5saWItbGluZS14LWF4aXMtdGV4dCA+IGcgPiB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlbikge1xyXG4gICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkID4gZyA+IHRleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgfVxyXG5cclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlbikge1xyXG4gICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNEYXNoZWQpIHtcclxuICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICM5OTk5OTkpJyk7XHJcbiAgfVxyXG59XHJcblxyXG5wcml2YXRlIHJlbmRlckF4aXNMYWJlbHMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIG1ldGFEYXRhLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIHNlbGYsIGlzcmlhLCByaWdodFN2Z1dpZHRoKSB7XHJcbiAgLy8gWS1heGlzIGxhYmVsXHJcbiAgaWYgKG1ldGFEYXRhLnlMYWJlbCkge1xyXG4gICAgY29uc3QgeVBvc2l0aW9uID0gaXNyaWEgPyAwIC0gbWFyZ2luLmxlZnQgLyAyIC0gMzAgOiAwIC0gbWFyZ2luLmxlZnQgLyAyIC0gNDA7XHJcblxyXG4gICAgc3ZnWUF4aXNMZWZ0LmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMScpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAuYXR0cigneScsIHlQb3NpdGlvbilcclxuICAgICAgLmF0dHIoJ3gnLCAwIC0gaGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoJ2R5JywgJzAuNWVtJylcclxuICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHN2Z1lBeGlzTGVmdC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnc21hbGxlcicpXHJcbiAgICAgICAgLnRleHQobWV0YURhdGEueUxhYmVsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15bGFiZWwtd2Vla2x5Q2hhcnRzJylcclxuICAgICAgICAudGV4dChtZXRhRGF0YS55TGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBYLWF4aXMgbGFiZWxcclxuICBpZiAobWV0YURhdGEueExhYmVsKSB7XHJcbiAgICBjb25zdCBpc0Fjcm9ueW0gPSB0aGlzLmlzTGFiZWxBY3JvbnltKG1ldGFEYXRhLnhMYWJlbCk7XHJcbiAgICBjb25zdCB4UG9zaXRpb24gPSBpc3JpYSBcclxuICAgICAgPyAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pIFxyXG4gICAgICA6IChoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDQwKTtcclxuXHJcbiAgICBzdmcuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgdGhpcy5nZXRYTGFiZWxDbGFzcyhzZWxmKSlcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHt3aWR0aCAvIDJ9LCR7eFBvc2l0aW9ufSlgKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC50ZXh0KGlzQWNyb255bSA/IG1ldGFEYXRhLnhMYWJlbC50b1VwcGVyQ2FzZSgpIDogbWV0YURhdGEueExhYmVsLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgIC5zdHlsZSgndGV4dC10cmFuc2Zvcm0nLCBpc0Fjcm9ueW0gPyAnbm9uZScgOiAnY2FwaXRhbGl6ZScpO1xyXG4gIH1cclxuXHJcbiAgLy8gTGluZSB5LWF4aXMgbGFiZWxcclxuICBpZiAobWV0YURhdGEubGluZXlMYWJlbCkge1xyXG4gICAgc3ZnWUF4aXNSaWdodC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLWxpbmUtYXhpcycpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKSByb3RhdGUoOTApJylcclxuICAgICAgLmF0dHIoJ3knLCAtMTAwKVxyXG4gICAgICAuYXR0cigneCcsIDEwMClcclxuICAgICAgLmF0dHIoJ2R5JywgJzVlbScpXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnc21hbGxlcicpXHJcbiAgICAgIC50ZXh0KG1ldGFEYXRhLmxpbmV5TGFiZWwpO1xyXG4gIH1cclxuXHJcbiAgLy8gQXBwbHkgZHJpbGxkb3duIGNoYXJ0IHNwZWNpZmljIHN0eWxlc1xyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBpc0xhYmVsQWNyb255bShsYWJlbCkge1xyXG4gIHJldHVybiAobGFiZWwubGVuZ3RoIDw9IDQgJiYgL15bQS1aXSskLy50ZXN0KGxhYmVsKSkgfHxcclxuICAgICAgICAgKGxhYmVsID09PSBsYWJlbC50b1VwcGVyQ2FzZSgpICYmIC9bQS1aXS8udGVzdChsYWJlbCkpO1xyXG59XHJcblxyXG5wcml2YXRlIGdldFhMYWJlbENsYXNzKHNlbGYpIHtcclxuICBsZXQgYmFzZUNsYXNzID0gJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGZvbnQtc2l6ZS0xJztcclxuICBcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLXhsYWJlbC1kcmlsbGRvd25jaGFydHMnO1xyXG4gIH1cclxuICBcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLXhsYWJlbC13ZWVrbHlDaGFydHMnO1xyXG4gIH1cclxuICBcclxuICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWItYXhpcy13YXRlcmZhbGwtbGFiZWwnO1xyXG59XHJcblxyXG5wcml2YXRlIHJlbmRlclRhcmdldExpbmUoc3ZnLCBzdmdZQXhpc1JpZ2h0LCB5LCB3aWR0aCwgcmlnaHRTdmdXaWR0aCwgbWV0YURhdGEsIHNlbGYsaXNyaWEpIHtcclxuICBjb25zdCB5WmVybyA9IHkodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KTtcclxuICAvLyBEcmF3IHRhcmdldCBsaW5lXHJcbiAgc3ZnLmFwcGVuZCgnbGluZScpXHJcbiAgICAvLyAuYXR0cigneDEnLCAyMClcclxuICAgIC5hdHRyKCd4MScsIGlzcmlhID8gMCA6IDIwKVxyXG4gICAgLmF0dHIoJ3gyJywgd2lkdGgpXHJcbiAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgIC5hdHRyKCd5MicsIHlaZXJvKVxyXG4gICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuXHJcbiAgLy8gQWRkIHRhcmdldCBsYWJlbFxyXG4gIGNvbnN0IGRhdGFUeXBlVGVtcCA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gIGNvbnN0IHRhcmdldExpbmVOYW1lID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0TmFtZSB8fCAndGFyZ2V0JztcclxuICAgIFxyXG5cclxuXHJcbiAgc3ZnWUF4aXNSaWdodC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke3laZXJvIC0gMzB9KWApXHJcbiAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsIGlzcmlhID8gJ3RhcmdldC1kaXNwbGF5LXJpYScgOiAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAuaHRtbChgPGRpdj4ke3RhcmdldExpbmVOYW1lfTwvZGl2PjxkaXY+JHtzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXR9JHtkYXRhVHlwZVRlbXB9PC9kaXY+YCk7XHJcbn1cclxuXHJcbnByaXZhdGUgcmVuZGVyTGluZUNoYXJ0KHN2ZywgbGluZURhdGEsIHgsIGxpbmVZc2NhbGUsIG1ldGFEYXRhLCBzZWxmKSB7XHJcbiAgLy8gRHJhdyBsaW5lIHBhdGhcclxuICBzdmcuYXBwZW5kKCdwYXRoJylcclxuICAgIC5kYXR1bShsaW5lRGF0YSlcclxuICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxyXG4gICAgLmF0dHIoJ3N0cm9rZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDEuNSlcclxuICAgIC5hdHRyKCdkJywgZDMubGluZSgpXHJcbiAgICAgIC54KChkKSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLnkoKGQpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpKTtcclxuXHJcbiAgLy8gQWRkIGRvdHNcclxuICBjb25zdCBkb3QgPSBzdmcuc2VsZWN0QWxsKCdteUNpcmNsZXMnKVxyXG4gICAgLmRhdGEobGluZURhdGEpXHJcbiAgICAuZW50ZXIoKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAub24oJ2NsaWNrJywgKGQpID0+IHtcclxuICAgICAgaWYgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgfHwgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmIFxyXG4gICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSkpIHtcclxuICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgZG90LmFwcGVuZCgnY2lyY2xlJylcclxuICAgIC5hdHRyKCdmaWxsJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgLmF0dHIoJ2N4JywgKGQpID0+IHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgLmF0dHIoJ2N5JywgKGQpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpXHJcbiAgICAuc3R5bGUoJ2N1cnNvcicsICgpID0+IHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JylcclxuICAgIC5hdHRyKCdyJywgMyk7XHJcblxyXG4gIC8vIEFkZCB2YWx1ZSBsYWJlbHNcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpIHtcclxuICAgIGRvdC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnZG90JylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuYXR0cignY29sb3InLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgJ2ZvbnQtc2l6ZTogLjg1ZW0nKVxyXG4gICAgICAuYXR0cigneCcsIChkKSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLmF0dHIoJ3knLCAoZCkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgLmF0dHIoJ2R5JywgJy0xZW0nKVxyXG4gICAgICAudGV4dCgoZCkgPT4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSkpO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBoYW5kbGVab29tT3V0KHN2ZywgaGVpZ2h0LCBtYXJnaW4pIHtcclxuICBzdmcuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgLmVhY2goKGQsIGksIG5vZGVzKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRleHQgPSBkMy5zZWxlY3Qobm9kZXNbaV0pO1xyXG4gICAgICBjb25zdCBsYWJlbCA9IHRleHQudGV4dCgpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGxhYmVsLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcclxuICAgICAgICBjb25zdCBsaW5lcyA9IGxhYmVsLnNwbGl0KCdcXG4nKTtcclxuICAgICAgICB0ZXh0LnRleHQobnVsbCk7XHJcbiAgICAgICAgbGluZXMuZm9yRWFjaCgobGluZSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICB0ZXh0LmFwcGVuZCgndHNwYW4nKVxyXG4gICAgICAgICAgICAudGV4dChsaW5lKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgICAgICAgIC5hdHRyKCdkeScsIGlkeCA9PT0gMCA/ICcxZW0nIDogJzEuMWVtJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgd29yZHMgPSBsYWJlbC5zcGxpdCgnICcpO1xyXG4gICAgICAgIHRleHQudGV4dChudWxsKTtcclxuICAgICAgICB3b3Jkcy5mb3JFYWNoKCh3b3JkKSA9PiB7XHJcbiAgICAgICAgICB0ZXh0LmFwcGVuZCgndHNwYW4nKS50ZXh0KHdvcmQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBudWxsKTtcclxuXHJcbiAgc3ZnLnNlbGVjdCgnLngtYXhpcycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCAke2hlaWdodCAtIG1hcmdpbi5ib3R0b20gKyAxMH0pYCk7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlQ2hhcnREaW1lbnNpb25zKGNoYXJ0Q29udGFpbmVyOiBhbnksIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lcjogYW55LCBtYXJnaW46IGFueSwgc2VsZjogYW55KSB7XHJcbiAgbGV0IHdpZHRoID0gcGFyc2VJbnQoY2hhcnRDb250YWluZXIuc3R5bGUoJ3dpZHRoJykpIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XHJcbiAgY29uc3QgZGF0YUxlbmd0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoO1xyXG4gIGNvbnN0IHN1Ymdyb3Vwc0NvdW50ID0gKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmtleUxpc3QgYXMgYW55IHx8IFtdKS5sZW5ndGg7XHJcbiAgY29uc3QgaXNNb2JpbGUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDU3NjtcclxuICBjb25zdCBpc1RhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDU3NiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDk5MjtcclxuICBjb25zdCBpczJLID0gd2luZG93LmlubmVyV2lkdGggPj0gMjAwMCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDM4NDA7XHJcblxyXG4gIC8vIE1pbmltdW0gd2lkdGggcGVyIGJhciBncm91cCBiYXNlZCBvbiBkZXZpY2UgYW5kIG51bWJlciBvZiBzdWJncm91cHNcclxuICBjb25zdCBtaW5XaWR0aFBlckdyb3VwID0gKCgpID0+IHtcclxuICAgIGlmIChzdWJncm91cHNDb3VudCA+IDIpIHtcclxuICAgICAgcmV0dXJuIGlzTW9iaWxlID8gMTAwIDogaXNUYWJsZXQgPyAxMDAgOiAxMjA7IC8vIFdpZGVyIGZvciBtdWx0aXBsZSBzdWJncm91cHNcclxuICAgIH1cclxuICAgIHJldHVybiBpc01vYmlsZSA/IDQwIDogaXNUYWJsZXQgPyA2MCA6IDgwOyAvLyBOb3JtYWwgd2lkdGggZm9yIDEtMiBzdWJncm91cHNcclxuICB9KSgpO1xyXG5cclxuICAvLyBDYWxjdWxhdGUgbWluaW11bSByZXF1aXJlZCB3aWR0aCBmb3IgYWxsIGdyb3Vwc1xyXG4gIGNvbnN0IG1pblJlcXVpcmVkV2lkdGggPSBkYXRhTGVuZ3RoICogbWluV2lkdGhQZXJHcm91cDtcclxuXHJcbiAgLy8gSW4gem9vbWVkLW91dCBzdGF0ZSwgZW5zdXJlIG1pbmltdW0gd2lkdGggZm9yIHJlYWRhYmlsaXR5XHJcbiAgaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIC8vIElmIHdlIGhhdmUgbWFueSBncm91cHMgb3IgbXVsdGlwbGUgc3ViZ3JvdXBzLCBlbnN1cmUgbWluaW11bSB3aWR0aFxyXG4gICAgaWYgKGRhdGFMZW5ndGggPiA4IHx8IHN1Ymdyb3Vwc0NvdW50ID4gMikge1xyXG4gICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBtaW5SZXF1aXJlZFdpZHRoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEluIHpvb21lZC1pbiBzdGF0ZSwgYWx3YXlzIGVuc3VyZSBnZW5lcm91cyBzcGFjaW5nXHJcbiAgaWYgKGRhdGFMZW5ndGggPiA4ICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiZcclxuICAgICAgd2lkdGggPCBkYXRhTGVuZ3RoICogMjUwXHJcbiAgICApIHtcclxuICAgICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMjUwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gSW5jcmVhc2Ugd2lkdGggZm9yIG11bHRpcGxlIHN1Ymdyb3Vwc1xyXG4gICAgICB3aWR0aCA9IGRhdGFMZW5ndGggKiAoc3ViZ3JvdXBzQ291bnQgPiAyID8gMjAwIDogMTYwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0gSGVpZ2h0IExvZ2ljIChubyBjaGFuZ2UpIC0tLS1cclxuICBsZXQgaGVpZ2h0ID1cclxuICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpICpcclxuICAgICAgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAvIDEwMCkgLVxyXG4gICAgbWFyZ2luLnRvcCAtXHJcbiAgICBtYXJnaW4uYm90dG9tO1xyXG5cclxuICBpZiAoXHJcbiAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuXHJcbiAgKSB7XHJcbiAgICBoZWlnaHQgPVxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgIT09IDcwXHJcbiAgICAgICAgPyB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcclxuICAgICAgICA6IHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQgJiYgIXRoaXMuaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICBoZWlnaHQgPVxyXG4gICAgICBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKSAtXHJcbiAgICAgIG1hcmdpbi50b3AgLVxyXG4gICAgICBtYXJnaW4uYm90dG9tIC1cclxuICAgICAgMTMwO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgaGVpZ2h0ID1cclxuICAgICAgcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgLVxyXG4gICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgbWFyZ2luLmJvdHRvbSAtXHJcbiAgICAgIDEwMDtcclxuXHJcbiAgICBpZiAoaXMySykge1xyXG4gICAgICBoZWlnaHQgLT0gNjA7IC8vIHJlZHVjZSBhIGJpdCBtb3JlIGZvciAyS1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0IH07XHJcbn1cclxucHJpdmF0ZSBjcmVhdGVDaGFydENvbnRhaW5lcnMoXHJcbiAgY2hhcnRDb250YWluZXI6IGFueSxcclxuICBtYXJnaW46IGFueSxcclxuICBoZWlnaHQ6IG51bWJlcixcclxuICByaWdodFN2Z1dpZHRoOiBudW1iZXIsXHJcbiAgc2VsZjogYW55LFxyXG4gIHdpZHRoOiBudW1iZXJcclxuKSB7XHJcbiAgLy8gT3V0ZXIgY29udGFpbmVyXHJcbiAgIGNvbnN0IGlzcmlhID0gdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWE7XHJcbiAgY29uc3Qgb3V0ZXJDb250YWluZXIgPSBjaGFydENvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdpZCcsIHNlbGYudW5pcXVlSWQpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnb3V0ZXItY29udGFpbmVyJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAuc3R5bGUoJ2hlaWdodCcsIGhlaWdodClcclxuICAgIC5zdHlsZSgnb3ZlcmZsb3cnLCAndmlzaWJsZScpIC8vIEFsbG93IG92ZXJmbG93IHRvIHNob3cgc2Nyb2xsYmFyc1xyXG4gICAgLy8gLnN0eWxlKCdwYWRkaW5nLWxlZnQnLCBgJHttYXJnaW4ubGVmdH1weGApXHJcbiAgICAuc3R5bGUoJ3BhZGRpbmctbGVmdCcsIGAke2lzcmlhID8gbWFyZ2luLmxlZnQgKyAxOCA6IG1hcmdpbi5sZWZ0ICsgMTV9cHhgKVxyXG4gICAgLnN0eWxlKCdwYWRkaW5nLXJpZ2h0JywgYCR7cmlnaHRTdmdXaWR0aH1weGApXHJcbiAgICAuc3R5bGUoJ21hcmdpbi1sZWZ0JywgJzE1cHgnKTtcclxuXHJcbiAgLy8gTGVmdCBZLUF4aXNcclxuICBjb25zdCBzdmdZQXhpc0xlZnQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnc3ZnJylcclxuICAgIC5hdHRyKCd3aWR0aCcsICcxMDAnKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMTApXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgIC5zdHlsZSgnbGVmdCcsICcwJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsIDEpXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7bWFyZ2luLmxlZnQgKyAxNX0sJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgLy8gUmlnaHQgWS1BeGlzXHJcbiAgY29uc3Qgc3ZnWUF4aXNSaWdodCA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDEwKVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAuc3R5bGUoJ3JpZ2h0JywgJzEycHgnKVxyXG4gICAgLnN0eWxlKCd6LWluZGV4JywgMSlcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke21hcmdpbi50b3B9KWApOyBcclxuXHJcbiAgLy8gSW5uZXIgc2Nyb2xsYWJsZSBjb250YWluZXJcclxuICBjb25zdCBpbm5lckNvbnRhaW5lciA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2lubmVyLWNvbnRhaW5lcicpXHJcbiAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBpc3JpYSA/ICcyNDhweCcgOiBudWxsKTtcclxuXHJcbiAgLy8gTWFpbiBTVkdcclxuICBjb25zdCBzdmcgPSBpbm5lckNvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnc3ZnJylcclxuICAgIC5hdHRyKCd3aWR0aCcsIE1hdGgubWF4KHdpZHRoIC0gcmlnaHRTdmdXaWR0aCwgd2luZG93LmlubmVyV2lkdGggKiAwLjgpKSAvLyBFbnN1cmUgbWluaW11bSB3aWR0aFxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgNjApXHJcbiAgICAuc3R5bGUoJ21pbi13aWR0aCcsICcxMDAlJykgLy8gUHJldmVudCBzdmcgZnJvbSBzaHJpbmtpbmdcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICByZXR1cm4geyBvdXRlckNvbnRhaW5lciwgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBpbm5lckNvbnRhaW5lciwgc3ZnIH07XHJcbn1cclxuICBoYW5kbGVDbGljayhkOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd24gfHwgZD8udG9nZ2xlRnJvbSlcclxuICAgICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgfVxyXG4gIGhhbmRsZUhlYWRlck1lbnVDbGljayhpZCkge1xyXG4gICAgdGhpcy5oZWFkZXJNZW51Y2xpY2tFdmVudC5lbWl0KGlkKTtcclxuICB9XHJcbiAgaGFuZGxlREQxQ2xpY2soZXZlbnQpIHtcclxuICAgIHRoaXMuaXNERDFPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNERDJPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG4gIGhhbmRsZUREMkNsaWNrKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzREQyT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmlzREQxT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuICBoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oZXZlbnQpIHtcclxuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICNncm91cGNvbnRhaW5lclxyXG4gIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2xpYi1uby1iYWNrZ3JvdW5kJzogaXNUcmFuc3BhcmVudEJhY2tncm91bmQgfVwiXHJcbiAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYXJkLWJnKTtcIlxyXG4gIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgICA8bGliLWNoYXJ0LWhlYWRlci12MlxyXG4gICAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYyPlxyXG4gICAgPGxpYi1jaGFydC1oZWFkZXItdjNcclxuICAgICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjM+XHJcbiAgPC9kaXY+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjFcclxuICAgIFt0aXRsZV09XCJjaGFydERhdGEubWV0YURhdGEudGl0bGVcIlxyXG4gICAgW2hhc0RyaWxsRG93bl09XCJjaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duXCJcclxuICAgIFtpc0VkaXRFbmFibGVkXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5pc0VkaXRFbmFibGVkXCJcclxuICAgIFttZW51T3B0aW9uc109XCJjaGFydENvbmZpZ3VyYXRpb24uaGVhZGVyTWVudU9wdGlvbnNcIlxyXG4gICAgW2lzcmlhXT1cImN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYVwiXHJcbiAgICBbc2VsZWN0ZWRLcGlUb29sdG9wXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zZWxlY3RlZEtwaVRvb2x0b3BcIlxyXG4gICAgKG1lbnVPcHRpb25DbGlja0V2ZW50KT1cImhhbmRsZUhlYWRlck1lbnVDbGljaygkZXZlbnQpXCJcclxuICAgIFtpc0FsZXJ0RW5hYmxlZF09XCJpc0FsZXJ0RW5hYmxlZFwiXHJcbiAgICAqbmdJZj1cImlzSGVhZGVyVmlzaWJsZVwiXHJcbiAgPjwvbGliLWNoYXJ0LWhlYWRlci12MT5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cIlxyXG4gICAgICBjaGFydERhdGEgJiZcclxuICAgICAgY2hhcnREYXRhLm1ldGFEYXRhICYmXHJcbiAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRKdXN0aWZpZWQgJiZcclxuICAgICAgbGVnZW5kVmlzaWJsZSAmJlxyXG4gICAgICBjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kQXRUb3BSaWdodFxyXG4gICAgXCJcclxuICAgIGNsYXNzPVwibGVnZW5kLWhvbGRlci1yaWdodFwiXHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5mb290ZXJIZWlnaHRcIlxyXG4gID5cclxuICAgIDx1bCBjbGFzcz1cImRpc3BsYXktZmxleFwiPlxyXG4gICAgICA8bGlcclxuICAgICAgICBjbGFzcz1cImxlZ2VuZHMtcG9zaXRpb25pbmctaW5saW5lXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydERhdGEubWV0YURhdGEuY29sb3JzIHwga2V5dmFsdWUgOiBrZWVwT3JkZXJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC1pY29uLWRyaWxsZG93blwiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICA+PC9zcGFuXHJcbiAgICAgICAgPjxzcGFuPnt7IGl0ZW0ua2V5IH19PC9zcGFuPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICA8L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcIlxyXG4gICAgaWQ9XCJncm91cGNoYXJ0Y29udGFpbmVyXCJcclxuICAgICNncm91cGNoYXJ0Y29udGFpbmVyXHJcbiAgICBjbGFzcz1cImxpYi1jaGFydC1zdmdcIlxyXG4gID48L2Rpdj5cclxuXHJcblxyXG4gIDwhLS0gPGRpdlxyXG4gICAgKm5nSWY9XCJcclxuICAgICAgY2hhcnREYXRhICYmXHJcbiAgICAgIGNoYXJ0RGF0YS5tZXRhRGF0YSAmJlxyXG4gICAgICBjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kSnVzdGlmaWVkICYmXHJcbiAgICAgIGxlZ2VuZFZpc2libGUgJiZcclxuICAgICAgIWNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRBdFRvcFJpZ2h0XHJcbiAgICBcIlxyXG4gICAgY2xhc3M9XCJsaWItZG9udXQtY2hhcnQtZm9vdGVyXCJcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLmZvb3RlckhlaWdodFwiXHJcbiAgPlxyXG4gICAgPHVsIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC13cmFwcGVyXCI+XHJcbiAgICAgIDxsaVxyXG4gICAgICAgIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC1pdGVtXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydERhdGEubWV0YURhdGEuY29sb3JzIHwga2V5dmFsdWVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC1pY29uXCJcclxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgID48L3NwYW5cclxuICAgICAgICA+PHNwYW4+e3sgaXRlbS5rZXkgfX08L3NwYW4+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIDwvZGl2PiAtLT5cclxuXHJcblxyXG4gIDwhLS0gPGRpdiAqbmdJZj1cImNoYXJ0Q29uZmlndXJhdGlvbj8uaXNEaXNwbGF5QmFyRGV0YWlsc0F0Qm90dG9tXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiYmFyLXZhbHVlcyBsaWItZGlzcGxheS1mbGV4IGxpYi1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGxpYi1hbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAqbmdGb3I9XCJcclxuICAgICAgICBsZXQgaXRlbSBvZiBjaGFydERhdGEubWV0YURhdGEuY29sb3JzIHwga2V5dmFsdWUgOiBrZWVwT3JkZXI7XHJcbiAgICAgICAgbGV0IGkgPSBpbmRleFxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiYmFyLW5hbWUgZm9udC1zaXplLTFcIlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBjaGFydERhdGEuZGF0YVswXVtpdGVtLmtleV0gJiZcclxuICAgICAgICAgIGkgPD0gY2hhcnRDb25maWd1cmF0aW9uLmhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5XHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGl0ZW0ua2V5IH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJiYXItdmFsdWUgbGliLWRpc3BsYXktZmxleCBsaWItYWxpZ24taXRlbXMtY2VudGVyIGZvbnQtc2l6ZS0xXCJcclxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiXHJcbiAgICAgICAgICBjaGFydENvbmZpZ3VyYXRpb24uYmFyVmF1bGVDb2xvciA/IGJhclZhdWxlQ29sb3IgOiBpdGVtLnZhbHVlXHJcbiAgICAgICAgXCJcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgY2hhcnREYXRhLmRhdGFbMF1baXRlbS5rZXldICYmXHJcbiAgICAgICAgICBpIDw9IGNoYXJ0Q29uZmlndXJhdGlvbi5ob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBjaGFydERhdGEuZGF0YVswXVtpdGVtLmtleV0gfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj4gLS0+XHJcbjwvZGl2PlxyXG4iXX0=
1302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxrQkFBa0IsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7OztBQVdsRCxNQUFNLE9BQU8sMkNBQ1gsU0FBUSxpQkFBaUI7SUF5RXpCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUEvREEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5Qiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFD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QjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRVbmlxdWVJZCB9IGZyb20gJy4uL3VuaXF1ZS1pZCc7XHJcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tICcuLi9jaGFydC1oZWxwZXInO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XHJcbmltcG9ydCB7IFJlc2l6ZWRFdmVudCB9IGZyb20gJ2FuZ3VsYXItcmVzaXplLWV2ZW50JztcclxuaW1wb3J0IEhlYWRlckNvbmZpZ0hlbHBlciBmcm9tICcuLi9oZWFkZXItY29uZmlnJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWhvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2NvbW1vbi1zdHlsZXMubGVzcycsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbEdyb3VwZWRCYXJXaXRoU2Nyb2xsWm9vbUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWRcclxuICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBpc0hlYWRlclZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGxlZ2VuZFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hhcnRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uOiBhbnkgPSB7XHJcbiAgICBtYXJnaW46IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDIwLCBsZWZ0OiA0MCB9LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsZWdlbmRKdXN0aWZpZWQ6IHRydWUsXHJcbiAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgeUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgIHNob3dMaW5lQ2hhcnRBeGlzOiB0cnVlLFxyXG4gICAgc2hvd1ZhbHVlczogdHJ1ZSxcclxuICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gICAgeEF4aXNHcmlkOiB1bmRlZmluZWQsXHJcbiAgICB5QXhpc0dyaWQ6IGZhbHNlLFxyXG4gICAgbGVnZW5kVmlzaWJsZTogZmFsc2UsXHJcbiAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICBjdXN0b21Zc2NhbGU6IHVuZGVmaW5lZCxcclxuICAgIHRleHRzT25CYXI6IHVuZGVmaW5lZCxcclxuICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiBmYWxzZSxcclxuICAgIGlzWWF4aXNIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNEYXNoZWQ6IHVuZGVmaW5lZCxcclxuICAgIHRleHRGb3JtYXR0ZXI6IHVuZGVmaW5lZCxcclxuICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgIGhpZGVMZWdlbmRPblRvcDogdHJ1ZSxcclxuICAgIGlzWGF4aXNDb2xvcjogJyM5OTk5OTknLFxyXG4gICAgbGFiZWxPdmVybGFwTWlub3JGaXg6IHRydWUsXHJcbiAgICBub0hvdmVyRWZmZWN0OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckRpc3BsYXlEYXRhOiB0cnVlLFxyXG4gICAgc2hvd1hheGlzVG9wOiB0cnVlLFxyXG4gICAgZGlzcGxheVlheGlzTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICB4TGFiZWxzT25TYW1lTGluZTogdW5kZWZpbmVkLFxyXG4gICAgdGV4dEFsd2F5c0hvcml6b250YWw6IHVuZGVmaW5lZCxcclxuICAgIGxlZ2VuZEF0VG9wUmlnaHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHRydWUsXHJcbiAgICBkaXNwbGF5VGl0bGVPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgaXNUb2dnbGVWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RpdGxlSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b206IHVuZGVmaW5lZCxcclxuICAgIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiAwLFxyXG4gICAgYmFyVmF1bGVDb2xvcjogdW5kZWZpbmVkLFxyXG4gICAgZGVmYXVsdEJhckhlaWdodDogMixcclxuICB9O1xyXG5cclxuICB1bmlxdWVJZDogYW55ID0gdGhpcy5nZXRVbmlxdWVJZCgpO1xyXG4gIGlzWm9vbWVkT3V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0REMU9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0REMk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgb25SZXNpemVkKGV2ZW50OiBSZXNpemVkRXZlbnQpIHtcclxuICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkMy5zZWxlY3QoJyMnICsgc2VsZi51bmlxdWVJZCkucmVtb3ZlKCk7XHJcbiAgICAgICAgc2VsZi5pbml0aWFsaXplZ3JvdXBDaGFydCgpO1xyXG4gICAgICB9LmJpbmQoc2VsZiksXHJcbiAgICAgIDEwXHJcbiAgICApO1xyXG4gIH1cclxuICBpc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQsIGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgdGhpcy5vblJlc2l6ZWQoZXZlbnQpO1xyXG4gIH1cclxuICBoYW5kbGVab29taW5ab29tb3V0Q2xpY2soeyBpc1pvb21PdXQsIGV2ZW50IH0pIHtcclxuICAgIHRoaXMuaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge31cclxuICBpc0xlZ2VuZFZpc2libGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyAmJlxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMpLmxlbmd0aCA+IDFcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2VlcE9yZGVyID0gKGEsIGIpID0+IHtcclxuICAgIHJldHVybiBhO1xyXG4gIH07XHJcblxyXG4gIGdldCBpc0FsZXJ0RW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbj8uaGVhZGVyTWVudU9wdGlvbnM/LnNvbWUoXHJcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gJ2VkaXRBbGVydCdcclxuICAgICk7XHJcbiAgfSAgXHJcblxyXG5pbml0aWFsaXplZ3JvdXBDaGFydCgpIHtcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBWQVJJQUJMRSBERUNMQVJBVElPTlMgPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCBzZWxmID0gdGhpcztcclxuICBsZXQgZGF0YSA9IFtdO1xyXG4gIGxldCBtZXRhRGF0YTogYW55ID0gbnVsbDtcclxuICBsZXQga2V5TGlzdCA9IG51bGw7XHJcbiAgbGV0IGxpbmVEYXRhID0gbnVsbDtcclxuICBsZXQgY29sb3JNYXAgPSB7fTtcclxuICBsZXQgZm9ybWF0RnJvbUJhY2tlbmQ7XHJcbiAgbGV0IGZvcm1hdEZvckh1Z2VOdW1iZXJzO1xyXG4gIFxyXG4gIC8vIERldmljZSBkZXRlY3Rpb25cclxuICBjb25zdCBpc01vYmlsZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNTc2O1xyXG4gIGNvbnN0IGlzVGFibGV0ID0gd2luZG93LmlubmVyV2lkdGggPj0gNTc2ICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyO1xyXG4gIGNvbnN0IGlzRGVza3RvcCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDk5MjtcclxuICBjb25zdCBpc3JpYSA9IHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhO1xyXG5cclxuICAvLyBDaGFydCBzY2FsZSB2YXJpYWJsZXNcclxuICBsZXQgeDogYW55O1xyXG4gIGxldCB0ZW1wU2NhbGU7XHJcblxyXG4gIC8vIFRpY2sgbGVuZ3RoIGNvbnN0YW50c1xyXG4gIGNvbnN0IFNIT1JUX1RJQ0tfTEVOR1RIID0gNDtcclxuICBjb25zdCBMT05HX1RJQ0tfTEVOR1RIID0gMTY7XHJcbiAgY29uc3QgU0hPUlRfVElDS19MRU5HVEhfQkcgPSA1O1xyXG4gIGNvbnN0IExPTkdfVElDS19MRU5HVEhfQkcgPSAzMDtcclxuICBjb25zdCBMRUZUX0FORF9SSUdIVF9TUEFDRVMgPSA1MDtcclxuICBjb25zdCBSSUdIVF9TVkdfV0lEVEggPSA2MDtcclxuICBcclxuICAvLyBGbGFnc1xyXG4gIGxldCBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBDT05GSUdVUkFUSU9OIFNFVFVQID09PT09PT09PT09PT09PT09PT09XHJcbiAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25ba2V5XSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAga2V5LFxyXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEV4dHJhY3QgY2hhcnQgZGF0YVxyXG4gIGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuXHJcbiAgLy8gU2V0dXAgY29sb3IgbWFwcGluZ3NcclxuICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgIG1ldGFEYXRhWydjb2xvckFib3ZlVGFyZ2V0J10gPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgfVxyXG4gIGNvbG9yTWFwID0gbWV0YURhdGEuY29sb3JzO1xyXG4gIGtleUxpc3QgPSBtZXRhRGF0YS5rZXlMaXN0O1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBDT05UQUlORVIgU0VUVVAgPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICBjb25zdCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5ncm91cGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICBjb25zdCBtYXJnaW4gPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW47XHJcbiAgXHJcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLmNhbGN1bGF0ZUNoYXJ0RGltZW5zaW9ucyhcclxuICAgIGNoYXJ0Q29udGFpbmVyLFxyXG4gICAgdmVydGljYWxzdGFja2VkY29udGFpbmVyLFxyXG4gICAgbWFyZ2luLFxyXG4gICAgc2VsZlxyXG4gICk7XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFZJU0lCSUxJVFkgQ09ORklHVVJBVElPTiA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGU7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLmxlZ2VuZFZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IERBVEEgRk9STUFUVElORyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgIGZvcm1hdEZyb21CYWNrZW5kID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXIpO1xyXG4gICAgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gU1ZHIENPTlRBSU5FUlMgQ1JFQVRJT04gPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCB7XHJcbiAgICBvdXRlckNvbnRhaW5lcixcclxuICAgIHN2Z1lBeGlzTGVmdCxcclxuICAgIHN2Z1lBeGlzUmlnaHQsXHJcbiAgICBpbm5lckNvbnRhaW5lcixcclxuICAgIHN2Z1xyXG4gIH0gPSB0aGlzLmNyZWF0ZUNoYXJ0Q29udGFpbmVycyhjaGFydENvbnRhaW5lciwgbWFyZ2luLCBoZWlnaHQsIFJJR0hUX1NWR19XSURUSCwgc2VsZiwgd2lkdGgpO1xyXG5cclxuICAvLyBPbmx5IGVuYWJsZSBob3Jpem9udGFsIHNjcm9sbGluZyBvbiBtb2JpbGUvdGFibGV0IHdoZW4gaW4gem9vbWVkLW91dFxyXG4gIC8vIG1vZGUgYW5kIHRoZXJlIGFyZSBtYW55IGdyb3VwcyBvciBtdWx0aXBsZSBzdWJncm91cHMuIE90aGVyd2lzZSBrZWVwXHJcbiAgLy8gdGhlIGlubmVyIGNvbnRhaW5lciBmaXhlZCAobm8gc2Nyb2xsYmFyKS5cclxuICB0cnkge1xyXG4gICAgY29uc3QgZ3JvdXBzQ291bnQgPSAoZGF0YSBhcyBhbnkpLmxlbmd0aCB8fCAwO1xyXG4gICAgY29uc3Qgc3ViZ3JvdXBzQ291bnQgPSAoa2V5TGlzdCBhcyBhbnkgJiYgKGtleUxpc3QgYXMgYW55KS5sZW5ndGgpIHx8IDA7XHJcbiAgICAvLyBPbiBtb2JpbGUvdGFibGV0OiBhbHdheXMgZW5hYmxlIGhvcml6b250YWwgc2Nyb2xsaW5nIHdoZW4gdGhlcmUgaXNcclxuICAgIC8vIG1vcmUgdGhhbiBvbmUgc3ViZ3JvdXAgc28gZ3JvdXBlZCBiYXJzIGRvbid0IGdldCBjb25nZXN0ZWQuXHJcbiAgICAvLyBPbiBkZXNrdG9wOiBlbmFibGUgc2Nyb2xsaW5nIHdoZW4gdGhlcmUgYXJlIG1hbnkgZ3JvdXBzIG9yXHJcbiAgICAvLyBtdWx0aXBsZSBzdWJncm91cHMgKGtlZXBzIHByZXZpb3VzIGJlaGF2aW9yKS5cclxuICAgIGlmICgoaXNNb2JpbGUgfHwgaXNUYWJsZXQpICYmIHN1Ymdyb3Vwc0NvdW50ID4gMSkge1xyXG4gICAgICBpbm5lckNvbnRhaW5lci5zdHlsZSgnb3ZlcmZsb3cteCcsICdhdXRvJyk7XHJcbiAgICAgIGlubmVyQ29udGFpbmVyLmNsYXNzZWQoJ3Njcm9sbC1lbmFibGVkJywgdHJ1ZSk7XHJcbiAgICB9IGVsc2UgaWYgKGdyb3Vwc0NvdW50ID4gOCB8fCBzdWJncm91cHNDb3VudCA+IDIpIHtcclxuICAgICAgaW5uZXJDb250YWluZXIuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpO1xyXG4gICAgICBpbm5lckNvbnRhaW5lci5jbGFzc2VkKCdzY3JvbGwtZW5hYmxlZCcsIHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5uZXJDb250YWluZXIuc3R5bGUoJ292ZXJmbG93LXgnLCAnaGlkZGVuJyk7XHJcbiAgICAgIGlubmVyQ29udGFpbmVyLmNsYXNzZWQoJ3Njcm9sbC1lbmFibGVkJywgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIC8vIGlnbm9yZVxyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gU0NBTEVTIFNFVFVQID09PT09PT09PT09PT09PT09PT09XHJcbiAgY29uc3Qgc3ViZ3JvdXBzOiBhbnkgPSBrZXlMaXN0O1xyXG4gIGNvbnN0IGdyb3VwcyA9IGQzLm1hcChkYXRhLCAoZCkgPT4gZC5uYW1lKS5rZXlzKCk7XHJcblxyXG4gIC8vIFgtYXhpcyBzY2FsZSBjb25maWd1cmF0aW9uXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgIHggPSBkMy5zY2FsZUJhbmQoKVxyXG4gICAgICAucmFuZ2VSb3VuZChbd2lkdGgsIDBdKVxyXG4gICAgICAuYWxpZ24oMC41KVxyXG4gICAgICAucGFkZGluZyhbMC41XSlcclxuICAgICAgLmRvbWFpbihkYXRhLm1hcCgoZDogYW55KSA9PiBkLm5hbWUudG9Mb3dlckNhc2UoKSkpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB4ID0gZDMuc2NhbGVCYW5kKClcclxuICAgICAgLmRvbWFpbihncm91cHMpXHJcbiAgICAgIC5yYW5nZShbTEVGVF9BTkRfUklHSFRfU1BBQ0VTLCB3aWR0aCAtIFJJR0hUX1NWR19XSURUSCAtIExFRlRfQU5EX1JJR0hUX1NQQUNFU10pXHJcbiAgICAgIC5wYWRkaW5nKFswLjNdKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHhTY2FsZUZyb21PcmlnaW4gPSBkMy5zY2FsZUJhbmQoKVxyXG4gICAgLmRvbWFpbihncm91cHMpXHJcbiAgICAucmFuZ2UoWzAsIHdpZHRoIC0gUklHSFRfU1ZHX1dJRFRIXSk7XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFgtQVhJUyBSRU5ERVJJTkcgPT09PT09PT09PT09PT09PT09PT1cclxuICB0aGlzLnJlbmRlclhBeGlzKHN2ZywgeCwgaGVpZ2h0LCBtZXRhRGF0YSwgc3ViZ3JvdXBzLCBkYXRhLCBcclxuICAgIFNIT1JUX1RJQ0tfTEVOR1RIX0JHLCBMT05HX1RJQ0tfTEVOR1RIX0JHLCBzZWxmLCBpc3JpYSwgaXNNb2JpbGUsIGlzVGFibGV0KTtcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gWS1BWElTIFNFVFVQID09PT09PT09PT09PT09PT09PT09XHJcbiAgY29uc3QgeSA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2VSb3VuZChbaGVpZ2h0LCAwXSk7XHJcbiAgbGV0IG1heFZhbHVlID0gdGhpcy5jYWxjdWxhdGVNYXhWYWx1ZShkYXRhLCBrZXlMaXN0KTtcclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSkge1xyXG4gICAgbWF4VmFsdWUgPSBtYXhWYWx1ZSAqIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJiBtYXhWYWx1ZSA8IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkge1xyXG4gICAgbWF4VmFsdWUgPSBtYXhWYWx1ZSA8IDEwICYmIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCA8IDEwXHJcbiAgICAgID8gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgM1xyXG4gICAgICA6IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDIwO1xyXG4gIH1cclxuXHJcbiAgeS5kb21haW4oWzAsIG1heFZhbHVlXSkubmljZSgpO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBMSU5FIENIQVJUIFktU0NBTEUgPT09PT09PT09PT09PT09PT09PT1cclxuICBsZXQgbGluZVlzY2FsZTtcclxuICBsZXQgeUxpbmVBeGlzO1xyXG5cclxuICBpZiAobGluZURhdGEgIT0gbnVsbCkge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZXR1cExpbmVZU2NhbGUobGluZURhdGEsIGhlaWdodCwgc2VsZik7XHJcbiAgICBsaW5lWXNjYWxlID0gcmVzdWx0LmxpbmVZc2NhbGU7XHJcbiAgICB5TGluZUF4aXMgPSByZXN1bHQueUxpbmVBeGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gR1JJRCBMSU5FUyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIHRoaXMucmVuZGVyR3JpZExpbmVzKHN2ZywgeCwgeSwgaGVpZ2h0LCB3aWR0aCwgc2VsZiwgaXNyaWEpO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBCQVJTIFJFTkRFUklORyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGNvbnN0IHhTdWJncm91cCA9IHRoaXMuc2V0dXBYU3ViZ3JvdXBTY2FsZShzdWJncm91cHMsIHgsIHNlbGYpO1xyXG4gIGNvbnN0IGNvbG9yID0gZDMuc2NhbGVPcmRpbmFsKClcclxuICAgIC5kb21haW4oc3ViZ3JvdXBzKVxyXG4gICAgLnJhbmdlKE9iamVjdC52YWx1ZXMobWV0YURhdGEuY29sb3JzKSk7XHJcblxyXG4gIHRoaXMucmVuZGVyQmFycyhzdmcsIGRhdGEsIHN1Ymdyb3VwcywgeCwgeFN1Ymdyb3VwLCB5LCBoZWlnaHQsIGNvbG9yLCBcclxuICAgIG1ldGFEYXRhLCBzZWxmLCBMRUZUX0FORF9SSUdIVF9TUEFDRVMsIHRlbXBTY2FsZSwgaXNyaWEpO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBCQVIgTEFCRUxTID09PT09PT09PT09PT09PT09PT09XHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgdGhpcy5yZW5kZXJCYXJMYWJlbHMoc3ZnLCBkYXRhLCBzdWJncm91cHMsIHgsIHhTdWJncm91cCwgeSwgaGVpZ2h0LCBcclxuICAgICAgbWV0YURhdGEsIHNlbGYsIHRlbXBTY2FsZSwgaXNyaWEpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gWS1BWElTIFJFTkRFUklORyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIHRoaXMucmVuZGVyWUF4aXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIHksIHlMaW5lQXhpcywgXHJcbiAgICBsaW5lRGF0YSwgc2VsZiwgaXNyaWEsIG1hcmdpbik7XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IEFYSVMgTEFCRUxTID09PT09PT09PT09PT09PT09PT09XHJcbiAgdGhpcy5yZW5kZXJBeGlzTGFiZWxzKHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBtZXRhRGF0YSwgXHJcbiAgICB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIHNlbGYsIGlzcmlhLCBSSUdIVF9TVkdfV0lEVEgpO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBUQVJHRVQgTElORSA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgdGhpcy5yZW5kZXJUYXJnZXRMaW5lKHN2Zywgc3ZnWUF4aXNSaWdodCwgeSwgd2lkdGgsIFJJR0hUX1NWR19XSURUSCwgXHJcbiAgICAgIG1ldGFEYXRhLCBzZWxmKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IExJTkUgQ0hBUlQgPT09PT09PT09PT09PT09PT09PT1cclxuICBpZiAobGluZURhdGEpIHtcclxuICAgIHRoaXMucmVuZGVyTGluZUNoYXJ0KHN2ZywgbGluZURhdGEsIHgsIGxpbmVZc2NhbGUsIG1ldGFEYXRhLCBzZWxmKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFpPT00gSEFORExJTkcgPT09PT09PT09PT09PT09PT09PT1cclxuICBpZiAodGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgdGhpcy5oYW5kbGVab29tT3V0KHN2ZywgaGVpZ2h0LCBtYXJnaW4pO1xyXG4gIH1cclxufVxyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT0gSEVMUEVSIE1FVEhPRFMgPT09PT09PT09PT09PT09PT09PT1cclxuXHJcbnByaXZhdGUgcmVuZGVyWEF4aXMoc3ZnLCB4LCBoZWlnaHQsIG1ldGFEYXRhLCBzdWJncm91cHMsIGRhdGEsIFxyXG4gIHNob3J0VGlja0xlbmd0aEJnLCBsb25nVGlja0xlbmd0aEJnLCBzZWxmLCBpc3JpYSwgaXNNb2JpbGUsIGlzVGFibGV0KSB7XHJcbiAgXHJcbiAgbGV0IGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAvLyBOb3JtYWwgdGlja3MgZm9yIGRhc2hib2FyZCBjaGFydHNcclxuICAgIC8vIER5bmFtaWNhbGx5IGFkanVzdCBZIHRyYW5zbGF0aW9uIGZvciBtb2JpbGVcclxuICAgIGxldCB0cmFuc2xhdGVZID0gaGVpZ2h0O1xyXG4gICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgIHRyYW5zbGF0ZVkgPSBoZWlnaHQgKyAxMDsgLy8gQWRkIGV4dHJhIHNwYWNlIGF0IHRoZSB0b3AgZm9yIG1vYmlsZVxyXG4gICAgfVxyXG4gICAgc3ZnLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHt0cmFuc2xhdGVZfSlgKVxyXG4gICAgICAvLyAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgtMzUsJHt0cmFuc2xhdGVZfSlgKVxyXG4gICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpKVxyXG4gICAgICAvLyAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgICAgIC8vIC5jYWxsKChnKSA9PiB7IGlmICghaXNyaWEpIGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCk7IH0pXHJcbiAgICAgIC5jYWxsKGcgPT4ge1xyXG4gICAgLy8gUklBICsgc2luZ2xlIHN1Ymdyb3VwIOKGkiByZW1vdmUgZG9tYWluXHJcbiAgICBpZiAoaXNyaWEgJiYgc3ViZ3JvdXBzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3JcclxuICAgIGlmICghaXNyaWEpIHtcclxuICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpO1xyXG4gICAgfVxyXG59KVxyXG4gICAgICAgLmNhbGwoKGcpID0+IHtcclxuICAgIC8vIE1vdmUgb25seSB0aGUgYXhpcyBsaW5lIChkb21haW4pIHRvIHRoZSBsZWZ0XHJcbiAgICBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoLTM1LDApJyk7fSlcclxuICAgICAuY2FsbCgoZykgPT4ge1xyXG4gICAgLy8gSW5jcmVhc2Ugc3BhY2luZyBiZXR3ZWVuIGF4aXMgYW5kIGxhYmVsc1xyXG4gICAgaWYoaXNyaWEgJiYgc3ViZ3JvdXBzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgZy5zZWxlY3RBbGwoJy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cignZHknLCAnMWVtJyk7IC8vIERlZmF1bHQgaXMgJzAuNzFlbScsIGluY3JlYXNlIGZvciBtb3JlIHNwYWNlXHJcbiAgICB9XHJcbiAgfSlcclxuICAuY2FsbCgoZykgPT4ge1xyXG4gIC8vIFJlbW92ZSBvbmx5IHRoZSBsYXN0IHRpY2tcclxuICAgaWYoaXNyaWEgJiYgc3ViZ3JvdXBzLmxlbmd0aCA9PT0gMSkge1xyXG4gIGNvbnN0IHRpY2tzID0gZy5zZWxlY3RBbGwoJy50aWNrJyk7XHJcbiAgaWYgKHRpY2tzLnNpemUoKSA+IDApIHtcclxuICAgIC8vIGQzLnNlbGVjdCh0aWNrcy5ub2RlcygpW3RpY2tzLnNpemUoKSAtIDFdKS5yZW1vdmUoKTtcclxuICAgICBkMy5zZWxlY3QodGlja3Mubm9kZXMoKVt0aWNrcy5zaXplKCkgLSAxXSkuc2VsZWN0KCdsaW5lJykucmVtb3ZlKCk7XHJcbiAgfVxyXG59XHJcbn0pO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5yZW1vdmUoKTtcclxuXHJcbiAgICBjb25zdCB5T2Zmc2V0ID0gc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgIW1ldGFEYXRhLnhMYWJlbCA/IDMyIDogMDtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuYXR0cigneScsIHlPZmZzZXQgfHwgbnVsbCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIEJpZ2dlciB0aWNrcyBmb3Igd2Vla2x5IGNoYXJ0c1xyXG4gICAgc3ZnLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtoZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuXHJcbiAgICAvLyBBbHRlcm5hdGUgdGljayBsaW5lIHNpemVzXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuYXR0cigneTInLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmIChhbHRlcm5hdGVfdGV4dCAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc05vQWx0ZXJuYXRlWGF4aXNUZXh0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBsb25nVGlja0xlbmd0aEJnIC0gNztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHNob3J0VGlja0xlbmd0aEJnIC0gNDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgLy8gWC1heGlzIGxhYmVsIHRleHRzXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICAgICAgcmV0dXJuIHNob3J0VGlja0xlbmd0aEJnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gbG9uZ1RpY2tMZW5ndGhCZztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIHNob3J0VGlja0xlbmd0aEJnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIC8vIEFwcGx5IGxhYmVscyBvbiBzYW1lIGxpbmUgY29uZmlndXJhdGlvblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgdGhpcy5hcHBseVhMYWJlbHNPblNhbWVMaW5lKHN2Zywgc3ViZ3JvdXBzLCBkYXRhLCBtZXRhRGF0YSwgc2VsZiwgXHJcbiAgICAgIHNob3J0VGlja0xlbmd0aEJnLCBpc01vYmlsZSwgaXNyaWEpO1xyXG4gIH1cclxuXHJcbiAgLy8gTW9iaWxlIG92ZXJyaWRlIGZvciBSSUFcclxuICBpZiAoaXNyaWEgJiYgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPiA4KSB7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmNsYXNzZWQoJ21vYmlsZS14YXhpcy1vdmVycmlkZScsIHRydWUpXHJcbiAgICAgIC50ZXh0KChkOiBzdHJpbmcpID0+IGQuc3Vic3RyaW5nKDAsIDMpKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMnB4JylcclxuICAgICAgLmF0dHIoJ3knLCA1KVxyXG4gICAgICAuYXR0cigneCcsIDUpXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJyk7XHJcbiAgfVxyXG5cclxuIFxyXG5cclxuLy8g4pyFIFRhYmxldCBWaWV3IOKAlCBSb3RhdGUgaWYgdGV4dCA+IDEwIGNoYXJhY3RlcnNcclxuaWYgKGlzVGFibGV0KSB7XHJcbiAgIGNvbnN0IHRleHROb2RlcyA9IHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKTtcclxuICB0ZXh0Tm9kZXMuZWFjaChmdW5jdGlvbiAoZDogYW55KSB7XHJcbiAgICBjb25zdCB0ZXh0ID0gZCA/IGQudG9TdHJpbmcoKS50cmltKCkgOiAnJztcclxuXHJcbiAgICAvLyBEZXRlY3QgZGF0ZSBmb3JtYXRzICh0byBza2lwIHRoZW0pXHJcbiAgICBjb25zdCBpc0RhdGVTdHJpbmcgPVxyXG4gICAgICAvXlxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fSQvLnRlc3QodGV4dCkgfHwgLy8gZS5nLiAyMDI1LTEwLTI5IG9yIDEwLzI5LzIwMjVcclxuICAgICAgL14oXFxkezEsNH1bLVxcL11cXGR7MSwyfVstXFwvXVxcZHsxLDR9KVxccypbLeKAk11cXHMqKFxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fSkkLy50ZXN0KHRleHQpOyBcclxuXHJcbiAgICAgIFxyXG4gICAgaWYgKCFpc0RhdGVTdHJpbmcgJiYgdGV4dC5sZW5ndGggPiAxMCkge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSB0ZXh0LnNsaWNlKDAsOSkgKyAn4oCmJztcclxuICAgICAgdGV4dE5vZGVzXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTBweCcpXHJcbiAgICAgICAgLy8gLnRleHQodHJpbW1lZClcclxuICAgICAgIFxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5cclxuICAvLyBNb2JpbGUvdGFibGV0IG92ZXJyaWRlIC0gY2hlY2sgZm9yIHNpbmdsZS1ncm91cCBkYXRlIGNoYXJ0cyBmaXJzdFxyXG4gIGlmIChpc01vYmlsZSkge1xyXG4gICAgY29uc3QgdGV4dE5vZGVzID0gc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpO1xyXG4gICAgY29uc3QgZ3JvdXBzQ291bnQgPSAoZGF0YSBhcyBhbnkpLmxlbmd0aCB8fCAwO1xyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGRhdGVzIGluIHgtYXhpcyBhbmQgc2luZ2xlIGdyb3VwXHJcbiAgICBsZXQgaGFzRGF0ZVZhbHVlcyA9IGZhbHNlO1xyXG4gICAgdGV4dE5vZGVzLmVhY2goZnVuY3Rpb24oZCkge1xyXG4gICAgICAvLyBDaGVjayBmb3IgZGF0ZSB2YWx1ZXMgdXNpbmcgYm90aCBEYXRlLnBhcnNlIGFuZCByZWdleCBmb3IgZGF0ZSBmb3JtYXRcclxuICAgICAgICBjb25zdCBpc0RhdGVTdHJpbmcgPVxyXG4gICAgL15cXGR7MSw0fVstXFwvXVxcZHsxLDJ9Wy1cXC9dXFxkezEsNH0kLy50ZXN0KGQudHJpbSgpKSB8fFxyXG4gICAgL14oXFxkezEsNH1bLVxcL11cXGR7MSwyfVstXFwvXVxcZHsxLDR9KVxccypbLeKAk11cXHMqKFxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fSkkLy50ZXN0KGQudHJpbSgpKTtcclxuICAgICAgaWYgKCFoYXNEYXRlVmFsdWVzICYmIGlzRGF0ZVN0cmluZykge1xyXG4gICAgICAgIGhhc0RhdGVWYWx1ZXMgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDb3VudCB1bmlxdWUgeC1heGlzIGxhYmVsc1xyXG4gICAgY29uc3QgdW5pcXVlTGFiZWxzID0gbmV3IFNldCgpO1xyXG4gICAgdGV4dE5vZGVzLmVhY2goZnVuY3Rpb24oZCkge1xyXG4gICAgICB1bmlxdWVMYWJlbHMuYWRkKGQpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBsYWJlbENvdW50ID0gdW5pcXVlTGFiZWxzLnNpemU7XHJcbiAgICBpZiAoaGFzRGF0ZVZhbHVlcyAmJiBsYWJlbENvdW50IDwgMykge1xyXG4gICAgICAvLyBGb3IgMyBvciBmZXdlciBsYWJlbHMsIGtlZXAgaG9yaXpvbnRhbCBkaXNwbGF5XHJcbiAgICAgIHRleHROb2Rlc1xyXG4gICAgICAgIC5zdHlsZSgnd3JpdGluZy1tb2RlJywgJ2hvcml6b250YWwtdGInKSAgLy8gRXhwbGljaXRseSBzZXQgaG9yaXpvbnRhbFxyXG4gICAgICAgIC5jbGFzc2VkKCdtb2JpbGUteGF4aXMtb3ZlcnJpZGUnLCBmYWxzZSkgLy8gUmVtb3ZlIHZlcnRpY2FsIGNsYXNzXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoMCknKSAgICAgICAgICAvLyBSZW1vdmUgYW55IHJvdGF0aW9uXHJcbiAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpICAgICAgICAgICAvLyBDZW50ZXIgYWxpZ25cclxuICAgICAgICAuYXR0cigneScsIDIwKSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHVzaCBkb3duIGEgYml0XHJcbiAgICAgICAgLmF0dHIoJ2R4JywgJzAnKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IGFueSB4IG9mZnNldFxyXG4gICAgICAgIC5hdHRyKCdkeScsICcwJyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCBhbnkgeSBvZmZzZXRcclxuICAgIH0gZWxzZSBpZiAobGFiZWxDb3VudCA+PSAzKSB7XHJcbiAgICAgIC8vIEZvciBtb3JlIHRoYW4gMyBsYWJlbHMsIHVzZSB2ZXJ0aWNhbCBhbGlnbm1lbnRcclxuICAgICAgdGV4dE5vZGVzXHJcbiAgICAgICAgLnN0eWxlKCd3cml0aW5nLW1vZGUnLCAnc2lkZXdheXMtbHInKSAgIC8vIFZlcnRpY2FsIHRleHRcclxuICAgICAgICAuY2xhc3NlZCgnbW9iaWxlLXhheGlzLW92ZXJyaWRlJywgdHJ1ZSkgLy8gQWRkIHZlcnRpY2FsIGNsYXNzXHJcbiAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpICAgICAgICAgIC8vIENlbnRlciBhbGlnblxyXG4gICAgICAgIC5hdHRyKCd5JywgMzApICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdmVydGljYWwgcG9zaXRpb25cclxuICAgICAgICAuYXR0cigneCcsIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgeCBwb3NpdGlvblxyXG4gICAgfSBlbHNlIGlmICghdGhpcy5pc0hlYWRlclZpc2libGUpIHtcclxuICAgICAgLy8gRGVmYXVsdCBtb2JpbGUgYmVoYXZpb3IgZm9yIG5vbi1kYXRlIG9yIG11bHRpLWdyb3VwXHJcbiAgICAgIHRleHROb2Rlcy5jbGFzc2VkKCdtb2JpbGUteGF4aXMtb3ZlcnJpZGUnLCB0cnVlKTtcclxuICAgIH0gIFxyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBhcHBseVhMYWJlbHNPblNhbWVMaW5lKHN2Zywgc3ViZ3JvdXBzLCBkYXRhLCBtZXRhRGF0YSwgc2VsZiwgXHJcbiAgc2hvcnRUaWNrTGVuZ3RoQmcsIGlzTW9iaWxlLCBpc3JpYSkge1xyXG4gIFxyXG4gIGNvbnN0IHhBeGlzTGFiZWxzID0gc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgLnN0eWxlKCdmb250LXNpemUnLCB0aGlzLmlzSGVhZGVyVmlzaWJsZSA/ICcxOHB4JyA6ICcxNHB4JylcclxuICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgLmF0dHIoJ3knLCAoZCkgPT4gdGhpcy5jYWxjdWxhdGVYTGFiZWxZUG9zaXRpb24oZCwgc3ViZ3JvdXBzLCBkYXRhLCBtZXRhRGF0YSwgc2VsZiwgc2hvcnRUaWNrTGVuZ3RoQmcpKVxyXG4gICAgLmF0dHIoJ3gnLCAoZCkgPT4gKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCAmJiAhc2VsZi5pc1pvb21lZE91dCkgPyAxIDogMClcclxuICAgIC50ZXh0KChkKSA9PiB0aGlzLmZvcm1hdFhMYWJlbFRleHQoZCwgZGF0YSwgbWV0YURhdGEsIHN1Ymdyb3Vwcywgc2VsZiwgaXNNb2JpbGUpKTtcclxuXHJcbiAgLy8gQXBwbHkgd3JpdGluZy1tb2RlIGZvciBncm91cGVkIGNoYXJ0cyB3aXRoIGRhdGUgbGFiZWxzIGluIHpvb21lZC1vdXQgdmlld1xyXG4gIHhBeGlzTGFiZWxzLmVhY2goZnVuY3Rpb24odGhpczogU1ZHVGV4dEVsZW1lbnQsIGQ6IGFueSkge1xyXG4gICAgY29uc3QgaXNEYXRlTGFiZWwgPSAvXihcXGR7Miw0fVstXFwvXSk/XFxkezIsNH1bLVxcL11cXGR7Miw0fSQvLnRlc3QoZC50cmltKCkpO1xyXG4gICAgY29uc3QgaXNXZWVrTGFiZWwgPSAvd2Vla3x3a3x3XFxkKy9pLnRlc3QoZCk7XHJcbiAgICBcclxuICAgIGlmIChzdWJncm91cHMubGVuZ3RoID4gMSAmJiBzZWxmLmlzWm9vbWVkT3V0ICYmIGRhdGEubGVuZ3RoID4gOCAmJiBpc0RhdGVMYWJlbCAmJiAhaXNXZWVrTGFiZWwpIHtcclxuICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCd3cml0aW5nLW1vZGUnLCAnc2lkZXdheXMtbHInKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy8gQWRkIHNlY29uZCBsaW5lIGZvciBub24tZGF0ZSBsYWJlbHMgb24gZGVza3RvcFxyXG4gIGlmICghaXNNb2JpbGUpIHtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgLmZpbHRlcigoZCkgPT4gIS9cXGR7Miw0fVstXFwvXS8udGVzdChkKSlcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgIC5hdHRyKCd5JywgMzApXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLmF0dHIoJ3gnLCAoZCkgPT4gKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCAmJiAhc2VsZi5pc1pvb21lZE91dCkgPyAxIDogMClcclxuICAgICAgLnRleHQoKGQpID0+IHtcclxuICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJyksIGQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVYTGFiZWxZUG9zaXRpb24oZCwgc3ViZ3JvdXBzLCBkYXRhLCBtZXRhRGF0YSwgc2VsZiwgc2hvcnRUaWNrTGVuZ3RoQmcpIHtcclxuICAvLyBGb3IgZ3JvdXBlZCBiYXIgY2hhcnRzIHdpdGggbWFueSBiYXJzIGFuZCB4TGFiZWwgcHJlc2VudFxyXG4gIGlmIChzdWJncm91cHMubGVuZ3RoID4gMSAmJiBkYXRhLmxlbmd0aCA+IDggJiYgbWV0YURhdGEueExhYmVsKSB7XHJcbiAgICBjb25zdCBpc0RhdGVMYWJlbCA9IC9cXGR7Miw0fVstXFwvXS8udGVzdChkKTtcclxuICAgIHJldHVybiBpc0RhdGVMYWJlbCA/IHNob3J0VGlja0xlbmd0aEJnICsgMTQgOiBzaG9ydFRpY2tMZW5ndGhCZztcclxuICB9XHJcblxyXG4gIC8vIEZvciBncm91cGVkIGJhciBjaGFydHMgd2l0aCBtYW55IGJhcnMgYW5kIE5PIHhMYWJlbFxyXG4gIGlmIChzdWJncm91cHMubGVuZ3RoID4gMSAmJiBkYXRhLmxlbmd0aCA+IDggJiYgIW1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgY29uc3QgY2hhcnRIYXNFeHRyYUJvdHRvbSA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbiAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4uYm90dG9tID49IDQwO1xyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICByZXR1cm4gc2hvcnRUaWNrTGVuZ3RoQmcgKyAyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoYXJ0SGFzRXh0cmFCb3R0b20gPyBzaG9ydFRpY2tMZW5ndGhCZyA6IHNob3J0VGlja0xlbmd0aEJnICsgMTA7XHJcbiAgfVxyXG5cclxuICAvLyBEZWZhdWx0L2ZhbGxiYWNrIGxvZ2ljXHJcbiAgbGV0IGJhc2VZID0gc2VsZi5pc0hlYWRlclZpc2libGUgPyBzaG9ydFRpY2tMZW5ndGhCZyArIDI1IDogc2hvcnRUaWNrTGVuZ3RoQmc7XHJcbiAgXHJcbiAgaWYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmICFtZXRhRGF0YS54TGFiZWwgJiYgXHJcbiAgICAgICgvXFxkezIsNH1bLVxcL11cXGR7Mn1bLVxcL11cXGR7Miw0fS8udGVzdChkKSB8fCAvXFxkezIsNH1bLVxcL11cXGR7Miw0fS8udGVzdChkKSkpIHtcclxuICAgIGJhc2VZID0gc2VsZi5pc0hlYWRlclZpc2libGUgPyBzaG9ydFRpY2tMZW5ndGhCZyArIDE1IDogc2hvcnRUaWNrTGVuZ3RoQmcgKyAyNTtcclxuICB9XHJcblxyXG4gIGlmICgvXFxkezIsNH1bLVxcL11cXGR7Miw0fS8udGVzdChkKSAmJiBkLmluZGV4T2YoJyAnKSA+IC0xKSB7XHJcbiAgICBiYXNlWSArPSA0O1xyXG4gIH1cclxuXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbiAmJiBzdWJncm91cHMubGVuZ3RoID4gMSkge1xyXG4gICAgYmFzZVkgPSBNYXRoLm1heChzaG9ydFRpY2tMZW5ndGhCZywgYmFzZVkgLSAxMCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYmFzZVk7XHJcbn1cclxuXHJcbnByaXZhdGUgZm9ybWF0WExhYmVsVGV4dChkLCBkYXRhLCBtZXRhRGF0YSwgc3ViZ3JvdXBzLCBzZWxmLCBpc01vYmlsZSkge1xyXG4gIC8vIENoZWNrIGlmIHdlJ3JlIG9uIG1vYmlsZSBvciB0YWJsZXRcclxuICBjb25zdCBpc1NtYWxsU2NyZWVuID0gd2luZG93LmlubmVyV2lkdGggPCA5OTI7IC8vIExlc3MgdGhhbiA5OTJweCAobW9iaWxlIG9yIHRhYmxldClcclxuICBcclxuICAvLyBIZWxwZXIgdG8gZXh0cmFjdCBhbmQgZm9ybWF0IHdlZWsgbnVtYmVyXHJcbiAgY29uc3QgZXh0cmFjdFdlZWtOdW1iZXIgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgICBjb25zdCBtYXRjaCA9IHRleHQubWF0Y2goLyg/OndlZWt8d2t8dylcXHMqKFxcZCspL2kpO1xyXG4gICAgcmV0dXJuIG1hdGNoID8gYFcke21hdGNoWzFdfWAgOiBudWxsO1xyXG4gIH07XHJcblxyXG4gIC8vIEhlbHBlciB0byBleHRyYWN0IGRhdGUgcGFydFxyXG4gIGNvbnN0IGV4dHJhY3REYXRlID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gICAgY29uc3QgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9cXGR7Mn1bLVxcL11cXGR7Mn1bLVxcL11cXGR7Miw0fS8pO1xyXG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiBudWxsO1xyXG4gIH07XHJcblxyXG4gIC8vIENoZWNrIGlmIGxhYmVsIGNvbnRhaW5zIGJvdGggZGF0ZSBhbmQgd2VlayBpbmZvcm1hdGlvblxyXG4gIGNvbnN0IGhhc0RhdGVBbmRUaW1lID0gKHRleHQ6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgZGF0ZU1hdGNoID0gL1xcZHsyLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fS8udGVzdCh0ZXh0KTtcclxuICAgIGNvbnN0IHdlZWtNYXRjaCA9IC8oPzp3ZWVrfHdrfHcpXFxzKlxcZCsvaS50ZXN0KHRleHQpO1xyXG4gICAgcmV0dXJuIHsgaXNEYXRlOiBkYXRlTWF0Y2gsIGlzV2Vlazogd2Vla01hdGNoIH07XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgbGFiZWxJbmZvID0gaGFzRGF0ZUFuZFRpbWUoZCk7XHJcblxyXG4gIC8vIE1vYmlsZSBoYW5kbGluZzogZm9ybWF0IGRhdGUgYW5kIHdlZWsgcGFydHNcclxuICBpZiAoaXNNb2JpbGUpIHtcclxuICAgIC8vIElmIGhlYWRlciBpcyBoaWRkZW4gKGNvbXBhY3QgbW9iaWxlKVxyXG4gICAgaWYgKCFzZWxmLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICAvLyBJZiBpdCBoYXMgYm90aCBkYXRlIGFuZCB3ZWVrLCBmb3JtYXQgYXBwcm9wcmlhdGVseVxyXG4gICAgICBpZiAobGFiZWxJbmZvLmlzRGF0ZSAmJiBsYWJlbEluZm8uaXNXZWVrKSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZVBhcnQgPSBleHRyYWN0RGF0ZShkKTtcclxuICAgICAgICBjb25zdCB3ZWVrUGFydCA9IGV4dHJhY3RXZWVrTnVtYmVyKGQpO1xyXG4gICAgICAgIGlmIChkYXRlUGFydCAmJiB3ZWVrUGFydCkge1xyXG4gICAgICAgICAgcmV0dXJuIGAke2RhdGVQYXJ0fVxcbiR7d2Vla1BhcnR9YDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgaXQncyBqdXN0IGEgZGF0ZSwgcmV0dXJuIGl0IHVuY2hhbmdlZFxyXG4gICAgICBpZiAobGFiZWxJbmZvLmlzRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBleHRyYWN0RGF0ZShkKSB8fCBkO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIElmIGl0IGhhcyBqdXN0IHdlZWsgbnVtYmVyLCBmb3JtYXQgaXQgYXMgVyMjXHJcbiAgICAgIGlmIChsYWJlbEluZm8uaXNXZWVrKSB7XHJcbiAgICAgICAgY29uc3Qgd2Vla1BhcnQgPSBleHRyYWN0V2Vla051bWJlcihkKTtcclxuICAgICAgICBpZiAod2Vla1BhcnQpIHtcclxuICAgICAgICAgIHJldHVybiB3ZWVrUGFydDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gRm9yIG5vbi1kYXRlIGxhYmVscywgdHJpbSBhcyBiZWZvcmVcclxuICAgICAgY29uc3QgZmlyc3RQYXJ0ID0gZC5zcGxpdCgvW1xcc1xcLV0rLylbMF07XHJcbiAgICAgIHJldHVybiBmaXJzdFBhcnQuc3Vic3RyaW5nKDAsIDMpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpZiB2YWx1ZSBzaG91bGQgYmUgaWdub3JlZFxyXG4gIGNvbnN0IGlzVmFsdWVUb0JlSWdub3JlZCA9IGRhdGEuc29tZSgoaW5kaXY6IGFueSkgPT4gXHJcbiAgICBpbmRpdi5uYW1lICYmIGluZGl2Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZC50cmltKCkudG9Mb3dlckNhc2UoKSAmJiBcclxuICAgIGluZGl2W21ldGFEYXRhLmtleUxpc3RbMF1dID09PSAtMVxyXG4gICk7XHJcblxyXG4gIGlmIChpc1ZhbHVlVG9CZUlnbm9yZWQpIHtcclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBkYXRlIHJhbmdlIGxhYmVsc1xyXG4gIGNvbnN0IGRhdGVSYW5nZVJlZ2V4ID0gLyhcXGR7Miw0fVstXFwvXVxcZHsyfVstXFwvXVxcZHsyLDR9KVxccyotXFxzKihcXGR7Miw0fVstXFwvXVxcZHsyfVstXFwvXVxcZHsyLDR9KS87XHJcbiAgaWYgKGRhdGVSYW5nZVJlZ2V4LnRlc3QoZC50cmltKCkpKSB7XHJcbiAgICByZXR1cm4gZC50cmltKCkucmVwbGFjZShkYXRlUmFuZ2VSZWdleCwgKG0sIGQxLCBkMikgPT4gYCR7ZDF9IC0gJHtkMn1gKTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBzcGxpdHRpbmcgb2YgbXVsdGktcGFydCBsYWJlbHNcclxuICBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgIXNlbGYuaXNab29tZWRPdXQgJiYgZGF0YS5sZW5ndGggPiA4ICYmIFxyXG4gICAgICBkLmluZGV4T2YoJyAnKSA+IC0xICYmIChsYWJlbEluZm8uaXNEYXRlIHx8IGxhYmVsSW5mby5pc1dlZWspKSB7XHJcbiAgICBjb25zdCBmaXJzdCA9IGQuc3Vic3RyaW5nKDAsIGQuaW5kZXhPZignICcpKTtcclxuICAgIGNvbnN0IHNlY29uZCA9IGQuc3Vic3RyaW5nKGQuaW5kZXhPZignICcpICsgMSkudHJpbSgpO1xyXG4gICAgcmV0dXJuIGAke2ZpcnN0fVxcbiR7c2Vjb25kfWA7XHJcbiAgfVxyXG5cclxuICAvLyBIYW5kbGUgZGF0ZSBsYWJlbHMgaW4gbWluaW1pemVkIHZpZXdcclxuICBpZiAobGFiZWxJbmZvLmlzRGF0ZSkge1xyXG4gICAgaWYgKCFzZWxmLmlzSGVhZGVyVmlzaWJsZSAmJiBkLmluZGV4T2YoJyAnKSA+IC0xKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0ID0gZC5zdWJzdHJpbmcoMCwgZC5pbmRleE9mKCcgJykpO1xyXG4gICAgICBjb25zdCBzZWNvbmQgPSBkLnN1YnN0cmluZyhkLmluZGV4T2YoJyAnKSArIDEpLnRyaW0oKTtcclxuICAgICAgcmV0dXJuIGAke2ZpcnN0fVxcbiR7c2Vjb25kfWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZDtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBsYWJlbHMgd2l0aCBzcGFjZXNcclxuICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoMCwgZC5pbmRleE9mKCcgJykpLnRvTG93ZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZC50b0xvd2VyQ2FzZSgpO1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZU1heFZhbHVlKGRhdGEsIGtleUxpc3QpIHtcclxuICBsZXQgbWF4VmFsdWUgPSBkMy5tYXgoZGF0YSwgKGQpID0+IGQzLm1heChrZXlMaXN0LCAoa2V5KSA9PiArZFtrZXldKSk7XHJcbiAgXHJcbiAgaWYgKG1heFZhbHVlID09PSAwKSB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHtcclxuICAgICAgbWF4VmFsdWUgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1heFZhbHVlID0gMTAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1heFZhbHVlO1xyXG59XHJcblxyXG5wcml2YXRlIHNldHVwTGluZVlTY2FsZShsaW5lRGF0YSwgaGVpZ2h0LCBzZWxmKSB7XHJcbiAgbGV0IG1heExpbmVWYWx1ZSA9IGQzLm1heChsaW5lRGF0YSwgKGQpID0+ICtkLnZhbHVlKTtcclxuICBtYXhMaW5lVmFsdWUgPSBtYXhMaW5lVmFsdWUgKiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGU7XHJcblxyXG4gIGxldCBtaW5MaW5lVmFsdWUgPSBkMy5taW4obGluZURhdGEsIChkKSA9PiArZC52YWx1ZSk7XHJcbiAgaWYgKG1heExpbmVWYWx1ZSA+IDApIG1pbkxpbmVWYWx1ZSA9IG1pbkxpbmVWYWx1ZSAtIDM7XHJcbiAgaWYgKG1pbkxpbmVWYWx1ZSA+IDApIG1pbkxpbmVWYWx1ZSA9IDA7XHJcblxyXG4gIGNvbnN0IGxpbmVZc2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAuZG9tYWluKFttaW5MaW5lVmFsdWUsIG1heExpbmVWYWx1ZV0pXHJcbiAgICAucmFuZ2UoW2hlaWdodCwgbWluTGluZVZhbHVlXSk7XHJcblxyXG4gIGNvbnN0IHlMaW5lQXhpcyA9IGQzLmF4aXNSaWdodChsaW5lWXNjYWxlKVxyXG4gICAgLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgLnRpY2tTaXplKDApXHJcbiAgICAudGlja0Zvcm1hdChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55TGluZUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuXHJcbiAgcmV0dXJuIHsgbGluZVlzY2FsZSwgeUxpbmVBeGlzIH07XHJcbn1cclxuXHJcbnByaXZhdGUgcmVuZGVyR3JpZExpbmVzKHN2ZywgeCwgeSwgaGVpZ2h0LCB3aWR0aCwgc2VsZiwgaXNyaWEpIHtcclxuICAvLyBYLWF4aXMgZ3JpZCBiZXR3ZWVuIGxhYmVsc1xyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hncmlkQmV0d2VlbkxhYmVscykge1xyXG4gICAgc3ZnLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHt4LmJhbmR3aWR0aCgpIC8gMn0sJHtoZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoLWhlaWdodCkudGlja0Zvcm1hdCgnJykpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IsICM5OTk5OTkpJylcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8gWS1heGlzIGdyaWRcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNHcmlkKSB7XHJcbiAgICBzdmcuYXBwZW5kKCdnJylcclxuICAgICAgLmNhbGwoZDMuYXhpc0xlZnQoeSkudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpLnRpY2tTaXplKC13aWR0aCkpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciwgI0I5QjlCOSknKVxyXG4gICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMC41JylcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1kb21haW4tY29sb3IsICMwMDAwMDApJykpO1xyXG4gIH0gaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQgJiYgIWlzcmlhKSB7XHJcbiAgICBzdmcuYXBwZW5kKCdnJylcclxuICAgICAgLmNhbGwoZDMuYXhpc0xlZnQoeSkudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICNCOUI5QjkpJylcclxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNScpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtZG9tYWluLWNvbG9yLCAjMDAwMDAwKScpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4JykpO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBzZXR1cFhTdWJncm91cFNjYWxlKHN1Ymdyb3VwcywgeCwgc2VsZikge1xyXG4gIGNvbnN0IHhTdWJncm91cCA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihzdWJncm91cHMpO1xyXG5cclxuICBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIHhTdWJncm91cC5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gIH0gZWxzZSBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA9PT0gMSAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgeFN1Ymdyb3VwLnJhbmdlKFswLCAxMDBdKTtcclxuICB9IGVsc2UgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09PSB1bmRlZmluZWQpIHtcclxuICAgIHhTdWJncm91cC5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB4U3ViZ3JvdXAucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB4U3ViZ3JvdXA7XHJcbn1cclxuXHJcbnByaXZhdGUgcmVuZGVyQmFycyhzdmcsIGRhdGEsIHN1Ymdyb3VwcywgeCwgeFN1Ymdyb3VwLCB5LCBoZWlnaHQsIGNvbG9yLCBcclxuICBtZXRhRGF0YSwgc2VsZiwgbGVmdEFuZFJpZ2h0U3BhY2VzLCB0ZW1wU2NhbGUsIGlzcmlhKSB7XHJcbiAgXHJcbiAgY29uc3Qgc3RhdGUgPSBzdmcuYXBwZW5kKCdnJylcclxuICAgIC5zZWxlY3RBbGwoJy5zdGF0ZScpXHJcbiAgICAuZGF0YShkYXRhKVxyXG4gICAgLmVudGVyKClcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkKSA9PiBgdHJhbnNsYXRlKCR7eChkLm5hbWUpfSwwKWApO1xyXG5cclxuICBjb25zdCBiYXJzID0gc3RhdGUuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgIC5kYXRhKChkKSA9PiB0aGlzLnByZXBhcmVCYXJEYXRhKGQsIHN1Ymdyb3VwcykpXHJcbiAgICAuZW50ZXIoKVxyXG4gICAgLmFwcGVuZCgncmVjdCcpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnYmFycycpXHJcbiAgICAub24oJ2NsaWNrJywgKGQpID0+IHRoaXMuaGFuZGxlQmFyQ2xpY2soZCwgbWV0YURhdGEsIHNlbGYpKVxyXG4gICAgLmF0dHIoJ3gnLCAoZCkgPT4gdGhpcy5jYWxjdWxhdGVCYXJYKGQsIGRhdGEsIHgsIHhTdWJncm91cCwgc2VsZiwgdGVtcFNjYWxlKSlcclxuICAgIC5hdHRyKCd5JywgKGQpID0+IHRoaXMuY2FsY3VsYXRlQmFyWShkLCB5LCBoZWlnaHQsIHNlbGYpKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgKGQpID0+IHRoaXMuY2FsY3VsYXRlQmFyV2lkdGgoZCwgZGF0YSwgc3ViZ3JvdXBzLCB4LCB4U3ViZ3JvdXAsIHNlbGYsIHRlbXBTY2FsZSkpXHJcbiAgICAuYXR0cignaGVpZ2h0JywgKGQpID0+IHRoaXMuY2FsY3VsYXRlQmFySGVpZ2h0KGQsIHksIGhlaWdodCwgc2VsZikpXHJcbiAgICAuc3R5bGUoJ2N1cnNvcicsICgpID0+IChtZXRhRGF0YS5oYXNEcmlsbERvd24gJiYgIWlzcmlhKSA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JylcclxuICAgIC5hdHRyKCdmaWxsJywgKGQpID0+IHRoaXMuZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEsIHNlbGYpKTtcclxuXHJcbiAgLy8gQXR0YWNoIG1vdXNlIGV2ZW50cyBpZiBub3QgUklBXHJcbiAgaWYgKCFpc3JpYSAmJiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3AgfHwgXHJcbiAgICAgICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyID09PSB1bmRlZmluZWQgJiYgXHJcbiAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCA9PT0gdW5kZWZpbmVkKSkpIHtcclxuICAgIGJhcnMub24oJ21vdXNlb3V0JywgKGQsIGkpID0+IHRoaXMuaGFuZGxlTW91c2VPdXQoc3ZnKSlcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIChkLCBpKSA9PiB0aGlzLmhhbmRsZU1vdXNlT3ZlcihkLCBzdmcsIGRhdGEsIHgsIHksIGhlaWdodCwgbWV0YURhdGEsIHNlbGYsIGxlZnRBbmRSaWdodFNwYWNlcywgdGVtcFNjYWxlKSk7XHJcbiAgfVxyXG59XHJcblxyXG5wcml2YXRlIHByZXBhcmVCYXJEYXRhKGQsIHN1Ymdyb3Vwcykge1xyXG4gIGNvbnN0IG5ld0xpc3Q6IGFueSA9IFtdO1xyXG4gIHN1Ymdyb3Vwcy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgIG5ld0xpc3QucHVzaCh7IGtleToga2V5LCB2YWx1ZTogZFtrZXldLCBuYW1lOiBkLm5hbWUgfSk7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIG5ld0xpc3Q7XHJcbn1cclxuXHJcbnByaXZhdGUgaGFuZGxlQmFyQ2xpY2soZCwgbWV0YURhdGEsIHNlbGYpIHtcclxuICBpZiAoZC5rZXkgIT09ICdUYXJnZXQnKSB7XHJcbiAgICBpZiAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fCAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmxlbmd0aCB8fFxyXG4gICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmIFxyXG4gICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/LmtleSkpKSB7XHJcbiAgICAgIHNlbGYuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZUJhclgoZCwgZGF0YSwgeCwgeFN1Ymdyb3VwLCBzZWxmLCB0ZW1wU2NhbGUpIHtcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlRHJpbGxkb3duQmFyWChkLCBkYXRhLCB4LCBzZWxmLCB0ZW1wU2NhbGUpO1xyXG4gIH1cclxuICByZXR1cm4geFN1Ymdyb3VwKGQua2V5KTtcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVEcmlsbGRvd25CYXJYKGQsIGRhdGEsIHgsIHNlbGYsIHRlbXBTY2FsZSkge1xyXG4gIGRhdGEuZm9yRWFjaCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICBcclxuICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICBjb25zdCByZWR1Y2VkQmFyV2lkdGggPSBzZWxmLmlzWm9vbWVkT3V0ID8gNjAgOiAzMDtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSAoeC5iYW5kd2lkdGgoKSAtIHJlZHVjZWRCYXJXaWR0aCkgLyAyO1xyXG4gICAgICAgIHRlbXBTY2FsZS5yYW5nZShbb2Zmc2V0LCB4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0XSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuICByZXR1cm4gdGVtcFNjYWxlKGQua2V5KTtcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVCYXJZKGQsIHksIGhlaWdodCwgc2VsZikge1xyXG4gIGlmIChkLnZhbHVlID09PSAtMSkge1xyXG4gICAgcmV0dXJuIHkoMCk7XHJcbiAgfVxyXG5cclxuICBpZiAoZC52YWx1ZSA+PSAwKSB7XHJcbiAgICBjb25zdCBiYXJIZWlnaHQgPSBoZWlnaHQgLSB5KGQudmFsdWUpO1xyXG4gICAgY29uc3QgbWluSGVpZ2h0ID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGVmYXVsdEJhckhlaWdodCB8fCAyO1xyXG4gICAgcmV0dXJuIGJhckhlaWdodCA8IG1pbkhlaWdodCA/IHkoMCkgLSBtaW5IZWlnaHQgOiB5KGQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHkoMCk7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlQmFyV2lkdGgoZCwgZGF0YSwgc3ViZ3JvdXBzLCB4LCB4U3ViZ3JvdXAsIHNlbGYsIHRlbXBTY2FsZSkge1xyXG4gIC8vIERldmljZSBkZXRlY3Rpb24gZm9yIHJlc3BvbnNpdmUgc2l6aW5nXHJcbiAgY29uc3QgaXNNb2JpbGUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDU3NjtcclxuICBjb25zdCBpc1RhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDU3NiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDk5MjtcclxuXHJcbiAgLy8gRm9yIGdyb3VwZWQgYmFyIGNoYXJ0cyBpbiB6b29tLWluIHZpZXdcclxuICBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgIXNlbGYuaXNab29tZWRPdXQpIHtcclxuICAgIHJldHVybiBpc01vYmlsZSA/IDIyIDogaXNUYWJsZXQgPyAzNiA6IDUwO1xyXG4gIH1cclxuXHJcbiAgLy8gRm9yIHNpbmdsZS1iYXIgY2hhcnRzIGluIHpvb20taW4gdmlld1xyXG4gIGlmIChzdWJncm91cHMubGVuZ3RoID09PSAxICYmICFzZWxmLmlzWm9vbWVkT3V0KSB7XHJcbiAgICByZXR1cm4gaXNNb2JpbGUgPyA2MCA6IDgwO1xyXG4gIH1cclxuXHJcbiAgLy8gTWluaW11bSBiYXIgd2lkdGhzIGZvciB6b29tZWQtb3V0IHN0YXRlXHJcbiAgY29uc3QgbWluQmFyV2lkdGggPSAoKCkgPT4ge1xyXG4gICAgaWYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIHJldHVybiBpc01vYmlsZSA/IDE4IDogaXNUYWJsZXQgPyAyNCA6IDMwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzTW9iaWxlID8gMTIgOiBpc1RhYmxldCA/IDE2IDogMjA7XHJcbiAgfSkoKTtcclxuXHJcbiAgLy8gRGVmYXVsdCBsb2dpYyBmb3IgZHJpbGxkb3duIGNoYXJ0c1xyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICBsZXQgY2FsY3VsYXRlZFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKFtdKS5yYW5nZShbMCwgMF0pO1xyXG4gICAgXHJcbiAgICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuICAgICAgICBjYWxjdWxhdGVkU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgY29uc3QgcmVkdWNlZEJhcldpZHRoID0gc2VsZi5pc1pvb21lZE91dCA/IDYwIDogMTAwO1xyXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHguYmFuZHdpZHRoKCkgLSByZWR1Y2VkQmFyV2lkdGgpIC8gMjtcclxuICAgICAgICAgIGNhbGN1bGF0ZWRTY2FsZS5yYW5nZShbb2Zmc2V0LCB4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgLy8gRW5zdXJlIG1pbmltdW0gd2lkdGggZXZlbiBpbiBkcmlsbGRvd24gbW9kZVxyXG4gICAgcmV0dXJuIE1hdGgubWF4KGNhbGN1bGF0ZWRTY2FsZS5iYW5kd2lkdGgoKSwgbWluQmFyV2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gRm9yIHJlZ3VsYXIgY2hhcnRzLCBlbnN1cmUgbWluaW11bSB3aWR0aFxyXG4gIHJldHVybiBNYXRoLm1heCh4U3ViZ3JvdXAuYmFuZHdpZHRoKCksIG1pbkJhcldpZHRoKTtcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVCYXJIZWlnaHQoZCwgeSwgaGVpZ2h0LCBzZWxmKSB7XHJcbiAgaWYgKGQudmFsdWUgPT09IC0xKSB7XHJcbiAgICByZXR1cm4gaGVpZ2h0IC0geSgwKTtcclxuICB9XHJcblxyXG4gIGlmIChkLnZhbHVlID49IDApIHtcclxuICAgIGNvbnN0IGJhckhlaWdodCA9IGhlaWdodCAtIHkoZC52YWx1ZSk7XHJcbiAgICBjb25zdCBtaW5IZWlnaHQgPSBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5kZWZhdWx0QmFySGVpZ2h0IHx8IDI7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoYmFySGVpZ2h0LCBtaW5IZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbn1cclxuXHJcbnByaXZhdGUgZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEsIHNlbGYpIHtcclxuICBpZiAoZC52YWx1ZSAmJiBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJiBcclxuICAgICAgZC52YWx1ZSA+PSBwYXJzZUZsb2F0KHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkgJiYgXHJcbiAgICAgIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgIFxyXG4gICAgY29uc3Qga2V5ID0gZC5rZXkudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IGNvbG9yQWJvdmVUYXJnZXQgPSBPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0KVxyXG4gICAgICAuZmluZChrID0+IGsudG9Mb3dlckNhc2UoKSA9PT0ga2V5KTtcclxuICAgIFxyXG4gICAgaWYgKGNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRbY29sb3JBYm92ZVRhcmdldF07XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG59XHJcblxyXG5wcml2YXRlIHJlbmRlckJhckxhYmVscyhzdmcsIGRhdGEsIHN1Ymdyb3VwcywgeCwgeFN1Ymdyb3VwLCB5LCBoZWlnaHQsIFxyXG4gIG1ldGFEYXRhLCBzZWxmLCB0ZW1wU2NhbGUsIGlzcmlhKSB7XHJcbiAgXHJcbiAgY29uc3Qgc3RhdGUgPSBzdmcuc2VsZWN0QWxsKCcuc3RhdGUnKTtcclxuICBcclxuICBjb25zdCBsYWJlbHMgPSBzdGF0ZS5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgLmRhdGEoKGQpID0+IHRoaXMucHJlcGFyZUJhckRhdGEoZCwgc3ViZ3JvdXBzKSlcclxuICAgIC5lbnRlcigpXHJcbiAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5hdHRyKCd4JywgMClcclxuICAgIC5hdHRyKCd5JywgMClcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGF0YS1sYWJlbHMtd2Vla2x5Y2hhcnRzJylcclxuICAgIC50ZXh0KChkKSA9PiB0aGlzLmZvcm1hdEJhckxhYmVsKGQpKVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJyMwMDAnKVxyXG4gICAgLnN0eWxlKCdmb250LXdlaWdodCcsICdib2xkJylcclxuICAgIC5zdHlsZSgnZm9udC1zaXplJywgKGQpID0+IHRoaXMuY2FsY3VsYXRlTGFiZWxGb250U2l6ZShzZWxmKSlcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4gdGhpcy5jYWxjdWxhdGVMYWJlbFRyYW5zZm9ybShkLCBkYXRhLCB4LCB4U3ViZ3JvdXAsIHksIHNlbGYsIHRlbXBTY2FsZSkpXHJcbiAgICAub24oJ2NsaWNrJywgKGQpID0+IHRoaXMuaGFuZGxlQmFyQ2xpY2soZCwgbWV0YURhdGEsIHNlbGYpKTtcclxuXHJcbiAgaWYgKCFpc3JpYSkge1xyXG4gICAgbGFiZWxzLm9uKCdtb3VzZW91dCcsICgpID0+IHRoaXMuaGFuZGxlTW91c2VPdXQoc3ZnKSlcclxuICAgICAgICAgIC5vbignbW91c2VvdmVyJywgKGQpID0+IHRoaXMuaGFuZGxlTW91c2VPdmVyKGQsIHN2ZywgZGF0YSwgeCwgeSwgaGVpZ2h0LCBtZXRhRGF0YSwgc2VsZiwgNTAsIHRlbXBTY2FsZSkpO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBmb3JtYXRCYXJMYWJlbChkKSB7XHJcbiAgaWYgKCFkLmtleSB8fCAhZC52YWx1ZSkgcmV0dXJuICcnO1xyXG4gIHJldHVybiBkLmtleS5sZW5ndGggPiAyMCA/IGQua2V5LnN1YnN0cmluZygwLCAxNykgKyAnLi4uJyA6IGQua2V5O1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZUxhYmVsRm9udFNpemUoc2VsZikge1xyXG4gIGlmIChzZWxmLmlzWm9vbWVkT3V0KSByZXR1cm4gJzlweCc7XHJcblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxOTAwKSByZXR1cm4gJzE4cHgnO1xyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMCkgcmV0dXJuICcxMHB4JztcclxuICAgIHJldHVybiAnMTRweCc7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gJzE0cHgnO1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZUxhYmVsVHJhbnNmb3JtKGQsIGRhdGEsIHgsIHhTdWJncm91cCwgeSwgc2VsZiwgdGVtcFNjYWxlKSB7XHJcbiAgbGV0IGNhbGN1bGF0ZWRTY2FsZTtcclxuICBcclxuICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICBjYWxjdWxhdGVkU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgXHJcbiAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBjb25zdCByZWR1Y2VkV2lkdGggPSBPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT09IDIgPyAyMDAgOiAzMDA7XHJcbiAgICAgICAgICBjb25zdCBvZmZzZXQgPSAoeC5iYW5kd2lkdGgoKSAtIHJlZHVjZWRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgY2FsY3VsYXRlZFNjYWxlLnJhbmdlKFtvZmZzZXQsIHguYmFuZHdpZHRoKCkgLSBvZmZzZXRdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMjtcclxuICAgICAgICAgIGNhbGN1bGF0ZWRTY2FsZS5yYW5nZShbb2Zmc2V0LCB4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0QWx3YXlzSG9yaXpvbnRhbCkge1xyXG4gICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4U3ViZ3JvdXAoZC5rZXkpfSwke3koZC52YWx1ZSkgLSAzfSlgO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFpc05hTihjYWxjdWxhdGVkU2NhbGUoZC5rZXkpKSkge1xyXG4gICAgcmV0dXJuIGB0cmFuc2xhdGUoJHtjYWxjdWxhdGVkU2NhbGUoZC5rZXkpICsgY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpICogMC41NX0sJHt5KDApIC0gMTB9KSByb3RhdGUoMjcwKWA7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gJ3RyYW5zbGF0ZSgwLDApJztcclxufVxyXG5cclxucHJpdmF0ZSBoYW5kbGVNb3VzZU92ZXIoZCwgc3ZnLCBkYXRhLCB4LCB5LCBoZWlnaHQsIG1ldGFEYXRhLCBzZWxmLCBsZWZ0QW5kUmlnaHRTcGFjZXMsIHRlbXBTY2FsZSkge1xyXG4gIHN2Zy5zZWxlY3RBbGwoJy5saWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpLnJlbW92ZSgpO1xyXG5cclxuICBsZXQgY2FsY3VsYXRlZFNjYWxlO1xyXG4gIGxldCBlbGVtZW50c0NvdW50ZXI7XHJcblxyXG4gIGRhdGEuZm9yRWFjaCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgIGVsZW1lbnRzQ291bnRlciA9IGtleXMubGVuZ3RoO1xyXG4gICAgICBjYWxjdWxhdGVkU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgXHJcbiAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBjb25zdCByZWR1Y2VkV2lkdGggPSBPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT09IDIgPyAyMDAgOiAzMDA7XHJcbiAgICAgICAgICBjb25zdCBvZmZzZXQgPSAoeC5iYW5kd2lkdGgoKSAtIHJlZHVjZWRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgY2FsY3VsYXRlZFNjYWxlLnJhbmdlKFtvZmZzZXQsIHguYmFuZHdpZHRoKCkgLSBvZmZzZXRdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMjtcclxuICAgICAgICAgIGNhbGN1bGF0ZWRTY2FsZS5yYW5nZShbb2Zmc2V0LCB4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHhQb3NpdGlvbiA9IHRoaXMuY2FsY3VsYXRlVG9vbHRpcFgoZCwgeCwgY2FsY3VsYXRlZFNjYWxlLCBtZXRhRGF0YSwgbGVmdEFuZFJpZ2h0U3BhY2VzKTtcclxuICBjb25zdCB3aWR0aCA9IHRoaXMuY2FsY3VsYXRlVG9vbHRpcFdpZHRoKGNhbGN1bGF0ZWRTY2FsZSwgbWV0YURhdGEsIGxlZnRBbmRSaWdodFNwYWNlcyk7XHJcblxyXG4gIHN2Zy5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgLmF0dHIoJ3gnLCB4UG9zaXRpb24pXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKVxyXG4gICAgLmF0dHIoJ3knLCB5KGQudmFsdWUpIC0gMyAtIDQwIC0gMTApXHJcbiAgICAuYXR0cignZHknLCBkLmNsYXNzKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgd2lkdGgpXHJcbiAgICAuYXR0cignaGVpZ2h0JywgNTApXHJcbiAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ3RpdGxlJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsIDk5KVxyXG4gICAgLmh0bWwoKCkgPT4gdGhpcy5nZW5lcmF0ZVRvb2x0aXBIVE1MKGQsIG1ldGFEYXRhKSk7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlVG9vbHRpcFgoZCwgeCwgY2FsY3VsYXRlZFNjYWxlLCBtZXRhRGF0YSwgbGVmdEFuZFJpZ2h0U3BhY2VzKSB7XHJcbiAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgaWYgKGNhbGN1bGF0ZWRTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgcmV0dXJuIHgoZC5uYW1lKSArIGNhbGN1bGF0ZWRTY2FsZShkLmtleSkgKyBjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgLyAyIC0gOTA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geChkLm5hbWUpICsgY2FsY3VsYXRlZFNjYWxlKGQua2V5KSAtIFxyXG4gICAgICAgICAgIChjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyKSAvIDIgKyBcclxuICAgICAgICAgICBjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgLyAyO1xyXG4gIH1cclxuICByZXR1cm4geChkLm5hbWUpICsgY2FsY3VsYXRlZFNjYWxlKGQua2V5KSAtIFxyXG4gICAgICAgICAoY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICsgXHJcbiAgICAgICAgIGNhbGN1bGF0ZWRTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlVG9vbHRpcFdpZHRoKGNhbGN1bGF0ZWRTY2FsZSwgbWV0YURhdGEsIGxlZnRBbmRSaWdodFNwYWNlcykge1xyXG4gIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgIGlmIChjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgIHJldHVybiAnMTgwcHgnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhbGN1bGF0ZWRTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDI7XHJcbiAgfVxyXG4gIHJldHVybiBjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG59XHJcblxyXG5wcml2YXRlIGdlbmVyYXRlVG9vbHRpcEhUTUwoZCwgbWV0YURhdGEpIHtcclxuICBjb25zdCBiYXJMYWJlbCA9IGQua2V5O1xyXG4gIGNvbnN0IGRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgfHwgJyc7XHJcbiAgY29uc3QgdmFsdWUgPSBkLnZhbHVlO1xyXG4gIFxyXG4gIGxldCBodG1sID0gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4ke2JhckxhYmVsfTwvc3Bhbj5gO1xyXG4gIGh0bWwgKz0gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLXZhbHVlXCI+PHNwYW4+JHt2YWx1ZX08L3NwYW4+JHtkYXRhVHlwZX08L3NwYW4+YDtcclxuICBcclxuICByZXR1cm4gaHRtbDtcclxufVxyXG5cclxucHJpdmF0ZSBoYW5kbGVNb3VzZU91dChzdmcpIHtcclxuICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxufVxyXG5cclxucHJpdmF0ZSByZW5kZXJZQXhpcyhzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgeSwgeUxpbmVBeGlzLCBsaW5lRGF0YSwgc2VsZiwgaXNyaWEsIG1hcmdpbikge1xyXG4gIC8vIEhpZGRlbiB5LWF4aXMgZm9yIHJlZmVyZW5jZVxyXG4gIHN2Zy5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0IHlheGlzLWRhc2hlZCcpXHJcbiAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgIC5jYWxsKHkpXHJcbiAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAvLyBMZWZ0IHktYXhpc1xyXG4gIHN2Z1lBeGlzTGVmdC5hcHBlbmQoJ2cnKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgLmNhbGwoZDMuYXhpc0xlZnQoeSlcclxuICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgLnRpY2tGb3JtYXQoKGQpID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIgXHJcbiAgICAgICAgICA/IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzTGFiZWxGb21hdHRlcihkKSBcclxuICAgICAgICAgIDogZDtcclxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkID49IDEwMDAgPyBmb3JtYXR0ZWQgLyAxMDAwICsgJ2snIDogZm9ybWF0dGVkO1xyXG4gICAgICB9KSlcclxuICAgIC5jYWxsKChnKSA9PiB7XHJcbiAgICAgIGcuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1kb21haW4tY29sb3IsICMwMDAwMDApJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTtcclxuICAgIH0pXHJcbiAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAvLyBSaWdodCB5LWF4aXMgKGhpZGRlbiBieSBkZWZhdWx0KVxyXG4gIHN2Z1lBeGlzUmlnaHQuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAuY2FsbCh5KVxyXG4gICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgLy8gTGluZSBjaGFydCBheGlzIGlmIGFwcGxpY2FibGVcclxuICBpZiAobGluZURhdGEgIT0gbnVsbCAmJiBsaW5lRGF0YSAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93TGluZUNoYXJ0QXhpcykge1xyXG4gICAgc3ZnWUF4aXNSaWdodC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQxJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUxpbmVBeGlzKTtcclxuICB9XHJcblxyXG4gIC8vIEFwcGx5IGF4aXMgdmlzaWJpbGl0eSBjb25maWd1cmF0aW9uc1xyXG4gIHRoaXMuYXBwbHlBeGlzVmlzaWJpbGl0eUNvbmZpZyhzZWxmKTtcclxufVxyXG5cclxucHJpdmF0ZSBhcHBseUF4aXNWaXNpYmlsaXR5Q29uZmlnKHNlbGYpIHtcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICBkMy5zZWxlY3RBbGwoJ2cubGliLWxpbmUteC1heGlzLXRleHQgPiBnID4gdGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICB9XHJcblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW4pIHtcclxuICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCA+IGcgPiB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNIaWRkZW4pIHtcclxuICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICB9XHJcblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkKSB7XHJcbiAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjOTk5OTk5KScpO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSByZW5kZXJBeGlzTGFiZWxzKHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBtZXRhRGF0YSwgd2lkdGgsIGhlaWdodCwgbWFyZ2luLCBzZWxmLCBpc3JpYSwgcmlnaHRTdmdXaWR0aCkge1xyXG4gIC8vIFktYXhpcyBsYWJlbFxyXG4gIGlmIChtZXRhRGF0YS55TGFiZWwpIHtcclxuICAgIGNvbnN0IHlQb3NpdGlvbiA9IGlzcmlhID8gMCAtIG1hcmdpbi5sZWZ0IC8gMiAtIDMwIDogMCAtIG1hcmdpbi5sZWZ0IC8gMiAtIDQwO1xyXG5cclxuICAgIHN2Z1lBeGlzTGVmdC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtOTApJylcclxuICAgICAgLmF0dHIoJ3knLCB5UG9zaXRpb24pXHJcbiAgICAgIC5hdHRyKCd4JywgMCAtIGhlaWdodCAvIDIpXHJcbiAgICAgIC5hdHRyKCdkeScsICcxZW0nKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgc3ZnWUF4aXNMZWZ0LnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICdzbWFsbGVyJylcclxuICAgICAgICAudGV4dChtZXRhRGF0YS55TGFiZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlsYWJlbC13ZWVrbHlDaGFydHMnKVxyXG4gICAgICAgIC50ZXh0KG1ldGFEYXRhLnlMYWJlbC50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFgtYXhpcyBsYWJlbFxyXG4gIGlmIChtZXRhRGF0YS54TGFiZWwpIHtcclxuICAgIGNvbnN0IGlzQWNyb255bSA9IHRoaXMuaXNMYWJlbEFjcm9ueW0obWV0YURhdGEueExhYmVsKTtcclxuICAgIGNvbnN0IHhQb3NpdGlvbiA9IGlzcmlhIFxyXG4gICAgICA/IChoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSkgXHJcbiAgICAgIDogKGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgNDApO1xyXG5cclxuICAgIHN2Zy5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCB0aGlzLmdldFhMYWJlbENsYXNzKHNlbGYpKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3dpZHRoIC8gMn0sJHt4UG9zaXRpb259KWApXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLnRleHQoaXNBY3JvbnltID8gbWV0YURhdGEueExhYmVsLnRvVXBwZXJDYXNlKCkgOiBtZXRhRGF0YS54TGFiZWwudG9Mb3dlckNhc2UoKSlcclxuICAgICAgLnN0eWxlKCd0ZXh0LXRyYW5zZm9ybScsIGlzQWNyb255bSA/ICdub25lJyA6ICdjYXBpdGFsaXplJyk7XHJcbiAgfVxyXG5cclxuICAvLyBMaW5lIHktYXhpcyBsYWJlbFxyXG4gIGlmIChtZXRhRGF0YS5saW5leUxhYmVsKSB7XHJcbiAgICBzdmdZQXhpc1JpZ2h0LmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBsaWItbGluZS1heGlzJylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApIHJvdGF0ZSg5MCknKVxyXG4gICAgICAuYXR0cigneScsIC0xMDApXHJcbiAgICAgIC5hdHRyKCd4JywgMTAwKVxyXG4gICAgICAuYXR0cignZHknLCAnNWVtJylcclxuICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICdzbWFsbGVyJylcclxuICAgICAgLnRleHQobWV0YURhdGEubGluZXlMYWJlbCk7XHJcbiAgfVxyXG5cclxuICAvLyBBcHBseSBkcmlsbGRvd24gY2hhcnQgc3BlY2lmaWMgc3R5bGVzXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgfVxyXG59XHJcblxyXG5wcml2YXRlIGlzTGFiZWxBY3JvbnltKGxhYmVsKSB7XHJcbiAgcmV0dXJuIChsYWJlbC5sZW5ndGggPD0gNCAmJiAvXltBLVpdKyQvLnRlc3QobGFiZWwpKSB8fFxyXG4gICAgICAgICAobGFiZWwgPT09IGxhYmVsLnRvVXBwZXJDYXNlKCkgJiYgL1tBLVpdLy50ZXN0KGxhYmVsKSk7XHJcbn1cclxuXHJcbnByaXZhdGUgZ2V0WExhYmVsQ2xhc3Moc2VsZikge1xyXG4gIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gIFxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteGxhYmVsLWRyaWxsZG93bmNoYXJ0cyc7XHJcbiAgfVxyXG4gIFxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteGxhYmVsLXdlZWtseUNoYXJ0cyc7XHJcbiAgfVxyXG4gIFxyXG4gIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbCc7XHJcbn1cclxuXHJcbnByaXZhdGUgcmVuZGVyVGFyZ2V0TGluZShzdmcsIHN2Z1lBeGlzUmlnaHQsIHksIHdpZHRoLCByaWdodFN2Z1dpZHRoLCBtZXRhRGF0YSwgc2VsZikge1xyXG4gIGNvbnN0IHlaZXJvID0geSh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpO1xyXG5cclxuICAvLyBEcmF3IHRhcmdldCBsaW5lXHJcbiAgc3ZnLmFwcGVuZCgnbGluZScpXHJcbiAgICAuYXR0cigneDEnLCAyMClcclxuICAgIC5hdHRyKCd4MicsIHdpZHRoKVxyXG4gICAgLmF0dHIoJ3kxJywgeVplcm8pXHJcbiAgICAuYXR0cigneTInLCB5WmVybylcclxuICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgLnN0eWxlKCdzdHJva2UnLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcik7XHJcblxyXG4gIC8vIEFkZCB0YXJnZXQgbGFiZWxcclxuICBjb25zdCBkYXRhVHlwZVRlbXAgPSBtZXRhRGF0YS5kYXRhVHlwZSB8fCAnJztcclxuICBjb25zdCB0YXJnZXRMaW5lTmFtZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldE5hbWUgfHwgJ3RhcmdldCc7XHJcblxyXG4gIHN2Z1lBeGlzUmlnaHQuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHt5WmVybyAtIDMwfSlgKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgIC5hdHRyKCdoZWlnaHQnLCA1MClcclxuICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAuYXR0cignY2xhc3MnLCAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAuaHRtbChgPGRpdj4ke3RhcmdldExpbmVOYW1lfTwvZGl2PjxkaXY+JHtzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXR9JHtkYXRhVHlwZVRlbXB9PC9kaXY+YCk7XHJcbn1cclxuXHJcbnByaXZhdGUgcmVuZGVyTGluZUNoYXJ0KHN2ZywgbGluZURhdGEsIHgsIGxpbmVZc2NhbGUsIG1ldGFEYXRhLCBzZWxmKSB7XHJcbiAgLy8gRHJhdyBsaW5lIHBhdGhcclxuICBzdmcuYXBwZW5kKCdwYXRoJylcclxuICAgIC5kYXR1bShsaW5lRGF0YSlcclxuICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxyXG4gICAgLmF0dHIoJ3N0cm9rZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDEuNSlcclxuICAgIC5hdHRyKCdkJywgZDMubGluZSgpXHJcbiAgICAgIC54KChkKSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLnkoKGQpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpKTtcclxuXHJcbiAgLy8gQWRkIGRvdHNcclxuICBjb25zdCBkb3QgPSBzdmcuc2VsZWN0QWxsKCdteUNpcmNsZXMnKVxyXG4gICAgLmRhdGEobGluZURhdGEpXHJcbiAgICAuZW50ZXIoKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAub24oJ2NsaWNrJywgKGQpID0+IHtcclxuICAgICAgaWYgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgfHwgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmIFxyXG4gICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSkpIHtcclxuICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgZG90LmFwcGVuZCgnY2lyY2xlJylcclxuICAgIC5hdHRyKCdmaWxsJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgLmF0dHIoJ2N4JywgKGQpID0+IHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgLmF0dHIoJ2N5JywgKGQpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpXHJcbiAgICAuc3R5bGUoJ2N1cnNvcicsICgpID0+IHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JylcclxuICAgIC5hdHRyKCdyJywgMyk7XHJcblxyXG4gIC8vIEFkZCB2YWx1ZSBsYWJlbHNcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpIHtcclxuICAgIGRvdC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnZG90JylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuYXR0cignY29sb3InLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgJ2ZvbnQtc2l6ZTogLjg1ZW0nKVxyXG4gICAgICAuYXR0cigneCcsIChkKSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLmF0dHIoJ3knLCAoZCkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgLmF0dHIoJ2R5JywgJy0xZW0nKVxyXG4gICAgICAudGV4dCgoZCkgPT4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSkpO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBoYW5kbGVab29tT3V0KHN2ZywgaGVpZ2h0LCBtYXJnaW4pIHtcclxuICBzdmcuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgLmVhY2goKGQsIGksIG5vZGVzKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRleHQgPSBkMy5zZWxlY3Qobm9kZXNbaV0pO1xyXG4gICAgICBjb25zdCBsYWJlbCA9IHRleHQudGV4dCgpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGxhYmVsLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcclxuICAgICAgICBjb25zdCBsaW5lcyA9IGxhYmVsLnNwbGl0KCdcXG4nKTtcclxuICAgICAgICB0ZXh0LnRleHQobnVsbCk7XHJcbiAgICAgICAgbGluZXMuZm9yRWFjaCgobGluZSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICB0ZXh0LmFwcGVuZCgndHNwYW4nKVxyXG4gICAgICAgICAgICAudGV4dChsaW5lKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgICAgICAgIC5hdHRyKCdkeScsIGlkeCA9PT0gMCA/ICcxZW0nIDogJzEuMWVtJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgd29yZHMgPSBsYWJlbC5zcGxpdCgnICcpO1xyXG4gICAgICAgIHRleHQudGV4dChudWxsKTtcclxuICAgICAgICB3b3Jkcy5mb3JFYWNoKCh3b3JkKSA9PiB7XHJcbiAgICAgICAgICB0ZXh0LmFwcGVuZCgndHNwYW4nKS50ZXh0KHdvcmQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBudWxsKTtcclxuXHJcbiAgc3ZnLnNlbGVjdCgnLngtYXhpcycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCAke2hlaWdodCAtIG1hcmdpbi5ib3R0b20gKyAxMH0pYCk7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlQ2hhcnREaW1lbnNpb25zKGNoYXJ0Q29udGFpbmVyOiBhbnksIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lcjogYW55LCBtYXJnaW46IGFueSwgc2VsZjogYW55KSB7XHJcbiAgbGV0IHdpZHRoID0gcGFyc2VJbnQoY2hhcnRDb250YWluZXIuc3R5bGUoJ3dpZHRoJykpIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XHJcbiAgY29uc3QgZGF0YUxlbmd0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoO1xyXG4gIGNvbnN0IHN1Ymdyb3Vwc0NvdW50ID0gKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmtleUxpc3QgYXMgYW55IHx8IFtdKS5sZW5ndGg7XHJcbiAgY29uc3QgaXNNb2JpbGUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDU3NjtcclxuICBjb25zdCBpc1RhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDU3NiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDk5MjtcclxuICBjb25zdCBpczJLID0gd2luZG93LmlubmVyV2lkdGggPj0gMjAwMCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDM4NDA7XHJcblxyXG4gIC8vIE1pbmltdW0gd2lkdGggcGVyIGJhciBncm91cCBiYXNlZCBvbiBkZXZpY2UgYW5kIG51bWJlciBvZiBzdWJncm91cHNcclxuICBjb25zdCBtaW5XaWR0aFBlckdyb3VwID0gKCgpID0+IHtcclxuICAgIGlmIChzdWJncm91cHNDb3VudCA+IDIpIHtcclxuICAgICAgcmV0dXJuIGlzTW9iaWxlID8gMTAwIDogaXNUYWJsZXQgPyAxMDAgOiAxMjA7IC8vIFdpZGVyIGZvciBtdWx0aXBsZSBzdWJncm91cHNcclxuICAgIH1cclxuICAgIHJldHVybiBpc01vYmlsZSA/IDQwIDogaXNUYWJsZXQgPyA2MCA6IDgwOyAvLyBOb3JtYWwgd2lkdGggZm9yIDEtMiBzdWJncm91cHNcclxuICB9KSgpO1xyXG5cclxuICAvLyBDYWxjdWxhdGUgbWluaW11bSByZXF1aXJlZCB3aWR0aCBmb3IgYWxsIGdyb3Vwc1xyXG4gIGNvbnN0IG1pblJlcXVpcmVkV2lkdGggPSBkYXRhTGVuZ3RoICogbWluV2lkdGhQZXJHcm91cDtcclxuXHJcbiAgLy8gSW4gem9vbWVkLW91dCBzdGF0ZSwgZW5zdXJlIG1pbmltdW0gd2lkdGggZm9yIHJlYWRhYmlsaXR5XHJcbiAgaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIC8vIElmIHdlIGhhdmUgbWFueSBncm91cHMgb3IgbXVsdGlwbGUgc3ViZ3JvdXBzLCBlbnN1cmUgbWluaW11bSB3aWR0aFxyXG4gICAgaWYgKGRhdGFMZW5ndGggPiA4IHx8IHN1Ymdyb3Vwc0NvdW50ID4gMikge1xyXG4gICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBtaW5SZXF1aXJlZFdpZHRoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEluIHpvb21lZC1pbiBzdGF0ZSwgYWx3YXlzIGVuc3VyZSBnZW5lcm91cyBzcGFjaW5nXHJcbiAgaWYgKGRhdGFMZW5ndGggPiA4ICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiZcclxuICAgICAgd2lkdGggPCBkYXRhTGVuZ3RoICogMjUwXHJcbiAgICApIHtcclxuICAgICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMjUwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gSW5jcmVhc2Ugd2lkdGggZm9yIG11bHRpcGxlIHN1Ymdyb3Vwc1xyXG4gICAgICB3aWR0aCA9IGRhdGFMZW5ndGggKiAoc3ViZ3JvdXBzQ291bnQgPiAyID8gMjAwIDogMTYwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0gSGVpZ2h0IExvZ2ljIChubyBjaGFuZ2UpIC0tLS1cclxuICBsZXQgaGVpZ2h0ID1cclxuICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpICpcclxuICAgICAgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAvIDEwMCkgLVxyXG4gICAgbWFyZ2luLnRvcCAtXHJcbiAgICBtYXJnaW4uYm90dG9tO1xyXG5cclxuICBpZiAoXHJcbiAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuXHJcbiAgKSB7XHJcbiAgICBoZWlnaHQgPVxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgIT09IDcwXHJcbiAgICAgICAgPyB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcclxuICAgICAgICA6IHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQgJiYgIXRoaXMuaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICBoZWlnaHQgPVxyXG4gICAgICBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKSAtXHJcbiAgICAgIG1hcmdpbi50b3AgLVxyXG4gICAgICBtYXJnaW4uYm90dG9tIC1cclxuICAgICAgMTMwO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgaGVpZ2h0ID1cclxuICAgICAgcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgLVxyXG4gICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgbWFyZ2luLmJvdHRvbSAtXHJcbiAgICAgIDEwMDtcclxuXHJcbiAgICBpZiAoaXMySykge1xyXG4gICAgICBoZWlnaHQgLT0gNjA7IC8vIHJlZHVjZSBhIGJpdCBtb3JlIGZvciAyS1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0IH07XHJcbn1cclxucHJpdmF0ZSBjcmVhdGVDaGFydENvbnRhaW5lcnMoXHJcbiAgY2hhcnRDb250YWluZXI6IGFueSxcclxuICBtYXJnaW46IGFueSxcclxuICBoZWlnaHQ6IG51bWJlcixcclxuICByaWdodFN2Z1dpZHRoOiBudW1iZXIsXHJcbiAgc2VsZjogYW55LFxyXG4gIHdpZHRoOiBudW1iZXJcclxuKSB7XHJcbiAgLy8gT3V0ZXIgY29udGFpbmVyXHJcbiAgY29uc3Qgb3V0ZXJDb250YWluZXIgPSBjaGFydENvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdpZCcsIHNlbGYudW5pcXVlSWQpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnb3V0ZXItY29udGFpbmVyJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAuc3R5bGUoJ2hlaWdodCcsIGhlaWdodClcclxuICAgIC5zdHlsZSgnb3ZlcmZsb3cnLCAndmlzaWJsZScpIC8vIEFsbG93IG92ZXJmbG93IHRvIHNob3cgc2Nyb2xsYmFyc1xyXG4gICAgLnN0eWxlKCdwYWRkaW5nLWxlZnQnLCBgJHttYXJnaW4ubGVmdH1weGApXHJcbiAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YClcclxuICAgIC5zdHlsZSgnbWFyZ2luLWxlZnQnLCAnMTVweCcpO1xyXG5cclxuICAvLyBMZWZ0IFktQXhpc1xyXG4gIGNvbnN0IHN2Z1lBeGlzTGVmdCA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgJzEwMCcpXHJcbiAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAxMClcclxuICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgLnN0eWxlKCd6LWluZGV4JywgMSlcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHttYXJnaW4ubGVmdCArIDE1fSwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICAvLyBSaWdodCBZLUF4aXNcclxuICBjb25zdCBzdmdZQXhpc1JpZ2h0ID0gb3V0ZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMTApXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgIC5zdHlsZSgncmlnaHQnLCAnMTJweCcpXHJcbiAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7IFxyXG5cclxuICAvLyBJbm5lciBzY3JvbGxhYmxlIGNvbnRhaW5lclxyXG4gIGNvbnN0IGlubmVyQ29udGFpbmVyID0gb3V0ZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnaW5uZXItY29udGFpbmVyJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpO1xyXG5cclxuICAvLyBNYWluIFNWR1xyXG4gIGNvbnN0IHN2ZyA9IGlubmVyQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgTWF0aC5tYXgod2lkdGggLSByaWdodFN2Z1dpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCAqIDAuOCkpIC8vIEVuc3VyZSBtaW5pbXVtIHdpZHRoXHJcbiAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyA2MClcclxuICAgIC5zdHlsZSgnbWluLXdpZHRoJywgJzEwMCUnKSAvLyBQcmV2ZW50IHN2ZyBmcm9tIHNocmlua2luZ1xyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gIHJldHVybiB7IG91dGVyQ29udGFpbmVyLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIGlubmVyQ29udGFpbmVyLCBzdmcgfTtcclxufVxyXG4gIGhhbmRsZUNsaWNrKGQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biB8fCBkPy50b2dnbGVGcm9tKVxyXG4gICAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChkKTtcclxuICB9XHJcbiAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkKSB7XHJcbiAgICB0aGlzLmhlYWRlck1lbnVjbGlja0V2ZW50LmVtaXQoaWQpO1xyXG4gIH1cclxuICBoYW5kbGVERDFDbGljayhldmVudCkge1xyXG4gICAgdGhpcy5pc0REMU9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5pc0REMk9wZW4gPSBmYWxzZTtcclxuICB9XHJcbiAgaGFuZGxlREQyQ2xpY2soZXZlbnQpIHtcclxuICAgIHRoaXMuaXNERDJPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNERDFPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG4gIGhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbihldmVudCkge1xyXG4gICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgI2dyb3VwY29udGFpbmVyXHJcbiAgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiXHJcbiAgW25nQ2xhc3NdPVwieyAnbGliLW5vLWJhY2tncm91bmQnOiBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCB9XCJcclxuICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcpO1wiXHJcbiAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlci1hbHRcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYyXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY2xpY2tFdmVudCk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjI+XHJcbiAgICA8bGliLWNoYXJ0LWhlYWRlci12M1xyXG4gICAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKGNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbik9XCJoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oJGV2ZW50KVwiXHJcbiAgICAgICh6b29tSW5ab29tT3V0Q2xpY2spPVwiaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKCRldmVudClcIlxyXG4gICAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mz5cclxuICA8L2Rpdj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12MVxyXG4gICAgW3RpdGxlXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS50aXRsZVwiXHJcbiAgICBbaGFzRHJpbGxEb3duXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd25cIlxyXG4gICAgW2lzRWRpdEVuYWJsZWRdPVwiY2hhcnREYXRhLm1ldGFEYXRhLmlzRWRpdEVuYWJsZWRcIlxyXG4gICAgW21lbnVPcHRpb25zXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5oZWFkZXJNZW51T3B0aW9uc1wiXHJcbiAgICBbaXNyaWFdPVwiY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhXCJcclxuICAgIFtzZWxlY3RlZEtwaVRvb2x0b3BdPVwiY2hhcnRDb25maWd1cmF0aW9uLnNlbGVjdGVkS3BpVG9vbHRvcFwiXHJcbiAgICAobWVudU9wdGlvbkNsaWNrRXZlbnQpPVwiaGFuZGxlSGVhZGVyTWVudUNsaWNrKCRldmVudClcIlxyXG4gICAgW2lzQWxlcnRFbmFibGVkXT1cImlzQWxlcnRFbmFibGVkXCJcclxuICAgICpuZ0lmPVwiaXNIZWFkZXJWaXNpYmxlXCJcclxuICA+PC9saWItY2hhcnQtaGVhZGVyLXYxPlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIGNoYXJ0RGF0YSAmJlxyXG4gICAgICBjaGFydERhdGEubWV0YURhdGEgJiZcclxuICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZEp1c3RpZmllZCAmJlxyXG4gICAgICBsZWdlbmRWaXNpYmxlICYmXHJcbiAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRBdFRvcFJpZ2h0XHJcbiAgICBcIlxyXG4gICAgY2xhc3M9XCJsZWdlbmQtaG9sZGVyLXJpZ2h0XCJcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLmZvb3RlckhlaWdodFwiXHJcbiAgPlxyXG4gICAgPHVsIGNsYXNzPVwiZGlzcGxheS1mbGV4XCI+XHJcbiAgICAgIDxsaVxyXG4gICAgICAgIGNsYXNzPVwibGVnZW5kcy1wb3NpdGlvbmluZy1pbmxpbmVcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMgfCBrZXl2YWx1ZSA6IGtlZXBPcmRlclwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3M9XCJsaWItZG9udXQtanVzdGlmaWVkLWxhYmVsLWljb24tZHJpbGxkb3duXCJcclxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgID48L3NwYW5cclxuICAgICAgICA+PHNwYW4+e3sgaXRlbS5rZXkgfX08L3NwYW4+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiXHJcbiAgICBpZD1cImdyb3VwY2hhcnRjb250YWluZXJcIlxyXG4gICAgI2dyb3VwY2hhcnRjb250YWluZXJcclxuICAgIGNsYXNzPVwibGliLWNoYXJ0LXN2Z1wiXHJcbiAgPjwvZGl2PlxyXG5cclxuXHJcbiAgPCEtLSA8ZGl2XHJcbiAgICAqbmdJZj1cIlxyXG4gICAgICBjaGFydERhdGEgJiZcclxuICAgICAgY2hhcnREYXRhLm1ldGFEYXRhICYmXHJcbiAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRKdXN0aWZpZWQgJiZcclxuICAgICAgbGVnZW5kVmlzaWJsZSAmJlxyXG4gICAgICAhY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZEF0VG9wUmlnaHRcclxuICAgIFwiXHJcbiAgICBjbGFzcz1cImxpYi1kb251dC1jaGFydC1mb290ZXJcIlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJjaGFydENvbmZpZ3VyYXRpb24uZm9vdGVySGVpZ2h0XCJcclxuICA+XHJcbiAgICA8dWwgY2xhc3M9XCJsaWItZG9udXQtanVzdGlmaWVkLWxhYmVsLXdyYXBwZXJcIj5cclxuICAgICAgPGxpXHJcbiAgICAgICAgY2xhc3M9XCJsaWItZG9udXQtanVzdGlmaWVkLWxhYmVsLWl0ZW1cIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMgfCBrZXl2YWx1ZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3M9XCJsaWItZG9udXQtanVzdGlmaWVkLWxhYmVsLWljb25cIlxyXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXRlbS52YWx1ZVwiXHJcbiAgICAgICAgPjwvc3BhblxyXG4gICAgICAgID48c3Bhbj57eyBpdGVtLmtleSB9fTwvc3Bhbj5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbiAgPC9kaXY+IC0tPlxyXG5cclxuXHJcbiAgPCEtLSA8ZGl2ICpuZ0lmPVwiY2hhcnRDb25maWd1cmF0aW9uPy5pc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b21cIj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJiYXItdmFsdWVzIGxpYi1kaXNwbGF5LWZsZXggbGliLWp1c3RpZnktY29udGVudC1jZW50ZXIgbGliLWFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgIGxldCBpdGVtIG9mIGNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMgfCBrZXl2YWx1ZSA6IGtlZXBPcmRlcjtcclxuICAgICAgICBsZXQgaSA9IGluZGV4XHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJiYXItbmFtZSBmb250LXNpemUtMVwiXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGNoYXJ0RGF0YS5kYXRhWzBdW2l0ZW0ua2V5XSAmJlxyXG4gICAgICAgICAgaSA8PSBjaGFydENvbmZpZ3VyYXRpb24uaG93bWFueUJhckRldGFpbHNUb0Rpc3BsYXlcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgaXRlbS5rZXkgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImJhci12YWx1ZSBsaWItZGlzcGxheS1mbGV4IGxpYi1hbGlnbi1pdGVtcy1jZW50ZXIgZm9udC1zaXplLTFcIlxyXG4gICAgICAgIFtzdHlsZS5jb2xvcl09XCJcclxuICAgICAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbi5iYXJWYXVsZUNvbG9yID8gYmFyVmF1bGVDb2xvciA6IGl0ZW0udmFsdWVcclxuICAgICAgICBcIlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBjaGFydERhdGEuZGF0YVswXVtpdGVtLmtleV0gJiZcclxuICAgICAgICAgIGkgPD0gY2hhcnRDb25maWd1cmF0aW9uLmhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5XHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGNoYXJ0RGF0YS5kYXRhWzBdW2l0ZW0ua2V5XSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PiAtLT5cclxuPC9kaXY+XHJcbiJdfQ==